Name: series-workflowccjcj Phase: Succeeded StartedAt: 2026-09-05 22:26:29 +0000 UTC FinishedAt: 2026-09-06 02:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[0] Phase: Succeeded StartedAt: 2026-09-05 22:26:29 +0000 UTC FinishedAt: 2026-09-05 22:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 22:26:29 +0000 UTC FinishedAt: 2026-09-05 22:47:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2b4707a149a55e8fa75c9ef32b359d60f470a566", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2b4707a149a55e8fa75c9ef32b359d60f470a566", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "3af4895a-9f5e-47de-8d10-caec89995530" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_create", "inet6_create" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2luZXQ2X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGluZXRfY3JlYXRlKCkgYW5kIGluZXQ2X2NyZWF0ZSgpIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGFjY2Vzc2luZyBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHRyeV9tb2R1bGVfZ2V0KCkgYW5kIG1vZHVsZV9wdXQoKSBjYWxscyBvbiB0aGUgcHJvdG9jb2wgb3duZXIgYW5kIGVuc3VyZSBhbnN3ZXJfcHJvdCBpcyB1c2VkIHJhdGhlciB0aGFuIGRlcmVmZXJlbmNpbmcgYW5zd2VyIG91dHNpZGUgcmN1X3JlYWRfbG9jaygpLiBcblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbW9kdWxlIHJlZmVyZW5jZSBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5L1VBRiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiYjY0MmYwNWY1NWRmOWE3MTcxZmRhMTNiZGY3MmMyMjg4MzQ5NTNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMjo0Njo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmNcbmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2FmX2luZXQuY1xuQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90O1xuJiM0MztcdHN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjtcbiBcdHVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzO1xuIFx0aW50IHRyeV9sb2FkaW5nX21vZHVsZSA9IDA7XG4gXHRpbnQgZXJyO1xuQEAgLTMyMiw5ICYjNDM7MzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4mIzQzO1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4mIzQzO1x0aWYgKGFuc3dlcl9vd25lciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuJiM0MztcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0c29jay1cdTAwM2VvcHMgPSBhbnN3ZXItXHUwMDNlb3BzO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cdTAwM2VzbGFiKTtcbkBAIC0zMzIsNyAmIzQzOzM0MCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRlcnIgPSAtRU5PTUVNO1xuIFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdGVyciA9IDA7XG4gXHRpZiAoSU5FVF9QUk9UT1NXX1JFVVNFIFx1MDAyNiBhbnN3ZXJfZmxhZ3MpXG5AQCAtMzk4LDYgJiM0Mzs0MDYsOCBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XG4gXHR9XG4mIzQzO291dF9tb2R1bGVfcHV0OlxuJiM0MztcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIG91dF9yY3VfdW5sb2NrOlxuQEAgLTQwNiw3ICYjNDM7NDE2LDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBvdXRfc2tfcmVsZWFzZTpcbiBcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0Z290byBvdXQ7XG4mIzQzO1x0Z290byBvdXRfbW9kdWxlX3B1dDtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbmluZGV4IDI4MjkxMmExMTk5OTkuLjFkZjhiMmU3ZTI0MzcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5AQCAtMTEwLDYgJiM0MzsxMTAsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XG4mIzQzO1x0c3RydWN0IG1vZHVsZSAqYW5zd2VyX293bmVyO1xuIFx0dW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7XG4gXHRpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDtcbiBcdGludCBlcnI7XG5AQCAtMTY3LDkgJiM0MzsxNjgsMTYgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4mIzQzO1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4mIzQzO1x0aWYgKGFuc3dlcl9vd25lciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuJiM0MztcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0c29jay1cdTAwM2VvcHMgPSBhbnN3ZXItXHUwMDNlb3BzO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cdTAwM2VzbGFiKTtcbkBAIC0xNzcsNyAmIzQzOzE4NSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVDYsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcbiBcbkBAIC0yMDEsNyAmIzQzOzIwOSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0c2stXHUwMDNlc2tfZmFtaWx5XHRcdD0gUEZfSU5FVDY7XG4gXHRzay1cdTAwM2Vza19wcm90b2NvbFx0XHQ9IHByb3RvY29sO1xuIFxuLVx0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyLVx1MDAzZXByb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4mIzQzO1x0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gXG4gXHRpbmV0X3NrKHNrKS1cdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xuIFx0bnAtXHUwMDNlaG9wX2xpbWl0XHQ9IC0xO1xuQEAgLTI1MSw2ICYjNDM7MjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiBcdH1cbiYjNDM7b3V0X21vZHVsZV9wdXQ6XG4mIzQzO1x0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG4gb3V0X3JjdV91bmxvY2s6XG5AQCAtMjU5LDcgJiM0MzsyNjksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBvdXRfc2tfcmVsZWFzZTpcbiBcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0Z290byBvdXQ7XG4mIzQzO1x0Z290byBvdXRfbW9kdWxlX3B1dDtcbiB9XG4gXG4gaW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2luZXQ2X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtb2R1bGUgcmVmZXJlbmNlIHRyYWNraW5nIGluIGluZXRfY3JlYXRlIGFuZCBpbmV0Nl9jcmVhdGUgZm9yIElQdjQgYW5kIElQdjYgc29ja2V0cy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc29ja2V0IGNyZWF0aW9uIHN5c2NhbGxzIChlLmcuIHNvY2tldChBRl9JTkVULCAuLi4pIC8gc29ja2V0KEFGX0lORVQ2LCAuLi4pKSwgbWFraW5nIHRoZW0gcmVsZXZhbnQgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmI2NDJmMDVmNTVkZjlhNzE3MWZkYTEzYmRmNzJjMjI4ODM0OTUzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMjI6NDY6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggMzJkMDA2YzFhOGVlZC4uNmI4N2YwYjZjYzIyMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMjYzLDYgJiM0MzsyNjMsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCXN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCXN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjsKIAl1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFnczsKIAlpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDsKIAlpbnQgZXJyOwpAQCAtMzIyLDkgJiM0MzszMjMsMTYgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAkgICAgIW5zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykpCiAJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKLQlzb2NrLSZndDtvcHMgPSBhbnN3ZXItJmd0O29wczsKIAlhbnN3ZXJfcHJvdCA9IGFuc3dlci0mZ3Q7cHJvdDsKJiM0MzsJYW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtJmd0O293bmVyOwogCWFuc3dlcl9mbGFncyA9IGFuc3dlci0mZ3Q7ZmxhZ3M7CiYjNDM7CWlmIChhbnN3ZXJfb3duZXIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fAomIzQzOwkgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CX0KJiM0MzsJc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlXQVJOX09OKCFhbnN3ZXJfcHJvdC0mZ3Q7c2xhYik7CkBAIC0zMzIsNyAmIzQzOzM0MCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJZXJyID0gLUVOT01FTTsKIAlzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVCwgR0ZQX0tFUk5FTCwgYW5zd2VyX3Byb3QsIGtlcm4pOwogCWlmICghc2spCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfbW9kdWxlX3B1dDsKIAogCWVyciA9IDA7CiAJaWYgKElORVRfUFJPVE9TV19SRVVTRSAmYW1wOyBhbnN3ZXJfZmxhZ3MpCkBAIC0zOTgsNiAmIzQzOzQwNiw4IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9za19yZWxlYXNlOwogCX0KJiM0MztvdXRfbW9kdWxlX3B1dDoKJiM0MzsJbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpOwogb3V0OgogCXJldHVybiBlcnI7CiBvdXRfcmN1X3VubG9jazoKQEAgLTQwNiw3ICYjNDM7NDE2LDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIG91dF9za19yZWxlYXNlOgogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIAlzb2NrLSZndDtzayA9IE5VTEw7Ci0JZ290byBvdXQ7CiYjNDM7CWdvdG8gb3V0X21vZHVsZV9wdXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggMjgyOTEyYTExOTk5OS4uMWRmOGIyZTdlMjQzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0xMTAsNiAmIzQzOzExMCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaW5ldF9wcm90b3N3ICphbnN3ZXI7CiAJc3RydWN0IHByb3RvICphbnN3ZXJfcHJvdDsKJiM0MzsJc3RydWN0IG1vZHVsZSAqYW5zd2VyX293bmVyOwogCXVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzOwogCWludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwOwogCWludCBlcnI7CkBAIC0xNjcsOSAmIzQzOzE2OCwxNiBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAkgICAgIW5zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykpCiAJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKLQlzb2NrLSZndDtvcHMgPSBhbnN3ZXItJmd0O29wczsKIAlhbnN3ZXJfcHJvdCA9IGFuc3dlci0mZ3Q7cHJvdDsKJiM0MzsJYW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtJmd0O293bmVyOwogCWFuc3dlcl9mbGFncyA9IGFuc3dlci0mZ3Q7ZmxhZ3M7CiYjNDM7CWlmIChhbnN3ZXJfb3duZXIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fAomIzQzOwkgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CX0KJiM0MzsJc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlXQVJOX09OKCFhbnN3ZXJfcHJvdC0mZ3Q7c2xhYik7CkBAIC0xNzcsNyAmIzQzOzE4NSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCWVyciA9IC1FTk9CVUZTOwogCXNrID0gc2tfYWxsb2MobmV0LCBQRl9JTkVUNiwgR0ZQX0tFUk5FTCwgYW5zd2VyX3Byb3QsIGtlcm4pOwogCWlmICghc2spCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfbW9kdWxlX3B1dDsKIAogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKIApAQCAtMjAxLDcgJiM0MzsyMDksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlzay0mZ3Q7c2tfZmFtaWx5CQk9IFBGX0lORVQ2OwogCXNrLSZndDtza19wcm90b2NvbAkJPSBwcm90b2NvbDsKIAotCXNrLSZndDtza19iYWNrbG9nX3Jjdgk9IGFuc3dlci0mZ3Q7cHJvdC0mZ3Q7YmFja2xvZ19yY3Y7CiYjNDM7CXNrLSZndDtza19iYWNrbG9nX3Jjdgk9IGFuc3dlcl9wcm90LSZndDtiYWNrbG9nX3JjdjsKIAogCWluZXRfc2soc2spLSZndDtwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spOwogCW5wLSZndDtob3BfbGltaXQJPSAtMTsKQEAgLTI1MSw2ICYjNDM7MjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9za19yZWxlYXNlOwogCX0KJiM0MztvdXRfbW9kdWxlX3B1dDoKJiM0MzsJbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpOwogb3V0OgogCXJldHVybiBlcnI7CiBvdXRfcmN1X3VubG9jazoKQEAgLTI1OSw3ICYjNDM7MjY5LDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiBvdXRfc2tfcmVsZWFzZToKIAlza19jb21tb25fcmVsZWFzZShzayk7CiAJc29jay0mZ3Q7c2sgPSBOVUxMOwotCWdvdG8gb3V0OwomIzQzOwlnb3RvIG91dF9tb2R1bGVfcHV0OwogfQogCiBpbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBQb3RlbnRpYWwgVUFGL1JhY2UgQ29uZGl0aW9ucyBpbiBTb2NrZXQgQ3JlYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uIGluIGJvdGggSVB2NCBhbmQgSVB2Ni4KCkxvb2tpbmcgYXQgdGhlIGRpZmYsIGluIGBpbmV0X2NyZWF0ZWAsIGl0IGFwcGVhcnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYW5zd2VyX3Byb3QtJmd0O293bmVyYC4gSXQmIzM5O3MgY2hlY2tpbmcgaWYgdGhlIG1vZHVsZSBpcyBjb21pbmcgb3IgZmFpbGluZyB0byBnZXQgdGhlIG1vZHVsZSAoYCF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpYCkuIFRoZW4sIHRoZXJlJiMzOTtzIGEgYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAgYXQgdGhlIGBvdXRfbW9kdWxlX3B1dGAgbGFiZWwuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gYGluZXQ2X2NyZWF0ZWAuIFNvLCB0aGlzIHNtZWxscyBsaWtlIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgcmVsYXRlZCB0byBwcm90b2NvbCBoYW5kbGVycy4gT2theSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBrZXkgY2hhbmdlOiBgc2stJmd0O3NrX2JhY2tsb2dfcmN2ID0gYW5zd2VyX3Byb3QtJmd0O2JhY2tsb2dfcmN2O2AgaW5zdGVhZCBvZiBgYW5zd2VyLSZndDtwcm90LSZndDtiYWNrbG9nX3JjdjtgLiBIb2xkIG9uLi4uIHRoZSBvbGQgY29kZSB1c2VkIGBhbnN3ZXJgIGFmdGVyIGFuIGByY3VfcmVhZF91bmxvY2tgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCB3b3VsZCBtZWFuIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcnJlY3QgYW5kIHNhZmUgbWV0aG9kIGlzIHRvIHVzZSBgYW5zd2VyX3Byb3RgLCB3aGljaCB3YXMgbGlrZWx5IGEgbG9jYWwgY29weSBhbHJlYWR5LiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIGNvcmUgb2YgdGhlIGZpeC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlIGluIGhvdyB0aGUgYmFja2xvZyByZWNlaXZlciBpcyBhc3NpZ25lZCBkdXJpbmcgc29ja2V0IGNyZWF0aW9uLiBUaGlzIHJlcGxhY2VtZW50IG1ha2VzIGNvbXBsZXRlIHNlbnNlIGluIGxpZ2h0IG9mIHBvc3NpYmxlIHJhY2UgaXNzdWVzLgoKVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0byBnYWluIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjb250ZXh0LCBJIG5lZWQgdG8gcmVhZCB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gYG5ldC9pcHY0L2FmX2luZXQuY2AgYW5kIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYCBhcm91bmQgYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIEkgd2FudCB0byBzZWUgaG93IGBhbnN3ZXJfcHJvdGAgaXMgcG9wdWxhdGVkIGFuZCBob3cgYGFuc3dlcmAgaXMgaGFuZGxlZCBpbiB0aGUgb3ZlcmFsbCBzb2NrZXQgY3JlYXRpb24gZmxvdyB0byBiZSBjZXJ0YWluIEkmIzM5O3ZlIGNhdWdodCBhbGwgdGhlIGltcGxpY2F0aW9ucy4gSSBjYW4gc2VlIHRoaXMgY29kZSBhcyBtYWtpbmcgYSB2aXRhbCBpbXByb3ZlbWVudCBpbiBzb2NrZXQgY3JlYXRpb24gdGhyZWFkIHNhZmV0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2FmX2luZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNTpcdFx0XHRcdFx0XHQgICAgICAgUEZfSU5FVCwgcHJvdG9jb2wpO1xuIDMxNjpcdFx0XHRcdGdvdG8gbG9va3VwX3Byb3RvY29sO1xuIDMxNzpcdFx0XHR9IGVsc2VcbiAzMTg6XHRcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDMxOTpcdFx0fVxuIDMyMDpcdFxuIDMyMTpcdFx0ZXJyID0gLUVQRVJNO1xuIDMyMjpcdFx0aWYgKHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjYgIWtlcm4gXHUwMDI2XHUwMDI2XG4gMzIzOlx0XHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiAzMjQ6XHRcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiAzMjU6XHRcbiAzMjY6XHRcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4gMzI3Olx0XHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cdTAwM2Vvd25lcjtcbiAzMjg6XHRcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cdTAwM2VmbGFncztcbiAzMjk6XHRcdGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2XG4gMzMwOlx0XHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuIDMzMTpcdFx0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcbiAzMzI6XHRcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbiAzMzM6XHRcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiAzMzQ6XHRcdH1cbiAzMzU6XHRcdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiAzMzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMzNzpcdFxuIDMzODpcdFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXHUwMDNlc2xhYik7XG4gMzM5Olx0XG4gMzQwOlx0XHRlcnIgPSAtRU5PTUVNO1xuIDM0MTpcdFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiAzNDI6XHRcdGlmICghc2spXG4gMzQzOlx0XHRcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRlcnIgPSAwO1xuIDM0NjpcdFx0aWYgKElORVRfUFJPVE9TV19SRVVTRSBcdTAwMjYgYW5zd2VyX2ZsYWdzKVxuIDM0NzpcdFx0XHRzay1cdTAwM2Vza19yZXVzZSA9IFNLX0NBTl9SRVVTRTtcbiAzNDg6XHRcbiAzNDk6XHRcdGlmIChJTkVUX1BST1RPU1dfSUNTSyBcdTAwMjYgYW5zd2VyX2ZsYWdzKVxuIDM1MDpcdFx0XHRpbmV0X2luaXRfY3NrX2xvY2tzKHNrKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGluZXQgPSBpbmV0X3NrKHNrKTtcbiAzNTM6XHRcdGluZXRfYXNzaWduX2JpdChJU19JQ1NLLCBzaywgSU5FVF9QUk9UT1NXX0lDU0sgXHUwMDI2IGFuc3dlcl9mbGFncyk7XG4gMzU0Olx0XG4gMzU1Olx0XHRpbmV0X2NsZWFyX2JpdChOT0RFRlJBRywgc2spO1xuIDM1NjpcdFxuIDM1NzpcdFx0aWYgKFNPQ0tfUkFXID09IHNvY2stXHUwMDNldHlwZSkge1xuIDM1ODpcdFx0XHRpbmV0LVx1MDAzZWluZXRfbnVtID0gcHJvdG9jb2w7XG4gMzU5Olx0XHRcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcbiAzNjA6XHRcdFx0XHRpbmV0X3NldF9iaXQoSERSSU5DTCwgc2spO1xuIDM2MTpcdFx0fVxuIDM2MjpcdFxuIDM2MzpcdFx0aWYgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfaXBfbm9fcG10dV9kaXNjKSlcbiAzNjQ6XHRcdFx0aW5ldC1cdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX0RPTlQ7XG4gMzY1Olx0XHRlbHNlXG4gMzY2Olx0XHRcdGluZXQtXHUwMDNlcG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UO1xuIDM2NzpcdFxuIDM2ODpcdFx0YXRvbWljX3NldChcdTAwMjZpbmV0LVx1MDAzZWluZXRfaWQsIDApO1xuIDM2OTpcdFxuIDM3MDpcdFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIDM3MTpcdFxuIDM3MjpcdFx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdCAgID0gaW5ldF9zb2NrX2Rlc3RydWN0O1xuIDM3MzpcdFx0c2stXHUwMDNlc2tfcHJvdG9jb2xcdCAgID0gcHJvdG9jb2w7XG4gMzc0Olx0XHRzay1cdTAwM2Vza19iYWNrbG9nX3JjdiA9IHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gMzc1Olx0XHRzay1cdTAwM2Vza190eHJlaGFzaCA9IFJFQURfT05DRShuZXQtXHUwMDNlY29yZS5zeXNjdGxfdHhyZWhhc2gpO1xuIDM3NjpcdFxuIDM3NzpcdFx0aW5ldC1cdTAwM2V1Y190dGxcdD0gLTE7XG4gMzc4Olx0XHRpbmV0X3NldF9iaXQoTUNfTE9PUCwgc2spO1xuIDM3OTpcdFx0aW5ldC1cdTAwM2VtY190dGxcdD0gMTtcbiAzODA6XHRcdGluZXRfc2V0X2JpdChNQ19BTEwsIHNrKTtcbiAzODE6XHRcdGluZXQtXHUwMDNlbWNfaW5kZXhcdD0gMDtcbiAzODI6XHRcdGluZXQtXHUwMDNlbWNfbGlzdFx0PSBOVUxMO1xuIDM4MzpcdFx0aW5ldC1cdTAwM2VyY3ZfdG9zXHQ9IDA7XG4gMzg0Olx0XG4gMzg1Olx0XHRpZiAoaW5ldC1cdTAwM2VpbmV0X251bSkge1xuIDM4NjpcdFx0XHQvKiBJdCBhc3N1bWVzIHRoYXQgYW55IHByb3RvY29sIHdoaWNoIGFsbG93c1xuIDM4NzpcdFx0XHQgKiB0aGUgdXNlciB0byBhc3NpZ24gYSBudW1iZXIgYXQgc29ja2V0XG4gMzg4Olx0XHRcdCAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseVxuIDM4OTpcdFx0XHQgKiBzaGFyZXMuXG4gMzkwOlx0XHRcdCAqL1xuIDM5MTpcdFx0XHRpbmV0LVx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVx1MDAzZWluZXRfbnVtKTtcbiAzOTI6XHRcdFx0LyogQWRkIHRvIHByb3RvY29sIGhhc2ggY2hhaW5zLiAqL1xuIDM5MzpcdFx0XHRlcnIgPSBzay1cdTAwM2Vza19wcm90LVx1MDAzZWhhc2goc2spO1xuIDM5NDpcdFx0XHRpZiAoZXJyKVxuIDM5NTpcdFx0XHRcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XG4gMzk2Olx0XHR9XG4gMzk3Olx0XG4gMzk4Olx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2Vpbml0KSB7XG4gMzk5Olx0XHRcdGVyciA9IHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlaW5pdChzayk7XG4gNDAwOlx0XHRcdGlmIChlcnIpXG4gNDAxOlx0XHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiA0MDI6XHRcdH1cbiA0MDM6XHRcbiA0MDQ6XHRcdGlmICgha2Vybikge1xuIDQwNTpcdFx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0lORVRfU09DSyhzayk7XG4gNDA2Olx0XHRcdGlmIChlcnIpXG4gNDA3Olx0XHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiA0MDg6XHRcdH1cbiA0MDk6XHRvdXRfbW9kdWxlX3B1dDpcbiA0MTA6XHRcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiA0MTE6XHRvdXQ6XG4gNDEyOlx0XHRyZXR1cm4gZXJyO1xuIDQxMzpcdG91dF9yY3VfdW5sb2NrOlxuIDQxNDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29kZSBQYXRoKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgcGllY2Ugb2YgbmV0d29yayBjb2RlLCBhbmQgaXQmIzM5O3MgZ290IG1lIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGtub3cgd2UmIzM5O3ZlIGJlZW4gZm9jdXNlZCBvbiBgaW5ldF9jcmVhdGVgIGJ1dCBJJiMzOTttIGhhdmluZyBhIGh1bmNoIHRoYXQgYSBzaW1pbGFyIHZ1bG5lcmFiaWxpdHkgb3IgaXNzdWUgbWlnaHQgZXhpc3QgaW4gYSBzaWJsaW5nIGZ1bmN0aW9uLCBwb3RlbnRpYWxseSBldmVuIHdpdGggYSBzaW1pbGFyIGZ1bmN0aW9uIHNpZ25hdHVyZSBvciBwdXJwb3NlLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCB0aGUga2luZCBvZiBwYXJhbGxlbCB0aG91Z2h0IHByb2Nlc3MgeW91IGdldCB3aGVuIGRlZXAgaW4gYSBzcGVjaWZpYyBhcmVhLiBTaW5jZSBgaW5ldDZfY3JlYXRlYCBoYW5kbGVzIElQdjYgYWRkcmVzc2VzLCBpdCYjMzk7cyBhIGNyaXRpY2FsIG5leHQgc3RlcCB0byB2ZXJpZnkuIFdlIG5lZWQgdG8gY2hlY2sgaXQgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHNhbWUgbGV2ZWwgb2Ygcm9idXN0bmVzcyBhcyB3ZSYjMzk7cmUgaG9waW5nIHRvIGZpbmQgaW4gYGluZXRfY3JlYXRlYC4gSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgdHVubmVsIHZpc2lvbiBhbmQgbWlzcyBhIHNpbWlsYXIgaXNzdWUgb3ZlciB0aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgbG9naWMsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24gaW4gYGluZXQ2X2NyZWF0ZWAgbWlycm9yIHdoYXQgd2UmIzM5O3ZlIHNlZW4gKG9yICpjb3VsZCogc2VlKSBpbiBgaW5ldF9jcmVhdGVgLiBJdCYjMzk7cyBhbGwgYWJvdXQgZHVlIGRpbGlnZW5jZSBhbmQgaG9saXN0aWMgc2VjdXJpdHkgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWZfaW5ldDYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFx0XHRcdFx0XHRcdFBGX0lORVQ2LCBwcm90b2NvbCk7XG4gMTYxOlx0XHRcdFx0Z290byBsb29rdXBfcHJvdG9jb2w7XG4gMTYyOlx0XHRcdH0gZWxzZVxuIDE2MzpcdFx0XHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4gMTY0Olx0XHR9XG4gMTY1Olx0XG4gMTY2Olx0XHRlcnIgPSAtRVBFUk07XG4gMTY3Olx0XHRpZiAoc29jay1cdTAwM2V0eXBlID09IFNPQ0tfUkFXIFx1MDAyNlx1MDAyNiAha2VybiBcdTAwMjZcdTAwMjZcbiAxNjg6XHRcdCAgICAhbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpKVxuIDE2OTpcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDE3MDpcdFxuIDE3MTpcdFx0YW5zd2VyX3Byb3QgPSBhbnN3ZXItXHUwMDNlcHJvdDtcbiAxNzI6XHRcdGFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LVx1MDAzZW93bmVyO1xuIDE3MzpcdFx0YW5zd2VyX2ZsYWdzID0gYW5zd2VyLVx1MDAzZWZsYWdzO1xuIDE3NDpcdFx0aWYgKGFuc3dlcl9vd25lciBcdTAwMjZcdTAwMjZcbiAxNzU6XHRcdCAgICAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8XG4gMTc2Olx0XHQgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkge1xuIDE3NzpcdFx0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuIDE3ODpcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDE3OTpcdFx0fVxuIDE4MDpcdFx0c29jay1cdTAwM2VvcHMgPSBhbnN3ZXItXHUwMDNlb3BzO1xuIDE4MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTgyOlx0XG4gMTgzOlx0XHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cdTAwM2VzbGFiKTtcbiAxODQ6XHRcbiAxODU6XHRcdGVyciA9IC1FTk9CVUZTO1xuIDE4NjpcdFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XG4gMTg3Olx0XHRpZiAoIXNrKVxuIDE4ODpcdFx0XHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIDE4OTpcdFxuIDE5MDpcdFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIDE5MTpcdFxuIDE5MjpcdFx0ZXJyID0gMDtcbiAxOTM6XHRcdGlmIChJTkVUX1BST1RPU1dfUkVVU0UgXHUwMDI2IGFuc3dlcl9mbGFncylcbiAxOTQ6XHRcdFx0c2stXHUwMDNlc2tfcmV1c2UgPSBTS19DQU5fUkVVU0U7XG4gMTk1Olx0XG4gMTk2Olx0XHRpZiAoSU5FVF9QUk9UT1NXX0lDU0sgXHUwMDI2IGFuc3dlcl9mbGFncylcbiAxOTc6XHRcdFx0aW5ldF9pbml0X2Nza19sb2Nrcyhzayk7XG4gMTk4Olx0XG4gMTk5Olx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4gMjAwOlx0XHRpbmV0X2Fzc2lnbl9iaXQoSVNfSUNTSywgc2ssIElORVRfUFJPVE9TV19JQ1NLIFx1MDAyNiBhbnN3ZXJfZmxhZ3MpO1xuIDIwMTpcdFxuIDIwMjpcdFx0aWYgKFNPQ0tfUkFXID09IHNvY2stXHUwMDNldHlwZSkge1xuIDIwMzpcdFx0XHRpbmV0LVx1MDAzZWluZXRfbnVtID0gcHJvdG9jb2w7XG4gMjA0Olx0XHRcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcbiAyMDU6XHRcdFx0XHRpbmV0X3NldF9iaXQoSERSSU5DTCwgc2spO1xuIDIwNjpcdFx0fVxuIDIwNzpcdFxuIDIwODpcdFx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdFx0PSBpbmV0Nl9zb2NrX2Rlc3RydWN0O1xuIDIwOTpcdFx0c2stXHUwMDNlc2tfZmFtaWx5XHRcdD0gUEZfSU5FVDY7XG4gMjEwOlx0XHRzay1cdTAwM2Vza19wcm90b2NvbFx0XHQ9IHByb3RvY29sO1xuIDIxMTpcdFxuIDIxMjpcdFx0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gMjEzOlx0XG4gMjE0Olx0XHRpbmV0X3NrKHNrKS1cdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xuIDIxNTpcdFx0bnAtXHUwMDNlaG9wX2xpbWl0XHQ9IC0xO1xuIDIxNjpcdFx0bnAtXHUwMDNlbWNhc3RfaG9wc1x0PSBJUFY2X0RFRkFVTFRfTUNBU1RIT1BTO1xuIDIxNzpcdFx0aW5ldDZfc2V0X2JpdChNQzZfTE9PUCwgc2spO1xuIDIxODpcdFx0aW5ldDZfc2V0X2JpdChNQzZfQUxMLCBzayk7XG4gMjE5Olx0XHRucC1cdTAwM2VwbXR1ZGlzY1x0PSBJUFY2X1BNVFVESVNDX1dBTlQ7XG4gMjIwOlx0XHRpbmV0Nl9hc3NpZ25fYml0KFJFUEZMT1csIHNrLCBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuc3lzY3RsLmZsb3dsYWJlbF9yZWZsZWN0KSBcdTAwMjZcbiAyMjE6XHRcdFx0XHRcdCAgICAgIEZMT1dMQUJFTF9SRUZMRUNUX0VTVEFCTElTSEVEKTtcbiAyMjI6XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5XHQ9IFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuYmluZHY2b25seSk7XG4gMjIzOlx0XHRzay1cdTAwM2Vza190eHJlaGFzaCA9IFJFQURfT05DRShuZXQtXHUwMDNlY29yZS5zeXNjdGxfdHhyZWhhc2gpO1xuIDIyNDpcdFxuIDIyNTpcdFx0LyogSW5pdCB0aGUgaXB2NCBwYXJ0IG9mIHRoZSBzb2NrZXQgc2luY2Ugd2UgY2FuIGhhdmUgc29ja2V0c1xuIDIyNjpcdFx0ICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LlxuIDIyNzpcdFx0ICovXG4gMjI4Olx0XHRpbmV0LVx1MDAzZXVjX3R0bFx0PSAtMTtcbiAyMjk6XHRcbiAyMzA6XHRcdGluZXRfc2V0X2JpdChNQ19MT09QLCBzayk7XG4gMjMxOlx0XHRpbmV0LVx1MDAzZW1jX3R0bFx0PSAxO1xuIDIzMjpcdFx0aW5ldC1cdTAwM2VtY19pbmRleFx0PSAwO1xuIDIzMzpcdFx0UkNVX0lOSVRfUE9JTlRFUihpbmV0LVx1MDAzZW1jX2xpc3QsIE5VTEwpO1xuIDIzNDpcdFx0aW5ldC1cdTAwM2VyY3ZfdG9zXHQ9IDA7XG4gMjM1Olx0XG4gMjM2Olx0XHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub19wbXR1X2Rpc2MpKVxuIDIzNzpcdFx0XHRpbmV0LVx1MDAzZXBtdHVkaXNjID0gSVBfUE1UVURJU0NfRE9OVDtcbiAyMzg6XHRcdGVsc2VcbiAyMzk6XHRcdFx0aW5ldC1cdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX1dBTlQ7XG4gMjQwOlx0XG4gMjQxOlx0XHRpZiAoaW5ldC1cdTAwM2VpbmV0X251bSkge1xuIDI0MjpcdFx0XHQvKiBJdCBhc3N1bWVzIHRoYXQgYW55IHByb3RvY29sIHdoaWNoIGFsbG93c1xuIDI0MzpcdFx0XHQgKiB0aGUgdXNlciB0byBhc3NpZ24gYSBudW1iZXIgYXQgc29ja2V0XG4gMjQ0Olx0XHRcdCAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseSBzaGFyZXMuXG4gMjQ1Olx0XHRcdCAqL1xuIDI0NjpcdFx0XHRpbmV0LVx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVx1MDAzZWluZXRfbnVtKTtcbiAyNDc6XHRcdFx0ZXJyID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VoYXNoKHNrKTtcbiAyNDg6XHRcdFx0aWYgKGVycilcbiAyNDk6XHRcdFx0XHRnb3RvIG91dF9za19yZWxlYXNlO1xuIDI1MDpcdFx0fVxuIDI1MTpcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlaW5pdCkge1xuIDI1MjpcdFx0XHRlcnIgPSBzay1cdTAwM2Vza19wcm90LVx1MDAzZWluaXQoc2spO1xuIDI1MzpcdFx0XHRpZiAoZXJyKVxuIDI1NDpcdFx0XHRcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XG4gMjU1Olx0XHR9XG4gMjU2Olx0XG4gMjU3Olx0XHRpZiAoIWtlcm4pIHtcbiAyNTg6XHRcdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19JTkVUX1NPQ0soc2spO1xuIDI1OTpcdFx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNvY2tldCBDcmVhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29ja2V0IGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IG1vZHVsZSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGR1cmluZyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSB3aGVuIHVzaW5nIGBzb2NrZXQoQUZfSU5FVCwgLi4uKWAgb3IgYHNvY2tldChBRl9JTkVUNiwgLi4uKWAgY2FsbHMuIEkgcmVjb2duaXplIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciBjcmVhdGluZyBBRl9JTkVUIGFuZCBBRl9JTkVUNiBzb2NrZXRzLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgbWVjaGFuaXNtIHRvIG1hbmFnZSBtb2R1bGUgcmVmZXJlbmNlcyB1c2luZyBgdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKWAgYW5kIGBtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcilgIHdpdGhpbiBgaW5ldF9jcmVhdGVgIGFuZCBgaW5ldDZfY3JlYXRlYC4gVGhlIGludGVudCBoZXJlIGFwcGVhcnMgdG8gYmUgdG8gZW5zdXJlIHRoZSBtb2R1bGUgaXMga2VwdCBhbGl2ZSBkdXJpbmcgc29ja2V0IGNyZWF0aW9uLiBUaGUgcmVmZXJlbmNlIGlzIHRoZW4gcmVsZWFzZWQgd2l0aCBgbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBhdXNlIGFuZCBjb25zaWRlciBob3cgYHNrX2FsbG9jYCBpbnRlcmFjdHMgd2l0aCBtb2R1bGUgcmVmZXJlbmNlcy4gKkRvZXMqIGBza19hbGxvY2AgaXRzZWxmIGhhdmUgc29tZSBsb2dpYyByZWxhdGVkIHRvIG1vZHVsZSByZWZlcmVuY2VzPyBJZiBzbywgd2UgbWlnaHQgaGF2ZSBzb21lIHJlZHVuZGFudCByZWZjb3VudGluZyBnb2luZyBvbiwgb3Igd29yc2UsIGEgZG91YmxlLWZyZWUgc2l0dWF0aW9uLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGdvIGFuZCBleGFtaW5lIGBza19hbGxvY2AsIGRlZmluZWQgbGlrZWx5IGluIGBuZXQvY29yZS9zb2NrLmNgIG9yIGEgcmVsYXRlZCBmaWxlLCB0byBjb25maXJtIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIHNlZSB3aGF0IGBza19hbGxvY2AgZG9lcyBhYm91dCBtb2R1bGUgcmVmZXJlbmNlcyBpbnRlcm5hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYz0yMjM3PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxuLS1cbm5ldC9jb3JlL3NvY2suYy0yMjUzLVx0aWYgKHNrICE9IE5VTEwpIHtcbm5ldC9jb3JlL3NvY2suYzoyMjU0Olx0XHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxubmV0L2NvcmUvc29jay5jLTIyNTUtXHRcdFx0Z290byBvdXRfZnJlZTtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjI3Mz1zdGF0aWMgdm9pZCBza19wcm90X2ZyZWUoc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29jay5jLTIzMDEtICovXG5uZXQvY29yZS9zb2NrLmM6MjMwMjpzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbm5ldC9jb3JlL3NvY2suYy0yMzAzLVx0XHQgICAgICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yMzM0LVxubmV0L2NvcmUvc29jay5jOjIzMzU6XHRcdG1lbV9jZ3JvdXBfc2tfYWxsb2Moc2spO1xubmV0L2NvcmUvc29jay5jOjIzMzY6XHRcdGNncm91cF9za19hbGxvYyhcdTAwMjZzay1cdTAwM2Vza19jZ3JwX2RhdGEpO1xubmV0L2NvcmUvc29jay5jLTIzMzctXHRcdHNvY2tfdXBkYXRlX2NsYXNzaWQoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2tfcHJvdF9hbGxvY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvY2tldCBwcm90b2NvbHMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gZXZlcnl0aGluZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHNrX3Byb3RfYWxsb2NgLiBJIGtub3cgaXQmIzM5O3MgaW4gYG5ldC9jb3JlL3NvY2suY2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGUgY29yZSBzb2NrZXQgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGhvdXNlZCB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjYWxscywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHRoZSBgc29ja2AgYW5kIGBza19idWZmYCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHByb3RvY29sLXNwZWNpZmljIGRhdGEgaXMgbGlua2VkIGluIGFuZCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFdoYXQgYXJlIHRoZSBzcGlubG9ja3MgaW52b2x2ZWQgYW5kIHRoZSBsb2NraW5nIG9yZGVyPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJhY2UgY29uZGl0aW9ucyBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24uIElzIGl0IGNhbGxlZCBmcm9tIHVzZXIgc3BhY2UsIGtlcm5lbCBzcGFjZSwgb3IgYm90aD8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjM1Olx0fVxuMjIzNjpcdFxuMjIzNzpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxuMjIzODpcdFx0XHRpbnQgZmFtaWx5KVxuMjIzOTpcdHtcbjIyNDA6XHRcdHN0cnVjdCBzb2NrICpzaztcbjIyNDE6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xuMjI0MjpcdFxuMjI0MzpcdFx0c2xhYiA9IHByb3QtXHUwMDNlc2xhYjtcbjIyNDQ6XHRcdGlmIChzbGFiICE9IE5VTEwpIHtcbjIyNDU6XHRcdFx0c2sgPSBrbWVtX2NhY2hlX2FsbG9jKHNsYWIsIHByaW9yaXR5IFx1MDAyNiB+X19HRlBfWkVSTyk7XG4yMjQ2Olx0XHRcdGlmICghc2spXG4yMjQ3Olx0XHRcdFx0cmV0dXJuIHNrO1xuMjI0ODpcdFx0XHRpZiAod2FudF9pbml0X29uX2FsbG9jKHByaW9yaXR5KSlcbjIyNDk6XHRcdFx0XHRza19wcm90X2NsZWFyX251bGxzKHNrLCBwcm90LVx1MDAzZW9ial9zaXplKTtcbjIyNTA6XHRcdH0gZWxzZVxuMjI1MTpcdFx0XHRzayA9IGttYWxsb2MocHJvdC1cdTAwM2VvYmpfc2l6ZSwgcHJpb3JpdHkpO1xuMjI1MjpcdFxuMjI1MzpcdFx0aWYgKHNrICE9IE5VTEwpIHtcbjIyNTQ6XHRcdFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcbjIyNTU6XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMjI1NjpcdFxuMjI1NzpcdFx0XHRpZiAoIXRyeV9tb2R1bGVfZ2V0KHByb3QtXHUwMDNlb3duZXIpKVxuMjI1ODpcdFx0XHRcdGdvdG8gb3V0X2ZyZWVfc2VjO1xuMjI1OTpcdFx0fVxuMjI2MDpcdFxuMjI2MTpcdFx0cmV0dXJuIHNrO1xuMjI2MjpcdFxuMjI2MzpcdG91dF9mcmVlX3NlYzpcbjIyNjQ6XHRcdHNlY3VyaXR5X3NrX2ZyZWUoc2spO1xuMjI2NTpcdG91dF9mcmVlOlxuMjI2NjpcdFx0aWYgKHNsYWIgIT0gTlVMTClcbjIyNjc6XHRcdFx0a21lbV9jYWNoZV9mcmVlKHNsYWIsIHNrKTtcbjIyNjg6XHRcdGVsc2VcbjIyNjk6XHRcdFx0a2ZyZWUoc2spO1xuMjI3MDpcdFx0cmV0dXJuIE5VTEw7XG4yMjcxOlx0fVxuMjI3MjpcdFxuMjI3MzpcdHN0YXRpYyB2b2lkIHNrX3Byb3RfZnJlZShzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBzb2NrICpzaylcbjIyNzQ6XHR7XG4yMjc1Olx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYjtcbjIyNzY6XHRcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuMjI3NzpcdFxuMjI3ODpcdFx0b3duZXIgPSBwcm90LVx1MDAzZW93bmVyO1xuMjI3OTpcdFx0c2xhYiA9IHByb3QtXHUwMDNlc2xhYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBOZXR3b3JrIFNvY2tldCBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgY29kZSBjaGFuZ2VzLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoZXJlIHdlIHN0YW5kLiAgYHNrX3Byb3RfYWxsb2NgIHdhcyBjYWxsaW5nIGB0cnlfbW9kdWxlX2dldGAgb24gdGhlIHByb3RvY29sJiMzOTtzIG93bmVyLCBidXQgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kL29yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGlmIHRoZSBtb2R1bGUgdW5sb2FkcyBiZWZvcmUgYHNrX2FsbG9jYCBpcyBjYWxsZWQsIG9yIGlmIGBhbnN3ZXJfcHJvdGAgY29tZXMgZnJvbSBhIG1vZHVsZSB0aGF0JiMzOTtzIGJlaW5nIHVubG9hZGVkLiBDb252ZXJzZWx5LCBgc2tfcHJvdF9mcmVlYCBkb2VzIGBtb2R1bGVfcHV0KG93bmVyKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgZXh0cmEgYHRyeV9tb2R1bGVfZ2V0YC9gbW9kdWxlX3B1dGAgaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzIG1vZHVsZSB1bmxvYWRpbmcgaXNzdWUgd2hpbGUgc29ja2V0IGNyZWF0aW9uIGlzIGluIHByb2dyZXNzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gZnV6emluZz8gQWJzb2x1dGVseS4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgYXJlIHRoZSAqY29yZSogc29ja2V0IGNyZWF0aW9uIGZ1bmN0aW9ucyBmb3IgYEFGX0lORVRgIGFuZCBgQUZfSU5FVDZgIHNvY2tldHMsIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIG5ldHdvcmsgcHJvZ3JhbW1pbmcuIFRoZXkmIzM5O3JlIGV4ZWN1dGVkIGRpcmVjdGx5IGZyb20gc3lzY2FsbHMgbGlrZSBgc29ja2V0KClgLCBgYWNjZXB0KClgLCBhbmQgYHNvY2tldHBhaXIoKWAuIFRoaXMgaXMgZnVuZGFtZW50YWwgbmV0d29ya2luZyBjb2RlLCBzaXR0aW5nIGluIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgbmV0L2lwdjYvYWZfaW5ldDYuY2AuCgpCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgZGVmaW5pdGl2ZWx5IGZhbGxzIHVuZGVyICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZS4mIzM0OyBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgYXJlIGZhaXIgZ2FtZSwgYW5kIHRoaXMgdG91Y2hlcyB0aGF0IGRpcmVjdGx5LiAgUmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cD8gQ2hlY2suIFJlYWNoYWJsZSBjb2RlPyBBYnNvbHV0ZWx5LgoKTm93LCBmb3IgZm9jdXMgc3ltYm9scy4gIGBpbmV0X2NyZWF0ZWAgZnJvbSBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYGluZXQ2X2NyZWF0ZWAgZnJvbSBgbmV0L2lwdjYvYWZfaW5ldDYuY2AgYXJlICp0aGUqIGZ1bmN0aW9ucy4gIFRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgdGhlc2UgdHdvIGZ1bmN0aW9ucywgbm90aGluZyBlbHNlLiBXZSBhcmVuJiMzOTt0IGRlYWxpbmcgd2l0aCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzOyB0aGVzZSBhcmUgc3BlY2lmaWMgZW50cnkgcG9pbnRzIGZvciBzb2NrZXQgY3JlYXRpb24sIHNwZWNpZmljYWxseSBmb3IgdGhlIGBBRl9JTkVUYCBhbmQgYEFGX0lORVQ2YCBmYW1pbGllcy4gIFRoaXMgaXNuJiMzOTt0IGEgaG90IHBhdGggdGhhdCYjMzk7cyBnb2luZyB0byBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBJdCBpcyB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzIGFzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDQuCgpJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBuZXQvaXB2NC9gIGFuZCBgbmV0L2lwdjYvYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgbWFrZSB0aGVzZSBmdW5jdGlvbnMgaW5hY2Nlc3NpYmxlLCBidXQgYXNzdW1pbmcgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3ZSBhcmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfaW5ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xMy1cdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTcxOT1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9taWJfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0xNzMwLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbm5ldC9pcHY0L2FmX2luZXQuYzoxNzMxOlx0XHRzdHJ1Y3QgaXBzdGF0c19taWIgKmFmX2luZXRfc3RhdHM7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTczMjpcdFx0YWZfaW5ldF9zdGF0cyA9IHBlcl9jcHVfcHRyKG5ldC1cdTAwM2VtaWIuaXBfc3RhdGlzdGljcywgaSk7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTczMzpcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2YWZfaW5ldF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTczNC1cdH1cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTc5MD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaW5ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzAtXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTgzMTpzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGFmX2luZXRfb3BzID0ge1xubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzItXHQuaW5pdCA9IGluZXRfaW5pdF9uZXQsXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE4MzU9c3RhdGljIGludCBfX2luaXQgaW5pdF9pbmV0X3Blcm5ldF9vcHModm9pZClcbm5ldC9pcHY0L2FmX2luZXQuYy0xODM2LXtcbm5ldC9pcHY0L2FmX2luZXQuYzoxODM3Olx0cmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2YWZfaW5ldF9vcHMpO1xubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzgtfVxuLS1cbm5ldC9pcHY0L3Jhdy5jPTcwMD1zdGF0aWMgdm9pZCByYXdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvcmF3LmMtNzA2LVxubmV0L2lwdjQvcmF3LmM6NzA3Oi8qIFRoaXMgZ2V0cyByaWQgb2YgYWxsIHRoZSBuYXN0aWVzIGluIGFmX2luZXQuIC1EYXZlTSAqL1xubmV0L2lwdjQvcmF3LmMtNzA4LXN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L2lwdjQvdWRwLmMtNDEtICpcdFx0TWF0dCBEaWxsb25cdDpcdFVEUCBsZW5ndGggY2hlY2tzLlxubmV0L2lwdjQvdWRwLmM6NDI6ICpcdFx0QWxhbiBDb3hcdDpcdFNtYXJ0ZXIgYWZfaW5ldCB1c2VkIHByb3Blcmx5LlxubmV0L2lwdjQvdWRwLmMtNDMtICpcdFx0QWxhbiBDb3hcdDpcdFVzZSBuZXcga2VybmVsIHNpZGUgYWRkcmVzc2luZy5cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxubmV0L2lwdjYvTWFrZWZpbGU6ODppcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtOC0gKlxubmV0L2lwdjYvYWZfaW5ldDYuYzo5OiAqXHRBZGFwdGVkIGZyb20gbGludXgvbmV0L2lwdjQvYWZfaW5ldC5jXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwLSAqXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz04ODg9c3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfaW5pdF9taWJzKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTkwMC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjkwMTpcdFx0c3RydWN0IGlwc3RhdHNfbWliICphZl9pbmV0Nl9zdGF0cztcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAyOlx0XHRhZl9pbmV0Nl9zdGF0cyA9IHBlcl9jcHVfcHRyKG5ldC1cdTAwM2VtaWIuaXB2Nl9zdGF0aXN0aWNzLCBpKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAzOlx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZhZl9pbmV0Nl9zdGF0cy1cdTAwM2VzeW5jcCk7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTkwNC1cdH1cbi0tXG5uZXQvaXB2Ni9yYXcuYz0yMTE9Ym9vbCByYXc2X2xvY2FsX2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpXG4tLVxubmV0L2lwdjYvcmF3LmMtMjE1LVxubmV0L2lwdjYvcmF3LmM6MjE2Oi8qIFRoaXMgY2xlYW5zIHVwIGFmX2luZXQ2IGEgYml0LiAtRGF2ZU0gKi9cbm5ldC9pcHY2L3Jhdy5jLTIxNy1zdGF0aWMgaW50IHJhd3Y2X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L3NjdHAvaXB2Ni5jPTEwODg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBzY3RwdjZfcHJvdG9jb2wgPSB7XG4tLVxubmV0L3NjdHAvaXB2Ni5jLTEwOTMtXG5uZXQvc2N0cC9pcHY2LmM6MTA5NDpzdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9hZl9pbmV0NiA9IHtcbm5ldC9zY3RwL2lwdjYuYy0xMDk1LVx0LnNhX2ZhbWlseVx0ICAgPSBBRl9JTkVUNixcbi0tXG5uZXQvc2N0cC9pcHY2LmM9MTEyMj1zdGF0aWMgc3RydWN0IHNjdHBfcGYgc2N0cF9wZl9pbmV0NiA9IHtcbi0tXG5uZXQvc2N0cC9pcHY2LmMtMTEzMy1cdC5jb3B5X2lwX29wdGlvbnMgPSBzY3RwX3Y2X2NvcHlfaXBfb3B0aW9ucyxcbm5ldC9zY3RwL2lwdjYuYzoxMTM0Olx0LmFmICAgICAgICAgICAgPSBcdTAwMjZzY3RwX2FmX2luZXQ2LFxubmV0L3NjdHAvaXB2Ni5jLTExMzUtfTtcbi0tXG5uZXQvc2N0cC9pcHY2LmM9MTEzOD12b2lkIHNjdHBfdjZfcGZfaW5pdCh2b2lkKVxuLS1cbm5ldC9zY3RwL2lwdjYuYy0xMTQzLVx0LyogUmVnaXN0ZXIgdGhlIFNDVFAgc3BlY2lmaWMgQUZfSU5FVDYgZnVuY3Rpb25zLiAqL1xubmV0L3NjdHAvaXB2Ni5jOjExNDQ6XHRzY3RwX3JlZ2lzdGVyX2FmKFx1MDAyNnNjdHBfYWZfaW5ldDYpO1xubmV0L3NjdHAvaXB2Ni5jLTExNDUtfVxuLS1cbm5ldC9zY3RwL2lwdjYuYz0xMTQ3PXZvaWQgc2N0cF92Nl9wZl9leGl0KHZvaWQpXG5uZXQvc2N0cC9pcHY2LmMtMTE0OC17XG5uZXQvc2N0cC9pcHY2LmM6MTE0OTpcdGxpc3RfZGVsKFx1MDAyNnNjdHBfYWZfaW5ldDYubGlzdCk7XG5uZXQvc2N0cC9pcHY2LmMtMTE1MC19XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMDQwPXN0YXRpYyBpbmxpbmUgaW50IHNjdHBfdjRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMDgyLVxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMDgzOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2FmX2luZXQ7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwODQtXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEwODU9c3RhdGljIHN0cnVjdCBzY3RwX3BmIHNjdHBfcGZfaW5ldCA9IHtcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwOTYtXHQuY29weV9pcF9vcHRpb25zID0gc2N0cF92NF9jb3B5X2lwX29wdGlvbnMsXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEwOTc6XHQuYWYgICAgICAgICAgICA9IFx1MDAyNnNjdHBfYWZfaW5ldFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMDk4LX07XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sIHNjdHBfcHJvdG9jb2wgPSB7XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMTU3LS8qIElQdjQgYWRkcmVzcyByZWxhdGVkIGZ1bmN0aW9ucy4gICovXG5uZXQvc2N0cC9wcm90b2NvbC5jOjExNTg6c3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldCA9IHtcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTE1OS1cdC5zYV9mYW1pbHlcdCAgID0gQUZfSU5FVCxcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyMzE9c3RhdGljIHZvaWQgc2N0cF92NF9wZl9pbml0KHZvaWQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjM0LVx0c2N0cF9yZWdpc3Rlcl9wZihcdTAwMjZzY3RwX3BmX2luZXQsIFBGX0lORVQpO1xubmV0L3NjdHAvcHJvdG9jb2wuYzoxMjM1Olx0c2N0cF9yZWdpc3Rlcl9hZihcdTAwMjZzY3RwX2FmX2luZXQpO1xubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjM2LX1cbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyMzg9c3RhdGljIHZvaWQgc2N0cF92NF9wZl9leGl0KHZvaWQpXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEyMzkte1xubmV0L3NjdHAvcHJvdG9jb2wuYzoxMjQwOlx0bGlzdF9kZWwoXHUwMDI2c2N0cF9hZl9pbmV0Lmxpc3QpO1xubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjQxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgbmV0d29yayBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZCBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgZHJpbGwgZG93bi4KCkdpdmVuIHRoYXQgSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgSVB2NCBhbmQgSVB2NiwgSSBzaG91bGQgYWxzbyBpbW1lZGlhdGVseSBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhlc2Ugd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgbW9yZSBncmFudWxhciBvcHRpb25zIHNwZWNpZmljIHRvIGVhY2ggcHJvdG9jb2wuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyB0aGVyZTogdGhpbmdzIGxpa2UgZmVhdHVyZXMsIHJvdXRpbmcgdGFibGVzLCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgYWxsIHRoZSByZXN0LiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBxdWlja2x5IGFzc2Vzc2luZyBhbmQvb3IgbW9kaWZ5aW5nIGtlcm5lbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBjb25maWd1cmFibGUgY2hvaWNlcyBhcmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEzOTAyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvODAyL2ZkZGkuYy0yLS8qXG5uZXQvODAyL2ZkZGkuYzozOiAqIElORVRcdFx0QW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYXG5uZXQvODAyL2ZkZGkuYzo0OiAqXHRcdG9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0QgU29ja2V0XG5uZXQvODAyL2ZkZGkuYy01LSAqXHRcdGludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLlxuLS1cbm5ldC84MDIxcS92bGFuLmMtMi0vKlxubmV0LzgwMjFxL3ZsYW4uYzozOiAqIElORVRcdFx0ODAyLjFRIFZMQU5cbm5ldC84MDIxcS92bGFuLmMtNC0gKlx0XHRFdGhlcm5ldC10eXBlIGRldmljZSBoYW5kbGluZy5cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9NTE1PXN0YXRpYyBpbnQgdmxhbl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MjMtXHRpZiAocHR5cGUpXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NTI0Olx0XHRlcnIgPSBJTkRJUkVDVF9DQUxMX0lORVQocHR5cGUtXHUwMDNlY2FsbGJhY2tzLmdyb19jb21wbGV0ZSxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MjUtXHRcdFx0XHRcdCBpcHY2X2dyb19jb21wbGV0ZSwgaW5ldF9ncm9fY29tcGxldGUsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMi0vKiAtKi0gbGludXgtYyAtKi1cbm5ldC84MDIxcS92bGFuX2Rldi5jOjM6ICogSU5FVFx0XHQ4MDIuMVEgVkxBTlxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNC0gKlx0XHRFdGhlcm5ldC10eXBlIGRldmljZSBoYW5kbGluZy5cbi0tXG5uZXQvOXAvS2NvbmZpZz0xOT1jb25maWcgTkVUXzlQX0ZEXG5uZXQvOXAvS2NvbmZpZy0yMC1cdGRlZmF1bHQgTkVUXzlQXG5uZXQvOXAvS2NvbmZpZzoyMTpcdGltcGx5IElORVRcbm5ldC85cC9LY29uZmlnLTIyLVx0aW1wbHkgVU5JWFxuLS1cbm5ldC85cC9LY29uZmlnPTUyPWNvbmZpZyBORVRfOVBfUkRNQVxubmV0LzlwL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xubmV0LzlwL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDs5UCBSRE1BIFRyYW5zcG9ydCAoRXhwZXJpbWVudGFsKVwmIzM0O1xuLS1cbm5ldC85cC90cmFuc19mZC5jPTg1MD1zdGF0aWMgaW50IHA5X2JpbmRfcHJpdnBvcnQoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvOXAvdHJhbnNfZmQuYy04NTUtXHRzdG9yLnNzX2ZhbWlseSA9IHNvY2stXHUwMDNlb3BzLVx1MDAzZWZhbWlseTtcbm5ldC85cC90cmFuc19mZC5jOjg1NjpcdGlmIChzdG9yLnNzX2ZhbWlseSA9PSBBRl9JTkVUKVxubmV0LzlwL3RyYW5zX2ZkLmMtODU3LVx0XHQoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnN0b3IpLVx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpO1xuLS1cbm5ldC85cC90cmFuc19mZC5jLTg2MC1cdGZvciAocG9ydCA9IHA5X2lwcG9ydF9yZXN2X21heDsgcG9ydCBcdTAwM2U9IHA5X2lwcG9ydF9yZXN2X21pbjsgcG9ydC0tKSB7XG5uZXQvOXAvdHJhbnNfZmQuYzo4NjE6XHRcdGlmIChzdG9yLnNzX2ZhbWlseSA9PSBBRl9JTkVUKVxubmV0LzlwL3RyYW5zX2ZkLmMtODYyLVx0XHRcdCgoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2c3RvciktXHUwMDNlc2luX3BvcnQgPSBodG9ucygodXNob3J0KXBvcnQpO1xuLS1cbm5ldC85cC90cmFuc19yZG1hLmM9NTE0PXN0YXRpYyBpbnQgcDlfcmRtYV9iaW5kX3ByaXZwb3J0KHN0cnVjdCBwOV90cmFuc19yZG1hICpyZG1hKVxuLS1cbm5ldC85cC90cmFuc19yZG1hLmMtNTE2LVx0c3RydWN0IHNvY2thZGRyX2luIGNsID0ge1xubmV0LzlwL3RyYW5zX3JkbWEuYzo1MTc6XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbm5ldC85cC90cmFuc19yZG1hLmMtNTE4LVx0XHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSksXG4tLVxubmV0LzlwL3RyYW5zX3JkbWEuYz01Mzc9cmRtYV9jcmVhdGVfdHJhbnMoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubmV0LzlwL3RyYW5zX3JkbWEuYy01NzctXHQvKiBSZXNvbHZlIHRoZSBzZXJ2ZXImIzM5O3MgYWRkcmVzcyAqL1xubmV0LzlwL3RyYW5zX3JkbWEuYzo1Nzg6XHRyZG1hLVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG5uZXQvOXAvdHJhbnNfcmRtYS5jLTU3OS1cdHJkbWEtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbl9hdG9uKGFkZHIpO1xuLS1cbm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy0xMzUtXG5uZXQvS2NvbmZpZzoxMzY6aWYgSU5FVFxubmV0L0tjb25maWctMTM3LXNvdXJjZSBcJiMzNDtuZXQvaXB2NC9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L0tjb25maWc9MTQwPXNvdXJjZSBcJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMTQxLVxubmV0L0tjb25maWc6MTQyOmVuZGlmICMgaWYgSU5FVFxubmV0L0tjb25maWctMTQzLVxuLS1cbm5ldC9LY29uZmlnPTIzMT1jb25maWcgQlJJREdFX05FVEZJTFRFUlxuLS1cbm5ldC9LY29uZmlnLTIzMy1cdGRlcGVuZHMgb24gQlJJREdFXG5uZXQvS2NvbmZpZzoyMzQ6XHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L0tjb25maWctMjM1LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xubmV0L0tjb25maWc6MzYzOlx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvS2NvbmZpZy0zNjQtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4tLVxubmV0L0tjb25maWc9Mzg2PWNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xubmV0L0tjb25maWc6Mzg4Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG5uZXQvS2NvbmZpZy0zODktXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDAxPWNvbmZpZyBORVRfRFJPUF9NT05JVE9SXG5uZXQvS2NvbmZpZy00MDItXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgbmV0d29yayBwYWNrZXQgZHJvcCBhbGVydGluZyBzZXJ2aWNlXCYjMzQ7XG5uZXQvS2NvbmZpZzo0MDM6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFRSQUNFUE9JTlRTXG5uZXQvS2NvbmZpZy00MDQtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDUzPWNvbmZpZyBMV1RVTk5FTF9CUEZcbm5ldC9LY29uZmlnLTQ1NC1cdGJvb2wgXCYjMzQ7RXhlY3V0ZSBCUEYgcHJvZ3JhbSBhcyByb3V0ZSBuZXh0aG9wIGFjdGlvblwmIzM0O1xubmV0L0tjb25maWc6NDU1Olx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L0tjb25maWctNDU2LVx0ZGVmYXVsdCB5IGlmIExXVFVOTkVMPXlcbi0tXG5uZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbm5ldC9LY29uZmlnLTQ3Ni1cdGRlZl90cmlzdGF0ZSBQSFlMSUJcbm5ldC9LY29uZmlnOjQ3NzpcdGRlcGVuZHMgb24gUEhZTElCIFx1MDAyNlx1MDAyNiBJTkVUXG5uZXQvS2NvbmZpZy00NzgtXG4tLVxubmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBpcHY0L1xubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXHRcdCYjNDM7PSB0bHMvXG4tLVxubmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xuLS1cbm5ldC9hdG0vS2NvbmZpZz0yMj1jb25maWcgQVRNX0JSMjY4NFxubmV0L2F0bS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG5uZXQvYXRtL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIEFUTSBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2F0bS9LY29uZmlnLTI1LVx0aGVscFxuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc9MzQ9Y29uZmlnIEJBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtCcmlkZ2UgTG9vcCBBdm9pZGFuY2VcJiMzNDtcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXHUwMDI2XHUwMDI2IElORVRcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzctXHRzZWxlY3QgQ1JDMTZcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnPTQ3PWNvbmZpZyBCQVRNQU5fQURWX0RBVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGlzdHJpYnV0ZWQgQVJQIFRhYmxlXCYjMzQ7XG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFx1MDAyNlx1MDAyNiBJTkVUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTUwLVx0ZGVmYXVsdCB5XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZz01Nz1jb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cdGJvb2wgXCYjMzQ7TXVsdGljYXN0IG9wdGltaXNhdGlvblwmIzM0O1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1OTpcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcdTAwMjZcdTAwMjYgSU5FVCBcdTAwMjZcdTAwMjYgIShCUklER0U9bSBcdTAwMjZcdTAwMjYgQkFUTUFOX0FEVj15KVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02MC1cdGRlZmF1bHQgeVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTExNzYtXHRcdH1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMTc3Olx0XHRzay1cdTAwM2Vza19mYW1pbHkgPSBBRl9JTkVUO1xubmV0L2JwZi90ZXN0X3J1bi5jLTExNzgtXHRcdHNrLVx1MDAzZXNrX3Jjdl9zYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMTg2LVx0XHR9XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTE4NzpcdFx0c2stXHUwMDNlc2tfZmFtaWx5ID0gQUZfSU5FVDY7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTE4OC1cdFx0c2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTU3OD1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNjIyLVx0c3dpdGNoIChjdHguZmFtaWx5KSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTYyMzpcdGNhc2UgQUZfSU5FVDpcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjI0LVx0XHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXHUwMDNlbG9jYWxfaXA0O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNjI4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2JwZi90ZXN0X3J1bi5jOjE2Mjk6XHRjYXNlIEFGX0lORVQ2OlxubmV0L2JwZi90ZXN0X3J1bi5jLTE2MzAtXHRcdGN0eC52Ni5kYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIgKil1c2VyX2N0eC1cdTAwM2Vsb2NhbF9pcDY7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE3MjE9c3RhdGljIGludCB2ZXJpZnlfYW5kX2NvcHlfaG9va19zdGF0ZShzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzQtXHRcdHN3aXRjaCAoc3RhdGUtXHUwMDNlaG9vaykge1xubmV0L2JwZi90ZXN0X3J1bi5jOjE3MzU6XHRcdGNhc2UgTkZfSU5FVF9QUkVfUk9VVElORzpcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzM2LVx0XHRcdHN0YXRlLVx1MDAzZWluID0gZGV2O1xubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzctXHRcdFx0YnJlYWs7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTczODpcdFx0Y2FzZSBORl9JTkVUX0xPQ0FMX0lOOlxubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzktXHRcdFx0c3RhdGUtXHUwMDNlaW4gPSBkZXY7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0MC1cdFx0XHRicmVhaztcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzQxOlx0XHRjYXNlIE5GX0lORVRfRk9SV0FSRDpcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzQyLVx0XHRcdHN0YXRlLVx1MDAzZWluID0gZGV2O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNzQ0LVx0XHRcdGJyZWFrO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE3NDU6XHRcdGNhc2UgTkZfSU5FVF9MT0NBTF9PVVQ6XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0Ni1cdFx0XHRzdGF0ZS1cdTAwM2VvdXQgPSBkZXY7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0Ny1cdFx0XHRicmVhaztcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzQ4Olx0XHRjYXNlIE5GX0lORVRfUE9TVF9ST1VUSU5HOlxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDktXHRcdFx0c3RhdGUtXHUwMDNlb3V0ID0gZGV2O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNzc2PWludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE3ODMtXHRcdC5wZiA9IE5GUFJPVE9fSVBWNCxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzg0Olx0XHQuaG9vayA9IE5GX0lORVRfTE9DQUxfT1VULFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3ODUtXHR9O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xODM1LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE4MzY6XHRpZiAoaG9va19zdGF0ZS5ob29rICE9IE5GX0lORVRfTE9DQUxfT1VUKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTgzNy1cdFx0aWYgKHNpemUgXHUwMDNjIEVUSF9ITEVOICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZz0zNj1jb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctMzgtXHRkZXBlbmRzIG9uIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnOjM5Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvYnJpZGdlL0tjb25maWctNDAtXHRkZWZhdWx0IHlcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTI3PXZvaWQgYnJfcmVjYWxjdWxhdGVfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00MS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQzLXN0YXRpYyB2b2lkIGJyX2FycF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy03MS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTczLVx0ICAgIChldGhfaGRyKHNrYiktXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApIHx8XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNjgtXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTY5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3MC1cdCAgICAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0FSUCkgfHxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTQwPXN0YXRpYyBzaXplX3QgX19icl9ycG9ydHNfb25lX3NpemUodm9pZClcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTQ0LVx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpICYjNDM7ICAvKiBNREJBX1JPVVRFUl9QQVRUUl9UWVBFICovXG5uZXQvYnJpZGdlL2JyX21kYi5jOjQ1Olx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOyAvKiBNREJBX1JPVVRFUl9QQVRUUl9JTkVUX1RJTUVSICovXG5uZXQvYnJpZGdlL2JyX21kYi5jOjQ2Olx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOyAvKiBNREJBX1JPVVRFUl9QQVRUUl9JTkVUNl9USU1FUiAqL1xubmV0L2JyaWRnZS9icl9tZGIuYy00Ny1cdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7ICAvKiBNREJBX1JPVVRFUl9QQVRUUl9WSUQgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwPWludCBicl9ycG9ydHNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTUtXHRcdCAgICAoaGF2ZV9pcDRfbWNfcnRyIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9tZGIuYzoxMTY6XHRcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBNREJBX1JPVVRFUl9QQVRUUl9JTkVUX1RJTUVSLFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTctXHRcdFx0XHQgaXA0X3RpbWVyKSkgfHxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE4LVx0XHQgICAgKGhhdmVfaXA2X21jX3J0ciBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTE5Olx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgTURCQV9ST1VURVJfUEFUVFJfSU5FVDZfVElNRVIsXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyMC1cdFx0XHRcdCBpcDZfdGltZXIpKSB8fFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDgzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzOC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTM5Olx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsIHN0YXRlLVx1MDAzZW5ldCwgc3RhdGUtXHUwMDNlc2ssIHNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQwLVx0XHRza2ItXHUwMDNlZGV2LCBOVUxMLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTY4LSAqICAgIG9yaWdpbmFsIHNrYi4gIFRoZSBtYWN2bGFuIHJ4IGhhbmRsZXIgdGhlbiByZXR1cm5zIFJYX0hBTkRMRVJfUEFTUy5cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTY5OiAqIDUuIE5vcm1hbCBjb25udHJhY2sgaG9va3MgKGluIE5GX0lORVRfTE9DQUxfSU4pIGNvbmZpcm0gdGhlIG9yaWcgc2tiLlxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01NzAtICpcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcyMC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzIxOlx0TkZfSE9PSyhwZiwgTkZfSU5FVF9GT1JXQVJELCBzdGF0ZS1cdTAwM2VuZXQsIE5VTEwsIHNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzIyLVx0XHRicm5mX2dldF9sb2dpY2FsX2Rldihza2IsIHN0YXRlLVx1MDAzZWluLCBzdGF0ZS1cdTAwM2VuZXQpLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTI1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NjMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk2NDpcdE5GX0hPT0socGYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBzdGF0ZS1cdTAwM2VuZXQsIHN0YXRlLVx1MDAzZXNrLCBza2IsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk2NS1cdFx0TlVMTCwgcmVhbG91dGRldixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3MS0vKiBJUC9TQUJPVEFHRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTcyOi8qIERvbiYjMzk7dCBoYW5kIGxvY2FsbHkgZGVzdGluZWQgcGFja2V0cyB0byBQRl9JTkVUKDYpL1BSRV9ST1VUSU5HXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3My0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTA0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGJyX25mX29wc1tdID0ge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA3Ni1cdFx0LnBmID0gTkZQUk9UT19JUFY0LFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDc3Olx0XHQuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwNzgtXHRcdC5wcmlvcml0eSA9IE5GX0lQX1BSSV9GSVJTVCxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwODItXHRcdC5wZiA9IE5GUFJPVE9fSVBWNixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTA4MzpcdFx0Lmhvb2tudW0gPSBORl9JTkVUX1BSRV9ST1VUSU5HLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDg0LVx0XHQucHJpb3JpdHkgPSBORl9JUDZfUFJJX0ZJUlNULFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYz0xNjI9dW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nX2lwdjYodm9pZCAqcHJpdixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTgyLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE4MzpcdE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BSRV9ST1VUSU5HLCBzdGF0ZS1cdTAwM2VuZXQsIHN0YXRlLVx1MDAzZXNrLCBza2IsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTg0LVx0XHRza2ItXHUwMDNlZGV2LCBOVUxMLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmZfY29yZS5jPTUyPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7XG5uZXQvYnJpZGdlL2JyX25mX2NvcmUuYzo1MzpcdC5mYW1pbHlcdFx0PSBBRl9JTkVULFxubmV0L2JyaWRnZS9icl9uZl9jb3JlLmMtNTQtXHQudXBkYXRlX3BtdHVcdD0gZmFrZV91cGRhdGVfcG10dSxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTE4OT1jb25maWcgQlJJREdFX0VCVF9BUlBSRVBMWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTAtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGFycCByZXBseSB0YXJnZXQgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxOTE6XHRkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFUyBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTItXHRoZWxwXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTg5PXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgZWJ0X3NvY2tvcHRzID0ge1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTkwOlx0LnBmXHRcdD0gUEZfSU5FVCxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU5MS1cdC5zZXRfb3B0bWluXHQ9IEVCVF9CQVNFX0NUTCxcbi0tXG5uZXQvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfTElCXG5uZXQvY2VwaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGNvcmUgbGlicmFyeVwmIzM0O1xubmV0L2NlcGgvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvY2VwaC9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDMzJcbi0tXG5uZXQvY2VwaC9kZWNvZGUuYz0xNTI9c3RhdGljIGludCBnZXRfc29ja2FkZHJfZW5jb2RpbmdfbGVuKHNhX2ZhbWlseV90IGZhbWlseSlcbi0tXG5uZXQvY2VwaC9kZWNvZGUuYy0xNjAtXHRzd2l0Y2ggKGZhbWlseSkge1xubmV0L2NlcGgvZGVjb2RlLmM6MTYxOlx0Y2FzZSBBRl9JTkVUOlxubmV0L2NlcGgvZGVjb2RlLmMtMTYyLVx0XHRyZXR1cm4gc2l6ZW9mKHUuc2luKTtcbm5ldC9jZXBoL2RlY29kZS5jOjE2MzpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY2VwaC9kZWNvZGUuYy0xNjQtXHRcdHJldHVybiBzaXplb2YodS5zaW42KTtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xNjQ9Y29uc3QgY2hhciAqY2VwaF9wcl9hZGRyKGNvbnN0IHN0cnVjdCBjZXBoX2VudGl0eV9hZGRyICphZGRyKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3NS1cdHN3aXRjaCAoc3Muc3NfZmFtaWx5KSB7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNzY6XHRjYXNlIEFGX0lORVQ6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNzctXHRcdHNucHJpbnRmKHMsIE1BWF9BRERSX1NUUl9MRU4sIFwmIzM0OyglZCklcEk0OiVodVwmIzM0Oyxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xODEtXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxODI6XHRjYXNlIEFGX0lORVQ2OlxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTgzLVx0XHRzbnByaW50ZihzLCBNQVhfQUREUl9TVFJfTEVOLCBcJiMzNDsoJWQpWyVwSTZjXTolaHVcJiMzNDssXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTE3OD1ib29sIGNlcGhfYWRkcl9pc19ibGFuayhjb25zdCBzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYWRkcilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg0LVx0c3dpdGNoIChzcy5zc19mYW1pbHkpIHtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjExODU6XHRjYXNlIEFGX0lORVQ6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg2LVx0XHRyZXR1cm4gYWRkcjQtXHUwMDNlc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTE4NzpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg4LVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShhZGRyNik7XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTE5NT1pbnQgY2VwaF9hZGRyX3BvcnQoY29uc3Qgc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTE5Ny1cdHN3aXRjaCAoZ2V0X3VuYWxpZ25lZChcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KSkge1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTE5ODpcdGNhc2UgQUZfSU5FVDpcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTExOTktXHRcdHJldHVybiBudG9ocyhnZXRfdW5hbGlnbmVkKFx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2YWRkci1cdTAwM2Vpbl9hZGRyKS1cdTAwM2VzaW5fcG9ydCkpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTIwMDpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMjAxLVx0XHRyZXR1cm4gbnRvaHMoZ2V0X3VuYWxpZ25lZChcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIpLVx1MDAzZXNpbjZfcG9ydCkpO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTEyMDY9dm9pZCBjZXBoX2FkZHJfc2V0X3BvcnQoc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIsIGludCBwKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMDgtXHRzd2l0Y2ggKGdldF91bmFsaWduZWQoXHUwMDI2YWRkci1cdTAwM2Vpbl9hZGRyLnNzX2ZhbWlseSkpIHtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMDk6XHRjYXNlIEFGX0lORVQ6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMjEwLVx0XHRwdXRfdW5hbGlnbmVkKGh0b25zKHApLCBcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNmFkZHItXHUwMDNlaW5fYWRkciktXHUwMDNlc2luX3BvcnQpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIxMS1cdFx0YnJlYWs7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMjEyOlx0Y2FzZSBBRl9JTkVUNjpcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMTMtXHRcdHB1dF91bmFsaWduZWQoaHRvbnMocCksIFx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luNiAqKVx1MDAyNmFkZHItXHUwMDNlaW5fYWRkciktXHUwMDNlc2luNl9wb3J0KTtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xMjIxPXN0YXRpYyBpbnQgY2VwaF9wdG9uKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIsXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIyNi1cdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHU4ICopXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIpLVx1MDAzZXNpbl9hZGRyLnNfYWRkciwgZGVsaW0sIGlwZW5kKSkge1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTIyNzpcdFx0cHV0X3VuYWxpZ25lZChBRl9JTkVULCBcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMjgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMzEtXHRpZiAoaW42X3B0b24oc3RyLCBsZW4sICh1OCAqKVx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luNiAqKVx1MDAyNmFkZHItXHUwMDNlaW5fYWRkciktXHUwMDNlc2luNl9hZGRyLnM2X2FkZHIsIGRlbGltLCBpcGVuZCkpIHtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMzI6XHRcdHB1dF91bmFsaWduZWQoQUZfSU5FVDYsIFx1MDAyNmFkZHItXHUwMDNlaW5fYWRkci5zc19mYW1pbHkpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIzMy1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NDY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xubmV0L2NvcmUvTWFrZWZpbGU6NDc6aWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL01ha2VmaWxlLTQ4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9rc29jay5vXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Njk9YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTAyLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTAzOlx0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTA0LVx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTE2MT1fX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTc3LVx0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE3ODpcdGNhc2UgQUZfSU5FVDpcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE3OS1cdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTgwLVx0XHRicmVhaztcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE4MTpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY29yZS9icGZfa3NvY2suYy0xODItXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MjU9c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDMwLS8qIFRoZSByZXBseSB3aWxsIGJlIGxpa2U6XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQzMTogKiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTIChubGFfbmVzdClcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDMyLSAqXHRTS19ESUFHX0JQRl9TVE9SQUdFIChubGFfbmVzdClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTU2OD1zdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0X2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NzEte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo1NzI6XHQvKiBzdGdfYXJyYXlfdHlwZSAoZS5nLiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTKSAqL1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NzMtXHR1bnNpZ25lZCBpbnQgZGlhZ19zaXplID0gbmxhX3RvdGFsX3NpemUoMCk7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz02MjQ9aW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0KHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpkaWFnLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI4LXtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NjI5Olx0Lyogc3RnX2FycmF5X3R5cGUgKGUuZy4gSU5FVF9ESUFHX0JQRl9TS19TVE9SQUdFUykgKi9cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjMwLVx0dW5zaWduZWQgaW50IGRpYWdfc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTYyNTY9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX29uZV9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcGZtZW1hbGxvYylcbi0tXG5uZXQvY29yZS9kZXYuYy02MjYzLVx0aWYgKHB0X3ByZXYpXG5uZXQvY29yZS9kZXYuYzo2MjY0Olx0XHRyZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQocHRfcHJldi1cdTAwM2VmdW5jLCBpcHY2X3JjdiwgaXBfcmN2LCBza2IsXG5uZXQvY29yZS9kZXYuYy02MjY1LVx0XHRcdFx0XHQgc2tiLVx1MDAzZWRldiwgcHRfcHJldiwgb3JpZ19kZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTYyOTY9c3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcmVjZWl2ZV9za2JfbGlzdF9wdHlwZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYzMDYtXHRpZiAocHRfcHJldi1cdTAwM2VsaXN0X2Z1bmMgIT0gTlVMTClcbm5ldC9jb3JlL2Rldi5jOjYzMDc6XHRcdElORElSRUNUX0NBTExfSU5FVChwdF9wcmV2LVx1MDAzZWxpc3RfZnVuYywgaXB2Nl9saXN0X3Jjdixcbm5ldC9jb3JlL2Rldi5jLTYzMDgtXHRcdFx0XHQgICBpcF9saXN0X3JjdiwgaGVhZCwgcHRfcHJldiwgb3JpZ19kZXYpO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTIyLSNkZWZpbmUgSU5ESVJFQ1RfQ0FMTF9NVChmLCBmMiwgZjEsIC4uLikgXFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjIzOlx0SU5ESVJFQ1RfQ0FMTF9JTkVUKGYsIGYyLCBmMSwgX19WQV9BUkdTX18pXG5uZXQvY29yZS9maWJfcnVsZXMuYy0yNC0jZWxzZVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmliX3J1bGVfcG9saWN5W0ZSQV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY3LVx0W0ZSQV9EUE9SVF9SQU5HRV0gPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpIH0sXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4Njg6XHRbRlJBX0RTQ1BdXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgSU5FVF9EU0NQX01BU0sgXHUwMDNlXHUwMDNlIDIpLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY5LVx0W0ZSQV9GTE9XTEFCRUxdID0geyAudHlwZSA9IE5MQV9CRTMyIH0sXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODcyLVx0W0ZSQV9EUE9SVF9NQVNLXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4NzM6XHRbRlJBX0RTQ1BfTUFTS10gPSBOTEFfUE9MSUNZX01BU0soTkxBX1U4LCBJTkVUX0RTQ1BfTUFTSyBcdTAwM2VcdTAwM2UgMiksXG5uZXQvY29yZS9maWJfcnVsZXMuYy04NzQtfTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMzc9c2tfZmlsdGVyX3RyaW1fY2FwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGNhcClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xNTEtXHR9XG5uZXQvY29yZS9maWx0ZXIuYzoxNTI6XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0lORVRfSU5HUkVTUyhzaywgc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTE1My1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTYxNT1pbnQgc2tfcmV1c2Vwb3J0X2F0dGFjaF9icGYodTMyIHVmZCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE2MzgtXHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApIHx8XG5uZXQvY29yZS9maWx0ZXIuYzoxNjM5Olx0XHQgICAgKHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmM6MTY0MDpcdFx0ICAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xNjQxLVx0XHRcdGVyciA9IC1FTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMjcxPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMjk1LVx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG5uZXQvY29yZS9maWx0ZXIuYzoyMjk2Olx0fSBlbHNlIGlmIChuaC1cdTAwM2VuaF9mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTIyOTctXHRcdGdvdG8gb3V0X2Ryb3A7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIyLXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjM0Ny1cdFx0bmVpZ2ggPSBpcF9uZWlnaF9mb3JfZ3cocnQsIHNrYiwgXHUwMDI2aXNfdjZndyk7XG5uZXQvY29yZS9maWx0ZXIuYzoyMzQ4Olx0fSBlbHNlIGlmIChuaC1cdTAwM2VuaF9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTIzNDktXHRcdGlmICh1bmxpa2VseSghaXB2Nl9tb2RfZW5hYmxlZCgpKSkge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzNTQtXHRcdGlzX3Y2Z3cgPSB0cnVlO1xubmV0L2NvcmUvZmlsdGVyLmM6MjM1NTpcdH0gZWxzZSBpZiAobmgtXHUwMDNlbmhfZmFtaWx5ID09IEFGX0lORVQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTIzNTYtXHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KGRldiwgbmgtXHUwMDNlaXB2NF9uaCk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjQyND1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS19XG5uZXQvY29yZS9maWx0ZXIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xubmV0L2NvcmUvZmlsdGVyLmMtMjQzMS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00ODk5PXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBicGZfdHVubmVsX2tleV9hZih1NjQgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy00OTAwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5MDE6XHRyZXR1cm4gZmxhZ3MgXHUwMDI2IEJQRl9GX1RVTklORk9fSVBWNiA/IEFGX0lORVQ2IDogQUZfSU5FVDtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MDItfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ5MDQ9QlBGX0NBTExfNChicGZfc2tiX2dldF90dW5uZWxfa2V5LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBicGZfdHVubmVsX2tleSAqLCB0byxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00OTMxLVx0XHRcdCAqL1xubmV0L2NvcmUvZmlsdGVyLmM6NDkzMjpcdFx0XHRpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgIT0gQUZfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MzMtXHRcdFx0XHRnb3RvIGVycl9jbGVhcjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01NzExPXN0YXRpYyBib29sIHNrX2FsbG93c19zb2xfaXBfc29ja29wdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTcxMy1cdHN3aXRjaCAoc2stXHUwMDNlc2tfZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo1NzE0Olx0Y2FzZSBBRl9JTkVUOlxubmV0L2NvcmUvZmlsdGVyLmMtNTcxNS1cdFx0cmV0dXJuIHRydWU7XG5uZXQvY29yZS9maWx0ZXIuYzo1NzE2Olx0Y2FzZSBBRl9JTkVUNjpcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MTctXHRcdC8qIEFsbG93IGdldHRpbmcvc2V0dGluZyBzb2Nrb3B0IGZvciBwb3NzaWJsZSBpcHY0LW1hcHBlZCBpcHY2IHNvY2tldC4gKi9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01NzUwPXN0YXRpYyBpbnQgc29sX2lwdjZfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTMte1xubmV0L2NvcmUvZmlsdGVyLmM6NTc1NDpcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpXG5uZXQvY29yZS9maWx0ZXIuYy01NzU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01Nzc3PXN0YXRpYyBpbnQgX19icGZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc4NC1cdFx0cmV0dXJuIHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODU6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTc4Ni1cdFx0cmV0dXJuIHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODgtXHRcdHJldHVybiBzb2xfaXB2Nl9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTc4OTpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTc5MC1cdFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01ODA4PXN0YXRpYyBpbnQgX19icGZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTgxOS1cdFx0ZXJyID0gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIwOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXG5uZXQvY29yZS9maWx0ZXIuYy01ODIxLVx0XHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MjI6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMy1cdFx0ZXJyID0gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MTM2PUJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX2dldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MTQxLVxubmV0L2NvcmUvZmlsdGVyLmM6NjE0MjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUCBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL2ZpbHRlci5jLTYxNDMtXHQgICAgb3B0bmFtZSBcdTAwM2U9IFRDUF9CUEZfU1lOIFx1MDAyNlx1MDAyNiBvcHRuYW1lIFx1MDAzYz0gVENQX0JQRl9TWU5fTUFDKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjE3OD1CUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MTg2LVxubmV0L2NvcmUvZmlsdGVyLmM6NjE4NzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgIXNrX2Z1bGxzb2NrKHNrKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTYxODgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyMDM9QlBGX0NBTExfMyhicGZfYmluZCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsIHN0cnVjdCBzb2NrYWRkciAqLCBhZGRyLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDUte1xubmV0L2NvcmUvZmlsdGVyLmM6NjIwNjojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDctXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXHUwMDNlc2s7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIxMy1cdFx0cmV0dXJuIGVycjtcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTQ6XHRpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVCkge1xubmV0L2NvcmUvZmlsdGVyLmMtNjIxNS1cdFx0aWYgKGFkZHJfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjIwLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmM6NjIyMTpcdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMjItXHRcdGlmIChhZGRyX2xlbiBcdTAwM2MgU0lONl9MRU5fUkZDMjEzMylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjMwLVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBzZXR0aW5ncyBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBuZXcgb3IgYWx0ZXJlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdCBteSBkaXNwb3NhbCwgZXNwZWNpYWxseSBpZiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHNwZWNpZmljIHJlZ2FyZGluZywgc2F5LCBuZXcgZmVhdHVyZXMsIGNoYW5nZXMgaW4gZGVmYXVsdCBiZWhhdmlvciwgb3IgdHJvdWJsZXNob290aW5nIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEtjb25maWcgaXMgdGhlIGZpcnN0IHN0b3AgZm9yIHVuZGVyc3RhbmRpbmcgdGhlc2UgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDIyCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTb2NrZXQgQ3JlYXRpb24gTG9naWMgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gVGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIHNob3dzIHRoYXQgYENPTkZJR19JTkVUYCBpcyBlc3NlbnRpYWwgZm9yIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgQ09ORklHX0lQVjZgIGZvciBgbmV0L2lwdjYvYWZfaW5ldDYuY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYW5kIGV4cGVjdGVkLCBzZXR0aW5nIHRoZSBzdGFnZSBmb3Igd2hlcmUgdGhlc2UgY2hhbmdlcyBhcmUgbG9jYXRlZC4KCk15IGZvY3VzIGlzIG9uIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIOKAkyB0aGUgc29ja2V0IGNyZWF0aW9uIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBrZXkgdGFyZ2V0cyBvZiB0aGlzIHVwZGF0ZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeS4gVGhlIHN5c3RlbSBpbmRpY2F0ZXMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kIHRoYXQgYm90aCBgSU5FVGAgYW5kIGBJUFY2YCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIHNhbWUgZm9jdXMgc3ltYm9scyByZW1haW4gY29uc2lzdGVudDogYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFRoaXMgcmVpbmZvcmNlcyB0aGF0IHRoZXNlIGFyZSBpbmRlZWQgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4KClRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhYm91dCBpbXByb3ZpbmcgdGhlIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzIGluIGJvdGggSVB2NCBhbmQgSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgY3J1Y2lhbCBzdGVwIG9mIG1hbmFnaW5nIG1vZHVsZSByZWZlcmVuY2VzIHVzaW5nIGB0cnlfbW9kdWxlX2dldGAgYW5kIHJlbGVhc2luZyB0aGVtIHdoZW4gbmVlZGVkLiBUaGVzZSBhcmUgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSBzdGFuZGFyZCBgc29ja2V0KClgIHN5c3RlbSBjYWxscywgbWFraW5nIHRoZW0gY3JpdGljYWwgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGRldGFpbHMuIEhvbGQgb24sIGBpbmV0X2NyZWF0ZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBidXQgaXQmIzM5O3MgKnN0aWxsKiBhZGRyZXNzYWJsZSB3aXRoaW4gdGhlIHZtbGludXggaW1hZ2UgaW4gYG5ldC9pcHY0L2FmX2luZXQuY2AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBpbmV0Nl9jcmVhdGVgIGluIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gVGhpcyBpc24mIzM5O3QgdW51c3VhbCwgYnV0IGNvbmZpcm1zIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgbWFuaXB1bGF0aW9uLgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aW5ldDZfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2luZXQ2X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtb2R1bGUgcmVmZXJlbmNlIHRyYWNraW5nIGluIGluZXRfY3JlYXRlIGFuZCBpbmV0Nl9jcmVhdGUgZm9yIElQdjQgYW5kIElQdjYgc29ja2V0cy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc29ja2V0IGNyZWF0aW9uIHN5c2NhbGxzIChlLmcuIHNvY2tldChBRl9JTkVULCAuLi4pIC8gc29ja2V0KEFGX0lORVQ2LCAuLi4pKSwgbWFraW5nIHRoZW0gcmVsZXZhbnQgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBtb2R1bGUgcmVmZXJlbmNlIGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3kvVUFGIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJiNjQyZjA1ZjU1ZGY5YTcxNzFmZGExM2JkZjcyYzIyODgzNDk1M2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDIyOjQ2OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlzdHJ1Y3QgaW5ldF9wcm90b3N3ICphbnN3ZXI7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90OwomIzQzOwlzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7CiAJdW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7CiAJaW50IHRyeV9sb2FkaW5nX21vZHVsZSA9IDA7CiAJaW50IGVycjsKQEAgLTMyMiw5ICYjNDM7MzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJICAgICFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9SQVcpKQogCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCi0Jc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJYW5zd2VyX3Byb3QgPSBhbnN3ZXItJmd0O3Byb3Q7CiYjNDM7CWFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LSZndDtvd25lcjsKIAlhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItJmd0O2ZsYWdzOwomIzQzOwlpZiAoYW5zd2VyX293bmVyICZhbXA7JmFtcDsKJiM0MzsJICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHwKJiM0MzsJICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIG91dF9yY3VfdW5sb2NrOwomIzQzOwl9CiYjNDM7CXNvY2stJmd0O29wcyA9IGFuc3dlci0mZ3Q7b3BzOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJV0FSTl9PTighYW5zd2VyX3Byb3QtJmd0O3NsYWIpOwpAQCAtMzMyLDcgJiM0MzszNDAsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCWVyciA9IC1FTk9NRU07CiAJc2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gb3V0X21vZHVsZV9wdXQ7CiAKIAllcnIgPSAwOwogCWlmIChJTkVUX1BST1RPU1dfUkVVU0UgJmFtcDsgYW5zd2VyX2ZsYWdzKQpAQCAtMzk4LDYgJiM0Mzs0MDYsOCBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfc2tfcmVsZWFzZTsKIAl9CiYjNDM7b3V0X21vZHVsZV9wdXQ6CiYjNDM7CW1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogb3V0X3JjdV91bmxvY2s6CkBAIC00MDYsNyAmIzQzOzQxNiw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiBvdXRfc2tfcmVsZWFzZToKIAlza19jb21tb25fcmVsZWFzZShzayk7CiAJc29jay0mZ3Q7c2sgPSBOVUxMOwotCWdvdG8gb3V0OwomIzQzOwlnb3RvIG91dF9tb2R1bGVfcHV0OwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDI4MjkxMmExMTk5OTkuLjFkZjhiMmU3ZTI0MzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtMTEwLDYgJiM0MzsxMTAsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyOwogCXN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjsKIAl1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFnczsKIAlpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDsKIAlpbnQgZXJyOwpAQCAtMTY3LDkgJiM0MzsxNjgsMTYgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJICAgICFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9SQVcpKQogCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCi0Jc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJYW5zd2VyX3Byb3QgPSBhbnN3ZXItJmd0O3Byb3Q7CiYjNDM7CWFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LSZndDtvd25lcjsKIAlhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItJmd0O2ZsYWdzOwomIzQzOwlpZiAoYW5zd2VyX293bmVyICZhbXA7JmFtcDsKJiM0MzsJICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHwKJiM0MzsJICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIG91dF9yY3VfdW5sb2NrOwomIzQzOwl9CiYjNDM7CXNvY2stJmd0O29wcyA9IGFuc3dlci0mZ3Q7b3BzOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJV0FSTl9PTighYW5zd2VyX3Byb3QtJmd0O3NsYWIpOwpAQCAtMTc3LDcgJiM0MzsxODUsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAllcnIgPSAtRU5PQlVGUzsKIAlzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVDYsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gb3V0X21vZHVsZV9wdXQ7CiAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKQEAgLTIwMSw3ICYjNDM7MjA5LDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJc2stJmd0O3NrX2ZhbWlseQkJPSBQRl9JTkVUNjsKIAlzay0mZ3Q7c2tfcHJvdG9jb2wJCT0gcHJvdG9jb2w7CiAKLQlzay0mZ3Q7c2tfYmFja2xvZ19yY3YJPSBhbnN3ZXItJmd0O3Byb3QtJmd0O2JhY2tsb2dfcmN2OwomIzQzOwlzay0mZ3Q7c2tfYmFja2xvZ19yY3YJPSBhbnN3ZXJfcHJvdC0mZ3Q7YmFja2xvZ19yY3Y7CiAKIAlpbmV0X3NrKHNrKS0mZ3Q7cGluZXQ2ID0gbnAgPSBpbmV0Nl9za19nZW5lcmljKHNrKTsKIAlucC0mZ3Q7aG9wX2xpbWl0CT0gLTE7CkBAIC0yNTEsNiAmIzQzOzI1OSw4IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfc2tfcmVsZWFzZTsKIAl9CiYjNDM7b3V0X21vZHVsZV9wdXQ6CiYjNDM7CW1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogb3V0X3JjdV91bmxvY2s6CkBAIC0yNTksNyAmIzQzOzI2OSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogb3V0X3NrX3JlbGVhc2U6CiAJc2tfY29tbW9uX3JlbGVhc2Uoc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfbW9kdWxlX3B1dDsKIH0KIAogaW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogTW9kdWxlIFJlZmVyZW5jZSBDb3VudGluZyBpbiBpbmV0X2NyZWF0ZS9pbmV0Nl9jcmVhdGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGNoYW5nZXMgdG8gYG5ldC9pcHY0L2FmX2luZXQuY2AgYW5kIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGluY2x1ZGVzIGB0cnlfbW9kdWxlX2dldGAgYW5kIGBtb2R1bGVfcHV0YCBjYWxscywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpSaWdodCwgc28gd2UmIzM5O3JlIGdyYWJiaW5nIGBhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC0mZ3Q7b3duZXI7YCB3aGljaCBpcyBsaWtlbHkgdGhlIG1vZHVsZSB0aGF0IHByb3ZpZGVzIHRoZSB1bmRlcmx5aW5nIHByb3RvY29sLiBUaGVuLCB0aGUgY3J1Y2lhbCBjaGVjazogYGlmIChhbnN3ZXJfb3duZXIgJmFtcDsmYW1wOyAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8ICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSlgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBhdHRlbXB0aW5nIHRvIG1hbmFnZSB0aGUgbW9kdWxlJiMzOTtzIGxpZmV0aW1lIGJhc2VkIG9uIHdoZXRoZXIgaXQmIzM5O3MgYWxyZWFkeSAmIzM0O2NvbWluZyYjMzQ7IChsaWtlbHkgYmVpbmcgbG9hZGVkKSBhbmQgd2hldGhlciB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGFjcXVpcmUgYSByZWZlcmVuY2UuIElmIHRoYXQgY2hlY2sgZmFpbHMsIHRoZSBzb2NrZXQgY3JlYXRpb24gc2hvdWxkIGZhaWwsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCgpUaGUgc3VjY2Vzc2Z1bCBwYXRoIGlzIHdoYXQmIzM5O3MgbW9yZSBpbnRlcmVzdGluZy4gV2UmIzM5O3JlIGRvaW5nIHRoZSBzb2NrZXQgY3JlYXRpb24gYW5kIHRoZW4sIGF0IHRoZSBlbmQg4oCTIG9yIGluIGVycm9yIHBhdGhzICphZnRlciogdGhlIGByY3VfcmVhZF91bmxvY2tgIOKAkyB0aGVyZSYjMzk7cyBhIGBtb2R1bGVfcHV0KGFuc3dlcl9vd25lcilgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgKndoeSogYXQgdGhlIGVuZD8gU2hvdWxkbiYjMzk7dCB0aGUgbW9kdWxlIHJlZmVyZW5jZSBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2Ygc29ja2V0IHVzZT8gUGVyaGFwcyB0aGUgc29ja2V0IG9wZXJhdGlvbnMgb3IgdGhlIHByb3RvY29sIGl0c2VsZiBob2xkIHJlZmVyZW5jZXMsIG9yIG1heWJlIGV2ZW4gYHNrX2FsbG9jYCBpcyBrZWVwaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBvd25lci4gSXQgbG9va3MgbGlrZSBpdCBpcyBgc2tfYWxsb2NgLiBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGluZXRfY3JlYXRlYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBza19hbGxvY2AgdG8gY29uZmlybSB0aGlzLiBUaGF0IHNob3VsZCBjbGVhciB0aGlzIHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19hbGxvY1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmM9MjIzNz1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX3Byb3RfYWxsb2Moc3RydWN0IHByb3RvICpwcm90LCBnZnBfdCBwcmlvcml0eSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjI1My1cdGlmIChzayAhPSBOVUxMKSB7XG5uZXQvY29yZS9zb2NrLmM6MjI1NDpcdFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcbm5ldC9jb3JlL3NvY2suYy0yMjU1LVx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L2NvcmUvc29jay5jPTIyNzM9c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yMzAxLSAqL1xubmV0L2NvcmUvc29jay5jOjIzMDI6c3RydWN0IHNvY2sgKnNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG5uZXQvY29yZS9zb2NrLmMtMjMwMy1cdFx0ICAgICAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybilcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjMzNC1cbm5ldC9jb3JlL3NvY2suYzoyMzM1Olx0XHRtZW1fY2dyb3VwX3NrX2FsbG9jKHNrKTtcbm5ldC9jb3JlL3NvY2suYzoyMzM2Olx0XHRjZ3JvdXBfc2tfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbm5ldC9jb3JlL3NvY2suYy0yMzM3LVx0XHRzb2NrX3VwZGF0ZV9jbGFzc2lkKFx1MDAyNnNrLVx1MDAzZXNrX2NncnBfZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBxdWljayBzY2FuIG9mIGBuZXQvY29yZS9zb2NrLmNgLgoKKipEaXZpbmcgaW50byBTb2NrZXQgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBzb2NrZXRzIGFyZSBhY3R1YWxseSBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZm9jdXNpbmcgb24gYHNrX2FsbG9jYCBhbmQgYHNrX3Byb3RfYWxsb2NgIOKAkyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gRnJvbSBhIGhpZ2ggbGV2ZWwsIEkmIzM5O20gZXhwZWN0aW5nIGBza19hbGxvY2AgdG8gaGFuZGxlIHRoZSBsb3ctbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlIGl0c2VsZiwgdGhlIGJhc2ljIGNvbnRhaW5lci4gSXQmIzM5O2xsIHByb2JhYmx5IGJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29tbW9uIGZpZWxkcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IHBvb2xzLCBzbGFiIGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkgZHVyaW5nIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4gSSBhbHNvIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIHRvIGRlYWwgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgdGhhdC4KClRoZW4sIHRoZXJlIGlzIGBza19wcm90X2FsbG9jYCwgdGhpcyBvbmUgaXMgbW9yZSBpbnRlcmVzdGluZyBhcyBpdCBzaG91bGQgYmUgdGhlIGFsbG9jYXRvciBmb3IgdGhlIHByb3RvY29sLXNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0LiBJdCYjMzk7bGwgbmVlZCB0byBhbGxvY2F0ZSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBzaW5jZSB0aGF0IGxpa2VseSBoYXMgaXRzIG93biBzZXQgb2YgZmllbGRzLCBmbGFncywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gaXRzIG93biBpbnRlcm5hbCBhbGxvY2F0aW9uIGxvZ2ljLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdHVyZSB0byBiZSBwYXNzZWQgaW50byBpdCBieSB0aGUgdXBwZXIgbGF5ZXJzLiBUaGF0IHdvdWxkIGFsbG93IHRoaW5ncyBsaWtlIFVEUCBvciBUQ1AgdG8gYWxsb2NhdGUgdGhlaXIgc3BlY2lmaWMgc3RydWN0dXJlcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJhc2ljIHNvY2tldCBzdHJ1Y3R1cmUuIEkgYWxzbyBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgYW55IHByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgdGhlcmUmIzM5O2xsIGxpa2VseSBiZSBjYWxsYmFja3Mgb3IgZnVuY3Rpb24gcG9pbnRlcnMgc2V0IHVwIGhlcmUgdG8gcG9pbnQgdG8gcHJvdG9jb2wtc3BlY2lmaWMgb3BlcmF0aW9ucyDigJMgc2VuZCwgcmVjZWl2ZSwgZXRjLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgaXMgYWxsIGxpbmtlZCB0b2dldGhlci4gQW5kIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBiYXNpYyBzb2NrZXQgYW5kIHRoaXMgcHJvdG9jb2wtc3BlY2lmaWMgcGFydCBpcyBlc3RhYmxpc2hlZC4KClVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIGhvdyB0aGUgY29yZSBzb2NrZXQgc3RydWN0dXJlIGFuZCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBhcmUgbGlua2VkIHRvZ2V0aGVyLCBhbmQgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciB0aGVpciBjbGVhbnVwIHdoZW4gYSBzb2NrZXQgaXMgY2xvc2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkmIzM5O20gY2xlYXIgb24gaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCB0byBhdm9pZCBhbnkgbGVha3MsIGVzcGVjaWFsbHkgaW4gYSBoaWdoLWNvbmN1cnJlbmN5IGVudmlyb25tZW50LiBUaGlzIHdpbGwgYWxsIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHNvY2tldCBjcmVhdGlvbiBpbXBhY3RzIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMzU6XHR9XG4yMjM2Olx0XG4yMjM3Olx0c3RhdGljIHN0cnVjdCBzb2NrICpza19wcm90X2FsbG9jKHN0cnVjdCBwcm90byAqcHJvdCwgZ2ZwX3QgcHJpb3JpdHksXG4yMjM4Olx0XHRcdGludCBmYW1pbHkpXG4yMjM5Olx0e1xuMjI0MDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMjI0MTpcdFx0c3RydWN0IGttZW1fY2FjaGUgKnNsYWI7XG4yMjQyOlx0XG4yMjQzOlx0XHRzbGFiID0gcHJvdC1cdTAwM2VzbGFiO1xuMjI0NDpcdFx0aWYgKHNsYWIgIT0gTlVMTCkge1xuMjI0NTpcdFx0XHRzayA9IGttZW1fY2FjaGVfYWxsb2Moc2xhYiwgcHJpb3JpdHkgXHUwMDI2IH5fX0dGUF9aRVJPKTtcbjIyNDY6XHRcdFx0aWYgKCFzaylcbjIyNDc6XHRcdFx0XHRyZXR1cm4gc2s7XG4yMjQ4Olx0XHRcdGlmICh3YW50X2luaXRfb25fYWxsb2MocHJpb3JpdHkpKVxuMjI0OTpcdFx0XHRcdHNrX3Byb3RfY2xlYXJfbnVsbHMoc2ssIHByb3QtXHUwMDNlb2JqX3NpemUpO1xuMjI1MDpcdFx0fSBlbHNlXG4yMjUxOlx0XHRcdHNrID0ga21hbGxvYyhwcm90LVx1MDAzZW9ial9zaXplLCBwcmlvcml0eSk7XG4yMjUyOlx0XG4yMjUzOlx0XHRpZiAoc2sgIT0gTlVMTCkge1xuMjI1NDpcdFx0XHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxuMjI1NTpcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4yMjU2Olx0XG4yMjU3Olx0XHRcdGlmICghdHJ5X21vZHVsZV9nZXQocHJvdC1cdTAwM2Vvd25lcikpXG4yMjU4Olx0XHRcdFx0Z290byBvdXRfZnJlZV9zZWM7XG4yMjU5Olx0XHR9XG4yMjYwOlx0XG4yMjYxOlx0XHRyZXR1cm4gc2s7XG4yMjYyOlx0XG4yMjYzOlx0b3V0X2ZyZWVfc2VjOlxuMjI2NDpcdFx0c2VjdXJpdHlfc2tfZnJlZShzayk7XG4yMjY1Olx0b3V0X2ZyZWU6XG4yMjY2Olx0XHRpZiAoc2xhYiAhPSBOVUxMKVxuMjI2NzpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xuMjI2ODpcdFx0ZWxzZVxuMjI2OTpcdFx0XHRrZnJlZShzayk7XG4yMjcwOlx0XHRyZXR1cm4gTlVMTDtcbjIyNzE6XHR9XG4yMjcyOlx0XG4yMjczOlx0c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxuMjI3NDpcdHtcbjIyNzU6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xuMjI3NjpcdFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XG4yMjc3Olx0XG4yMjc4Olx0XHRvd25lciA9IHByb3QtXHUwMDNlb3duZXI7XG4yMjc5Olx0XHRzbGFiID0gcHJvdC1cdTAwM2VzbGFiO1xuMjI4MDpcdFxuMjI4MTpcdFx0Y2dyb3VwX3NrX2ZyZWUoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbjIyODI6XHRcdG1lbV9jZ3JvdXBfc2tfZnJlZShzayk7XG4yMjgzOlx0XHRzZWN1cml0eV9za19mcmVlKHNrKTtcbjIyODQ6XHRcbjIyODU6XHRcdHNrX293bmVyX3B1dChzayk7XG4yMjg2Olx0XG4yMjg3Olx0XHRpZiAoc2xhYiAhPSBOVUxMKVxuMjI4ODpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xuMjI4OTpcdFx0ZWxzZVxuMjI5MDpcdFx0XHRrZnJlZShzayk7XG4yMjkxOlx0XHRtb2R1bGVfcHV0KG93bmVyKTtcbjIyOTI6XHR9XG4yMjkzOlx0XG4yMjk0Olx0LyoqXG4yMjk1Olx0ICpcdHNrX2FsbG9jIC0gQWxsIHNvY2tldCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaGVyZVxuMjI5NjpcdCAqXHRAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlXG4yMjk3Olx0ICpcdEBmYW1pbHk6IHByb3RvY29sIGZhbWlseVxuMjI5ODpcdCAqXHRAcHJpb3JpdHk6IGZvciBhbGxvY2F0aW9uICglR0ZQX0tFUk5FTCwgJUdGUF9BVE9NSUMsIGV0YylcbjIyOTk6XHQgKlx0QHByb3Q6IHN0cnVjdCBwcm90byBhc3NvY2lhdGVkIHdpdGggdGhpcyBuZXcgc29jayBpbnN0YW5jZVxuMjMwMDpcdCAqXHRAa2VybjogaXMgdGhpcyB0byBiZSBhIGtlcm5lbCBzb2NrZXQ/XG4yMzAxOlx0ICovXG4yMzAyOlx0c3RydWN0IHNvY2sgKnNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG4yMzAzOlx0XHRcdCAgICAgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXG4yMzA0Olx0e1xuMjMwNTpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMjMwNjpcdFxuMjMwNzpcdFx0c2sgPSBza19wcm90X2FsbG9jKHByb3QsIHByaW9yaXR5IHwgX19HRlBfWkVSTywgZmFtaWx5KTtcbjIzMDg6XHRcdGlmIChzaykge1xuMjMwOTpcdFx0XHRzay1cdTAwM2Vza19mYW1pbHkgPSBmYW1pbHk7XG4yMzEwOlx0XHRcdC8qXG4yMzExOlx0XHRcdCAqIFNlZSBjb21tZW50IGluIHN0cnVjdCBzb2NrIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZFxuMjMxMjpcdFx0XHQgKiB3aHkgd2UgbmVlZCBza19wcm90X2NyZWF0b3IgLWFjbWVcbjIzMTM6XHRcdFx0ICovXG4yMzE0Olx0XHRcdHNrLVx1MDAzZXNrX3Byb3QgPSBzay1cdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIE1vZHVsZSBSZWZlcmVuY2UgQ291bnRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGluZXRfY3JlYXRlYCwgdGhlIGNvcmUgaXNzdWUgSSYjMzk7bSBzZWVpbmcgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGBhbnN3ZXJfcHJvdGAgZHVyaW5nIG1vZHVsZSB1bmxvYWRpbmcgb3IgbG9hZGluZy4gU3BlY2lmaWNhbGx5LCBiZXR3ZWVuIHRoZSBpbml0aWFsIGByY3VfcmVhZF9sb2NrKClgIGFuZCB0aGUgYHNrX2FsbG9jKClgIGNhbGwsIGBhbnN3ZXJfcHJvdGAgY291bGQgYmVjb21lIGluYWNjZXNzaWJsZS4gVGhlIGN1cnJlbnQgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgd2l0aCBhIHR3by1wcm9uZ2VkIGFwcHJvYWNoLgoKRmlyc3QsIGl0IGFkZHMgYSBgdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKWAgdW5kZXIgdGhlIFJDVSBsb2NrLCBpbW1lZGlhdGVseSAqYmVmb3JlKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBlbnN1cmVzIHRoZSBtb2R1bGUgaXNuJiMzOTt0IHVubG9hZGVkIHdoaWxlIHdlIG5lZWQgaXQuIFRoZW4sIGFmdGVyIHJlbGVhc2luZyB0aGUgUkNVIGxvY2ssIGl0IGNhbGxzIGBza19hbGxvYygpYCwgd2hpY2ggaXRzZWxmIGhhbmRsZXMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB0aHJvdWdoIGl0cyBvd24gYHRyeV9tb2R1bGVfZ2V0YCBhbmQgYG1vZHVsZV9wdXRgIG9uIGZyZWUsIGFuZCB0aGVuIGZpbmFsbHkgY2xlYW5zIHVwIHRoZSB0ZW1wb3JhcnkgcmVmZXJlbmNlIGF0IHRoZSBlbmQgaW4gYGluZXRfY3JlYXRlYCB3aXRoIGEgYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAuCgpUaGUgcGF0Y2ggYWxzbyBjb3JyZWN0cyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGluIGBpbmV0Nl9jcmVhdGVgIGJ5IGZpeGluZyBhIHN1YnRsZSBidWcgd2hlcmUgdGhlIHdyb25nIHBvaW50ZXIgd2FzIGJlaW5nIHVzZWQgdG8gYWNjZXNzIGBiYWNrbG9nX3JjdmAuIFRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGVuc3VyaW5nIHRoYXQgdGhlIGNvcnJlY3QgYGFuc3dlci0mZ3Q7cHJvdGAgaXMgYWNjZXNzZWQuCgpOb3csIGxldCYjMzk7cyBtZXRob2RpY2FsbHkgbG9vayBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCjEuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5L0J1ZmZlcnM6KiogSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgbWFuaXB1bGF0aW9uIG9mIHN0YWNrIG9yIGhlYXAgYnVmZmVycy4KMi4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGVyZSYjMzk7cyBubyBrZXJuZWwgc3RydWN0dXJlIGRhdGEgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4KMy4gICoqQ29uZGl0aW9uYWwgTG9naWMgJmFtcDsgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogVGhlIGNydWNpYWwgdmFyaWFibGUgYGFuc3dlcl9vd25lcmAgKmlzKiBpbml0aWFsaXplZCBmcm9tIGBhbnN3ZXJfcHJvdC0mZ3Q7b3duZXJgLCBlbGltaW5hdGluZyBhIHBvdGVudGlhbCBpc3N1ZS4gQ3J1Y2lhbGx5LCBpbiAqYWxsKiBleGl0IHBhdGhzIGZyb20gYGluZXRfY3JlYXRlYCAqYWZ0ZXIqIHRoZSBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGwsIHRoZSBjb2RlIGNhbGxzIGBtb2R1bGVfcHV0KGFuc3dlcl9vd25lcilgLiBJbXBvcnRhbnRseSwgYG1vZHVsZV9wdXQoTlVMTClgIGlzIGEgc2FmZSBuby1vcC4gQW5kLCBvbiBlcnJvciAqYmVmb3JlKiB0aGUgYHJjdV9yZWFkX3VubG9jaygpYCwgd2UgdW5sb2NrIFJDVSBhbmQgZXhpdC4KNC4gICoqRGF0YSBDb3BpZXMgdG8gVXNlcjoqKiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyLXNwYWNlIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyBhbnkgdnVsbmVyYWJpbGl0eS4KNS4gICoqQm91bmRzL0xlbmd0aCBJc3N1ZXM6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGxvb2sgc3VzcGVjdC4KNi4gICoqT3ZlcmFsbCBQcm9ibGVtOioqIFRoZSByb290IGNhdXNlIGJlaW5nIGZpeGVkIGlzIGEgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSB0aGF0IGNhbiBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG1vZHVsZSBsaWZldGltZSBpc3N1ZXMsIGFzIHdlbGwgYXMgYW4gUkNVIGFjY2VzcyByYWNlIG9uIGBhbnN3ZXJgIGFmdGVyIHRoZSB1bmxvY2suCgpGaW5hbGx5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgd2lsbCBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZSB1bmxvYWRpbmcgaXNzdWVzLiBLTVNBTiBzaG91bGQgZGV0ZWN0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBNeSB0aG9yb3VnaCBhbmFseXNpcyBmaW5kcyB0aGF0IG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQsIGV4cG9zZWQsIG9yIGFsdGVyZWQgYnkgdGhpcyBwYXRjaC4gQW5kIHNpbmNlIGBtb2R1bGVfcHV0KE5VTEwpYCBpcyBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGUga2VybmVsIEkgc2VlIG5vIHJpc2sgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBtb2R1bGVfcHV0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9tYWluLmM9OTQ5PUVYUE9SVF9TWU1CT0wodHJ5X21vZHVsZV9nZXQpO1xua2VybmVsL21vZHVsZS9tYWluLmMtOTUwLVxua2VybmVsL21vZHVsZS9tYWluLmM6OTUxOnZvaWQgbW9kdWxlX3B1dChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXG5rZXJuZWwvbW9kdWxlL21haW4uYy05NTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mzg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbW9kdWxlX3B1dGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGBtb2R1bGVfcHV0YCBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd29yayBpbiB0aGUga2VybmVsLCBhbmQgSSBrbm93IEkmIzM5O2xsIHByb2JhYmx5IGVuY291bnRlciBhIHRyaWNreSBzY2VuYXJpbyBzb29uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRlY3JlbWVudGluZyBvZiB0aGUgbW9kdWxlJiMzOTtzIHVzYWdlIGNvdW50IGFuZCB3aGF0IGFzc29jaWF0ZWQgYWN0aW9ucyBhcmUgdGFrZW4sIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNjZW5hcmlvcyBpbnZvbHZpbmcgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyB3aXRoaW4gdGhlIG1vZHVsZSB1bmxvYWRpbmcgcHJvY2VzcyB0byBtYWtlIHN1cmUgdGhlIGNvZGUgSSYjMzk7bSBhYm91dCB0byB3b3JrIHdpdGggaXMgc29saWQuIEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgdGhlIFZGUyBhbmQgZGV2aWNlIGRyaXZlcnMsIGFuZCBob3cgYG1vZHVsZV9wdXRgIGVuc3VyZXMgdGhhdCBtb2R1bGVzIGFyZSB1bmxvYWRlZCBzYWZlbHkgYW5kIGluIHRoZSByaWdodCBvcmRlci4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSBtZWNoYW5pY3MgaXMgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0XG4gOTUxOlx0dm9pZCBtb2R1bGVfcHV0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbiA5NTI6XHR7XG4gOTUzOlx0XHRpbnQgcmV0O1xuIDk1NDpcdFxuIDk1NTpcdFx0aWYgKG1vZHVsZSkge1xuIDk1NjpcdFx0XHRyZXQgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKFx1MDAyNm1vZHVsZS1cdTAwM2VyZWZjbnQpO1xuIDk1NzpcdFx0XHRXQVJOX09OKHJldCBcdTAwM2MgMCk7XHQvKiBGYWlsZWQgdG8gcHV0IHJlZmNvdW50ICovXG4gOTU4Olx0XHRcdHRyYWNlX21vZHVsZV9wdXQobW9kdWxlLCBfUkVUX0lQXyk7XG4gOTU5Olx0XHR9XG4gOTYwOlx0fVxuIDk2MTpcdEVYUE9SVF9TWU1CT0wobW9kdWxlX3B1dCk7XG4gOTYyOlx0XG4gOTYzOlx0I2Vsc2UgLyogIUNPTkZJR19NT0RVTEVfVU5MT0FEICovXG4gOTY0Olx0c3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91bmxvYWRfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gOTY1Olx0e1xuIDk2NjpcdH1cbiA5Njc6XHRcbiA5Njg6XHRzdGF0aWMgaW50IHJlZl9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYilcbiA5Njk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTQKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIHRoZSBgbW9kdWxlX3B1dChOVUxMKWAgdGhpbmcgaXMgYSBjb21wbGV0ZSBub24taXNzdWU7IGl0JiMzOTtzIGRlc2lnbmVkIHRoYXQgd2F5LiBUaGF0JiMzOTtzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBEaWdnaW5nIGludG8gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgZXZlcnl0aGluZyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcHJpbWFyeSBnb2FsIGlzIGNsZWFybHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSBkdXJpbmcgbW9kdWxlIHVubG9hZGluZyBvciBzb2NrZXQgY3JlYXRpb24sIGFuZCBpdCBkb2VzIHRoaXMgYnkgaW1wbGVtZW50aW5nIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgdXNpbmcgYHRyeV9tb2R1bGVfZ2V0YCBhbmQgYG1vZHVsZV9wdXRgIGNhbGxzIGluIGBpbmV0X2NyZWF0ZSgpYCBhbmQgYGluZXQ2X2NyZWF0ZSgpYC4KClRoZSBwYXRjaCBhbHNvIGhhcyBhbiBpbXBvcnRhbnQgZml4IGZvciBgaW5ldDZfY3JlYXRlKClgIGJ5IG5vdCBkZXJlZmVyZW5jaW5nIGBhbnN3ZXJgIG91dHNpZGUgUkNVIGNyaXRpY2FsIHNlY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFuZCBjcnVjaWFsIGltcHJvdmVtZW50IHRoYXQgbWl0aWdhdGVzIHRoZSByaXNrIG9mIHJlYWRpbmcgcG90ZW50aWFsbHkgc3RhbGUgZGF0YS4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucyBoZXJlLiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd3JpdGVzLCBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlIG1vc3QgbGlrZWx5IGJ1Z3Mgd2UgY291bGQgZW5jb3VudGVyIG5vdyBhcmUgdGhlIHR5cGljYWwgbGlmZXRpbWUgb3IgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyAtLSB0aGUgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSwgb3Igd29yc2UsIG1lbW9yeSBsZWFrcywgYnV0IHRob3NlIGFyZSBpc3N1ZXMgdGhhdCBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyBzaG91bGQgZmxhZyBmYWlybHkgZWFzaWx5LiBUaGVyZWZvcmUsIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBoZXJlLgoKSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgYW5hbHlzaXMsIHNvIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGluZXRfY3JlYXRlKCkgYW5kIGluZXQ2X2NyZWF0ZSgpIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGFjY2Vzc2luZyBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHRyeV9tb2R1bGVfZ2V0KCkgYW5kIG1vZHVsZV9wdXQoKSBjYWxscyBvbiB0aGUgcHJvdG9jb2wgb3duZXIgYW5kIGVuc3VyZSBhbnN3ZXJfcHJvdCBpcyB1c2VkIHJhdGhlciB0aGFuIGRlcmVmZXJlbmNpbmcgYW5zd2VyIG91dHNpZGUgcmN1X3JlYWRfbG9jaygpLiBcblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbW9kdWxlIHJlZmVyZW5jZSBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5L1VBRiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBpbmV0X2NyZWF0ZSgpIGFuZCBpbmV0Nl9jcmVhdGUoKSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCBtb2R1bGUgdW5sb2FkaW5nIGFuZCBhY2Nlc3NpbmcgUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmVzIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZSBjaGFuZ2VzIGludHJvZHVjZSB0cnlfbW9kdWxlX2dldCgpIGFuZCBtb2R1bGVfcHV0KCkgY2FsbHMgb24gdGhlIHByb3RvY29sIG93bmVyIGFuZCBlbnN1cmUgYW5zd2VyX3Byb3QgaXMgdXNlZCByYXRoZXIgdGhhbiBkZXJlZmVyZW5jaW5nIGFuc3dlciBvdXRzaWRlIHJjdV9yZWFkX2xvY2soKS4gXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0Njo0MS40NDk0NjU5NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczOTcwNTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9jcmVhdGVcIixcbiAgICBcImluZXQ2X2NyZWF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQxLjQ0OTQ3MTc2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMjg2MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmI2NDJmMDVmNTVkZjlhNzE3MWZkYTEzYmRmNzJjMjI4ODM0OTUzZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDIyOjQ2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuY1xcbmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jXFxuKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jXFxuQEAgLTI2Myw2ICsyNjMsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBcXHRzdHJ1Y3QgaW5ldF9wcm90b3N3ICphbnN3ZXI7XFxuIFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XFxuIFxcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XFxuK1xcdHN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjtcXG4gXFx0dW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7XFxuIFxcdGludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0zMjIsOSArMzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdCAgICAhbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcXG4gXFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4gXFxuLVxcdHNvY2stXFx1MDAzZW9wcyA9IGFuc3dlci1cXHUwMDNlb3BzO1xcbiBcXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cXHUwMDNlcHJvdDtcXG4rXFx0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXFx1MDAzZW93bmVyO1xcbiBcXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXFx1MDAzZWZsYWdzO1xcbitcXHRpZiAoYW5zd2VyX293bmVyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8XFxuK1xcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuK1xcdH1cXG4rXFx0c29jay1cXHUwMDNlb3BzID0gYW5zd2VyLVxcdTAwM2VvcHM7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXFx1MDAzZXNsYWIpO1xcbkBAIC0zMzIsNyArMzQwLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcXG4gXFx0aWYgKCFzaylcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XFxuIFxcbiBcXHRlcnIgPSAwO1xcbiBcXHRpZiAoSU5FVF9QUk9UT1NXX1JFVVNFIFxcdTAwMjYgYW5zd2VyX2ZsYWdzKVxcbkBAIC0zOTgsNiArNDA2LDggQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gXFx0fVxcbitvdXRfbW9kdWxlX3B1dDpcXG4rXFx0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xcbiBvdXQ6XFxuIFxcdHJldHVybiBlcnI7XFxuIG91dF9yY3VfdW5sb2NrOlxcbkBAIC00MDYsNyArNDE2LDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gb3V0X3NrX3JlbGVhc2U6XFxuIFxcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcXG4gXFx0c29jay1cXHUwMDNlc2sgPSBOVUxMO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0Z290byBvdXRfbW9kdWxlX3B1dDtcXG4gfVxcbiBcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXFxuaW5kZXggMjgyOTEyYTExOTk5OS4uMWRmOGIyZTdlMjQzNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXFxuKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xcbkBAIC0xMTAsNiArMTEwLDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gXFx0c3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyO1xcbiBcXHRzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90O1xcbitcXHRzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7XFxuIFxcdHVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzO1xcbiBcXHRpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDtcXG4gXFx0aW50IGVycjtcXG5AQCAtMTY3LDkgKzE2OCwxNiBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0ICAgICFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpKVxcbiBcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiBcXG4tXFx0c29jay1cXHUwMDNlb3BzID0gYW5zd2VyLVxcdTAwM2VvcHM7XFxuIFxcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVxcdTAwM2Vwcm90O1xcbitcXHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cXHUwMDNlb3duZXI7XFxuIFxcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cXHUwMDNlZmxhZ3M7XFxuK1xcdGlmIChhbnN3ZXJfb3duZXIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHxcXG4rXFx0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4rXFx0fVxcbitcXHRzb2NrLVxcdTAwM2VvcHMgPSBhbnN3ZXItXFx1MDAzZW9wcztcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cXHUwMDNlc2xhYik7XFxuQEAgLTE3Nyw3ICsxODUsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0ZXJyID0gLUVOT0JVRlM7XFxuIFxcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9JTkVUNiwgR0ZQX0tFUk5FTCwgYW5zd2VyX3Byb3QsIGtlcm4pO1xcbiBcXHRpZiAoIXNrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBvdXRfbW9kdWxlX3B1dDtcXG4gXFxuIFxcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcXG4gXFxuQEAgLTIwMSw3ICsyMDksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0c2stXFx1MDAzZXNrX2ZhbWlseVxcdFxcdD0gUEZfSU5FVDY7XFxuIFxcdHNrLVxcdTAwM2Vza19wcm90b2NvbFxcdFxcdD0gcHJvdG9jb2w7XFxuIFxcbi1cXHRzay1cXHUwMDNlc2tfYmFja2xvZ19yY3ZcXHQ9IGFuc3dlci1cXHUwMDNlcHJvdC1cXHUwMDNlYmFja2xvZ19yY3Y7XFxuK1xcdHNrLVxcdTAwM2Vza19iYWNrbG9nX3JjdlxcdD0gYW5zd2VyX3Byb3QtXFx1MDAzZWJhY2tsb2dfcmN2O1xcbiBcXG4gXFx0aW5ldF9zayhzayktXFx1MDAzZXBpbmV0NiA9IG5wID0gaW5ldDZfc2tfZ2VuZXJpYyhzayk7XFxuIFxcdG5wLVxcdTAwM2Vob3BfbGltaXRcXHQ9IC0xO1xcbkBAIC0yNTEsNiArMjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XFxuIFxcdH1cXG4rb3V0X21vZHVsZV9wdXQ6XFxuK1xcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gZXJyO1xcbiBvdXRfcmN1X3VubG9jazpcXG5AQCAtMjU5LDcgKzI2OSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBvdXRfc2tfcmVsZWFzZTpcXG4gXFx0c2tfY29tbW9uX3JlbGVhc2Uoc2spO1xcbiBcXHRzb2NrLVxcdTAwM2VzayA9IE5VTEw7XFxuLVxcdGdvdG8gb3V0O1xcbitcXHRnb3RvIG91dF9tb2R1bGVfcHV0O1xcbiB9XFxuIFxcbiBpbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQxLjg3MDU2OTgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDg4Mjg4Mjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9jcmVhdGVcIixcbiAgICBcImluZXQ2X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmI2NDJmMDVmNTVkZjlhNzE3MWZkYTEzYmRmNzJjMjI4ODM0OTUzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMjI6NDY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmNcbmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmNcbisrKyBiL25ldC9pcHY0L2FmX2luZXQuY1xuQEAgLTI2Myw2ICsyNjMsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0c3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyO1xuIFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiBcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XG4rXHRzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7XG4gXHR1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFncztcbiBcdGludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwO1xuIFx0aW50IGVycjtcbkBAIC0zMjIsOSArMzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4rXHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cdTAwM2Vvd25lcjtcbiBcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cdTAwM2VmbGFncztcbitcdGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuK1x0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbitcdH1cbitcdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXHUwMDNlc2xhYik7XG5AQCAtMzMyLDcgKzM0MCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRlcnIgPSAtRU5PTUVNO1xuIFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIFxuIFx0ZXJyID0gMDtcbiBcdGlmIChJTkVUX1BST1RPU1dfUkVVU0UgXHUwMDI2IGFuc3dlcl9mbGFncylcbkBAIC0zOTgsNiArNDA2LDggQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9za19yZWxlYXNlO1xuIFx0fVxuK291dF9tb2R1bGVfcHV0OlxuK1x0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG4gb3V0X3JjdV91bmxvY2s6XG5AQCAtNDA2LDcgKzQxNiw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gb3V0X3NrX3JlbGVhc2U6XG4gXHRza19jb21tb25fcmVsZWFzZShzayk7XG4gXHRzb2NrLVx1MDAzZXNrID0gTlVMTDtcbi1cdGdvdG8gb3V0O1xuK1x0Z290byBvdXRfbW9kdWxlX3B1dDtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbmluZGV4IDI4MjkxMmExMTk5OTkuLjFkZjhiMmU3ZTI0MzcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG4rKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5AQCAtMTEwLDYgKzExMCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFx0c3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyO1xuIFx0c3RydWN0IHByb3RvICphbnN3ZXJfcHJvdDtcbitcdHN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjtcbiBcdHVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzO1xuIFx0aW50IHRyeV9sb2FkaW5nX21vZHVsZSA9IDA7XG4gXHRpbnQgZXJyO1xuQEAgLTE2Nyw5ICsxNjgsMTYgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4rXHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cdTAwM2Vvd25lcjtcbiBcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cdTAwM2VmbGFncztcbitcdGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuK1x0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbitcdH1cbitcdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXHUwMDNlc2xhYik7XG5AQCAtMTc3LDcgKzE4NSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVDYsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIFxuIFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIFxuQEAgLTIwMSw3ICsyMDksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHNrLVx1MDAzZXNrX2ZhbWlseVx0XHQ9IFBGX0lORVQ2O1xuIFx0c2stXHUwMDNlc2tfcHJvdG9jb2xcdFx0PSBwcm90b2NvbDtcbiBcbi1cdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2XHQ9IGFuc3dlci1cdTAwM2Vwcm90LVx1MDAzZWJhY2tsb2dfcmN2O1xuK1x0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gXG4gXHRpbmV0X3NrKHNrKS1cdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xuIFx0bnAtXHUwMDNlaG9wX2xpbWl0XHQ9IC0xO1xuQEAgLTI1MSw2ICsyNTksOCBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9za19yZWxlYXNlO1xuIFx0fVxuK291dF9tb2R1bGVfcHV0OlxuK1x0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG4gb3V0X3JjdV91bmxvY2s6XG5AQCAtMjU5LDcgKzI2OSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIG91dF9za19yZWxlYXNlOlxuIFx0c2tfY29tbW9uX3JlbGVhc2Uoc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XG4gfVxuIFxuIGludCBfX2luZXQ2X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQxLjg3MDU3MTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQxMDMzMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBZGRyZXNzaW5nIFBvdGVudGlhbCBVQUYvUmFjZSBDb25kaXRpb25zIGluIFNvY2tldCBDcmVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uIGluIGJvdGggSVB2NCBhbmQgSVB2Ni5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgaW4gYGluZXRfY3JlYXRlYCwgaXQgYXBwZWFycyB3ZSdyZSBkZWFsaW5nIHdpdGggYGFuc3dlcl9wcm90LVx1MDAzZW93bmVyYC4gSXQncyBjaGVja2luZyBpZiB0aGUgbW9kdWxlIGlzIGNvbWluZyBvciBmYWlsaW5nIHRvIGdldCB0aGUgbW9kdWxlIChgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcilgKS4gVGhlbiwgdGhlcmUncyBhIGBtb2R1bGVfcHV0KGFuc3dlcl9vd25lcilgIGF0IHRoZSBgb3V0X21vZHVsZV9wdXRgIGxhYmVsLiBUaGUgc2FtZSBsb2dpYyBpcyBhcHBsaWVkIGluIGBpbmV0Nl9jcmVhdGVgLiBTbywgdGhpcyBzbWVsbHMgbGlrZSBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIHJlbGF0ZWQgdG8gcHJvdG9jb2wgaGFuZGxlcnMuIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIGhlcmUncyB0aGUga2V5IGNoYW5nZTogYHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2ID0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7YCBpbnN0ZWFkIG9mIGBhbnN3ZXItXHUwMDNlcHJvdC1cdTAwM2ViYWNrbG9nX3JjdjtgLiBIb2xkIG9uLi4uIHRoZSBvbGQgY29kZSB1c2VkIGBhbnN3ZXJgIGFmdGVyIGFuIGByY3VfcmVhZF91bmxvY2tgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCB3b3VsZCBtZWFuIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcnJlY3QgYW5kIHNhZmUgbWV0aG9kIGlzIHRvIHVzZSBgYW5zd2VyX3Byb3RgLCB3aGljaCB3YXMgbGlrZWx5IGEgbG9jYWwgY29weSBhbHJlYWR5LiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIGNvcmUgb2YgdGhlIGZpeC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgaW4gaG93IHRoZSBiYWNrbG9nIHJlY2VpdmVyIGlzIGFzc2lnbmVkIGR1cmluZyBzb2NrZXQgY3JlYXRpb24uIFRoaXMgcmVwbGFjZW1lbnQgbWFrZXMgY29tcGxldGUgc2Vuc2UgaW4gbGlnaHQgb2YgcG9zc2libGUgcmFjZSBpc3N1ZXMuXG5cblRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgdG8gZ2FpbiBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY29udGV4dCwgSSBuZWVkIHRvIHJlYWQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGluIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgbmV0L2lwdjYvYWZfaW5ldDYuY2AgYXJvdW5kIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgLiBJIHdhbnQgdG8gc2VlIGhvdyBgYW5zd2VyX3Byb3RgIGlzIHBvcHVsYXRlZCBhbmQgaG93IGBhbnN3ZXJgIGlzIGhhbmRsZWQgaW4gdGhlIG92ZXJhbGwgc29ja2V0IGNyZWF0aW9uIGZsb3cgdG8gYmUgY2VydGFpbiBJJ3ZlIGNhdWdodCBhbGwgdGhlIGltcGxpY2F0aW9ucy4gSSBjYW4gc2VlIHRoaXMgY29kZSBhcyBtYWtpbmcgYSB2aXRhbCBpbXByb3ZlbWVudCBpbiBzb2NrZXQgY3JlYXRpb24gdGhyZWFkIHNhZmV0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQ3LjI4MDkwODY1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9hZl9pbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiAxMDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUEZfSU5FVCwgcHJvdG9jb2wpO1xcbiAzMTY6XFx0XFx0XFx0XFx0Z290byBsb29rdXBfcHJvdG9jb2w7XFxuIDMxNzpcXHRcXHRcXHR9IGVsc2VcXG4gMzE4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuIDMxOTpcXHRcXHR9XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdGVyciA9IC1FUEVSTTtcXG4gMzIyOlxcdFxcdGlmIChzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXIFxcdTAwMjZcXHUwMDI2ICFrZXJuIFxcdTAwMjZcXHUwMDI2XFxuIDMyMzpcXHRcXHQgICAgIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXFxuIDMyNDpcXHRcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cXHUwMDNlcHJvdDtcXG4gMzI3OlxcdFxcdGFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LVxcdTAwM2Vvd25lcjtcXG4gMzI4OlxcdFxcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cXHUwMDNlZmxhZ3M7XFxuIDMyOTpcXHRcXHRpZiAoYW5zd2VyX293bmVyIFxcdTAwMjZcXHUwMDI2XFxuIDMzMDpcXHRcXHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxcbiAzMzE6XFx0XFx0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcXG4gMzMyOlxcdFxcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuIDMzMzpcXHRcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiAzMzQ6XFx0XFx0fVxcbiAzMzU6XFx0XFx0c29jay1cXHUwMDNlb3BzID0gYW5zd2VyLVxcdTAwM2VvcHM7XFxuIDMzNjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXFx1MDAzZXNsYWIpO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAzNDE6XFx0XFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcXG4gMzQyOlxcdFxcdGlmICghc2spXFxuIDM0MzpcXHRcXHRcXHRnb3RvIG91dF9tb2R1bGVfcHV0O1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRlcnIgPSAwO1xcbiAzNDY6XFx0XFx0aWYgKElORVRfUFJPVE9TV19SRVVTRSBcXHUwMDI2IGFuc3dlcl9mbGFncylcXG4gMzQ3OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19yZXVzZSA9IFNLX0NBTl9SRVVTRTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0aWYgKElORVRfUFJPVE9TV19JQ1NLIFxcdTAwMjYgYW5zd2VyX2ZsYWdzKVxcbiAzNTA6XFx0XFx0XFx0aW5ldF9pbml0X2Nza19sb2Nrcyhzayk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGluZXQgPSBpbmV0X3NrKHNrKTtcXG4gMzUzOlxcdFxcdGluZXRfYXNzaWduX2JpdChJU19JQ1NLLCBzaywgSU5FVF9QUk9UT1NXX0lDU0sgXFx1MDAyNiBhbnN3ZXJfZmxhZ3MpO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRpbmV0X2NsZWFyX2JpdChOT0RFRlJBRywgc2spO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRpZiAoU09DS19SQVcgPT0gc29jay1cXHUwMDNldHlwZSkge1xcbiAzNTg6XFx0XFx0XFx0aW5ldC1cXHUwMDNlaW5ldF9udW0gPSBwcm90b2NvbDtcXG4gMzU5OlxcdFxcdFxcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcXG4gMzYwOlxcdFxcdFxcdFxcdGluZXRfc2V0X2JpdChIRFJJTkNMLCBzayk7XFxuIDM2MTpcXHRcXHR9XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9ub19wbXR1X2Rpc2MpKVxcbiAzNjQ6XFx0XFx0XFx0aW5ldC1cXHUwMDNlcG10dWRpc2MgPSBJUF9QTVRVRElTQ19ET05UO1xcbiAzNjU6XFx0XFx0ZWxzZVxcbiAzNjY6XFx0XFx0XFx0aW5ldC1cXHUwMDNlcG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZpbmV0LVxcdTAwM2VpbmV0X2lkLCAwKTtcXG4gMzY5OlxcdFxcbiAzNzA6XFx0XFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHQgICA9IGluZXRfc29ja19kZXN0cnVjdDtcXG4gMzczOlxcdFxcdHNrLVxcdTAwM2Vza19wcm90b2NvbFxcdCAgID0gcHJvdG9jb2w7XFxuIDM3NDpcXHRcXHRzay1cXHUwMDNlc2tfYmFja2xvZ19yY3YgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlYmFja2xvZ19yY3Y7XFxuIDM3NTpcXHRcXHRzay1cXHUwMDNlc2tfdHhyZWhhc2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2Vjb3JlLnN5c2N0bF90eHJlaGFzaCk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGluZXQtXFx1MDAzZXVjX3R0bFxcdD0gLTE7XFxuIDM3ODpcXHRcXHRpbmV0X3NldF9iaXQoTUNfTE9PUCwgc2spO1xcbiAzNzk6XFx0XFx0aW5ldC1cXHUwMDNlbWNfdHRsXFx0PSAxO1xcbiAzODA6XFx0XFx0aW5ldF9zZXRfYml0KE1DX0FMTCwgc2spO1xcbiAzODE6XFx0XFx0aW5ldC1cXHUwMDNlbWNfaW5kZXhcXHQ9IDA7XFxuIDM4MjpcXHRcXHRpbmV0LVxcdTAwM2VtY19saXN0XFx0PSBOVUxMO1xcbiAzODM6XFx0XFx0aW5ldC1cXHUwMDNlcmN2X3Rvc1xcdD0gMDtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0aWYgKGluZXQtXFx1MDAzZWluZXRfbnVtKSB7XFxuIDM4NjpcXHRcXHRcXHQvKiBJdCBhc3N1bWVzIHRoYXQgYW55IHByb3RvY29sIHdoaWNoIGFsbG93c1xcbiAzODc6XFx0XFx0XFx0ICogdGhlIHVzZXIgdG8gYXNzaWduIGEgbnVtYmVyIGF0IHNvY2tldFxcbiAzODg6XFx0XFx0XFx0ICogY3JlYXRpb24gdGltZSBhdXRvbWF0aWNhbGx5XFxuIDM4OTpcXHRcXHRcXHQgKiBzaGFyZXMuXFxuIDM5MDpcXHRcXHRcXHQgKi9cXG4gMzkxOlxcdFxcdFxcdGluZXQtXFx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVxcdTAwM2VpbmV0X251bSk7XFxuIDM5MjpcXHRcXHRcXHQvKiBBZGQgdG8gcHJvdG9jb2wgaGFzaCBjaGFpbnMuICovXFxuIDM5MzpcXHRcXHRcXHRlcnIgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaGFzaChzayk7XFxuIDM5NDpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzOTU6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gMzk2OlxcdFxcdH1cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2Vpbml0KSB7XFxuIDM5OTpcXHRcXHRcXHRlcnIgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaW5pdChzayk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MDE6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gNDAyOlxcdFxcdH1cXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0aWYgKCFrZXJuKSB7XFxuIDQwNTpcXHRcXHRcXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0lORVRfU09DSyhzayk7XFxuIDQwNjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MDc6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gNDA4OlxcdFxcdH1cXG4gNDA5OlxcdG91dF9tb2R1bGVfcHV0OlxcbiA0MTA6XFx0XFx0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xcbiA0MTE6XFx0b3V0OlxcbiA0MTI6XFx0XFx0cmV0dXJuIGVycjtcXG4gNDEzOlxcdG91dF9yY3VfdW5sb2NrOlxcbiA0MTQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQ3LjI4MTA5NjIwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTgyODA2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29kZSBQYXRoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHNwZWNpZmljIHBpZWNlIG9mIG5ldHdvcmsgY29kZSwgYW5kIGl0J3MgZ290IG1lIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGtub3cgd2UndmUgYmVlbiBmb2N1c2VkIG9uIGBpbmV0X2NyZWF0ZWAgYnV0IEknbSBoYXZpbmcgYSBodW5jaCB0aGF0IGEgc2ltaWxhciB2dWxuZXJhYmlsaXR5IG9yIGlzc3VlIG1pZ2h0IGV4aXN0IGluIGEgc2libGluZyBmdW5jdGlvbiwgcG90ZW50aWFsbHkgZXZlbiB3aXRoIGEgc2ltaWxhciBmdW5jdGlvbiBzaWduYXR1cmUgb3IgcHVycG9zZS4gSXQncyBhbG1vc3QgYXV0b21hdGljLCB0aGUga2luZCBvZiBwYXJhbGxlbCB0aG91Z2h0IHByb2Nlc3MgeW91IGdldCB3aGVuIGRlZXAgaW4gYSBzcGVjaWZpYyBhcmVhLiBTaW5jZSBgaW5ldDZfY3JlYXRlYCBoYW5kbGVzIElQdjYgYWRkcmVzc2VzLCBpdCdzIGEgY3JpdGljYWwgbmV4dCBzdGVwIHRvIHZlcmlmeS4gV2UgbmVlZCB0byBjaGVjayBpdCBhbmQgbWFrZSBzdXJlIGl0IGhhcyB0aGUgc2FtZSBsZXZlbCBvZiByb2J1c3RuZXNzIGFzIHdlJ3JlIGhvcGluZyB0byBmaW5kIGluIGBpbmV0X2NyZWF0ZWAuIEkgZG9uJ3Qgd2FudCB0byBnZXQgdHVubmVsIHZpc2lvbiBhbmQgbWlzcyBhIHNpbWlsYXIgaXNzdWUgb3ZlciB0aGVyZS4gTGV0J3Mgc2VlIGlmIHRoZSBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgZm9yIGV4cGxvaXRhdGlvbiBpbiBgaW5ldDZfY3JlYXRlYCBtaXJyb3Igd2hhdCB3ZSd2ZSBzZWVuIChvciAqY291bGQqIHNlZSkgaW4gYGluZXRfY3JlYXRlYC4gSXQncyBhbGwgYWJvdXQgZHVlIGRpbGlnZW5jZSBhbmQgaG9saXN0aWMgc2VjdXJpdHkgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0Njo0OS4yOTkzODAzMTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDEyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFBGX0lORVQ2LCBwcm90b2NvbCk7XFxuIDE2MTpcXHRcXHRcXHRcXHRnb3RvIGxvb2t1cF9wcm90b2NvbDtcXG4gMTYyOlxcdFxcdFxcdH0gZWxzZVxcbiAxNjM6XFx0XFx0XFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4gMTY0OlxcdFxcdH1cXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0ZXJyID0gLUVQRVJNO1xcbiAxNjc6XFx0XFx0aWYgKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcgXFx1MDAyNlxcdTAwMjYgIWtlcm4gXFx1MDAyNlxcdTAwMjZcXG4gMTY4OlxcdFxcdCAgICAhbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcXG4gMTY5OlxcdFxcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVxcdTAwM2Vwcm90O1xcbiAxNzI6XFx0XFx0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXFx1MDAzZW93bmVyO1xcbiAxNzM6XFx0XFx0YW5zd2VyX2ZsYWdzID0gYW5zd2VyLVxcdTAwM2VmbGFncztcXG4gMTc0OlxcdFxcdGlmIChhbnN3ZXJfb3duZXIgXFx1MDAyNlxcdTAwMjZcXG4gMTc1OlxcdFxcdCAgICAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8XFxuIDE3NjpcXHRcXHQgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkge1xcbiAxNzc6XFx0XFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4gMTc4OlxcdFxcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuIDE3OTpcXHRcXHR9XFxuIDE4MDpcXHRcXHRzb2NrLVxcdTAwM2VvcHMgPSBhbnN3ZXItXFx1MDAzZW9wcztcXG4gMTgxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cXHUwMDNlc2xhYik7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdGVyciA9IC1FTk9CVUZTO1xcbiAxODY6XFx0XFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XFxuIDE4NzpcXHRcXHRpZiAoIXNrKVxcbiAxODg6XFx0XFx0XFx0Z290byBvdXRfbW9kdWxlX3B1dDtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRlcnIgPSAwO1xcbiAxOTM6XFx0XFx0aWYgKElORVRfUFJPVE9TV19SRVVTRSBcXHUwMDI2IGFuc3dlcl9mbGFncylcXG4gMTk0OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19yZXVzZSA9IFNLX0NBTl9SRVVTRTtcXG4gMTk1OlxcdFxcbiAxOTY6XFx0XFx0aWYgKElORVRfUFJPVE9TV19JQ1NLIFxcdTAwMjYgYW5zd2VyX2ZsYWdzKVxcbiAxOTc6XFx0XFx0XFx0aW5ldF9pbml0X2Nza19sb2Nrcyhzayk7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGluZXQgPSBpbmV0X3NrKHNrKTtcXG4gMjAwOlxcdFxcdGluZXRfYXNzaWduX2JpdChJU19JQ1NLLCBzaywgSU5FVF9QUk9UT1NXX0lDU0sgXFx1MDAyNiBhbnN3ZXJfZmxhZ3MpO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRpZiAoU09DS19SQVcgPT0gc29jay1cXHUwMDNldHlwZSkge1xcbiAyMDM6XFx0XFx0XFx0aW5ldC1cXHUwMDNlaW5ldF9udW0gPSBwcm90b2NvbDtcXG4gMjA0OlxcdFxcdFxcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcXG4gMjA1OlxcdFxcdFxcdFxcdGluZXRfc2V0X2JpdChIRFJJTkNMLCBzayk7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHNrLVxcdTAwM2Vza19kZXN0cnVjdFxcdFxcdD0gaW5ldDZfc29ja19kZXN0cnVjdDtcXG4gMjA5OlxcdFxcdHNrLVxcdTAwM2Vza19mYW1pbHlcXHRcXHQ9IFBGX0lORVQ2O1xcbiAyMTA6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3RvY29sXFx0XFx0PSBwcm90b2NvbDtcXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0c2stXFx1MDAzZXNrX2JhY2tsb2dfcmN2XFx0PSBhbnN3ZXJfcHJvdC1cXHUwMDNlYmFja2xvZ19yY3Y7XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdGluZXRfc2soc2spLVxcdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xcbiAyMTU6XFx0XFx0bnAtXFx1MDAzZWhvcF9saW1pdFxcdD0gLTE7XFxuIDIxNjpcXHRcXHRucC1cXHUwMDNlbWNhc3RfaG9wc1xcdD0gSVBWNl9ERUZBVUxUX01DQVNUSE9QUztcXG4gMjE3OlxcdFxcdGluZXQ2X3NldF9iaXQoTUM2X0xPT1AsIHNrKTtcXG4gMjE4OlxcdFxcdGluZXQ2X3NldF9iaXQoTUM2X0FMTCwgc2spO1xcbiAyMTk6XFx0XFx0bnAtXFx1MDAzZXBtdHVkaXNjXFx0PSBJUFY2X1BNVFVESVNDX1dBTlQ7XFxuIDIyMDpcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFJFUEZMT1csIHNrLCBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5mbG93bGFiZWxfcmVmbGVjdCkgXFx1MDAyNlxcbiAyMjE6XFx0XFx0XFx0XFx0XFx0ICAgICAgRkxPV0xBQkVMX1JFRkxFQ1RfRVNUQUJMSVNIRUQpO1xcbiAyMjI6XFx0XFx0c2stXFx1MDAzZXNrX2lwdjZvbmx5XFx0PSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5iaW5kdjZvbmx5KTtcXG4gMjIzOlxcdFxcdHNrLVxcdTAwM2Vza190eHJlaGFzaCA9IFJFQURfT05DRShuZXQtXFx1MDAzZWNvcmUuc3lzY3RsX3R4cmVoYXNoKTtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0LyogSW5pdCB0aGUgaXB2NCBwYXJ0IG9mIHRoZSBzb2NrZXQgc2luY2Ugd2UgY2FuIGhhdmUgc29ja2V0c1xcbiAyMjY6XFx0XFx0ICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LlxcbiAyMjc6XFx0XFx0ICovXFxuIDIyODpcXHRcXHRpbmV0LVxcdTAwM2V1Y190dGxcXHQ9IC0xO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRpbmV0X3NldF9iaXQoTUNfTE9PUCwgc2spO1xcbiAyMzE6XFx0XFx0aW5ldC1cXHUwMDNlbWNfdHRsXFx0PSAxO1xcbiAyMzI6XFx0XFx0aW5ldC1cXHUwMDNlbWNfaW5kZXhcXHQ9IDA7XFxuIDIzMzpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGluZXQtXFx1MDAzZW1jX2xpc3QsIE5VTEwpO1xcbiAyMzQ6XFx0XFx0aW5ldC1cXHUwMDNlcmN2X3Rvc1xcdD0gMDtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0aWYgKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2lwX25vX3BtdHVfZGlzYykpXFxuIDIzNzpcXHRcXHRcXHRpbmV0LVxcdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX0RPTlQ7XFxuIDIzODpcXHRcXHRlbHNlXFxuIDIzOTpcXHRcXHRcXHRpbmV0LVxcdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX1dBTlQ7XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdGlmIChpbmV0LVxcdTAwM2VpbmV0X251bSkge1xcbiAyNDI6XFx0XFx0XFx0LyogSXQgYXNzdW1lcyB0aGF0IGFueSBwcm90b2NvbCB3aGljaCBhbGxvd3NcXG4gMjQzOlxcdFxcdFxcdCAqIHRoZSB1c2VyIHRvIGFzc2lnbiBhIG51bWJlciBhdCBzb2NrZXRcXG4gMjQ0OlxcdFxcdFxcdCAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseSBzaGFyZXMuXFxuIDI0NTpcXHRcXHRcXHQgKi9cXG4gMjQ2OlxcdFxcdFxcdGluZXQtXFx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVxcdTAwM2VpbmV0X251bSk7XFxuIDI0NzpcXHRcXHRcXHRlcnIgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaGFzaChzayk7XFxuIDI0ODpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyNDk6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gMjUwOlxcdFxcdH1cXG4gMjUxOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaW5pdCkge1xcbiAyNTI6XFx0XFx0XFx0ZXJyID0gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWluaXQoc2spO1xcbiAyNTM6XFx0XFx0XFx0aWYgKGVycilcXG4gMjU0OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XFxuIDI1NTpcXHRcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdGlmICgha2Vybikge1xcbiAyNTg6XFx0XFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19JTkVUX1NPQ0soc2spO1xcbiAyNTk6XFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NDkuMjk5NDg4NzIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEyODM5OTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU29ja2V0IENyZWF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBzZWUgd2UncmUgbG9va2luZyBhdCBzb2NrZXQgY3JlYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgbW9kdWxlIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgZHVyaW5nIHNvY2tldCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYHNvY2tldChBRl9JTkVULCAuLi4pYCBvciBgc29ja2V0KEFGX0lORVQ2LCAuLi4pYCBjYWxscy4gSSByZWNvZ25pemUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIEFGX0lORVQgYW5kIEFGX0lORVQ2IHNvY2tldHMuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIG1lY2hhbmlzbSB0byBtYW5hZ2UgbW9kdWxlIHJlZmVyZW5jZXMgdXNpbmcgYHRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcilgIGFuZCBgbW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpYCB3aXRoaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFRoZSBpbnRlbnQgaGVyZSBhcHBlYXJzIHRvIGJlIHRvIGVuc3VyZSB0aGUgbW9kdWxlIGlzIGtlcHQgYWxpdmUgZHVyaW5nIHNvY2tldCBjcmVhdGlvbi4gVGhlIHJlZmVyZW5jZSBpcyB0aGVuIHJlbGVhc2VkIHdpdGggYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBwYXVzZSBhbmQgY29uc2lkZXIgaG93IGBza19hbGxvY2AgaW50ZXJhY3RzIHdpdGggbW9kdWxlIHJlZmVyZW5jZXMuICpEb2VzKiBgc2tfYWxsb2NgIGl0c2VsZiBoYXZlIHNvbWUgbG9naWMgcmVsYXRlZCB0byBtb2R1bGUgcmVmZXJlbmNlcz8gSWYgc28sIHdlIG1pZ2h0IGhhdmUgc29tZSByZWR1bmRhbnQgcmVmY291bnRpbmcgZ29pbmcgb24sIG9yIHdvcnNlLCBhIGRvdWJsZS1mcmVlIHNpdHVhdGlvbi4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBnbyBhbmQgZXhhbWluZSBgc2tfYWxsb2NgLCBkZWZpbmVkIGxpa2VseSBpbiBgbmV0L2NvcmUvc29jay5jYCBvciBhIHJlbGF0ZWQgZmlsZSwgdG8gY29uZmlybSBpdHMgYmVoYXZpb3IuIEkgbmVlZCB0byBzZWUgd2hhdCBgc2tfYWxsb2NgIGRvZXMgYWJvdXQgbW9kdWxlIHJlZmVyZW5jZXMgaW50ZXJuYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQwMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjUyLjQyNzg5MTAyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1MTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19hbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrLmM9MjIzNz1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX3Byb3RfYWxsb2Moc3RydWN0IHByb3RvICpwcm90LCBnZnBfdCBwcmlvcml0eSxcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yMjUzLVxcdGlmIChzayAhPSBOVUxMKSB7XFxubmV0L2NvcmUvc29jay5jOjIyNTQ6XFx0XFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcXG5uZXQvY29yZS9zb2NrLmMtMjI1NS1cXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTIyNzM9c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIzMDEtICovXFxubmV0L2NvcmUvc29jay5jOjIzMDI6c3RydWN0IHNvY2sgKnNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXFxubmV0L2NvcmUvc29jay5jLTIzMDMtXFx0XFx0ICAgICAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2VybilcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yMzM0LVxcbm5ldC9jb3JlL3NvY2suYzoyMzM1OlxcdFxcdG1lbV9jZ3JvdXBfc2tfYWxsb2Moc2spO1xcbm5ldC9jb3JlL3NvY2suYzoyMzM2OlxcdFxcdGNncm91cF9za19hbGxvYyhcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxubmV0L2NvcmUvc29jay5jLTIzMzctXFx0XFx0c29ja191cGRhdGVfY2xhc3NpZChcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjUyLjQ3NjQ1MDQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzM2OTg2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNrX3Byb3RfYWxsb2NgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvY2tldCBwcm90b2NvbHMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gZXZlcnl0aGluZy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgc2tfcHJvdF9hbGxvY2AuIEkga25vdyBpdCdzIGluIGBuZXQvY29yZS9zb2NrLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhlIGNvcmUgc29ja2V0IGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBob3VzZWQgdGhlcmUuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjYWxscywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHRoZSBgc29ja2AgYW5kIGBza19idWZmYCBzdHJ1Y3R1cmVzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBpcyBsaW5rZWQgaW4gYW5kIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIHNwaW5sb2NrcyBpbnZvbHZlZCBhbmQgdGhlIGxvY2tpbmcgb3JkZXI/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgcmFjZSBjb25kaXRpb25zIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbi4gSXMgaXQgY2FsbGVkIGZyb20gdXNlciBzcGFjZSwga2VybmVsIHNwYWNlLCBvciBib3RoPyBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjU0LjQxMDE1MzA2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzU6XFx0fVxcbjIyMzY6XFx0XFxuMjIzNzpcXHRzdGF0aWMgc3RydWN0IHNvY2sgKnNrX3Byb3RfYWxsb2Moc3RydWN0IHByb3RvICpwcm90LCBnZnBfdCBwcmlvcml0eSxcXG4yMjM4OlxcdFxcdFxcdGludCBmYW1pbHkpXFxuMjIzOTpcXHR7XFxuMjI0MDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMjI0MTpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYjtcXG4yMjQyOlxcdFxcbjIyNDM6XFx0XFx0c2xhYiA9IHByb3QtXFx1MDAzZXNsYWI7XFxuMjI0NDpcXHRcXHRpZiAoc2xhYiAhPSBOVUxMKSB7XFxuMjI0NTpcXHRcXHRcXHRzayA9IGttZW1fY2FjaGVfYWxsb2Moc2xhYiwgcHJpb3JpdHkgXFx1MDAyNiB+X19HRlBfWkVSTyk7XFxuMjI0NjpcXHRcXHRcXHRpZiAoIXNrKVxcbjIyNDc6XFx0XFx0XFx0XFx0cmV0dXJuIHNrO1xcbjIyNDg6XFx0XFx0XFx0aWYgKHdhbnRfaW5pdF9vbl9hbGxvYyhwcmlvcml0eSkpXFxuMjI0OTpcXHRcXHRcXHRcXHRza19wcm90X2NsZWFyX251bGxzKHNrLCBwcm90LVxcdTAwM2VvYmpfc2l6ZSk7XFxuMjI1MDpcXHRcXHR9IGVsc2VcXG4yMjUxOlxcdFxcdFxcdHNrID0ga21hbGxvYyhwcm90LVxcdTAwM2VvYmpfc2l6ZSwgcHJpb3JpdHkpO1xcbjIyNTI6XFx0XFxuMjI1MzpcXHRcXHRpZiAoc2sgIT0gTlVMTCkge1xcbjIyNTQ6XFx0XFx0XFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcXG4yMjU1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMjI1NjpcXHRcXG4yMjU3OlxcdFxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQocHJvdC1cXHUwMDNlb3duZXIpKVxcbjIyNTg6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9zZWM7XFxuMjI1OTpcXHRcXHR9XFxuMjI2MDpcXHRcXG4yMjYxOlxcdFxcdHJldHVybiBzaztcXG4yMjYyOlxcdFxcbjIyNjM6XFx0b3V0X2ZyZWVfc2VjOlxcbjIyNjQ6XFx0XFx0c2VjdXJpdHlfc2tfZnJlZShzayk7XFxuMjI2NTpcXHRvdXRfZnJlZTpcXG4yMjY2OlxcdFxcdGlmIChzbGFiICE9IE5VTEwpXFxuMjI2NzpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xcbjIyNjg6XFx0XFx0ZWxzZVxcbjIyNjk6XFx0XFx0XFx0a2ZyZWUoc2spO1xcbjIyNzA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjI3MTpcXHR9XFxuMjI3MjpcXHRcXG4yMjczOlxcdHN0YXRpYyB2b2lkIHNrX3Byb3RfZnJlZShzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBzb2NrICpzaylcXG4yMjc0OlxcdHtcXG4yMjc1OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xcbjIyNzY6XFx0XFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdG93bmVyID0gcHJvdC1cXHUwMDNlb3duZXI7XFxuMjI3OTpcXHRcXHRzbGFiID0gcHJvdC1cXHUwMDNlc2xhYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NTQuNDEwMzQwMDk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMjkxMjIwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBOZXR3b3JrIFNvY2tldCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGNvZGUgY2hhbmdlcywgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHdoZXJlIHdlIHN0YW5kLiAgYHNrX3Byb3RfYWxsb2NgIHdhcyBjYWxsaW5nIGB0cnlfbW9kdWxlX2dldGAgb24gdGhlIHByb3RvY29sJ3Mgb3duZXIsIGJ1dCB0aGVyZSdzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZC9vciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpZiB0aGUgbW9kdWxlIHVubG9hZHMgYmVmb3JlIGBza19hbGxvY2AgaXMgY2FsbGVkLCBvciBpZiBgYW5zd2VyX3Byb3RgIGNvbWVzIGZyb20gYSBtb2R1bGUgdGhhdCdzIGJlaW5nIHVubG9hZGVkLiBDb252ZXJzZWx5LCBgc2tfcHJvdF9mcmVlYCBkb2VzIGBtb2R1bGVfcHV0KG93bmVyKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgZXh0cmEgYHRyeV9tb2R1bGVfZ2V0YC9gbW9kdWxlX3B1dGAgaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzIG1vZHVsZSB1bmxvYWRpbmcgaXNzdWUgd2hpbGUgc29ja2V0IGNyZWF0aW9uIGlzIGluIHByb2dyZXNzLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBgaW5ldF9jcmVhdGVgIGFuZCBgaW5ldDZfY3JlYXRlYCBhcmUgdGhlICpjb3JlKiBzb2NrZXQgY3JlYXRpb24gZnVuY3Rpb25zIGZvciBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAgc29ja2V0cywgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbmV0d29yayBwcm9ncmFtbWluZy4gVGhleSdyZSBleGVjdXRlZCBkaXJlY3RseSBmcm9tIHN5c2NhbGxzIGxpa2UgYHNvY2tldCgpYCwgYGFjY2VwdCgpYCwgYW5kIGBzb2NrZXRwYWlyKClgLiBUaGlzIGlzIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29kZSwgc2l0dGluZyBpbiBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLlxuXG5CYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgZGVmaW5pdGl2ZWx5IGZhbGxzIHVuZGVyIFwiV29ydGhGdXp6aW5nID0gdHJ1ZS5cIiBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgYXJlIGZhaXIgZ2FtZSwgYW5kIHRoaXMgdG91Y2hlcyB0aGF0IGRpcmVjdGx5LiAgUmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cD8gQ2hlY2suIFJlYWNoYWJsZSBjb2RlPyBBYnNvbHV0ZWx5LlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzLiAgYGluZXRfY3JlYXRlYCBmcm9tIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgaW5ldDZfY3JlYXRlYCBmcm9tIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYCBhcmUgKnRoZSogZnVuY3Rpb25zLiAgVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGVzZSB0d28gZnVuY3Rpb25zLCBub3RoaW5nIGVsc2UuIFdlIGFyZW4ndCBkZWFsaW5nIHdpdGggZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgbGlrZSBtZW1vcnkgYWxsb2NhdG9yczsgdGhlc2UgYXJlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3Igc29ja2V0IGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAgZmFtaWxpZXMuICBUaGlzIGlzbid0IGEgaG90IHBhdGggdGhhdCdzIGdvaW5nIHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIEl0IGlzIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMgYXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNC5cblxuSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgbmV0L2lwdjQvYCBhbmQgYG5ldC9pcHY2L2AgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIG1ha2UgdGhlc2UgZnVuY3Rpb25zIGluYWNjZXNzaWJsZSwgYnV0IGFzc3VtaW5nIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCwgd2UgYXJlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTE0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NTkuNDM5NDY1Nzc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA1MTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9pbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xNzE5PXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X21pYl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTczMC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxNzMxOlxcdFxcdHN0cnVjdCBpcHN0YXRzX21pYiAqYWZfaW5ldF9zdGF0cztcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTczMjpcXHRcXHRhZl9pbmV0X3N0YXRzID0gcGVyX2NwdV9wdHIobmV0LVxcdTAwM2VtaWIuaXBfc3RhdGlzdGljcywgaSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjE3MzM6XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNmFmX2luZXRfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTczNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTc5MD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaW5ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTgzMC1cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTgzMTpzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGFmX2luZXRfb3BzID0ge1xcbm5ldC9pcHY0L2FmX2luZXQuYy0xODMyLVxcdC5pbml0ID0gaW5ldF9pbml0X25ldCxcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xODM1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfaW5ldF9wZXJuZXRfb3BzKHZvaWQpXFxubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzYte1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxODM3OlxcdHJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZhZl9pbmV0X29wcyk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzgtfVxcbi0tXFxubmV0L2lwdjQvcmF3LmM9NzAwPXN0YXRpYyB2b2lkIHJhd19kZXN0cm95KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTcwNi1cXG5uZXQvaXB2NC9yYXcuYzo3MDc6LyogVGhpcyBnZXRzIHJpZCBvZiBhbGwgdGhlIG5hc3RpZXMgaW4gYWZfaW5ldC4gLURhdmVNICovXFxubmV0L2lwdjQvcmF3LmMtNzA4LXN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy00MS0gKlxcdFxcdE1hdHQgRGlsbG9uXFx0OlxcdFVEUCBsZW5ndGggY2hlY2tzLlxcbm5ldC9pcHY0L3VkcC5jOjQyOiAqXFx0XFx0QWxhbiBDb3hcXHQ6XFx0U21hcnRlciBhZl9pbmV0IHVzZWQgcHJvcGVybHkuXFxubmV0L2lwdjQvdWRwLmMtNDMtICpcXHRcXHRBbGFuIENveFxcdDpcXHRVc2UgbmV3IGtlcm5lbCBzaWRlIGFkZHJlc3NpbmcuXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSArPSBpcHY2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxcbm5ldC9pcHY2L01ha2VmaWxlOjg6aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy04LSAqXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo5OiAqXFx0QWRhcHRlZCBmcm9tIGxpbnV4L25ldC9pcHY0L2FmX2luZXQuY1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTAtICpcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9ODg4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY2X2luaXRfbWlicyhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTkwMC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAxOlxcdFxcdHN0cnVjdCBpcHN0YXRzX21pYiAqYWZfaW5ldDZfc3RhdHM7XFxubmV0L2lwdjYvYWZfaW5ldDYuYzo5MDI6XFx0XFx0YWZfaW5ldDZfc3RhdHMgPSBwZXJfY3B1X3B0cihuZXQtXFx1MDAzZW1pYi5pcHY2X3N0YXRpc3RpY3MsIGkpO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAzOlxcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZhZl9pbmV0Nl9zdGF0cy1cXHUwMDNlc3luY3ApO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtOTA0LVxcdH1cXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTIxMT1ib29sIHJhdzZfbG9jYWxfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcilcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTIxNS1cXG5uZXQvaXB2Ni9yYXcuYzoyMTY6LyogVGhpcyBjbGVhbnMgdXAgYWZfaW5ldDYgYSBiaXQuIC1EYXZlTSAqL1xcbm5ldC9pcHY2L3Jhdy5jLTIxNy1zdGF0aWMgaW50IHJhd3Y2X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuLS1cXG5uZXQvc2N0cC9pcHY2LmM9MTA4OD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHNjdHB2Nl9wcm90b2NvbCA9IHtcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy0xMDkzLVxcbm5ldC9zY3RwL2lwdjYuYzoxMDk0OnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2FmX2luZXQ2ID0ge1xcbm5ldC9zY3RwL2lwdjYuYy0xMDk1LVxcdC5zYV9mYW1pbHlcXHQgICA9IEFGX0lORVQ2LFxcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTExMjI9c3RhdGljIHN0cnVjdCBzY3RwX3BmIHNjdHBfcGZfaW5ldDYgPSB7XFxuLS1cXG5uZXQvc2N0cC9pcHY2LmMtMTEzMy1cXHQuY29weV9pcF9vcHRpb25zID0gc2N0cF92Nl9jb3B5X2lwX29wdGlvbnMsXFxubmV0L3NjdHAvaXB2Ni5jOjExMzQ6XFx0LmFmICAgICAgICAgICAgPSBcXHUwMDI2c2N0cF9hZl9pbmV0NixcXG5uZXQvc2N0cC9pcHY2LmMtMTEzNS19O1xcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTExMzg9dm9pZCBzY3RwX3Y2X3BmX2luaXQodm9pZClcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy0xMTQzLVxcdC8qIFJlZ2lzdGVyIHRoZSBTQ1RQIHNwZWNpZmljIEFGX0lORVQ2IGZ1bmN0aW9ucy4gKi9cXG5uZXQvc2N0cC9pcHY2LmM6MTE0NDpcXHRzY3RwX3JlZ2lzdGVyX2FmKFxcdTAwMjZzY3RwX2FmX2luZXQ2KTtcXG5uZXQvc2N0cC9pcHY2LmMtMTE0NS19XFxuLS1cXG5uZXQvc2N0cC9pcHY2LmM9MTE0Nz12b2lkIHNjdHBfdjZfcGZfZXhpdCh2b2lkKVxcbm5ldC9zY3RwL2lwdjYuYy0xMTQ4LXtcXG5uZXQvc2N0cC9pcHY2LmM6MTE0OTpcXHRsaXN0X2RlbChcXHUwMDI2c2N0cF9hZl9pbmV0Ni5saXN0KTtcXG5uZXQvc2N0cC9pcHY2LmMtMTE1MC19XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEwNDA9c3RhdGljIGlubGluZSBpbnQgc2N0cF92NF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTA4Mi1cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEwODM6c3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldDtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwODQtXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2N0cF9wZiBzY3RwX3BmX2luZXQgPSB7XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwOTYtXFx0LmNvcHlfaXBfb3B0aW9ucyA9IHNjdHBfdjRfY29weV9pcF9vcHRpb25zLFxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTA5NzpcXHQuYWYgICAgICAgICAgICA9IFxcdTAwMjZzY3RwX2FmX2luZXRcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwOTgtfTtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9MTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCBzY3RwX3Byb3RvY29sID0ge1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMTU3LS8qIElQdjQgYWRkcmVzcyByZWxhdGVkIGZ1bmN0aW9ucy4gICovXFxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMTU4OnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2FmX2luZXQgPSB7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMTU5LVxcdC5zYV9mYW1pbHlcXHQgICA9IEFGX0lORVQsXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyMzE9c3RhdGljIHZvaWQgc2N0cF92NF9wZl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEyMzQtXFx0c2N0cF9yZWdpc3Rlcl9wZihcXHUwMDI2c2N0cF9wZl9pbmV0LCBQRl9JTkVUKTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEyMzU6XFx0c2N0cF9yZWdpc3Rlcl9hZihcXHUwMDI2c2N0cF9hZl9pbmV0KTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEyMzYtfVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMjM4PXN0YXRpYyB2b2lkIHNjdHBfdjRfcGZfZXhpdCh2b2lkKVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTIzOS17XFxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMjQwOlxcdGxpc3RfZGVsKFxcdTAwMjZzY3RwX2FmX2luZXQubGlzdCk7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjQxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NTkuNTA5NTI3NDg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODQwMDAwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZCBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSdsbCBkcmlsbCBkb3duLlxuXG5HaXZlbiB0aGF0IEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgSVB2NCBhbmQgSVB2NiwgSSBzaG91bGQgYWxzbyBpbW1lZGlhdGVseSBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhlc2Ugd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgbW9yZSBncmFudWxhciBvcHRpb25zIHNwZWNpZmljIHRvIGVhY2ggcHJvdG9jb2wuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyB0aGVyZTogdGhpbmdzIGxpa2UgZmVhdHVyZXMsIHJvdXRpbmcgdGFibGVzLCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgYWxsIHRoZSByZXN0LiBJdCdzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIHF1aWNrbHkgYXNzZXNzaW5nIGFuZC9vciBtb2RpZnlpbmcga2VybmVsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgY29uZmlndXJhYmxlIGNob2ljZXMgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjU2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MDEuNDkzNTI5OTU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU0MTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMzkwMiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0LzgwMi9mZGRpLmMtMi0vKlxcbm5ldC84MDIvZmRkaS5jOjM6ICogSU5FVFxcdFxcdEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWFxcbm5ldC84MDIvZmRkaS5jOjQ6ICpcXHRcXHRvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgQlNEIFNvY2tldFxcbm5ldC84MDIvZmRkaS5jLTUtICpcXHRcXHRpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC5cXG4tLVxcbm5ldC84MDIxcS92bGFuLmMtMi0vKlxcbm5ldC84MDIxcS92bGFuLmM6MzogKiBJTkVUXFx0XFx0ODAyLjFRIFZMQU5cXG5uZXQvODAyMXEvdmxhbi5jLTQtICpcXHRcXHRFdGhlcm5ldC10eXBlIGRldmljZSBoYW5kbGluZy5cXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz01MTU9c3RhdGljIGludCB2bGFuX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTIzLVxcdGlmIChwdHlwZSlcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NTI0OlxcdFxcdGVyciA9IElORElSRUNUX0NBTExfSU5FVChwdHlwZS1cXHUwMDNlY2FsbGJhY2tzLmdyb19jb21wbGV0ZSxcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTI1LVxcdFxcdFxcdFxcdFxcdCBpcHY2X2dyb19jb21wbGV0ZSwgaW5ldF9ncm9fY29tcGxldGUsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0yLS8qIC0qLSBsaW51eC1jIC0qLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjM6ICogSU5FVFxcdFxcdDgwMi4xUSBWTEFOXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNC0gKlxcdFxcdEV0aGVybmV0LXR5cGUgZGV2aWNlIGhhbmRsaW5nLlxcbi0tXFxubmV0LzlwL0tjb25maWc9MTk9Y29uZmlnIE5FVF85UF9GRFxcbm5ldC85cC9LY29uZmlnLTIwLVxcdGRlZmF1bHQgTkVUXzlQXFxubmV0LzlwL0tjb25maWc6MjE6XFx0aW1wbHkgSU5FVFxcbm5ldC85cC9LY29uZmlnLTIyLVxcdGltcGx5IFVOSVhcXG4tLVxcbm5ldC85cC9LY29uZmlnPTUyPWNvbmZpZyBORVRfOVBfUkRNQVxcbm5ldC85cC9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xcbm5ldC85cC9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCI5UCBSRE1BIFRyYW5zcG9ydCAoRXhwZXJpbWVudGFsKVxcXCJcXG4tLVxcbm5ldC85cC90cmFuc19mZC5jPTg1MD1zdGF0aWMgaW50IHA5X2JpbmRfcHJpdnBvcnQoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC85cC90cmFuc19mZC5jLTg1NS1cXHRzdG9yLnNzX2ZhbWlseSA9IHNvY2stXFx1MDAzZW9wcy1cXHUwMDNlZmFtaWx5O1xcbm5ldC85cC90cmFuc19mZC5jOjg1NjpcXHRpZiAoc3Rvci5zc19mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQvOXAvdHJhbnNfZmQuYy04NTctXFx0XFx0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2c3RvciktXFx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpO1xcbi0tXFxubmV0LzlwL3RyYW5zX2ZkLmMtODYwLVxcdGZvciAocG9ydCA9IHA5X2lwcG9ydF9yZXN2X21heDsgcG9ydCBcXHUwMDNlPSBwOV9pcHBvcnRfcmVzdl9taW47IHBvcnQtLSkge1xcbm5ldC85cC90cmFuc19mZC5jOjg2MTpcXHRcXHRpZiAoc3Rvci5zc19mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQvOXAvdHJhbnNfZmQuYy04NjItXFx0XFx0XFx0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2c3RvciktXFx1MDAzZXNpbl9wb3J0ID0gaHRvbnMoKHVzaG9ydClwb3J0KTtcXG4tLVxcbm5ldC85cC90cmFuc19yZG1hLmM9NTE0PXN0YXRpYyBpbnQgcDlfcmRtYV9iaW5kX3ByaXZwb3J0KHN0cnVjdCBwOV90cmFuc19yZG1hICpyZG1hKVxcbi0tXFxubmV0LzlwL3RyYW5zX3JkbWEuYy01MTYtXFx0c3RydWN0IHNvY2thZGRyX2luIGNsID0ge1xcbm5ldC85cC90cmFuc19yZG1hLmM6NTE3OlxcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG5uZXQvOXAvdHJhbnNfcmRtYS5jLTUxOC1cXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSksXFxuLS1cXG5uZXQvOXAvdHJhbnNfcmRtYS5jPTUzNz1yZG1hX2NyZWF0ZV90cmFucyhzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbm5ldC85cC90cmFuc19yZG1hLmMtNTc3LVxcdC8qIFJlc29sdmUgdGhlIHNlcnZlcidzIGFkZHJlc3MgKi9cXG5uZXQvOXAvdHJhbnNfcmRtYS5jOjU3ODpcXHRyZG1hLVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbm5ldC85cC90cmFuc19yZG1hLmMtNTc5LVxcdHJkbWEtXFx1MDAzZWFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5fYXRvbihhZGRyKTtcXG4tLVxcbm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZy0xMzUtXFxubmV0L0tjb25maWc6MTM2OmlmIElORVRcXG5uZXQvS2NvbmZpZy0xMzctc291cmNlIFxcXCJuZXQvaXB2NC9LY29uZmlnXFxcIlxcbi0tXFxubmV0L0tjb25maWc9MTQwPXNvdXJjZSBcXFwibmV0L21wdGNwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMTQxLVxcbm5ldC9LY29uZmlnOjE0MjplbmRpZiAjIGlmIElORVRcXG5uZXQvS2NvbmZpZy0xNDMtXFxuLS1cXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIzMy1cXHRkZXBlbmRzIG9uIEJSSURHRVxcbm5ldC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L0tjb25maWctMjM1LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWctMzYyLVxcdGJvb2wgXFxcImVuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlxcXCJcXG5uZXQvS2NvbmZpZzozNjM6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L0tjb25maWctMzY0LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4tLVxcbm5ldC9LY29uZmlnPTM4Nj1jb25maWcgTkVUX1BLVEdFTlxcbm5ldC9LY29uZmlnLTM4Ny1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcXFwiXFxubmV0L0tjb25maWc6Mzg4OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubmV0L0tjb25maWctMzg5LVxcdGhlbHBcXG4tLVxcbm5ldC9LY29uZmlnPTQwMT1jb25maWcgTkVUX0RST1BfTU9OSVRPUlxcbm5ldC9LY29uZmlnLTQwMi1cXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IG5ldHdvcmsgcGFja2V0IGRyb3AgYWxlcnRpbmcgc2VydmljZVxcXCJcXG5uZXQvS2NvbmZpZzo0MDM6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFRSQUNFUE9JTlRTXFxubmV0L0tjb25maWctNDA0LVxcdGhlbHBcXG4tLVxcbm5ldC9LY29uZmlnPTQ1Mz1jb25maWcgTFdUVU5ORUxfQlBGXFxubmV0L0tjb25maWctNDU0LVxcdGJvb2wgXFxcIkV4ZWN1dGUgQlBGIHByb2dyYW0gYXMgcm91dGUgbmV4dGhvcCBhY3Rpb25cXFwiXFxubmV0L0tjb25maWc6NDU1OlxcdGRlcGVuZHMgb24gTFdUVU5ORUwgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbm5ldC9LY29uZmlnLTQ1Ni1cXHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxcbi0tXFxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxubmV0L0tjb25maWctNDc2LVxcdGRlZl90cmlzdGF0ZSBQSFlMSUJcXG5uZXQvS2NvbmZpZzo0Nzc6XFx0ZGVwZW5kcyBvbiBQSFlMSUIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbm5ldC9LY29uZmlnLTQ3OC1cXG4tLVxcbm5ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuLS1cXG5uZXQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG5uZXQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcXHRcXHRcXHRcXHQrPSBpcHY2L1xcbi0tXFxubmV0L2F0bS9LY29uZmlnPTIyPWNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxubmV0L2F0bS9LY29uZmlnOjI0OlxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG5uZXQvYXRtL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZz0zND1jb25maWcgQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkJyaWRnZSBMb29wIEF2b2lkYW5jZVxcXCJcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zNy1cXHRzZWxlY3QgQ1JDMTZcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc9NDc9Y29uZmlnIEJBVE1BTl9BRFZfREFUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00OC1cXHRib29sIFxcXCJEaXN0cmlidXRlZCBBUlAgVGFibGVcXFwiXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0OTpcXHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnPTU3PWNvbmZpZyBCQVRNQU5fQURWX01DQVNUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cXHRib29sIFxcXCJNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXFxcIlxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NTk6XFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFxcdTAwMjZcXHUwMDI2IElORVQgXFx1MDAyNlxcdTAwMjYgIShCUklER0U9bSBcXHUwMDI2XFx1MDAyNiBCQVRNQU5fQURWPXkpXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02MC1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTE3Ni1cXHRcXHR9XFxubmV0L2JwZi90ZXN0X3J1bi5jOjExNzc6XFx0XFx0c2stXFx1MDAzZXNrX2ZhbWlseSA9IEFGX0lORVQ7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTExNzgtXFx0XFx0c2stXFx1MDAzZXNrX3Jjdl9zYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMTg2LVxcdFxcdH1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTE4NzpcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID0gQUZfSU5FVDY7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTExODgtXFx0XFx0c2stXFx1MDAzZXNrX3Y2X3Jjdl9zYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE1Nzg9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjIyLVxcdHN3aXRjaCAoY3R4LmZhbWlseSkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjIzOlxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYyNC1cXHRcXHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXFx1MDAzZWxvY2FsX2lwNDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjI4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjI5OlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2MzAtXFx0XFx0Y3R4LnY2LmRhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVxcdTAwM2Vsb2NhbF9pcDY7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTcyMT1zdGF0aWMgaW50IHZlcmlmeV9hbmRfY29weV9ob29rX3N0YXRlKHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzM0LVxcdFxcdHN3aXRjaCAoc3RhdGUtXFx1MDAzZWhvb2spIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTczNTpcXHRcXHRjYXNlIE5GX0lORVRfUFJFX1JPVVRJTkc6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzYtXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWluID0gZGV2O1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzM3LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzM4OlxcdFxcdGNhc2UgTkZfSU5FVF9MT0NBTF9JTjpcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTczOS1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlaW4gPSBkZXY7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDAtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE3NDE6XFx0XFx0Y2FzZSBORl9JTkVUX0ZPUldBUkQ6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDItXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWluID0gZGV2O1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDQtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE3NDU6XFx0XFx0Y2FzZSBORl9JTkVUX0xPQ0FMX09VVDpcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0Ni1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlb3V0ID0gZGV2O1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzQ3LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzQ4OlxcdFxcdGNhc2UgTkZfSU5FVF9QT1NUX1JPVVRJTkc6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDktXFx0XFx0XFx0c3RhdGUtXFx1MDAzZW91dCA9IGRldjtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNzc2PWludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc4My1cXHRcXHQucGYgPSBORlBST1RPX0lQVjQsXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE3ODQ6XFx0XFx0Lmhvb2sgPSBORl9JTkVUX0xPQ0FMX09VVCxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc4NS1cXHR9O1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE4MzUtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE4MzY6XFx0aWYgKGhvb2tfc3RhdGUuaG9vayAhPSBORl9JTkVUX0xPQ0FMX09VVCkge1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xODM3LVxcdFxcdGlmIChzaXplIFxcdTAwM2MgRVRIX0hMRU4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSlcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZz0zNj1jb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zOC1cXHRkZXBlbmRzIG9uIEJSSURHRVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIElORVRcXG5uZXQvYnJpZGdlL0tjb25maWctNDAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTI3PXZvaWQgYnJfcmVjYWxjdWxhdGVfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQxLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00My1zdGF0aWMgdm9pZCBicl9hcnBfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTcxLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy03My1cXHQgICAgKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApIHx8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NzY9aW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTY4LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxNjk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3MC1cXHQgICAgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz00MD1zdGF0aWMgc2l6ZV90IF9fYnJfcnBvcnRzX29uZV9zaXplKHZvaWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTQ0LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAvKiBNREJBX1JPVVRFUl9QQVRUUl9UWVBFICovXFxubmV0L2JyaWRnZS9icl9tZGIuYzo0NTpcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICsgLyogTURCQV9ST1VURVJfUEFUVFJfSU5FVF9USU1FUiAqL1xcbm5ldC9icmlkZ2UvYnJfbWRiLmM6NDY6XFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArIC8qIE1EQkFfUk9VVEVSX1BBVFRSX0lORVQ2X1RJTUVSICovXFxubmV0L2JyaWRnZS9icl9tZGIuYy00Ny1cXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAgLyogTURCQV9ST1VURVJfUEFUVFJfVklEICovXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwPWludCBicl9ycG9ydHNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTExNS1cXHRcXHQgICAgKGhhdmVfaXA0X21jX3J0ciBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTE2OlxcdFxcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBNREJBX1JPVVRFUl9QQVRUUl9JTkVUX1RJTUVSLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE3LVxcdFxcdFxcdFxcdCBpcDRfdGltZXIpKSB8fFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE4LVxcdFxcdCAgICAoaGF2ZV9pcDZfbWNfcnRyIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMTk6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIE1EQkFfUk9VVEVSX1BBVFRSX0lORVQ2X1RJTUVSLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTIwLVxcdFxcdFxcdFxcdCBpcDZfdGltZXIpKSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MzgtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1Mzk6XFx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsIHN0YXRlLVxcdTAwM2VuZXQsIHN0YXRlLVxcdTAwM2Vzaywgc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQwLVxcdFxcdHNrYi1cXHUwMDNlZGV2LCBOVUxMLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01NjgtICogICAgb3JpZ2luYWwgc2tiLiAgVGhlIG1hY3ZsYW4gcnggaGFuZGxlciB0aGVuIHJldHVybnMgUlhfSEFORExFUl9QQVNTLlxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTY5OiAqIDUuIE5vcm1hbCBjb25udHJhY2sgaG9va3MgKGluIE5GX0lORVRfTE9DQUxfSU4pIGNvbmZpcm0gdGhlIG9yaWcgc2tiLlxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTcwLSAqXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzIwLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzIxOlxcdE5GX0hPT0socGYsIE5GX0lORVRfRk9SV0FSRCwgc3RhdGUtXFx1MDAzZW5ldCwgTlVMTCwgc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzIyLVxcdFxcdGJybmZfZ2V0X2xvZ2ljYWxfZGV2KHNrYiwgc3RhdGUtXFx1MDAzZWluLCBzdGF0ZS1cXHUwMDNlbmV0KSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTI1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk2My1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk2NDpcXHRORl9IT09LKHBmLCBORl9JTkVUX1BPU1RfUk9VVElORywgc3RhdGUtXFx1MDAzZW5ldCwgc3RhdGUtXFx1MDAzZXNrLCBza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NjUtXFx0XFx0TlVMTCwgcmVhbG91dGRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTcxLS8qIElQL1NBQk9UQUdFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTcyOi8qIERvbid0IGhhbmQgbG9jYWxseSBkZXN0aW5lZCBwYWNrZXRzIHRvIFBGX0lORVQoNikvUFJFX1JPVVRJTkdcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3My0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgYnJfbmZfb3BzW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwNzYtXFx0XFx0LnBmID0gTkZQUk9UT19JUFY0LFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTA3NzpcXHRcXHQuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDc4LVxcdFxcdC5wcmlvcml0eSA9IE5GX0lQX1BSSV9GSVJTVCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA4Mi1cXHRcXHQucGYgPSBORlBST1RPX0lQVjYsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDgzOlxcdFxcdC5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORyxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwODQtXFx0XFx0LnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYz0xNjI9dW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nX2lwdjYodm9pZCAqcHJpdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xODItXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE4MzpcXHRORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QUkVfUk9VVElORywgc3RhdGUtXFx1MDAzZW5ldCwgc3RhdGUtXFx1MDAzZXNrLCBza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE4NC1cXHRcXHRza2ItXFx1MDAzZWRldiwgTlVMTCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmZfY29yZS5jPTUyPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7XFxubmV0L2JyaWRnZS9icl9uZl9jb3JlLmM6NTM6XFx0LmZhbWlseVxcdFxcdD0gQUZfSU5FVCxcXG5uZXQvYnJpZGdlL2JyX25mX2NvcmUuYy01NC1cXHQudXBkYXRlX3BtdHVcXHQ9IGZha2VfdXBkYXRlX3BtdHUsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTE4OT1jb25maWcgQlJJREdFX0VCVF9BUlBSRVBMWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTkwLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGFycCByZXBseSB0YXJnZXQgc3VwcG9ydFxcXCJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE5MTpcXHRkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFUyBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTItXFx0aGVscFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTg5PXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgZWJ0X3NvY2tvcHRzID0ge1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU5MDpcXHQucGZcXHRcXHQ9IFBGX0lORVQsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkxLVxcdC5zZXRfb3B0bWluXFx0PSBFQlRfQkFTRV9DVEwsXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfTElCXFxubmV0L2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGNvcmUgbGlicmFyeVxcXCJcXG5uZXQvY2VwaC9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L2NlcGgvS2NvbmZpZy01LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxubmV0L2NlcGgvZGVjb2RlLmM9MTUyPXN0YXRpYyBpbnQgZ2V0X3NvY2thZGRyX2VuY29kaW5nX2xlbihzYV9mYW1pbHlfdCBmYW1pbHkpXFxuLS1cXG5uZXQvY2VwaC9kZWNvZGUuYy0xNjAtXFx0c3dpdGNoIChmYW1pbHkpIHtcXG5uZXQvY2VwaC9kZWNvZGUuYzoxNjE6XFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9jZXBoL2RlY29kZS5jLTE2Mi1cXHRcXHRyZXR1cm4gc2l6ZW9mKHUuc2luKTtcXG5uZXQvY2VwaC9kZWNvZGUuYzoxNjM6XFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQvY2VwaC9kZWNvZGUuYy0xNjQtXFx0XFx0cmV0dXJuIHNpemVvZih1LnNpbjYpO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTY0PWNvbnN0IGNoYXIgKmNlcGhfcHJfYWRkcihjb25zdCBzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3NS1cXHRzd2l0Y2ggKHNzLnNzX2ZhbWlseSkge1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE3NjpcXHRjYXNlIEFGX0lORVQ6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTc3LVxcdFxcdHNucHJpbnRmKHMsIE1BWF9BRERSX1NUUl9MRU4sIFxcXCIoJWQpJXBJNDolaHVcXFwiLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTgxLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE4MjpcXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE4My1cXHRcXHRzbnByaW50ZihzLCBNQVhfQUREUl9TVFJfTEVOLCBcXFwiKCVkKVslcEk2Y106JWh1XFxcIixcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTExNzg9Ym9vbCBjZXBoX2FkZHJfaXNfYmxhbmsoY29uc3Qgc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg0LVxcdHN3aXRjaCAoc3Muc3NfZmFtaWx5KSB7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTE4NTpcXHRjYXNlIEFGX0lORVQ6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTE4Ni1cXHRcXHRyZXR1cm4gYWRkcjQtXFx1MDAzZXNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMTg3OlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTE4OC1cXHRcXHRyZXR1cm4gaXB2Nl9hZGRyX2FueShhZGRyNik7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xMTk1PWludCBjZXBoX2FkZHJfcG9ydChjb25zdCBzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTExOTctXFx0c3dpdGNoIChnZXRfdW5hbGlnbmVkKFxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyLnNzX2ZhbWlseSkpIHtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMTk4OlxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTk5LVxcdFxcdHJldHVybiBudG9ocyhnZXRfdW5hbGlnbmVkKFxcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyKS1cXHUwMDNlc2luX3BvcnQpKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMjAwOlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIwMS1cXHRcXHRyZXR1cm4gbnRvaHMoZ2V0X3VuYWxpZ25lZChcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW42X3BvcnQpKTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTEyMDY9dm9pZCBjZXBoX2FkZHJfc2V0X3BvcnQoc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIsIGludCBwKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIwOC1cXHRzd2l0Y2ggKGdldF91bmFsaWduZWQoXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KSkge1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMDk6XFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMTAtXFx0XFx0cHV0X3VuYWxpZ25lZChodG9ucyhwKSwgXFx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW5fcG9ydCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIxMS1cXHRcXHRicmVhaztcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMjEyOlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIxMy1cXHRcXHRwdXRfdW5hbGlnbmVkKGh0b25zKHApLCBcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW42X3BvcnQpO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTIyMT1zdGF0aWMgaW50IGNlcGhfcHRvbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHN0cnVjdCBjZXBoX2VudGl0eV9hZGRyICphZGRyLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIyNi1cXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh1OCAqKVxcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyKS1cXHUwMDNlc2luX2FkZHIuc19hZGRyLCBkZWxpbSwgaXBlbmQpKSB7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTIyNzpcXHRcXHRwdXRfdW5hbGlnbmVkKEFGX0lORVQsIFxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyLnNzX2ZhbWlseSk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIyOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMzEtXFx0aWYgKGluNl9wdG9uKHN0ciwgbGVuLCAodTggKilcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW42X2FkZHIuczZfYWRkciwgZGVsaW0sIGlwZW5kKSkge1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMzI6XFx0XFx0cHV0X3VuYWxpZ25lZChBRl9JTkVUNiwgXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMjMzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9NDY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDc6aWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9NYWtlZmlsZS00OC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz02OT1icGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTEwMi1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxMDM6XFx0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTA0LVxcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz0xNjE9X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTc3LVxcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTc4OlxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNzktXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4MC1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9icGZfa3NvY2suYzoxODE6XFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQvY29yZS9icGZfa3NvY2suYy0xODItXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NDI1PXN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnIHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDMwLS8qIFRoZSByZXBseSB3aWxsIGJlIGxpa2U6XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MzE6ICogSU5FVF9ESUFHX0JQRl9TS19TVE9SQUdFUyAobmxhX25lc3QpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MzItICpcXHRTS19ESUFHX0JQRl9TVE9SQUdFIChubGFfbmVzdClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NTY4PXN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfZGlhZ19wdXRfYWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNTcxLXtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjU3MjpcXHQvKiBzdGdfYXJyYXlfdHlwZSAoZS5nLiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTKSAqL1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNTczLVxcdHVuc2lnbmVkIGludCBkaWFnX3NpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NjI0PWludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dChzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI4LXtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjYyOTpcXHQvKiBzdGdfYXJyYXlfdHlwZSAoZS5nLiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTKSAqL1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjMwLVxcdHVuc2lnbmVkIGludCBkaWFnX3NpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTYyNTY9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX29uZV9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcGZtZW1hbGxvYylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYyNjMtXFx0aWYgKHB0X3ByZXYpXFxubmV0L2NvcmUvZGV2LmM6NjI2NDpcXHRcXHRyZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQocHRfcHJldi1cXHUwMDNlZnVuYywgaXB2Nl9yY3YsIGlwX3Jjdiwgc2tiLFxcbm5ldC9jb3JlL2Rldi5jLTYyNjUtXFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlZGV2LCBwdF9wcmV2LCBvcmlnX2Rldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3JlY2VpdmVfc2tiX2xpc3RfcHR5cGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYzMDYtXFx0aWYgKHB0X3ByZXYtXFx1MDAzZWxpc3RfZnVuYyAhPSBOVUxMKVxcbm5ldC9jb3JlL2Rldi5jOjYzMDc6XFx0XFx0SU5ESVJFQ1RfQ0FMTF9JTkVUKHB0X3ByZXYtXFx1MDAzZWxpc3RfZnVuYywgaXB2Nl9saXN0X3JjdixcXG5uZXQvY29yZS9kZXYuYy02MzA4LVxcdFxcdFxcdFxcdCAgIGlwX2xpc3RfcmN2LCBoZWFkLCBwdF9wcmV2LCBvcmlnX2Rldik7XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0yMi0jZGVmaW5lIElORElSRUNUX0NBTExfTVQoZiwgZjIsIGYxLCAuLi4pIFxcXFxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoyMzpcXHRJTkRJUkVDVF9DQUxMX0lORVQoZiwgZjIsIGYxLCBfX1ZBX0FSR1NfXylcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0yNC0jZWxzZVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9ODQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmaWJfcnVsZV9wb2xpY3lbRlJBX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY3LVxcdFtGUkFfRFBPUlRfUkFOR0VdID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9wb3J0X3JhbmdlKSB9LFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjg2ODpcXHRbRlJBX0RTQ1BdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElORVRfRFNDUF9NQVNLIFxcdTAwM2VcXHUwMDNlIDIpLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg2OS1cXHRbRlJBX0ZMT1dMQUJFTF0gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg3Mi1cXHRbRlJBX0RQT1JUX01BU0tdID0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4NzM6XFx0W0ZSQV9EU0NQX01BU0tdID0gTkxBX1BPTElDWV9NQVNLKE5MQV9VOCwgSU5FVF9EU0NQX01BU0sgXFx1MDAzZVxcdTAwM2UgMiksXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODc0LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMzc9c2tfZmlsdGVyX3RyaW1fY2FwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGNhcClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MS1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTUyOlxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfSU5FVF9JTkdSRVNTKHNrLCBza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTE1My1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTYxNT1pbnQgc2tfcmV1c2Vwb3J0X2F0dGFjaF9icGYodTMyIHVmZCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTYzOC1cXHRcXHQgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkgfHxcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjM5OlxcdFxcdCAgICAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmM6MTY0MDpcXHRcXHQgICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTY0MS1cXHRcXHRcXHRlcnIgPSAtRU5PVFNVUFA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMjcxPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyOTUtXFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBkc3QpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjIyOTY6XFx0fSBlbHNlIGlmIChuaC1cXHUwMDNlbmhfZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjI5Ny1cXHRcXHRnb3RvIG91dF9kcm9wO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjM0Ny1cXHRcXHRuZWlnaCA9IGlwX25laWdoX2Zvcl9ndyhydCwgc2tiLCBcXHUwMDI2aXNfdjZndyk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MjM0ODpcXHR9IGVsc2UgaWYgKG5oLVxcdTAwM2VuaF9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5uZXQvY29yZS9maWx0ZXIuYy0yMzQ5LVxcdFxcdGlmICh1bmxpa2VseSghaXB2Nl9tb2RfZW5hYmxlZCgpKSkge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjM1NC1cXHRcXHRpc192Nmd3ID0gdHJ1ZTtcXG5uZXQvY29yZS9maWx0ZXIuYzoyMzU1OlxcdH0gZWxzZSBpZiAobmgtXFx1MDAzZW5oX2ZhbWlseSA9PSBBRl9JTkVUKSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjM1Ni1cXHRcXHRuZWlnaCA9IGlwX25laWdoX2d3NChkZXYsIG5oLVxcdTAwM2VpcHY0X25oKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTI0MjQ9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS19XFxubmV0L2NvcmUvZmlsdGVyLmM6MjQzMDojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDMxLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDg5OT1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYnBmX3R1bm5lbF9rZXlfYWYodTY0IGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MDAte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5MDE6XFx0cmV0dXJuIGZsYWdzIFxcdTAwMjYgQlBGX0ZfVFVOSU5GT19JUFY2ID8gQUZfSU5FVDYgOiBBRl9JTkVUO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MDItfVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDkwND1CUEZfQ0FMTF80KGJwZl9za2JfZ2V0X3R1bm5lbF9rZXksIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IGJwZl90dW5uZWxfa2V5ICosIHRvLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDkzMS1cXHRcXHRcXHQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYzo0OTMyOlxcdFxcdFxcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSAhPSBBRl9JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MzMtXFx0XFx0XFx0XFx0Z290byBlcnJfY2xlYXI7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01NzExPXN0YXRpYyBib29sIHNrX2FsbG93c19zb2xfaXBfc29ja29wdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01NzEzLVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU3MTQ6XFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MTUtXFx0XFx0cmV0dXJuIHRydWU7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTcxNjpcXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MTctXFx0XFx0LyogQWxsb3cgZ2V0dGluZy9zZXR0aW5nIHNvY2tvcHQgZm9yIHBvc3NpYmxlIGlwdjQtbWFwcGVkIGlwdjYgc29ja2V0LiAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTc1MD1zdGF0aWMgaW50IHNvbF9pcHY2X3NvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTMte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU3NTQ6XFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU3Nzc9c3RhdGljIGludCBfX2JwZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODQtXFx0XFx0cmV0dXJuIHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTc4NTpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4Ni1cXHRcXHRyZXR1cm4gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4OC1cXHRcXHRyZXR1cm4gc29sX2lwdjZfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTc4OTpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTAtXFx0XFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01ODA4PXN0YXRpYyBpbnQgX19icGZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01ODE5LVxcdFxcdGVyciA9IHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCB0cnVlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1ODIwOlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMS1cXHRcXHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTgyMjpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMy1cXHRcXHRlcnIgPSBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCB0cnVlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYxMzY9QlBGX0NBTExfNShicGZfc29ja19vcHNfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjE0MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MTQyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfVENQIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmMtNjE0My1cXHQgICAgb3B0bmFtZSBcXHUwMDNlPSBUQ1BfQlBGX1NZTiBcXHUwMDI2XFx1MDAyNiBvcHRuYW1lIFxcdTAwM2M9IFRDUF9CUEZfU1lOX01BQykge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjE3OD1CUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYxODYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjE4NzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8ICFza19mdWxsc29jayhzaykpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjE4OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyMDM9QlBGX0NBTExfMyhicGZfYmluZCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsIHN0cnVjdCBzb2NrYWRkciAqLCBhZGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS17XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIwNjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy02MjA3LVxcdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cXHUwMDNlc2s7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjEzLVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIxNDpcXHRpZiAoYWRkci1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQpIHtcXG5uZXQvY29yZS9maWx0ZXIuYy02MjE1LVxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjIxOlxcdH0gZWxzZSBpZiAoYWRkci1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMi1cXHRcXHRpZiAoYWRkcl9sZW4gXFx1MDAzYyBTSU42X0xFTl9SRkMyMTMzKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzMC1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02MjMyLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzowMS41NzUwNzUyMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwMTQyMjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGlmIHRoZXJlJ3MgYW55dGhpbmcgbmV3IG9yIGFsdGVyZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXQgbXkgZGlzcG9zYWwsIGVzcGVjaWFsbHkgaWYgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHNwZWNpZmljIHJlZ2FyZGluZywgc2F5LCBuZXcgZmVhdHVyZXMsIGNoYW5nZXMgaW4gZGVmYXVsdCBiZWhhdmlvciwgb3IgdHJvdWJsZXNob290aW5nIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEtjb25maWcgaXMgdGhlIGZpcnN0IHN0b3AgZm9yIHVuZGVyc3RhbmRpbmcgdGhlc2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMwOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjAzLjE3NjUwMDU5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NjA3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MDMuMjI1NDYzMTgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MzcwMjIxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU29ja2V0IENyZWF0aW9uIExvZ2ljIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLiBUaGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gc2hvd3MgdGhhdCBgQ09ORklHX0lORVRgIGlzIGVzc2VudGlhbCBmb3IgYG5ldC9pcHY0L2FmX2luZXQuY2AgYW5kIGBDT05GSUdfSVBWNmAgZm9yIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCwgc2V0dGluZyB0aGUgc3RhZ2UgZm9yIHdoZXJlIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQuXG5cbk15IGZvY3VzIGlzIG9uIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIOKAkyB0aGUgc29ja2V0IGNyZWF0aW9uIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBrZXkgdGFyZ2V0cyBvZiB0aGlzIHVwZGF0ZS5cblxuTm93LCBsZXQncyB2ZXJpZnkuIFRoZSBzeXN0ZW0gaW5kaWNhdGVzIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aGF0IGJvdGggYElORVRgIGFuZCBgSVBWNmAgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIFRoZSBzYW1lIGZvY3VzIHN5bWJvbHMgcmVtYWluIGNvbnNpc3RlbnQ6IGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuXG5cblRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhYm91dCBpbXByb3ZpbmcgdGhlIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzIGluIGJvdGggSVB2NCBhbmQgSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgY3J1Y2lhbCBzdGVwIG9mIG1hbmFnaW5nIG1vZHVsZSByZWZlcmVuY2VzIHVzaW5nIGB0cnlfbW9kdWxlX2dldGAgYW5kIHJlbGVhc2luZyB0aGVtIHdoZW4gbmVlZGVkLiBUaGVzZSBhcmUgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSBzdGFuZGFyZCBgc29ja2V0KClgIHN5c3RlbSBjYWxscywgbWFraW5nIHRoZW0gY3JpdGljYWwgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBkZXRhaWxzLiBIb2xkIG9uLCBgaW5ldF9jcmVhdGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgYnV0IGl0J3MgKnN0aWxsKiBhZGRyZXNzYWJsZSB3aXRoaW4gdGhlIHZtbGludXggaW1hZ2UgaW4gYG5ldC9pcHY0L2FmX2luZXQuY2AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBpbmV0Nl9jcmVhdGVgIGluIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gVGhpcyBpc24ndCB1bnVzdWFsLCBidXQgY29uZmlybXMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBtYW5pcHVsYXRpb24uXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAyMiwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MDYuNjYyNDg4NTg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5NTg4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2NyZWF0ZVwiLFxuICAgIFwiaW5ldDZfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBpbml0aWFsaXphdGlvbiBhbmQgcHJvdG9jb2wgbW9kdWxlIHJlZmVyZW5jZSB0cmFja2luZyBpbiBpbmV0X2NyZWF0ZSBhbmQgaW5ldDZfY3JlYXRlIGZvciBJUHY0IGFuZCBJUHY2IHNvY2tldHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNvY2tldCBjcmVhdGlvbiBzeXNjYWxscyAoZS5nLiBzb2NrZXQoQUZfSU5FVCwgLi4uKSAvIHNvY2tldChBRl9JTkVUNiwgLi4uKSksIG1ha2luZyB0aGVtIHJlbGV2YW50IGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9jcmVhdGVcIixcbiAgICBcImluZXQ2X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjA2Ljc1MzQ1ODI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzU2OTQ0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzowNi43NTQxMjQ5OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjQzNTAyMTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJiNjQyZjA1ZjU1ZGY5YTcxNzFmZGExM2JkZjcyYzIyODgzNDk1M2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDIyOjQ2OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jXG5pbmRleCAzMmQwMDZjMWE4ZWVkLi42Yjg3ZjBiNmNjMjIyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jXG4rKysgYi9uZXQvaXB2NC9hZl9pbmV0LmNcbkBAIC0yNjMsNiArMjYzLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90O1xuK1x0c3RydWN0IG1vZHVsZSAqYW5zd2VyX293bmVyO1xuIFx0dW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7XG4gXHRpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDtcbiBcdGludCBlcnI7XG5AQCAtMzIyLDkgKzMyMywxNiBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXG4gXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4gXG4tXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cdTAwM2Vwcm90O1xuK1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4rXHRpZiAoYW5zd2VyX293bmVyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHxcbitcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4rXHR9XG4rXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFdBUk5fT04oIWFuc3dlcl9wcm90LVx1MDAzZXNsYWIpO1xuQEAgLTMzMiw3ICszNDAsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ZXJyID0gLUVOT01FTTtcbiBcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9JTkVULCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XG4gXHRpZiAoIXNrKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdGVyciA9IDA7XG4gXHRpZiAoSU5FVF9QUk9UT1NXX1JFVVNFIFx1MDAyNiBhbnN3ZXJfZmxhZ3MpXG5AQCAtMzk4LDYgKzQwNiw4IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiBcdH1cbitvdXRfbW9kdWxlX3B1dDpcbitcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIG91dF9yY3VfdW5sb2NrOlxuQEAgLTQwNiw3ICs0MTYsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIG91dF9za19yZWxlYXNlOlxuIFx0c2tfY29tbW9uX3JlbGVhc2Uoc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XG4gfVxuIFxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5pbmRleCAyODI5MTJhMTE5OTk5Li4xZGY4YjJlN2UyNDM3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuY1xuKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xuQEAgLTExMCw2ICsxMTAsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XG4rXHRzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7XG4gXHR1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFncztcbiBcdGludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwO1xuIFx0aW50IGVycjtcbkBAIC0xNjcsOSArMTY4LDE2IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXG4gXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4gXG4tXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cdTAwM2Vwcm90O1xuK1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4rXHRpZiAoYW5zd2VyX293bmVyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHxcbitcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4rXHR9XG4rXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFdBUk5fT04oIWFuc3dlcl9wcm90LVx1MDAzZXNsYWIpO1xuQEAgLTE3Nyw3ICsxODUsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdGVyciA9IC1FTk9CVUZTO1xuIFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XG4gXHRpZiAoIXNrKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcbiBcbkBAIC0yMDEsNyArMjA5LDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRzay1cdTAwM2Vza19mYW1pbHlcdFx0PSBQRl9JTkVUNjtcbiBcdHNrLVx1MDAzZXNrX3Byb3RvY29sXHRcdD0gcHJvdG9jb2w7XG4gXG4tXHRzay1cdTAwM2Vza19iYWNrbG9nX3Jjdlx0PSBhbnN3ZXItXHUwMDNlcHJvdC1cdTAwM2ViYWNrbG9nX3JjdjtcbitcdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2XHQ9IGFuc3dlcl9wcm90LVx1MDAzZWJhY2tsb2dfcmN2O1xuIFxuIFx0aW5ldF9zayhzayktXHUwMDNlcGluZXQ2ID0gbnAgPSBpbmV0Nl9za19nZW5lcmljKHNrKTtcbiBcdG5wLVx1MDAzZWhvcF9saW1pdFx0PSAtMTtcbkBAIC0yNTEsNiArMjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiBcdH1cbitvdXRfbW9kdWxlX3B1dDpcbitcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIG91dF9yY3VfdW5sb2NrOlxuQEAgLTI1OSw3ICsyNjksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBvdXRfc2tfcmVsZWFzZTpcbiBcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0Z290byBvdXQ7XG4rXHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIH1cbiBcbiBpbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzowNi43NTQxMjY0NTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODkzMzcyMzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogTW9kdWxlIFJlZmVyZW5jZSBDb3VudGluZyBpbiBpbmV0X2NyZWF0ZS9pbmV0Nl9jcmVhdGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBjaGFuZ2VzIHRvIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgbmV0L2lwdjYvYWZfaW5ldDYuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgaW50cm9kdWNpbmcgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGluY2x1ZGVzIGB0cnlfbW9kdWxlX2dldGAgYW5kIGBtb2R1bGVfcHV0YCBjYWxscywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cblJpZ2h0LCBzbyB3ZSdyZSBncmFiYmluZyBgYW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7YCB3aGljaCBpcyBsaWtlbHkgdGhlIG1vZHVsZSB0aGF0IHByb3ZpZGVzIHRoZSB1bmRlcmx5aW5nIHByb3RvY29sLiBUaGVuLCB0aGUgY3J1Y2lhbCBjaGVjazogYGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2IChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHwgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKWAuIFRoaXMgc3VnZ2VzdHMgd2UncmUgYXR0ZW1wdGluZyB0byBtYW5hZ2UgdGhlIG1vZHVsZSdzIGxpZmV0aW1lIGJhc2VkIG9uIHdoZXRoZXIgaXQncyBhbHJlYWR5IFwiY29taW5nXCIgKGxpa2VseSBiZWluZyBsb2FkZWQpIGFuZCB3aGV0aGVyIHdlIGNhbiBzdWNjZXNzZnVsbHkgYWNxdWlyZSBhIHJlZmVyZW5jZS4gSWYgdGhhdCBjaGVjayBmYWlscywgdGhlIHNvY2tldCBjcmVhdGlvbiBzaG91bGQgZmFpbCwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBtb2R1bGUgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cblxuVGhlIHN1Y2Nlc3NmdWwgcGF0aCBpcyB3aGF0J3MgbW9yZSBpbnRlcmVzdGluZy4gV2UncmUgZG9pbmcgdGhlIHNvY2tldCBjcmVhdGlvbiBhbmQgdGhlbiwgYXQgdGhlIGVuZCDigJMgb3IgaW4gZXJyb3IgcGF0aHMgKmFmdGVyKiB0aGUgYHJjdV9yZWFkX3VubG9ja2Ag4oCTIHRoZXJlJ3MgYSBgbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICp3aHkqIGF0IHRoZSBlbmQ/IFNob3VsZG4ndCB0aGUgbW9kdWxlIHJlZmVyZW5jZSBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2Ygc29ja2V0IHVzZT8gUGVyaGFwcyB0aGUgc29ja2V0IG9wZXJhdGlvbnMgb3IgdGhlIHByb3RvY29sIGl0c2VsZiBob2xkIHJlZmVyZW5jZXMsIG9yIG1heWJlIGV2ZW4gYHNrX2FsbG9jYCBpcyBrZWVwaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBvd25lci4gSXQgbG9va3MgbGlrZSBpdCBpcyBgc2tfYWxsb2NgLiBBbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgaW5ldF9jcmVhdGVgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYHNrX2FsbG9jYCB0byBjb25maXJtIHRoaXMuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaXMgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzoxNS42ODc4NTM3MzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzc5MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2FsbG9jXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2suYz0yMjM3PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIyNTMtXFx0aWYgKHNrICE9IE5VTEwpIHtcXG5uZXQvY29yZS9zb2NrLmM6MjI1NDpcXHRcXHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxcbm5ldC9jb3JlL3NvY2suYy0yMjU1LVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MjI3Mz1zdGF0aWMgdm9pZCBza19wcm90X2ZyZWUoc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjMwMS0gKi9cXG5uZXQvY29yZS9zb2NrLmM6MjMwMjpzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcXG5uZXQvY29yZS9zb2NrLmMtMjMwMy1cXHRcXHQgICAgICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIzMzQtXFxubmV0L2NvcmUvc29jay5jOjIzMzU6XFx0XFx0bWVtX2Nncm91cF9za19hbGxvYyhzayk7XFxubmV0L2NvcmUvc29jay5jOjIzMzY6XFx0XFx0Y2dyb3VwX3NrX2FsbG9jKFxcdTAwMjZzay1cXHUwMDNlc2tfY2dycF9kYXRhKTtcXG5uZXQvY29yZS9zb2NrLmMtMjMzNy1cXHRcXHRzb2NrX3VwZGF0ZV9jbGFzc2lkKFxcdTAwMjZzay1cXHUwMDNlc2tfY2dycF9kYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MTUuNzM0MjM3MzUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDU4ODYzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBxdWljayBzY2FuIG9mIGBuZXQvY29yZS9zb2NrLmNgLlxuXG4qKkRpdmluZyBpbnRvIFNvY2tldCBBbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc29ja2V0cyBhcmUgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZm9jdXNpbmcgb24gYHNrX2FsbG9jYCBhbmQgYHNrX3Byb3RfYWxsb2NgIOKAkyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gRnJvbSBhIGhpZ2ggbGV2ZWwsIEknbSBleHBlY3RpbmcgYHNrX2FsbG9jYCB0byBoYW5kbGUgdGhlIGxvdy1sZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgaXRzZWxmLCB0aGUgYmFzaWMgY29udGFpbmVyLiBJdCdsbCBwcm9iYWJseSBiZSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbW1vbiBmaWVsZHMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IHBvb2xzLCBzbGFiIGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkgZHVyaW5nIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4gSSBhbHNvIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIHRvIGRlYWwgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgdGhhdC5cblxuVGhlbiwgdGhlcmUgaXMgYHNrX3Byb3RfYWxsb2NgLCB0aGlzIG9uZSBpcyBtb3JlIGludGVyZXN0aW5nIGFzIGl0IHNob3VsZCBiZSB0aGUgYWxsb2NhdG9yIGZvciB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBzb2NrZXQuIEl0J2xsIG5lZWQgdG8gYWxsb2NhdGUgdGhlIHByb3RvY29sLXNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3Rpbmcgc2luY2UgdGhhdCBsaWtlbHkgaGFzIGl0cyBvd24gc2V0IG9mIGZpZWxkcywgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSBldmVuIGl0cyBvd24gaW50ZXJuYWwgYWxsb2NhdGlvbiBsb2dpYy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdHVyZSB0byBiZSBwYXNzZWQgaW50byBpdCBieSB0aGUgdXBwZXIgbGF5ZXJzLiBUaGF0IHdvdWxkIGFsbG93IHRoaW5ncyBsaWtlIFVEUCBvciBUQ1AgdG8gYWxsb2NhdGUgdGhlaXIgc3BlY2lmaWMgc3RydWN0dXJlcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJhc2ljIHNvY2tldCBzdHJ1Y3R1cmUuIEkgYWxzbyBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgYW55IHByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgdGhlcmUnbGwgbGlrZWx5IGJlIGNhbGxiYWNrcyBvciBmdW5jdGlvbiBwb2ludGVycyBzZXQgdXAgaGVyZSB0byBwb2ludCB0byBwcm90b2NvbC1zcGVjaWZpYyBvcGVyYXRpb25zIOKAkyBzZW5kLCByZWNlaXZlLCBldGMuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIGFsbCBsaW5rZWQgdG9nZXRoZXIuIEFuZCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBiYXNpYyBzb2NrZXQgYW5kIHRoaXMgcHJvdG9jb2wtc3BlY2lmaWMgcGFydCBpcyBlc3RhYmxpc2hlZC5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoZSBjb3JlIHNvY2tldCBzdHJ1Y3R1cmUgYW5kIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBkYXRhIGFyZSBsaW5rZWQgdG9nZXRoZXIsIGFuZCB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHRoZWlyIGNsZWFudXAgd2hlbiBhIHNvY2tldCBpcyBjbG9zZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSdtIGNsZWFyIG9uIGhvdyByZXNvdXJjZXMgYXJlIG1hbmFnZWQgdG8gYXZvaWQgYW55IGxlYWtzLCBlc3BlY2lhbGx5IGluIGEgaGlnaC1jb25jdXJyZW5jeSBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGFsbCBiZSBjcml0aWNhbCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBzb2NrZXQgY3JlYXRpb24gaW1wYWN0cyBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MTguOTQwMTI2NzI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzNTpcXHR9XFxuMjIzNjpcXHRcXG4yMjM3OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxcbjIyMzg6XFx0XFx0XFx0aW50IGZhbWlseSlcXG4yMjM5OlxcdHtcXG4yMjQwOlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4yMjQxOlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xcbjIyNDI6XFx0XFxuMjI0MzpcXHRcXHRzbGFiID0gcHJvdC1cXHUwMDNlc2xhYjtcXG4yMjQ0OlxcdFxcdGlmIChzbGFiICE9IE5VTEwpIHtcXG4yMjQ1OlxcdFxcdFxcdHNrID0ga21lbV9jYWNoZV9hbGxvYyhzbGFiLCBwcmlvcml0eSBcXHUwMDI2IH5fX0dGUF9aRVJPKTtcXG4yMjQ2OlxcdFxcdFxcdGlmICghc2spXFxuMjI0NzpcXHRcXHRcXHRcXHRyZXR1cm4gc2s7XFxuMjI0ODpcXHRcXHRcXHRpZiAod2FudF9pbml0X29uX2FsbG9jKHByaW9yaXR5KSlcXG4yMjQ5OlxcdFxcdFxcdFxcdHNrX3Byb3RfY2xlYXJfbnVsbHMoc2ssIHByb3QtXFx1MDAzZW9ial9zaXplKTtcXG4yMjUwOlxcdFxcdH0gZWxzZVxcbjIyNTE6XFx0XFx0XFx0c2sgPSBrbWFsbG9jKHByb3QtXFx1MDAzZW9ial9zaXplLCBwcmlvcml0eSk7XFxuMjI1MjpcXHRcXG4yMjUzOlxcdFxcdGlmIChzayAhPSBOVUxMKSB7XFxuMjI1NDpcXHRcXHRcXHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxcbjIyNTU6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4yMjU2OlxcdFxcbjIyNTc6XFx0XFx0XFx0aWYgKCF0cnlfbW9kdWxlX2dldChwcm90LVxcdTAwM2Vvd25lcikpXFxuMjI1ODpcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3NlYztcXG4yMjU5OlxcdFxcdH1cXG4yMjYwOlxcdFxcbjIyNjE6XFx0XFx0cmV0dXJuIHNrO1xcbjIyNjI6XFx0XFxuMjI2MzpcXHRvdXRfZnJlZV9zZWM6XFxuMjI2NDpcXHRcXHRzZWN1cml0eV9za19mcmVlKHNrKTtcXG4yMjY1OlxcdG91dF9mcmVlOlxcbjIyNjY6XFx0XFx0aWYgKHNsYWIgIT0gTlVMTClcXG4yMjY3OlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShzbGFiLCBzayk7XFxuMjI2ODpcXHRcXHRlbHNlXFxuMjI2OTpcXHRcXHRcXHRrZnJlZShzayk7XFxuMjI3MDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMjcxOlxcdH1cXG4yMjcyOlxcdFxcbjIyNzM6XFx0c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxcbjIyNzQ6XFx0e1xcbjIyNzU6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKnNsYWI7XFxuMjI3NjpcXHRcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcXG4yMjc3OlxcdFxcbjIyNzg6XFx0XFx0b3duZXIgPSBwcm90LVxcdTAwM2Vvd25lcjtcXG4yMjc5OlxcdFxcdHNsYWIgPSBwcm90LVxcdTAwM2VzbGFiO1xcbjIyODA6XFx0XFxuMjI4MTpcXHRcXHRjZ3JvdXBfc2tfZnJlZShcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuMjI4MjpcXHRcXHRtZW1fY2dyb3VwX3NrX2ZyZWUoc2spO1xcbjIyODM6XFx0XFx0c2VjdXJpdHlfc2tfZnJlZShzayk7XFxuMjI4NDpcXHRcXG4yMjg1OlxcdFxcdHNrX293bmVyX3B1dChzayk7XFxuMjI4NjpcXHRcXG4yMjg3OlxcdFxcdGlmIChzbGFiICE9IE5VTEwpXFxuMjI4ODpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xcbjIyODk6XFx0XFx0ZWxzZVxcbjIyOTA6XFx0XFx0XFx0a2ZyZWUoc2spO1xcbjIyOTE6XFx0XFx0bW9kdWxlX3B1dChvd25lcik7XFxuMjI5MjpcXHR9XFxuMjI5MzpcXHRcXG4yMjk0OlxcdC8qKlxcbjIyOTU6XFx0ICpcXHRza19hbGxvYyAtIEFsbCBzb2NrZXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIGhlcmVcXG4yMjk2OlxcdCAqXFx0QG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxcbjIyOTc6XFx0ICpcXHRAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHlcXG4yMjk4OlxcdCAqXFx0QHByaW9yaXR5OiBmb3IgYWxsb2NhdGlvbiAoJUdGUF9LRVJORUwsICVHRlBfQVRPTUlDLCBldGMpXFxuMjI5OTpcXHQgKlxcdEBwcm90OiBzdHJ1Y3QgcHJvdG8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmV3IHNvY2sgaW5zdGFuY2VcXG4yMzAwOlxcdCAqXFx0QGtlcm46IGlzIHRoaXMgdG8gYmUgYSBrZXJuZWwgc29ja2V0P1xcbjIzMDE6XFx0ICovXFxuMjMwMjpcXHRzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcXG4yMzAzOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXFxuMjMwNDpcXHR7XFxuMjMwNTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMjMwNjpcXHRcXG4yMzA3OlxcdFxcdHNrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSB8IF9fR0ZQX1pFUk8sIGZhbWlseSk7XFxuMjMwODpcXHRcXHRpZiAoc2spIHtcXG4yMzA5OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19mYW1pbHkgPSBmYW1pbHk7XFxuMjMxMDpcXHRcXHRcXHQvKlxcbjIzMTE6XFx0XFx0XFx0ICogU2VlIGNvbW1lbnQgaW4gc3RydWN0IHNvY2sgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kXFxuMjMxMjpcXHRcXHRcXHQgKiB3aHkgd2UgbmVlZCBza19wcm90X2NyZWF0b3IgLWFjbWVcXG4yMzEzOlxcdFxcdFxcdCAqL1xcbjIzMTQ6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QgPSBzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MTguOTQwMzk5MTU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDMzMjUxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTW9kdWxlIFJlZmVyZW5jZSBDb3VudGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGluZXRfY3JlYXRlYCwgdGhlIGNvcmUgaXNzdWUgSSdtIHNlZWluZyBpcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGFuc3dlcl9wcm90YCBkdXJpbmcgbW9kdWxlIHVubG9hZGluZyBvciBsb2FkaW5nLiBTcGVjaWZpY2FsbHksIGJldHdlZW4gdGhlIGluaXRpYWwgYHJjdV9yZWFkX2xvY2soKWAgYW5kIHRoZSBgc2tfYWxsb2MoKWAgY2FsbCwgYGFuc3dlcl9wcm90YCBjb3VsZCBiZWNvbWUgaW5hY2Nlc3NpYmxlLiBUaGUgY3VycmVudCBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIGEgdHdvLXByb25nZWQgYXBwcm9hY2guXG5cbkZpcnN0LCBpdCBhZGRzIGEgYHRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcilgIHVuZGVyIHRoZSBSQ1UgbG9jaywgaW1tZWRpYXRlbHkgKmJlZm9yZSogdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFRoaXMgZW5zdXJlcyB0aGUgbW9kdWxlIGlzbid0IHVubG9hZGVkIHdoaWxlIHdlIG5lZWQgaXQuIFRoZW4sIGFmdGVyIHJlbGVhc2luZyB0aGUgUkNVIGxvY2ssIGl0IGNhbGxzIGBza19hbGxvYygpYCwgd2hpY2ggaXRzZWxmIGhhbmRsZXMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB0aHJvdWdoIGl0cyBvd24gYHRyeV9tb2R1bGVfZ2V0YCBhbmQgYG1vZHVsZV9wdXRgIG9uIGZyZWUsIGFuZCB0aGVuIGZpbmFsbHkgY2xlYW5zIHVwIHRoZSB0ZW1wb3JhcnkgcmVmZXJlbmNlIGF0IHRoZSBlbmQgaW4gYGluZXRfY3JlYXRlYCB3aXRoIGEgYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAuXG5cblRoZSBwYXRjaCBhbHNvIGNvcnJlY3RzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgaW4gYGluZXQ2X2NyZWF0ZWAgYnkgZml4aW5nIGEgc3VidGxlIGJ1ZyB3aGVyZSB0aGUgd3JvbmcgcG9pbnRlciB3YXMgYmVpbmcgdXNlZCB0byBhY2Nlc3MgYGJhY2tsb2dfcmN2YC4gVGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgZW5zdXJpbmcgdGhhdCB0aGUgY29ycmVjdCBgYW5zd2VyLVx1MDAzZXByb3RgIGlzIGFjY2Vzc2VkLlxuXG5Ob3csIGxldCdzIG1ldGhvZGljYWxseSBsb29rIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG4xLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeS9CdWZmZXJzOioqIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgbWFuaXB1bGF0aW9uIG9mIHN0YWNrIG9yIGhlYXAgYnVmZmVycy5cbjIuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogVGhlcmUncyBubyBrZXJuZWwgc3RydWN0dXJlIGRhdGEgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy5cbjMuICAqKkNvbmRpdGlvbmFsIExvZ2ljIFx1MDAyNiBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBUaGUgY3J1Y2lhbCB2YXJpYWJsZSBgYW5zd2VyX293bmVyYCAqaXMqIGluaXRpYWxpemVkIGZyb20gYGFuc3dlcl9wcm90LVx1MDAzZW93bmVyYCwgZWxpbWluYXRpbmcgYSBwb3RlbnRpYWwgaXNzdWUuIENydWNpYWxseSwgaW4gKmFsbCogZXhpdCBwYXRocyBmcm9tIGBpbmV0X2NyZWF0ZWAgKmFmdGVyKiB0aGUgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxsLCB0aGUgY29kZSBjYWxscyBgbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpYC4gSW1wb3J0YW50bHksIGBtb2R1bGVfcHV0KE5VTEwpYCBpcyBhIHNhZmUgbm8tb3AuIEFuZCwgb24gZXJyb3IgKmJlZm9yZSogdGhlIGByY3VfcmVhZF91bmxvY2soKWAsIHdlIHVubG9jayBSQ1UgYW5kIGV4aXQuXG40LiAgKipEYXRhIENvcGllcyB0byBVc2VyOioqIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXR5LlxuNS4gICoqQm91bmRzL0xlbmd0aCBJc3N1ZXM6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGxvb2sgc3VzcGVjdC5cbjYuICAqKk92ZXJhbGwgUHJvYmxlbToqKiBUaGUgcm9vdCBjYXVzZSBiZWluZyBmaXhlZCBpcyBhIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgdGhhdCBjYW4gbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBtb2R1bGUgbGlmZXRpbWUgaXNzdWVzLCBhcyB3ZWxsIGFzIGFuIFJDVSBhY2Nlc3MgcmFjZSBvbiBgYW5zd2VyYCBhZnRlciB0aGUgdW5sb2NrLlxuXG5GaW5hbGx5LCBJJ20gY29uZmlkZW50IHRoYXQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyB3aWxsIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlIHVubG9hZGluZyBpc3N1ZXMuIEtNU0FOIHNob3VsZCBkZXRlY3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIE15IHRob3JvdWdoIGFuYWx5c2lzIGZpbmRzIHRoYXQgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCwgZXhwb3NlZCwgb3IgYWx0ZXJlZCBieSB0aGlzIHBhdGNoLiBBbmQgc2luY2UgYG1vZHVsZV9wdXQoTlVMTClgIGlzIGhhbmRsZWQgY29ycmVjdGx5IGJ5IHRoZSBrZXJuZWwgSSBzZWUgbm8gcmlzayBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MjMuOTgzNzI3NjQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2NzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG1vZHVsZV9wdXRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbW9kdWxlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbW9kdWxlL21haW4uYz05NDk9RVhQT1JUX1NZTUJPTCh0cnlfbW9kdWxlX2dldCk7XFxua2VybmVsL21vZHVsZS9tYWluLmMtOTUwLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjk1MTp2b2lkIG1vZHVsZV9wdXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTk1Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjI0LjAzNTkwMjIwNloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyODU3ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtb2R1bGVfcHV0YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGBtb2R1bGVfcHV0YCBpbXBsZW1lbnRhdGlvbi4gSXQncyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3b3JrIGluIHRoZSBrZXJuZWwsIGFuZCBJIGtub3cgSSdsbCBwcm9iYWJseSBlbmNvdW50ZXIgYSB0cmlja3kgc2NlbmFyaW8gc29vbi4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRlY3JlbWVudGluZyBvZiB0aGUgbW9kdWxlJ3MgdXNhZ2UgY291bnQgYW5kIHdoYXQgYXNzb2NpYXRlZCBhY3Rpb25zIGFyZSB0YWtlbiwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzY2VuYXJpb3MgaW52b2x2aW5nIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3Mgd2l0aGluIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHByb2Nlc3MgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIEknbSBhYm91dCB0byB3b3JrIHdpdGggaXMgc29saWQuIEknbGwgYWxzbyBiZSBjb25zaWRlcmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgbGlrZSB0aGUgVkZTIGFuZCBkZXZpY2UgZHJpdmVycywgYW5kIGhvdyBgbW9kdWxlX3B1dGAgZW5zdXJlcyB0aGF0IG1vZHVsZXMgYXJlIHVubG9hZGVkIHNhZmVseSBhbmQgaW4gdGhlIHJpZ2h0IG9yZGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIG1lY2hhbmljcyBpcyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MjYuMDk4NzYzMjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MDpcXHRcXG4gOTUxOlxcdHZvaWQgbW9kdWxlX3B1dChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXFxuIDk1MjpcXHR7XFxuIDk1MzpcXHRcXHRpbnQgcmV0O1xcbiA5NTQ6XFx0XFxuIDk1NTpcXHRcXHRpZiAobW9kdWxlKSB7XFxuIDk1NjpcXHRcXHRcXHRyZXQgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKFxcdTAwMjZtb2R1bGUtXFx1MDAzZXJlZmNudCk7XFxuIDk1NzpcXHRcXHRcXHRXQVJOX09OKHJldCBcXHUwMDNjIDApO1xcdC8qIEZhaWxlZCB0byBwdXQgcmVmY291bnQgKi9cXG4gOTU4OlxcdFxcdFxcdHRyYWNlX21vZHVsZV9wdXQobW9kdWxlLCBfUkVUX0lQXyk7XFxuIDk1OTpcXHRcXHR9XFxuIDk2MDpcXHR9XFxuIDk2MTpcXHRFWFBPUlRfU1lNQk9MKG1vZHVsZV9wdXQpO1xcbiA5NjI6XFx0XFxuIDk2MzpcXHQjZWxzZSAvKiAhQ09ORklHX01PRFVMRV9VTkxPQUQgKi9cXG4gOTY0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfdW5sb2FkX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbiA5NjU6XFx0e1xcbiA5NjY6XFx0fVxcbiA5Njc6XFx0XFxuIDk2ODpcXHRzdGF0aWMgaW50IHJlZl9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYilcXG4gOTY5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MjYuMDk5MDIwOTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDEwMTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBgbW9kdWxlX3B1dChOVUxMKWAgdGhpbmcgaXMgYSBjb21wbGV0ZSBub24taXNzdWU7IGl0J3MgZGVzaWduZWQgdGhhdCB3YXkuIFRoYXQncyBnb29kLCBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4gRGlnZ2luZyBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGV2ZXJ5dGhpbmcgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByaW1hcnkgZ29hbCBpcyBjbGVhcmx5IHRvIGFkZHJlc3MgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIG1vZHVsZSB1bmxvYWRpbmcgb3Igc29ja2V0IGNyZWF0aW9uLCBhbmQgaXQgZG9lcyB0aGlzIGJ5IGltcGxlbWVudGluZyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIHVzaW5nIGB0cnlfbW9kdWxlX2dldGAgYW5kIGBtb2R1bGVfcHV0YCBjYWxscyBpbiBgaW5ldF9jcmVhdGUoKWAgYW5kIGBpbmV0Nl9jcmVhdGUoKWAuXG5cblRoZSBwYXRjaCBhbHNvIGhhcyBhbiBpbXBvcnRhbnQgZml4IGZvciBgaW5ldDZfY3JlYXRlKClgIGJ5IG5vdCBkZXJlZmVyZW5jaW5nIGBhbnN3ZXJgIG91dHNpZGUgUkNVIGNyaXRpY2FsIHNlY3Rpb24uIFRoYXQncyBhIGNsYXNzaWMgYW5kIGNydWNpYWwgaW1wcm92ZW1lbnQgdGhhdCBtaXRpZ2F0ZXMgdGhlIHJpc2sgb2YgcmVhZGluZyBwb3RlbnRpYWxseSBzdGFsZSBkYXRhLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucyBoZXJlLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3cml0ZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLiBUaGUgbW9zdCBsaWtlbHkgYnVncyB3ZSBjb3VsZCBlbmNvdW50ZXIgbm93IGFyZSB0aGUgdHlwaWNhbCBsaWZldGltZSBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzIC0tIHRoZSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLCBvciB3b3JzZSwgbWVtb3J5IGxlYWtzLCBidXQgdGhvc2UgYXJlIGlzc3VlcyB0aGF0IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zIHNob3VsZCBmbGFnIGZhaXJseSBlYXNpbHkuIFRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS5cblxuSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcyBhbmFseXNpcywgc28gbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE0LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjI5LjE4OTEyNTY4MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGluZXRfY3JlYXRlKCkgYW5kIGluZXQ2X2NyZWF0ZSgpIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGFjY2Vzc2luZyBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHRyeV9tb2R1bGVfZ2V0KCkgYW5kIG1vZHVsZV9wdXQoKSBjYWxscyBvbiB0aGUgcHJvdG9jb2wgb3duZXIgYW5kIGVuc3VyZSBhbnN3ZXJfcHJvdCBpcyB1c2VkIHJhdGhlciB0aGFuIGRlcmVmZXJlbmNpbmcgYW5zd2VyIG91dHNpZGUgcmN1X3JlYWRfbG9jaygpLiBcXG5cXG5UaGVzZSBtb2RpZmljYXRpb25zIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBtb2R1bGUgcmVmZXJlbmNlIGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3kvVUFGIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 22:26:29 +0000 UTC FinishedAt: 2026-09-05 22:47:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2b4707a149a55e8fa75c9ef32b359d60f470a566", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2b4707a149a55e8fa75c9ef32b359d60f470a566", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "3af4895a-9f5e-47de-8d10-caec89995530" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_create", "inet6_create" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2luZXQ2X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGluZXRfY3JlYXRlKCkgYW5kIGluZXQ2X2NyZWF0ZSgpIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGFjY2Vzc2luZyBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHRyeV9tb2R1bGVfZ2V0KCkgYW5kIG1vZHVsZV9wdXQoKSBjYWxscyBvbiB0aGUgcHJvdG9jb2wgb3duZXIgYW5kIGVuc3VyZSBhbnN3ZXJfcHJvdCBpcyB1c2VkIHJhdGhlciB0aGFuIGRlcmVmZXJlbmNpbmcgYW5zd2VyIG91dHNpZGUgcmN1X3JlYWRfbG9jaygpLiBcblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbW9kdWxlIHJlZmVyZW5jZSBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5L1VBRiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiYjY0MmYwNWY1NWRmOWE3MTcxZmRhMTNiZGY3MmMyMjg4MzQ5NTNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMjo0Njo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmNcbmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2FmX2luZXQuY1xuQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90O1xuJiM0MztcdHN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjtcbiBcdHVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzO1xuIFx0aW50IHRyeV9sb2FkaW5nX21vZHVsZSA9IDA7XG4gXHRpbnQgZXJyO1xuQEAgLTMyMiw5ICYjNDM7MzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4mIzQzO1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4mIzQzO1x0aWYgKGFuc3dlcl9vd25lciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuJiM0MztcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0c29jay1cdTAwM2VvcHMgPSBhbnN3ZXItXHUwMDNlb3BzO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cdTAwM2VzbGFiKTtcbkBAIC0zMzIsNyAmIzQzOzM0MCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRlcnIgPSAtRU5PTUVNO1xuIFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdGVyciA9IDA7XG4gXHRpZiAoSU5FVF9QUk9UT1NXX1JFVVNFIFx1MDAyNiBhbnN3ZXJfZmxhZ3MpXG5AQCAtMzk4LDYgJiM0Mzs0MDYsOCBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XG4gXHR9XG4mIzQzO291dF9tb2R1bGVfcHV0OlxuJiM0MztcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIG91dF9yY3VfdW5sb2NrOlxuQEAgLTQwNiw3ICYjNDM7NDE2LDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBvdXRfc2tfcmVsZWFzZTpcbiBcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0Z290byBvdXQ7XG4mIzQzO1x0Z290byBvdXRfbW9kdWxlX3B1dDtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbmluZGV4IDI4MjkxMmExMTk5OTkuLjFkZjhiMmU3ZTI0MzcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5AQCAtMTEwLDYgJiM0MzsxMTAsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XG4mIzQzO1x0c3RydWN0IG1vZHVsZSAqYW5zd2VyX293bmVyO1xuIFx0dW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7XG4gXHRpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDtcbiBcdGludCBlcnI7XG5AQCAtMTY3LDkgJiM0MzsxNjgsMTYgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4mIzQzO1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4mIzQzO1x0aWYgKGFuc3dlcl9vd25lciBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuJiM0MztcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0c29jay1cdTAwM2VvcHMgPSBhbnN3ZXItXHUwMDNlb3BzO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cdTAwM2VzbGFiKTtcbkBAIC0xNzcsNyAmIzQzOzE4NSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVDYsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcbiBcbkBAIC0yMDEsNyAmIzQzOzIwOSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0c2stXHUwMDNlc2tfZmFtaWx5XHRcdD0gUEZfSU5FVDY7XG4gXHRzay1cdTAwM2Vza19wcm90b2NvbFx0XHQ9IHByb3RvY29sO1xuIFxuLVx0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyLVx1MDAzZXByb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4mIzQzO1x0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gXG4gXHRpbmV0X3NrKHNrKS1cdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xuIFx0bnAtXHUwMDNlaG9wX2xpbWl0XHQ9IC0xO1xuQEAgLTI1MSw2ICYjNDM7MjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiBcdH1cbiYjNDM7b3V0X21vZHVsZV9wdXQ6XG4mIzQzO1x0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG4gb3V0X3JjdV91bmxvY2s6XG5AQCAtMjU5LDcgJiM0MzsyNjksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBvdXRfc2tfcmVsZWFzZTpcbiBcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0Z290byBvdXQ7XG4mIzQzO1x0Z290byBvdXRfbW9kdWxlX3B1dDtcbiB9XG4gXG4gaW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2luZXQ2X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtb2R1bGUgcmVmZXJlbmNlIHRyYWNraW5nIGluIGluZXRfY3JlYXRlIGFuZCBpbmV0Nl9jcmVhdGUgZm9yIElQdjQgYW5kIElQdjYgc29ja2V0cy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc29ja2V0IGNyZWF0aW9uIHN5c2NhbGxzIChlLmcuIHNvY2tldChBRl9JTkVULCAuLi4pIC8gc29ja2V0KEFGX0lORVQ2LCAuLi4pKSwgbWFraW5nIHRoZW0gcmVsZXZhbnQgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmI2NDJmMDVmNTVkZjlhNzE3MWZkYTEzYmRmNzJjMjI4ODM0OTUzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMjI6NDY6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggMzJkMDA2YzFhOGVlZC4uNmI4N2YwYjZjYzIyMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtMjYzLDYgJiM0MzsyNjMsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCXN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCXN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjsKIAl1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFnczsKIAlpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDsKIAlpbnQgZXJyOwpAQCAtMzIyLDkgJiM0MzszMjMsMTYgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAkgICAgIW5zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykpCiAJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKLQlzb2NrLSZndDtvcHMgPSBhbnN3ZXItJmd0O29wczsKIAlhbnN3ZXJfcHJvdCA9IGFuc3dlci0mZ3Q7cHJvdDsKJiM0MzsJYW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtJmd0O293bmVyOwogCWFuc3dlcl9mbGFncyA9IGFuc3dlci0mZ3Q7ZmxhZ3M7CiYjNDM7CWlmIChhbnN3ZXJfb3duZXIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fAomIzQzOwkgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CX0KJiM0MzsJc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlXQVJOX09OKCFhbnN3ZXJfcHJvdC0mZ3Q7c2xhYik7CkBAIC0zMzIsNyAmIzQzOzM0MCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJZXJyID0gLUVOT01FTTsKIAlzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVCwgR0ZQX0tFUk5FTCwgYW5zd2VyX3Byb3QsIGtlcm4pOwogCWlmICghc2spCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfbW9kdWxlX3B1dDsKIAogCWVyciA9IDA7CiAJaWYgKElORVRfUFJPVE9TV19SRVVTRSAmYW1wOyBhbnN3ZXJfZmxhZ3MpCkBAIC0zOTgsNiAmIzQzOzQwNiw4IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9za19yZWxlYXNlOwogCX0KJiM0MztvdXRfbW9kdWxlX3B1dDoKJiM0MzsJbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpOwogb3V0OgogCXJldHVybiBlcnI7CiBvdXRfcmN1X3VubG9jazoKQEAgLTQwNiw3ICYjNDM7NDE2LDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIG91dF9za19yZWxlYXNlOgogCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKIAlzb2NrLSZndDtzayA9IE5VTEw7Ci0JZ290byBvdXQ7CiYjNDM7CWdvdG8gb3V0X21vZHVsZV9wdXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggMjgyOTEyYTExOTk5OS4uMWRmOGIyZTdlMjQzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0xMTAsNiAmIzQzOzExMCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaW5ldF9wcm90b3N3ICphbnN3ZXI7CiAJc3RydWN0IHByb3RvICphbnN3ZXJfcHJvdDsKJiM0MzsJc3RydWN0IG1vZHVsZSAqYW5zd2VyX293bmVyOwogCXVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzOwogCWludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwOwogCWludCBlcnI7CkBAIC0xNjcsOSAmIzQzOzE2OCwxNiBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAkgICAgIW5zX2NhcGFibGUobmV0LSZndDt1c2VyX25zLCBDQVBfTkVUX1JBVykpCiAJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKLQlzb2NrLSZndDtvcHMgPSBhbnN3ZXItJmd0O29wczsKIAlhbnN3ZXJfcHJvdCA9IGFuc3dlci0mZ3Q7cHJvdDsKJiM0MzsJYW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtJmd0O293bmVyOwogCWFuc3dlcl9mbGFncyA9IGFuc3dlci0mZ3Q7ZmxhZ3M7CiYjNDM7CWlmIChhbnN3ZXJfb3duZXIgJmFtcDsmYW1wOwomIzQzOwkgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fAomIzQzOwkgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiYjNDM7CX0KJiM0MzsJc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlXQVJOX09OKCFhbnN3ZXJfcHJvdC0mZ3Q7c2xhYik7CkBAIC0xNzcsNyAmIzQzOzE4NSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCWVyciA9IC1FTk9CVUZTOwogCXNrID0gc2tfYWxsb2MobmV0LCBQRl9JTkVUNiwgR0ZQX0tFUk5FTCwgYW5zd2VyX3Byb3QsIGtlcm4pOwogCWlmICghc2spCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfbW9kdWxlX3B1dDsKIAogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKIApAQCAtMjAxLDcgJiM0MzsyMDksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlzay0mZ3Q7c2tfZmFtaWx5CQk9IFBGX0lORVQ2OwogCXNrLSZndDtza19wcm90b2NvbAkJPSBwcm90b2NvbDsKIAotCXNrLSZndDtza19iYWNrbG9nX3Jjdgk9IGFuc3dlci0mZ3Q7cHJvdC0mZ3Q7YmFja2xvZ19yY3Y7CiYjNDM7CXNrLSZndDtza19iYWNrbG9nX3Jjdgk9IGFuc3dlcl9wcm90LSZndDtiYWNrbG9nX3JjdjsKIAogCWluZXRfc2soc2spLSZndDtwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spOwogCW5wLSZndDtob3BfbGltaXQJPSAtMTsKQEAgLTI1MSw2ICYjNDM7MjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9za19yZWxlYXNlOwogCX0KJiM0MztvdXRfbW9kdWxlX3B1dDoKJiM0MzsJbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpOwogb3V0OgogCXJldHVybiBlcnI7CiBvdXRfcmN1X3VubG9jazoKQEAgLTI1OSw3ICYjNDM7MjY5LDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiBvdXRfc2tfcmVsZWFzZToKIAlza19jb21tb25fcmVsZWFzZShzayk7CiAJc29jay0mZ3Q7c2sgPSBOVUxMOwotCWdvdG8gb3V0OwomIzQzOwlnb3RvIG91dF9tb2R1bGVfcHV0OwogfQogCiBpbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBQb3RlbnRpYWwgVUFGL1JhY2UgQ29uZGl0aW9ucyBpbiBTb2NrZXQgQ3JlYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uIGluIGJvdGggSVB2NCBhbmQgSVB2Ni4KCkxvb2tpbmcgYXQgdGhlIGRpZmYsIGluIGBpbmV0X2NyZWF0ZWAsIGl0IGFwcGVhcnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYW5zd2VyX3Byb3QtJmd0O293bmVyYC4gSXQmIzM5O3MgY2hlY2tpbmcgaWYgdGhlIG1vZHVsZSBpcyBjb21pbmcgb3IgZmFpbGluZyB0byBnZXQgdGhlIG1vZHVsZSAoYCF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpYCkuIFRoZW4sIHRoZXJlJiMzOTtzIGEgYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAgYXQgdGhlIGBvdXRfbW9kdWxlX3B1dGAgbGFiZWwuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gYGluZXQ2X2NyZWF0ZWAuIFNvLCB0aGlzIHNtZWxscyBsaWtlIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgcmVsYXRlZCB0byBwcm90b2NvbCBoYW5kbGVycy4gT2theSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBrZXkgY2hhbmdlOiBgc2stJmd0O3NrX2JhY2tsb2dfcmN2ID0gYW5zd2VyX3Byb3QtJmd0O2JhY2tsb2dfcmN2O2AgaW5zdGVhZCBvZiBgYW5zd2VyLSZndDtwcm90LSZndDtiYWNrbG9nX3JjdjtgLiBIb2xkIG9uLi4uIHRoZSBvbGQgY29kZSB1c2VkIGBhbnN3ZXJgIGFmdGVyIGFuIGByY3VfcmVhZF91bmxvY2tgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCB3b3VsZCBtZWFuIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcnJlY3QgYW5kIHNhZmUgbWV0aG9kIGlzIHRvIHVzZSBgYW5zd2VyX3Byb3RgLCB3aGljaCB3YXMgbGlrZWx5IGEgbG9jYWwgY29weSBhbHJlYWR5LiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIGNvcmUgb2YgdGhlIGZpeC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlIGluIGhvdyB0aGUgYmFja2xvZyByZWNlaXZlciBpcyBhc3NpZ25lZCBkdXJpbmcgc29ja2V0IGNyZWF0aW9uLiBUaGlzIHJlcGxhY2VtZW50IG1ha2VzIGNvbXBsZXRlIHNlbnNlIGluIGxpZ2h0IG9mIHBvc3NpYmxlIHJhY2UgaXNzdWVzLgoKVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0byBnYWluIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjb250ZXh0LCBJIG5lZWQgdG8gcmVhZCB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gYG5ldC9pcHY0L2FmX2luZXQuY2AgYW5kIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYCBhcm91bmQgYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIEkgd2FudCB0byBzZWUgaG93IGBhbnN3ZXJfcHJvdGAgaXMgcG9wdWxhdGVkIGFuZCBob3cgYGFuc3dlcmAgaXMgaGFuZGxlZCBpbiB0aGUgb3ZlcmFsbCBzb2NrZXQgY3JlYXRpb24gZmxvdyB0byBiZSBjZXJ0YWluIEkmIzM5O3ZlIGNhdWdodCBhbGwgdGhlIGltcGxpY2F0aW9ucy4gSSBjYW4gc2VlIHRoaXMgY29kZSBhcyBtYWtpbmcgYSB2aXRhbCBpbXByb3ZlbWVudCBpbiBzb2NrZXQgY3JlYXRpb24gdGhyZWFkIHNhZmV0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2FmX2luZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNTpcdFx0XHRcdFx0XHQgICAgICAgUEZfSU5FVCwgcHJvdG9jb2wpO1xuIDMxNjpcdFx0XHRcdGdvdG8gbG9va3VwX3Byb3RvY29sO1xuIDMxNzpcdFx0XHR9IGVsc2VcbiAzMTg6XHRcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDMxOTpcdFx0fVxuIDMyMDpcdFxuIDMyMTpcdFx0ZXJyID0gLUVQRVJNO1xuIDMyMjpcdFx0aWYgKHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVyBcdTAwMjZcdTAwMjYgIWtlcm4gXHUwMDI2XHUwMDI2XG4gMzIzOlx0XHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiAzMjQ6XHRcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiAzMjU6XHRcbiAzMjY6XHRcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4gMzI3Olx0XHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cdTAwM2Vvd25lcjtcbiAzMjg6XHRcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cdTAwM2VmbGFncztcbiAzMjk6XHRcdGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2XG4gMzMwOlx0XHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuIDMzMTpcdFx0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcbiAzMzI6XHRcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbiAzMzM6XHRcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiAzMzQ6XHRcdH1cbiAzMzU6XHRcdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiAzMzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMzNzpcdFxuIDMzODpcdFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXHUwMDNlc2xhYik7XG4gMzM5Olx0XG4gMzQwOlx0XHRlcnIgPSAtRU5PTUVNO1xuIDM0MTpcdFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiAzNDI6XHRcdGlmICghc2spXG4gMzQzOlx0XHRcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XG4gMzQ0Olx0XG4gMzQ1Olx0XHRlcnIgPSAwO1xuIDM0NjpcdFx0aWYgKElORVRfUFJPVE9TV19SRVVTRSBcdTAwMjYgYW5zd2VyX2ZsYWdzKVxuIDM0NzpcdFx0XHRzay1cdTAwM2Vza19yZXVzZSA9IFNLX0NBTl9SRVVTRTtcbiAzNDg6XHRcbiAzNDk6XHRcdGlmIChJTkVUX1BST1RPU1dfSUNTSyBcdTAwMjYgYW5zd2VyX2ZsYWdzKVxuIDM1MDpcdFx0XHRpbmV0X2luaXRfY3NrX2xvY2tzKHNrKTtcbiAzNTE6XHRcbiAzNTI6XHRcdGluZXQgPSBpbmV0X3NrKHNrKTtcbiAzNTM6XHRcdGluZXRfYXNzaWduX2JpdChJU19JQ1NLLCBzaywgSU5FVF9QUk9UT1NXX0lDU0sgXHUwMDI2IGFuc3dlcl9mbGFncyk7XG4gMzU0Olx0XG4gMzU1Olx0XHRpbmV0X2NsZWFyX2JpdChOT0RFRlJBRywgc2spO1xuIDM1NjpcdFxuIDM1NzpcdFx0aWYgKFNPQ0tfUkFXID09IHNvY2stXHUwMDNldHlwZSkge1xuIDM1ODpcdFx0XHRpbmV0LVx1MDAzZWluZXRfbnVtID0gcHJvdG9jb2w7XG4gMzU5Olx0XHRcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcbiAzNjA6XHRcdFx0XHRpbmV0X3NldF9iaXQoSERSSU5DTCwgc2spO1xuIDM2MTpcdFx0fVxuIDM2MjpcdFxuIDM2MzpcdFx0aWYgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfaXBfbm9fcG10dV9kaXNjKSlcbiAzNjQ6XHRcdFx0aW5ldC1cdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX0RPTlQ7XG4gMzY1Olx0XHRlbHNlXG4gMzY2Olx0XHRcdGluZXQtXHUwMDNlcG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UO1xuIDM2NzpcdFxuIDM2ODpcdFx0YXRvbWljX3NldChcdTAwMjZpbmV0LVx1MDAzZWluZXRfaWQsIDApO1xuIDM2OTpcdFxuIDM3MDpcdFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIDM3MTpcdFxuIDM3MjpcdFx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdCAgID0gaW5ldF9zb2NrX2Rlc3RydWN0O1xuIDM3MzpcdFx0c2stXHUwMDNlc2tfcHJvdG9jb2xcdCAgID0gcHJvdG9jb2w7XG4gMzc0Olx0XHRzay1cdTAwM2Vza19iYWNrbG9nX3JjdiA9IHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gMzc1Olx0XHRzay1cdTAwM2Vza190eHJlaGFzaCA9IFJFQURfT05DRShuZXQtXHUwMDNlY29yZS5zeXNjdGxfdHhyZWhhc2gpO1xuIDM3NjpcdFxuIDM3NzpcdFx0aW5ldC1cdTAwM2V1Y190dGxcdD0gLTE7XG4gMzc4Olx0XHRpbmV0X3NldF9iaXQoTUNfTE9PUCwgc2spO1xuIDM3OTpcdFx0aW5ldC1cdTAwM2VtY190dGxcdD0gMTtcbiAzODA6XHRcdGluZXRfc2V0X2JpdChNQ19BTEwsIHNrKTtcbiAzODE6XHRcdGluZXQtXHUwMDNlbWNfaW5kZXhcdD0gMDtcbiAzODI6XHRcdGluZXQtXHUwMDNlbWNfbGlzdFx0PSBOVUxMO1xuIDM4MzpcdFx0aW5ldC1cdTAwM2VyY3ZfdG9zXHQ9IDA7XG4gMzg0Olx0XG4gMzg1Olx0XHRpZiAoaW5ldC1cdTAwM2VpbmV0X251bSkge1xuIDM4NjpcdFx0XHQvKiBJdCBhc3N1bWVzIHRoYXQgYW55IHByb3RvY29sIHdoaWNoIGFsbG93c1xuIDM4NzpcdFx0XHQgKiB0aGUgdXNlciB0byBhc3NpZ24gYSBudW1iZXIgYXQgc29ja2V0XG4gMzg4Olx0XHRcdCAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseVxuIDM4OTpcdFx0XHQgKiBzaGFyZXMuXG4gMzkwOlx0XHRcdCAqL1xuIDM5MTpcdFx0XHRpbmV0LVx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVx1MDAzZWluZXRfbnVtKTtcbiAzOTI6XHRcdFx0LyogQWRkIHRvIHByb3RvY29sIGhhc2ggY2hhaW5zLiAqL1xuIDM5MzpcdFx0XHRlcnIgPSBzay1cdTAwM2Vza19wcm90LVx1MDAzZWhhc2goc2spO1xuIDM5NDpcdFx0XHRpZiAoZXJyKVxuIDM5NTpcdFx0XHRcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XG4gMzk2Olx0XHR9XG4gMzk3Olx0XG4gMzk4Olx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdC1cdTAwM2Vpbml0KSB7XG4gMzk5Olx0XHRcdGVyciA9IHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlaW5pdChzayk7XG4gNDAwOlx0XHRcdGlmIChlcnIpXG4gNDAxOlx0XHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiA0MDI6XHRcdH1cbiA0MDM6XHRcbiA0MDQ6XHRcdGlmICgha2Vybikge1xuIDQwNTpcdFx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0lORVRfU09DSyhzayk7XG4gNDA2Olx0XHRcdGlmIChlcnIpXG4gNDA3Olx0XHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiA0MDg6XHRcdH1cbiA0MDk6XHRvdXRfbW9kdWxlX3B1dDpcbiA0MTA6XHRcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiA0MTE6XHRvdXQ6XG4gNDEyOlx0XHRyZXR1cm4gZXJyO1xuIDQxMzpcdG91dF9yY3VfdW5sb2NrOlxuIDQxNDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29kZSBQYXRoKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgcGllY2Ugb2YgbmV0d29yayBjb2RlLCBhbmQgaXQmIzM5O3MgZ290IG1lIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGtub3cgd2UmIzM5O3ZlIGJlZW4gZm9jdXNlZCBvbiBgaW5ldF9jcmVhdGVgIGJ1dCBJJiMzOTttIGhhdmluZyBhIGh1bmNoIHRoYXQgYSBzaW1pbGFyIHZ1bG5lcmFiaWxpdHkgb3IgaXNzdWUgbWlnaHQgZXhpc3QgaW4gYSBzaWJsaW5nIGZ1bmN0aW9uLCBwb3RlbnRpYWxseSBldmVuIHdpdGggYSBzaW1pbGFyIGZ1bmN0aW9uIHNpZ25hdHVyZSBvciBwdXJwb3NlLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCB0aGUga2luZCBvZiBwYXJhbGxlbCB0aG91Z2h0IHByb2Nlc3MgeW91IGdldCB3aGVuIGRlZXAgaW4gYSBzcGVjaWZpYyBhcmVhLiBTaW5jZSBgaW5ldDZfY3JlYXRlYCBoYW5kbGVzIElQdjYgYWRkcmVzc2VzLCBpdCYjMzk7cyBhIGNyaXRpY2FsIG5leHQgc3RlcCB0byB2ZXJpZnkuIFdlIG5lZWQgdG8gY2hlY2sgaXQgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHNhbWUgbGV2ZWwgb2Ygcm9idXN0bmVzcyBhcyB3ZSYjMzk7cmUgaG9waW5nIHRvIGZpbmQgaW4gYGluZXRfY3JlYXRlYC4gSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgdHVubmVsIHZpc2lvbiBhbmQgbWlzcyBhIHNpbWlsYXIgaXNzdWUgb3ZlciB0aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgbG9naWMsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24gaW4gYGluZXQ2X2NyZWF0ZWAgbWlycm9yIHdoYXQgd2UmIzM5O3ZlIHNlZW4gKG9yICpjb3VsZCogc2VlKSBpbiBgaW5ldF9jcmVhdGVgLiBJdCYjMzk7cyBhbGwgYWJvdXQgZHVlIGRpbGlnZW5jZSBhbmQgaG9saXN0aWMgc2VjdXJpdHkgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWZfaW5ldDYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFx0XHRcdFx0XHRcdFBGX0lORVQ2LCBwcm90b2NvbCk7XG4gMTYxOlx0XHRcdFx0Z290byBsb29rdXBfcHJvdG9jb2w7XG4gMTYyOlx0XHRcdH0gZWxzZVxuIDE2MzpcdFx0XHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4gMTY0Olx0XHR9XG4gMTY1Olx0XG4gMTY2Olx0XHRlcnIgPSAtRVBFUk07XG4gMTY3Olx0XHRpZiAoc29jay1cdTAwM2V0eXBlID09IFNPQ0tfUkFXIFx1MDAyNlx1MDAyNiAha2VybiBcdTAwMjZcdTAwMjZcbiAxNjg6XHRcdCAgICAhbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpKVxuIDE2OTpcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDE3MDpcdFxuIDE3MTpcdFx0YW5zd2VyX3Byb3QgPSBhbnN3ZXItXHUwMDNlcHJvdDtcbiAxNzI6XHRcdGFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LVx1MDAzZW93bmVyO1xuIDE3MzpcdFx0YW5zd2VyX2ZsYWdzID0gYW5zd2VyLVx1MDAzZWZsYWdzO1xuIDE3NDpcdFx0aWYgKGFuc3dlcl9vd25lciBcdTAwMjZcdTAwMjZcbiAxNzU6XHRcdCAgICAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8XG4gMTc2Olx0XHQgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkge1xuIDE3NzpcdFx0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuIDE3ODpcdFx0XHRnb3RvIG91dF9yY3VfdW5sb2NrO1xuIDE3OTpcdFx0fVxuIDE4MDpcdFx0c29jay1cdTAwM2VvcHMgPSBhbnN3ZXItXHUwMDNlb3BzO1xuIDE4MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTgyOlx0XG4gMTgzOlx0XHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cdTAwM2VzbGFiKTtcbiAxODQ6XHRcbiAxODU6XHRcdGVyciA9IC1FTk9CVUZTO1xuIDE4NjpcdFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XG4gMTg3Olx0XHRpZiAoIXNrKVxuIDE4ODpcdFx0XHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIDE4OTpcdFxuIDE5MDpcdFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIDE5MTpcdFxuIDE5MjpcdFx0ZXJyID0gMDtcbiAxOTM6XHRcdGlmIChJTkVUX1BST1RPU1dfUkVVU0UgXHUwMDI2IGFuc3dlcl9mbGFncylcbiAxOTQ6XHRcdFx0c2stXHUwMDNlc2tfcmV1c2UgPSBTS19DQU5fUkVVU0U7XG4gMTk1Olx0XG4gMTk2Olx0XHRpZiAoSU5FVF9QUk9UT1NXX0lDU0sgXHUwMDI2IGFuc3dlcl9mbGFncylcbiAxOTc6XHRcdFx0aW5ldF9pbml0X2Nza19sb2Nrcyhzayk7XG4gMTk4Olx0XG4gMTk5Olx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4gMjAwOlx0XHRpbmV0X2Fzc2lnbl9iaXQoSVNfSUNTSywgc2ssIElORVRfUFJPVE9TV19JQ1NLIFx1MDAyNiBhbnN3ZXJfZmxhZ3MpO1xuIDIwMTpcdFxuIDIwMjpcdFx0aWYgKFNPQ0tfUkFXID09IHNvY2stXHUwMDNldHlwZSkge1xuIDIwMzpcdFx0XHRpbmV0LVx1MDAzZWluZXRfbnVtID0gcHJvdG9jb2w7XG4gMjA0Olx0XHRcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcbiAyMDU6XHRcdFx0XHRpbmV0X3NldF9iaXQoSERSSU5DTCwgc2spO1xuIDIwNjpcdFx0fVxuIDIwNzpcdFxuIDIwODpcdFx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdFx0PSBpbmV0Nl9zb2NrX2Rlc3RydWN0O1xuIDIwOTpcdFx0c2stXHUwMDNlc2tfZmFtaWx5XHRcdD0gUEZfSU5FVDY7XG4gMjEwOlx0XHRzay1cdTAwM2Vza19wcm90b2NvbFx0XHQ9IHByb3RvY29sO1xuIDIxMTpcdFxuIDIxMjpcdFx0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gMjEzOlx0XG4gMjE0Olx0XHRpbmV0X3NrKHNrKS1cdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xuIDIxNTpcdFx0bnAtXHUwMDNlaG9wX2xpbWl0XHQ9IC0xO1xuIDIxNjpcdFx0bnAtXHUwMDNlbWNhc3RfaG9wc1x0PSBJUFY2X0RFRkFVTFRfTUNBU1RIT1BTO1xuIDIxNzpcdFx0aW5ldDZfc2V0X2JpdChNQzZfTE9PUCwgc2spO1xuIDIxODpcdFx0aW5ldDZfc2V0X2JpdChNQzZfQUxMLCBzayk7XG4gMjE5Olx0XHRucC1cdTAwM2VwbXR1ZGlzY1x0PSBJUFY2X1BNVFVESVNDX1dBTlQ7XG4gMjIwOlx0XHRpbmV0Nl9hc3NpZ25fYml0KFJFUEZMT1csIHNrLCBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuc3lzY3RsLmZsb3dsYWJlbF9yZWZsZWN0KSBcdTAwMjZcbiAyMjE6XHRcdFx0XHRcdCAgICAgIEZMT1dMQUJFTF9SRUZMRUNUX0VTVEFCTElTSEVEKTtcbiAyMjI6XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5XHQ9IFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5zeXNjdGwuYmluZHY2b25seSk7XG4gMjIzOlx0XHRzay1cdTAwM2Vza190eHJlaGFzaCA9IFJFQURfT05DRShuZXQtXHUwMDNlY29yZS5zeXNjdGxfdHhyZWhhc2gpO1xuIDIyNDpcdFxuIDIyNTpcdFx0LyogSW5pdCB0aGUgaXB2NCBwYXJ0IG9mIHRoZSBzb2NrZXQgc2luY2Ugd2UgY2FuIGhhdmUgc29ja2V0c1xuIDIyNjpcdFx0ICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LlxuIDIyNzpcdFx0ICovXG4gMjI4Olx0XHRpbmV0LVx1MDAzZXVjX3R0bFx0PSAtMTtcbiAyMjk6XHRcbiAyMzA6XHRcdGluZXRfc2V0X2JpdChNQ19MT09QLCBzayk7XG4gMjMxOlx0XHRpbmV0LVx1MDAzZW1jX3R0bFx0PSAxO1xuIDIzMjpcdFx0aW5ldC1cdTAwM2VtY19pbmRleFx0PSAwO1xuIDIzMzpcdFx0UkNVX0lOSVRfUE9JTlRFUihpbmV0LVx1MDAzZW1jX2xpc3QsIE5VTEwpO1xuIDIzNDpcdFx0aW5ldC1cdTAwM2VyY3ZfdG9zXHQ9IDA7XG4gMjM1Olx0XG4gMjM2Olx0XHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9pcF9ub19wbXR1X2Rpc2MpKVxuIDIzNzpcdFx0XHRpbmV0LVx1MDAzZXBtdHVkaXNjID0gSVBfUE1UVURJU0NfRE9OVDtcbiAyMzg6XHRcdGVsc2VcbiAyMzk6XHRcdFx0aW5ldC1cdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX1dBTlQ7XG4gMjQwOlx0XG4gMjQxOlx0XHRpZiAoaW5ldC1cdTAwM2VpbmV0X251bSkge1xuIDI0MjpcdFx0XHQvKiBJdCBhc3N1bWVzIHRoYXQgYW55IHByb3RvY29sIHdoaWNoIGFsbG93c1xuIDI0MzpcdFx0XHQgKiB0aGUgdXNlciB0byBhc3NpZ24gYSBudW1iZXIgYXQgc29ja2V0XG4gMjQ0Olx0XHRcdCAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseSBzaGFyZXMuXG4gMjQ1Olx0XHRcdCAqL1xuIDI0NjpcdFx0XHRpbmV0LVx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVx1MDAzZWluZXRfbnVtKTtcbiAyNDc6XHRcdFx0ZXJyID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VoYXNoKHNrKTtcbiAyNDg6XHRcdFx0aWYgKGVycilcbiAyNDk6XHRcdFx0XHRnb3RvIG91dF9za19yZWxlYXNlO1xuIDI1MDpcdFx0fVxuIDI1MTpcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlaW5pdCkge1xuIDI1MjpcdFx0XHRlcnIgPSBzay1cdTAwM2Vza19wcm90LVx1MDAzZWluaXQoc2spO1xuIDI1MzpcdFx0XHRpZiAoZXJyKVxuIDI1NDpcdFx0XHRcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XG4gMjU1Olx0XHR9XG4gMjU2Olx0XG4gMjU3Olx0XHRpZiAoIWtlcm4pIHtcbiAyNTg6XHRcdFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19JTkVUX1NPQ0soc2spO1xuIDI1OTpcdFx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNvY2tldCBDcmVhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29ja2V0IGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IG1vZHVsZSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGR1cmluZyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSB3aGVuIHVzaW5nIGBzb2NrZXQoQUZfSU5FVCwgLi4uKWAgb3IgYHNvY2tldChBRl9JTkVUNiwgLi4uKWAgY2FsbHMuIEkgcmVjb2duaXplIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciBjcmVhdGluZyBBRl9JTkVUIGFuZCBBRl9JTkVUNiBzb2NrZXRzLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgbWVjaGFuaXNtIHRvIG1hbmFnZSBtb2R1bGUgcmVmZXJlbmNlcyB1c2luZyBgdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKWAgYW5kIGBtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcilgIHdpdGhpbiBgaW5ldF9jcmVhdGVgIGFuZCBgaW5ldDZfY3JlYXRlYC4gVGhlIGludGVudCBoZXJlIGFwcGVhcnMgdG8gYmUgdG8gZW5zdXJlIHRoZSBtb2R1bGUgaXMga2VwdCBhbGl2ZSBkdXJpbmcgc29ja2V0IGNyZWF0aW9uLiBUaGUgcmVmZXJlbmNlIGlzIHRoZW4gcmVsZWFzZWQgd2l0aCBgbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBhdXNlIGFuZCBjb25zaWRlciBob3cgYHNrX2FsbG9jYCBpbnRlcmFjdHMgd2l0aCBtb2R1bGUgcmVmZXJlbmNlcy4gKkRvZXMqIGBza19hbGxvY2AgaXRzZWxmIGhhdmUgc29tZSBsb2dpYyByZWxhdGVkIHRvIG1vZHVsZSByZWZlcmVuY2VzPyBJZiBzbywgd2UgbWlnaHQgaGF2ZSBzb21lIHJlZHVuZGFudCByZWZjb3VudGluZyBnb2luZyBvbiwgb3Igd29yc2UsIGEgZG91YmxlLWZyZWUgc2l0dWF0aW9uLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGdvIGFuZCBleGFtaW5lIGBza19hbGxvY2AsIGRlZmluZWQgbGlrZWx5IGluIGBuZXQvY29yZS9zb2NrLmNgIG9yIGEgcmVsYXRlZCBmaWxlLCB0byBjb25maXJtIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIHNlZSB3aGF0IGBza19hbGxvY2AgZG9lcyBhYm91dCBtb2R1bGUgcmVmZXJlbmNlcyBpbnRlcm5hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2FsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYz0yMjM3PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxuLS1cbm5ldC9jb3JlL3NvY2suYy0yMjUzLVx0aWYgKHNrICE9IE5VTEwpIHtcbm5ldC9jb3JlL3NvY2suYzoyMjU0Olx0XHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxubmV0L2NvcmUvc29jay5jLTIyNTUtXHRcdFx0Z290byBvdXRfZnJlZTtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjI3Mz1zdGF0aWMgdm9pZCBza19wcm90X2ZyZWUoc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29jay5jLTIzMDEtICovXG5uZXQvY29yZS9zb2NrLmM6MjMwMjpzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcbm5ldC9jb3JlL3NvY2suYy0yMzAzLVx0XHQgICAgICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yMzM0LVxubmV0L2NvcmUvc29jay5jOjIzMzU6XHRcdG1lbV9jZ3JvdXBfc2tfYWxsb2Moc2spO1xubmV0L2NvcmUvc29jay5jOjIzMzY6XHRcdGNncm91cF9za19hbGxvYyhcdTAwMjZzay1cdTAwM2Vza19jZ3JwX2RhdGEpO1xubmV0L2NvcmUvc29jay5jLTIzMzctXHRcdHNvY2tfdXBkYXRlX2NsYXNzaWQoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjY2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgc2tfcHJvdF9hbGxvY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvY2tldCBwcm90b2NvbHMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gZXZlcnl0aGluZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHNrX3Byb3RfYWxsb2NgLiBJIGtub3cgaXQmIzM5O3MgaW4gYG5ldC9jb3JlL3NvY2suY2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGUgY29yZSBzb2NrZXQgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IGhvdXNlZCB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjYWxscywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHRoZSBgc29ja2AgYW5kIGBza19idWZmYCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIHByb3RvY29sLXNwZWNpZmljIGRhdGEgaXMgbGlua2VkIGluIGFuZCBob3cgbWVtb3J5IGlzIG1hbmFnZWQgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFdoYXQgYXJlIHRoZSBzcGlubG9ja3MgaW52b2x2ZWQgYW5kIHRoZSBsb2NraW5nIG9yZGVyPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJhY2UgY29uZGl0aW9ucyBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24uIElzIGl0IGNhbGxlZCBmcm9tIHVzZXIgc3BhY2UsIGtlcm5lbCBzcGFjZSwgb3IgYm90aD8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjM1Olx0fVxuMjIzNjpcdFxuMjIzNzpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxuMjIzODpcdFx0XHRpbnQgZmFtaWx5KVxuMjIzOTpcdHtcbjIyNDA6XHRcdHN0cnVjdCBzb2NrICpzaztcbjIyNDE6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xuMjI0MjpcdFxuMjI0MzpcdFx0c2xhYiA9IHByb3QtXHUwMDNlc2xhYjtcbjIyNDQ6XHRcdGlmIChzbGFiICE9IE5VTEwpIHtcbjIyNDU6XHRcdFx0c2sgPSBrbWVtX2NhY2hlX2FsbG9jKHNsYWIsIHByaW9yaXR5IFx1MDAyNiB+X19HRlBfWkVSTyk7XG4yMjQ2Olx0XHRcdGlmICghc2spXG4yMjQ3Olx0XHRcdFx0cmV0dXJuIHNrO1xuMjI0ODpcdFx0XHRpZiAod2FudF9pbml0X29uX2FsbG9jKHByaW9yaXR5KSlcbjIyNDk6XHRcdFx0XHRza19wcm90X2NsZWFyX251bGxzKHNrLCBwcm90LVx1MDAzZW9ial9zaXplKTtcbjIyNTA6XHRcdH0gZWxzZVxuMjI1MTpcdFx0XHRzayA9IGttYWxsb2MocHJvdC1cdTAwM2VvYmpfc2l6ZSwgcHJpb3JpdHkpO1xuMjI1MjpcdFxuMjI1MzpcdFx0aWYgKHNrICE9IE5VTEwpIHtcbjIyNTQ6XHRcdFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcbjIyNTU6XHRcdFx0XHRnb3RvIG91dF9mcmVlO1xuMjI1NjpcdFxuMjI1NzpcdFx0XHRpZiAoIXRyeV9tb2R1bGVfZ2V0KHByb3QtXHUwMDNlb3duZXIpKVxuMjI1ODpcdFx0XHRcdGdvdG8gb3V0X2ZyZWVfc2VjO1xuMjI1OTpcdFx0fVxuMjI2MDpcdFxuMjI2MTpcdFx0cmV0dXJuIHNrO1xuMjI2MjpcdFxuMjI2MzpcdG91dF9mcmVlX3NlYzpcbjIyNjQ6XHRcdHNlY3VyaXR5X3NrX2ZyZWUoc2spO1xuMjI2NTpcdG91dF9mcmVlOlxuMjI2NjpcdFx0aWYgKHNsYWIgIT0gTlVMTClcbjIyNjc6XHRcdFx0a21lbV9jYWNoZV9mcmVlKHNsYWIsIHNrKTtcbjIyNjg6XHRcdGVsc2VcbjIyNjk6XHRcdFx0a2ZyZWUoc2spO1xuMjI3MDpcdFx0cmV0dXJuIE5VTEw7XG4yMjcxOlx0fVxuMjI3MjpcdFxuMjI3MzpcdHN0YXRpYyB2b2lkIHNrX3Byb3RfZnJlZShzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBzb2NrICpzaylcbjIyNzQ6XHR7XG4yMjc1Olx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYjtcbjIyNzY6XHRcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuMjI3NzpcdFxuMjI3ODpcdFx0b3duZXIgPSBwcm90LVx1MDAzZW93bmVyO1xuMjI3OTpcdFx0c2xhYiA9IHByb3QtXHUwMDNlc2xhYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBFdmFsdWF0aW9uOiBOZXR3b3JrIFNvY2tldCBDcmVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgY29kZSBjaGFuZ2VzLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoZXJlIHdlIHN0YW5kLiAgYHNrX3Byb3RfYWxsb2NgIHdhcyBjYWxsaW5nIGB0cnlfbW9kdWxlX2dldGAgb24gdGhlIHByb3RvY29sJiMzOTtzIG93bmVyLCBidXQgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kL29yIHVzZS1hZnRlci1mcmVlIGlzc3VlIGlmIHRoZSBtb2R1bGUgdW5sb2FkcyBiZWZvcmUgYHNrX2FsbG9jYCBpcyBjYWxsZWQsIG9yIGlmIGBhbnN3ZXJfcHJvdGAgY29tZXMgZnJvbSBhIG1vZHVsZSB0aGF0JiMzOTtzIGJlaW5nIHVubG9hZGVkLiBDb252ZXJzZWx5LCBgc2tfcHJvdF9mcmVlYCBkb2VzIGBtb2R1bGVfcHV0KG93bmVyKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgZXh0cmEgYHRyeV9tb2R1bGVfZ2V0YC9gbW9kdWxlX3B1dGAgaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzIG1vZHVsZSB1bmxvYWRpbmcgaXNzdWUgd2hpbGUgc29ja2V0IGNyZWF0aW9uIGlzIGluIHByb2dyZXNzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gZnV6emluZz8gQWJzb2x1dGVseS4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgYXJlIHRoZSAqY29yZSogc29ja2V0IGNyZWF0aW9uIGZ1bmN0aW9ucyBmb3IgYEFGX0lORVRgIGFuZCBgQUZfSU5FVDZgIHNvY2tldHMsIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIG5ldHdvcmsgcHJvZ3JhbW1pbmcuIFRoZXkmIzM5O3JlIGV4ZWN1dGVkIGRpcmVjdGx5IGZyb20gc3lzY2FsbHMgbGlrZSBgc29ja2V0KClgLCBgYWNjZXB0KClgLCBhbmQgYHNvY2tldHBhaXIoKWAuIFRoaXMgaXMgZnVuZGFtZW50YWwgbmV0d29ya2luZyBjb2RlLCBzaXR0aW5nIGluIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgbmV0L2lwdjYvYWZfaW5ldDYuY2AuCgpCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgZGVmaW5pdGl2ZWx5IGZhbGxzIHVuZGVyICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZS4mIzM0OyBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgYXJlIGZhaXIgZ2FtZSwgYW5kIHRoaXMgdG91Y2hlcyB0aGF0IGRpcmVjdGx5LiAgUmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cD8gQ2hlY2suIFJlYWNoYWJsZSBjb2RlPyBBYnNvbHV0ZWx5LgoKTm93LCBmb3IgZm9jdXMgc3ltYm9scy4gIGBpbmV0X2NyZWF0ZWAgZnJvbSBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYGluZXQ2X2NyZWF0ZWAgZnJvbSBgbmV0L2lwdjYvYWZfaW5ldDYuY2AgYXJlICp0aGUqIGZ1bmN0aW9ucy4gIFRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgdGhlc2UgdHdvIGZ1bmN0aW9ucywgbm90aGluZyBlbHNlLiBXZSBhcmVuJiMzOTt0IGRlYWxpbmcgd2l0aCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzOyB0aGVzZSBhcmUgc3BlY2lmaWMgZW50cnkgcG9pbnRzIGZvciBzb2NrZXQgY3JlYXRpb24sIHNwZWNpZmljYWxseSBmb3IgdGhlIGBBRl9JTkVUYCBhbmQgYEFGX0lORVQ2YCBmYW1pbGllcy4gIFRoaXMgaXNuJiMzOTt0IGEgaG90IHBhdGggdGhhdCYjMzk7cyBnb2luZyB0byBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBJdCBpcyB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzIGFzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDQuCgpJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBuZXQvaXB2NC9gIGFuZCBgbmV0L2lwdjYvYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgbWFrZSB0aGVzZSBmdW5jdGlvbnMgaW5hY2Nlc3NpYmxlLCBidXQgYXNzdW1pbmcgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCB3ZSBhcmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfaW5ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xMy1cdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTcxOT1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9taWJfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0xNzMwLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbm5ldC9pcHY0L2FmX2luZXQuYzoxNzMxOlx0XHRzdHJ1Y3QgaXBzdGF0c19taWIgKmFmX2luZXRfc3RhdHM7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTczMjpcdFx0YWZfaW5ldF9zdGF0cyA9IHBlcl9jcHVfcHRyKG5ldC1cdTAwM2VtaWIuaXBfc3RhdGlzdGljcywgaSk7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTczMzpcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2YWZfaW5ldF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTczNC1cdH1cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTc5MD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaW5ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzAtXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTgzMTpzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGFmX2luZXRfb3BzID0ge1xubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzItXHQuaW5pdCA9IGluZXRfaW5pdF9uZXQsXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE4MzU9c3RhdGljIGludCBfX2luaXQgaW5pdF9pbmV0X3Blcm5ldF9vcHModm9pZClcbm5ldC9pcHY0L2FmX2luZXQuYy0xODM2LXtcbm5ldC9pcHY0L2FmX2luZXQuYzoxODM3Olx0cmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2YWZfaW5ldF9vcHMpO1xubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzgtfVxuLS1cbm5ldC9pcHY0L3Jhdy5jPTcwMD1zdGF0aWMgdm9pZCByYXdfZGVzdHJveShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvcmF3LmMtNzA2LVxubmV0L2lwdjQvcmF3LmM6NzA3Oi8qIFRoaXMgZ2V0cyByaWQgb2YgYWxsIHRoZSBuYXN0aWVzIGluIGFmX2luZXQuIC1EYXZlTSAqL1xubmV0L2lwdjQvcmF3LmMtNzA4LXN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L2lwdjQvdWRwLmMtNDEtICpcdFx0TWF0dCBEaWxsb25cdDpcdFVEUCBsZW5ndGggY2hlY2tzLlxubmV0L2lwdjQvdWRwLmM6NDI6ICpcdFx0QWxhbiBDb3hcdDpcdFNtYXJ0ZXIgYWZfaW5ldCB1c2VkIHByb3Blcmx5LlxubmV0L2lwdjQvdWRwLmMtNDMtICpcdFx0QWxhbiBDb3hcdDpcdFVzZSBuZXcga2VybmVsIHNpZGUgYWRkcmVzc2luZy5cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSAmIzQzOz0gaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxubmV0L2lwdjYvTWFrZWZpbGU6ODppcHY2LXkgOj1cdGFmX2luZXQ2Lm8gYW55Y2FzdC5vIGlwNl9vdXRwdXQubyBpcDZfaW5wdXQubyBhZGRyY29uZi5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS05LVx0XHRhZGRybGFiZWwubyBcXFxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtOC0gKlxubmV0L2lwdjYvYWZfaW5ldDYuYzo5OiAqXHRBZGFwdGVkIGZyb20gbGludXgvbmV0L2lwdjQvYWZfaW5ldC5jXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTEwLSAqXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz04ODg9c3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfaW5pdF9taWJzKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTkwMC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjkwMTpcdFx0c3RydWN0IGlwc3RhdHNfbWliICphZl9pbmV0Nl9zdGF0cztcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAyOlx0XHRhZl9pbmV0Nl9zdGF0cyA9IHBlcl9jcHVfcHRyKG5ldC1cdTAwM2VtaWIuaXB2Nl9zdGF0aXN0aWNzLCBpKTtcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAzOlx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZhZl9pbmV0Nl9zdGF0cy1cdTAwM2VzeW5jcCk7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTkwNC1cdH1cbi0tXG5uZXQvaXB2Ni9yYXcuYz0yMTE9Ym9vbCByYXc2X2xvY2FsX2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpXG4tLVxubmV0L2lwdjYvcmF3LmMtMjE1LVxubmV0L2lwdjYvcmF3LmM6MjE2Oi8qIFRoaXMgY2xlYW5zIHVwIGFmX2luZXQ2IGEgYml0LiAtRGF2ZU0gKi9cbm5ldC9pcHY2L3Jhdy5jLTIxNy1zdGF0aWMgaW50IHJhd3Y2X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L3NjdHAvaXB2Ni5jPTEwODg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBzY3RwdjZfcHJvdG9jb2wgPSB7XG4tLVxubmV0L3NjdHAvaXB2Ni5jLTEwOTMtXG5uZXQvc2N0cC9pcHY2LmM6MTA5NDpzdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9hZl9pbmV0NiA9IHtcbm5ldC9zY3RwL2lwdjYuYy0xMDk1LVx0LnNhX2ZhbWlseVx0ICAgPSBBRl9JTkVUNixcbi0tXG5uZXQvc2N0cC9pcHY2LmM9MTEyMj1zdGF0aWMgc3RydWN0IHNjdHBfcGYgc2N0cF9wZl9pbmV0NiA9IHtcbi0tXG5uZXQvc2N0cC9pcHY2LmMtMTEzMy1cdC5jb3B5X2lwX29wdGlvbnMgPSBzY3RwX3Y2X2NvcHlfaXBfb3B0aW9ucyxcbm5ldC9zY3RwL2lwdjYuYzoxMTM0Olx0LmFmICAgICAgICAgICAgPSBcdTAwMjZzY3RwX2FmX2luZXQ2LFxubmV0L3NjdHAvaXB2Ni5jLTExMzUtfTtcbi0tXG5uZXQvc2N0cC9pcHY2LmM9MTEzOD12b2lkIHNjdHBfdjZfcGZfaW5pdCh2b2lkKVxuLS1cbm5ldC9zY3RwL2lwdjYuYy0xMTQzLVx0LyogUmVnaXN0ZXIgdGhlIFNDVFAgc3BlY2lmaWMgQUZfSU5FVDYgZnVuY3Rpb25zLiAqL1xubmV0L3NjdHAvaXB2Ni5jOjExNDQ6XHRzY3RwX3JlZ2lzdGVyX2FmKFx1MDAyNnNjdHBfYWZfaW5ldDYpO1xubmV0L3NjdHAvaXB2Ni5jLTExNDUtfVxuLS1cbm5ldC9zY3RwL2lwdjYuYz0xMTQ3PXZvaWQgc2N0cF92Nl9wZl9leGl0KHZvaWQpXG5uZXQvc2N0cC9pcHY2LmMtMTE0OC17XG5uZXQvc2N0cC9pcHY2LmM6MTE0OTpcdGxpc3RfZGVsKFx1MDAyNnNjdHBfYWZfaW5ldDYubGlzdCk7XG5uZXQvc2N0cC9pcHY2LmMtMTE1MC19XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMDQwPXN0YXRpYyBpbmxpbmUgaW50IHNjdHBfdjRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMDgyLVxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMDgzOnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2FmX2luZXQ7XG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwODQtXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEwODU9c3RhdGljIHN0cnVjdCBzY3RwX3BmIHNjdHBfcGZfaW5ldCA9IHtcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwOTYtXHQuY29weV9pcF9vcHRpb25zID0gc2N0cF92NF9jb3B5X2lwX29wdGlvbnMsXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEwOTc6XHQuYWYgICAgICAgICAgICA9IFx1MDAyNnNjdHBfYWZfaW5ldFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMDk4LX07XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMTUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sIHNjdHBfcHJvdG9jb2wgPSB7XG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMTU3LS8qIElQdjQgYWRkcmVzcyByZWxhdGVkIGZ1bmN0aW9ucy4gICovXG5uZXQvc2N0cC9wcm90b2NvbC5jOjExNTg6c3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldCA9IHtcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTE1OS1cdC5zYV9mYW1pbHlcdCAgID0gQUZfSU5FVCxcbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyMzE9c3RhdGljIHZvaWQgc2N0cF92NF9wZl9pbml0KHZvaWQpXG4tLVxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjM0LVx0c2N0cF9yZWdpc3Rlcl9wZihcdTAwMjZzY3RwX3BmX2luZXQsIFBGX0lORVQpO1xubmV0L3NjdHAvcHJvdG9jb2wuYzoxMjM1Olx0c2N0cF9yZWdpc3Rlcl9hZihcdTAwMjZzY3RwX2FmX2luZXQpO1xubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjM2LX1cbi0tXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyMzg9c3RhdGljIHZvaWQgc2N0cF92NF9wZl9leGl0KHZvaWQpXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEyMzkte1xubmV0L3NjdHAvcHJvdG9jb2wuYzoxMjQwOlx0bGlzdF9kZWwoXHUwMDI2c2N0cF9hZl9pbmV0Lmxpc3QpO1xubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjQxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgbmV0d29yayBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZCBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgZHJpbGwgZG93bi4KCkdpdmVuIHRoYXQgSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgSVB2NCBhbmQgSVB2NiwgSSBzaG91bGQgYWxzbyBpbW1lZGlhdGVseSBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhlc2Ugd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgbW9yZSBncmFudWxhciBvcHRpb25zIHNwZWNpZmljIHRvIGVhY2ggcHJvdG9jb2wuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyB0aGVyZTogdGhpbmdzIGxpa2UgZmVhdHVyZXMsIHJvdXRpbmcgdGFibGVzLCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgYWxsIHRoZSByZXN0LiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBxdWlja2x5IGFzc2Vzc2luZyBhbmQvb3IgbW9kaWZ5aW5nIGtlcm5lbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBjb25maWd1cmFibGUgY2hvaWNlcyBhcmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEzOTAyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvODAyL2ZkZGkuYy0yLS8qXG5uZXQvODAyL2ZkZGkuYzozOiAqIElORVRcdFx0QW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYXG5uZXQvODAyL2ZkZGkuYzo0OiAqXHRcdG9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBCU0QgU29ja2V0XG5uZXQvODAyL2ZkZGkuYy01LSAqXHRcdGludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLlxuLS1cbm5ldC84MDIxcS92bGFuLmMtMi0vKlxubmV0LzgwMjFxL3ZsYW4uYzozOiAqIElORVRcdFx0ODAyLjFRIFZMQU5cbm5ldC84MDIxcS92bGFuLmMtNC0gKlx0XHRFdGhlcm5ldC10eXBlIGRldmljZSBoYW5kbGluZy5cbi0tXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM9NTE1PXN0YXRpYyBpbnQgdmxhbl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxuLS1cbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MjMtXHRpZiAocHR5cGUpXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NTI0Olx0XHRlcnIgPSBJTkRJUkVDVF9DQUxMX0lORVQocHR5cGUtXHUwMDNlY2FsbGJhY2tzLmdyb19jb21wbGV0ZSxcbm5ldC84MDIxcS92bGFuX2NvcmUuYy01MjUtXHRcdFx0XHRcdCBpcHY2X2dyb19jb21wbGV0ZSwgaW5ldF9ncm9fY29tcGxldGUsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMi0vKiAtKi0gbGludXgtYyAtKi1cbm5ldC84MDIxcS92bGFuX2Rldi5jOjM6ICogSU5FVFx0XHQ4MDIuMVEgVkxBTlxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNC0gKlx0XHRFdGhlcm5ldC10eXBlIGRldmljZSBoYW5kbGluZy5cbi0tXG5uZXQvOXAvS2NvbmZpZz0xOT1jb25maWcgTkVUXzlQX0ZEXG5uZXQvOXAvS2NvbmZpZy0yMC1cdGRlZmF1bHQgTkVUXzlQXG5uZXQvOXAvS2NvbmZpZzoyMTpcdGltcGx5IElORVRcbm5ldC85cC9LY29uZmlnLTIyLVx0aW1wbHkgVU5JWFxuLS1cbm5ldC85cC9LY29uZmlnPTUyPWNvbmZpZyBORVRfOVBfUkRNQVxubmV0LzlwL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xubmV0LzlwL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDs5UCBSRE1BIFRyYW5zcG9ydCAoRXhwZXJpbWVudGFsKVwmIzM0O1xuLS1cbm5ldC85cC90cmFuc19mZC5jPTg1MD1zdGF0aWMgaW50IHA5X2JpbmRfcHJpdnBvcnQoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvOXAvdHJhbnNfZmQuYy04NTUtXHRzdG9yLnNzX2ZhbWlseSA9IHNvY2stXHUwMDNlb3BzLVx1MDAzZWZhbWlseTtcbm5ldC85cC90cmFuc19mZC5jOjg1NjpcdGlmIChzdG9yLnNzX2ZhbWlseSA9PSBBRl9JTkVUKVxubmV0LzlwL3RyYW5zX2ZkLmMtODU3LVx0XHQoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnN0b3IpLVx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpO1xuLS1cbm5ldC85cC90cmFuc19mZC5jLTg2MC1cdGZvciAocG9ydCA9IHA5X2lwcG9ydF9yZXN2X21heDsgcG9ydCBcdTAwM2U9IHA5X2lwcG9ydF9yZXN2X21pbjsgcG9ydC0tKSB7XG5uZXQvOXAvdHJhbnNfZmQuYzo4NjE6XHRcdGlmIChzdG9yLnNzX2ZhbWlseSA9PSBBRl9JTkVUKVxubmV0LzlwL3RyYW5zX2ZkLmMtODYyLVx0XHRcdCgoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2c3RvciktXHUwMDNlc2luX3BvcnQgPSBodG9ucygodXNob3J0KXBvcnQpO1xuLS1cbm5ldC85cC90cmFuc19yZG1hLmM9NTE0PXN0YXRpYyBpbnQgcDlfcmRtYV9iaW5kX3ByaXZwb3J0KHN0cnVjdCBwOV90cmFuc19yZG1hICpyZG1hKVxuLS1cbm5ldC85cC90cmFuc19yZG1hLmMtNTE2LVx0c3RydWN0IHNvY2thZGRyX2luIGNsID0ge1xubmV0LzlwL3RyYW5zX3JkbWEuYzo1MTc6XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbm5ldC85cC90cmFuc19yZG1hLmMtNTE4LVx0XHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSksXG4tLVxubmV0LzlwL3RyYW5zX3JkbWEuYz01Mzc9cmRtYV9jcmVhdGVfdHJhbnMoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubmV0LzlwL3RyYW5zX3JkbWEuYy01NzctXHQvKiBSZXNvbHZlIHRoZSBzZXJ2ZXImIzM5O3MgYWRkcmVzcyAqL1xubmV0LzlwL3RyYW5zX3JkbWEuYzo1Nzg6XHRyZG1hLVx1MDAzZWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG5uZXQvOXAvdHJhbnNfcmRtYS5jLTU3OS1cdHJkbWEtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbl9hdG9uKGFkZHIpO1xuLS1cbm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy0xMzUtXG5uZXQvS2NvbmZpZzoxMzY6aWYgSU5FVFxubmV0L0tjb25maWctMTM3LXNvdXJjZSBcJiMzNDtuZXQvaXB2NC9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L0tjb25maWc9MTQwPXNvdXJjZSBcJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMTQxLVxubmV0L0tjb25maWc6MTQyOmVuZGlmICMgaWYgSU5FVFxubmV0L0tjb25maWctMTQzLVxuLS1cbm5ldC9LY29uZmlnPTIzMT1jb25maWcgQlJJREdFX05FVEZJTFRFUlxuLS1cbm5ldC9LY29uZmlnLTIzMy1cdGRlcGVuZHMgb24gQlJJREdFXG5uZXQvS2NvbmZpZzoyMzQ6XHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L0tjb25maWctMjM1LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xubmV0L0tjb25maWc6MzYzOlx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvS2NvbmZpZy0zNjQtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4tLVxubmV0L0tjb25maWc9Mzg2PWNvbmZpZyBORVRfUEtUR0VOXG5uZXQvS2NvbmZpZy0zODctXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgR2VuZXJhdG9yIChVU0UgV0lUSCBDQVVUSU9OKVwmIzM0O1xubmV0L0tjb25maWc6Mzg4Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG5uZXQvS2NvbmZpZy0zODktXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDAxPWNvbmZpZyBORVRfRFJPUF9NT05JVE9SXG5uZXQvS2NvbmZpZy00MDItXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgbmV0d29yayBwYWNrZXQgZHJvcCBhbGVydGluZyBzZXJ2aWNlXCYjMzQ7XG5uZXQvS2NvbmZpZzo0MDM6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFRSQUNFUE9JTlRTXG5uZXQvS2NvbmZpZy00MDQtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDUzPWNvbmZpZyBMV1RVTk5FTF9CUEZcbm5ldC9LY29uZmlnLTQ1NC1cdGJvb2wgXCYjMzQ7RXhlY3V0ZSBCUEYgcHJvZ3JhbSBhcyByb3V0ZSBuZXh0aG9wIGFjdGlvblwmIzM0O1xubmV0L0tjb25maWc6NDU1Olx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L0tjb25maWctNDU2LVx0ZGVmYXVsdCB5IGlmIExXVFVOTkVMPXlcbi0tXG5uZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbm5ldC9LY29uZmlnLTQ3Ni1cdGRlZl90cmlzdGF0ZSBQSFlMSUJcbm5ldC9LY29uZmlnOjQ3NzpcdGRlcGVuZHMgb24gUEhZTElCIFx1MDAyNlx1MDAyNiBJTkVUXG5uZXQvS2NvbmZpZy00NzgtXG4tLVxubmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBpcHY0L1xubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXHRcdCYjNDM7PSB0bHMvXG4tLVxubmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xuLS1cbm5ldC9hdG0vS2NvbmZpZz0yMj1jb25maWcgQVRNX0JSMjY4NFxubmV0L2F0bS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG5uZXQvYXRtL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIEFUTSBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2F0bS9LY29uZmlnLTI1LVx0aGVscFxuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc9MzQ9Y29uZmlnIEJBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtCcmlkZ2UgTG9vcCBBdm9pZGFuY2VcJiMzNDtcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXHUwMDI2XHUwMDI2IElORVRcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzctXHRzZWxlY3QgQ1JDMTZcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnPTQ3PWNvbmZpZyBCQVRNQU5fQURWX0RBVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGlzdHJpYnV0ZWQgQVJQIFRhYmxlXCYjMzQ7XG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjQ5Olx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFx1MDAyNlx1MDAyNiBJTkVUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTUwLVx0ZGVmYXVsdCB5XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZz01Nz1jb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cdGJvb2wgXCYjMzQ7TXVsdGljYXN0IG9wdGltaXNhdGlvblwmIzM0O1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1OTpcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcdTAwMjZcdTAwMjYgSU5FVCBcdTAwMjZcdTAwMjYgIShCUklER0U9bSBcdTAwMjZcdTAwMjYgQkFUTUFOX0FEVj15KVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02MC1cdGRlZmF1bHQgeVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTExNzYtXHRcdH1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMTc3Olx0XHRzay1cdTAwM2Vza19mYW1pbHkgPSBBRl9JTkVUO1xubmV0L2JwZi90ZXN0X3J1bi5jLTExNzgtXHRcdHNrLVx1MDAzZXNrX3Jjdl9zYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZXNhZGRyO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xMTg2LVx0XHR9XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTE4NzpcdFx0c2stXHUwMDNlc2tfZmFtaWx5ID0gQUZfSU5FVDY7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTE4OC1cdFx0c2stXHUwMDNlc2tfdjZfcmN2X3NhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTU3OD1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNjIyLVx0c3dpdGNoIChjdHguZmFtaWx5KSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTYyMzpcdGNhc2UgQUZfSU5FVDpcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjI0LVx0XHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXHUwMDNlbG9jYWxfaXA0O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNjI4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2JwZi90ZXN0X3J1bi5jOjE2Mjk6XHRjYXNlIEFGX0lORVQ2OlxubmV0L2JwZi90ZXN0X3J1bi5jLTE2MzAtXHRcdGN0eC52Ni5kYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIgKil1c2VyX2N0eC1cdTAwM2Vsb2NhbF9pcDY7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE3MjE9c3RhdGljIGludCB2ZXJpZnlfYW5kX2NvcHlfaG9va19zdGF0ZShzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzQtXHRcdHN3aXRjaCAoc3RhdGUtXHUwMDNlaG9vaykge1xubmV0L2JwZi90ZXN0X3J1bi5jOjE3MzU6XHRcdGNhc2UgTkZfSU5FVF9QUkVfUk9VVElORzpcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzM2LVx0XHRcdHN0YXRlLVx1MDAzZWluID0gZGV2O1xubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzctXHRcdFx0YnJlYWs7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTczODpcdFx0Y2FzZSBORl9JTkVUX0xPQ0FMX0lOOlxubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzktXHRcdFx0c3RhdGUtXHUwMDNlaW4gPSBkZXY7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0MC1cdFx0XHRicmVhaztcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzQxOlx0XHRjYXNlIE5GX0lORVRfRk9SV0FSRDpcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzQyLVx0XHRcdHN0YXRlLVx1MDAzZWluID0gZGV2O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNzQ0LVx0XHRcdGJyZWFrO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE3NDU6XHRcdGNhc2UgTkZfSU5FVF9MT0NBTF9PVVQ6XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0Ni1cdFx0XHRzdGF0ZS1cdTAwM2VvdXQgPSBkZXY7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0Ny1cdFx0XHRicmVhaztcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzQ4Olx0XHRjYXNlIE5GX0lORVRfUE9TVF9ST1VUSU5HOlxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDktXHRcdFx0c3RhdGUtXHUwMDNlb3V0ID0gZGV2O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNzc2PWludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE3ODMtXHRcdC5wZiA9IE5GUFJPVE9fSVBWNCxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzg0Olx0XHQuaG9vayA9IE5GX0lORVRfTE9DQUxfT1VULFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3ODUtXHR9O1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xODM1LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE4MzY6XHRpZiAoaG9va19zdGF0ZS5ob29rICE9IE5GX0lORVRfTE9DQUxfT1VUKSB7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTgzNy1cdFx0aWYgKHNpemUgXHUwMDNjIEVUSF9ITEVOICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZz0zNj1jb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctMzgtXHRkZXBlbmRzIG9uIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnOjM5Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvYnJpZGdlL0tjb25maWctNDAtXHRkZWZhdWx0IHlcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTI3PXZvaWQgYnJfcmVjYWxjdWxhdGVfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00MS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQzLXN0YXRpYyB2b2lkIGJyX2FycF9zZW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy03MS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTczLVx0ICAgIChldGhfaGRyKHNrYiktXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApIHx8XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNjgtXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MTY5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3MC1cdCAgICAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0FSUCkgfHxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTQwPXN0YXRpYyBzaXplX3QgX19icl9ycG9ydHNfb25lX3NpemUodm9pZClcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTQ0LVx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpICYjNDM7ICAvKiBNREJBX1JPVVRFUl9QQVRUUl9UWVBFICovXG5uZXQvYnJpZGdlL2JyX21kYi5jOjQ1Olx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOyAvKiBNREJBX1JPVVRFUl9QQVRUUl9JTkVUX1RJTUVSICovXG5uZXQvYnJpZGdlL2JyX21kYi5jOjQ2Olx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOyAvKiBNREJBX1JPVVRFUl9QQVRUUl9JTkVUNl9USU1FUiAqL1xubmV0L2JyaWRnZS9icl9tZGIuYy00Ny1cdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7ICAvKiBNREJBX1JPVVRFUl9QQVRUUl9WSUQgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwPWludCBicl9ycG9ydHNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTUtXHRcdCAgICAoaGF2ZV9pcDRfbWNfcnRyIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9tZGIuYzoxMTY6XHRcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBNREJBX1JPVVRFUl9QQVRUUl9JTkVUX1RJTUVSLFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTctXHRcdFx0XHQgaXA0X3RpbWVyKSkgfHxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE4LVx0XHQgICAgKGhhdmVfaXA2X21jX3J0ciBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTE5Olx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgTURCQV9ST1VURVJfUEFUVFJfSU5FVDZfVElNRVIsXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyMC1cdFx0XHRcdCBpcDZfdGltZXIpKSB8fFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDgzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzOC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTM5Olx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsIHN0YXRlLVx1MDAzZW5ldCwgc3RhdGUtXHUwMDNlc2ssIHNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQwLVx0XHRza2ItXHUwMDNlZGV2LCBOVUxMLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTY4LSAqICAgIG9yaWdpbmFsIHNrYi4gIFRoZSBtYWN2bGFuIHJ4IGhhbmRsZXIgdGhlbiByZXR1cm5zIFJYX0hBTkRMRVJfUEFTUy5cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTY5OiAqIDUuIE5vcm1hbCBjb25udHJhY2sgaG9va3MgKGluIE5GX0lORVRfTE9DQUxfSU4pIGNvbmZpcm0gdGhlIG9yaWcgc2tiLlxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01NzAtICpcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcyMC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzIxOlx0TkZfSE9PSyhwZiwgTkZfSU5FVF9GT1JXQVJELCBzdGF0ZS1cdTAwM2VuZXQsIE5VTEwsIHNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzIyLVx0XHRicm5mX2dldF9sb2dpY2FsX2Rldihza2IsIHN0YXRlLVx1MDAzZWluLCBzdGF0ZS1cdTAwM2VuZXQpLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTI1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NjMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk2NDpcdE5GX0hPT0socGYsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBzdGF0ZS1cdTAwM2VuZXQsIHN0YXRlLVx1MDAzZXNrLCBza2IsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk2NS1cdFx0TlVMTCwgcmVhbG91dGRldixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3MS0vKiBJUC9TQUJPVEFHRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTcyOi8qIERvbiYjMzk7dCBoYW5kIGxvY2FsbHkgZGVzdGluZWQgcGFja2V0cyB0byBQRl9JTkVUKDYpL1BSRV9ST1VUSU5HXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3My0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTA0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGJyX25mX29wc1tdID0ge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA3Ni1cdFx0LnBmID0gTkZQUk9UT19JUFY0LFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDc3Olx0XHQuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwNzgtXHRcdC5wcmlvcml0eSA9IE5GX0lQX1BSSV9GSVJTVCxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwODItXHRcdC5wZiA9IE5GUFJPVE9fSVBWNixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTA4MzpcdFx0Lmhvb2tudW0gPSBORl9JTkVUX1BSRV9ST1VUSU5HLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDg0LVx0XHQucHJpb3JpdHkgPSBORl9JUDZfUFJJX0ZJUlNULFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYz0xNjI9dW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nX2lwdjYodm9pZCAqcHJpdixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTgyLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE4MzpcdE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BSRV9ST1VUSU5HLCBzdGF0ZS1cdTAwM2VuZXQsIHN0YXRlLVx1MDAzZXNrLCBza2IsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTg0LVx0XHRza2ItXHUwMDNlZGV2LCBOVUxMLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmZfY29yZS5jPTUyPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7XG5uZXQvYnJpZGdlL2JyX25mX2NvcmUuYzo1MzpcdC5mYW1pbHlcdFx0PSBBRl9JTkVULFxubmV0L2JyaWRnZS9icl9uZl9jb3JlLmMtNTQtXHQudXBkYXRlX3BtdHVcdD0gZmFrZV91cGRhdGVfcG10dSxcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTE4OT1jb25maWcgQlJJREdFX0VCVF9BUlBSRVBMWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTAtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGFycCByZXBseSB0YXJnZXQgc3VwcG9ydFwmIzM0O1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxOTE6XHRkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFUyBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTItXHRoZWxwXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTg5PXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgZWJ0X3NvY2tvcHRzID0ge1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYzoyNTkwOlx0LnBmXHRcdD0gUEZfSU5FVCxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMtMjU5MS1cdC5zZXRfb3B0bWluXHQ9IEVCVF9CQVNFX0NUTCxcbi0tXG5uZXQvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfTElCXG5uZXQvY2VwaC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDZXBoIGNvcmUgbGlicmFyeVwmIzM0O1xubmV0L2NlcGgvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQvY2VwaC9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDMzJcbi0tXG5uZXQvY2VwaC9kZWNvZGUuYz0xNTI9c3RhdGljIGludCBnZXRfc29ja2FkZHJfZW5jb2RpbmdfbGVuKHNhX2ZhbWlseV90IGZhbWlseSlcbi0tXG5uZXQvY2VwaC9kZWNvZGUuYy0xNjAtXHRzd2l0Y2ggKGZhbWlseSkge1xubmV0L2NlcGgvZGVjb2RlLmM6MTYxOlx0Y2FzZSBBRl9JTkVUOlxubmV0L2NlcGgvZGVjb2RlLmMtMTYyLVx0XHRyZXR1cm4gc2l6ZW9mKHUuc2luKTtcbm5ldC9jZXBoL2RlY29kZS5jOjE2MzpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY2VwaC9kZWNvZGUuYy0xNjQtXHRcdHJldHVybiBzaXplb2YodS5zaW42KTtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xNjQ9Y29uc3QgY2hhciAqY2VwaF9wcl9hZGRyKGNvbnN0IHN0cnVjdCBjZXBoX2VudGl0eV9hZGRyICphZGRyKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3NS1cdHN3aXRjaCAoc3Muc3NfZmFtaWx5KSB7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxNzY6XHRjYXNlIEFGX0lORVQ6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xNzctXHRcdHNucHJpbnRmKHMsIE1BWF9BRERSX1NUUl9MRU4sIFwmIzM0OyglZCklcEk0OiVodVwmIzM0Oyxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xODEtXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxODI6XHRjYXNlIEFGX0lORVQ2OlxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTgzLVx0XHRzbnByaW50ZihzLCBNQVhfQUREUl9TVFJfTEVOLCBcJiMzNDsoJWQpWyVwSTZjXTolaHVcJiMzNDssXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTE3OD1ib29sIGNlcGhfYWRkcl9pc19ibGFuayhjb25zdCBzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYWRkcilcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg0LVx0c3dpdGNoIChzcy5zc19mYW1pbHkpIHtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjExODU6XHRjYXNlIEFGX0lORVQ6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg2LVx0XHRyZXR1cm4gYWRkcjQtXHUwMDNlc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTE4NzpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg4LVx0XHRyZXR1cm4gaXB2Nl9hZGRyX2FueShhZGRyNik7XG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTE5NT1pbnQgY2VwaF9hZGRyX3BvcnQoY29uc3Qgc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIpXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTE5Ny1cdHN3aXRjaCAoZ2V0X3VuYWxpZ25lZChcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KSkge1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTE5ODpcdGNhc2UgQUZfSU5FVDpcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTExOTktXHRcdHJldHVybiBudG9ocyhnZXRfdW5hbGlnbmVkKFx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2YWRkci1cdTAwM2Vpbl9hZGRyKS1cdTAwM2VzaW5fcG9ydCkpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTIwMDpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMjAxLVx0XHRyZXR1cm4gbnRvaHMoZ2V0X3VuYWxpZ25lZChcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIpLVx1MDAzZXNpbjZfcG9ydCkpO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTEyMDY9dm9pZCBjZXBoX2FkZHJfc2V0X3BvcnQoc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIsIGludCBwKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMDgtXHRzd2l0Y2ggKGdldF91bmFsaWduZWQoXHUwMDI2YWRkci1cdTAwM2Vpbl9hZGRyLnNzX2ZhbWlseSkpIHtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMDk6XHRjYXNlIEFGX0lORVQ6XG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMjEwLVx0XHRwdXRfdW5hbGlnbmVkKGh0b25zKHApLCBcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNmFkZHItXHUwMDNlaW5fYWRkciktXHUwMDNlc2luX3BvcnQpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIxMS1cdFx0YnJlYWs7XG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMjEyOlx0Y2FzZSBBRl9JTkVUNjpcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMTMtXHRcdHB1dF91bmFsaWduZWQoaHRvbnMocCksIFx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luNiAqKVx1MDAyNmFkZHItXHUwMDNlaW5fYWRkciktXHUwMDNlc2luNl9wb3J0KTtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xMjIxPXN0YXRpYyBpbnQgY2VwaF9wdG9uKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIsXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIyNi1cdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHU4ICopXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIpLVx1MDAzZXNpbl9hZGRyLnNfYWRkciwgZGVsaW0sIGlwZW5kKSkge1xubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTIyNzpcdFx0cHV0X3VuYWxpZ25lZChBRl9JTkVULCBcdTAwMjZhZGRyLVx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KTtcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMjgtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMzEtXHRpZiAoaW42X3B0b24oc3RyLCBsZW4sICh1OCAqKVx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luNiAqKVx1MDAyNmFkZHItXHUwMDNlaW5fYWRkciktXHUwMDNlc2luNl9hZGRyLnM2X2FkZHIsIGRlbGltLCBpcGVuZCkpIHtcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMzI6XHRcdHB1dF91bmFsaWduZWQoQUZfSU5FVDYsIFx1MDAyNmFkZHItXHUwMDNlaW5fYWRkci5zc19mYW1pbHkpO1xubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIzMy1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NDY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX3NrX3N0b3JhZ2Uub1xubmV0L2NvcmUvTWFrZWZpbGU6NDc6aWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL01ha2VmaWxlLTQ4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9rc29jay5vXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Njk9YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTAyLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTAzOlx0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTA0LVx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTE2MT1fX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTc3LVx0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE3ODpcdGNhc2UgQUZfSU5FVDpcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE3OS1cdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTgwLVx0XHRicmVhaztcbm5ldC9jb3JlL2JwZl9rc29jay5jOjE4MTpcdGNhc2UgQUZfSU5FVDY6XG5uZXQvY29yZS9icGZfa3NvY2suYy0xODItXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00MjU9c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDMwLS8qIFRoZSByZXBseSB3aWxsIGJlIGxpa2U6XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQzMTogKiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTIChubGFfbmVzdClcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDMyLSAqXHRTS19ESUFHX0JQRl9TVE9SQUdFIChubGFfbmVzdClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTU2OD1zdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0X2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NzEte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo1NzI6XHQvKiBzdGdfYXJyYXlfdHlwZSAoZS5nLiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTKSAqL1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NzMtXHR1bnNpZ25lZCBpbnQgZGlhZ19zaXplID0gbmxhX3RvdGFsX3NpemUoMCk7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz02MjQ9aW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0KHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpkaWFnLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI4LXtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NjI5Olx0Lyogc3RnX2FycmF5X3R5cGUgKGUuZy4gSU5FVF9ESUFHX0JQRl9TS19TVE9SQUdFUykgKi9cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjMwLVx0dW5zaWduZWQgaW50IGRpYWdfc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTYyNTY9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX29uZV9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcGZtZW1hbGxvYylcbi0tXG5uZXQvY29yZS9kZXYuYy02MjYzLVx0aWYgKHB0X3ByZXYpXG5uZXQvY29yZS9kZXYuYzo2MjY0Olx0XHRyZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQocHRfcHJldi1cdTAwM2VmdW5jLCBpcHY2X3JjdiwgaXBfcmN2LCBza2IsXG5uZXQvY29yZS9kZXYuYy02MjY1LVx0XHRcdFx0XHQgc2tiLVx1MDAzZWRldiwgcHRfcHJldiwgb3JpZ19kZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTYyOTY9c3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcmVjZWl2ZV9za2JfbGlzdF9wdHlwZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTYzMDYtXHRpZiAocHRfcHJldi1cdTAwM2VsaXN0X2Z1bmMgIT0gTlVMTClcbm5ldC9jb3JlL2Rldi5jOjYzMDc6XHRcdElORElSRUNUX0NBTExfSU5FVChwdF9wcmV2LVx1MDAzZWxpc3RfZnVuYywgaXB2Nl9saXN0X3Jjdixcbm5ldC9jb3JlL2Rldi5jLTYzMDgtXHRcdFx0XHQgICBpcF9saXN0X3JjdiwgaGVhZCwgcHRfcHJldiwgb3JpZ19kZXYpO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTIyLSNkZWZpbmUgSU5ESVJFQ1RfQ0FMTF9NVChmLCBmMiwgZjEsIC4uLikgXFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjIzOlx0SU5ESVJFQ1RfQ0FMTF9JTkVUKGYsIGYyLCBmMSwgX19WQV9BUkdTX18pXG5uZXQvY29yZS9maWJfcnVsZXMuYy0yNC0jZWxzZVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmliX3J1bGVfcG9saWN5W0ZSQV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY3LVx0W0ZSQV9EUE9SVF9SQU5HRV0gPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpIH0sXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4Njg6XHRbRlJBX0RTQ1BdXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgSU5FVF9EU0NQX01BU0sgXHUwMDNlXHUwMDNlIDIpLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY5LVx0W0ZSQV9GTE9XTEFCRUxdID0geyAudHlwZSA9IE5MQV9CRTMyIH0sXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODcyLVx0W0ZSQV9EUE9SVF9NQVNLXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4NzM6XHRbRlJBX0RTQ1BfTUFTS10gPSBOTEFfUE9MSUNZX01BU0soTkxBX1U4LCBJTkVUX0RTQ1BfTUFTSyBcdTAwM2VcdTAwM2UgMiksXG5uZXQvY29yZS9maWJfcnVsZXMuYy04NzQtfTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMzc9c2tfZmlsdGVyX3RyaW1fY2FwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGNhcClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xNTEtXHR9XG5uZXQvY29yZS9maWx0ZXIuYzoxNTI6XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0lORVRfSU5HUkVTUyhzaywgc2tiKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTE1My1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTYxNT1pbnQgc2tfcmV1c2Vwb3J0X2F0dGFjaF9icGYodTMyIHVmZCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE2MzgtXHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApIHx8XG5uZXQvY29yZS9maWx0ZXIuYzoxNjM5Olx0XHQgICAgKHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmM6MTY0MDpcdFx0ICAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xNjQxLVx0XHRcdGVyciA9IC1FTk9UU1VQUDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMjcxPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMjk1LVx0XHRza2JfZHN0X3NldChza2IsIGRzdCk7XG5uZXQvY29yZS9maWx0ZXIuYzoyMjk2Olx0fSBlbHNlIGlmIChuaC1cdTAwM2VuaF9mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTIyOTctXHRcdGdvdG8gb3V0X2Ryb3A7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIyLXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjM0Ny1cdFx0bmVpZ2ggPSBpcF9uZWlnaF9mb3JfZ3cocnQsIHNrYiwgXHUwMDI2aXNfdjZndyk7XG5uZXQvY29yZS9maWx0ZXIuYzoyMzQ4Olx0fSBlbHNlIGlmIChuaC1cdTAwM2VuaF9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTIzNDktXHRcdGlmICh1bmxpa2VseSghaXB2Nl9tb2RfZW5hYmxlZCgpKSkge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzNTQtXHRcdGlzX3Y2Z3cgPSB0cnVlO1xubmV0L2NvcmUvZmlsdGVyLmM6MjM1NTpcdH0gZWxzZSBpZiAobmgtXHUwMDNlbmhfZmFtaWx5ID09IEFGX0lORVQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTIzNTYtXHRcdG5laWdoID0gaXBfbmVpZ2hfZ3c0KGRldiwgbmgtXHUwMDNlaXB2NF9uaCk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MjQyND1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS19XG5uZXQvY29yZS9maWx0ZXIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xubmV0L2NvcmUvZmlsdGVyLmMtMjQzMS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00ODk5PXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBicGZfdHVubmVsX2tleV9hZih1NjQgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy00OTAwLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5MDE6XHRyZXR1cm4gZmxhZ3MgXHUwMDI2IEJQRl9GX1RVTklORk9fSVBWNiA/IEFGX0lORVQ2IDogQUZfSU5FVDtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MDItfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ5MDQ9QlBGX0NBTExfNChicGZfc2tiX2dldF90dW5uZWxfa2V5LCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHN0cnVjdCBicGZfdHVubmVsX2tleSAqLCB0byxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00OTMxLVx0XHRcdCAqL1xubmV0L2NvcmUvZmlsdGVyLmM6NDkzMjpcdFx0XHRpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgIT0gQUZfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MzMtXHRcdFx0XHRnb3RvIGVycl9jbGVhcjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01NzExPXN0YXRpYyBib29sIHNrX2FsbG93c19zb2xfaXBfc29ja29wdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTcxMy1cdHN3aXRjaCAoc2stXHUwMDNlc2tfZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo1NzE0Olx0Y2FzZSBBRl9JTkVUOlxubmV0L2NvcmUvZmlsdGVyLmMtNTcxNS1cdFx0cmV0dXJuIHRydWU7XG5uZXQvY29yZS9maWx0ZXIuYzo1NzE2Olx0Y2FzZSBBRl9JTkVUNjpcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MTctXHRcdC8qIEFsbG93IGdldHRpbmcvc2V0dGluZyBzb2Nrb3B0IGZvciBwb3NzaWJsZSBpcHY0LW1hcHBlZCBpcHY2IHNvY2tldC4gKi9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01NzUwPXN0YXRpYyBpbnQgc29sX2lwdjZfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTMte1xubmV0L2NvcmUvZmlsdGVyLmM6NTc1NDpcdGlmIChzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpXG5uZXQvY29yZS9maWx0ZXIuYy01NzU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01Nzc3PXN0YXRpYyBpbnQgX19icGZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTc4NC1cdFx0cmV0dXJuIHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODU6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTc4Ni1cdFx0cmV0dXJuIHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODgtXHRcdHJldHVybiBzb2xfaXB2Nl9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTc4OTpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTc5MC1cdFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01ODA4PXN0YXRpYyBpbnQgX19icGZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTgxOS1cdFx0ZXJyID0gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIwOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXG5uZXQvY29yZS9maWx0ZXIuYy01ODIxLVx0XHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MjI6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMy1cdFx0ZXJyID0gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCB0cnVlKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MTM2PUJQRl9DQUxMXzUoYnBmX3NvY2tfb3BzX2dldHNvY2tvcHQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MTQxLVxubmV0L2NvcmUvZmlsdGVyLmM6NjE0MjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUCBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL2ZpbHRlci5jLTYxNDMtXHQgICAgb3B0bmFtZSBcdTAwM2U9IFRDUF9CUEZfU1lOIFx1MDAyNlx1MDAyNiBvcHRuYW1lIFx1MDAzYz0gVENQX0JQRl9TWU5fTUFDKSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjE3OD1CUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MTg2LVxubmV0L2NvcmUvZmlsdGVyLmM6NjE4NzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgIXNrX2Z1bGxzb2NrKHNrKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTYxODgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyMDM9QlBGX0NBTExfMyhicGZfYmluZCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsIHN0cnVjdCBzb2NrYWRkciAqLCBhZGRyLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDUte1xubmV0L2NvcmUvZmlsdGVyLmM6NjIwNjojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDctXHRzdHJ1Y3Qgc29jayAqc2sgPSBjdHgtXHUwMDNlc2s7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIxMy1cdFx0cmV0dXJuIGVycjtcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTQ6XHRpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVCkge1xubmV0L2NvcmUvZmlsdGVyLmMtNjIxNS1cdFx0aWYgKGFkZHJfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjIwLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmM6NjIyMTpcdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMjItXHRcdGlmIChhZGRyX2xlbiBcdTAwM2MgU0lONl9MRU5fUkZDMjEzMylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjMwLVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTYyMzItXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBzZXR0aW5ncyBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBuZXcgb3IgYWx0ZXJlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBhdCBteSBkaXNwb3NhbCwgZXNwZWNpYWxseSBpZiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueXRoaW5nIHNwZWNpZmljIHJlZ2FyZGluZywgc2F5LCBuZXcgZmVhdHVyZXMsIGNoYW5nZXMgaW4gZGVmYXVsdCBiZWhhdmlvciwgb3IgdHJvdWJsZXNob290aW5nIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEtjb25maWcgaXMgdGhlIGZpcnN0IHN0b3AgZm9yIHVuZGVyc3RhbmRpbmcgdGhlc2UgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnLTUtXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTctXHRib29sIFwmIzM0O1RoZSBJUHY2IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxubmV0L2lwdjYvS2NvbmZpZy0yMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zOC1cbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcbm5ldC9pcHY2L0tjb25maWctNDAtXHRib29sIFwmIzM0O0lQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcbm5ldC9pcHY2L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogTW9iaWxpdHlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTYxLVxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7SVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxubmV0L2lwdjYvS2NvbmZpZy0xOTctXHRib29sXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMjctXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1Vcbm5ldC9pcHY2L0tjb25maWctMjI5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjMzLVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNDItXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xubmV0L2lwdjYvS2NvbmZpZy0yNDQtXHRib29sIFwmIzM0O0lQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxubmV0L2lwdjYvS2NvbmZpZy0yODAtXHRib29sIFwmIzM0O0lQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjg1LVxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yODctXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yOTktXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L0tjb25maWctMzAxLVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXHRkZWZfYm9vbCB5XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzE4LVx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDIyCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTb2NrZXQgQ3JlYXRpb24gTG9naWMgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gVGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIHNob3dzIHRoYXQgYENPTkZJR19JTkVUYCBpcyBlc3NlbnRpYWwgZm9yIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgQ09ORklHX0lQVjZgIGZvciBgbmV0L2lwdjYvYWZfaW5ldDYuY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYW5kIGV4cGVjdGVkLCBzZXR0aW5nIHRoZSBzdGFnZSBmb3Igd2hlcmUgdGhlc2UgY2hhbmdlcyBhcmUgbG9jYXRlZC4KCk15IGZvY3VzIGlzIG9uIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIOKAkyB0aGUgc29ja2V0IGNyZWF0aW9uIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBrZXkgdGFyZ2V0cyBvZiB0aGlzIHVwZGF0ZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeS4gVGhlIHN5c3RlbSBpbmRpY2F0ZXMgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kIHRoYXQgYm90aCBgSU5FVGAgYW5kIGBJUFY2YCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIHNhbWUgZm9jdXMgc3ltYm9scyByZW1haW4gY29uc2lzdGVudDogYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFRoaXMgcmVpbmZvcmNlcyB0aGF0IHRoZXNlIGFyZSBpbmRlZWQgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZC4KClRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhYm91dCBpbXByb3ZpbmcgdGhlIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzIGluIGJvdGggSVB2NCBhbmQgSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgY3J1Y2lhbCBzdGVwIG9mIG1hbmFnaW5nIG1vZHVsZSByZWZlcmVuY2VzIHVzaW5nIGB0cnlfbW9kdWxlX2dldGAgYW5kIHJlbGVhc2luZyB0aGVtIHdoZW4gbmVlZGVkLiBUaGVzZSBhcmUgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSBzdGFuZGFyZCBgc29ja2V0KClgIHN5c3RlbSBjYWxscywgbWFraW5nIHRoZW0gY3JpdGljYWwgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGRldGFpbHMuIEhvbGQgb24sIGBpbmV0X2NyZWF0ZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBidXQgaXQmIzM5O3MgKnN0aWxsKiBhZGRyZXNzYWJsZSB3aXRoaW4gdGhlIHZtbGludXggaW1hZ2UgaW4gYG5ldC9pcHY0L2FmX2luZXQuY2AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBpbmV0Nl9jcmVhdGVgIGluIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gVGhpcyBpc24mIzM5O3QgdW51c3VhbCwgYnV0IGNvbmZpcm1zIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgbWFuaXB1bGF0aW9uLgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aW5ldDZfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2luZXQ2X2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgc29ja2V0IGluaXRpYWxpemF0aW9uIGFuZCBwcm90b2NvbCBtb2R1bGUgcmVmZXJlbmNlIHRyYWNraW5nIGluIGluZXRfY3JlYXRlIGFuZCBpbmV0Nl9jcmVhdGUgZm9yIElQdjQgYW5kIElQdjYgc29ja2V0cy4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc29ja2V0IGNyZWF0aW9uIHN5c2NhbGxzIChlLmcuIHNvY2tldChBRl9JTkVULCAuLi4pIC8gc29ja2V0KEFGX0lORVQ2LCAuLi4pKSwgbWFraW5nIHRoZW0gcmVsZXZhbnQgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBtb2R1bGUgcmVmZXJlbmNlIGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3kvVUFGIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJiNjQyZjA1ZjU1ZGY5YTcxNzFmZGExM2JkZjcyYzIyODgzNDk1M2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDIyOjQ2OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlzdHJ1Y3QgaW5ldF9wcm90b3N3ICphbnN3ZXI7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90OwomIzQzOwlzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7CiAJdW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7CiAJaW50IHRyeV9sb2FkaW5nX21vZHVsZSA9IDA7CiAJaW50IGVycjsKQEAgLTMyMiw5ICYjNDM7MzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJICAgICFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9SQVcpKQogCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCi0Jc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJYW5zd2VyX3Byb3QgPSBhbnN3ZXItJmd0O3Byb3Q7CiYjNDM7CWFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LSZndDtvd25lcjsKIAlhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItJmd0O2ZsYWdzOwomIzQzOwlpZiAoYW5zd2VyX293bmVyICZhbXA7JmFtcDsKJiM0MzsJICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHwKJiM0MzsJICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIG91dF9yY3VfdW5sb2NrOwomIzQzOwl9CiYjNDM7CXNvY2stJmd0O29wcyA9IGFuc3dlci0mZ3Q7b3BzOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJV0FSTl9PTighYW5zd2VyX3Byb3QtJmd0O3NsYWIpOwpAQCAtMzMyLDcgJiM0MzszNDAsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCWVyciA9IC1FTk9NRU07CiAJc2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gb3V0X21vZHVsZV9wdXQ7CiAKIAllcnIgPSAwOwogCWlmIChJTkVUX1BST1RPU1dfUkVVU0UgJmFtcDsgYW5zd2VyX2ZsYWdzKQpAQCAtMzk4LDYgJiM0Mzs0MDYsOCBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfc2tfcmVsZWFzZTsKIAl9CiYjNDM7b3V0X21vZHVsZV9wdXQ6CiYjNDM7CW1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogb3V0X3JjdV91bmxvY2s6CkBAIC00MDYsNyAmIzQzOzQxNiw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiBvdXRfc2tfcmVsZWFzZToKIAlza19jb21tb25fcmVsZWFzZShzayk7CiAJc29jay0mZ3Q7c2sgPSBOVUxMOwotCWdvdG8gb3V0OwomIzQzOwlnb3RvIG91dF9tb2R1bGVfcHV0OwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDI4MjkxMmExMTk5OTkuLjFkZjhiMmU3ZTI0MzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtMTEwLDYgJiM0MzsxMTAsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyOwogCXN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjsKIAl1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFnczsKIAlpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDsKIAlpbnQgZXJyOwpAQCAtMTY3LDkgJiM0MzsxNjgsMTYgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJICAgICFuc19jYXBhYmxlKG5ldC0mZ3Q7dXNlcl9ucywgQ0FQX05FVF9SQVcpKQogCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCi0Jc29jay0mZ3Q7b3BzID0gYW5zd2VyLSZndDtvcHM7CiAJYW5zd2VyX3Byb3QgPSBhbnN3ZXItJmd0O3Byb3Q7CiYjNDM7CWFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LSZndDtvd25lcjsKIAlhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItJmd0O2ZsYWdzOwomIzQzOwlpZiAoYW5zd2VyX293bmVyICZhbXA7JmFtcDsKJiM0MzsJICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHwKJiM0MzsJICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHsKJiM0MzsJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiYjNDM7CQlnb3RvIG91dF9yY3VfdW5sb2NrOwomIzQzOwl9CiYjNDM7CXNvY2stJmd0O29wcyA9IGFuc3dlci0mZ3Q7b3BzOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJV0FSTl9PTighYW5zd2VyX3Byb3QtJmd0O3NsYWIpOwpAQCAtMTc3LDcgJiM0MzsxODUsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAllcnIgPSAtRU5PQlVGUzsKIAlzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVDYsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKJiM0MzsJCWdvdG8gb3V0X21vZHVsZV9wdXQ7CiAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKQEAgLTIwMSw3ICYjNDM7MjA5LDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJc2stJmd0O3NrX2ZhbWlseQkJPSBQRl9JTkVUNjsKIAlzay0mZ3Q7c2tfcHJvdG9jb2wJCT0gcHJvdG9jb2w7CiAKLQlzay0mZ3Q7c2tfYmFja2xvZ19yY3YJPSBhbnN3ZXItJmd0O3Byb3QtJmd0O2JhY2tsb2dfcmN2OwomIzQzOwlzay0mZ3Q7c2tfYmFja2xvZ19yY3YJPSBhbnN3ZXJfcHJvdC0mZ3Q7YmFja2xvZ19yY3Y7CiAKIAlpbmV0X3NrKHNrKS0mZ3Q7cGluZXQ2ID0gbnAgPSBpbmV0Nl9za19nZW5lcmljKHNrKTsKIAlucC0mZ3Q7aG9wX2xpbWl0CT0gLTE7CkBAIC0yNTEsNiAmIzQzOzI1OSw4IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfc2tfcmVsZWFzZTsKIAl9CiYjNDM7b3V0X21vZHVsZV9wdXQ6CiYjNDM7CW1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogb3V0X3JjdV91bmxvY2s6CkBAIC0yNTksNyAmIzQzOzI2OSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogb3V0X3NrX3JlbGVhc2U6CiAJc2tfY29tbW9uX3JlbGVhc2Uoc2spOwogCXNvY2stJmd0O3NrID0gTlVMTDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfbW9kdWxlX3B1dDsKIH0KIAogaW50IF9faW5ldDZfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogTW9kdWxlIFJlZmVyZW5jZSBDb3VudGluZyBpbiBpbmV0X2NyZWF0ZS9pbmV0Nl9jcmVhdGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGNoYW5nZXMgdG8gYG5ldC9pcHY0L2FmX2luZXQuY2AgYW5kIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGluY2x1ZGVzIGB0cnlfbW9kdWxlX2dldGAgYW5kIGBtb2R1bGVfcHV0YCBjYWxscywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpSaWdodCwgc28gd2UmIzM5O3JlIGdyYWJiaW5nIGBhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC0mZ3Q7b3duZXI7YCB3aGljaCBpcyBsaWtlbHkgdGhlIG1vZHVsZSB0aGF0IHByb3ZpZGVzIHRoZSB1bmRlcmx5aW5nIHByb3RvY29sLiBUaGVuLCB0aGUgY3J1Y2lhbCBjaGVjazogYGlmIChhbnN3ZXJfb3duZXIgJmFtcDsmYW1wOyAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8ICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSlgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBhdHRlbXB0aW5nIHRvIG1hbmFnZSB0aGUgbW9kdWxlJiMzOTtzIGxpZmV0aW1lIGJhc2VkIG9uIHdoZXRoZXIgaXQmIzM5O3MgYWxyZWFkeSAmIzM0O2NvbWluZyYjMzQ7IChsaWtlbHkgYmVpbmcgbG9hZGVkKSBhbmQgd2hldGhlciB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGFjcXVpcmUgYSByZWZlcmVuY2UuIElmIHRoYXQgY2hlY2sgZmFpbHMsIHRoZSBzb2NrZXQgY3JlYXRpb24gc2hvdWxkIGZhaWwsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgbW9kdWxlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCgpUaGUgc3VjY2Vzc2Z1bCBwYXRoIGlzIHdoYXQmIzM5O3MgbW9yZSBpbnRlcmVzdGluZy4gV2UmIzM5O3JlIGRvaW5nIHRoZSBzb2NrZXQgY3JlYXRpb24gYW5kIHRoZW4sIGF0IHRoZSBlbmQg4oCTIG9yIGluIGVycm9yIHBhdGhzICphZnRlciogdGhlIGByY3VfcmVhZF91bmxvY2tgIOKAkyB0aGVyZSYjMzk7cyBhIGBtb2R1bGVfcHV0KGFuc3dlcl9vd25lcilgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgKndoeSogYXQgdGhlIGVuZD8gU2hvdWxkbiYjMzk7dCB0aGUgbW9kdWxlIHJlZmVyZW5jZSBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2Ygc29ja2V0IHVzZT8gUGVyaGFwcyB0aGUgc29ja2V0IG9wZXJhdGlvbnMgb3IgdGhlIHByb3RvY29sIGl0c2VsZiBob2xkIHJlZmVyZW5jZXMsIG9yIG1heWJlIGV2ZW4gYHNrX2FsbG9jYCBpcyBrZWVwaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBvd25lci4gSXQgbG9va3MgbGlrZSBpdCBpcyBgc2tfYWxsb2NgLiBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGluZXRfY3JlYXRlYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGBza19hbGxvY2AgdG8gY29uZmlybSB0aGlzLiBUaGF0IHNob3VsZCBjbGVhciB0aGlzIHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19hbGxvY1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmM9MjIzNz1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX3Byb3RfYWxsb2Moc3RydWN0IHByb3RvICpwcm90LCBnZnBfdCBwcmlvcml0eSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjI1My1cdGlmIChzayAhPSBOVUxMKSB7XG5uZXQvY29yZS9zb2NrLmM6MjI1NDpcdFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcbm5ldC9jb3JlL3NvY2suYy0yMjU1LVx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L2NvcmUvc29jay5jPTIyNzM9c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yMzAxLSAqL1xubmV0L2NvcmUvc29jay5jOjIzMDI6c3RydWN0IHNvY2sgKnNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG5uZXQvY29yZS9zb2NrLmMtMjMwMy1cdFx0ICAgICAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2Vybilcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjMzNC1cbm5ldC9jb3JlL3NvY2suYzoyMzM1Olx0XHRtZW1fY2dyb3VwX3NrX2FsbG9jKHNrKTtcbm5ldC9jb3JlL3NvY2suYzoyMzM2Olx0XHRjZ3JvdXBfc2tfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbm5ldC9jb3JlL3NvY2suYy0yMzM3LVx0XHRzb2NrX3VwZGF0ZV9jbGFzc2lkKFx1MDAyNnNrLVx1MDAzZXNrX2NncnBfZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBxdWljayBzY2FuIG9mIGBuZXQvY29yZS9zb2NrLmNgLgoKKipEaXZpbmcgaW50byBTb2NrZXQgQWxsb2NhdGlvbiBpbiB0aGUgS2VybmVsKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBzb2NrZXRzIGFyZSBhY3R1YWxseSBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZm9jdXNpbmcgb24gYHNrX2FsbG9jYCBhbmQgYHNrX3Byb3RfYWxsb2NgIOKAkyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gRnJvbSBhIGhpZ2ggbGV2ZWwsIEkmIzM5O20gZXhwZWN0aW5nIGBza19hbGxvY2AgdG8gaGFuZGxlIHRoZSBsb3ctbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlIGl0c2VsZiwgdGhlIGJhc2ljIGNvbnRhaW5lci4gSXQmIzM5O2xsIHByb2JhYmx5IGJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29tbW9uIGZpZWxkcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IHBvb2xzLCBzbGFiIGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkgZHVyaW5nIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4gSSBhbHNvIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIHRvIGRlYWwgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgdGhhdC4KClRoZW4sIHRoZXJlIGlzIGBza19wcm90X2FsbG9jYCwgdGhpcyBvbmUgaXMgbW9yZSBpbnRlcmVzdGluZyBhcyBpdCBzaG91bGQgYmUgdGhlIGFsbG9jYXRvciBmb3IgdGhlIHByb3RvY29sLXNwZWNpZmljIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgc29ja2V0LiBJdCYjMzk7bGwgbmVlZCB0byBhbGxvY2F0ZSB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBzaW5jZSB0aGF0IGxpa2VseSBoYXMgaXRzIG93biBzZXQgb2YgZmllbGRzLCBmbGFncywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gaXRzIG93biBpbnRlcm5hbCBhbGxvY2F0aW9uIGxvZ2ljLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdHVyZSB0byBiZSBwYXNzZWQgaW50byBpdCBieSB0aGUgdXBwZXIgbGF5ZXJzLiBUaGF0IHdvdWxkIGFsbG93IHRoaW5ncyBsaWtlIFVEUCBvciBUQ1AgdG8gYWxsb2NhdGUgdGhlaXIgc3BlY2lmaWMgc3RydWN0dXJlcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJhc2ljIHNvY2tldCBzdHJ1Y3R1cmUuIEkgYWxzbyBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgYW55IHByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgdGhlcmUmIzM5O2xsIGxpa2VseSBiZSBjYWxsYmFja3Mgb3IgZnVuY3Rpb24gcG9pbnRlcnMgc2V0IHVwIGhlcmUgdG8gcG9pbnQgdG8gcHJvdG9jb2wtc3BlY2lmaWMgb3BlcmF0aW9ucyDigJMgc2VuZCwgcmVjZWl2ZSwgZXRjLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgaXMgYWxsIGxpbmtlZCB0b2dldGhlci4gQW5kIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBiYXNpYyBzb2NrZXQgYW5kIHRoaXMgcHJvdG9jb2wtc3BlY2lmaWMgcGFydCBpcyBlc3RhYmxpc2hlZC4KClVsdGltYXRlbHksIEkgd2FudCB0byBjb25maXJtIGhvdyB0aGUgY29yZSBzb2NrZXQgc3RydWN0dXJlIGFuZCB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBhcmUgbGlua2VkIHRvZ2V0aGVyLCBhbmQgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciB0aGVpciBjbGVhbnVwIHdoZW4gYSBzb2NrZXQgaXMgY2xvc2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkmIzM5O20gY2xlYXIgb24gaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCB0byBhdm9pZCBhbnkgbGVha3MsIGVzcGVjaWFsbHkgaW4gYSBoaWdoLWNvbmN1cnJlbmN5IGVudmlyb25tZW50LiBUaGlzIHdpbGwgYWxsIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHNvY2tldCBjcmVhdGlvbiBpbXBhY3RzIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMzU6XHR9XG4yMjM2Olx0XG4yMjM3Olx0c3RhdGljIHN0cnVjdCBzb2NrICpza19wcm90X2FsbG9jKHN0cnVjdCBwcm90byAqcHJvdCwgZ2ZwX3QgcHJpb3JpdHksXG4yMjM4Olx0XHRcdGludCBmYW1pbHkpXG4yMjM5Olx0e1xuMjI0MDpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMjI0MTpcdFx0c3RydWN0IGttZW1fY2FjaGUgKnNsYWI7XG4yMjQyOlx0XG4yMjQzOlx0XHRzbGFiID0gcHJvdC1cdTAwM2VzbGFiO1xuMjI0NDpcdFx0aWYgKHNsYWIgIT0gTlVMTCkge1xuMjI0NTpcdFx0XHRzayA9IGttZW1fY2FjaGVfYWxsb2Moc2xhYiwgcHJpb3JpdHkgXHUwMDI2IH5fX0dGUF9aRVJPKTtcbjIyNDY6XHRcdFx0aWYgKCFzaylcbjIyNDc6XHRcdFx0XHRyZXR1cm4gc2s7XG4yMjQ4Olx0XHRcdGlmICh3YW50X2luaXRfb25fYWxsb2MocHJpb3JpdHkpKVxuMjI0OTpcdFx0XHRcdHNrX3Byb3RfY2xlYXJfbnVsbHMoc2ssIHByb3QtXHUwMDNlb2JqX3NpemUpO1xuMjI1MDpcdFx0fSBlbHNlXG4yMjUxOlx0XHRcdHNrID0ga21hbGxvYyhwcm90LVx1MDAzZW9ial9zaXplLCBwcmlvcml0eSk7XG4yMjUyOlx0XG4yMjUzOlx0XHRpZiAoc2sgIT0gTlVMTCkge1xuMjI1NDpcdFx0XHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxuMjI1NTpcdFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4yMjU2Olx0XG4yMjU3Olx0XHRcdGlmICghdHJ5X21vZHVsZV9nZXQocHJvdC1cdTAwM2Vvd25lcikpXG4yMjU4Olx0XHRcdFx0Z290byBvdXRfZnJlZV9zZWM7XG4yMjU5Olx0XHR9XG4yMjYwOlx0XG4yMjYxOlx0XHRyZXR1cm4gc2s7XG4yMjYyOlx0XG4yMjYzOlx0b3V0X2ZyZWVfc2VjOlxuMjI2NDpcdFx0c2VjdXJpdHlfc2tfZnJlZShzayk7XG4yMjY1Olx0b3V0X2ZyZWU6XG4yMjY2Olx0XHRpZiAoc2xhYiAhPSBOVUxMKVxuMjI2NzpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xuMjI2ODpcdFx0ZWxzZVxuMjI2OTpcdFx0XHRrZnJlZShzayk7XG4yMjcwOlx0XHRyZXR1cm4gTlVMTDtcbjIyNzE6XHR9XG4yMjcyOlx0XG4yMjczOlx0c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxuMjI3NDpcdHtcbjIyNzU6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xuMjI3NjpcdFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XG4yMjc3Olx0XG4yMjc4Olx0XHRvd25lciA9IHByb3QtXHUwMDNlb3duZXI7XG4yMjc5Olx0XHRzbGFiID0gcHJvdC1cdTAwM2VzbGFiO1xuMjI4MDpcdFxuMjI4MTpcdFx0Y2dyb3VwX3NrX2ZyZWUoXHUwMDI2c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbjIyODI6XHRcdG1lbV9jZ3JvdXBfc2tfZnJlZShzayk7XG4yMjgzOlx0XHRzZWN1cml0eV9za19mcmVlKHNrKTtcbjIyODQ6XHRcbjIyODU6XHRcdHNrX293bmVyX3B1dChzayk7XG4yMjg2Olx0XG4yMjg3Olx0XHRpZiAoc2xhYiAhPSBOVUxMKVxuMjI4ODpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xuMjI4OTpcdFx0ZWxzZVxuMjI5MDpcdFx0XHRrZnJlZShzayk7XG4yMjkxOlx0XHRtb2R1bGVfcHV0KG93bmVyKTtcbjIyOTI6XHR9XG4yMjkzOlx0XG4yMjk0Olx0LyoqXG4yMjk1Olx0ICpcdHNrX2FsbG9jIC0gQWxsIHNvY2tldCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaGVyZVxuMjI5NjpcdCAqXHRAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlXG4yMjk3Olx0ICpcdEBmYW1pbHk6IHByb3RvY29sIGZhbWlseVxuMjI5ODpcdCAqXHRAcHJpb3JpdHk6IGZvciBhbGxvY2F0aW9uICglR0ZQX0tFUk5FTCwgJUdGUF9BVE9NSUMsIGV0YylcbjIyOTk6XHQgKlx0QHByb3Q6IHN0cnVjdCBwcm90byBhc3NvY2lhdGVkIHdpdGggdGhpcyBuZXcgc29jayBpbnN0YW5jZVxuMjMwMDpcdCAqXHRAa2VybjogaXMgdGhpcyB0byBiZSBhIGtlcm5lbCBzb2NrZXQ/XG4yMzAxOlx0ICovXG4yMzAyOlx0c3RydWN0IHNvY2sgKnNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXG4yMzAzOlx0XHRcdCAgICAgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXG4yMzA0Olx0e1xuMjMwNTpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMjMwNjpcdFxuMjMwNzpcdFx0c2sgPSBza19wcm90X2FsbG9jKHByb3QsIHByaW9yaXR5IHwgX19HRlBfWkVSTywgZmFtaWx5KTtcbjIzMDg6XHRcdGlmIChzaykge1xuMjMwOTpcdFx0XHRzay1cdTAwM2Vza19mYW1pbHkgPSBmYW1pbHk7XG4yMzEwOlx0XHRcdC8qXG4yMzExOlx0XHRcdCAqIFNlZSBjb21tZW50IGluIHN0cnVjdCBzb2NrIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZFxuMjMxMjpcdFx0XHQgKiB3aHkgd2UgbmVlZCBza19wcm90X2NyZWF0b3IgLWFjbWVcbjIzMTM6XHRcdFx0ICovXG4yMzE0Olx0XHRcdHNrLVx1MDAzZXNrX3Byb3QgPSBzay1cdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIE1vZHVsZSBSZWZlcmVuY2UgQ291bnRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGluZXRfY3JlYXRlYCwgdGhlIGNvcmUgaXNzdWUgSSYjMzk7bSBzZWVpbmcgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGBhbnN3ZXJfcHJvdGAgZHVyaW5nIG1vZHVsZSB1bmxvYWRpbmcgb3IgbG9hZGluZy4gU3BlY2lmaWNhbGx5LCBiZXR3ZWVuIHRoZSBpbml0aWFsIGByY3VfcmVhZF9sb2NrKClgIGFuZCB0aGUgYHNrX2FsbG9jKClgIGNhbGwsIGBhbnN3ZXJfcHJvdGAgY291bGQgYmVjb21lIGluYWNjZXNzaWJsZS4gVGhlIGN1cnJlbnQgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgd2l0aCBhIHR3by1wcm9uZ2VkIGFwcHJvYWNoLgoKRmlyc3QsIGl0IGFkZHMgYSBgdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKWAgdW5kZXIgdGhlIFJDVSBsb2NrLCBpbW1lZGlhdGVseSAqYmVmb3JlKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBlbnN1cmVzIHRoZSBtb2R1bGUgaXNuJiMzOTt0IHVubG9hZGVkIHdoaWxlIHdlIG5lZWQgaXQuIFRoZW4sIGFmdGVyIHJlbGVhc2luZyB0aGUgUkNVIGxvY2ssIGl0IGNhbGxzIGBza19hbGxvYygpYCwgd2hpY2ggaXRzZWxmIGhhbmRsZXMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB0aHJvdWdoIGl0cyBvd24gYHRyeV9tb2R1bGVfZ2V0YCBhbmQgYG1vZHVsZV9wdXRgIG9uIGZyZWUsIGFuZCB0aGVuIGZpbmFsbHkgY2xlYW5zIHVwIHRoZSB0ZW1wb3JhcnkgcmVmZXJlbmNlIGF0IHRoZSBlbmQgaW4gYGluZXRfY3JlYXRlYCB3aXRoIGEgYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAuCgpUaGUgcGF0Y2ggYWxzbyBjb3JyZWN0cyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGluIGBpbmV0Nl9jcmVhdGVgIGJ5IGZpeGluZyBhIHN1YnRsZSBidWcgd2hlcmUgdGhlIHdyb25nIHBvaW50ZXIgd2FzIGJlaW5nIHVzZWQgdG8gYWNjZXNzIGBiYWNrbG9nX3JjdmAuIFRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGVuc3VyaW5nIHRoYXQgdGhlIGNvcnJlY3QgYGFuc3dlci0mZ3Q7cHJvdGAgaXMgYWNjZXNzZWQuCgpOb3csIGxldCYjMzk7cyBtZXRob2RpY2FsbHkgbG9vayBmb3IgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCjEuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5L0J1ZmZlcnM6KiogSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgbWFuaXB1bGF0aW9uIG9mIHN0YWNrIG9yIGhlYXAgYnVmZmVycy4KMi4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBUaGVyZSYjMzk7cyBubyBrZXJuZWwgc3RydWN0dXJlIGRhdGEgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4KMy4gICoqQ29uZGl0aW9uYWwgTG9naWMgJmFtcDsgVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogVGhlIGNydWNpYWwgdmFyaWFibGUgYGFuc3dlcl9vd25lcmAgKmlzKiBpbml0aWFsaXplZCBmcm9tIGBhbnN3ZXJfcHJvdC0mZ3Q7b3duZXJgLCBlbGltaW5hdGluZyBhIHBvdGVudGlhbCBpc3N1ZS4gQ3J1Y2lhbGx5LCBpbiAqYWxsKiBleGl0IHBhdGhzIGZyb20gYGluZXRfY3JlYXRlYCAqYWZ0ZXIqIHRoZSBgcmN1X3JlYWRfdW5sb2NrKClgIGNhbGwsIHRoZSBjb2RlIGNhbGxzIGBtb2R1bGVfcHV0KGFuc3dlcl9vd25lcilgLiBJbXBvcnRhbnRseSwgYG1vZHVsZV9wdXQoTlVMTClgIGlzIGEgc2FmZSBuby1vcC4gQW5kLCBvbiBlcnJvciAqYmVmb3JlKiB0aGUgYHJjdV9yZWFkX3VubG9jaygpYCwgd2UgdW5sb2NrIFJDVSBhbmQgZXhpdC4KNC4gICoqRGF0YSBDb3BpZXMgdG8gVXNlcjoqKiBObyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyLXNwYWNlIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyBhbnkgdnVsbmVyYWJpbGl0eS4KNS4gICoqQm91bmRzL0xlbmd0aCBJc3N1ZXM6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGxvb2sgc3VzcGVjdC4KNi4gICoqT3ZlcmFsbCBQcm9ibGVtOioqIFRoZSByb290IGNhdXNlIGJlaW5nIGZpeGVkIGlzIGEgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSB0aGF0IGNhbiBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIG1vZHVsZSBsaWZldGltZSBpc3N1ZXMsIGFzIHdlbGwgYXMgYW4gUkNVIGFjY2VzcyByYWNlIG9uIGBhbnN3ZXJgIGFmdGVyIHRoZSB1bmxvY2suCgpGaW5hbGx5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtBU0FOIGFuZCBnZW5lcmFsIHRlc3Rpbmcgd2lsbCBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZSB1bmxvYWRpbmcgaXNzdWVzLiBLTVNBTiBzaG91bGQgZGV0ZWN0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBNeSB0aG9yb3VnaCBhbmFseXNpcyBmaW5kcyB0aGF0IG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQsIGV4cG9zZWQsIG9yIGFsdGVyZWQgYnkgdGhpcyBwYXRjaC4gQW5kIHNpbmNlIGBtb2R1bGVfcHV0KE5VTEwpYCBpcyBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGUga2VybmVsIEkgc2VlIG5vIHJpc2sgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBtb2R1bGVfcHV0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9tYWluLmM9OTQ5PUVYUE9SVF9TWU1CT0wodHJ5X21vZHVsZV9nZXQpO1xua2VybmVsL21vZHVsZS9tYWluLmMtOTUwLVxua2VybmVsL21vZHVsZS9tYWluLmM6OTUxOnZvaWQgbW9kdWxlX3B1dChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXG5rZXJuZWwvbW9kdWxlL21haW4uYy05NTIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mzg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbW9kdWxlX3B1dGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGBtb2R1bGVfcHV0YCBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd29yayBpbiB0aGUga2VybmVsLCBhbmQgSSBrbm93IEkmIzM5O2xsIHByb2JhYmx5IGVuY291bnRlciBhIHRyaWNreSBzY2VuYXJpbyBzb29uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRlY3JlbWVudGluZyBvZiB0aGUgbW9kdWxlJiMzOTtzIHVzYWdlIGNvdW50IGFuZCB3aGF0IGFzc29jaWF0ZWQgYWN0aW9ucyBhcmUgdGFrZW4sIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGludm9sdmVkLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNjZW5hcmlvcyBpbnZvbHZpbmcgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyB3aXRoaW4gdGhlIG1vZHVsZSB1bmxvYWRpbmcgcHJvY2VzcyB0byBtYWtlIHN1cmUgdGhlIGNvZGUgSSYjMzk7bSBhYm91dCB0byB3b3JrIHdpdGggaXMgc29saWQuIEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGxpa2UgdGhlIFZGUyBhbmQgZGV2aWNlIGRyaXZlcnMsIGFuZCBob3cgYG1vZHVsZV9wdXRgIGVuc3VyZXMgdGhhdCBtb2R1bGVzIGFyZSB1bmxvYWRlZCBzYWZlbHkgYW5kIGluIHRoZSByaWdodCBvcmRlci4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSBtZWNoYW5pY3MgaXMgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUwOlx0XG4gOTUxOlx0dm9pZCBtb2R1bGVfcHV0KHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbiA5NTI6XHR7XG4gOTUzOlx0XHRpbnQgcmV0O1xuIDk1NDpcdFxuIDk1NTpcdFx0aWYgKG1vZHVsZSkge1xuIDk1NjpcdFx0XHRyZXQgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKFx1MDAyNm1vZHVsZS1cdTAwM2VyZWZjbnQpO1xuIDk1NzpcdFx0XHRXQVJOX09OKHJldCBcdTAwM2MgMCk7XHQvKiBGYWlsZWQgdG8gcHV0IHJlZmNvdW50ICovXG4gOTU4Olx0XHRcdHRyYWNlX21vZHVsZV9wdXQobW9kdWxlLCBfUkVUX0lQXyk7XG4gOTU5Olx0XHR9XG4gOTYwOlx0fVxuIDk2MTpcdEVYUE9SVF9TWU1CT0wobW9kdWxlX3B1dCk7XG4gOTYyOlx0XG4gOTYzOlx0I2Vsc2UgLyogIUNPTkZJR19NT0RVTEVfVU5MT0FEICovXG4gOTY0Olx0c3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91bmxvYWRfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gOTY1Olx0e1xuIDk2NjpcdH1cbiA5Njc6XHRcbiA5Njg6XHRzdGF0aWMgaW50IHJlZl9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYilcbiA5Njk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTQKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKioKCk9rYXksIHNvIHRoZSBgbW9kdWxlX3B1dChOVUxMKWAgdGhpbmcgaXMgYSBjb21wbGV0ZSBub24taXNzdWU7IGl0JiMzOTtzIGRlc2lnbmVkIHRoYXQgd2F5LiBUaGF0JiMzOTtzIGdvb2QsIG9uZSBsZXNzIHRoaW5nIHRvIHdvcnJ5IGFib3V0LiBEaWdnaW5nIGludG8gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgZXZlcnl0aGluZyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcHJpbWFyeSBnb2FsIGlzIGNsZWFybHkgdG8gYWRkcmVzcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSBkdXJpbmcgbW9kdWxlIHVubG9hZGluZyBvciBzb2NrZXQgY3JlYXRpb24sIGFuZCBpdCBkb2VzIHRoaXMgYnkgaW1wbGVtZW50aW5nIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgdXNpbmcgYHRyeV9tb2R1bGVfZ2V0YCBhbmQgYG1vZHVsZV9wdXRgIGNhbGxzIGluIGBpbmV0X2NyZWF0ZSgpYCBhbmQgYGluZXQ2X2NyZWF0ZSgpYC4KClRoZSBwYXRjaCBhbHNvIGhhcyBhbiBpbXBvcnRhbnQgZml4IGZvciBgaW5ldDZfY3JlYXRlKClgIGJ5IG5vdCBkZXJlZmVyZW5jaW5nIGBhbnN3ZXJgIG91dHNpZGUgUkNVIGNyaXRpY2FsIHNlY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFuZCBjcnVjaWFsIGltcHJvdmVtZW50IHRoYXQgbWl0aWdhdGVzIHRoZSByaXNrIG9mIHJlYWRpbmcgcG90ZW50aWFsbHkgc3RhbGUgZGF0YS4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucyBoZXJlLiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd3JpdGVzLCBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlIG1vc3QgbGlrZWx5IGJ1Z3Mgd2UgY291bGQgZW5jb3VudGVyIG5vdyBhcmUgdGhlIHR5cGljYWwgbGlmZXRpbWUgb3IgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyAtLSB0aGUgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSwgb3Igd29yc2UsIG1lbW9yeSBsZWFrcywgYnV0IHRob3NlIGFyZSBpc3N1ZXMgdGhhdCBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucyBzaG91bGQgZmxhZyBmYWlybHkgZWFzaWx5LiBUaGVyZWZvcmUsIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBoZXJlLgoKSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgYW5hbHlzaXMsIHNvIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGluZXRfY3JlYXRlKCkgYW5kIGluZXQ2X2NyZWF0ZSgpIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGFjY2Vzc2luZyBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHRyeV9tb2R1bGVfZ2V0KCkgYW5kIG1vZHVsZV9wdXQoKSBjYWxscyBvbiB0aGUgcHJvdG9jb2wgb3duZXIgYW5kIGVuc3VyZSBhbnN3ZXJfcHJvdCBpcyB1c2VkIHJhdGhlciB0aGFuIGRlcmVmZXJlbmNpbmcgYW5zd2VyIG91dHNpZGUgcmN1X3JlYWRfbG9jaygpLiBcblxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggbW9kdWxlIHJlZmVyZW5jZSBsaWZldGltZXMgYW5kIGNvbmN1cnJlbmN5L1VBRiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCBpbiBpbmV0X2NyZWF0ZSgpIGFuZCBpbmV0Nl9jcmVhdGUoKSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCBtb2R1bGUgdW5sb2FkaW5nIGFuZCBhY2Nlc3NpbmcgUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmVzIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZSBjaGFuZ2VzIGludHJvZHVjZSB0cnlfbW9kdWxlX2dldCgpIGFuZCBtb2R1bGVfcHV0KCkgY2FsbHMgb24gdGhlIHByb3RvY29sIG93bmVyIGFuZCBlbnN1cmUgYW5zd2VyX3Byb3QgaXMgdXNlZCByYXRoZXIgdGhhbiBkZXJlZmVyZW5jaW5nIGFuc3dlciBvdXRzaWRlIHJjdV9yZWFkX2xvY2soKS4gXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0Njo0MS40NDk0NjU5NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczOTcwNTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9jcmVhdGVcIixcbiAgICBcImluZXQ2X2NyZWF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQxLjQ0OTQ3MTc2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMjg2MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmI2NDJmMDVmNTVkZjlhNzE3MWZkYTEzYmRmNzJjMjI4ODM0OTUzZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDIyOjQ2OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuY1xcbmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jXFxuKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jXFxuQEAgLTI2Myw2ICsyNjMsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBcXHRzdHJ1Y3QgaW5ldF9wcm90b3N3ICphbnN3ZXI7XFxuIFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XFxuIFxcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XFxuK1xcdHN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjtcXG4gXFx0dW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7XFxuIFxcdGludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0zMjIsOSArMzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdCAgICAhbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcXG4gXFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4gXFxuLVxcdHNvY2stXFx1MDAzZW9wcyA9IGFuc3dlci1cXHUwMDNlb3BzO1xcbiBcXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cXHUwMDNlcHJvdDtcXG4rXFx0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXFx1MDAzZW93bmVyO1xcbiBcXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXFx1MDAzZWZsYWdzO1xcbitcXHRpZiAoYW5zd2VyX293bmVyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8XFxuK1xcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuK1xcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuK1xcdH1cXG4rXFx0c29jay1cXHUwMDNlb3BzID0gYW5zd2VyLVxcdTAwM2VvcHM7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXFx1MDAzZXNsYWIpO1xcbkBAIC0zMzIsNyArMzQwLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcXG4gXFx0aWYgKCFzaylcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XFxuIFxcbiBcXHRlcnIgPSAwO1xcbiBcXHRpZiAoSU5FVF9QUk9UT1NXX1JFVVNFIFxcdTAwMjYgYW5zd2VyX2ZsYWdzKVxcbkBAIC0zOTgsNiArNDA2LDggQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gXFx0fVxcbitvdXRfbW9kdWxlX3B1dDpcXG4rXFx0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xcbiBvdXQ6XFxuIFxcdHJldHVybiBlcnI7XFxuIG91dF9yY3VfdW5sb2NrOlxcbkBAIC00MDYsNyArNDE2LDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gb3V0X3NrX3JlbGVhc2U6XFxuIFxcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcXG4gXFx0c29jay1cXHUwMDNlc2sgPSBOVUxMO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0Z290byBvdXRfbW9kdWxlX3B1dDtcXG4gfVxcbiBcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXFxuaW5kZXggMjgyOTEyYTExOTk5OS4uMWRmOGIyZTdlMjQzNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXFxuKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xcbkBAIC0xMTAsNiArMTEwLDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gXFx0c3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyO1xcbiBcXHRzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90O1xcbitcXHRzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7XFxuIFxcdHVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzO1xcbiBcXHRpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDtcXG4gXFx0aW50IGVycjtcXG5AQCAtMTY3LDkgKzE2OCwxNiBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0ICAgICFuc19jYXBhYmxlKG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9SQVcpKVxcbiBcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiBcXG4tXFx0c29jay1cXHUwMDNlb3BzID0gYW5zd2VyLVxcdTAwM2VvcHM7XFxuIFxcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVxcdTAwM2Vwcm90O1xcbitcXHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cXHUwMDNlb3duZXI7XFxuIFxcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cXHUwMDNlZmxhZ3M7XFxuK1xcdGlmIChhbnN3ZXJfb3duZXIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHxcXG4rXFx0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4rXFx0fVxcbitcXHRzb2NrLVxcdTAwM2VvcHMgPSBhbnN3ZXItXFx1MDAzZW9wcztcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cXHUwMDNlc2xhYik7XFxuQEAgLTE3Nyw3ICsxODUsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0ZXJyID0gLUVOT0JVRlM7XFxuIFxcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9JTkVUNiwgR0ZQX0tFUk5FTCwgYW5zd2VyX3Byb3QsIGtlcm4pO1xcbiBcXHRpZiAoIXNrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBvdXRfbW9kdWxlX3B1dDtcXG4gXFxuIFxcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcXG4gXFxuQEAgLTIwMSw3ICsyMDksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4gXFx0c2stXFx1MDAzZXNrX2ZhbWlseVxcdFxcdD0gUEZfSU5FVDY7XFxuIFxcdHNrLVxcdTAwM2Vza19wcm90b2NvbFxcdFxcdD0gcHJvdG9jb2w7XFxuIFxcbi1cXHRzay1cXHUwMDNlc2tfYmFja2xvZ19yY3ZcXHQ9IGFuc3dlci1cXHUwMDNlcHJvdC1cXHUwMDNlYmFja2xvZ19yY3Y7XFxuK1xcdHNrLVxcdTAwM2Vza19iYWNrbG9nX3JjdlxcdD0gYW5zd2VyX3Byb3QtXFx1MDAzZWJhY2tsb2dfcmN2O1xcbiBcXG4gXFx0aW5ldF9zayhzayktXFx1MDAzZXBpbmV0NiA9IG5wID0gaW5ldDZfc2tfZ2VuZXJpYyhzayk7XFxuIFxcdG5wLVxcdTAwM2Vob3BfbGltaXRcXHQ9IC0xO1xcbkBAIC0yNTEsNiArMjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XFxuIFxcdH1cXG4rb3V0X21vZHVsZV9wdXQ6XFxuK1xcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gZXJyO1xcbiBvdXRfcmN1X3VubG9jazpcXG5AQCAtMjU5LDcgKzI2OSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBvdXRfc2tfcmVsZWFzZTpcXG4gXFx0c2tfY29tbW9uX3JlbGVhc2Uoc2spO1xcbiBcXHRzb2NrLVxcdTAwM2VzayA9IE5VTEw7XFxuLVxcdGdvdG8gb3V0O1xcbitcXHRnb3RvIG91dF9tb2R1bGVfcHV0O1xcbiB9XFxuIFxcbiBpbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQxLjg3MDU2OTgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDg4Mjg4Mjg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9jcmVhdGVcIixcbiAgICBcImluZXQ2X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmI2NDJmMDVmNTVkZjlhNzE3MWZkYTEzYmRmNzJjMjI4ODM0OTUzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMjI6NDY6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmNcbmluZGV4IDMyZDAwNmMxYThlZWQuLjZiODdmMGI2Y2MyMjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmNcbisrKyBiL25ldC9pcHY0L2FmX2luZXQuY1xuQEAgLTI2Myw2ICsyNjMsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0c3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyO1xuIFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiBcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XG4rXHRzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7XG4gXHR1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFncztcbiBcdGludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwO1xuIFx0aW50IGVycjtcbkBAIC0zMjIsOSArMzIzLDE2IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4rXHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cdTAwM2Vvd25lcjtcbiBcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cdTAwM2VmbGFncztcbitcdGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuK1x0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbitcdH1cbitcdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXHUwMDNlc2xhYik7XG5AQCAtMzMyLDcgKzM0MCw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRlcnIgPSAtRU5PTUVNO1xuIFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIFxuIFx0ZXJyID0gMDtcbiBcdGlmIChJTkVUX1BST1RPU1dfUkVVU0UgXHUwMDI2IGFuc3dlcl9mbGFncylcbkBAIC0zOTgsNiArNDA2LDggQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9za19yZWxlYXNlO1xuIFx0fVxuK291dF9tb2R1bGVfcHV0OlxuK1x0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG4gb3V0X3JjdV91bmxvY2s6XG5AQCAtNDA2LDcgKzQxNiw3IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gb3V0X3NrX3JlbGVhc2U6XG4gXHRza19jb21tb25fcmVsZWFzZShzayk7XG4gXHRzb2NrLVx1MDAzZXNrID0gTlVMTDtcbi1cdGdvdG8gb3V0O1xuK1x0Z290byBvdXRfbW9kdWxlX3B1dDtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbmluZGV4IDI4MjkxMmExMTk5OTkuLjFkZjhiMmU3ZTI0MzcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG4rKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5AQCAtMTEwLDYgKzExMCw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFx0c3RydWN0IGluZXRfcHJvdG9zdyAqYW5zd2VyO1xuIFx0c3RydWN0IHByb3RvICphbnN3ZXJfcHJvdDtcbitcdHN0cnVjdCBtb2R1bGUgKmFuc3dlcl9vd25lcjtcbiBcdHVuc2lnbmVkIGNoYXIgYW5zd2VyX2ZsYWdzO1xuIFx0aW50IHRyeV9sb2FkaW5nX21vZHVsZSA9IDA7XG4gXHRpbnQgZXJyO1xuQEAgLTE2Nyw5ICsxNjgsMTYgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHQgICAgIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbiBcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbiBcbi1cdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVx1MDAzZXByb3Q7XG4rXHRhbnN3ZXJfb3duZXIgPSBhbnN3ZXJfcHJvdC1cdTAwM2Vvd25lcjtcbiBcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cdTAwM2VmbGFncztcbitcdGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2XG4rXHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxuK1x0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBvdXRfcmN1X3VubG9jaztcbitcdH1cbitcdHNvY2stXHUwMDNlb3BzID0gYW5zd2VyLVx1MDAzZW9wcztcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXHUwMDNlc2xhYik7XG5AQCAtMTc3LDcgKzE4NSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ZXJyID0gLUVOT0JVRlM7XG4gXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfSU5FVDYsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcbiBcdGlmICghc2spXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIFxuIFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xuIFxuQEAgLTIwMSw3ICsyMDksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHNrLVx1MDAzZXNrX2ZhbWlseVx0XHQ9IFBGX0lORVQ2O1xuIFx0c2stXHUwMDNlc2tfcHJvdG9jb2xcdFx0PSBwcm90b2NvbDtcbiBcbi1cdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2XHQ9IGFuc3dlci1cdTAwM2Vwcm90LVx1MDAzZWJhY2tsb2dfcmN2O1xuK1x0c2stXHUwMDNlc2tfYmFja2xvZ19yY3ZcdD0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7XG4gXG4gXHRpbmV0X3NrKHNrKS1cdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xuIFx0bnAtXHUwMDNlaG9wX2xpbWl0XHQ9IC0xO1xuQEAgLTI1MSw2ICsyNTksOCBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9za19yZWxlYXNlO1xuIFx0fVxuK291dF9tb2R1bGVfcHV0OlxuK1x0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xuIG91dDpcbiBcdHJldHVybiBlcnI7XG4gb3V0X3JjdV91bmxvY2s6XG5AQCAtMjU5LDcgKzI2OSw3IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIG91dF9za19yZWxlYXNlOlxuIFx0c2tfY29tbW9uX3JlbGVhc2Uoc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XG4gfVxuIFxuIGludCBfX2luZXQ2X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQxLjg3MDU3MTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQxMDMzMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBZGRyZXNzaW5nIFBvdGVudGlhbCBVQUYvUmFjZSBDb25kaXRpb25zIGluIFNvY2tldCBDcmVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgd2h5LiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGNyZWF0aW9uIGluIGJvdGggSVB2NCBhbmQgSVB2Ni5cblxuTG9va2luZyBhdCB0aGUgZGlmZiwgaW4gYGluZXRfY3JlYXRlYCwgaXQgYXBwZWFycyB3ZSdyZSBkZWFsaW5nIHdpdGggYGFuc3dlcl9wcm90LVx1MDAzZW93bmVyYC4gSXQncyBjaGVja2luZyBpZiB0aGUgbW9kdWxlIGlzIGNvbWluZyBvciBmYWlsaW5nIHRvIGdldCB0aGUgbW9kdWxlIChgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcilgKS4gVGhlbiwgdGhlcmUncyBhIGBtb2R1bGVfcHV0KGFuc3dlcl9vd25lcilgIGF0IHRoZSBgb3V0X21vZHVsZV9wdXRgIGxhYmVsLiBUaGUgc2FtZSBsb2dpYyBpcyBhcHBsaWVkIGluIGBpbmV0Nl9jcmVhdGVgLiBTbywgdGhpcyBzbWVsbHMgbGlrZSBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIHJlbGF0ZWQgdG8gcHJvdG9jb2wgaGFuZGxlcnMuIE9rYXksIHRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIGhlcmUncyB0aGUga2V5IGNoYW5nZTogYHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2ID0gYW5zd2VyX3Byb3QtXHUwMDNlYmFja2xvZ19yY3Y7YCBpbnN0ZWFkIG9mIGBhbnN3ZXItXHUwMDNlcHJvdC1cdTAwM2ViYWNrbG9nX3JjdjtgLiBIb2xkIG9uLi4uIHRoZSBvbGQgY29kZSB1c2VkIGBhbnN3ZXJgIGFmdGVyIGFuIGByY3VfcmVhZF91bmxvY2tgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCB3b3VsZCBtZWFuIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcnJlY3QgYW5kIHNhZmUgbWV0aG9kIGlzIHRvIHVzZSBgYW5zd2VyX3Byb3RgLCB3aGljaCB3YXMgbGlrZWx5IGEgbG9jYWwgY29weSBhbHJlYWR5LiBUaGlzIGlzIGRlZmluaXRlbHkgdGhlIGNvcmUgb2YgdGhlIGZpeC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgaW4gaG93IHRoZSBiYWNrbG9nIHJlY2VpdmVyIGlzIGFzc2lnbmVkIGR1cmluZyBzb2NrZXQgY3JlYXRpb24uIFRoaXMgcmVwbGFjZW1lbnQgbWFrZXMgY29tcGxldGUgc2Vuc2UgaW4gbGlnaHQgb2YgcG9zc2libGUgcmFjZSBpc3N1ZXMuXG5cblRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgdG8gZ2FpbiBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY29udGV4dCwgSSBuZWVkIHRvIHJlYWQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGluIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgbmV0L2lwdjYvYWZfaW5ldDYuY2AgYXJvdW5kIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgLiBJIHdhbnQgdG8gc2VlIGhvdyBgYW5zd2VyX3Byb3RgIGlzIHBvcHVsYXRlZCBhbmQgaG93IGBhbnN3ZXJgIGlzIGhhbmRsZWQgaW4gdGhlIG92ZXJhbGwgc29ja2V0IGNyZWF0aW9uIGZsb3cgdG8gYmUgY2VydGFpbiBJJ3ZlIGNhdWdodCBhbGwgdGhlIGltcGxpY2F0aW9ucy4gSSBjYW4gc2VlIHRoaXMgY29kZSBhcyBtYWtpbmcgYSB2aXRhbCBpbXByb3ZlbWVudCBpbiBzb2NrZXQgY3JlYXRpb24gdGhyZWFkIHNhZmV0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQ3LjI4MDkwODY1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9hZl9pbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE1LFxuICBcIkxpbmVDb3VudFwiOiAxMDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgUEZfSU5FVCwgcHJvdG9jb2wpO1xcbiAzMTY6XFx0XFx0XFx0XFx0Z290byBsb29rdXBfcHJvdG9jb2w7XFxuIDMxNzpcXHRcXHRcXHR9IGVsc2VcXG4gMzE4OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuIDMxOTpcXHRcXHR9XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdGVyciA9IC1FUEVSTTtcXG4gMzIyOlxcdFxcdGlmIChzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXIFxcdTAwMjZcXHUwMDI2ICFrZXJuIFxcdTAwMjZcXHUwMDI2XFxuIDMyMzpcXHRcXHQgICAgIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXFxuIDMyNDpcXHRcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cXHUwMDNlcHJvdDtcXG4gMzI3OlxcdFxcdGFuc3dlcl9vd25lciA9IGFuc3dlcl9wcm90LVxcdTAwM2Vvd25lcjtcXG4gMzI4OlxcdFxcdGFuc3dlcl9mbGFncyA9IGFuc3dlci1cXHUwMDNlZmxhZ3M7XFxuIDMyOTpcXHRcXHRpZiAoYW5zd2VyX293bmVyIFxcdTAwMjZcXHUwMDI2XFxuIDMzMDpcXHRcXHQgICAgKG1vZHVsZV9pc19jb21pbmcoYW5zd2VyX293bmVyKSB8fFxcbiAzMzE6XFx0XFx0ICAgICAhdHJ5X21vZHVsZV9nZXQoYW5zd2VyX293bmVyKSkpIHtcXG4gMzMyOlxcdFxcdFxcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XFxuIDMzMzpcXHRcXHRcXHRnb3RvIG91dF9yY3VfdW5sb2NrO1xcbiAzMzQ6XFx0XFx0fVxcbiAzMzU6XFx0XFx0c29jay1cXHUwMDNlb3BzID0gYW5zd2VyLVxcdTAwM2VvcHM7XFxuIDMzNjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0V0FSTl9PTighYW5zd2VyX3Byb3QtXFx1MDAzZXNsYWIpO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAzNDE6XFx0XFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQsIEdGUF9LRVJORUwsIGFuc3dlcl9wcm90LCBrZXJuKTtcXG4gMzQyOlxcdFxcdGlmICghc2spXFxuIDM0MzpcXHRcXHRcXHRnb3RvIG91dF9tb2R1bGVfcHV0O1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRlcnIgPSAwO1xcbiAzNDY6XFx0XFx0aWYgKElORVRfUFJPVE9TV19SRVVTRSBcXHUwMDI2IGFuc3dlcl9mbGFncylcXG4gMzQ3OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19yZXVzZSA9IFNLX0NBTl9SRVVTRTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0aWYgKElORVRfUFJPVE9TV19JQ1NLIFxcdTAwMjYgYW5zd2VyX2ZsYWdzKVxcbiAzNTA6XFx0XFx0XFx0aW5ldF9pbml0X2Nza19sb2Nrcyhzayk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGluZXQgPSBpbmV0X3NrKHNrKTtcXG4gMzUzOlxcdFxcdGluZXRfYXNzaWduX2JpdChJU19JQ1NLLCBzaywgSU5FVF9QUk9UT1NXX0lDU0sgXFx1MDAyNiBhbnN3ZXJfZmxhZ3MpO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRpbmV0X2NsZWFyX2JpdChOT0RFRlJBRywgc2spO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRpZiAoU09DS19SQVcgPT0gc29jay1cXHUwMDNldHlwZSkge1xcbiAzNTg6XFx0XFx0XFx0aW5ldC1cXHUwMDNlaW5ldF9udW0gPSBwcm90b2NvbDtcXG4gMzU5OlxcdFxcdFxcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcXG4gMzYwOlxcdFxcdFxcdFxcdGluZXRfc2V0X2JpdChIRFJJTkNMLCBzayk7XFxuIDM2MTpcXHRcXHR9XFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9ub19wbXR1X2Rpc2MpKVxcbiAzNjQ6XFx0XFx0XFx0aW5ldC1cXHUwMDNlcG10dWRpc2MgPSBJUF9QTVRVRElTQ19ET05UO1xcbiAzNjU6XFx0XFx0ZWxzZVxcbiAzNjY6XFx0XFx0XFx0aW5ldC1cXHUwMDNlcG10dWRpc2MgPSBJUF9QTVRVRElTQ19XQU5UO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZpbmV0LVxcdTAwM2VpbmV0X2lkLCAwKTtcXG4gMzY5OlxcdFxcbiAzNzA6XFx0XFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHQgICA9IGluZXRfc29ja19kZXN0cnVjdDtcXG4gMzczOlxcdFxcdHNrLVxcdTAwM2Vza19wcm90b2NvbFxcdCAgID0gcHJvdG9jb2w7XFxuIDM3NDpcXHRcXHRzay1cXHUwMDNlc2tfYmFja2xvZ19yY3YgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlYmFja2xvZ19yY3Y7XFxuIDM3NTpcXHRcXHRzay1cXHUwMDNlc2tfdHhyZWhhc2ggPSBSRUFEX09OQ0UobmV0LVxcdTAwM2Vjb3JlLnN5c2N0bF90eHJlaGFzaCk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGluZXQtXFx1MDAzZXVjX3R0bFxcdD0gLTE7XFxuIDM3ODpcXHRcXHRpbmV0X3NldF9iaXQoTUNfTE9PUCwgc2spO1xcbiAzNzk6XFx0XFx0aW5ldC1cXHUwMDNlbWNfdHRsXFx0PSAxO1xcbiAzODA6XFx0XFx0aW5ldF9zZXRfYml0KE1DX0FMTCwgc2spO1xcbiAzODE6XFx0XFx0aW5ldC1cXHUwMDNlbWNfaW5kZXhcXHQ9IDA7XFxuIDM4MjpcXHRcXHRpbmV0LVxcdTAwM2VtY19saXN0XFx0PSBOVUxMO1xcbiAzODM6XFx0XFx0aW5ldC1cXHUwMDNlcmN2X3Rvc1xcdD0gMDtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0aWYgKGluZXQtXFx1MDAzZWluZXRfbnVtKSB7XFxuIDM4NjpcXHRcXHRcXHQvKiBJdCBhc3N1bWVzIHRoYXQgYW55IHByb3RvY29sIHdoaWNoIGFsbG93c1xcbiAzODc6XFx0XFx0XFx0ICogdGhlIHVzZXIgdG8gYXNzaWduIGEgbnVtYmVyIGF0IHNvY2tldFxcbiAzODg6XFx0XFx0XFx0ICogY3JlYXRpb24gdGltZSBhdXRvbWF0aWNhbGx5XFxuIDM4OTpcXHRcXHRcXHQgKiBzaGFyZXMuXFxuIDM5MDpcXHRcXHRcXHQgKi9cXG4gMzkxOlxcdFxcdFxcdGluZXQtXFx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVxcdTAwM2VpbmV0X251bSk7XFxuIDM5MjpcXHRcXHRcXHQvKiBBZGQgdG8gcHJvdG9jb2wgaGFzaCBjaGFpbnMuICovXFxuIDM5MzpcXHRcXHRcXHRlcnIgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaGFzaChzayk7XFxuIDM5NDpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzOTU6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gMzk2OlxcdFxcdH1cXG4gMzk3OlxcdFxcbiAzOTg6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2Vpbml0KSB7XFxuIDM5OTpcXHRcXHRcXHRlcnIgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaW5pdChzayk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MDE6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gNDAyOlxcdFxcdH1cXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0aWYgKCFrZXJuKSB7XFxuIDQwNTpcXHRcXHRcXHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0lORVRfU09DSyhzayk7XFxuIDQwNjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MDc6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gNDA4OlxcdFxcdH1cXG4gNDA5OlxcdG91dF9tb2R1bGVfcHV0OlxcbiA0MTA6XFx0XFx0bW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpO1xcbiA0MTE6XFx0b3V0OlxcbiA0MTI6XFx0XFx0cmV0dXJuIGVycjtcXG4gNDEzOlxcdG91dF9yY3VfdW5sb2NrOlxcbiA0MTQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjQ3LjI4MTA5NjIwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTgyODA2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29kZSBQYXRoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHNwZWNpZmljIHBpZWNlIG9mIG5ldHdvcmsgY29kZSwgYW5kIGl0J3MgZ290IG1lIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zLiBJIGtub3cgd2UndmUgYmVlbiBmb2N1c2VkIG9uIGBpbmV0X2NyZWF0ZWAgYnV0IEknbSBoYXZpbmcgYSBodW5jaCB0aGF0IGEgc2ltaWxhciB2dWxuZXJhYmlsaXR5IG9yIGlzc3VlIG1pZ2h0IGV4aXN0IGluIGEgc2libGluZyBmdW5jdGlvbiwgcG90ZW50aWFsbHkgZXZlbiB3aXRoIGEgc2ltaWxhciBmdW5jdGlvbiBzaWduYXR1cmUgb3IgcHVycG9zZS4gSXQncyBhbG1vc3QgYXV0b21hdGljLCB0aGUga2luZCBvZiBwYXJhbGxlbCB0aG91Z2h0IHByb2Nlc3MgeW91IGdldCB3aGVuIGRlZXAgaW4gYSBzcGVjaWZpYyBhcmVhLiBTaW5jZSBgaW5ldDZfY3JlYXRlYCBoYW5kbGVzIElQdjYgYWRkcmVzc2VzLCBpdCdzIGEgY3JpdGljYWwgbmV4dCBzdGVwIHRvIHZlcmlmeS4gV2UgbmVlZCB0byBjaGVjayBpdCBhbmQgbWFrZSBzdXJlIGl0IGhhcyB0aGUgc2FtZSBsZXZlbCBvZiByb2J1c3RuZXNzIGFzIHdlJ3JlIGhvcGluZyB0byBmaW5kIGluIGBpbmV0X2NyZWF0ZWAuIEkgZG9uJ3Qgd2FudCB0byBnZXQgdHVubmVsIHZpc2lvbiBhbmQgbWlzcyBhIHNpbWlsYXIgaXNzdWUgb3ZlciB0aGVyZS4gTGV0J3Mgc2VlIGlmIHRoZSBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgZm9yIGV4cGxvaXRhdGlvbiBpbiBgaW5ldDZfY3JlYXRlYCBtaXJyb3Igd2hhdCB3ZSd2ZSBzZWVuIChvciAqY291bGQqIHNlZSkgaW4gYGluZXRfY3JlYXRlYC4gSXQncyBhbGwgYWJvdXQgZHVlIGRpbGlnZW5jZSBhbmQgaG9saXN0aWMgc2VjdXJpdHkgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0Njo0OS4yOTkzODAzMTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvYWZfaW5ldDYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDEyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFBGX0lORVQ2LCBwcm90b2NvbCk7XFxuIDE2MTpcXHRcXHRcXHRcXHRnb3RvIGxvb2t1cF9wcm90b2NvbDtcXG4gMTYyOlxcdFxcdFxcdH0gZWxzZVxcbiAxNjM6XFx0XFx0XFx0XFx0Z290byBvdXRfcmN1X3VubG9jaztcXG4gMTY0OlxcdFxcdH1cXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0ZXJyID0gLUVQRVJNO1xcbiAxNjc6XFx0XFx0aWYgKHNvY2stXFx1MDAzZXR5cGUgPT0gU09DS19SQVcgXFx1MDAyNlxcdTAwMjYgIWtlcm4gXFx1MDAyNlxcdTAwMjZcXG4gMTY4OlxcdFxcdCAgICAhbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcXG4gMTY5OlxcdFxcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGFuc3dlcl9wcm90ID0gYW5zd2VyLVxcdTAwM2Vwcm90O1xcbiAxNzI6XFx0XFx0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXFx1MDAzZW93bmVyO1xcbiAxNzM6XFx0XFx0YW5zd2VyX2ZsYWdzID0gYW5zd2VyLVxcdTAwM2VmbGFncztcXG4gMTc0OlxcdFxcdGlmIChhbnN3ZXJfb3duZXIgXFx1MDAyNlxcdTAwMjZcXG4gMTc1OlxcdFxcdCAgICAobW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpIHx8XFxuIDE3NjpcXHRcXHQgICAgICF0cnlfbW9kdWxlX2dldChhbnN3ZXJfb3duZXIpKSkge1xcbiAxNzc6XFx0XFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4gMTc4OlxcdFxcdFxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuIDE3OTpcXHRcXHR9XFxuIDE4MDpcXHRcXHRzb2NrLVxcdTAwM2VvcHMgPSBhbnN3ZXItXFx1MDAzZW9wcztcXG4gMTgxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRXQVJOX09OKCFhbnN3ZXJfcHJvdC1cXHUwMDNlc2xhYik7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdGVyciA9IC1FTk9CVUZTO1xcbiAxODY6XFx0XFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XFxuIDE4NzpcXHRcXHRpZiAoIXNrKVxcbiAxODg6XFx0XFx0XFx0Z290byBvdXRfbW9kdWxlX3B1dDtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0c29ja19pbml0X2RhdGEoc29jaywgc2spO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRlcnIgPSAwO1xcbiAxOTM6XFx0XFx0aWYgKElORVRfUFJPVE9TV19SRVVTRSBcXHUwMDI2IGFuc3dlcl9mbGFncylcXG4gMTk0OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19yZXVzZSA9IFNLX0NBTl9SRVVTRTtcXG4gMTk1OlxcdFxcbiAxOTY6XFx0XFx0aWYgKElORVRfUFJPVE9TV19JQ1NLIFxcdTAwMjYgYW5zd2VyX2ZsYWdzKVxcbiAxOTc6XFx0XFx0XFx0aW5ldF9pbml0X2Nza19sb2Nrcyhzayk7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdGluZXQgPSBpbmV0X3NrKHNrKTtcXG4gMjAwOlxcdFxcdGluZXRfYXNzaWduX2JpdChJU19JQ1NLLCBzaywgSU5FVF9QUk9UT1NXX0lDU0sgXFx1MDAyNiBhbnN3ZXJfZmxhZ3MpO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRpZiAoU09DS19SQVcgPT0gc29jay1cXHUwMDNldHlwZSkge1xcbiAyMDM6XFx0XFx0XFx0aW5ldC1cXHUwMDNlaW5ldF9udW0gPSBwcm90b2NvbDtcXG4gMjA0OlxcdFxcdFxcdGlmIChJUFBST1RPX1JBVyA9PSBwcm90b2NvbClcXG4gMjA1OlxcdFxcdFxcdFxcdGluZXRfc2V0X2JpdChIRFJJTkNMLCBzayk7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHNrLVxcdTAwM2Vza19kZXN0cnVjdFxcdFxcdD0gaW5ldDZfc29ja19kZXN0cnVjdDtcXG4gMjA5OlxcdFxcdHNrLVxcdTAwM2Vza19mYW1pbHlcXHRcXHQ9IFBGX0lORVQ2O1xcbiAyMTA6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3RvY29sXFx0XFx0PSBwcm90b2NvbDtcXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0c2stXFx1MDAzZXNrX2JhY2tsb2dfcmN2XFx0PSBhbnN3ZXJfcHJvdC1cXHUwMDNlYmFja2xvZ19yY3Y7XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdGluZXRfc2soc2spLVxcdTAwM2VwaW5ldDYgPSBucCA9IGluZXQ2X3NrX2dlbmVyaWMoc2spO1xcbiAyMTU6XFx0XFx0bnAtXFx1MDAzZWhvcF9saW1pdFxcdD0gLTE7XFxuIDIxNjpcXHRcXHRucC1cXHUwMDNlbWNhc3RfaG9wc1xcdD0gSVBWNl9ERUZBVUxUX01DQVNUSE9QUztcXG4gMjE3OlxcdFxcdGluZXQ2X3NldF9iaXQoTUM2X0xPT1AsIHNrKTtcXG4gMjE4OlxcdFxcdGluZXQ2X3NldF9iaXQoTUM2X0FMTCwgc2spO1xcbiAyMTk6XFx0XFx0bnAtXFx1MDAzZXBtdHVkaXNjXFx0PSBJUFY2X1BNVFVESVNDX1dBTlQ7XFxuIDIyMDpcXHRcXHRpbmV0Nl9hc3NpZ25fYml0KFJFUEZMT1csIHNrLCBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5mbG93bGFiZWxfcmVmbGVjdCkgXFx1MDAyNlxcbiAyMjE6XFx0XFx0XFx0XFx0XFx0ICAgICAgRkxPV0xBQkVMX1JFRkxFQ1RfRVNUQUJMSVNIRUQpO1xcbiAyMjI6XFx0XFx0c2stXFx1MDAzZXNrX2lwdjZvbmx5XFx0PSBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LnN5c2N0bC5iaW5kdjZvbmx5KTtcXG4gMjIzOlxcdFxcdHNrLVxcdTAwM2Vza190eHJlaGFzaCA9IFJFQURfT05DRShuZXQtXFx1MDAzZWNvcmUuc3lzY3RsX3R4cmVoYXNoKTtcXG4gMjI0OlxcdFxcbiAyMjU6XFx0XFx0LyogSW5pdCB0aGUgaXB2NCBwYXJ0IG9mIHRoZSBzb2NrZXQgc2luY2Ugd2UgY2FuIGhhdmUgc29ja2V0c1xcbiAyMjY6XFx0XFx0ICogdXNpbmcgdjYgQVBJIGZvciBpcHY0LlxcbiAyMjc6XFx0XFx0ICovXFxuIDIyODpcXHRcXHRpbmV0LVxcdTAwM2V1Y190dGxcXHQ9IC0xO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRpbmV0X3NldF9iaXQoTUNfTE9PUCwgc2spO1xcbiAyMzE6XFx0XFx0aW5ldC1cXHUwMDNlbWNfdHRsXFx0PSAxO1xcbiAyMzI6XFx0XFx0aW5ldC1cXHUwMDNlbWNfaW5kZXhcXHQ9IDA7XFxuIDIzMzpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGluZXQtXFx1MDAzZW1jX2xpc3QsIE5VTEwpO1xcbiAyMzQ6XFx0XFx0aW5ldC1cXHUwMDNlcmN2X3Rvc1xcdD0gMDtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0aWYgKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2lwX25vX3BtdHVfZGlzYykpXFxuIDIzNzpcXHRcXHRcXHRpbmV0LVxcdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX0RPTlQ7XFxuIDIzODpcXHRcXHRlbHNlXFxuIDIzOTpcXHRcXHRcXHRpbmV0LVxcdTAwM2VwbXR1ZGlzYyA9IElQX1BNVFVESVNDX1dBTlQ7XFxuIDI0MDpcXHRcXG4gMjQxOlxcdFxcdGlmIChpbmV0LVxcdTAwM2VpbmV0X251bSkge1xcbiAyNDI6XFx0XFx0XFx0LyogSXQgYXNzdW1lcyB0aGF0IGFueSBwcm90b2NvbCB3aGljaCBhbGxvd3NcXG4gMjQzOlxcdFxcdFxcdCAqIHRoZSB1c2VyIHRvIGFzc2lnbiBhIG51bWJlciBhdCBzb2NrZXRcXG4gMjQ0OlxcdFxcdFxcdCAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseSBzaGFyZXMuXFxuIDI0NTpcXHRcXHRcXHQgKi9cXG4gMjQ2OlxcdFxcdFxcdGluZXQtXFx1MDAzZWluZXRfc3BvcnQgPSBodG9ucyhpbmV0LVxcdTAwM2VpbmV0X251bSk7XFxuIDI0NzpcXHRcXHRcXHRlcnIgPSBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaGFzaChzayk7XFxuIDI0ODpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyNDk6XFx0XFx0XFx0XFx0Z290byBvdXRfc2tfcmVsZWFzZTtcXG4gMjUwOlxcdFxcdH1cXG4gMjUxOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlaW5pdCkge1xcbiAyNTI6XFx0XFx0XFx0ZXJyID0gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWluaXQoc2spO1xcbiAyNTM6XFx0XFx0XFx0aWYgKGVycilcXG4gMjU0OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3NrX3JlbGVhc2U7XFxuIDI1NTpcXHRcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdGlmICgha2Vybikge1xcbiAyNTg6XFx0XFx0XFx0ZXJyID0gQlBGX0NHUk9VUF9SVU5fUFJPR19JTkVUX1NPQ0soc2spO1xcbiAyNTk6XFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NDkuMjk5NDg4NzIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEyODM5OTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU29ja2V0IENyZWF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBzZWUgd2UncmUgbG9va2luZyBhdCBzb2NrZXQgY3JlYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgbW9kdWxlIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgZHVyaW5nIHNvY2tldCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gdXNpbmcgYHNvY2tldChBRl9JTkVULCAuLi4pYCBvciBgc29ja2V0KEFGX0lORVQ2LCAuLi4pYCBjYWxscy4gSSByZWNvZ25pemUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBlbnRyeSBwb2ludHMgZm9yIGNyZWF0aW5nIEFGX0lORVQgYW5kIEFGX0lORVQ2IHNvY2tldHMuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIG1lY2hhbmlzbSB0byBtYW5hZ2UgbW9kdWxlIHJlZmVyZW5jZXMgdXNpbmcgYHRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcilgIGFuZCBgbW9kdWxlX2lzX2NvbWluZyhhbnN3ZXJfb3duZXIpYCB3aXRoaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFRoZSBpbnRlbnQgaGVyZSBhcHBlYXJzIHRvIGJlIHRvIGVuc3VyZSB0aGUgbW9kdWxlIGlzIGtlcHQgYWxpdmUgZHVyaW5nIHNvY2tldCBjcmVhdGlvbi4gVGhlIHJlZmVyZW5jZSBpcyB0aGVuIHJlbGVhc2VkIHdpdGggYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBwYXVzZSBhbmQgY29uc2lkZXIgaG93IGBza19hbGxvY2AgaW50ZXJhY3RzIHdpdGggbW9kdWxlIHJlZmVyZW5jZXMuICpEb2VzKiBgc2tfYWxsb2NgIGl0c2VsZiBoYXZlIHNvbWUgbG9naWMgcmVsYXRlZCB0byBtb2R1bGUgcmVmZXJlbmNlcz8gSWYgc28sIHdlIG1pZ2h0IGhhdmUgc29tZSByZWR1bmRhbnQgcmVmY291bnRpbmcgZ29pbmcgb24sIG9yIHdvcnNlLCBhIGRvdWJsZS1mcmVlIHNpdHVhdGlvbi4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBnbyBhbmQgZXhhbWluZSBgc2tfYWxsb2NgLCBkZWZpbmVkIGxpa2VseSBpbiBgbmV0L2NvcmUvc29jay5jYCBvciBhIHJlbGF0ZWQgZmlsZSwgdG8gY29uZmlybSBpdHMgYmVoYXZpb3IuIEkgbmVlZCB0byBzZWUgd2hhdCBgc2tfYWxsb2NgIGRvZXMgYWJvdXQgbW9kdWxlIHJlZmVyZW5jZXMgaW50ZXJuYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQwMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjUyLjQyNzg5MTAyMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU1MTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19hbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrLmM9MjIzNz1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX3Byb3RfYWxsb2Moc3RydWN0IHByb3RvICpwcm90LCBnZnBfdCBwcmlvcml0eSxcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yMjUzLVxcdGlmIChzayAhPSBOVUxMKSB7XFxubmV0L2NvcmUvc29jay5jOjIyNTQ6XFx0XFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcXG5uZXQvY29yZS9zb2NrLmMtMjI1NS1cXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTIyNzM9c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIzMDEtICovXFxubmV0L2NvcmUvc29jay5jOjIzMDI6c3RydWN0IHNvY2sgKnNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHksXFxubmV0L2NvcmUvc29jay5jLTIzMDMtXFx0XFx0ICAgICAgc3RydWN0IHByb3RvICpwcm90LCBpbnQga2VybilcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yMzM0LVxcbm5ldC9jb3JlL3NvY2suYzoyMzM1OlxcdFxcdG1lbV9jZ3JvdXBfc2tfYWxsb2Moc2spO1xcbm5ldC9jb3JlL3NvY2suYzoyMzM2OlxcdFxcdGNncm91cF9za19hbGxvYyhcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxubmV0L2NvcmUvc29jay5jLTIzMzctXFx0XFx0c29ja191cGRhdGVfY2xhc3NpZChcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjUyLjQ3NjQ1MDQwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MzM2OTg2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHNrX3Byb3RfYWxsb2NgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNvY2tldCBwcm90b2NvbHMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gZXZlcnl0aGluZy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgc2tfcHJvdF9hbGxvY2AuIEkga25vdyBpdCdzIGluIGBuZXQvY29yZS9zb2NrLmNgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhlIGNvcmUgc29ja2V0IGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBob3VzZWQgdGhlcmUuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjYWxscywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHRoZSBgc29ja2AgYW5kIGBza19idWZmYCBzdHJ1Y3R1cmVzLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBpcyBsaW5rZWQgaW4gYW5kIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIHNwaW5sb2NrcyBpbnZvbHZlZCBhbmQgdGhlIGxvY2tpbmcgb3JkZXI/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgcmFjZSBjb25kaXRpb25zIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbi4gSXMgaXQgY2FsbGVkIGZyb20gdXNlciBzcGFjZSwga2VybmVsIHNwYWNlLCBvciBib3RoPyBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ2OjU0LjQxMDE1MzA2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzU6XFx0fVxcbjIyMzY6XFx0XFxuMjIzNzpcXHRzdGF0aWMgc3RydWN0IHNvY2sgKnNrX3Byb3RfYWxsb2Moc3RydWN0IHByb3RvICpwcm90LCBnZnBfdCBwcmlvcml0eSxcXG4yMjM4OlxcdFxcdFxcdGludCBmYW1pbHkpXFxuMjIzOTpcXHR7XFxuMjI0MDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMjI0MTpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYjtcXG4yMjQyOlxcdFxcbjIyNDM6XFx0XFx0c2xhYiA9IHByb3QtXFx1MDAzZXNsYWI7XFxuMjI0NDpcXHRcXHRpZiAoc2xhYiAhPSBOVUxMKSB7XFxuMjI0NTpcXHRcXHRcXHRzayA9IGttZW1fY2FjaGVfYWxsb2Moc2xhYiwgcHJpb3JpdHkgXFx1MDAyNiB+X19HRlBfWkVSTyk7XFxuMjI0NjpcXHRcXHRcXHRpZiAoIXNrKVxcbjIyNDc6XFx0XFx0XFx0XFx0cmV0dXJuIHNrO1xcbjIyNDg6XFx0XFx0XFx0aWYgKHdhbnRfaW5pdF9vbl9hbGxvYyhwcmlvcml0eSkpXFxuMjI0OTpcXHRcXHRcXHRcXHRza19wcm90X2NsZWFyX251bGxzKHNrLCBwcm90LVxcdTAwM2VvYmpfc2l6ZSk7XFxuMjI1MDpcXHRcXHR9IGVsc2VcXG4yMjUxOlxcdFxcdFxcdHNrID0ga21hbGxvYyhwcm90LVxcdTAwM2VvYmpfc2l6ZSwgcHJpb3JpdHkpO1xcbjIyNTI6XFx0XFxuMjI1MzpcXHRcXHRpZiAoc2sgIT0gTlVMTCkge1xcbjIyNTQ6XFx0XFx0XFx0aWYgKHNlY3VyaXR5X3NrX2FsbG9jKHNrLCBmYW1pbHksIHByaW9yaXR5KSlcXG4yMjU1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuMjI1NjpcXHRcXG4yMjU3OlxcdFxcdFxcdGlmICghdHJ5X21vZHVsZV9nZXQocHJvdC1cXHUwMDNlb3duZXIpKVxcbjIyNTg6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9zZWM7XFxuMjI1OTpcXHRcXHR9XFxuMjI2MDpcXHRcXG4yMjYxOlxcdFxcdHJldHVybiBzaztcXG4yMjYyOlxcdFxcbjIyNjM6XFx0b3V0X2ZyZWVfc2VjOlxcbjIyNjQ6XFx0XFx0c2VjdXJpdHlfc2tfZnJlZShzayk7XFxuMjI2NTpcXHRvdXRfZnJlZTpcXG4yMjY2OlxcdFxcdGlmIChzbGFiICE9IE5VTEwpXFxuMjI2NzpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xcbjIyNjg6XFx0XFx0ZWxzZVxcbjIyNjk6XFx0XFx0XFx0a2ZyZWUoc2spO1xcbjIyNzA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjI3MTpcXHR9XFxuMjI3MjpcXHRcXG4yMjczOlxcdHN0YXRpYyB2b2lkIHNrX3Byb3RfZnJlZShzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBzb2NrICpzaylcXG4yMjc0OlxcdHtcXG4yMjc1OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xcbjIyNzY6XFx0XFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdG93bmVyID0gcHJvdC1cXHUwMDNlb3duZXI7XFxuMjI3OTpcXHRcXHRzbGFiID0gcHJvdC1cXHUwMDNlc2xhYjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NTQuNDEwMzQwMDk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMjkxMjIwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBFdmFsdWF0aW9uOiBOZXR3b3JrIFNvY2tldCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGNvZGUgY2hhbmdlcywgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHdoZXJlIHdlIHN0YW5kLiAgYHNrX3Byb3RfYWxsb2NgIHdhcyBjYWxsaW5nIGB0cnlfbW9kdWxlX2dldGAgb24gdGhlIHByb3RvY29sJ3Mgb3duZXIsIGJ1dCB0aGVyZSdzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZC9vciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpZiB0aGUgbW9kdWxlIHVubG9hZHMgYmVmb3JlIGBza19hbGxvY2AgaXMgY2FsbGVkLCBvciBpZiBgYW5zd2VyX3Byb3RgIGNvbWVzIGZyb20gYSBtb2R1bGUgdGhhdCdzIGJlaW5nIHVubG9hZGVkLiBDb252ZXJzZWx5LCBgc2tfcHJvdF9mcmVlYCBkb2VzIGBtb2R1bGVfcHV0KG93bmVyKWAuIFRoZSBhZGRpdGlvbiBvZiB0aGUgZXh0cmEgYHRyeV9tb2R1bGVfZ2V0YC9gbW9kdWxlX3B1dGAgaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzIG1vZHVsZSB1bmxvYWRpbmcgaXNzdWUgd2hpbGUgc29ja2V0IGNyZWF0aW9uIGlzIGluIHByb2dyZXNzLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBgaW5ldF9jcmVhdGVgIGFuZCBgaW5ldDZfY3JlYXRlYCBhcmUgdGhlICpjb3JlKiBzb2NrZXQgY3JlYXRpb24gZnVuY3Rpb25zIGZvciBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAgc29ja2V0cywgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbmV0d29yayBwcm9ncmFtbWluZy4gVGhleSdyZSBleGVjdXRlZCBkaXJlY3RseSBmcm9tIHN5c2NhbGxzIGxpa2UgYHNvY2tldCgpYCwgYGFjY2VwdCgpYCwgYW5kIGBzb2NrZXRwYWlyKClgLiBUaGlzIGlzIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29kZSwgc2l0dGluZyBpbiBgbmV0L2lwdjQvYWZfaW5ldC5jYCBhbmQgYG5ldC9pcHY2L2FmX2luZXQ2LmNgLlxuXG5CYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgZGVmaW5pdGl2ZWx5IGZhbGxzIHVuZGVyIFwiV29ydGhGdXp6aW5nID0gdHJ1ZS5cIiBTZWN0aW9uIDMgY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgYXJlIGZhaXIgZ2FtZSwgYW5kIHRoaXMgdG91Y2hlcyB0aGF0IGRpcmVjdGx5LiAgUmVmYWN0b3JpbmcgYW5kIGNvZGUgY2xlYW51cD8gQ2hlY2suIFJlYWNoYWJsZSBjb2RlPyBBYnNvbHV0ZWx5LlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzLiAgYGluZXRfY3JlYXRlYCBmcm9tIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgaW5ldDZfY3JlYXRlYCBmcm9tIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYCBhcmUgKnRoZSogZnVuY3Rpb25zLiAgVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGVzZSB0d28gZnVuY3Rpb25zLCBub3RoaW5nIGVsc2UuIFdlIGFyZW4ndCBkZWFsaW5nIHdpdGggZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgbGlrZSBtZW1vcnkgYWxsb2NhdG9yczsgdGhlc2UgYXJlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3Igc29ja2V0IGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAgZmFtaWxpZXMuICBUaGlzIGlzbid0IGEgaG90IHBhdGggdGhhdCdzIGdvaW5nIHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIEl0IGlzIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMgYXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNC5cblxuSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgbmV0L2lwdjQvYCBhbmQgYG5ldC9pcHY2L2AgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IHdvdWxkIG1ha2UgdGhlc2UgZnVuY3Rpb25zIGluYWNjZXNzaWJsZSwgYnV0IGFzc3VtaW5nIHRoZSBzdGFuZGFyZCBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCwgd2UgYXJlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTE0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NTkuNDM5NDY1Nzc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDA1MTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9pbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xNzE5PXN0YXRpYyBfX25ldF9pbml0IGludCBpcHY0X21pYl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTczMC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxNzMxOlxcdFxcdHN0cnVjdCBpcHN0YXRzX21pYiAqYWZfaW5ldF9zdGF0cztcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTczMjpcXHRcXHRhZl9pbmV0X3N0YXRzID0gcGVyX2NwdV9wdHIobmV0LVxcdTAwM2VtaWIuaXBfc3RhdGlzdGljcywgaSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjE3MzM6XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNmFmX2luZXRfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTczNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTc5MD1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaW5ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTgzMC1cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTgzMTpzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGFmX2luZXRfb3BzID0ge1xcbm5ldC9pcHY0L2FmX2luZXQuYy0xODMyLVxcdC5pbml0ID0gaW5ldF9pbml0X25ldCxcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xODM1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfaW5ldF9wZXJuZXRfb3BzKHZvaWQpXFxubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzYte1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxODM3OlxcdHJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZhZl9pbmV0X29wcyk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTE4MzgtfVxcbi0tXFxubmV0L2lwdjQvcmF3LmM9NzAwPXN0YXRpYyB2b2lkIHJhd19kZXN0cm95KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTcwNi1cXG5uZXQvaXB2NC9yYXcuYzo3MDc6LyogVGhpcyBnZXRzIHJpZCBvZiBhbGwgdGhlIG5hc3RpZXMgaW4gYWZfaW5ldC4gLURhdmVNICovXFxubmV0L2lwdjQvcmF3LmMtNzA4LXN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy00MS0gKlxcdFxcdE1hdHQgRGlsbG9uXFx0OlxcdFVEUCBsZW5ndGggY2hlY2tzLlxcbm5ldC9pcHY0L3VkcC5jOjQyOiAqXFx0XFx0QWxhbiBDb3hcXHQ6XFx0U21hcnRlciBhZl9pbmV0IHVzZWQgcHJvcGVybHkuXFxubmV0L2lwdjQvdWRwLmMtNDMtICpcXHRcXHRBbGFuIENveFxcdDpcXHRVc2UgbmV3IGtlcm5lbCBzaWRlIGFkZHJlc3NpbmcuXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2KSArPSBpcHY2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS03LVxcbm5ldC9pcHY2L01ha2VmaWxlOjg6aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy04LSAqXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo5OiAqXFx0QWRhcHRlZCBmcm9tIGxpbnV4L25ldC9pcHY0L2FmX2luZXQuY1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtMTAtICpcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9ODg4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY2X2luaXRfbWlicyhzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTkwMC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAxOlxcdFxcdHN0cnVjdCBpcHN0YXRzX21pYiAqYWZfaW5ldDZfc3RhdHM7XFxubmV0L2lwdjYvYWZfaW5ldDYuYzo5MDI6XFx0XFx0YWZfaW5ldDZfc3RhdHMgPSBwZXJfY3B1X3B0cihuZXQtXFx1MDAzZW1pYi5pcHY2X3N0YXRpc3RpY3MsIGkpO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmM6OTAzOlxcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZhZl9pbmV0Nl9zdGF0cy1cXHUwMDNlc3luY3ApO1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtOTA0LVxcdH1cXG4tLVxcbm5ldC9pcHY2L3Jhdy5jPTIxMT1ib29sIHJhdzZfbG9jYWxfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcilcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTIxNS1cXG5uZXQvaXB2Ni9yYXcuYzoyMTY6LyogVGhpcyBjbGVhbnMgdXAgYWZfaW5ldDYgYSBiaXQuIC1EYXZlTSAqL1xcbm5ldC9pcHY2L3Jhdy5jLTIxNy1zdGF0aWMgaW50IHJhd3Y2X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXFxuLS1cXG5uZXQvc2N0cC9pcHY2LmM9MTA4OD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHNjdHB2Nl9wcm90b2NvbCA9IHtcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy0xMDkzLVxcbm5ldC9zY3RwL2lwdjYuYzoxMDk0OnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2FmX2luZXQ2ID0ge1xcbm5ldC9zY3RwL2lwdjYuYy0xMDk1LVxcdC5zYV9mYW1pbHlcXHQgICA9IEFGX0lORVQ2LFxcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTExMjI9c3RhdGljIHN0cnVjdCBzY3RwX3BmIHNjdHBfcGZfaW5ldDYgPSB7XFxuLS1cXG5uZXQvc2N0cC9pcHY2LmMtMTEzMy1cXHQuY29weV9pcF9vcHRpb25zID0gc2N0cF92Nl9jb3B5X2lwX29wdGlvbnMsXFxubmV0L3NjdHAvaXB2Ni5jOjExMzQ6XFx0LmFmICAgICAgICAgICAgPSBcXHUwMDI2c2N0cF9hZl9pbmV0NixcXG5uZXQvc2N0cC9pcHY2LmMtMTEzNS19O1xcbi0tXFxubmV0L3NjdHAvaXB2Ni5jPTExMzg9dm9pZCBzY3RwX3Y2X3BmX2luaXQodm9pZClcXG4tLVxcbm5ldC9zY3RwL2lwdjYuYy0xMTQzLVxcdC8qIFJlZ2lzdGVyIHRoZSBTQ1RQIHNwZWNpZmljIEFGX0lORVQ2IGZ1bmN0aW9ucy4gKi9cXG5uZXQvc2N0cC9pcHY2LmM6MTE0NDpcXHRzY3RwX3JlZ2lzdGVyX2FmKFxcdTAwMjZzY3RwX2FmX2luZXQ2KTtcXG5uZXQvc2N0cC9pcHY2LmMtMTE0NS19XFxuLS1cXG5uZXQvc2N0cC9pcHY2LmM9MTE0Nz12b2lkIHNjdHBfdjZfcGZfZXhpdCh2b2lkKVxcbm5ldC9zY3RwL2lwdjYuYy0xMTQ4LXtcXG5uZXQvc2N0cC9pcHY2LmM6MTE0OTpcXHRsaXN0X2RlbChcXHUwMDI2c2N0cF9hZl9pbmV0Ni5saXN0KTtcXG5uZXQvc2N0cC9pcHY2LmMtMTE1MC19XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEwNDA9c3RhdGljIGlubGluZSBpbnQgc2N0cF92NF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdClcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTA4Mi1cXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEwODM6c3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldDtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwODQtXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMDg1PXN0YXRpYyBzdHJ1Y3Qgc2N0cF9wZiBzY3RwX3BmX2luZXQgPSB7XFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwOTYtXFx0LmNvcHlfaXBfb3B0aW9ucyA9IHNjdHBfdjRfY29weV9pcF9vcHRpb25zLFxcbm5ldC9zY3RwL3Byb3RvY29sLmM6MTA5NzpcXHQuYWYgICAgICAgICAgICA9IFxcdTAwMjZzY3RwX2FmX2luZXRcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEwOTgtfTtcXG4tLVxcbm5ldC9zY3RwL3Byb3RvY29sLmM9MTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCBzY3RwX3Byb3RvY29sID0ge1xcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMTU3LS8qIElQdjQgYWRkcmVzcyByZWxhdGVkIGZ1bmN0aW9ucy4gICovXFxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMTU4OnN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2FmX2luZXQgPSB7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMTU5LVxcdC5zYV9mYW1pbHlcXHQgICA9IEFGX0lORVQsXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jPTEyMzE9c3RhdGljIHZvaWQgc2N0cF92NF9wZl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEyMzQtXFx0c2N0cF9yZWdpc3Rlcl9wZihcXHUwMDI2c2N0cF9wZl9pbmV0LCBQRl9JTkVUKTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jOjEyMzU6XFx0c2N0cF9yZWdpc3Rlcl9hZihcXHUwMDI2c2N0cF9hZl9pbmV0KTtcXG5uZXQvc2N0cC9wcm90b2NvbC5jLTEyMzYtfVxcbi0tXFxubmV0L3NjdHAvcHJvdG9jb2wuYz0xMjM4PXN0YXRpYyB2b2lkIHNjdHBfdjRfcGZfZXhpdCh2b2lkKVxcbm5ldC9zY3RwL3Byb3RvY29sLmMtMTIzOS17XFxubmV0L3NjdHAvcHJvdG9jb2wuYzoxMjQwOlxcdGxpc3RfZGVsKFxcdTAwMjZzY3RwX2FmX2luZXQubGlzdCk7XFxubmV0L3NjdHAvcHJvdG9jb2wuYy0xMjQxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDY6NTkuNTA5NTI3NDg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODQwMDAwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZCBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gRnJvbSB0aGVyZSwgSSdsbCBkcmlsbCBkb3duLlxuXG5HaXZlbiB0aGF0IEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgSVB2NCBhbmQgSVB2NiwgSSBzaG91bGQgYWxzbyBpbW1lZGlhdGVseSBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhlc2Ugd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgbW9yZSBncmFudWxhciBvcHRpb25zIHNwZWNpZmljIHRvIGVhY2ggcHJvdG9jb2wuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyB0aGVyZTogdGhpbmdzIGxpa2UgZmVhdHVyZXMsIHJvdXRpbmcgdGFibGVzLCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgYWxsIHRoZSByZXN0LiBJdCdzIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIHF1aWNrbHkgYXNzZXNzaW5nIGFuZC9vciBtb2RpZnlpbmcga2VybmVsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgY29uZmlndXJhYmxlIGNob2ljZXMgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGtlcm5lbC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjU2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MDEuNDkzNTI5OTU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTU0MTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMzkwMiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0LzgwMi9mZGRpLmMtMi0vKlxcbm5ldC84MDIvZmRkaS5jOjM6ICogSU5FVFxcdFxcdEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWFxcbm5ldC84MDIvZmRkaS5jOjQ6ICpcXHRcXHRvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgQlNEIFNvY2tldFxcbm5ldC84MDIvZmRkaS5jLTUtICpcXHRcXHRpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC5cXG4tLVxcbm5ldC84MDIxcS92bGFuLmMtMi0vKlxcbm5ldC84MDIxcS92bGFuLmM6MzogKiBJTkVUXFx0XFx0ODAyLjFRIFZMQU5cXG5uZXQvODAyMXEvdmxhbi5jLTQtICpcXHRcXHRFdGhlcm5ldC10eXBlIGRldmljZSBoYW5kbGluZy5cXG4tLVxcbm5ldC84MDIxcS92bGFuX2NvcmUuYz01MTU9c3RhdGljIGludCB2bGFuX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTIzLVxcdGlmIChwdHlwZSlcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmM6NTI0OlxcdFxcdGVyciA9IElORElSRUNUX0NBTExfSU5FVChwdHlwZS1cXHUwMDNlY2FsbGJhY2tzLmdyb19jb21wbGV0ZSxcXG5uZXQvODAyMXEvdmxhbl9jb3JlLmMtNTI1LVxcdFxcdFxcdFxcdFxcdCBpcHY2X2dyb19jb21wbGV0ZSwgaW5ldF9ncm9fY29tcGxldGUsXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0yLS8qIC0qLSBsaW51eC1jIC0qLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjM6ICogSU5FVFxcdFxcdDgwMi4xUSBWTEFOXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNC0gKlxcdFxcdEV0aGVybmV0LXR5cGUgZGV2aWNlIGhhbmRsaW5nLlxcbi0tXFxubmV0LzlwL0tjb25maWc9MTk9Y29uZmlnIE5FVF85UF9GRFxcbm5ldC85cC9LY29uZmlnLTIwLVxcdGRlZmF1bHQgTkVUXzlQXFxubmV0LzlwL0tjb25maWc6MjE6XFx0aW1wbHkgSU5FVFxcbm5ldC85cC9LY29uZmlnLTIyLVxcdGltcGx5IFVOSVhcXG4tLVxcbm5ldC85cC9LY29uZmlnPTUyPWNvbmZpZyBORVRfOVBfUkRNQVxcbm5ldC85cC9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xcbm5ldC85cC9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCI5UCBSRE1BIFRyYW5zcG9ydCAoRXhwZXJpbWVudGFsKVxcXCJcXG4tLVxcbm5ldC85cC90cmFuc19mZC5jPTg1MD1zdGF0aWMgaW50IHA5X2JpbmRfcHJpdnBvcnQoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC85cC90cmFuc19mZC5jLTg1NS1cXHRzdG9yLnNzX2ZhbWlseSA9IHNvY2stXFx1MDAzZW9wcy1cXHUwMDNlZmFtaWx5O1xcbm5ldC85cC90cmFuc19mZC5jOjg1NjpcXHRpZiAoc3Rvci5zc19mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQvOXAvdHJhbnNfZmQuYy04NTctXFx0XFx0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2c3RvciktXFx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpO1xcbi0tXFxubmV0LzlwL3RyYW5zX2ZkLmMtODYwLVxcdGZvciAocG9ydCA9IHA5X2lwcG9ydF9yZXN2X21heDsgcG9ydCBcXHUwMDNlPSBwOV9pcHBvcnRfcmVzdl9taW47IHBvcnQtLSkge1xcbm5ldC85cC90cmFuc19mZC5jOjg2MTpcXHRcXHRpZiAoc3Rvci5zc19mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQvOXAvdHJhbnNfZmQuYy04NjItXFx0XFx0XFx0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2c3RvciktXFx1MDAzZXNpbl9wb3J0ID0gaHRvbnMoKHVzaG9ydClwb3J0KTtcXG4tLVxcbm5ldC85cC90cmFuc19yZG1hLmM9NTE0PXN0YXRpYyBpbnQgcDlfcmRtYV9iaW5kX3ByaXZwb3J0KHN0cnVjdCBwOV90cmFuc19yZG1hICpyZG1hKVxcbi0tXFxubmV0LzlwL3RyYW5zX3JkbWEuYy01MTYtXFx0c3RydWN0IHNvY2thZGRyX2luIGNsID0ge1xcbm5ldC85cC90cmFuc19yZG1hLmM6NTE3OlxcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG5uZXQvOXAvdHJhbnNfcmRtYS5jLTUxOC1cXHRcXHQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSksXFxuLS1cXG5uZXQvOXAvdHJhbnNfcmRtYS5jPTUzNz1yZG1hX2NyZWF0ZV90cmFucyhzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbm5ldC85cC90cmFuc19yZG1hLmMtNTc3LVxcdC8qIFJlc29sdmUgdGhlIHNlcnZlcidzIGFkZHJlc3MgKi9cXG5uZXQvOXAvdHJhbnNfcmRtYS5jOjU3ODpcXHRyZG1hLVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbm5ldC85cC90cmFuc19yZG1hLmMtNTc5LVxcdHJkbWEtXFx1MDAzZWFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5fYXRvbihhZGRyKTtcXG4tLVxcbm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZy0xMzUtXFxubmV0L0tjb25maWc6MTM2OmlmIElORVRcXG5uZXQvS2NvbmZpZy0xMzctc291cmNlIFxcXCJuZXQvaXB2NC9LY29uZmlnXFxcIlxcbi0tXFxubmV0L0tjb25maWc9MTQwPXNvdXJjZSBcXFwibmV0L21wdGNwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMTQxLVxcbm5ldC9LY29uZmlnOjE0MjplbmRpZiAjIGlmIElORVRcXG5uZXQvS2NvbmZpZy0xNDMtXFxuLS1cXG5uZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIzMy1cXHRkZXBlbmRzIG9uIEJSSURHRVxcbm5ldC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L0tjb25maWctMjM1LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWctMzYyLVxcdGJvb2wgXFxcImVuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlxcXCJcXG5uZXQvS2NvbmZpZzozNjM6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L0tjb25maWctMzY0LVxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4tLVxcbm5ldC9LY29uZmlnPTM4Nj1jb25maWcgTkVUX1BLVEdFTlxcbm5ldC9LY29uZmlnLTM4Ny1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEdlbmVyYXRvciAoVVNFIFdJVEggQ0FVVElPTilcXFwiXFxubmV0L0tjb25maWc6Mzg4OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubmV0L0tjb25maWctMzg5LVxcdGhlbHBcXG4tLVxcbm5ldC9LY29uZmlnPTQwMT1jb25maWcgTkVUX0RST1BfTU9OSVRPUlxcbm5ldC9LY29uZmlnLTQwMi1cXHR0cmlzdGF0ZSBcXFwiTGVnYWN5IG5ldHdvcmsgcGFja2V0IGRyb3AgYWxlcnRpbmcgc2VydmljZVxcXCJcXG5uZXQvS2NvbmZpZzo0MDM6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFRSQUNFUE9JTlRTXFxubmV0L0tjb25maWctNDA0LVxcdGhlbHBcXG4tLVxcbm5ldC9LY29uZmlnPTQ1Mz1jb25maWcgTFdUVU5ORUxfQlBGXFxubmV0L0tjb25maWctNDU0LVxcdGJvb2wgXFxcIkV4ZWN1dGUgQlBGIHByb2dyYW0gYXMgcm91dGUgbmV4dGhvcCBhY3Rpb25cXFwiXFxubmV0L0tjb25maWc6NDU1OlxcdGRlcGVuZHMgb24gTFdUVU5ORUwgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbm5ldC9LY29uZmlnLTQ1Ni1cXHRkZWZhdWx0IHkgaWYgTFdUVU5ORUw9eVxcbi0tXFxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxubmV0L0tjb25maWctNDc2LVxcdGRlZl90cmlzdGF0ZSBQSFlMSUJcXG5uZXQvS2NvbmZpZzo0Nzc6XFx0ZGVwZW5kcyBvbiBQSFlMSUIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbm5ldC9LY29uZmlnLTQ3OC1cXG4tLVxcbm5ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuLS1cXG5uZXQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG5uZXQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcXHRcXHRcXHRcXHQrPSBpcHY2L1xcbi0tXFxubmV0L2F0bS9LY29uZmlnPTIyPWNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxubmV0L2F0bS9LY29uZmlnOjI0OlxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG5uZXQvYXRtL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZz0zND1jb25maWcgQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkJyaWRnZSBMb29wIEF2b2lkYW5jZVxcXCJcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zNy1cXHRzZWxlY3QgQ1JDMTZcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc9NDc9Y29uZmlnIEJBVE1BTl9BRFZfREFUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00OC1cXHRib29sIFxcXCJEaXN0cmlidXRlZCBBUlAgVGFibGVcXFwiXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0OTpcXHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnPTU3PWNvbmZpZyBCQVRNQU5fQURWX01DQVNUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cXHRib29sIFxcXCJNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXFxcIlxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NTk6XFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFxcdTAwMjZcXHUwMDI2IElORVQgXFx1MDAyNlxcdTAwMjYgIShCUklER0U9bSBcXHUwMDI2XFx1MDAyNiBCQVRNQU5fQURWPXkpXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02MC1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xMDM1PWludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTE3Ni1cXHRcXHR9XFxubmV0L2JwZi90ZXN0X3J1bi5jOjExNzc6XFx0XFx0c2stXFx1MDAzZXNrX2ZhbWlseSA9IEFGX0lORVQ7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTExNzgtXFx0XFx0c2stXFx1MDAzZXNrX3Jjdl9zYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMTg2LVxcdFxcdH1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTE4NzpcXHRcXHRzay1cXHUwMDNlc2tfZmFtaWx5ID0gQUZfSU5FVDY7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTExODgtXFx0XFx0c2stXFx1MDAzZXNrX3Y2X3Jjdl9zYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE1Nzg9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjIyLVxcdHN3aXRjaCAoY3R4LmZhbWlseSkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjIzOlxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYyNC1cXHRcXHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXFx1MDAzZWxvY2FsX2lwNDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjI4LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjI5OlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2MzAtXFx0XFx0Y3R4LnY2LmRhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVxcdTAwM2Vsb2NhbF9pcDY7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTcyMT1zdGF0aWMgaW50IHZlcmlmeV9hbmRfY29weV9ob29rX3N0YXRlKHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzM0LVxcdFxcdHN3aXRjaCAoc3RhdGUtXFx1MDAzZWhvb2spIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTczNTpcXHRcXHRjYXNlIE5GX0lORVRfUFJFX1JPVVRJTkc6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3MzYtXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWluID0gZGV2O1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzM3LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzM4OlxcdFxcdGNhc2UgTkZfSU5FVF9MT0NBTF9JTjpcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTczOS1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlaW4gPSBkZXY7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDAtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE3NDE6XFx0XFx0Y2FzZSBORl9JTkVUX0ZPUldBUkQ6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDItXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWluID0gZGV2O1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDQtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE3NDU6XFx0XFx0Y2FzZSBORl9JTkVUX0xPQ0FMX09VVDpcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc0Ni1cXHRcXHRcXHRzdGF0ZS1cXHUwMDNlb3V0ID0gZGV2O1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzQ3LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzQ4OlxcdFxcdGNhc2UgTkZfSU5FVF9QT1NUX1JPVVRJTkc6XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NDktXFx0XFx0XFx0c3RhdGUtXFx1MDAzZW91dCA9IGRldjtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNzc2PWludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc4My1cXHRcXHQucGYgPSBORlBST1RPX0lQVjQsXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE3ODQ6XFx0XFx0Lmhvb2sgPSBORl9JTkVUX0xPQ0FMX09VVCxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTc4NS1cXHR9O1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE4MzUtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE4MzY6XFx0aWYgKGhvb2tfc3RhdGUuaG9vayAhPSBORl9JTkVUX0xPQ0FMX09VVCkge1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xODM3LVxcdFxcdGlmIChzaXplIFxcdTAwM2MgRVRIX0hMRU4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSlcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZz0zNj1jb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zOC1cXHRkZXBlbmRzIG9uIEJSSURHRVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIElORVRcXG5uZXQvYnJpZGdlL0tjb25maWctNDAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTI3PXZvaWQgYnJfcmVjYWxjdWxhdGVfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTQxLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00My1zdGF0aWMgdm9pZCBicl9hcnBfc2VuZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTcxLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy03My1cXHQgICAgKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApIHx8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NzY9aW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTY4LVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxNjk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3MC1cXHQgICAgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz00MD1zdGF0aWMgc2l6ZV90IF9fYnJfcnBvcnRzX29uZV9zaXplKHZvaWQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTQ0LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAvKiBNREJBX1JPVVRFUl9QQVRUUl9UWVBFICovXFxubmV0L2JyaWRnZS9icl9tZGIuYzo0NTpcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICsgLyogTURCQV9ST1VURVJfUEFUVFJfSU5FVF9USU1FUiAqL1xcbm5ldC9icmlkZ2UvYnJfbWRiLmM6NDY6XFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArIC8qIE1EQkFfUk9VVEVSX1BBVFRSX0lORVQ2X1RJTUVSICovXFxubmV0L2JyaWRnZS9icl9tZGIuYy00Ny1cXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOyAgLyogTURCQV9ST1VURVJfUEFUVFJfVklEICovXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwPWludCBicl9ycG9ydHNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTExNS1cXHRcXHQgICAgKGhhdmVfaXA0X21jX3J0ciBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTE2OlxcdFxcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBNREJBX1JPVVRFUl9QQVRUUl9JTkVUX1RJTUVSLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE3LVxcdFxcdFxcdFxcdCBpcDRfdGltZXIpKSB8fFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE4LVxcdFxcdCAgICAoaGF2ZV9pcDZfbWNfcnRyIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMTk6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIE1EQkFfUk9VVEVSX1BBVFRSX0lORVQ2X1RJTUVSLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTIwLVxcdFxcdFxcdFxcdCBpcDZfdGltZXIpKSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MzgtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1Mzk6XFx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsIHN0YXRlLVxcdTAwM2VuZXQsIHN0YXRlLVxcdTAwM2Vzaywgc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQwLVxcdFxcdHNrYi1cXHUwMDNlZGV2LCBOVUxMLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01NjgtICogICAgb3JpZ2luYWwgc2tiLiAgVGhlIG1hY3ZsYW4gcnggaGFuZGxlciB0aGVuIHJldHVybnMgUlhfSEFORExFUl9QQVNTLlxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTY5OiAqIDUuIE5vcm1hbCBjb25udHJhY2sgaG9va3MgKGluIE5GX0lORVRfTE9DQUxfSU4pIGNvbmZpcm0gdGhlIG9yaWcgc2tiLlxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTcwLSAqXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzIwLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzIxOlxcdE5GX0hPT0socGYsIE5GX0lORVRfRk9SV0FSRCwgc3RhdGUtXFx1MDAzZW5ldCwgTlVMTCwgc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzIyLVxcdFxcdGJybmZfZ2V0X2xvZ2ljYWxfZGV2KHNrYiwgc3RhdGUtXFx1MDAzZWluLCBzdGF0ZS1cXHUwMDNlbmV0KSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTI1PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk2My1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk2NDpcXHRORl9IT09LKHBmLCBORl9JTkVUX1BPU1RfUk9VVElORywgc3RhdGUtXFx1MDAzZW5ldCwgc3RhdGUtXFx1MDAzZXNrLCBza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NjUtXFx0XFx0TlVMTCwgcmVhbG91dGRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTcxLS8qIElQL1NBQk9UQUdFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTcyOi8qIERvbid0IGhhbmQgbG9jYWxseSBkZXN0aW5lZCBwYWNrZXRzIHRvIFBGX0lORVQoNikvUFJFX1JPVVRJTkdcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3My0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgYnJfbmZfb3BzW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwNzYtXFx0XFx0LnBmID0gTkZQUk9UT19JUFY0LFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTA3NzpcXHRcXHQuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDc4LVxcdFxcdC5wcmlvcml0eSA9IE5GX0lQX1BSSV9GSVJTVCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA4Mi1cXHRcXHQucGYgPSBORlBST1RPX0lQVjYsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDgzOlxcdFxcdC5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORyxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwODQtXFx0XFx0LnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYz0xNjI9dW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nX2lwdjYodm9pZCAqcHJpdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xODItXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE4MzpcXHRORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QUkVfUk9VVElORywgc3RhdGUtXFx1MDAzZW5ldCwgc3RhdGUtXFx1MDAzZXNrLCBza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE4NC1cXHRcXHRza2ItXFx1MDAzZWRldiwgTlVMTCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmZfY29yZS5jPTUyPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7XFxubmV0L2JyaWRnZS9icl9uZl9jb3JlLmM6NTM6XFx0LmZhbWlseVxcdFxcdD0gQUZfSU5FVCxcXG5uZXQvYnJpZGdlL2JyX25mX2NvcmUuYy01NC1cXHQudXBkYXRlX3BtdHVcXHQ9IGZha2VfdXBkYXRlX3BtdHUsXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTE4OT1jb25maWcgQlJJREdFX0VCVF9BUlBSRVBMWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTkwLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGFycCByZXBseSB0YXJnZXQgc3VwcG9ydFxcXCJcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE5MTpcXHRkZXBlbmRzIG9uIEJSSURHRV9ORl9FQlRBQkxFUyBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTItXFx0aGVscFxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYz0yNTg5PXN0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgZWJ0X3NvY2tvcHRzID0ge1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmM6MjU5MDpcXHQucGZcXHRcXHQ9IFBGX0lORVQsXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYy0yNTkxLVxcdC5zZXRfb3B0bWluXFx0PSBFQlRfQkFTRV9DVEwsXFxuLS1cXG5uZXQvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfTElCXFxubmV0L2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGNvcmUgbGlicmFyeVxcXCJcXG5uZXQvY2VwaC9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L2NlcGgvS2NvbmZpZy01LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxubmV0L2NlcGgvZGVjb2RlLmM9MTUyPXN0YXRpYyBpbnQgZ2V0X3NvY2thZGRyX2VuY29kaW5nX2xlbihzYV9mYW1pbHlfdCBmYW1pbHkpXFxuLS1cXG5uZXQvY2VwaC9kZWNvZGUuYy0xNjAtXFx0c3dpdGNoIChmYW1pbHkpIHtcXG5uZXQvY2VwaC9kZWNvZGUuYzoxNjE6XFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9jZXBoL2RlY29kZS5jLTE2Mi1cXHRcXHRyZXR1cm4gc2l6ZW9mKHUuc2luKTtcXG5uZXQvY2VwaC9kZWNvZGUuYzoxNjM6XFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQvY2VwaC9kZWNvZGUuYy0xNjQtXFx0XFx0cmV0dXJuIHNpemVvZih1LnNpbjYpO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTY0PWNvbnN0IGNoYXIgKmNlcGhfcHJfYWRkcihjb25zdCBzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE3NS1cXHRzd2l0Y2ggKHNzLnNzX2ZhbWlseSkge1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE3NjpcXHRjYXNlIEFGX0lORVQ6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTc3LVxcdFxcdHNucHJpbnRmKHMsIE1BWF9BRERSX1NUUl9MRU4sIFxcXCIoJWQpJXBJNDolaHVcXFwiLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTgxLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjE4MjpcXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTE4My1cXHRcXHRzbnByaW50ZihzLCBNQVhfQUREUl9TVFJfTEVOLCBcXFwiKCVkKVslcEk2Y106JWh1XFxcIixcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTExNzg9Ym9vbCBjZXBoX2FkZHJfaXNfYmxhbmsoY29uc3Qgc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTg0LVxcdHN3aXRjaCAoc3Muc3NfZmFtaWx5KSB7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTE4NTpcXHRjYXNlIEFGX0lORVQ6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTE4Ni1cXHRcXHRyZXR1cm4gYWRkcjQtXFx1MDAzZXNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMTg3OlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTE4OC1cXHRcXHRyZXR1cm4gaXB2Nl9hZGRyX2FueShhZGRyNik7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXIuYz0xMTk1PWludCBjZXBoX2FkZHJfcG9ydChjb25zdCBzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTExOTctXFx0c3dpdGNoIChnZXRfdW5hbGlnbmVkKFxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyLnNzX2ZhbWlseSkpIHtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMTk4OlxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMTk5LVxcdFxcdHJldHVybiBudG9ocyhnZXRfdW5hbGlnbmVkKFxcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyKS1cXHUwMDNlc2luX3BvcnQpKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMjAwOlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIwMS1cXHRcXHRyZXR1cm4gbnRvaHMoZ2V0X3VuYWxpZ25lZChcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW42X3BvcnQpKTtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTEyMDY9dm9pZCBjZXBoX2FkZHJfc2V0X3BvcnQoc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgKmFkZHIsIGludCBwKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIwOC1cXHRzd2l0Y2ggKGdldF91bmFsaWduZWQoXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KSkge1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMDk6XFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMTAtXFx0XFx0cHV0X3VuYWxpZ25lZChodG9ucyhwKSwgXFx1MDAyNigoc3RydWN0IHNvY2thZGRyX2luICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW5fcG9ydCk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIxMS1cXHRcXHRicmVhaztcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzoxMjEyOlxcdGNhc2UgQUZfSU5FVDY6XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIxMy1cXHRcXHRwdXRfdW5hbGlnbmVkKGh0b25zKHApLCBcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW42X3BvcnQpO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9MTIyMT1zdGF0aWMgaW50IGNlcGhfcHRvbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHN0cnVjdCBjZXBoX2VudGl0eV9hZGRyICphZGRyLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIyNi1cXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh1OCAqKVxcdTAwMjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyKS1cXHUwMDNlc2luX2FkZHIuc19hZGRyLCBkZWxpbSwgaXBlbmQpKSB7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM6MTIyNzpcXHRcXHRwdXRfdW5hbGlnbmVkKEFGX0lORVQsIFxcdTAwMjZhZGRyLVxcdTAwM2Vpbl9hZGRyLnNzX2ZhbWlseSk7XFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMTIyOC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTEyMzEtXFx0aWYgKGluNl9wdG9uKHN0ciwgbGVuLCAodTggKilcXHUwMDI2KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIpLVxcdTAwM2VzaW42X2FkZHIuczZfYWRkciwgZGVsaW0sIGlwZW5kKSkge1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjEyMzI6XFx0XFx0cHV0X3VuYWxpZ25lZChBRl9JTkVUNiwgXFx1MDAyNmFkZHItXFx1MDAzZWluX2FkZHIuc3NfZmFtaWx5KTtcXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy0xMjMzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9NDY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDc6aWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9NYWtlZmlsZS00OC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz02OT1icGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTEwMi1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxMDM6XFx0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTA0LVxcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz0xNjE9X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTc3LVxcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTc4OlxcdGNhc2UgQUZfSU5FVDpcXG5uZXQvY29yZS9icGZfa3NvY2suYy0xNzktXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4MC1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9icGZfa3NvY2suYzoxODE6XFx0Y2FzZSBBRl9JTkVUNjpcXG5uZXQvY29yZS9icGZfa3NvY2suYy0xODItXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NDI1PXN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnIHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDMwLS8qIFRoZSByZXBseSB3aWxsIGJlIGxpa2U6XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MzE6ICogSU5FVF9ESUFHX0JQRl9TS19TVE9SQUdFUyAobmxhX25lc3QpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MzItICpcXHRTS19ESUFHX0JQRl9TVE9SQUdFIChubGFfbmVzdClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NTY4PXN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfZGlhZ19wdXRfYWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNTcxLXtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjU3MjpcXHQvKiBzdGdfYXJyYXlfdHlwZSAoZS5nLiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTKSAqL1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNTczLVxcdHVuc2lnbmVkIGludCBkaWFnX3NpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NjI0PWludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dChzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI4LXtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjYyOTpcXHQvKiBzdGdfYXJyYXlfdHlwZSAoZS5nLiBJTkVUX0RJQUdfQlBGX1NLX1NUT1JBR0VTKSAqL1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjMwLVxcdHVuc2lnbmVkIGludCBkaWFnX3NpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTYyNTY9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX29uZV9jb3JlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcGZtZW1hbGxvYylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYyNjMtXFx0aWYgKHB0X3ByZXYpXFxubmV0L2NvcmUvZGV2LmM6NjI2NDpcXHRcXHRyZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQocHRfcHJldi1cXHUwMDNlZnVuYywgaXB2Nl9yY3YsIGlwX3Jjdiwgc2tiLFxcbm5ldC9jb3JlL2Rldi5jLTYyNjUtXFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlZGV2LCBwdF9wcmV2LCBvcmlnX2Rldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3JlY2VpdmVfc2tiX2xpc3RfcHR5cGUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTYzMDYtXFx0aWYgKHB0X3ByZXYtXFx1MDAzZWxpc3RfZnVuYyAhPSBOVUxMKVxcbm5ldC9jb3JlL2Rldi5jOjYzMDc6XFx0XFx0SU5ESVJFQ1RfQ0FMTF9JTkVUKHB0X3ByZXYtXFx1MDAzZWxpc3RfZnVuYywgaXB2Nl9saXN0X3JjdixcXG5uZXQvY29yZS9kZXYuYy02MzA4LVxcdFxcdFxcdFxcdCAgIGlwX2xpc3RfcmN2LCBoZWFkLCBwdF9wcmV2LCBvcmlnX2Rldik7XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0yMi0jZGVmaW5lIElORElSRUNUX0NBTExfTVQoZiwgZjIsIGYxLCAuLi4pIFxcXFxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoyMzpcXHRJTkRJUkVDVF9DQUxMX0lORVQoZiwgZjIsIGYxLCBfX1ZBX0FSR1NfXylcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0yNC0jZWxzZVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9ODQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmaWJfcnVsZV9wb2xpY3lbRlJBX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY3LVxcdFtGUkFfRFBPUlRfUkFOR0VdID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9wb3J0X3JhbmdlKSB9LFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjg2ODpcXHRbRlJBX0RTQ1BdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElORVRfRFNDUF9NQVNLIFxcdTAwM2VcXHUwMDNlIDIpLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg2OS1cXHRbRlJBX0ZMT1dMQUJFTF0gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg3Mi1cXHRbRlJBX0RQT1JUX01BU0tdID0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4NzM6XFx0W0ZSQV9EU0NQX01BU0tdID0gTkxBX1BPTElDWV9NQVNLKE5MQV9VOCwgSU5FVF9EU0NQX01BU0sgXFx1MDAzZVxcdTAwM2UgMiksXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODc0LX07XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMzc9c2tfZmlsdGVyX3RyaW1fY2FwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGNhcClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTE1MS1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTUyOlxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfSU5FVF9JTkdSRVNTKHNrLCBza2IpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTE1My1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTYxNT1pbnQgc2tfcmV1c2Vwb3J0X2F0dGFjaF9icGYodTMyIHVmZCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTYzOC1cXHRcXHQgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkgfHxcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjM5OlxcdFxcdCAgICAoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmM6MTY0MDpcXHRcXHQgICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTY0MS1cXHRcXHRcXHRlcnIgPSAtRU5PVFNVUFA7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMjcxPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyOTUtXFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBkc3QpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjIyOTY6XFx0fSBlbHNlIGlmIChuaC1cXHUwMDNlbmhfZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjI5Ny1cXHRcXHRnb3RvIG91dF9kcm9wO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjM0Ny1cXHRcXHRuZWlnaCA9IGlwX25laWdoX2Zvcl9ndyhydCwgc2tiLCBcXHUwMDI2aXNfdjZndyk7XFxubmV0L2NvcmUvZmlsdGVyLmM6MjM0ODpcXHR9IGVsc2UgaWYgKG5oLVxcdTAwM2VuaF9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5uZXQvY29yZS9maWx0ZXIuYy0yMzQ5LVxcdFxcdGlmICh1bmxpa2VseSghaXB2Nl9tb2RfZW5hYmxlZCgpKSkge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjM1NC1cXHRcXHRpc192Nmd3ID0gdHJ1ZTtcXG5uZXQvY29yZS9maWx0ZXIuYzoyMzU1OlxcdH0gZWxzZSBpZiAobmgtXFx1MDAzZW5oX2ZhbWlseSA9PSBBRl9JTkVUKSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjM1Ni1cXHRcXHRuZWlnaCA9IGlwX25laWdoX2d3NChkZXYsIG5oLVxcdTAwM2VpcHY0X25oKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTI0MjQ9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS19XFxubmV0L2NvcmUvZmlsdGVyLmM6MjQzMDojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDMxLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDg5OT1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYnBmX3R1bm5lbF9rZXlfYWYodTY0IGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MDAte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5MDE6XFx0cmV0dXJuIGZsYWdzIFxcdTAwMjYgQlBGX0ZfVFVOSU5GT19JUFY2ID8gQUZfSU5FVDYgOiBBRl9JTkVUO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MDItfVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDkwND1CUEZfQ0FMTF80KGJwZl9za2JfZ2V0X3R1bm5lbF9rZXksIHN0cnVjdCBza19idWZmICosIHNrYiwgc3RydWN0IGJwZl90dW5uZWxfa2V5ICosIHRvLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDkzMS1cXHRcXHRcXHQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYzo0OTMyOlxcdFxcdFxcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSAhPSBBRl9JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5MzMtXFx0XFx0XFx0XFx0Z290byBlcnJfY2xlYXI7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01NzExPXN0YXRpYyBib29sIHNrX2FsbG93c19zb2xfaXBfc29ja29wdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01NzEzLVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU3MTQ6XFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MTUtXFx0XFx0cmV0dXJuIHRydWU7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTcxNjpcXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3MTctXFx0XFx0LyogQWxsb3cgZ2V0dGluZy9zZXR0aW5nIHNvY2tvcHQgZm9yIHBvc3NpYmxlIGlwdjQtbWFwcGVkIGlwdjYgc29ja2V0LiAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTc1MD1zdGF0aWMgaW50IHNvbF9pcHY2X3NvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3NTMte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU3NTQ6XFx0aWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU3Nzc9c3RhdGljIGludCBfX2JwZl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODQtXFx0XFx0cmV0dXJuIHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTc4NTpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4Ni1cXHRcXHRyZXR1cm4gc29sX2lwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4OC1cXHRcXHRyZXR1cm4gc29sX2lwdjZfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTc4OTpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU3OTAtXFx0XFx0cmV0dXJuIHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01ODA4PXN0YXRpYyBpbnQgX19icGZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01ODE5LVxcdFxcdGVyciA9IHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCB0cnVlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1ODIwOlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMS1cXHRcXHRlcnIgPSBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTgyMjpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMy1cXHRcXHRlcnIgPSBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCB0cnVlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYxMzY9QlBGX0NBTExfNShicGZfc29ja19vcHNfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjE0MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MTQyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfVENQIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZmlsdGVyLmMtNjE0My1cXHQgICAgb3B0bmFtZSBcXHUwMDNlPSBUQ1BfQlBGX1NZTiBcXHUwMDI2XFx1MDAyNiBvcHRuYW1lIFxcdTAwM2M9IFRDUF9CUEZfU1lOX01BQykge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjE3OD1CUEZfQ0FMTF8yKGJwZl9zb2NrX29wc19jYl9mbGFnc19zZXQsIHN0cnVjdCBicGZfc29ja19vcHNfa2VybiAqLCBicGZfc29jayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYxODYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjE4NzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lORVQpIHx8ICFza19mdWxsc29jayhzaykpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjE4OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyMDM9QlBGX0NBTExfMyhicGZfYmluZCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsIHN0cnVjdCBzb2NrYWRkciAqLCBhZGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS17XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIwNjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy02MjA3LVxcdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cXHUwMDNlc2s7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjEzLVxcdFxcdHJldHVybiBlcnI7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIxNDpcXHRpZiAoYWRkci1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQpIHtcXG5uZXQvY29yZS9maWx0ZXIuYy02MjE1LVxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjIxOlxcdH0gZWxzZSBpZiAoYWRkci1cXHUwMDNlc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMi1cXHRcXHRpZiAoYWRkcl9sZW4gXFx1MDAzYyBTSU42X0xFTl9SRkMyMTMzKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzMC1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6NjIzMTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02MjMyLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzowMS41NzUwNzUyMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwMTQyMjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGlmIHRoZXJlJ3MgYW55dGhpbmcgbmV3IG9yIGFsdGVyZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXQgbXkgZGlzcG9zYWwsIGVzcGVjaWFsbHkgaWYgSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHNwZWNpZmljIHJlZ2FyZGluZywgc2F5LCBuZXcgZmVhdHVyZXMsIGNoYW5nZXMgaW4gZGVmYXVsdCBiZWhhdmlvciwgb3IgdHJvdWJsZXNob290aW5nIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEtjb25maWcgaXMgdGhlIGZpcnN0IHN0b3AgZm9yIHVuZGVyc3RhbmRpbmcgdGhlc2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMwOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjAzLjE3NjUwMDU5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NjA3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MDMuMjI1NDYzMTgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MzcwMjIxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU29ja2V0IENyZWF0aW9uIExvZ2ljIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLiBUaGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gc2hvd3MgdGhhdCBgQ09ORklHX0lORVRgIGlzIGVzc2VudGlhbCBmb3IgYG5ldC9pcHY0L2FmX2luZXQuY2AgYW5kIGBDT05GSUdfSVBWNmAgZm9yIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gVGhhdCdzIHN0YW5kYXJkIGFuZCBleHBlY3RlZCwgc2V0dGluZyB0aGUgc3RhZ2UgZm9yIHdoZXJlIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQuXG5cbk15IGZvY3VzIGlzIG9uIGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgIOKAkyB0aGUgc29ja2V0IGNyZWF0aW9uIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBrZXkgdGFyZ2V0cyBvZiB0aGlzIHVwZGF0ZS5cblxuTm93LCBsZXQncyB2ZXJpZnkuIFRoZSBzeXN0ZW0gaW5kaWNhdGVzIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCB0aGF0IGJvdGggYElORVRgIGFuZCBgSVBWNmAgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIFRoZSBzYW1lIGZvY3VzIHN5bWJvbHMgcmVtYWluIGNvbnNpc3RlbnQ6IGBpbmV0X2NyZWF0ZWAgYW5kIGBpbmV0Nl9jcmVhdGVgLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuXG5cblRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhYm91dCBpbXByb3ZpbmcgdGhlIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzIGluIGJvdGggSVB2NCBhbmQgSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgY3J1Y2lhbCBzdGVwIG9mIG1hbmFnaW5nIG1vZHVsZSByZWZlcmVuY2VzIHVzaW5nIGB0cnlfbW9kdWxlX2dldGAgYW5kIHJlbGVhc2luZyB0aGVtIHdoZW4gbmVlZGVkLiBUaGVzZSBhcmUgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSBzdGFuZGFyZCBgc29ja2V0KClgIHN5c3RlbSBjYWxscywgbWFraW5nIHRoZW0gY3JpdGljYWwgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBkZXRhaWxzLiBIb2xkIG9uLCBgaW5ldF9jcmVhdGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgYnV0IGl0J3MgKnN0aWxsKiBhZGRyZXNzYWJsZSB3aXRoaW4gdGhlIHZtbGludXggaW1hZ2UgaW4gYG5ldC9pcHY0L2FmX2luZXQuY2AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBpbmV0Nl9jcmVhdGVgIGluIGBuZXQvaXB2Ni9hZl9pbmV0Ni5jYC4gVGhpcyBpc24ndCB1bnVzdWFsLCBidXQgY29uZmlybXMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBtYW5pcHVsYXRpb24uXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gbW92ZSBvbiBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAyMiwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MDYuNjYyNDg4NTg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5NTg4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2NyZWF0ZVwiLFxuICAgIFwiaW5ldDZfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHNvY2tldCBpbml0aWFsaXphdGlvbiBhbmQgcHJvdG9jb2wgbW9kdWxlIHJlZmVyZW5jZSB0cmFja2luZyBpbiBpbmV0X2NyZWF0ZSBhbmQgaW5ldDZfY3JlYXRlIGZvciBJUHY0IGFuZCBJUHY2IHNvY2tldHMuIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHNvY2tldCBjcmVhdGlvbiBzeXNjYWxscyAoZS5nLiBzb2NrZXQoQUZfSU5FVCwgLi4uKSAvIHNvY2tldChBRl9JTkVUNiwgLi4uKSksIG1ha2luZyB0aGVtIHJlbGV2YW50IGFuZCBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5ldF9jcmVhdGVcIixcbiAgICBcImluZXQ2X2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBzb2NrZXQgaW5pdGlhbGl6YXRpb24gYW5kIHByb3RvY29sIG1vZHVsZSByZWZlcmVuY2UgdHJhY2tpbmcgaW4gaW5ldF9jcmVhdGUgYW5kIGluZXQ2X2NyZWF0ZSBmb3IgSVB2NCBhbmQgSVB2NiBzb2NrZXRzLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzb2NrZXQgY3JlYXRpb24gc3lzY2FsbHMgKGUuZy4gc29ja2V0KEFGX0lORVQsIC4uLikgLyBzb2NrZXQoQUZfSU5FVDYsIC4uLikpLCBtYWtpbmcgdGhlbSByZWxldmFudCBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjA2Ljc1MzQ1ODI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzU2OTQ0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzowNi43NTQxMjQ5OTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjQzNTAyMTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJiNjQyZjA1ZjU1ZGY5YTcxNzFmZGExM2JkZjcyYzIyODgzNDk1M2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDIyOjQ2OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jXG5pbmRleCAzMmQwMDZjMWE4ZWVkLi42Yjg3ZjBiNmNjMjIyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jXG4rKysgYi9uZXQvaXB2NC9hZl9pbmV0LmNcbkBAIC0yNjMsNiArMjYzLDcgQEAgc3RhdGljIGludCBpbmV0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgcHJvdG8gKmFuc3dlcl9wcm90O1xuK1x0c3RydWN0IG1vZHVsZSAqYW5zd2VyX293bmVyO1xuIFx0dW5zaWduZWQgY2hhciBhbnN3ZXJfZmxhZ3M7XG4gXHRpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDtcbiBcdGludCBlcnI7XG5AQCAtMzIyLDkgKzMyMywxNiBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXG4gXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4gXG4tXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cdTAwM2Vwcm90O1xuK1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4rXHRpZiAoYW5zd2VyX293bmVyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHxcbitcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4rXHR9XG4rXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFdBUk5fT04oIWFuc3dlcl9wcm90LVx1MDAzZXNsYWIpO1xuQEAgLTMzMiw3ICszNDAsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ZXJyID0gLUVOT01FTTtcbiBcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9JTkVULCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XG4gXHRpZiAoIXNrKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdGVyciA9IDA7XG4gXHRpZiAoSU5FVF9QUk9UT1NXX1JFVVNFIFx1MDAyNiBhbnN3ZXJfZmxhZ3MpXG5AQCAtMzk4LDYgKzQwNiw4IEBAIHN0YXRpYyBpbnQgaW5ldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiBcdH1cbitvdXRfbW9kdWxlX3B1dDpcbitcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIG91dF9yY3VfdW5sb2NrOlxuQEAgLTQwNiw3ICs0MTYsNyBAQCBzdGF0aWMgaW50IGluZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIG91dF9za19yZWxlYXNlOlxuIFx0c2tfY29tbW9uX3JlbGVhc2Uoc2spO1xuIFx0c29jay1cdTAwM2VzayA9IE5VTEw7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X21vZHVsZV9wdXQ7XG4gfVxuIFxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5pbmRleCAyODI5MTJhMTE5OTk5Li4xZGY4YjJlN2UyNDM3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuY1xuKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xuQEAgLTExMCw2ICsxMTAsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcdHN0cnVjdCBpbmV0X3Byb3Rvc3cgKmFuc3dlcjtcbiBcdHN0cnVjdCBwcm90byAqYW5zd2VyX3Byb3Q7XG4rXHRzdHJ1Y3QgbW9kdWxlICphbnN3ZXJfb3duZXI7XG4gXHR1bnNpZ25lZCBjaGFyIGFuc3dlcl9mbGFncztcbiBcdGludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwO1xuIFx0aW50IGVycjtcbkBAIC0xNjcsOSArMTY4LDE2IEBAIHN0YXRpYyBpbnQgaW5ldDZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuIFx0ICAgICFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXG4gXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4gXG4tXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRhbnN3ZXJfcHJvdCA9IGFuc3dlci1cdTAwM2Vwcm90O1xuK1x0YW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7XG4gXHRhbnN3ZXJfZmxhZ3MgPSBhbnN3ZXItXHUwMDNlZmxhZ3M7XG4rXHRpZiAoYW5zd2VyX293bmVyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHxcbitcdCAgICAgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKSB7XG4rXHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4rXHRcdGdvdG8gb3V0X3JjdV91bmxvY2s7XG4rXHR9XG4rXHRzb2NrLVx1MDAzZW9wcyA9IGFuc3dlci1cdTAwM2VvcHM7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFdBUk5fT04oIWFuc3dlcl9wcm90LVx1MDAzZXNsYWIpO1xuQEAgLTE3Nyw3ICsxODUsNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBcdGVyciA9IC1FTk9CVUZTO1xuIFx0c2sgPSBza19hbGxvYyhuZXQsIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBhbnN3ZXJfcHJvdCwga2Vybik7XG4gXHRpZiAoIXNrKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0Z290byBvdXRfbW9kdWxlX3B1dDtcbiBcbiBcdHNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTtcbiBcbkBAIC0yMDEsNyArMjA5LDcgQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRzay1cdTAwM2Vza19mYW1pbHlcdFx0PSBQRl9JTkVUNjtcbiBcdHNrLVx1MDAzZXNrX3Byb3RvY29sXHRcdD0gcHJvdG9jb2w7XG4gXG4tXHRzay1cdTAwM2Vza19iYWNrbG9nX3Jjdlx0PSBhbnN3ZXItXHUwMDNlcHJvdC1cdTAwM2ViYWNrbG9nX3JjdjtcbitcdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2XHQ9IGFuc3dlcl9wcm90LVx1MDAzZWJhY2tsb2dfcmN2O1xuIFxuIFx0aW5ldF9zayhzayktXHUwMDNlcGluZXQ2ID0gbnAgPSBpbmV0Nl9za19nZW5lcmljKHNrKTtcbiBcdG5wLVx1MDAzZWhvcF9saW1pdFx0PSAtMTtcbkBAIC0yNTEsNiArMjU5LDggQEAgc3RhdGljIGludCBpbmV0Nl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfc2tfcmVsZWFzZTtcbiBcdH1cbitvdXRfbW9kdWxlX3B1dDpcbitcdG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKTtcbiBvdXQ6XG4gXHRyZXR1cm4gZXJyO1xuIG91dF9yY3VfdW5sb2NrOlxuQEAgLTI1OSw3ICsyNjksNyBAQCBzdGF0aWMgaW50IGluZXQ2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbiBvdXRfc2tfcmVsZWFzZTpcbiBcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcbiBcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuLVx0Z290byBvdXQ7XG4rXHRnb3RvIG91dF9tb2R1bGVfcHV0O1xuIH1cbiBcbiBpbnQgX19pbmV0Nl9iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzowNi43NTQxMjY0NTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODkzMzcyMzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogTW9kdWxlIFJlZmVyZW5jZSBDb3VudGluZyBpbiBpbmV0X2NyZWF0ZS9pbmV0Nl9jcmVhdGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBjaGFuZ2VzIHRvIGBuZXQvaXB2NC9hZl9pbmV0LmNgIGFuZCBgbmV0L2lwdjYvYWZfaW5ldDYuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgaW50cm9kdWNpbmcgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gYGluZXRfY3JlYXRlYCBhbmQgYGluZXQ2X2NyZWF0ZWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGluY2x1ZGVzIGB0cnlfbW9kdWxlX2dldGAgYW5kIGBtb2R1bGVfcHV0YCBjYWxscywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cblJpZ2h0LCBzbyB3ZSdyZSBncmFiYmluZyBgYW5zd2VyX293bmVyID0gYW5zd2VyX3Byb3QtXHUwMDNlb3duZXI7YCB3aGljaCBpcyBsaWtlbHkgdGhlIG1vZHVsZSB0aGF0IHByb3ZpZGVzIHRoZSB1bmRlcmx5aW5nIHByb3RvY29sLiBUaGVuLCB0aGUgY3J1Y2lhbCBjaGVjazogYGlmIChhbnN3ZXJfb3duZXIgXHUwMDI2XHUwMDI2IChtb2R1bGVfaXNfY29taW5nKGFuc3dlcl9vd25lcikgfHwgIXRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcikpKWAuIFRoaXMgc3VnZ2VzdHMgd2UncmUgYXR0ZW1wdGluZyB0byBtYW5hZ2UgdGhlIG1vZHVsZSdzIGxpZmV0aW1lIGJhc2VkIG9uIHdoZXRoZXIgaXQncyBhbHJlYWR5IFwiY29taW5nXCIgKGxpa2VseSBiZWluZyBsb2FkZWQpIGFuZCB3aGV0aGVyIHdlIGNhbiBzdWNjZXNzZnVsbHkgYWNxdWlyZSBhIHJlZmVyZW5jZS4gSWYgdGhhdCBjaGVjayBmYWlscywgdGhlIHNvY2tldCBjcmVhdGlvbiBzaG91bGQgZmFpbCwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBtb2R1bGUgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cblxuVGhlIHN1Y2Nlc3NmdWwgcGF0aCBpcyB3aGF0J3MgbW9yZSBpbnRlcmVzdGluZy4gV2UncmUgZG9pbmcgdGhlIHNvY2tldCBjcmVhdGlvbiBhbmQgdGhlbiwgYXQgdGhlIGVuZCDigJMgb3IgaW4gZXJyb3IgcGF0aHMgKmFmdGVyKiB0aGUgYHJjdV9yZWFkX3VubG9ja2Ag4oCTIHRoZXJlJ3MgYSBgbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzICp3aHkqIGF0IHRoZSBlbmQ/IFNob3VsZG4ndCB0aGUgbW9kdWxlIHJlZmVyZW5jZSBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2Ygc29ja2V0IHVzZT8gUGVyaGFwcyB0aGUgc29ja2V0IG9wZXJhdGlvbnMgb3IgdGhlIHByb3RvY29sIGl0c2VsZiBob2xkIHJlZmVyZW5jZXMsIG9yIG1heWJlIGV2ZW4gYHNrX2FsbG9jYCBpcyBrZWVwaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBvd25lci4gSXQgbG9va3MgbGlrZSBpdCBpcyBgc2tfYWxsb2NgLiBBbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgaW5ldF9jcmVhdGVgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYHNrX2FsbG9jYCB0byBjb25maXJtIHRoaXMuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaXMgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMjo0NzoxNS42ODc4NTM3MzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzc5MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2FsbG9jXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2suYz0yMjM3PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIyNTMtXFx0aWYgKHNrICE9IE5VTEwpIHtcXG5uZXQvY29yZS9zb2NrLmM6MjI1NDpcXHRcXHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxcbm5ldC9jb3JlL3NvY2suYy0yMjU1LVxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MjI3Mz1zdGF0aWMgdm9pZCBza19wcm90X2ZyZWUoc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjMwMS0gKi9cXG5uZXQvY29yZS9zb2NrLmM6MjMwMjpzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcXG5uZXQvY29yZS9zb2NrLmMtMjMwMy1cXHRcXHQgICAgICBzdHJ1Y3QgcHJvdG8gKnByb3QsIGludCBrZXJuKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTIzMzQtXFxubmV0L2NvcmUvc29jay5jOjIzMzU6XFx0XFx0bWVtX2Nncm91cF9za19hbGxvYyhzayk7XFxubmV0L2NvcmUvc29jay5jOjIzMzY6XFx0XFx0Y2dyb3VwX3NrX2FsbG9jKFxcdTAwMjZzay1cXHUwMDNlc2tfY2dycF9kYXRhKTtcXG5uZXQvY29yZS9zb2NrLmMtMjMzNy1cXHRcXHRzb2NrX3VwZGF0ZV9jbGFzc2lkKFxcdTAwMjZzay1cXHUwMDNlc2tfY2dycF9kYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MTUuNzM0MjM3MzUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDU4ODYzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBxdWljayBzY2FuIG9mIGBuZXQvY29yZS9zb2NrLmNgLlxuXG4qKkRpdmluZyBpbnRvIFNvY2tldCBBbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgc29ja2V0cyBhcmUgYWN0dWFsbHkgYnJvdWdodCB0byBsaWZlIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZm9jdXNpbmcgb24gYHNrX2FsbG9jYCBhbmQgYHNrX3Byb3RfYWxsb2NgIOKAkyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gRnJvbSBhIGhpZ2ggbGV2ZWwsIEknbSBleHBlY3RpbmcgYHNrX2FsbG9jYCB0byBoYW5kbGUgdGhlIGxvdy1sZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgaXRzZWxmLCB0aGUgYmFzaWMgY29udGFpbmVyLiBJdCdsbCBwcm9iYWJseSBiZSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvbW1vbiBmaWVsZHMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IHBvb2xzLCBzbGFiIGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgaW50ZXJuYWwgbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkgZHVyaW5nIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4gSSBhbHNvIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIHRvIGRlYWwgd2l0aCBtZW1vcnkgZmFpbHVyZXMsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgdGhhdC5cblxuVGhlbiwgdGhlcmUgaXMgYHNrX3Byb3RfYWxsb2NgLCB0aGlzIG9uZSBpcyBtb3JlIGludGVyZXN0aW5nIGFzIGl0IHNob3VsZCBiZSB0aGUgYWxsb2NhdG9yIGZvciB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBzb2NrZXQuIEl0J2xsIG5lZWQgdG8gYWxsb2NhdGUgdGhlIHByb3RvY29sLXNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3Rpbmcgc2luY2UgdGhhdCBsaWtlbHkgaGFzIGl0cyBvd24gc2V0IG9mIGZpZWxkcywgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSBldmVuIGl0cyBvd24gaW50ZXJuYWwgYWxsb2NhdGlvbiBsb2dpYy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhIHByb3RvY29sLXNwZWNpZmljIHN0cnVjdHVyZSB0byBiZSBwYXNzZWQgaW50byBpdCBieSB0aGUgdXBwZXIgbGF5ZXJzLiBUaGF0IHdvdWxkIGFsbG93IHRoaW5ncyBsaWtlIFVEUCBvciBUQ1AgdG8gYWxsb2NhdGUgdGhlaXIgc3BlY2lmaWMgc3RydWN0dXJlcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJhc2ljIHNvY2tldCBzdHJ1Y3R1cmUuIEkgYWxzbyBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBoYW5kbGUgYW55IHByb3RvY29sLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjaywgdGhlcmUnbGwgbGlrZWx5IGJlIGNhbGxiYWNrcyBvciBmdW5jdGlvbiBwb2ludGVycyBzZXQgdXAgaGVyZSB0byBwb2ludCB0byBwcm90b2NvbC1zcGVjaWZpYyBvcGVyYXRpb25zIOKAkyBzZW5kLCByZWNlaXZlLCBldGMuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIGFsbCBsaW5rZWQgdG9nZXRoZXIuIEFuZCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBiYXNpYyBzb2NrZXQgYW5kIHRoaXMgcHJvdG9jb2wtc3BlY2lmaWMgcGFydCBpcyBlc3RhYmxpc2hlZC5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoZSBjb3JlIHNvY2tldCBzdHJ1Y3R1cmUgYW5kIHRoZSBwcm90b2NvbC1zcGVjaWZpYyBkYXRhIGFyZSBsaW5rZWQgdG9nZXRoZXIsIGFuZCB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHRoZWlyIGNsZWFudXAgd2hlbiBhIHNvY2tldCBpcyBjbG9zZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSdtIGNsZWFyIG9uIGhvdyByZXNvdXJjZXMgYXJlIG1hbmFnZWQgdG8gYXZvaWQgYW55IGxlYWtzLCBlc3BlY2lhbGx5IGluIGEgaGlnaC1jb25jdXJyZW5jeSBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGFsbCBiZSBjcml0aWNhbCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBzb2NrZXQgY3JlYXRpb24gaW1wYWN0cyBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MTguOTQwMTI2NzI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzNTpcXHR9XFxuMjIzNjpcXHRcXG4yMjM3OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfcHJvdF9hbGxvYyhzdHJ1Y3QgcHJvdG8gKnByb3QsIGdmcF90IHByaW9yaXR5LFxcbjIyMzg6XFx0XFx0XFx0aW50IGZhbWlseSlcXG4yMjM5OlxcdHtcXG4yMjQwOlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4yMjQxOlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpzbGFiO1xcbjIyNDI6XFx0XFxuMjI0MzpcXHRcXHRzbGFiID0gcHJvdC1cXHUwMDNlc2xhYjtcXG4yMjQ0OlxcdFxcdGlmIChzbGFiICE9IE5VTEwpIHtcXG4yMjQ1OlxcdFxcdFxcdHNrID0ga21lbV9jYWNoZV9hbGxvYyhzbGFiLCBwcmlvcml0eSBcXHUwMDI2IH5fX0dGUF9aRVJPKTtcXG4yMjQ2OlxcdFxcdFxcdGlmICghc2spXFxuMjI0NzpcXHRcXHRcXHRcXHRyZXR1cm4gc2s7XFxuMjI0ODpcXHRcXHRcXHRpZiAod2FudF9pbml0X29uX2FsbG9jKHByaW9yaXR5KSlcXG4yMjQ5OlxcdFxcdFxcdFxcdHNrX3Byb3RfY2xlYXJfbnVsbHMoc2ssIHByb3QtXFx1MDAzZW9ial9zaXplKTtcXG4yMjUwOlxcdFxcdH0gZWxzZVxcbjIyNTE6XFx0XFx0XFx0c2sgPSBrbWFsbG9jKHByb3QtXFx1MDAzZW9ial9zaXplLCBwcmlvcml0eSk7XFxuMjI1MjpcXHRcXG4yMjUzOlxcdFxcdGlmIChzayAhPSBOVUxMKSB7XFxuMjI1NDpcXHRcXHRcXHRpZiAoc2VjdXJpdHlfc2tfYWxsb2Moc2ssIGZhbWlseSwgcHJpb3JpdHkpKVxcbjIyNTU6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4yMjU2OlxcdFxcbjIyNTc6XFx0XFx0XFx0aWYgKCF0cnlfbW9kdWxlX2dldChwcm90LVxcdTAwM2Vvd25lcikpXFxuMjI1ODpcXHRcXHRcXHRcXHRnb3RvIG91dF9mcmVlX3NlYztcXG4yMjU5OlxcdFxcdH1cXG4yMjYwOlxcdFxcbjIyNjE6XFx0XFx0cmV0dXJuIHNrO1xcbjIyNjI6XFx0XFxuMjI2MzpcXHRvdXRfZnJlZV9zZWM6XFxuMjI2NDpcXHRcXHRzZWN1cml0eV9za19mcmVlKHNrKTtcXG4yMjY1OlxcdG91dF9mcmVlOlxcbjIyNjY6XFx0XFx0aWYgKHNsYWIgIT0gTlVMTClcXG4yMjY3OlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShzbGFiLCBzayk7XFxuMjI2ODpcXHRcXHRlbHNlXFxuMjI2OTpcXHRcXHRcXHRrZnJlZShzayk7XFxuMjI3MDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMjcxOlxcdH1cXG4yMjcyOlxcdFxcbjIyNzM6XFx0c3RhdGljIHZvaWQgc2tfcHJvdF9mcmVlKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNvY2sgKnNrKVxcbjIyNzQ6XFx0e1xcbjIyNzU6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKnNsYWI7XFxuMjI3NjpcXHRcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcXG4yMjc3OlxcdFxcbjIyNzg6XFx0XFx0b3duZXIgPSBwcm90LVxcdTAwM2Vvd25lcjtcXG4yMjc5OlxcdFxcdHNsYWIgPSBwcm90LVxcdTAwM2VzbGFiO1xcbjIyODA6XFx0XFxuMjI4MTpcXHRcXHRjZ3JvdXBfc2tfZnJlZShcXHUwMDI2c2stXFx1MDAzZXNrX2NncnBfZGF0YSk7XFxuMjI4MjpcXHRcXHRtZW1fY2dyb3VwX3NrX2ZyZWUoc2spO1xcbjIyODM6XFx0XFx0c2VjdXJpdHlfc2tfZnJlZShzayk7XFxuMjI4NDpcXHRcXG4yMjg1OlxcdFxcdHNrX293bmVyX3B1dChzayk7XFxuMjI4NjpcXHRcXG4yMjg3OlxcdFxcdGlmIChzbGFiICE9IE5VTEwpXFxuMjI4ODpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoc2xhYiwgc2spO1xcbjIyODk6XFx0XFx0ZWxzZVxcbjIyOTA6XFx0XFx0XFx0a2ZyZWUoc2spO1xcbjIyOTE6XFx0XFx0bW9kdWxlX3B1dChvd25lcik7XFxuMjI5MjpcXHR9XFxuMjI5MzpcXHRcXG4yMjk0OlxcdC8qKlxcbjIyOTU6XFx0ICpcXHRza19hbGxvYyAtIEFsbCBzb2NrZXQgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIGhlcmVcXG4yMjk2OlxcdCAqXFx0QG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZVxcbjIyOTc6XFx0ICpcXHRAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHlcXG4yMjk4OlxcdCAqXFx0QHByaW9yaXR5OiBmb3IgYWxsb2NhdGlvbiAoJUdGUF9LRVJORUwsICVHRlBfQVRPTUlDLCBldGMpXFxuMjI5OTpcXHQgKlxcdEBwcm90OiBzdHJ1Y3QgcHJvdG8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbmV3IHNvY2sgaW5zdGFuY2VcXG4yMzAwOlxcdCAqXFx0QGtlcm46IGlzIHRoaXMgdG8gYmUgYSBrZXJuZWwgc29ja2V0P1xcbjIzMDE6XFx0ICovXFxuMjMwMjpcXHRzdHJ1Y3Qgc29jayAqc2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSxcXG4yMzAzOlxcdFxcdFxcdCAgICAgIHN0cnVjdCBwcm90byAqcHJvdCwgaW50IGtlcm4pXFxuMjMwNDpcXHR7XFxuMjMwNTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuMjMwNjpcXHRcXG4yMzA3OlxcdFxcdHNrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSB8IF9fR0ZQX1pFUk8sIGZhbWlseSk7XFxuMjMwODpcXHRcXHRpZiAoc2spIHtcXG4yMzA5OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19mYW1pbHkgPSBmYW1pbHk7XFxuMjMxMDpcXHRcXHRcXHQvKlxcbjIzMTE6XFx0XFx0XFx0ICogU2VlIGNvbW1lbnQgaW4gc3RydWN0IHNvY2sgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kXFxuMjMxMjpcXHRcXHRcXHQgKiB3aHkgd2UgbmVlZCBza19wcm90X2NyZWF0b3IgLWFjbWVcXG4yMzEzOlxcdFxcdFxcdCAqL1xcbjIzMTQ6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QgPSBzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MTguOTQwMzk5MTU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDMzMjUxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTW9kdWxlIFJlZmVyZW5jZSBDb3VudGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGluZXRfY3JlYXRlYCwgdGhlIGNvcmUgaXNzdWUgSSdtIHNlZWluZyBpcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGFuc3dlcl9wcm90YCBkdXJpbmcgbW9kdWxlIHVubG9hZGluZyBvciBsb2FkaW5nLiBTcGVjaWZpY2FsbHksIGJldHdlZW4gdGhlIGluaXRpYWwgYHJjdV9yZWFkX2xvY2soKWAgYW5kIHRoZSBgc2tfYWxsb2MoKWAgY2FsbCwgYGFuc3dlcl9wcm90YCBjb3VsZCBiZWNvbWUgaW5hY2Nlc3NpYmxlLiBUaGUgY3VycmVudCBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIGEgdHdvLXByb25nZWQgYXBwcm9hY2guXG5cbkZpcnN0LCBpdCBhZGRzIGEgYHRyeV9tb2R1bGVfZ2V0KGFuc3dlcl9vd25lcilgIHVuZGVyIHRoZSBSQ1UgbG9jaywgaW1tZWRpYXRlbHkgKmJlZm9yZSogdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFRoaXMgZW5zdXJlcyB0aGUgbW9kdWxlIGlzbid0IHVubG9hZGVkIHdoaWxlIHdlIG5lZWQgaXQuIFRoZW4sIGFmdGVyIHJlbGVhc2luZyB0aGUgUkNVIGxvY2ssIGl0IGNhbGxzIGBza19hbGxvYygpYCwgd2hpY2ggaXRzZWxmIGhhbmRsZXMgbW9kdWxlIHJlZmVyZW5jZSBjb3VudGluZyB0aHJvdWdoIGl0cyBvd24gYHRyeV9tb2R1bGVfZ2V0YCBhbmQgYG1vZHVsZV9wdXRgIG9uIGZyZWUsIGFuZCB0aGVuIGZpbmFsbHkgY2xlYW5zIHVwIHRoZSB0ZW1wb3JhcnkgcmVmZXJlbmNlIGF0IHRoZSBlbmQgaW4gYGluZXRfY3JlYXRlYCB3aXRoIGEgYG1vZHVsZV9wdXQoYW5zd2VyX293bmVyKWAuXG5cblRoZSBwYXRjaCBhbHNvIGNvcnJlY3RzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgaW4gYGluZXQ2X2NyZWF0ZWAgYnkgZml4aW5nIGEgc3VidGxlIGJ1ZyB3aGVyZSB0aGUgd3JvbmcgcG9pbnRlciB3YXMgYmVpbmcgdXNlZCB0byBhY2Nlc3MgYGJhY2tsb2dfcmN2YC4gVGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCwgZW5zdXJpbmcgdGhhdCB0aGUgY29ycmVjdCBgYW5zd2VyLVx1MDAzZXByb3RgIGlzIGFjY2Vzc2VkLlxuXG5Ob3csIGxldCdzIG1ldGhvZGljYWxseSBsb29rIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG4xLiAgKipVbmluaXRpYWxpemVkIE1lbW9yeS9CdWZmZXJzOioqIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgbWFuaXB1bGF0aW9uIG9mIHN0YWNrIG9yIGhlYXAgYnVmZmVycy5cbjIuICAqKlVzZXItU3BhY2UgRXhwb3N1cmU6KiogVGhlcmUncyBubyBrZXJuZWwgc3RydWN0dXJlIGRhdGEgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy5cbjMuICAqKkNvbmRpdGlvbmFsIExvZ2ljIFx1MDAyNiBVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBUaGUgY3J1Y2lhbCB2YXJpYWJsZSBgYW5zd2VyX293bmVyYCAqaXMqIGluaXRpYWxpemVkIGZyb20gYGFuc3dlcl9wcm90LVx1MDAzZW93bmVyYCwgZWxpbWluYXRpbmcgYSBwb3RlbnRpYWwgaXNzdWUuIENydWNpYWxseSwgaW4gKmFsbCogZXhpdCBwYXRocyBmcm9tIGBpbmV0X2NyZWF0ZWAgKmFmdGVyKiB0aGUgYHJjdV9yZWFkX3VubG9jaygpYCBjYWxsLCB0aGUgY29kZSBjYWxscyBgbW9kdWxlX3B1dChhbnN3ZXJfb3duZXIpYC4gSW1wb3J0YW50bHksIGBtb2R1bGVfcHV0KE5VTEwpYCBpcyBhIHNhZmUgbm8tb3AuIEFuZCwgb24gZXJyb3IgKmJlZm9yZSogdGhlIGByY3VfcmVhZF91bmxvY2soKWAsIHdlIHVubG9jayBSQ1UgYW5kIGV4aXQuXG40LiAgKipEYXRhIENvcGllcyB0byBVc2VyOioqIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXR5LlxuNS4gICoqQm91bmRzL0xlbmd0aCBJc3N1ZXM6KiogVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGxvb2sgc3VzcGVjdC5cbjYuICAqKk92ZXJhbGwgUHJvYmxlbToqKiBUaGUgcm9vdCBjYXVzZSBiZWluZyBmaXhlZCBpcyBhIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgdGhhdCBjYW4gbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBtb2R1bGUgbGlmZXRpbWUgaXNzdWVzLCBhcyB3ZWxsIGFzIGFuIFJDVSBhY2Nlc3MgcmFjZSBvbiBgYW5zd2VyYCBhZnRlciB0aGUgdW5sb2NrLlxuXG5GaW5hbGx5LCBJJ20gY29uZmlkZW50IHRoYXQgS0FTQU4gYW5kIGdlbmVyYWwgdGVzdGluZyB3aWxsIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlIHVubG9hZGluZyBpc3N1ZXMuIEtNU0FOIHNob3VsZCBkZXRlY3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIE15IHRob3JvdWdoIGFuYWx5c2lzIGZpbmRzIHRoYXQgbm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZCwgZXhwb3NlZCwgb3IgYWx0ZXJlZCBieSB0aGlzIHBhdGNoLiBBbmQgc2luY2UgYG1vZHVsZV9wdXQoTlVMTClgIGlzIGhhbmRsZWQgY29ycmVjdGx5IGJ5IHRoZSBrZXJuZWwgSSBzZWUgbm8gcmlzayBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDg0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MjMuOTgzNzI3NjQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE2NzM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG1vZHVsZV9wdXRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbW9kdWxlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbW9kdWxlL21haW4uYz05NDk9RVhQT1JUX1NZTUJPTCh0cnlfbW9kdWxlX2dldCk7XFxua2VybmVsL21vZHVsZS9tYWluLmMtOTUwLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjk1MTp2b2lkIG1vZHVsZV9wdXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTk1Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjI0LjAzNTkwMjIwNloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyODU3ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtb2R1bGVfcHV0YCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGBtb2R1bGVfcHV0YCBpbXBsZW1lbnRhdGlvbi4gSXQncyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3b3JrIGluIHRoZSBrZXJuZWwsIGFuZCBJIGtub3cgSSdsbCBwcm9iYWJseSBlbmNvdW50ZXIgYSB0cmlja3kgc2NlbmFyaW8gc29vbi4gTGV0J3Mgc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRlY3JlbWVudGluZyBvZiB0aGUgbW9kdWxlJ3MgdXNhZ2UgY291bnQgYW5kIHdoYXQgYXNzb2NpYXRlZCBhY3Rpb25zIGFyZSB0YWtlbiwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzY2VuYXJpb3MgaW52b2x2aW5nIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3Mgd2l0aGluIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHByb2Nlc3MgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIEknbSBhYm91dCB0byB3b3JrIHdpdGggaXMgc29saWQuIEknbGwgYWxzbyBiZSBjb25zaWRlcmluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgbGlrZSB0aGUgVkZTIGFuZCBkZXZpY2UgZHJpdmVycywgYW5kIGhvdyBgbW9kdWxlX3B1dGAgZW5zdXJlcyB0aGF0IG1vZHVsZXMgYXJlIHVubG9hZGVkIHNhZmVseSBhbmQgaW4gdGhlIHJpZ2h0IG9yZGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIG1lY2hhbmljcyBpcyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MjYuMDk4NzYzMjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MDpcXHRcXG4gOTUxOlxcdHZvaWQgbW9kdWxlX3B1dChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpXFxuIDk1MjpcXHR7XFxuIDk1MzpcXHRcXHRpbnQgcmV0O1xcbiA5NTQ6XFx0XFxuIDk1NTpcXHRcXHRpZiAobW9kdWxlKSB7XFxuIDk1NjpcXHRcXHRcXHRyZXQgPSBhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKFxcdTAwMjZtb2R1bGUtXFx1MDAzZXJlZmNudCk7XFxuIDk1NzpcXHRcXHRcXHRXQVJOX09OKHJldCBcXHUwMDNjIDApO1xcdC8qIEZhaWxlZCB0byBwdXQgcmVmY291bnQgKi9cXG4gOTU4OlxcdFxcdFxcdHRyYWNlX21vZHVsZV9wdXQobW9kdWxlLCBfUkVUX0lQXyk7XFxuIDk1OTpcXHRcXHR9XFxuIDk2MDpcXHR9XFxuIDk2MTpcXHRFWFBPUlRfU1lNQk9MKG1vZHVsZV9wdXQpO1xcbiA5NjI6XFx0XFxuIDk2MzpcXHQjZWxzZSAvKiAhQ09ORklHX01PRFVMRV9VTkxPQUQgKi9cXG4gOTY0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfdW5sb2FkX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbiA5NjU6XFx0e1xcbiA5NjY6XFx0fVxcbiA5Njc6XFx0XFxuIDk2ODpcXHRzdGF0aWMgaW50IHJlZl9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYilcXG4gOTY5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjI6NDc6MjYuMDk5MDIwOTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDEwMTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBgbW9kdWxlX3B1dChOVUxMKWAgdGhpbmcgaXMgYSBjb21wbGV0ZSBub24taXNzdWU7IGl0J3MgZGVzaWduZWQgdGhhdCB3YXkuIFRoYXQncyBnb29kLCBvbmUgbGVzcyB0aGluZyB0byB3b3JyeSBhYm91dC4gRGlnZ2luZyBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGV2ZXJ5dGhpbmcgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByaW1hcnkgZ29hbCBpcyBjbGVhcmx5IHRvIGFkZHJlc3MgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIG1vZHVsZSB1bmxvYWRpbmcgb3Igc29ja2V0IGNyZWF0aW9uLCBhbmQgaXQgZG9lcyB0aGlzIGJ5IGltcGxlbWVudGluZyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIHVzaW5nIGB0cnlfbW9kdWxlX2dldGAgYW5kIGBtb2R1bGVfcHV0YCBjYWxscyBpbiBgaW5ldF9jcmVhdGUoKWAgYW5kIGBpbmV0Nl9jcmVhdGUoKWAuXG5cblRoZSBwYXRjaCBhbHNvIGhhcyBhbiBpbXBvcnRhbnQgZml4IGZvciBgaW5ldDZfY3JlYXRlKClgIGJ5IG5vdCBkZXJlZmVyZW5jaW5nIGBhbnN3ZXJgIG91dHNpZGUgUkNVIGNyaXRpY2FsIHNlY3Rpb24uIFRoYXQncyBhIGNsYXNzaWMgYW5kIGNydWNpYWwgaW1wcm92ZW1lbnQgdGhhdCBtaXRpZ2F0ZXMgdGhlIHJpc2sgb2YgcmVhZGluZyBwb3RlbnRpYWxseSBzdGFsZSBkYXRhLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucyBoZXJlLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3cml0ZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLiBUaGUgbW9zdCBsaWtlbHkgYnVncyB3ZSBjb3VsZCBlbmNvdW50ZXIgbm93IGFyZSB0aGUgdHlwaWNhbCBsaWZldGltZSBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzIC0tIHRoZSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLCBvciB3b3JzZSwgbWVtb3J5IGxlYWtzLCBidXQgdGhvc2UgYXJlIGlzc3VlcyB0aGF0IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zIHNob3VsZCBmbGFnIGZhaXJseSBlYXNpbHkuIFRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS5cblxuSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcyBhbmFseXNpcywgc28gbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE0LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIyOjQ3OjI5LjE4OTEyNTY4MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgaW4gaW5ldF9jcmVhdGUoKSBhbmQgaW5ldDZfY3JlYXRlKCkgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggbW9kdWxlIHVubG9hZGluZyBhbmQgYWNjZXNzaW5nIFJDVS1wcm90ZWN0ZWQgc3RydWN0dXJlcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgdHJ5X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpIGNhbGxzIG9uIHRoZSBwcm90b2NvbCBvd25lciBhbmQgZW5zdXJlIGFuc3dlcl9wcm90IGlzIHVzZWQgcmF0aGVyIHRoYW4gZGVyZWZlcmVuY2luZyBhbnN3ZXIgb3V0c2lkZSByY3VfcmVhZF9sb2NrKCkuIFxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZGVhbCBleGNsdXNpdmVseSB3aXRoIG1vZHVsZSByZWZlcmVuY2UgbGlmZXRpbWVzIGFuZCBjb25jdXJyZW5jeS9VQUYgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IGluIGluZXRfY3JlYXRlKCkgYW5kIGluZXQ2X2NyZWF0ZSgpIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGFjY2Vzc2luZyBSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHRyeV9tb2R1bGVfZ2V0KCkgYW5kIG1vZHVsZV9wdXQoKSBjYWxscyBvbiB0aGUgcHJvdG9jb2wgb3duZXIgYW5kIGVuc3VyZSBhbnN3ZXJfcHJvdCBpcyB1c2VkIHJhdGhlciB0aGFuIGRlcmVmZXJlbmNpbmcgYW5zd2VyIG91dHNpZGUgcmN1X3JlYWRfbG9jaygpLiBcXG5cXG5UaGVzZSBtb2RpZmljYXRpb25zIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBtb2R1bGUgcmVmZXJlbmNlIGxpZmV0aW1lcyBhbmQgY29uY3VycmVuY3kvVUFGIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[1] Phase: Succeeded StartedAt: 2026-09-05 22:47:40 +0000 UTC FinishedAt: 2026-09-05 22:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 22:47:40 +0000 UTC FinishedAt: 2026-09-05 22:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2] Phase: Succeeded StartedAt: 2026-09-05 22:47:40 +0000 UTC FinishedAt: 2026-09-06 02:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 22:47:40 +0000 UTC FinishedAt: 2026-09-06 02:26:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 22:47:40 +0000 UTC FinishedAt: 2026-09-05 22:47:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 22:47:40 +0000 UTC FinishedAt: 2026-09-05 22:47:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowccjcj/series-workflowccjcj-convert-artifact-2164899193/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 22:47:50 +0000 UTC FinishedAt: 2026-09-05 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 22:47:50 +0000 UTC FinishedAt: 2026-09-05 23:04:25 +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:*b7d06088-9c88-490f-9fc5-7c61cba5f91a,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-workflowccjcj/series-workflowccjcj-convert-artifact-2164899193/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": "ba0cce62-82ac-4a9f-9839-c9624616395d", "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-workflowccjcj/series-workflowccjcj-build-action-522344087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 22:47:50 +0000 UTC FinishedAt: 2026-09-05 23:04:15 +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:*b7d06088-9c88-490f-9fc5-7c61cba5f91a,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-workflowccjcj/series-workflowccjcj-convert-artifact-2164899193/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": "ba0cce62-82ac-4a9f-9839-c9624616395d", "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-workflowccjcj/series-workflowccjcj-build-action-522344087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 23:04:25 +0000 UTC FinishedAt: 2026-09-05 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 23:04:25 +0000 UTC FinishedAt: 2026-09-05 23:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 23:04:25 +0000 UTC FinishedAt: 2026-09-05 23:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 23:04:25 +0000 UTC FinishedAt: 2026-09-05 23:04:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowccjcj/series-workflowccjcj-convert-artifact-548731980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 23:04:35 +0000 UTC FinishedAt: 2026-09-05 23:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 23:04:35 +0000 UTC FinishedAt: 2026-09-05 23:06:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba0cce62-82ac-4a9f-9839-c9624616395d,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-workflowccjcj/series-workflowccjcj-build-action-522344087/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-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 23:06:30 +0000 UTC FinishedAt: 2026-09-05 23:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 23:06:30 +0000 UTC FinishedAt: 2026-09-05 23:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 23:06:30 +0000 UTC FinishedAt: 2026-09-05 23:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 23:06:30 +0000 UTC FinishedAt: 2026-09-05 23:22:27 +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:*b7d06088-9c88-490f-9fc5-7c61cba5f91a,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-workflowccjcj/series-workflowccjcj-convert-artifact-548731980/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": "ee082df6-7639-4921-b2eb-8261995d4725", "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-workflowccjcj/series-workflowccjcj-build-action-51333736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 23:06:30 +0000 UTC FinishedAt: 2026-09-05 23:22:17 +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:*b7d06088-9c88-490f-9fc5-7c61cba5f91a,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-workflowccjcj/series-workflowccjcj-convert-artifact-548731980/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": "ee082df6-7639-4921-b2eb-8261995d4725", "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-workflowccjcj/series-workflowccjcj-build-action-51333736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 23:22:27 +0000 UTC FinishedAt: 2026-09-05 23:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 23:22:27 +0000 UTC FinishedAt: 2026-09-05 23:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 23:22:27 +0000 UTC FinishedAt: 2026-09-05 23:24:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 23:22:27 +0000 UTC FinishedAt: 2026-09-05 23:24:14 +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:*ee082df6-7639-4921-b2eb-8261995d4725,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-workflowccjcj/series-workflowccjcj-build-action-51333736/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-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-06 02:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-06 02:26:07 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"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:*ba0cce62-82ac-4a9f-9839-c9624616395d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee082df6-7639-4921-b2eb-8261995d4725,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-workflowccjcj/series-workflowccjcj-build-action-522344087/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-workflowccjcj/series-workflowccjcj-build-action-51333736/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-05 23:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-05 23:24:28 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"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-workflowccjcj/series-workflowccjcj-convert-artifact-3618790325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-05 23:24:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-05 23:24:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 23:24:24 +0000 UTC FinishedAt: 2026-09-05 23:24:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 23:24:34 +0000 UTC FinishedAt: 2026-09-06 02:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowccjcj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["inet_create","inet6_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2b4707a149a55e8fa75c9ef32b359d60f470a566","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"3af4895a-9f5e-47de-8d10-caec89995530","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 23:24:34 +0000 UTC FinishedAt: 2026-09-06 02:25:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba0cce62-82ac-4a9f-9839-c9624616395d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee082df6-7639-4921-b2eb-8261995d4725,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-workflowccjcj/series-workflowccjcj-build-action-522344087/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-workflowccjcj/series-workflowccjcj-build-action-51333736/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-workflowccjcj/series-workflowccjcj-convert-artifact-3618790325/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,}