Name: series-workflowwbn7v Phase: Succeeded StartedAt: 2026-08-07 10:46:42 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[0] Phase: Succeeded StartedAt: 2026-08-07 10:46:42 +0000 UTC FinishedAt: 2026-08-07 10:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 10:46:42 +0000 UTC FinishedAt: 2026-08-07 10:50:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "79ccab76-aba2-45b1-a91e-6713f5be341d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "tipc_sk_rcv", "tipc_sendstream", "tipc_sendmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX3NrX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRzdHJlYW0mIzM0OywKICAgICYjMzQ7dGlwY19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBvcHRpb25hbGx5IHNwbGljZSB0aGUgc29ja2V0JiMzOTtzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc29ja2V0IGJhY2tsb2cgcHJvY2Vzc2luZyB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCB4bWl0cSBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBhIGNhbGwgdG8gdGlwY19ub2RlX3htaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXR3b3JraW5nIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6NDg6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMTZkODQ0ZmM4Y2E1NyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTE1Niw3ICYjNDM7MTU2LDggQEAgc3RhdGljIGludCB0aXBjX3NrX2luc2VydChzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xuIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spO1xuJiM0MztzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4gc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcbkBAIC01NjAsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG4gXHRcdFx0XHRcdCAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7XG4gXG4gXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cbi1cdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuJiM0MztcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xuIFx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXG4gXHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSk7XG4gXG5AQCAtMTI2OCw3ICYjNDM7MTI2OSw4IEBAIHZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcbiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxuICAqL1xuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4mIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICYjNDM7MTMxMiwxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxuIFx0XHR0c2stXHUwMDNlcGt0X2NudCAmIzQzOz0gc2tiX3F1ZXVlX2xlbih0eHEpO1xuIFx0dHNrLVx1MDAzZXNudF91bmFja2VkICYjNDM7PSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoeG1pdHEgXHUwMDI2XHUwMDI2IGluX293bl9ub2RlKG5ldCwgZG5vZGUpKSB7XG4mIzQzO1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgJiM0MzsxMzc1LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0Z290byBleGl0O1xuIFxuIFx0XHR3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTtcbi1cdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkcikpO1xuJiM0MztcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTtcbiBcdFx0dHNrLVx1MDAzZXNudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpO1xuIFx0XHRpZiAodHNrLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19CTE9DS19GTE9XQ1RMKVxuIFx0XHRcdHRzay1cdTAwM2VzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTtcbkBAIC0yMTY1LDcgJiM0MzsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuJiM0MztcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgR1JPVVBfUFJPVE9DT0w6XG4gXHRcdHRpcGNfZ3JvdXBfcHJvdG9fcmN2KGdycCwgXHUwMDI2d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpO1xuQEAgLTIyNTYsNyAmIzQzOzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBUSVBDX0VTVEFCTElTSEVEOlxuIFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSkpXG4tXHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4mIzQzO1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfc2tfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfc2VuZHN0cmVhbSYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc29ja2V0IGJhY2tsb2cgcHJvY2Vzc2luZyB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCB4bWl0cSBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBhIGNhbGwgdG8gdGlwY19ub2RlX3htaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXR3b3JraW5nIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTA6NDg6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IGU1NjQzNDFlMDIxNmQuLjE2ZDg0NGZjOGNhNTcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0xNTYsNyAmIzQzOzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opOwogc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTsKLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spOwomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7CiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wczsKQEAgLTU2MCw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcikKIAkJCQkJICAgICF0c2tfY29ubl9jb25nKHRzaykpKTsKIAogCS8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqLwotCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTsKIAkvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi8KIAlfX3NrYl9xdWV1ZV9wdXJnZSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSk7CiAKQEAgLTEyNjgsNyAmIzQzOzEyNjksOCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsCiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlCiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spCiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKQogewogCXN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9ICZhbXA7dHNrLSZndDtzay5za193cml0ZV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCh0eHEpOwpAQCAtMTMxMCw2ICYjNDM7MTMxMiwxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQogCQl0c2stJmd0O3BrdF9jbnQgJiM0Mzs9IHNrYl9xdWV1ZV9sZW4odHhxKTsKIAl0c2stJmd0O3NudF91bmFja2VkICYjNDM7PSB0c2stJmd0O3NuZF9iYWNrbG9nOwogCXRzay0mZ3Q7c25kX2JhY2tsb2cgPSAwOwomIzQzOwomIzQzOwlpZiAoeG1pdHEgJmFtcDsmYW1wOyBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkgewomIzQzOwkJc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodHhxLCB4bWl0cSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLSZndDtwb3J0aWQpOwogCWlmIChyYyA9PSAtRUxJTktDT05HKQogCQl0c2stJmd0O2NvbmdfbGlua19jbnQgPSAxOwpAQCAtMTM2Nyw3ICYjNDM7MTM3NSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJZ290byBleGl0OwogCiAJCXdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7CiYjNDM7CQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpOwogCQl0c2stJmd0O3NudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpOwogCQlpZiAodHNrLSZndDtwZWVyX2NhcHMgJmFtcDsgVElQQ19CTE9DS19GTE9XQ1RMKQogCQkJdHNrLSZndDtzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTsKQEAgLTIxNjUsNyAmIzQzOzIxNzMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssCiAJCXNtcF93bWIoKTsKIAkJdHNrLSZndDtjb25nX2xpbmtfY250LS07CiAJCXdha2V1cCA9IHRydWU7Ci0JCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQlicmVhazsKIAljYXNlIEdST1VQX1BST1RPQ09MOgogCQl0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsICZhbXA7d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpOwpAQCAtMjI1Niw3ICYjNDM7MjI2NCw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBUSVBDX0VTVEFCTElTSEVEOgogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSkpCi0JCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7CiAJCS8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovCiAJCWlmIChsaWtlbHkoY29uX21zZyAmYW1wOyZhbXA7ICFlcnIgJmFtcDsmYW1wOyBwcG9ydCA9PSBvcG9ydCAmYW1wOyZhbXA7CiAJCQkgICBwbm9kZSA9PSBvbm9kZSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRJUEMgd2l0aCBhIE5ldyBUcmFuc21pdCBRdWV1ZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gYG5ldC90aXBjL3NvY2tldC5jYC4gVGhleSYjMzk7cmUgbW9kaWZ5aW5nIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIGFkZGluZyBhIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgcGFyYW1ldGVyLiBBbmQgdGhlIHJlYWwga2lja2VyPyBUaGV5JiMzOTtyZSBub3cgdXNpbmcgdGhpcyBgeG1pdHFgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgd2hlbiB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyB0aGUgbG9jYWwgbm9kZSDigJMgYGluX293bl9ub2RlKG5ldCwgZG5vZGUpYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbHRlcmluZyBob3cgVElQQywgdGhhdCBuZXR3b3JrIHByb3RvY29sIHdlIGFsbCBrbm93IGFuZCBsb3ZlIChhbmQgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIHNvY2tldCBBUEksIGBBRl9USVBDYCksIGhhbmRsZXMgaXRzIGludGVybmFsIHF1ZXVpbmcuCgpUaGlzIG1ha2VzIG1lIHRoaW5rOiBpdCYjMzk7cyBmdXp6aW5nIHRpbWUuIEFueSB0aW1lIHRoZXJlJiMzOTtzIGEgY2hhbmdlIHRoYXQgdG91Y2hlcyBhIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGxpa2UgdGhpcywgZXNwZWNpYWxseSBhIGNvcmUgcGFydCBvZiBpdHMgcXVldWluZyBtZWNoYW5pc21zLCB0aGVyZSYjMzk7cyB0aGUgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBUSVBDIHRvIG1ha2Ugc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBlbmFibGVkIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgYG5ldC90aXBjL0tjb25maWdgIGZvciBhbnl0aGluZyB0aGF0IGhhcyBgY29uZmlnIFRJUENgIGluIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSVBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnLTUtXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXG5uZXQvdGlwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjMtXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXG5uZXQvdGlwYy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjktXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcbm5ldC90aXBjL0tjb25maWctMzEtXHRib29sIFwmIzM0O0lQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cbm5ldC90aXBjL0tjb25maWctMzktXHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy01Mi1cbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xubmV0L3RpcGMvS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O1RJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjUKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSBsb29raW5nIGF0IGlzIGxhYmVsZWQgYFRJUENgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHNvIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHBvaW50cy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBwb2ludHMgdG8gYSBmdW5jdGlvbiBjYWxsZWQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCwgd2hpY2ggaXQgaGlnaGxpZ2h0cyBhcyBiZWluZyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBzY29wZSwgbWFraW5nIGl0IHBvdGVudGlhbGx5IG1vcmUgbG9jYWxpemVkIGluIGl0cyBpbXBhY3QuCgpUaGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzICpjYWxsZWQqIGZyb20uIEkgc2VlIGl0IGxpc3RlZCBhcyBiZWluZyBjYWxsZWQgYnkgYF9fdGlwY19zaHV0ZG93bmAsIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYW5kIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIGFzIHdlbGwuIEFyZSAqdGhleSogc3RhdGljPyBXaG8gY2FsbHMgKnRoZW0qPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgY2xhcmlmeSB0aGUgZnVuY3Rpb24mIzM5O3MgaW5mbHVlbmNlLCBhbmQgYWxsb3cgbWUgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHBvdGVudGlhbCBzY29wZSBvZiBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGlwY19zaHV0ZG93bnx0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2fHRpcGNfc2tfcHJvdG9fcmN2fHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz00MDM9c3RhdGljIGludCB0aXBjX3NrX3NvY2tfZXJyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvdXQpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNDMxLVx0d2hpbGUgKChyY18gPSAhKGNvbmRpdGlvbl8pKSkge1x0XHRcdFx0XHQgICAgICAgXFxcbm5ldC90aXBjL3NvY2tldC5jOjQzMjpcdFx0LyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0aXBjX3NrX3Byb3RvX3JjdigpICovICAgICAgICAgICAgXFxcbm5ldC90aXBjL3NvY2tldC5jLTQzMy1cdFx0c21wX3JtYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz01NDI9c3RhdGljIHZvaWQgdGlwY19za19jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNTQ5LS8qIENhbGxlciBzaG91bGQgaG9sZCBzb2NrZXQgbG9jayBmb3IgdGhlIHNvY2tldC4gKi9cbm5ldC90aXBjL3NvY2tldC5jOjU1MDpzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxubmV0L3RpcGMvc29ja2V0LmMtNTUxLXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02NDEtXHR0cmFjZV90aXBjX3NrX3JlbGVhc2Uoc2ssIE5VTEwsIFRJUENfRFVNUF9BTEwsIFwmIzM0OyBcJiMzNDspO1xubmV0L3RpcGMvc29ja2V0LmM6NjQyOlx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfRVJSX05PX1BPUlQpO1xubmV0L3RpcGMvc29ja2V0LmMtNjQzLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEyNzI9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI2LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MTMyNzogKiB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2IC0gcmVjZWl2ZSBhIGNvbm5lY3Rpb24gbW5nIHByb3RvY29sIG1lc3NhZ2Vcbm5ldC90aXBjL3NvY2tldC5jLTEzMjgtICogQHRzazogcmVjZWl2aW5nIHNvY2tldFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEzMzItICovXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzMzOnN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMTMzNC1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMTUxPXN0YXRpYyB2b2lkIHRpcGNfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE1NS1cbm5ldC90aXBjL3NvY2tldC5jOjIxNTY6c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxubmV0L3RpcGMvc29ja2V0LmMtMjE1Ny1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE2Ny1cdGNhc2UgQ09OTl9NQU5BR0VSOlxubmV0L3RpcGMvc29ja2V0LmM6MjE2ODpcdFx0dGlwY19za19jb25uX3Byb3RvX3Jjdih0c2ssIHNrYiwgaW5wdXRxLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMTY5LVx0XHRyZXR1cm47XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE5NS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjIxOTY6ICogdGlwY19za19maWx0ZXJfY29ubmVjdCAtIGNoZWNrIGluY29taW5nIG1lc3NhZ2UgZm9yIGEgY29ubmVjdGlvbi1iYXNlZCBzb2NrZXRcbm5ldC90aXBjL3NvY2tldC5jLTIxOTctICogQHRzazogVElQQyBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMjAxLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjIwMjpzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL3NvY2tldC5jLTIyMDMtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ2PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM2My1cdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcbm5ldC90aXBjL3NvY2tldC5jOjIzNjQ6XHRcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcdTAwMjZpbnB1dHEsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIzNjUtXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM3NS1cdFx0bGltaXQgPSByY3ZidWZfbGltaXQoc2ssIHNrYik7XG5uZXQvdGlwYy9zb2NrZXQuYzoyMzc2Olx0XHRpZiAoKHNrX2Nvbm4gXHUwMDI2XHUwMDI2ICF0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHRzaywgc2tiLCB4bWl0cSkpIHx8XG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc3LVx0XHQgICAgKCFza19jb25uIFx1MDAyNlx1MDAyNiBtc2dfY29ubmVjdGVkKGhkcikpIHx8XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjgwOD1zdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE4LVx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyODE5Olx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yODIwLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFNvY2tldCBGdW5jdGlvbiBDYWxsIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFRJUEMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIEZpcnN0LCBJIHNlZSB0aGF0IGJvdGggYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCB1bHRpbWF0ZWx5IGNhbGwgYF9fdGlwY19zaHV0ZG93bmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSBsaWtlbHkgZGlmZmVyZW50IGVudHJ5IHBvaW50cyB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIHNodXRkb3duIHByb2NlZHVyZS4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIHNlZW1zIHRvIGJlIHRoZSBrZXkgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUuIEl0IGNhbiByb3V0ZSB0byB0d28gcGxhY2VzLgoKVGhlIHByaW1hcnkgcmVjZWl2ZXIgcGF0aCBgdGlwY19za19maWx0ZXJfcmN2YCAtJmd0OyBgdGlwY19za19wcm90b19yY3ZgIC0mZ3Q7IGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCBsb29rcyBsaWtlIHRoZSBzdGFuZGFyZCBwYXRoIGZvciByZWNlaXZpbmcgZGF0YS4gVGhhdCYjMzk7cyBhIGNoYWluIG9mIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBzb2NrZXQgcHJvdG9jb2wsIHVsdGltYXRlbHkgaGFuZGxpbmcgdGhlIGluY29taW5nIHBhY2tldCBkYXRhLgoKQnV0LCBgdGlwY19za19maWx0ZXJfcmN2YCBjYW4gYWxzbyBjYWxsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgc28gdGhlcmUmIzM5O3MgYW5vdGhlciBjb25uZWN0aW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCB0YWtlcyB0aGlzIHJvdXRlLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgdGlwY19za19maWx0ZXJfcmN2YCBhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIGl0IHRvIGZ1bGx5IGdyYXNwIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZmlsdGVyX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTIzMTg9c3RhdGljIHVuc2lnbmVkIGludCByY3ZidWZfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIzMzUtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzM2OiAqIHRpcGNfc2tfZmlsdGVyX3JjdiAtIHZhbGlkYXRlIGluY29taW5nIG1lc3NhZ2Vcbm5ldC90aXBjL3NvY2tldC5jLTIzMzctICogQHNrOiBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzQ1LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjM0NjpzdGF0aWMgdm9pZCB0aXBjX3NrX2ZpbHRlcl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ny1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM1Ny1cbm5ldC90aXBjL3NvY2tldC5jOjIzNTg6XHR0cmFjZV90aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU5LVx0VElQQ19TS0JfQ0Ioc2tiKS1cdTAwM2VieXRlc19yZWFkID0gMDtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDExPXN0YXRpYyBpbnQgdGlwY19za19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQxOC1cbm5ldC90aXBjL3NvY2tldC5jOjI0MTk6XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQyMC1cdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0NTYtXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MjQ1NzpcdFx0XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgeG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQ1OC1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBQYWNrZXQgRW5xdWV1ZWluZyBpbiB0aGUgVElQQyBTb2NrZXQgTGF5ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYHRpcGNfc2tfZmlsdGVyX3JjdmAgaXMgYmVpbmcgaW52b2tlZCBieSB0d28ga2V5IGZ1bmN0aW9uczogYHRpcGNfc2tfYmFja2xvZ19yY3ZgIGFuZCBgdGlwY19za19lbnF1ZXVlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIGB0aXBjX3NrX2JhY2tsb2dfcmN2YCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGhhbmRsZXMgdGhlIHJlY2VwdGlvbiBvZiBwYWNrZXRzIHRoYXQgYXJlIHNpdHRpbmcgaW4gdGhlIGJhY2tsb2cgcXVldWUgZm9yIHRoZSBzb2NrZXQuIE1ha2VzIHNlbnNlLiBCdXQgYHRpcGNfc2tfZW5xdWV1ZWAgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHBsYWNpbmcgcGFja2V0cyBvbnRvIHRoZSBzb2NrZXQmIzM5O3MgcmVjZWl2ZSBxdWV1ZS4KCk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgZXhhY3RseSAqaG93KiBhbmQgKndoZW4qIGB0aXBjX3NrX2VucXVldWVgIGlzIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdGlwY19za19lbnF1ZXVlYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgcGFja2V0cyBnZXQgaW50byB0aGUgcmVjZWl2ZSBwYXRoIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBwYXJ0cyBvZiB0aGUgc3RhY2sgYXJlIHJlbHlpbmcgb24gYHRpcGNfc2tfZmlsdGVyX3JjdmAmIzM5O3MgZmlsdGVyaW5nIGxvZ2ljLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZW5xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTI0MTE9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDI4LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjQyOTogKiB0aXBjX3NrX2VucXVldWUgLSBleHRyYWN0IGFsbCBidWZmZXJzIHdpdGggZGVzdGluYXRpb24gJiMzOTtkcG9ydCYjMzk7IGZyb21cbm5ldC90aXBjL3NvY2tldC5jLTI0MzAtICogICAgICAgICAgICAgICAgICAgaW5wdXRxIGFuZCB0cnkgYWRkaW5nIHRoZW0gdG8gc29ja2V0IG9yIGJhY2tsb2cgcXVldWVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDM3LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjQzODpzdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDM5LVx0XHRcdCAgICB1MzIgZHBvcnQsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0OTI9dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTA4LVx0XHRcdGlmIChsaWtlbHkoc3Bpbl90cnlsb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MjUwOTpcdFx0XHRcdHRpcGNfc2tfZW5xdWV1ZShpbnB1dHEsIHNrLCBkcG9ydCwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjUxMC1cdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgVElQQyBTb2NrZXQgTGlmZWN5Y2xlIGFuZCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgVElQQyBzb2NrZXRzIGhhbmRsZSBpbmNvbWluZyBkYXRhIGFuZCB0aGVpciBvdmVyYWxsIGxpZmVjeWNsZS4gSSB1bmRlcnN0YW5kIHRoYXQgYHRpcGNfc2tfcmN2YCBpcyB0aGUgcHJpbWFyeSByZWNlaXZlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGRhdGEgcmVjZXB0aW9uLCB0aGUgd29ya2hvcnNlIG9mIGl0IGFsbC4gU28sIG5hdHVyYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdC4KCk5vdywgYWxvbmdzaWRlIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IGlzIHJlbGVhc2VkIGFuZCBzaHV0IGRvd24uIFRoZXJlZm9yZSwgSSB3aWxsIGNoZWNrIHRoZSBzb2NrZXQgb3BlcmF0aW9ucyBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gLiBUaGVzZSBtdXN0IGJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlLCBhbmQgcG90ZW50aWFsbHkgaW1wYWN0IHRoZSByZWNlaXZlIHByb2Nlc3MuCgpBIHF1aWNrIHRob3VnaHQuLi4gaXMgYHRpcGNfc2tfcmN2YCBub24tc3RhdGljIGFuZCBleHBvcnRlZD8gSWYgc28sIHRoaXMgaGFzIG1ham9yIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IGlzIHVzZWQgaW50ZXJuYWxseSB2ZXJzdXMgZXh0ZXJuYWxseSB3aXRoaW4gdGhlIFRJUEMgc3lzdGVtIG9yIGV2ZW4gZnJvbSBleHRlcm5hbCBtb2R1bGVzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgY2FzZSBhcyBpdCBjaGFuZ2VzIGhvdyBpdCB3aWxsIGJlIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTQ2MC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjQ2MTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy00NjItXG4tLVxubmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNDkwLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NDkxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTQ5Mi19XG4tLVxubmV0L3RpcGMvYmNhc3QuYz00OTg9aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNTMyLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NTMzOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTUzNC1cdHJldHVybiByYztcbi0tXG5uZXQvdGlwYy9iY2FzdC5jPTU1Nz12b2lkIHRpcGNfYmNhc3RfcmVtb3ZlX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpyY3ZfbClcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTU3NC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjU3NTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy01NzYtfVxuLS1cbm5ldC90aXBjL25vZGUuYz0xMDYyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbiwgaW50IGJlYXJlcl9pZCwgYm9vbCBkZWxldGUpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTEwOTMtXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIG1hZGRyLCBuKTtcbm5ldC90aXBjL25vZGUuYzoxMDk0Olx0dGlwY19za19yY3Yobi1cdTAwM2VuZXQsIFx1MDAyNmxlLVx1MDAzZWlucHV0cSk7XG5uZXQvdGlwYy9ub2RlLmMtMTA5NS19XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY0MC1cdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NDE6XHRcdFx0dGlwY19za19yY3YocGVlcl9uZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE2NDItXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC90aXBjL25vZGUuYy0xNjY1LVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NjY6XHRcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcbm5ldC90aXBjL25vZGUuYy0xNjY3LVx0XHRyZXR1cm47XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2ODc9aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTcwMC1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bGlzdC1cdTAwM2Vsb2NrKTtcbm5ldC90aXBjL25vZGUuYzoxNzAxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE3MDItXHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL25vZGUuYz0yMDg2PXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIyMDItXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsZS1cdTAwM2VpbnB1dHEpKVxubmV0L3RpcGMvbm9kZS5jOjIyMDM6XHRcdHRpcGNfc2tfcmN2KG5ldCwgXHUwMDI2bGUtXHUwMDNlaW5wdXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMjA0LVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEyNjUtXHR9XG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY2Olx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMTI2Ny19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQzOD1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ4NS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjI0ODY6ICogdGlwY19za19yY3YgLSBoYW5kbGUgYSBjaGFpbiBvZiBpbmNvbWluZyBidWZmZXJzXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg3LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ5MS0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjI0OTI6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbm5ldC90aXBjL3NvY2tldC5jLTI0OTMte1xuLS1cbm5ldC90aXBjL3NvY2tldC5oPTU1PXZvaWQgdGlwY19zb2NrZXRfc3RvcCh2b2lkKTtcbm5ldC90aXBjL3NvY2tldC5oOjU2OnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmgtNTctdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3RvcHNydi5jPTYxND1zdGF0aWMgdm9pZCB0aXBjX3RvcHNydl9rZXJuX2V2dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2V2ZW50ICpldnQpXG4tLVxubmV0L3RpcGMvdG9wc3J2LmMtNjI5LVx0dGlwY19sb29wYmFja190cmFjZShuZXQsIFx1MDAyNmV2dHEpO1xubmV0L3RpcGMvdG9wc3J2LmM6NjMwOlx0dGlwY19za19yY3YobmV0LCBcdTAwMjZldnRxKTtcbm5ldC90aXBjL3RvcHNydi5jLTYzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGlwY19za19yY3ZgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQmIzM5O3MgZGVmaW5lZCBpbiwgb3IgcG90ZW50aWFsbHkgYmUgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2UuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhbmFseXplIHRoZSBjb2RlYmFzZS4KCk9uIHRoZSBvdGhlciBoYW5kLCBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBzdGF0aWMgc29ja2V0IG9wZXJhdGlvbnMuIFRoYXQgaW1wbGllcyB0aGV5IGFyZSBvbmx5IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBUSVBDIG1vZHVsZSwgbGlrZWx5IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzaHV0ZG93biBwcm9jZWR1cmVzIHNwZWNpZmljIHRvIFRJUEMgc29ja2V0cy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBlbmNhcHN1bGF0aW9uLgoKR2l2ZW4gdGhpcyBpbml0aWFsIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIFRJUEMgc29ja2V0IGxheWVyLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb3RvX29wcy4qPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTMzNDI9c3RhdGljIGludCB0aXBjX3NvY2tldHBhaXIoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzNjUtXG5uZXQvdGlwYy9zb2NrZXQuYzozMzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XG5uZXQvdGlwYy9zb2NrZXQuYy0zMzY3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM4NS1cbm5ldC90aXBjL3NvY2tldC5jOjMzODY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcbm5ldC90aXBjL3NvY2tldC5jLTMzODctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA1LVxubmV0L3RpcGMvc29ja2V0LmM6MzQwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xubmV0L3RpcGMvc29ja2V0LmMtMzQwNy1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczoKCioqQ2hlY2tpbmcgTXkgT3BlcmF0aW9uYWwgQXJzZW5hbCoqCgpPa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcyBwcm9ibGVtIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IG1ha2luZyBzdXJlIHRoYXQgbXkgZ3Jhc3Agb24gYG1zZ19vcHNgIGlzIHNvbGlkLiBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIHRoZSBtZXNzYWdlIGhhbmRsaW5nIGZ1bmRhbWVudGFscyBhcmUgaW4gcGxhY2UuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYHBhY2tldF9vcHNgIGJlY2F1c2UgSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGxvd2VyLWxldmVsIGRhdGEgZW5jYXBzdWxhdGlvbiBhbmQgZGVsaXZlcnkuIEZpbmFsbHksIGFuZCBjcnVjaWFsbHksIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgc3RyZWFtX29wc2AsIHNpbmNlIHN0cmVhbWluZyBiZWhhdmlvciBjYW4gYmUgY29tcGxleCBhbmQgaXQmIzM5O3MgdGhlIGxheWVyIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGV2ZXJ5dGhpbmcgaW4gdGhlc2UgYXJlYXMgaXMgYXMgaXQgc2hvdWxkIGJlLCBwYXJ0aWN1bGFybHkgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgaGF2ZW4mIzM5O3QgY29uc2lkZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KG1zZ19vcHN8cGFja2V0X29wc3xzdHJlYW1fb3BzKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTE2MT1zdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcbm5ldC90aXBjL3NvY2tldC5jLTE2Mi1cbm5ldC90aXBjL3NvY2tldC5jOjE2MzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzO1xubmV0L3RpcGMvc29ja2V0LmM6MTY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHM7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNjU6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcztcbm5ldC90aXBjL3NvY2tldC5jLTE2Ni1zdGF0aWMgc3RydWN0IHByb3RvIHRpcGNfcHJvdG87XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NDYwPXN0YXRpYyBpbnQgdGlwY19za19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTQ3My1cdGNhc2UgU09DS19TVFJFQU06XG5uZXQvdGlwYy9zb2NrZXQuYzo0NzQ6XHRcdG9wcyA9IFx1MDAyNnN0cmVhbV9vcHM7XG5uZXQvdGlwYy9zb2NrZXQuYy00NzUtXHRcdGJyZWFrO1xubmV0L3RpcGMvc29ja2V0LmMtNDc2LVx0Y2FzZSBTT0NLX1NFUVBBQ0tFVDpcbm5ldC90aXBjL3NvY2tldC5jOjQ3NzpcdFx0b3BzID0gXHUwMDI2cGFja2V0X29wcztcbm5ldC90aXBjL3NvY2tldC5jLTQ3OC1cdFx0YnJlYWs7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNDgwLVx0Y2FzZSBTT0NLX1JETTpcbm5ldC90aXBjL3NvY2tldC5jOjQ4MTpcdFx0b3BzID0gXHUwMDI2bXNnX29wcztcbm5ldC90aXBjL3NvY2tldC5jLTQ4Mi1cdFx0YnJlYWs7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM0Mj1zdGF0aWMgaW50IHRpcGNfc29ja2V0cGFpcihzdHJ1Y3Qgc29ja2V0ICpzb2NrMSwgc3RydWN0IHNvY2tldCAqc29jazIpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM2NS1cbm5ldC90aXBjL3NvY2tldC5jOjMzNjY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbm5ldC90aXBjL3NvY2tldC5jLTMzNjctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg1LVxubmV0L3RpcGMvc29ja2V0LmM6MzM4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xubmV0L3RpcGMvc29ja2V0LmMtMzM4Ny1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MDUtXG5uZXQvdGlwYy9zb2NrZXQuYzozNDA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFNvY2tldCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBUSVBDIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgc29ja2V0IG9wZXJhdGlvbnMgdGhlbXNlbHZlcyBhcmUgYmVpbmcgYXNzaWduZWQgZHVyaW5nIGB0aXBjX3NrX2NyZWF0ZWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBwb2ludCBvZiBpbnN0YW50aWF0aW9uLCBzbyBpdCYjMzk7cyB3aGVyZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHJlY2VpdmluZyBhbmQgc2VuZGluZyB3b3VsZCBiZSBkZWZpbmVkLiBOb3csIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byB0aGUgY29yZSBvcGVyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGVpdGhlciBgdGlwY19za19yY3ZgIGZvciB0aGUgcmVjZWl2ZSBwYXRoLCBvciBgdGlwY19ub2RlX3htaXRgIGZvciB0aGUgbm9kZS1sZXZlbCB0cmFuc21pc3Npb24gcGF0aC4gUG90ZW50aWFsbHksIGFsc28sIGB0aXBjX3NlbmRtc2dgLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGB0aXBjX3NlbmRtc2dgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgb3V0Ym91bmQgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTU3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTc5MT1zdGF0aWMgX19wb2xsX3QgdGlwY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTgzOS0gKlxubmV0L3RpcGMvc29ja2V0LmM6ODQwOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05NTMtICpcbm5ldC90aXBjL3NvY2tldC5jOjk1NDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTk1Nz1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF91bmljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtOTk3LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo5OTg6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDAxPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2FueWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDc4LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMDc5OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEwODI9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYmNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTUyLSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMTUzOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEzMzM9c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTM5MS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjEzOTI6ICogdGlwY19zZW5kbXNnIC0gc2VuZCBtZXNzYWdlIGluIGNvbm5lY3Rpb25sZXNzIG1hbm5lclxubmV0L3RpcGMvc29ja2V0LmMtMTM5My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MDMtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA0OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA1LVx0XHRcdHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQxMC1cdGxvY2tfc29jayhzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNDExOlx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE0MTItXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MTYtXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDE3OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE4LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY0PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU4NC1cdGlmICh1bmxpa2VseShkZXN0IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUSVBDX09QRU4pKSB7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg1Olx0XHRyYyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRsZW4pO1xubmV0L3RpcGMvc29ja2V0LmMtMTU4Ni1cdFx0aWYgKGRsZW4gXHUwMDI2XHUwMDI2IGRsZW4gPT0gcmMpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgyPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI2MzYtXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM3Olx0XHRyZXMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBcdTAwMjZtLCAwKTtcbm5ldC90aXBjL3NvY2tldC5jLTI2MzgtXHRcdGlmICgocmVzIFx1MDAzYyAwKSBcdTAwMjZcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgwLVx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcbm5ldC90aXBjL3NvY2tldC5jOjMzODE6XHQuc2VuZG1zZ1x0PSB0aXBjX3NlbmRtc2csXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgyLVx0LnJlY3Ztc2dcdD0gdGlwY19yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipGb2N1c2luZyBvbiBUSVBDIENvbW11bmljYXRpb24gUHJpbWl0aXZlcyoqCgpSaWdodCwgc28gZm9yIHRoZSBzZW5kaW5nIHNpZGUgb2YgdGhpbmdzLCBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24uIFRoZXkmIzM5O3JlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBwdXR0aW5nIGRhdGEgKm91dCogdmlhIFRJUEMuIFRoZW4sIHdoZW4gd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoIHJlY2VwdGlvbiwgYHRpcGNfc2tfcmN2YCBpcyB0aGUgc3ltYm9sIHRvIGNlbnRlciBvbi4gVGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBjb3ZlcnMgdGhlIHR3byBtYWpvciBhc3BlY3RzIG9mIHRoZSBvcGVyYXRpb24uCgpOb3csIHRoYXQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBpdCYjMzk7cyAqc3RhdGljKi4gTWVhbmluZyBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHVzZSBpdCBkaXJlY3RseSwgc28gSSYjMzk7bGwgbmVlZCB0byBnbyBhbm90aGVyIHdheSwgYW5kIGxldCYjMzk7cyBzdGFydCB3aXRoIGB0aXBjX3NlbmRzdHJlYW1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NlbmRzdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xNTY9c3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjE1NzpzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTU4LXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTQxNz1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1NDEtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTQyOiAqIHRpcGNfc2VuZHN0cmVhbSAtIHNlbmQgc3RyZWFtLW9yaWVudGVkIGRhdGFcbm5ldC90aXBjL3NvY2tldC5jLTE1NDMtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTUxLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MTU1MjpzdGF0aWMgaW50IHRpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxubmV0L3RpcGMvc29ja2V0LmMtMTU1My17XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU1Ny1cdGxvY2tfc29jayhzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTU4Olx0cmV0ID0gX190aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1NTktXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1NjMtXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTY0OnN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTY1LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNjU5PXN0YXRpYyBpbnQgdGlwY19zZW5kX3BhY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE2NjMtXG5uZXQvdGlwYy9zb2NrZXQuYzoxNjY0Olx0cmV0dXJuIHRpcGNfc2VuZHN0cmVhbShzb2NrLCBtLCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTY2NS19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjcyOD1zdGF0aWMgaW50IHRpcGNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI3OTEtXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm0ubXNnX2l0ZXIsIElURVJfU09VUkNFLCBOVUxMLCAwLCAwKTtcbm5ldC90aXBjL3NvY2tldC5jOjI3OTI6XHRfX3RpcGNfc2VuZHN0cmVhbShuZXdfc29jaywgXHUwMDI2bSwgMCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNzkzLVx0cmVsZWFzZV9zb2NrKG5ld19zayk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzQwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MjAtXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxubmV0L3RpcGMvc29ja2V0LmM6MzQyMTpcdC5zZW5kbXNnXHQ9IHRpcGNfc2VuZHN0cmVhbSxcbm5ldC90aXBjL3NvY2tldC5jLTM0MjItXHQucmVjdm1zZ1x0PSB0aXBjX3JlY3ZzdHJlYW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRJUEMgU2VuZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0aXBjX3NlbmRzdHJlYW1gIGFuZCBgdGlwY19zZW5kbXNnYC4gU29tZXRoaW5nIHN0cnVjayBtZSAtIGFyZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGVpciBkZWZpbml0aW9uczogYHN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opYCBhbmQgYHN0YXRpYyBpbnQgdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opYC4gWWVwLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHN0YXRpYy4gTm93IHRoYXQgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQsIGl0IG1lYW5zIHRoZXkgYXJlbiYjMzk7dCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCByaWdodD8gVGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIFRJUEMgaW1wbGVtZW50YXRpb24gYW5kIGFyZSBsaWtlbHkgYXNzaWduZWQgdG8gdGhlIGBwcm90b19vcHNgIHN0cnVjdHVyZS4gVGh1cywgdGhleSYjMzk7cmUgbm90IGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5JiMzOTtyZSBpbnRlbmRlZCB0byBiZSB1c2VkLiBJIG5vdyBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgcmVjZWl2ZXIgc2lkZSBpcyBzZXQgdXAuIE5leHQgSSBzaG91bGQgY2hlY2sgYHRpcGNfc2tfcmN2YCAtIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBleHBvcnRlZCwgaXNuJiMzOTt0IGl0PyBBbmQsIHdoYXQgYWJvdXQgYHRpcGNfbm9kZV94bWl0YD8gVGhhdCYjMzk7cyBsaWtlbHkgZXhwb3J0ZWQuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbW11bmljYXRpb24gZmxvdyBhbmQgdGhlIHB1YmxpYyBpbnRlcmZhY2VzIGV4cG9zZWQgYnkgVElQQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19ub2RlX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz0yODg9c3RhdGljIGludCB0aXBjX3JjYXN0X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RzLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtMzAzLVx0XHQvKiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHRoYW4gLUVMSU5LQ09ORyBpcyBpZ25vcmVkICovXG5uZXQvdGlwYy9iY2FzdC5jOjMwNDpcdFx0aWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2X3BrdHMsIGRub2RlLCBzZWxlY3RvcikgPT0gLUVMSU5LQ09ORylcbm5ldC90aXBjL2JjYXN0LmMtMzA1LVx0XHRcdCgqY29uZ19saW5rX2NudCkmIzQzOyYjNDM7O1xuLS1cbm5ldC90aXBjL2NyeXB0by5jPTIyMzg9c3RhdGljIGludCB0aXBjX2NyeXB0b19rZXlfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2FlYWRfa2V5ICpza2V5LFxuLS1cbm5ldC90aXBjL2NyeXB0by5jLTIyNjgtXHRpZiAoZG5vZGUpXG5uZXQvdGlwYy9jcnlwdG8uYzoyMjY5Olx0XHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2cGt0cywgZG5vZGUsIDApO1xubmV0L3RpcGMvY3J5cHRvLmMtMjI3MC1cdGVsc2Vcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjA2PXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMjEtXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMjI6XHR0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMjMtXHRyZWFkX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xNjI3PXN0YXRpYyB2b2lkIHRpcGNfbHhjX3htaXQoc3RydWN0IG5ldCAqcGVlcl9uZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE2NzgtLyoqXG5uZXQvdGlwYy9ub2RlLmM6MTY3OTogKiB0aXBjX25vZGVfeG1pdCgpIC0gZ2VuZXJhbCBsaW5rIGxldmVsIGZ1bmN0aW9uIGZvciBtZXNzYWdlIHNlbmRpbmdcbm5ldC90aXBjL25vZGUuYy0xNjgwLSAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY4Ni0gKi9cbm5ldC90aXBjL25vZGUuYzoxNjg3OmludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG5uZXQvdGlwYy9ub2RlLmMtMTY4OC1cdFx0ICAgdTMyIGRub2RlLCBpbnQgc2VsZWN0b3IpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3NTItXG5uZXQvdGlwYy9ub2RlLmM6MTc1MzovKiB0aXBjX25vZGVfeG1pdF9za2IoKTogc2VuZCBzaW5nbGUgYnVmZmVyIHRvIGRlc3RpbmF0aW9uXG5uZXQvdGlwYy9ub2RlLmMtMTc1NC0gKiBCdWZmZXJzIHNlbnQgdmlhIHRoaXMgZnVuY3Rpb24gYXJlIGdlbmVyYWxseSBUSVBDX1NZU1RFTV9JTVBPUlRBTkNFXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3NTgtICovXG5uZXQvdGlwYy9ub2RlLmM6MTc1OTppbnQgdGlwY19ub2RlX3htaXRfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGRub2RlLFxubmV0L3RpcGMvbm9kZS5jLTE3NjAtXHRcdCAgICAgICB1MzIgc2VsZWN0b3IpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3NjUtXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmhlYWQsIHNrYik7XG5uZXQvdGlwYy9ub2RlLmM6MTc2NjpcdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIHNlbGVjdG9yKTtcbm5ldC90aXBjL25vZGUuYy0xNzY3LVx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE3NzM9aW50IHRpcGNfbm9kZV9kaXN0cl94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3ODAtXHRcdGRub2RlID0gbXNnX2Rlc3Rub2RlKGJ1Zl9tc2coc2tiKSk7XG5uZXQvdGlwYy9ub2RlLmM6MTc4MTpcdFx0dGlwY19ub2RlX3htaXRfc2tiKG5ldCwgc2tiLCBkbm9kZSwgc2VsZWN0b3IpO1xubmV0L3RpcGMvbm9kZS5jLTE3ODItXHR9XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE3ODY9dm9pZCB0aXBjX25vZGVfYnJvYWRjYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJjX2Rlc3RzKVxuLS1cbm5ldC90aXBjL25vZGUuYy0xODEzLVx0XHRtc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2codHhza2IpLCBkc3QpO1xubmV0L3RpcGMvbm9kZS5jOjE4MTQ6XHRcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHR4c2tiLCBkc3QsIDApO1xubmV0L3RpcGMvbm9kZS5jLTE4MTUtXHR9XG4tLVxubmV0L3RpcGMvbm9kZS5oPTk5PWludCB0aXBjX25vZGVfZ2V0X2xpbmtuYW1lKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGJlYXJlcl9pZCwgdTMyIG5vZGUsXG5uZXQvdGlwYy9ub2RlLmgtMTAwLVx0XHRcdCAgIGNoYXIgKmxpbmtuYW1lLCBzaXplX3QgbGVuKTtcbm5ldC90aXBjL25vZGUuaDoxMDE6aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgdTMyIGRub2RlLFxubmV0L3RpcGMvbm9kZS5oLTEwMi1cdFx0ICAgaW50IHNlbGVjdG9yKTtcbm5ldC90aXBjL25vZGUuaD0xMDM9aW50IHRpcGNfbm9kZV9kaXN0cl94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7XG5uZXQvdGlwYy9ub2RlLmg6MTA0OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGVzdCxcbm5ldC90aXBjL25vZGUuaC0xMDUtXHRcdCAgICAgICB1MzIgc2VsZWN0b3IpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI4Nj1zdGF0aWMgdm9pZCB0aXBjX3NrX3Jlc3BvbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5Ny1cdHNlbGVjdG9yID0gbXNnX29yaWdwb3J0KGJ1Zl9tc2coc2tiKSk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTg6XHR0aXBjX25vZGVfeG1pdF9za2Ioc29ja19uZXQoc2spLCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yOTktfVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTU5Ny1cdFx0aWYgKHNrYilcbm5ldC90aXBjL3NvY2tldC5jOjU5ODpcdFx0XHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTU5OS1cdFx0YnJlYWs7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05MzEtXHQvKiBTZW5kIG1lc3NhZ2UgKi9cbm5ldC90aXBjL3NvY2tldC5jOjkzMjpcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZwa3RzLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG5uZXQvdGlwYy9zb2NrZXQuYy05MzMtXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTMyMC1cbm5ldC90aXBjL3NvY2tldC5jOjEzMjE6XHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0xMzIyLVx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTQxNz1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1MjItXHR0cmFjZV90aXBjX3NrX3NlbmRtc2coc2ssIHNrYl9wZWVrKFx1MDAyNnBrdHMpLCBUSVBDX0RVTVBfU0tfU05EUSwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTIzOlx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNnBrdHMsIHNrYWRkci5ub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTE1MjQtXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY0PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTYzMy1cdFx0XHRcdFx0IFRJUENfRFVNUF9TS19TTkRRLCBcJiMzNDsgXCYjMzQ7KTtcbm5ldC90aXBjL3NvY2tldC5jOjE2MzQ6XHRcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTE2MzUtXHRcdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE4Mjg9c3RhdGljIHZvaWQgdGlwY19za19zZW5kX2FjayhzdHJ1Y3QgdGlwY19zb2NrICp0c2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTgzNS1cbm5ldC90aXBjL3NvY2tldC5jOjE4MzY6XHR0aXBjX25vZGVfeG1pdF9za2Ioc29ja19uZXQoXHUwMDI2dHNrLVx1MDAzZXNrKSwgc2tiLCB0c2tfcGVlcl9ub2RlKHRzayksXG5uZXQvdGlwYy9zb2NrZXQuYy0xODM3LVx0XHRcdCAgIG1zZ19saW5rX3NlbGVjdG9yKGJ1Zl9tc2coc2tiKSkpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0OTI9dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTMzLVx0XHRkbm9kZSA9IG1zZ19kZXN0bm9kZShidWZfbXNnKHNrYikpO1xubmV0L3RpcGMvc29ja2V0LmM6MjUzNDpcdFx0dGlwY19ub2RlX3htaXRfc2tiKG5ldCwgc2tiLCBkbm9kZSwgZHBvcnQpO1xubmV0L3RpcGMvc29ja2V0LmMtMjUzNS1cdH1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yODc3PXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTAzLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2bGlzdCkpXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTA0Olx0XHRyYyA9IHRpcGNfbm9kZV94bWl0KHNvY2tfbmV0KHNrKSwgXHUwMDI2bGlzdCwgcG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtMjkwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgYW5kIGB0aXBjX25vZGVfeG1pdF9za2JgIHNlZW0gbGlrZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBidXQgYHRpcGNfc2tfcmN2YCBpcyBhbHNvIGV4cG9ydGVkLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRyaWd1aW5nLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGNoLCBhbmQgZXhwb3NlZCBmb3IgZnV6emluZy4KCkkgd2FzIGluaXRpYWxseSBjb25zaWRlcmluZyBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXMgZ29vZCBjYW5kaWRhdGVzIHNpbmNlIHRoZXNlIGFyZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50cy4gSSB0aGVuIHJlYWxpemVkIHRoZXkmIzM5O3JlIHN0YXRpYy4gQSBxdWljayBjaGVjayBjb25maXJtZWQgdGhhdCB0aGV5IGFyZSBub3QgaW5saW5lZC4gVGhpcyBtYWtlcyB0aGVtIGdvb2QgZm9jdXMgc3ltYm9scy4gVGhleSBhcmUgYXNzaWduZWQgdG8gYHByb3RvX29wc2AgaW4gYG5ldC90aXBjL3NvY2tldC5jYCwgc28gSSYjMzk7bSBjb25maWRlbnQgdGhleSBhcmUgbm90IGlubGluZWQuCgpIb3dldmVyLCB0aGUgcmVhbCBjaGFuZ2UgaXMgaW4gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtb2RpZmljYXRpb24gbGllcy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBwbGFjZXM6IGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBhbmQgYF9fdGlwY19zaHV0ZG93bmAuIENyaXRpY2FsbHksIGFsbCB0aGVzZSBjYWxsZXJzIGFyZSBvbiB0aGUgcmVjZWl2ZSBwYXRoIG9yIHNodXRkb3duIHBhdGguIFRoaXMgc3VnZ2VzdHMgdGhhdCB3aGlsZSBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIGZvciB0aGUgc2VuZCBwYXRoLiBgdGlwY19za19yY3ZgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgcmVjZWl2ZSBwYXRoLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGhvdyB0aGUgdHJhbnNtaXQgcXVldWUgaXMgaGFuZGxlZCBpbiBsb2NhbCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHNhbWUgbm9kZS4gSXQgb3B0aW1pemVzIGxvY2FsIGNvbW11bmljYXRpb24uIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYHhtaXRxYCwgd2hpY2ggaXMgdGhlbiBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlciBpbiB0aGUgcmVjZWl2aW5nIHBhdGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgYW5kIHRyYW5zbWl0dGVkIGxvY2FsbHksIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoYXMgYmVlbiByZWZpbmVkIHRvOgoKKiAgIGB0aXBjX3NrX3JjdmAgKHByaW1hcnkpCiogICBgdGlwY19zZW5kc3RyZWFtYAoKV2hpbGUgYHRpcGNfc2VuZG1zZ2AgaXMgc3RhdGljLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYCB3aGljaCBtZWFucyBpdCYjMzk7cyBub3QgaW5saW5lZCBhbmQgaGVuY2UgYSBnb29kIGZvY3VzIHN5bWJvbC4KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBiZSBzdXJlLiBJIGNhbiBjb25maXJtLCBgX190aXBjX3NodXRkb3duYCBjYWxscyBpdCB3aXRoIGB4bWl0cSA9IE5VTExgLCBhbmQgdGhlIG90aGVycyBjYWxsIGl0IHdpdGggYW4gYHhtaXRxYC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSByZWNlaXZlIHBhdGggaXMgbXkgbWFpbiBmb2N1cywgcGFydGljdWxhcmx5IGB0aXBjX3NrX3JjdmAuIFNpbmNlIGB0aXBjX3NlbmRzdHJlYW1gIGlzIGludm9sdmVkLCBJIHNob3VsZCB1c2UgdGhhdCBhcyB3ZWxsLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBiYWNrbG9nIGdlbmVyYXRpb24gaXMgdHJpZ2dlcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiwgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyB0aGUgYmVzdCBwYXRoIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGlwY19zZW5kc3RyZWFtYCBhbmQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybS4gYHRpcGNfc2VuZHN0cmVhbWAgcXVldWVzIHBhY2tldHMuIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgY2FsbGVkIHdoZW4gYW4gQUNLIGlzIHJlY2VpdmVkIG9yIHdoZW4gdGhlIHNvY2tldCBpcyBzaHV0IGRvd24uCgpUaGVyZWZvcmUsIGB0aXBjX3NrX3JjdmAgYmVjb21lcyB0aGUgbWFpbiBmb2N1cyBzeW1ib2wuIEFkZGl0aW9uYWxseSwgYHRpcGNfc2VuZHN0cmVhbWAgaXMgYWxzbyBhIGdvb2Qgc3ltYm9sIHRvIGdlbmVyYXRlIGJhY2tsb2cuIEkgd2lsbCBub3cgZXhhbWluZSBgdGlwY19za19yY3ZgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCB0aXBjX3NrX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0OTEtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDkyOnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDkzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNjcKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogNjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSVBDIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGB0aXBjX3NrX3JjdmAgaXMgbm9uLXN0YXRpYyDigJMgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB3ZSBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0by4gYHRpcGNfc2VuZHN0cmVhbWAgYW5kIGB0aXBjX3NlbmRtc2dgIGFyZSBib3RoIHN0YXRpYyBidXQgKm5vdCogaW5saW5lZCwgd2hpY2ggbWFrZXMgdGhlbSByZWxldmFudCwgYnV0IHBlcmhhcHMgbGVzcyBjcml0aWNhbCB0aGFuIGB0aXBjX3NrX3JjdmAuIEFsdGhvdWdoIGB0aXBjX3JlbGVhc2VgIGFuZCBgdGlwY19zaHV0ZG93bmAgYXJlIGFsc28gc3RhdGljIGFuZCBub24taW5saW5lZCwgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlbSBhc2lkZSBmb3Igbm93LCBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucy4gU28sIEkgd2lsbCBmb2N1cyBvbiBgdGlwY19za19yY3ZgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAsIGFuZCBjb25zaWRlciBgdGlwY19zZW5kbXNnYC4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgVElQQ2AgY29uZmlnIGFnYWluLiBJdCYjMzk7cyB0cmlzdGF0ZS4gU28sIGBUSVBDYCBpcyB0aGUgbWFpbiB0aGluZyB0byB3b3JyeSBhYm91dCBjb25maWctd2lzZS4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLi4uIEFoLCBoZXJlIHdlIGdvLiBUaGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24uIEl0JiMzOTtzIGVzc2VudGlhbGx5IG9wdGltaXppbmcgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiBkZXN0aW5lZCBmb3IgdGhlIGxvY2FsIG5vZGUuIElmIGFuIGB4bWl0cWAgaXMgcHJvdmlkZWQgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBsb2NhbCwgdGhlIGNvZGUgbm93ICpzcGxpY2VzKiB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIGB4bWl0cWAgZGlyZWN0bHkuIFRoaXMgYXZvaWRzIGEgY2FsbCB0byBgdGlwY19ub2RlX3htaXRgIGluIHRoYXQgc2NlbmFyaW8uIEZyb20gYSBuZXR3b3JraW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGlzdGluY3QgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IFRJUEMgaGFuZGxlcyB0aGUgc29ja2V0IGJhY2tsb2cuCgpTbywgaG93IGNhbiB3ZSB0cmlnZ2VyIHRoaXM/IEkgY2FuIGNyZWF0ZSBhIFRJUEMgc29ja2V0LCBzZW5kIHNvbWUgZGF0YSB0byBhIGxvY2FsIG5vZGUgKHdoaWNoIHdpbGwgcXVldWUgaXQgaWYgTmFnbGUgaXMgb24gb3IgdGhlIGxpbmsgaXMgY29uZ2VzdGVkKSwgYW5kIHRoZW4gdHJpZ2dlciBhbiBBQ0sgb3Igc2h1dCBkb3duIHRoZSBzb2NrZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGdvb2QgY292ZXJhZ2UuCgpUaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGFuZCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBzaG91bGQgYmUgYHRpcGNfc2tfcmN2YCwgYHRpcGNfc2VuZHN0cmVhbWAsIGFuZCBgdGlwY19zZW5kbXNnYC4gSSB3aWxsIGFsc28gJiMzNDtFbmFibGVDb25maWdzJiMzNDsgZm9yIGBUSVBDYC4gVGhlIGNvcmUgJiMzNDtSZWFzb25pbmcmIzM0OyBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgdGhlIGJhY2tsb2cgcHJvY2Vzc2luZywgc3BsaWNpbmcgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIGB4bWl0cWAgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYHRpcGNfbm9kZV94bWl0YCwgYW5kIHRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX3NrX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRzdHJlYW0mIzM0OywKICAgICYjMzQ7dGlwY19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHNvY2tldCBiYWNrbG9nIHByb2Nlc3NpbmcgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgeG1pdHEgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYSBjYWxsIHRvIHRpcGNfbm9kZV94bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfc2tfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfc2VuZHN0cmVhbSYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc29ja2V0IGJhY2tsb2cgcHJvY2Vzc2luZyB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCB4bWl0cSBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBhIGNhbGwgdG8gdGlwY19ub2RlX3htaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXR3b3JraW5nIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIGEgcHJvdmlkZWQgYHhtaXRxYCBpbnN0ZWFkIG9mIHRyYW5zbWl0dGluZyB0aGUgYnVmZmVycyBkaXJlY3RseSB2aWEgYHRpcGNfbm9kZV94bWl0YCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHBhY2tldCB0cmFuc21pc3Npb24gZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBmaWVsZHMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gdGhlIHNrYiBxdWV1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhM2Q4NjI4YTA4ODdjOGY3MDU2Y2YyNDAzYjMyNmIxNzVmMTk0NmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjQ4OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBlNTY0MzQxZTAyMTZkLi4xNmQ4NDRmYzhjYTU3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMTU2LDcgJiM0MzsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CiBzdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spOwogc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTsKIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7Ci1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKTsKJiM0MztzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLAomIzQzOwkJCQkgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpOwogc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7CkBAIC01NjAsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpCiAJCQkJCSAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7CiAKIAkvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi8KLQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgTlVMTCk7CiAJLyogUmVtb3ZlIHBlbmRpbmcgU1lOICovCiAJX19za2JfcXVldWVfcHVyZ2UoJmFtcDtzay0mZ3Q7c2tfd3JpdGVfcXVldWUpOwogCkBAIC0xMjY4LDcgJiM0MzsxMjY5LDggQEAgdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLAogLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZQogICovCi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0eHEgPSAmYW1wO3Rzay0mZ3Q7c2suc2tfd3JpdGVfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTsKQEAgLTEzMTAsNiAmIzQzOzEzMTIsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaykKIAkJdHNrLSZndDtwa3RfY250ICYjNDM7PSBza2JfcXVldWVfbGVuKHR4cSk7CiAJdHNrLSZndDtzbnRfdW5hY2tlZCAmIzQzOz0gdHNrLSZndDtzbmRfYmFja2xvZzsKIAl0c2stJmd0O3NuZF9iYWNrbG9nID0gMDsKJiM0MzsKJiM0MzsJaWYgKHhtaXRxICZhbXA7JmFtcDsgaW5fb3duX25vZGUobmV0LCBkbm9kZSkpIHsKJiM0MzsJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay0mZ3Q7cG9ydGlkKTsKIAlpZiAocmMgPT0gLUVMSU5LQ09ORykKIAkJdHNrLSZndDtjb25nX2xpbmtfY250ID0gMTsKQEAgLTEzNjcsNyAmIzQzOzEzNzUsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWdvdG8gZXhpdDsKIAogCQl3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTsKLQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkcikpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTsKIAkJdHNrLSZndDtzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTsKIAkJaWYgKHRzay0mZ3Q7cGVlcl9jYXBzICZhbXA7IFRJUENfQkxPQ0tfRkxPV0NUTCkKIAkJCXRzay0mZ3Q7c25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7CkBAIC0yMTY1LDcgJiM0MzsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLAogCQlzbXBfd21iKCk7CiAJCXRzay0mZ3Q7Y29uZ19saW5rX2NudC0tOwogCQl3YWtldXAgPSB0cnVlOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTsKIAkJYnJlYWs7CiAJY2FzZSBHUk9VUF9QUk9UT0NPTDoKIAkJdGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCAmYW1wO3dha2V1cCwgaGRyLCBpbnB1dHEsIHhtaXRxKTsKQEAgLTIyNTYsNyAmIzQzOzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIGZhbHNlOwogCWNhc2UgVElQQ19FU1RBQkxJU0hFRDoKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfd3JpdGVfcXVldWUpKQotCQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7CiYjNDM7CQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQkvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqLwogCQlpZiAobGlrZWx5KGNvbl9tc2cgJmFtcDsmYW1wOyAhZXJyICZhbXA7JmFtcDsgcHBvcnQgPT0gb3BvcnQgJmFtcDsmYW1wOwogCQkJICAgcG5vZGUgPT0gb25vZGUpKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBTb2NrZXQgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgYXMgYW4gYXJndW1lbnQuIEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgcXVldWVpbmcgU0tCcyB0byBgeG1pdHFgICppbnN0ZWFkKiBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgdGhlbSB3aXRoIGB0aXBjX25vZGVfeG1pdGAgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGVzc2VudGlhbGx5IGRlZmVycmluZyB0aGUgdHJhbnNtaXNzaW9uIGZvciBsb2NhbCB0cmFmZmljLgoKVGhlIGNvZGUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXTigJlzIGEgbG9naWMgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHF1ZXVlIG1hbmFnZW1lbnQgcmVmYWN0b3IuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdCBtZW1iZXJzLCBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gSXQmIzM5O3MganVzdCBtb3ZpbmcgU0tCcyBhcm91bmQsIHNvIHRoZSB0eXBpY2FsIGJ1Z3MgSeKAmWQgYmUgd29ycmllZCBhYm91dCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGFua2Z1bGx5LCBLQVNBTiBzaG91bGQgYmUgd2VsbC1lcXVpcHBlZCB0byBjYXRjaCB0aG9zZS4gVGhlcmUmIzM5O3Mgbm8gb2J2aW91cyB2ZWN0b3IgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBhIGJyYW5jaGluZyBjb25kaXRpb24uIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHN1Y2ggaXNzdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucy4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHhtaXRxYC4gSSBzZWUgaXQmIzM5O3MgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIGxpa2UgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgLCBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLiBUaGVzZSBmdW5jdGlvbnMgcmVjZWl2ZSBgeG1pdHFgIGFzIGFuIGFyZ3VtZW50LCBzbyBpdHMgdXNlIGlzIGNvbnNpc3RlbnQgdGhyb3VnaG91dC4gTm93LCBgdGlwY19za19yY3ZgLCBpcyBhIGxpa2VseSBpbml0aWFsaXphdGlvbiBzaXRlLCBhbmQgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGlzc3VlIHdpdGggaXQuIEhvbmVzdGx5LCBldmVuIGlmIGB4bWl0cWAgd2VyZSB1bmluaXRpYWxpemVkLCBpdCYjMzk7cyBqdXN0IGEgcG9pbnRlciwgYW5kIGl0cyB1c2FnZSB3b3VsZCBiZSBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBwb2ludGVyIGJ1ZyB0aGF0IEtNU0FOIHNob3VsZCBjYXRjaC4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2ssIGZvciBjb21wbGV0ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfY29ubl9wcm90b19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTMyNi0vKipcbm5ldC90aXBjL3NvY2tldC5jOjEzMjc6ICogdGlwY19za19jb25uX3Byb3RvX3JjdiAtIHJlY2VpdmUgYSBjb25uZWN0aW9uIG1uZyBwcm90b2NvbCBtZXNzYWdlXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI4LSAqIEB0c2s6IHJlY2VpdmluZyBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzMyLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MTMzMzpzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL3NvY2tldC5jLTEzMzQtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjE1Nj1zdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE2Ny1cdGNhc2UgQ09OTl9NQU5BR0VSOlxubmV0L3RpcGMvc29ja2V0LmM6MjE2ODpcdFx0dGlwY19za19jb25uX3Byb3RvX3Jjdih0c2ssIHNrYiwgaW5wdXRxLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMTY5LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgdGlwY19za19wcm90b19yY3ZgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY2FsbGVycyBvZiBgdGlwY19za19wcm90b19yY3ZgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmssIHNvIHVuZGVyc3RhbmRpbmcgd2hvJiMzOTtzIGNhbGxpbmcgaXQgaXMgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBwYXRocyB0aGF0IGRhdGEgY2FuIHRha2UuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgaW52ZXN0aWdhdGlvbiBvZiB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBjb2RlLCBwb3NzaWJseSB1c2luZyB0b29scyBsaWtlIGBjc2NvcGVgLCBgZ2RiYCwgb3Igc2ltcGx5IGEgZ3JlcCBzZWFyY2ggYWNyb3NzIHRoZSByZWxldmFudCBmaWxlcy4gSSYjMzk7bSBhaW1pbmcgdG8gaWRlbnRpZnkgdGhlIGltbWVkaWF0ZSBmdW5jdGlvbnMgY2FsbGluZyBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgZnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgd2lkZXIgY29udGV4dCB3aXRoaW4gdGhlIFRJUEMgc3Vic3lzdGVtLiBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0cmlnZ2VyZWQgdGhlIGludmVzdGlnYXRpb24sIGFuZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbm5lY3Rpb25zIHRvIGtub3duIGFyZWFzIG9mIGludGVyZXN0IG9yIHBvdGVudGlhbCBwcm9ibGVtIHBvaW50cywgb3IgbWF5YmUganVzdCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX3Byb3RvX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTQwMz1zdGF0aWMgaW50IHRpcGNfc2tfc29ja19lcnIoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW91dClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXHR3aGlsZSAoKHJjXyA9ICEoY29uZGl0aW9uXykpKSB7XHRcdFx0XHRcdCAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlx0XHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRpcGNfc2tfcHJvdG9fcmN2KCkgKi8gICAgICAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmMtNDMzLVx0XHRzbXBfcm1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIxNTE9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU1LVxubmV0L3RpcGMvc29ja2V0LmM6MjE1NjpzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU3LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ2PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM2My1cdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcbm5ldC90aXBjL3NvY2tldC5jOjIzNjQ6XHRcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcdTAwMjZpbnB1dHEsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIzNjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIENhbGxlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdGlwY19za19maWx0ZXJfcmN2YCBjYWxsZXJzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBpbiB0aGUgVGlwYyBzb2NrZXQgZmlsdGVyaW5nIHByb2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIHdobyYjMzk7cyBjYWxsaW5nIGl0IGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgb3ZlcnZpZXcuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHRyYWNlIGhvdyBtZXNzYWdlcyBhcmUgZ2V0dGluZyBoYW5kbGVkLCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGV2ZW4gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlIGludG8gdGhvc2UgY2FsbCBzdGFja3MgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bmV4cGVjdGVkIG9yIGluZWZmaWNpZW50IHVzYWdlIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX2ZpbHRlcl9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0yMzE4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzM1LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjMzNjogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzM3LSAqIEBzazogc29ja2V0XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM0NS0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjIzNDY6c3RhdGljIHZvaWQgdGlwY19za19maWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL3NvY2tldC5jLTIzNDctXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIzNTctXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzU4Olx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFwmIzM0OyBcJiMzNDspO1xubmV0L3RpcGMvc29ja2V0LmMtMjM1OS1cdFRJUENfU0tCX0NCKHNrYiktXHUwMDNlYnl0ZXNfcmVhZCA9IDA7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQxMT1zdGF0aWMgaW50IHRpcGNfc2tfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0MTgtXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDE5Olx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFx1MDAyNnhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTI0MjAtXHRhZGRlZCA9IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAtIGJlZm9yZTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDM4PXN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU2LVx0XHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbm5ldC90aXBjL3NvY2tldC5jOjI0NTc6XHRcdFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTI0NTgtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzQKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgdGlwY19za19iYWNrbG9nX3JjdmAgYW5kIHNwZWNpZmljYWxseSBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIGl0LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgeG1pdHFgIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSB1c2luZyBgX19za2JfcXVldWVfaGVhZF9pbml0YC4gTm8gd29ycmllcyB0aGVyZS4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgb3B0aW1pemluZyBob3cgU0tCcyBhcmUgc2VudCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gSW5zdGVhZCBvZiB0aGUgZGlyZWN0IGNhbGwgdG8gYHRpcGNfbm9kZV94bWl0YCwgaXQmIzM5O3Mgbm93IHNwbGljaW5nIHRvIGB4bWl0cWAuIFRoaXMgaXMgY2xhc3NpYzsgdGhpcyBpcyBhbGwgYWJvdXQgYXZvaWRpbmcgcG90ZW50aWFsIGxvY2tpbmcgcHJvYmxlbXMgb3IgcmVlbnRyYW5jeSBpc3N1ZXMgYnkgYmF0Y2hpbmcgdGhlIHRyYW5zbWlzc2lvbnMsIG9yIHBvc3NpYmx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSB3aXRoIHNvbWUga2luZCBvZiBsb2NhbCBvcHRpbWl6YXRpb24uCgpGcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyB3aXRoIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgbWFuaXB1bGF0aW5nIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIEtBU0FOLCB3aXRoIGl0cyBzdXBlcmIgY292ZXJhZ2UsIHdpbGwgaGFuZGxlIHBlcmZlY3RseS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoaXMgaXNuJiMzOTt0IGEgS01TQU4tcmVsZXZhbnQgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIG9wdGlvbmFsbHkgc3BsaWNlIHRoZSBzb2NrZXQmIzM5O3Mgd3JpdGUgcXVldWUgaW50byBhIHByb3ZpZGVkIGB4bWl0cWAgaW5zdGVhZCBvZiB0cmFuc21pdHRpbmcgdGhlIGJ1ZmZlcnMgZGlyZWN0bHkgdmlhIGB0aXBjX25vZGVfeG1pdGAgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgZmllbGRzLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHRoZSBza2IgcXVldWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBvcHRpb25hbGx5IHNwbGljZSB0aGUgc29ja2V0JiMzOTtzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MTYuODYwNTU3MDAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODIzNjk1MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19zZW5kc3RyZWFtXCIsXG4gICAgXCJ0aXBjX3NlbmRtc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzb2NrZXQgYmFja2xvZyBwcm9jZXNzaW5nIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVkIHhtaXRxIGZvciBsb2NhbCBkZXN0aW5hdGlvbnMsIGF2b2lkaW5nIGEgY2FsbCB0byB0aXBjX25vZGVfeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBBUEkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjE2Ljg2MDU2MjIwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDcyODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjQ4OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmNcXG5pbmRleCBlNTY0MzQxZTAyMTZkLi4xNmQ4NDRmYzhjYTU3IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXFxuKysrIGIvbmV0L3RpcGMvc29ja2V0LmNcXG5AQCAtMTU2LDcgKzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcXG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcXG4gc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG4gc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XFxuK3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XFxuIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcXG5AQCAtNTYwLDcgKzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7XFxuIFxcbiBcXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cXG4tXFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XFxuK1xcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xcbiBcXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cXG4gXFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSk7XFxuIFxcbkBAIC0xMjY4LDcgKzEyNjksOCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXFxuIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxcbiAgKi9cXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcXG4rc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFxcdTAwMjZ0c2stXFx1MDAzZXNrLnNrX3dyaXRlX3F1ZXVlO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCh0eHEpO1xcbkBAIC0xMzEwLDYgKzEzMTIsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcXG4gXFx0XFx0dHNrLVxcdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcXG4gXFx0dHNrLVxcdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXFx1MDAzZXNuZF9iYWNrbG9nO1xcbiBcXHR0c2stXFx1MDAzZXNuZF9iYWNrbG9nID0gMDtcXG4rXFxuK1xcdGlmICh4bWl0cSBcXHUwMDI2XFx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xcbitcXHRcXHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbiBcXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcXG4gXFx0XFx0dHNrLVxcdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcXG5AQCAtMTM2Nyw3ICsxMzc1LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFxuIFxcdFxcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xcbi1cXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XFxuK1xcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XFxuIFxcdFxcdHRzay1cXHUwMDNlc250X3VuYWNrZWQgLT0gbXNnX2Nvbm5fYWNrKGhkcik7XFxuIFxcdFxcdGlmICh0c2stXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcXG4gXFx0XFx0XFx0dHNrLVxcdTAwM2VzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTtcXG5AQCAtMjE2NSw3ICsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRzbXBfd21iKCk7XFxuIFxcdFxcdHRzay1cXHUwMDNlY29uZ19saW5rX2NudC0tO1xcbiBcXHRcXHR3YWtldXAgPSB0cnVlO1xcbi1cXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcXG4rXFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcXG4gXFx0XFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcXHUwMDI2d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpO1xcbkBAIC0yMjU2LDcgKzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIFRJUENfRVNUQUJMSVNIRUQ6XFxuIFxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxcbi1cXHRcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcXG4rXFx0XFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xcbiBcXHRcXHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xcbiBcXHRcXHRpZiAobGlrZWx5KGNvbl9tc2cgXFx1MDAyNlxcdTAwMjYgIWVyciBcXHUwMDI2XFx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MTcuMzIwOTE3MjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODY5Nzg5NDcyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfc2tfcmN2XCIsXG4gICAgXCJ0aXBjX3NlbmRzdHJlYW1cIixcbiAgICBcInRpcGNfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHNvY2tldCBiYWNrbG9nIHByb2Nlc3NpbmcgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgeG1pdHEgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYSBjYWxsIHRvIHRpcGNfbm9kZV94bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6NDg6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBlNTY0MzQxZTAyMTZkLi4xNmQ4NDRmYzhjYTU3IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMTU2LDcgKzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4gc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKTtcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzO1xuQEAgLTU2MCw3ICs1NjEsNyBAQCBzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuIFx0XHRcdFx0XHQgICAgIXRza19jb25uX2NvbmcodHNrKSkpO1xuIFxuIFx0LyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovXG4tXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcbitcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xuIFx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXG4gXHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSk7XG4gXG5AQCAtMTI2OCw3ICsxMjY5LDggQEAgdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlXG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICsxMzEyLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcbiBcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuK1xuK1x0aWYgKHhtaXRxIFx1MDAyNlx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xuK1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgKzEzNzUsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG4gXHRcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcbiBcdFx0aWYgKHRzay1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcbiBcdFx0XHR0c2stXHUwMDNlc25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7XG5AQCAtMjE2NSw3ICsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICsyMjY0LDcgQEAgc3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxuLVx0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjE3LjMyMDkxOTQwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NzczMzk5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUSVBDIHdpdGggYSBOZXcgVHJhbnNtaXQgUXVldWUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AuIFRoZXkncmUgbW9kaWZ5aW5nIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIGFkZGluZyBhIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgcGFyYW1ldGVyLiBBbmQgdGhlIHJlYWwga2lja2VyPyBUaGV5J3JlIG5vdyB1c2luZyB0aGlzIGB4bWl0cWAgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB3aGVuIHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIHRoZSBsb2NhbCBub2RlIOKAkyBgaW5fb3duX25vZGUobmV0LCBkbm9kZSlgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIGFsdGVyaW5nIGhvdyBUSVBDLCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgd2UgYWxsIGtub3cgYW5kIGxvdmUgKGFuZCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgc29ja2V0IEFQSSwgYEFGX1RJUENgKSwgaGFuZGxlcyBpdHMgaW50ZXJuYWwgcXVldWluZy5cblxuVGhpcyBtYWtlcyBtZSB0aGluazogaXQncyBmdXp6aW5nIHRpbWUuIEFueSB0aW1lIHRoZXJlJ3MgYSBjaGFuZ2UgdGhhdCB0b3VjaGVzIGEgbmV0d29ya2luZyBzdWJzeXN0ZW0gbGlrZSB0aGlzLCBlc3BlY2lhbGx5IGEgY29yZSBwYXJ0IG9mIGl0cyBxdWV1aW5nIG1lY2hhbmlzbXMsIHRoZXJlJ3MgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBUSVBDIHRvIG1ha2Ugc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBlbmFibGVkIGZvciBmdXp6aW5nLiBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBgbmV0L3RpcGMvS2NvbmZpZ2AgZm9yIGFueXRoaW5nIHRoYXQgaGFzIGBjb25maWcgVElQQ2AgaW4gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODoyMi44OTgyNjE4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg0MjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVElQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL0tjb25maWctNS1cXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXFxubmV0L3RpcGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjMtXFxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxcbm5ldC90aXBjL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTI5LVxcdCAgSVAtb3Zlci1JbmZpbmlCYW5kIGRldmljZXMuXFxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcXG5uZXQvdGlwYy9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIklQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxcbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXFxubmV0L3RpcGMvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctNTItXFxubmV0L3RpcGMvS2NvbmZpZzo1Mzpjb25maWcgVElQQ19ESUFHXFxubmV0L3RpcGMvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiVElQQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODoyMi45NDMxMTI3MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE0Mzk3ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIGxvb2tpbmcgYXQgaXMgbGFiZWxlZCBgVElQQ2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiwgc28gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgcG9pbnRzLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgcG9pbnRzIHRvIGEgZnVuY3Rpb24gY2FsbGVkIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIHdoaWNoIGl0IGhpZ2hsaWdodHMgYXMgYmVpbmcgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIGludGVybmFsIHRvIGEgcGFydGljdWxhciBtb2R1bGUgb3Igc2NvcGUsIG1ha2luZyBpdCBwb3RlbnRpYWxseSBtb3JlIGxvY2FsaXplZCBpbiBpdHMgaW1wYWN0LlxuXG5UaGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgKmNhbGxlZCogZnJvbS4gSSBzZWUgaXQgbGlzdGVkIGFzIGJlaW5nIGNhbGxlZCBieSBgX190aXBjX3NodXRkb3duYCwgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgLCBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXMgd2VsbC4gQXJlICp0aGV5KiBzdGF0aWM/IFdobyBjYWxscyAqdGhlbSo/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgY2hhaW4gd2lsbCBjbGFyaWZ5IHRoZSBmdW5jdGlvbidzIGluZmx1ZW5jZSwgYW5kIGFsbG93IG1lIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNSwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODoyNy45NTc1MTMzNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTI2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aXBjX3NodXRkb3dufHRpcGNfc2tfY29ubl9wcm90b19yY3Z8dGlwY19za19wcm90b19yY3Z8dGlwY19za19maWx0ZXJfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz00MDM9c3RhdGljIGludCB0aXBjX3NrX3NvY2tfZXJyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvdXQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXFx0d2hpbGUgKChyY18gPSAhKGNvbmRpdGlvbl8pKSkge1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlxcdFxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGlwY19za19wcm90b19yY3YoKSAqLyAgICAgICAgICAgIFxcXFxcXG5uZXQvdGlwYy9zb2NrZXQuYy00MzMtXFx0XFx0c21wX3JtYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NTQyPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNTQ5LS8qIENhbGxlciBzaG91bGQgaG9sZCBzb2NrZXQgbG9jayBmb3IgdGhlIHNvY2tldC4gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo1NTA6c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG5uZXQvdGlwYy9zb2NrZXQuYy01NTEte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NDEtXFx0dHJhY2VfdGlwY19za19yZWxlYXNlKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjY0MjpcXHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19FUlJfTk9fUE9SVCk7XFxubmV0L3RpcGMvc29ja2V0LmMtNjQzLVxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI2LS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjEzMjc6ICogdGlwY19za19jb25uX3Byb3RvX3JjdiAtIHJlY2VpdmUgYSBjb25uZWN0aW9uIG1uZyBwcm90b2NvbCBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMTMyOC0gKiBAdHNrOiByZWNlaXZpbmcgc29ja2V0XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzMyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjEzMzM6c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMTMzNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMTUxPXN0YXRpYyB2b2lkIHRpcGNfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU1LVxcbm5ldC90aXBjL3NvY2tldC5jOjIxNTY6c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTIxNTctXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE2Ny1cXHRjYXNlIENPTk5fTUFOQUdFUjpcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTY4OlxcdFxcdHRpcGNfc2tfY29ubl9wcm90b19yY3YodHNrLCBza2IsIGlucHV0cSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTIxNjktXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE5NS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTk2OiAqIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QgLSBjaGVjayBpbmNvbWluZyBtZXNzYWdlIGZvciBhIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtMjE5Ny0gKiBAdHNrOiBUSVBDIHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjIwMS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjAyOnN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL3NvY2tldC5jLTIyMDMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ2PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzYzLVxcdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzY0OlxcdFxcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcXHUwMDI2aW5wdXRxLCB4bWl0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM2NS1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzNzUtXFx0XFx0bGltaXQgPSByY3ZidWZfbGltaXQoc2ssIHNrYik7XFxubmV0L3RpcGMvc29ja2V0LmM6MjM3NjpcXHRcXHRpZiAoKHNrX2Nvbm4gXFx1MDAyNlxcdTAwMjYgIXRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QodHNrLCBza2IsIHhtaXRxKSkgfHxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc3LVxcdFxcdCAgICAoIXNrX2Nvbm4gXFx1MDAyNlxcdTAwMjYgbXNnX2Nvbm5lY3RlZChoZHIpKSB8fFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjgwOD1zdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI4MTgtXFx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXFxcIiBcXFwiKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyODE5OlxcdF9fdGlwY19zaHV0ZG93bihzb2NrLCBUSVBDX0NPTk5fU0hVVERPV04pO1xcbm5ldC90aXBjL3NvY2tldC5jLTI4MjAtXFx0c2stXFx1MDAzZXNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MjguMDAzODMyODE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5MzU3NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgU29ja2V0IEZ1bmN0aW9uIENhbGwgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIFRJUEMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIEZpcnN0LCBJIHNlZSB0aGF0IGJvdGggYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCB1bHRpbWF0ZWx5IGNhbGwgYF9fdGlwY19zaHV0ZG93bmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGV5J3JlIGxpa2VseSBkaWZmZXJlbnQgZW50cnkgcG9pbnRzIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgc2h1dGRvd24gcHJvY2VkdXJlLiBOb3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgdGlwY19za19maWx0ZXJfcmN2YCBzZWVtcyB0byBiZSB0aGUga2V5IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBJdCBjYW4gcm91dGUgdG8gdHdvIHBsYWNlcy5cblxuVGhlIHByaW1hcnkgcmVjZWl2ZXIgcGF0aCBgdGlwY19za19maWx0ZXJfcmN2YCAtXHUwMDNlIGB0aXBjX3NrX3Byb3RvX3JjdmAgLVx1MDAzZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQgcGF0aCBmb3IgcmVjZWl2aW5nIGRhdGEuIFRoYXQncyBhIGNoYWluIG9mIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBzb2NrZXQgcHJvdG9jb2wsIHVsdGltYXRlbHkgaGFuZGxpbmcgdGhlIGluY29taW5nIHBhY2tldCBkYXRhLlxuXG5CdXQsIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGNhbiBhbHNvIGNhbGwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBzbyB0aGVyZSdzIGFub3RoZXIgY29ubmVjdGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgaXQgdGFrZXMgdGhpcyByb3V0ZS4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYHRpcGNfc2tfZmlsdGVyX3JjdmAgYW5kIHdoYXQncyBjYWxsaW5nIGl0IHRvIGZ1bGx5IGdyYXNwIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjM0LjQ5NzQxMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDM2MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfZmlsdGVyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0yMzE4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzMzUtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjMzNjogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMjMzNy0gKiBAc2s6IHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0NS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzQ2OnN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ny1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU3LVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNTg6XFx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM1OS1cXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VieXRlc19yZWFkID0gMDtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0MTE9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MTgtXFxubmV0L3RpcGMvc29ja2V0LmM6MjQxOTpcXHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDIwLVxcdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOD1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU2LVxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI0NTc6XFx0XFx0XFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODozNC41NDE4NTMwNzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAyMjI5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFBhY2tldCBFbnF1ZXVlaW5nIGluIHRoZSBUSVBDIFNvY2tldCBMYXllcioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHRpcGNfc2tfZmlsdGVyX3JjdmAgaXMgYmVpbmcgaW52b2tlZCBieSB0d28ga2V5IGZ1bmN0aW9uczogYHRpcGNfc2tfYmFja2xvZ19yY3ZgIGFuZCBgdGlwY19za19lbnF1ZXVlYC4gVGhhdCdzIGltcG9ydGFudC4gYHRpcGNfc2tfYmFja2xvZ19yY3ZgLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaGFuZGxlcyB0aGUgcmVjZXB0aW9uIG9mIHBhY2tldHMgdGhhdCBhcmUgc2l0dGluZyBpbiB0aGUgYmFja2xvZyBxdWV1ZSBmb3IgdGhlIHNvY2tldC4gTWFrZXMgc2Vuc2UuIEJ1dCBgdGlwY19za19lbnF1ZXVlYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgcGxhY2luZyBwYWNrZXRzIG9udG8gdGhlIHNvY2tldCdzIHJlY2VpdmUgcXVldWUuXG5cbk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgZXhhY3RseSAqaG93KiBhbmQgKndoZW4qIGB0aXBjX3NrX2VucXVldWVgIGlzIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdGlwY19za19lbnF1ZXVlYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgcGFja2V0cyBnZXQgaW50byB0aGUgcmVjZWl2ZSBwYXRoIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBwYXJ0cyBvZiB0aGUgc3RhY2sgYXJlIHJlbHlpbmcgb24gYHRpcGNfc2tfZmlsdGVyX3JjdmAncyBmaWx0ZXJpbmcgbG9naWMuIEl0J3MgYSBjcml0aWNhbCBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MzkuMDQ0MDg0ODMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzczODk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX2VucXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MjQxMT1zdGF0aWMgaW50IHRpcGNfc2tfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQyOC0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDI5OiAqIHRpcGNfc2tfZW5xdWV1ZSAtIGV4dHJhY3QgYWxsIGJ1ZmZlcnMgd2l0aCBkZXN0aW5hdGlvbiAnZHBvcnQnIGZyb21cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDMwLSAqICAgICAgICAgICAgICAgICAgIGlucHV0cSBhbmQgdHJ5IGFkZGluZyB0aGVtIHRvIHNvY2tldCBvciBiYWNrbG9nIHF1ZXVlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDM3LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjI0Mzg6c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTI0MzktXFx0XFx0XFx0ICAgIHUzMiBkcG9ydCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDkyPXZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTA4LVxcdFxcdFxcdGlmIChsaWtlbHkoc3Bpbl90cnlsb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaykpKSB7XFxubmV0L3RpcGMvc29ja2V0LmM6MjUwOTpcXHRcXHRcXHRcXHR0aXBjX3NrX2VucXVldWUoaW5wdXRxLCBzaywgZHBvcnQsIFxcdTAwMjZ4bWl0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjUxMC1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODozOS4wODc4MjkzMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyOTQ3OTU0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFRJUEMgU29ja2V0IExpZmVjeWNsZSBhbmQgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBUSVBDIHNvY2tldHMgaGFuZGxlIGluY29taW5nIGRhdGEgYW5kIHRoZWlyIG92ZXJhbGwgbGlmZWN5Y2xlLiBJIHVuZGVyc3RhbmQgdGhhdCBgdGlwY19za19yY3ZgIGlzIHRoZSBwcmltYXJ5IHJlY2VpdmUgZnVuY3Rpb24uIFRoYXQncyB0aGUgY29yZSBvZiBkYXRhIHJlY2VwdGlvbiwgdGhlIHdvcmtob3JzZSBvZiBpdCBhbGwuIFNvLCBuYXR1cmFsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQuXG5cbk5vdywgYWxvbmdzaWRlIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IGlzIHJlbGVhc2VkIGFuZCBzaHV0IGRvd24uIFRoZXJlZm9yZSwgSSB3aWxsIGNoZWNrIHRoZSBzb2NrZXQgb3BlcmF0aW9ucyBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gLiBUaGVzZSBtdXN0IGJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlLCBhbmQgcG90ZW50aWFsbHkgaW1wYWN0IHRoZSByZWNlaXZlIHByb2Nlc3MuXG5cbkEgcXVpY2sgdGhvdWdodC4uLiBpcyBgdGlwY19za19yY3ZgIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkPyBJZiBzbywgdGhpcyBoYXMgbWFqb3IgaW1wbGljYXRpb25zIGZvciBob3cgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHZlcnN1cyBleHRlcm5hbGx5IHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0gb3IgZXZlbiBmcm9tIGV4dGVybmFsIG1vZHVsZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSBjYXNlIGFzIGl0IGNoYW5nZXMgaG93IGl0IHdpbGwgYmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjI2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6NTEuMzgyNjI4NTM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0MDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNDYwLVxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXFxubmV0L3RpcGMvYmNhc3QuYzo0NjE6XFx0XFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xcbm5ldC90aXBjL2JjYXN0LmMtNDYyLVxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy00OTAtXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcXG5uZXQvdGlwYy9iY2FzdC5jOjQ5MTpcXHRcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvYmNhc3QuYy00OTItfVxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYz00OTg9aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy01MzItXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcXG5uZXQvdGlwYy9iY2FzdC5jOjUzMzpcXHRcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvYmNhc3QuYy01MzQtXFx0cmV0dXJuIHJjO1xcbi0tXFxubmV0L3RpcGMvYmNhc3QuYz01NTc9dm9pZCB0aXBjX2JjYXN0X3JlbW92ZV9wZWVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqcmN2X2wpXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTU3NC1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShpbnB1dHEpKVxcbm5ldC90aXBjL2JjYXN0LmM6NTc1OlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTU3Ni19XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTA2Mj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfbGlua19kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4sIGludCBiZWFyZXJfaWQsIGJvb2wgZGVsZXRlKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTEwOTMtXFx0XFx0dGlwY19iZWFyZXJfeG1pdChuLVxcdTAwM2VuZXQsIGJlYXJlcl9pZCwgXFx1MDAyNnhtaXRxLCBtYWRkciwgbik7XFxubmV0L3RpcGMvbm9kZS5jOjEwOTQ6XFx0dGlwY19za19yY3Yobi1cXHUwMDNlbmV0LCBcXHUwMDI2bGUtXFx1MDAzZWlucHV0cSk7XFxubmV0L3RpcGMvbm9kZS5jLTEwOTUtfVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNjQwLVxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsaXN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTY0MTpcXHRcXHRcXHR0aXBjX3NrX3JjdihwZWVyX25ldCwgbGlzdCk7XFxubmV0L3RpcGMvbm9kZS5jLTE2NDItXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE2NjUtXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxpc3QtXFx1MDAzZWxvY2spO1xcbm5ldC90aXBjL25vZGUuYzoxNjY2OlxcdFxcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmMtMTY2Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTY4Nz1pbnQgdGlwY19ub2RlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3MDAtXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxpc3QtXFx1MDAzZWxvY2spO1xcbm5ldC90aXBjL25vZGUuYzoxNzAxOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgbGlzdCk7XFxubmV0L3RpcGMvbm9kZS5jLTE3MDItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MjA4Nj12b2lkIHRpcGNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpcGNfYmVhcmVyICpiKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIyMDItXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxlLVxcdTAwM2VpbnB1dHEpKVxcbm5ldC90aXBjL25vZGUuYzoyMjAzOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgXFx1MDAyNmxlLVxcdTAwM2VpbnB1dHEpO1xcbm5ldC90aXBjL25vZGUuYy0yMjA0LVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTE5Mj12b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMjY1LVxcdH1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY2OlxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMjY3LX1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ4NS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDg2OiAqIHRpcGNfc2tfcmN2IC0gaGFuZGxlIGEgY2hhaW4gb2YgaW5jb21pbmcgYnVmZmVyc1xcbm5ldC90aXBjL3NvY2tldC5jLTI0ODctICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0OTEtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MjQ5Mjp2b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxcbm5ldC90aXBjL3NvY2tldC5jLTI0OTMte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0Lmg9NTU9dm9pZCB0aXBjX3NvY2tldF9zdG9wKHZvaWQpO1xcbm5ldC90aXBjL3NvY2tldC5oOjU2OnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpO1xcbm5ldC90aXBjL3NvY2tldC5oLTU3LXZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcXG4tLVxcbm5ldC90aXBjL3RvcHNydi5jPTYxND1zdGF0aWMgdm9pZCB0aXBjX3RvcHNydl9rZXJuX2V2dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2V2ZW50ICpldnQpXFxuLS1cXG5uZXQvdGlwYy90b3BzcnYuYy02MjktXFx0dGlwY19sb29wYmFja190cmFjZShuZXQsIFxcdTAwMjZldnRxKTtcXG5uZXQvdGlwYy90b3BzcnYuYzo2MzA6XFx0dGlwY19za19yY3YobmV0LCBcXHUwMDI2ZXZ0cSk7XFxubmV0L3RpcGMvdG9wc3J2LmMtNjMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6NTEuNDI4NDc0NDc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzI2MzExMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRJUEMgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB0aXBjX3NrX3JjdmAgZnVuY3Rpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgbm9uLXN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlIGl0J3MgZGVmaW5lZCBpbiwgb3IgcG90ZW50aWFsbHkgYmUgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGNvZGViYXNlLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUgc3RhdGljIHNvY2tldCBvcGVyYXRpb25zLiBUaGF0IGltcGxpZXMgdGhleSBhcmUgb25seSBtZWFudCB0byBiZSBhY2Nlc3NlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgVElQQyBtb2R1bGUsIGxpa2VseSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgc2h1dGRvd24gcHJvY2VkdXJlcyBzcGVjaWZpYyB0byBUSVBDIHNvY2tldHMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgZW5jYXBzdWxhdGlvbi5cblxuR2l2ZW4gdGhpcyBpbml0aWFsIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIFRJUEMgc29ja2V0IGxheWVyLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjU2LjE2MTEwODI1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMDQ0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvdG9fb3BzLio9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTMzNDI9c3RhdGljIGludCB0aXBjX3NvY2tldHBhaXIoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NS1cXG5uZXQvdGlwYy9zb2NrZXQuYzozMzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxubmV0L3RpcGMvc29ja2V0LmMtMzM2Ny1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4NS1cXG5uZXQvdGlwYy9zb2NrZXQuYzozMzg2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XFxubmV0L3RpcGMvc29ja2V0LmMtMzM4Ny1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQwNS1cXG5uZXQvdGlwYy9zb2NrZXQuYzozNDA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxubmV0L3RpcGMvc29ja2V0LmMtMzQwNy1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODo1Ni4yMDQzMTY1MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MDYzMjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodCBwcm9jZXNzZXM6XG5cbioqQ2hlY2tpbmcgTXkgT3BlcmF0aW9uYWwgQXJzZW5hbCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGFwcHJvYWNoaW5nIHRoaXMgcHJvYmxlbSBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCBieSBtYWtpbmcgc3VyZSB0aGF0IG15IGdyYXNwIG9uIGBtc2dfb3BzYCBpcyBzb2xpZC4gSSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSBtZXNzYWdlIGhhbmRsaW5nIGZ1bmRhbWVudGFscyBhcmUgaW4gcGxhY2UuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgcGFja2V0X29wc2AgYmVjYXVzZSBJIG5lZWQgdG8gZXhhbWluZSB0aGUgbG93ZXItbGV2ZWwgZGF0YSBlbmNhcHN1bGF0aW9uIGFuZCBkZWxpdmVyeS4gRmluYWxseSwgYW5kIGNydWNpYWxseSwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYHN0cmVhbV9vcHNgLCBzaW5jZSBzdHJlYW1pbmcgYmVoYXZpb3IgY2FuIGJlIGNvbXBsZXggYW5kIGl0J3MgdGhlIGxheWVyIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpbiB0aGVzZSBhcmVhcyBpcyBhcyBpdCBzaG91bGQgYmUsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBoYXZlbid0IGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NzYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTowMC4wODQ5NTE1MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTYyOTgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIobXNnX29wc3xwYWNrZXRfb3BzfHN0cmVhbV9vcHMpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE2MT1zdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjItXFxubmV0L3RpcGMvc29ja2V0LmM6MTYzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7XFxubmV0L3RpcGMvc29ja2V0LmM6MTY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHM7XFxubmV0L3RpcGMvc29ja2V0LmM6MTY1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHM7XFxubmV0L3RpcGMvc29ja2V0LmMtMTY2LXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGlwY19wcm90bztcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTQ2MD1zdGF0aWMgaW50IHRpcGNfc2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTQ3My1cXHRjYXNlIFNPQ0tfU1RSRUFNOlxcbm5ldC90aXBjL3NvY2tldC5jOjQ3NDpcXHRcXHRvcHMgPSBcXHUwMDI2c3RyZWFtX29wcztcXG5uZXQvdGlwYy9zb2NrZXQuYy00NzUtXFx0XFx0YnJlYWs7XFxubmV0L3RpcGMvc29ja2V0LmMtNDc2LVxcdGNhc2UgU09DS19TRVFQQUNLRVQ6XFxubmV0L3RpcGMvc29ja2V0LmM6NDc3OlxcdFxcdG9wcyA9IFxcdTAwMjZwYWNrZXRfb3BzO1xcbm5ldC90aXBjL3NvY2tldC5jLTQ3OC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTQ4MC1cXHRjYXNlIFNPQ0tfUkRNOlxcbm5ldC90aXBjL3NvY2tldC5jOjQ4MTpcXHRcXHRvcHMgPSBcXHUwMDI2bXNnX29wcztcXG5uZXQvdGlwYy9zb2NrZXQuYy00ODItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzQyPXN0YXRpYyBpbnQgdGlwY19zb2NrZXRwYWlyKHN0cnVjdCBzb2NrZXQgKnNvY2sxLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrMilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjUtXFxubmV0L3RpcGMvc29ja2V0LmM6MzM2NjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbm5ldC90aXBjL3NvY2tldC5jLTMzNjctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzODUtXFxubmV0L3RpcGMvc29ja2V0LmM6MzM4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xcbm5ldC90aXBjL3NvY2tldC5jLTMzODctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDUtXFxubmV0L3RpcGMvc29ja2V0LmM6MzQwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbm5ldC90aXBjL3NvY2tldC5jLTM0MDctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MDAuMzM0NTg3MzI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjUzOTIyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIFNvY2tldCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVElQQyBzb2NrZXQgY3JlYXRpb24gcHJvY2VzcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIGFzc2lnbmVkIGR1cmluZyBgdGlwY19za19jcmVhdGVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBwb2ludCBvZiBpbnN0YW50aWF0aW9uLCBzbyBpdCdzIHdoZXJlIHRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3IgcmVjZWl2aW5nIGFuZCBzZW5kaW5nIHdvdWxkIGJlIGRlZmluZWQuIE5vdywgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYXJlIGxpa2VseSBnb2luZyB0byBiZSByZWxhdGVkIHRvIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEknbSB0aGlua2luZyBlaXRoZXIgYHRpcGNfc2tfcmN2YCBmb3IgdGhlIHJlY2VpdmUgcGF0aCwgb3IgYHRpcGNfbm9kZV94bWl0YCBmb3IgdGhlIG5vZGUtbGV2ZWwgdHJhbnNtaXNzaW9uIHBhdGguIFBvdGVudGlhbGx5LCBhbHNvLCBgdGlwY19zZW5kbXNnYC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGB0aXBjX3NlbmRtc2dgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgb3V0Ym91bmQgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTowOC40NTk5ODE4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyODEwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1Nz1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1ODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NzkxPXN0YXRpYyBfX3BvbGxfdCB0aXBjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy04MzktICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo4NDA6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTUzLSAqXFxubmV0L3RpcGMvc29ja2V0LmM6OTU0OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTU3PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX3VuaWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTk5Ny0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjk5ODogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEwMDE9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYW55Y2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTA3OC0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjEwNzk6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTA4Mj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9iY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1Mi0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjExNTM6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTMzMz1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzOTEtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MTM5MjogKiB0aXBjX3NlbmRtc2cgLSBzZW5kIG1lc3NhZ2UgaW4gY29ubmVjdGlvbmxlc3MgbWFubmVyXFxubmV0L3RpcGMvc29ja2V0LmMtMTM5My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwMy0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA0OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNS1cXHRcXHRcXHRzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxMC1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE0MTE6XFx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDEyLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE2LVxcbm5ldC90aXBjL3NvY2tldC5jOjE0MTc6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE4LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE1NjQ9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1ODQtXFx0aWYgKHVubGlrZWx5KGRlc3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRJUENfT1BFTikpIHtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg1OlxcdFxcdHJjID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZGxlbik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU4Ni1cXHRcXHRpZiAoZGxlbiBcXHUwMDI2XFx1MDAyNiBkbGVuID09IHJjKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgyPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjYzNi1cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM3OlxcdFxcdHJlcyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIFxcdTAwMjZtLCAwKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM4LVxcdFxcdGlmICgocmVzIFxcdTAwM2MgMCkgXFx1MDAyNlxcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4MC1cXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODE6XFx0LnNlbmRtc2dcXHQ9IHRpcGNfc2VuZG1zZyxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgyLVxcdC5yZWN2bXNnXFx0PSB0aXBjX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjA4LjUwNzI3MDc1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjYwMzMwMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRm9jdXNpbmcgb24gVElQQyBDb21tdW5pY2F0aW9uIFByaW1pdGl2ZXMqKlxuXG5SaWdodCwgc28gZm9yIHRoZSBzZW5kaW5nIHNpZGUgb2YgdGhpbmdzLCBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24uIFRoZXkncmUgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIHB1dHRpbmcgZGF0YSAqb3V0KiB2aWEgVElQQy4gVGhlbiwgd2hlbiB3ZSdyZSBjb25jZXJuZWQgd2l0aCByZWNlcHRpb24sIGB0aXBjX3NrX3JjdmAgaXMgdGhlIHN5bWJvbCB0byBjZW50ZXIgb24uIFRoYXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgY292ZXJzIHRoZSB0d28gbWFqb3IgYXNwZWN0cyBvZiB0aGUgb3BlcmF0aW9uLlxuXG5Ob3csIHRoYXQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBpdCdzICpzdGF0aWMqLiBNZWFuaW5nIEknbSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byB1c2UgaXQgZGlyZWN0bHksIHNvIEknbGwgbmVlZCB0byBnbyBhbm90aGVyIHdheSwgYW5kIGxldCdzIHN0YXJ0IHdpdGggYHRpcGNfc2VuZHN0cmVhbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjI5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MTMuMTY3NjAzNjQ3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY4NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NlbmRzdHJlYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MTU2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTU3OnN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU4LXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNDE3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQxLS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjE1NDI6ICogdGlwY19zZW5kc3RyZWFtIC0gc2VuZCBzdHJlYW0tb3JpZW50ZWQgZGF0YVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NDMtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NTEtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTU1MjpzdGF0aWMgaW50IHRpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NTMte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU1Ny1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1NTg6XFx0cmV0ID0gX190aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTU5LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTYzLVxcbm5ldC90aXBjL3NvY2tldC5jOjE1NjQ6c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTY1LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE2NTk9c3RhdGljIGludCB0aXBjX3NlbmRfcGFja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjYzLVxcbm5ldC90aXBjL3NvY2tldC5jOjE2NjQ6XFx0cmV0dXJuIHRpcGNfc2VuZHN0cmVhbShzb2NrLCBtLCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE2NjUtfVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjcyOD1zdGF0aWMgaW50IHRpcGNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjc5MS1cXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZtLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XFxubmV0L3RpcGMvc29ja2V0LmM6Mjc5MjpcXHRfX3RpcGNfc2VuZHN0cmVhbShuZXdfc29jaywgXFx1MDAyNm0sIDApO1xcbm5ldC90aXBjL3NvY2tldC5jLTI3OTMtXFx0cmVsZWFzZV9zb2NrKG5ld19zayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zNDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIwLVxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB0aXBjX2dldHNvY2tvcHQsXFxubmV0L3RpcGMvc29ja2V0LmM6MzQyMTpcXHQuc2VuZG1zZ1xcdD0gdGlwY19zZW5kc3RyZWFtLFxcbm5ldC90aXBjL3NvY2tldC5jLTM0MjItXFx0LnJlY3Ztc2dcXHQ9IHRpcGNfcmVjdnN0cmVhbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MTMuMjEwMjk0Mzk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NzI4NjIxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVElQQyBTZW5kIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0aXBjX3NlbmRzdHJlYW1gIGFuZCBgdGlwY19zZW5kbXNnYC4gU29tZXRoaW5nIHN0cnVjayBtZSAtIGFyZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCdzIHF1aWNrbHkgcmV2aWV3IHRoZWlyIGRlZmluaXRpb25zOiBgc3RhdGljIGludCB0aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilgIGFuZCBgc3RhdGljIGludCB0aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilgLiBZZXAsIHRoZXkncmUgZGVmaW5pdGVseSBzdGF0aWMuIE5vdyB0aGF0IEkndmUgY29uZmlybWVkIHRoYXQsIGl0IG1lYW5zIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIHJpZ2h0PyBUaGV5J3JlIGludGVybmFsIHRvIHRoZSBUSVBDIGltcGxlbWVudGF0aW9uIGFuZCBhcmUgbGlrZWx5IGFzc2lnbmVkIHRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIFRodXMsIHRoZXkncmUgbm90IGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBub3cgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIHJlY2VpdmVyIHNpZGUgaXMgc2V0IHVwLiBOZXh0IEkgc2hvdWxkIGNoZWNrIGB0aXBjX3NrX3JjdmAgLSB0aGF0J3MgZGVmaW5pdGVseSBleHBvcnRlZCwgaXNuJ3QgaXQ/IEFuZCwgd2hhdCBhYm91dCBgdGlwY19ub2RlX3htaXRgPyBUaGF0J3MgbGlrZWx5IGV4cG9ydGVkLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgYW5kIHRoZSBwdWJsaWMgaW50ZXJmYWNlcyBleHBvc2VkIGJ5IFRJUEMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjIyLjE4MzE2MDExM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjkyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19ub2RlX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JjYXN0LmM9Mjg4PXN0YXRpYyBpbnQgdGlwY19yY2FzdF94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcGt0cyxcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtMzAzLVxcdFxcdC8qIEFueSBvdGhlciByZXR1cm4gdmFsdWUgdGhhbiAtRUxJTktDT05HIGlzIGlnbm9yZWQgKi9cXG5uZXQvdGlwYy9iY2FzdC5jOjMwNDpcXHRcXHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2X3BrdHMsIGRub2RlLCBzZWxlY3RvcikgPT0gLUVMSU5LQ09ORylcXG5uZXQvdGlwYy9iY2FzdC5jLTMwNS1cXHRcXHRcXHQoKmNvbmdfbGlua19jbnQpKys7XFxuLS1cXG5uZXQvdGlwYy9jcnlwdG8uYz0yMjM4PXN0YXRpYyBpbnQgdGlwY19jcnlwdG9fa2V5X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19hZWFkX2tleSAqc2tleSxcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTIyNjgtXFx0aWYgKGRub2RlKVxcbm5ldC90aXBjL2NyeXB0by5jOjIyNjk6XFx0XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZwa3RzLCBkbm9kZSwgMCk7XFxubmV0L3RpcGMvY3J5cHRvLmMtMjI3MC1cXHRlbHNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjA2PXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIyMS1cXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjIyOlxcdHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjIzLVxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xNjI3PXN0YXRpYyB2b2lkIHRpcGNfbHhjX3htaXQoc3RydWN0IG5ldCAqcGVlcl9uZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTY3OC0vKipcXG5uZXQvdGlwYy9ub2RlLmM6MTY3OTogKiB0aXBjX25vZGVfeG1pdCgpIC0gZ2VuZXJhbCBsaW5rIGxldmVsIGZ1bmN0aW9uIGZvciBtZXNzYWdlIHNlbmRpbmdcXG5uZXQvdGlwYy9ub2RlLmMtMTY4MC0gKiBAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTY4Ni0gKi9cXG5uZXQvdGlwYy9ub2RlLmM6MTY4NzppbnQgdGlwY19ub2RlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbm5ldC90aXBjL25vZGUuYy0xNjg4LVxcdFxcdCAgIHUzMiBkbm9kZSwgaW50IHNlbGVjdG9yKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3NTItXFxubmV0L3RpcGMvbm9kZS5jOjE3NTM6LyogdGlwY19ub2RlX3htaXRfc2tiKCk6IHNlbmQgc2luZ2xlIGJ1ZmZlciB0byBkZXN0aW5hdGlvblxcbm5ldC90aXBjL25vZGUuYy0xNzU0LSAqIEJ1ZmZlcnMgc2VudCB2aWEgdGhpcyBmdW5jdGlvbiBhcmUgZ2VuZXJhbGx5IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0VcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNzU4LSAqL1xcbm5ldC90aXBjL25vZGUuYzoxNzU5OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZG5vZGUsXFxubmV0L3RpcGMvbm9kZS5jLTE3NjAtXFx0XFx0ICAgICAgIHUzMiBzZWxlY3RvcilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNzY1LVxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmhlYWQsIHNrYik7XFxubmV0L3RpcGMvbm9kZS5jOjE3NjY6XFx0dGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIHNlbGVjdG9yKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTc2Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xNzczPWludCB0aXBjX25vZGVfZGlzdHJfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3ODAtXFx0XFx0ZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTc4MTpcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XFxubmV0L3RpcGMvbm9kZS5jLTE3ODItXFx0fVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE3ODY9dm9pZCB0aXBjX25vZGVfYnJvYWRjYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJjX2Rlc3RzKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE4MTMtXFx0XFx0bXNnX3NldF9kZXN0bm9kZShidWZfbXNnKHR4c2tiKSwgZHN0KTtcXG5uZXQvdGlwYy9ub2RlLmM6MTgxNDpcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCB0eHNrYiwgZHN0LCAwKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTgxNS1cXHR9XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmg9OTk9aW50IHRpcGNfbm9kZV9nZXRfbGlua25hbWUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgbm9kZSxcXG5uZXQvdGlwYy9ub2RlLmgtMTAwLVxcdFxcdFxcdCAgIGNoYXIgKmxpbmtuYW1lLCBzaXplX3QgbGVuKTtcXG5uZXQvdGlwYy9ub2RlLmg6MTAxOmludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9ub2RlLmgtMTAyLVxcdFxcdCAgIGludCBzZWxlY3Rvcik7XFxubmV0L3RpcGMvbm9kZS5oPTEwMz1pbnQgdGlwY19ub2RlX2Rpc3RyX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmg6MTA0OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGVzdCxcXG5uZXQvdGlwYy9ub2RlLmgtMTA1LVxcdFxcdCAgICAgICB1MzIgc2VsZWN0b3IpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9Mjg2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVzcG9uZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTctXFx0c2VsZWN0b3IgPSBtc2dfb3JpZ3BvcnQoYnVmX21zZyhza2IpKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTg6XFx0dGlwY19ub2RlX3htaXRfc2tiKHNvY2tfbmV0KHNrKSwgc2tiLCBkbm9kZSwgc2VsZWN0b3IpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI5OS19XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz01NTA9c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTU5Ny1cXHRcXHRpZiAoc2tiKVxcbm5ldC90aXBjL3NvY2tldC5jOjU5ODpcXHRcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtNTk5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTkzMS1cXHQvKiBTZW5kIG1lc3NhZ2UgKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo5MzI6XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZwa3RzLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTkzMy1cXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEyNzI9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzMjAtXFxubmV0L3RpcGMvc29ja2V0LmM6MTMyMTpcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTEzMjItXFx0aWYgKHJjID09IC1FTElOS0NPTkcpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNDE3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTIyLVxcdHRyYWNlX3RpcGNfc2tfc2VuZG1zZyhzaywgc2tiX3BlZWsoXFx1MDAyNnBrdHMpLCBUSVBDX0RVTVBfU0tfU05EUSwgXFxcIiBcXFwiKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTIzOlxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2cGt0cywgc2thZGRyLm5vZGUsIHRzay1cXHUwMDNlcG9ydGlkKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTI0LVxcdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTU2ND1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTYzMy1cXHRcXHRcXHRcXHRcXHQgVElQQ19EVU1QX1NLX1NORFEsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmM6MTYzNDpcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTE2MzUtXFx0XFx0aWYgKHVubGlrZWx5KHJjID09IC1FTElOS0NPTkcpKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xODI4PXN0YXRpYyB2b2lkIHRpcGNfc2tfc2VuZF9hY2soc3RydWN0IHRpcGNfc29jayAqdHNrKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTgzNS1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxODM2OlxcdHRpcGNfbm9kZV94bWl0X3NrYihzb2NrX25ldChcXHUwMDI2dHNrLVxcdTAwM2VzayksIHNrYiwgdHNrX3BlZXJfbm9kZSh0c2spLFxcbm5ldC90aXBjL3NvY2tldC5jLTE4MzctXFx0XFx0XFx0ICAgbXNnX2xpbmtfc2VsZWN0b3IoYnVmX21zZyhza2IpKSk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDkyPXZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTMzLVxcdFxcdGRub2RlID0gbXNnX2Rlc3Rub2RlKGJ1Zl9tc2coc2tiKSk7XFxubmV0L3RpcGMvc29ja2V0LmM6MjUzNDpcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBkcG9ydCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjUzNS1cXHR9XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODc3PXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5MDMtXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxpc3QpKVxcbm5ldC90aXBjL3NvY2tldC5jOjI5MDQ6XFx0XFx0cmMgPSB0aXBjX25vZGVfeG1pdChzb2NrX25ldChzayksIFxcdTAwMjZsaXN0LCBwbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI5MDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjIyLjIyOTQ5NzcxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY0MTY3MDM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgUGF0Y2ggZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgYW5kIGB0aXBjX25vZGVfeG1pdF9za2JgIHNlZW0gbGlrZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBidXQgYHRpcGNfc2tfcmN2YCBpcyBhbHNvIGV4cG9ydGVkLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRyaWd1aW5nLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGNoLCBhbmQgZXhwb3NlZCBmb3IgZnV6emluZy5cblxuSSB3YXMgaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYCBhcyBnb29kIGNhbmRpZGF0ZXMgc2luY2UgdGhlc2UgYXJlIHVzZXItc3BhY2UgZW50cnkgcG9pbnRzLiBJIHRoZW4gcmVhbGl6ZWQgdGhleSdyZSBzdGF0aWMuIEEgcXVpY2sgY2hlY2sgY29uZmlybWVkIHRoYXQgdGhleSBhcmUgbm90IGlubGluZWQuIFRoaXMgbWFrZXMgdGhlbSBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZXkgYXJlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AsIHNvIEknbSBjb25maWRlbnQgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkhvd2V2ZXIsIHRoZSByZWFsIGNoYW5nZSBpcyBpbiBgdGlwY19za19wdXNoX2JhY2tsb2dgLiBJdCBsb29rcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbiBsaWVzLiBJdCdzIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzOiBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgYW5kIGBfX3RpcGNfc2h1dGRvd25gLiBDcml0aWNhbGx5LCBhbGwgdGhlc2UgY2FsbGVycyBhcmUgb24gdGhlIHJlY2VpdmUgcGF0aCBvciBzaHV0ZG93biBwYXRoLiBUaGlzIHN1Z2dlc3RzIHRoYXQgd2hpbGUgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGFyZSBmb3IgdGhlIHNlbmQgcGF0aC4gYHRpcGNfc2tfcmN2YCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHJlY2VpdmUgcGF0aC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGhvdyB0aGUgdHJhbnNtaXQgcXVldWUgaXMgaGFuZGxlZCBpbiBsb2NhbCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHNhbWUgbm9kZS4gSXQgb3B0aW1pemVzIGxvY2FsIGNvbW11bmljYXRpb24uIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYHhtaXRxYCwgd2hpY2ggaXMgdGhlbiBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlciBpbiB0aGUgcmVjZWl2aW5nIHBhdGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgYW5kIHRyYW5zbWl0dGVkIGxvY2FsbHksIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGhhcyBiZWVuIHJlZmluZWQgdG86XG5cbiogICBgdGlwY19za19yY3ZgIChwcmltYXJ5KVxuKiAgIGB0aXBjX3NlbmRzdHJlYW1gXG5cbldoaWxlIGB0aXBjX3NlbmRtc2dgIGlzIHN0YXRpYywgaXQncyBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYCB3aGljaCBtZWFucyBpdCdzIG5vdCBpbmxpbmVkIGFuZCBoZW5jZSBhIGdvb2QgZm9jdXMgc3ltYm9sLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gYmUgc3VyZS4gSSBjYW4gY29uZmlybSwgYF9fdGlwY19zaHV0ZG93bmAgY2FsbHMgaXQgd2l0aCBgeG1pdHEgPSBOVUxMYCwgYW5kIHRoZSBvdGhlcnMgY2FsbCBpdCB3aXRoIGFuIGB4bWl0cWAuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSByZWNlaXZlIHBhdGggaXMgbXkgbWFpbiBmb2N1cywgcGFydGljdWxhcmx5IGB0aXBjX3NrX3JjdmAuIFNpbmNlIGB0aXBjX3NlbmRzdHJlYW1gIGlzIGludm9sdmVkLCBJIHNob3VsZCB1c2UgdGhhdCBhcyB3ZWxsLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGJhY2tsb2cgZ2VuZXJhdGlvbiBpcyB0cmlnZ2VyZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24sIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGF0aCB0byByZWFjaCB0aGUgbW9kaWZpZWQgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRpcGNfc2VuZHN0cmVhbWAgYW5kIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0uIGB0aXBjX3NlbmRzdHJlYW1gIHF1ZXVlcyBwYWNrZXRzLiBgdGlwY19za19wdXNoX2JhY2tsb2dgIGlzIGNhbGxlZCB3aGVuIGFuIEFDSyBpcyByZWNlaXZlZCBvciB3aGVuIHRoZSBzb2NrZXQgaXMgc2h1dCBkb3duLlxuXG5UaGVyZWZvcmUsIGB0aXBjX3NrX3JjdmAgYmVjb21lcyB0aGUgbWFpbiBmb2N1cyBzeW1ib2wuIEFkZGl0aW9uYWxseSwgYHRpcGNfc2VuZHN0cmVhbWAgaXMgYWxzbyBhIGdvb2Qgc3ltYm9sIHRvIGdlbmVyYXRlIGJhY2tsb2cuIEkgd2lsbCBub3cgZXhhbWluZSBgdGlwY19za19yY3ZgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MzMuODcxMTcwMzg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY1NTc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHRpcGNfc2tfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5MS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDkyOnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjMzLjk2NzgzMTQ4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI1MjY2OTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVElQQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHRpcGNfc2tfcmN2YCBpcyBub24tc3RhdGljIOKAkyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gd2Ugc2hvdWxkIGJlIHBheWluZyBhdHRlbnRpb24gdG8uIGB0aXBjX3NlbmRzdHJlYW1gIGFuZCBgdGlwY19zZW5kbXNnYCBhcmUgYm90aCBzdGF0aWMgYnV0ICpub3QqIGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gcmVsZXZhbnQsIGJ1dCBwZXJoYXBzIGxlc3MgY3JpdGljYWwgdGhhbiBgdGlwY19za19yY3ZgLiBBbHRob3VnaCBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBhbHNvIHN0YXRpYyBhbmQgbm9uLWlubGluZWQsIEknbSBnb2luZyB0byBzZXQgdGhlbSBhc2lkZSBmb3Igbm93LCBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucy4gU28sIEkgd2lsbCBmb2N1cyBvbiBgdGlwY19za19yY3ZgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAsIGFuZCBjb25zaWRlciBgdGlwY19zZW5kbXNnYC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBUSVBDYCBjb25maWcgYWdhaW4uIEl0J3MgdHJpc3RhdGUuIFNvLCBgVElQQ2AgaXMgdGhlIG1haW4gdGhpbmcgdG8gd29ycnkgYWJvdXQgY29uZmlnLXdpc2UuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLi4uIEFoLCBoZXJlIHdlIGdvLiBUaGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24uIEl0J3MgZXNzZW50aWFsbHkgb3B0aW1pemluZyBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCB3aGVuIGRlc3RpbmVkIGZvciB0aGUgbG9jYWwgbm9kZS4gSWYgYW4gYHhtaXRxYCBpcyBwcm92aWRlZCBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIGxvY2FsLCB0aGUgY29kZSBub3cgKnNwbGljZXMqIHRoZSB0cmFuc21pdCBxdWV1ZSB0byB0aGUgYHhtaXRxYCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgYSBjYWxsIHRvIGB0aXBjX25vZGVfeG1pdGAgaW4gdGhhdCBzY2VuYXJpby4gRnJvbSBhIG5ldHdvcmtpbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkaXN0aW5jdCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgVElQQyBoYW5kbGVzIHRoZSBzb2NrZXQgYmFja2xvZy5cblxuU28sIGhvdyBjYW4gd2UgdHJpZ2dlciB0aGlzPyBJIGNhbiBjcmVhdGUgYSBUSVBDIHNvY2tldCwgc2VuZCBzb21lIGRhdGEgdG8gYSBsb2NhbCBub2RlICh3aGljaCB3aWxsIHF1ZXVlIGl0IGlmIE5hZ2xlIGlzIG9uIG9yIHRoZSBsaW5rIGlzIGNvbmdlc3RlZCksIGFuZCB0aGVuIHRyaWdnZXIgYW4gQUNLIG9yIHNodXQgZG93biB0aGUgc29ja2V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBnb29kIGNvdmVyYWdlLlxuXG5UaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIFwiV29ydGhGdXp6aW5nXCIgYW5kIHRoZSBcIkZvY3VzU3ltYm9sc1wiIHNob3VsZCBiZSBgdGlwY19za19yY3ZgLCBgdGlwY19zZW5kc3RyZWFtYCwgYW5kIGB0aXBjX3NlbmRtc2dgLiBJIHdpbGwgYWxzbyBcIkVuYWJsZUNvbmZpZ3NcIiBmb3IgYFRJUENgLiBUaGUgY29yZSBcIlJlYXNvbmluZ1wiIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyB0aGUgYmFja2xvZyBwcm9jZXNzaW5nLCBzcGxpY2luZyB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgdG8gYHhtaXRxYCBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBgdGlwY19ub2RlX3htaXRgLCBhbmQgdGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2NywiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMjIwNTA0MDEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNTc2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19zZW5kc3RyZWFtXCIsXG4gICAgXCJ0aXBjX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzb2NrZXQgYmFja2xvZyBwcm9jZXNzaW5nIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVkIHhtaXRxIGZvciBsb2NhbCBkZXN0aW5hdGlvbnMsIGF2b2lkaW5nIGEgY2FsbCB0byB0aXBjX25vZGVfeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBBUEkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfc2tfcmN2XCIsXG4gICAgXCJ0aXBjX3NlbmRzdHJlYW1cIixcbiAgICBcInRpcGNfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHNvY2tldCBiYWNrbG9nIHByb2Nlc3NpbmcgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgeG1pdHEgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYSBjYWxsIHRvIHRpcGNfbm9kZV94bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMjk5ODY4ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzg0Mzc0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMzAwNDIyMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjIzODM4MTcxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTNkODYyOGEwODg3YzhmNzA1NmNmMjQwM2IzMjZiMTc1ZjE5NDZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMDo0ODoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmNcbmluZGV4IGU1NjQzNDFlMDIxNmQuLjE2ZDg0NGZjOGNhNTcgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xuKysrIGIvbmV0L3RpcGMvc29ja2V0LmNcbkBAIC0xNTYsNyArMTU2LDggQEAgc3RhdGljIGludCB0aXBjX3NrX2luc2VydChzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xuIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spO1xuK3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xuIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7XG5AQCAtNTYwLDcgKzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG4gXHRcdFx0XHRcdCAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7XG4gXG4gXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cbi1cdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgTlVMTCk7XG4gXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cbiBcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKTtcbiBcbkBAIC0xMjY4LDcgKzEyNjksOCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4gLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcbiAgKi9cbi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxuK3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqdHhxID0gXHUwMDI2dHNrLVx1MDAzZXNrLnNrX3dyaXRlX3F1ZXVlO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTtcbkBAIC0xMzEwLDYgKzEzMTIsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbiBcdFx0dHNrLVx1MDAzZXBrdF9jbnQgKz0gc2tiX3F1ZXVlX2xlbih0eHEpO1xuIFx0dHNrLVx1MDAzZXNudF91bmFja2VkICs9IHRzay1cdTAwM2VzbmRfYmFja2xvZztcbiBcdHRzay1cdTAwM2VzbmRfYmFja2xvZyA9IDA7XG4rXG4rXHRpZiAoeG1pdHEgXHUwMDI2XHUwMDI2IGluX293bl9ub2RlKG5ldCwgZG5vZGUpKSB7XG4rXHRcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG4gXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQgPSAxO1xuQEAgLTEzNjcsNyArMTM3NSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGdvdG8gZXhpdDtcbiBcbiBcdFx0d2FzX2NvbmcgPSB0c2tfY29ubl9jb25nKHRzayk7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpKTtcbitcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTtcbiBcdFx0dHNrLVx1MDAzZXNudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpO1xuIFx0XHRpZiAodHNrLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19CTE9DS19GTE9XQ1RMKVxuIFx0XHRcdHRzay1cdTAwM2VzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTtcbkBAIC0yMTY1LDcgKzIxNzMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHNtcF93bWIoKTtcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQtLTtcbiBcdFx0d2FrZXVwID0gdHJ1ZTtcbi1cdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEdST1VQX1BST1RPQ09MOlxuIFx0XHR0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsIFx1MDAyNndha2V1cCwgaGRyLCBpbnB1dHEsIHhtaXRxKTtcbkBAIC0yMjU2LDcgKzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBUSVBDX0VTVEFCTElTSEVEOlxuIFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSkpXG4tXHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xuIFx0XHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xuIFx0XHRpZiAobGlrZWx5KGNvbl9tc2cgXHUwMDI2XHUwMDI2ICFlcnIgXHUwMDI2XHUwMDI2IHBwb3J0ID09IG9wb3J0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIHBub2RlID09IG9ub2RlKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMzAwNDI0ODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxMzc2MzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgU29ja2V0IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgYXMgYW4gYXJndW1lbnQuIEkgc2VlIGl0J3MgY29uZGl0aW9uYWxseSBxdWV1ZWluZyBTS0JzIHRvIGB4bWl0cWAgKmluc3RlYWQqIG9mIGltbWVkaWF0ZWx5IHRyYW5zbWl0dGluZyB0aGVtIHdpdGggYHRpcGNfbm9kZV94bWl0YCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhhdCdzIGludGVyZXN0aW5nLCBlc3NlbnRpYWxseSBkZWZlcnJpbmcgdGhlIHRyYW5zbWlzc2lvbiBmb3IgbG9jYWwgdHJhZmZpYy5cblxuVGhlIGNvZGUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXTigJlzIGEgbG9naWMgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHF1ZXVlIG1hbmFnZW1lbnQgcmVmYWN0b3IuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdCBtZW1iZXJzLCBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gSXQncyBqdXN0IG1vdmluZyBTS0JzIGFyb3VuZCwgc28gdGhlIHR5cGljYWwgYnVncyBJ4oCZZCBiZSB3b3JyaWVkIGFib3V0IGhlcmUgYXJlIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoYW5rZnVsbHksIEtBU0FOIHNob3VsZCBiZSB3ZWxsLWVxdWlwcGVkIHRvIGNhdGNoIHRob3NlLiBUaGVyZSdzIG5vIG9idmlvdXMgdmVjdG9yIGZvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gYSBicmFuY2hpbmcgY29uZGl0aW9uLiBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyBzdWNoIGlzc3VlcyBiZWNhdXNlIHRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHhtaXRxYC4gSSBzZWUgaXQncyBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgbGlrZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGFuZCBgdGlwY19za19maWx0ZXJfY29ubmVjdGAuIFRoZXNlIGZ1bmN0aW9ucyByZWNlaXZlIGB4bWl0cWAgYXMgYW4gYXJndW1lbnQsIHNvIGl0cyB1c2UgaXMgY29uc2lzdGVudCB0aHJvdWdob3V0LiBOb3csIGB0aXBjX3NrX3JjdmAsIGlzIGEgbGlrZWx5IGluaXRpYWxpemF0aW9uIHNpdGUsIGFuZCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gaXNzdWUgd2l0aCBpdC4gSG9uZXN0bHksIGV2ZW4gaWYgYHhtaXRxYCB3ZXJlIHVuaW5pdGlhbGl6ZWQsIGl0J3MganVzdCBhIHBvaW50ZXIsIGFuZCBpdHMgdXNhZ2Ugd291bGQgYmUgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgcG9pbnRlciBidWcgdGhhdCBLTVNBTiBzaG91bGQgY2F0Y2guIEhvd2V2ZXIsIEkgc2hvdWxkIGNoZWNrLCBmb3IgY29tcGxldGVuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NTIuMjE0MTkwMTg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1NjQwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19za19jb25uX3Byb3RvX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI2LS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjEzMjc6ICogdGlwY19za19jb25uX3Byb3RvX3JjdiAtIHJlY2VpdmUgYSBjb25uZWN0aW9uIG1uZyBwcm90b2NvbCBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMTMyOC0gKiBAdHNrOiByZWNlaXZpbmcgc29ja2V0XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzMyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjEzMzM6c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMTMzNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMTU2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcHJvdG9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIxNjctXFx0Y2FzZSBDT05OX01BTkFHRVI6XFxubmV0L3RpcGMvc29ja2V0LmM6MjE2ODpcXHRcXHR0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHRzaywgc2tiLCBpbnB1dHEsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTY5LVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NTIuMzU5NzYzMTg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDYzMTY5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGB0aXBjX3NrX3Byb3RvX3JjdmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY2FsbGVycyBvZiBgdGlwY19za19wcm90b19yY3ZgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmssIHNvIHVuZGVyc3RhbmRpbmcgd2hvJ3MgY2FsbGluZyBpdCBpcyBlc3NlbnRpYWwgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IHBhdGhzIHRoYXQgZGF0YSBjYW4gdGFrZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBrZXJuZWwncyBzb3VyY2UgY29kZSwgcG9zc2libHkgdXNpbmcgdG9vbHMgbGlrZSBgY3Njb3BlYCwgYGdkYmAsIG9yIHNpbXBseSBhIGdyZXAgc2VhcmNoIGFjcm9zcyB0aGUgcmVsZXZhbnQgZmlsZXMuIEknbSBhaW1pbmcgdG8gaWRlbnRpZnkgdGhlIGltbWVkaWF0ZSBmdW5jdGlvbnMgY2FsbGluZyBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgZnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgd2lkZXIgY29udGV4dCB3aXRoaW4gdGhlIFRJUEMgc3Vic3lzdGVtLiBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0cmlnZ2VyZWQgdGhlIGludmVzdGlnYXRpb24sIGFuZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbm5lY3Rpb25zIHRvIGtub3duIGFyZWFzIG9mIGludGVyZXN0IG9yIHBvdGVudGlhbCBwcm9ibGVtIHBvaW50cywgb3IgbWF5YmUganVzdCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NTYuNTY2MDgzMzI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzE5MTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX3Byb3RvX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz00MDM9c3RhdGljIGludCB0aXBjX3NrX3NvY2tfZXJyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvdXQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXFx0d2hpbGUgKChyY18gPSAhKGNvbmRpdGlvbl8pKSkge1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlxcdFxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGlwY19za19wcm90b19yY3YoKSAqLyAgICAgICAgICAgIFxcXFxcXG5uZXQvdGlwYy9zb2NrZXQuYy00MzMtXFx0XFx0c21wX3JtYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjE1MT1zdGF0aWMgdm9pZCB0aXBjX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE1NS1cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTU2OnN0YXRpYyB2b2lkIHRpcGNfc2tfcHJvdG9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIzNDY9c3RhdGljIHZvaWQgdGlwY19za19maWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzNjMtXFx0aWYgKHVubGlrZWx5KCFtc2dfaXNkYXRhKGhkcikpKVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNjQ6XFx0XFx0dGlwY19za19wcm90b19yY3Yoc2ssIFxcdTAwMjZpbnB1dHEsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTo1Ni42MjMyODEzNzVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMTc4NjEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGlwY19za19maWx0ZXJfcmN2YCBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdGlwY19za19maWx0ZXJfcmN2YCBjYWxsZXJzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIGluIHRoZSBUaXBjIHNvY2tldCBmaWx0ZXJpbmcgcHJvY2VzcywgYW5kIHVuZGVyc3RhbmRpbmcgd2hvJ3MgY2FsbGluZyBpdCBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIG92ZXJ2aWV3LiBJIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFjZSBob3cgbWVzc2FnZXMgYXJlIGdldHRpbmcgaGFuZGxlZCwgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBldmVuIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc3RhcnQgdGhlIGRlZXAgZGl2ZSBpbnRvIHRob3NlIGNhbGwgc3RhY2tzIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVuZXhwZWN0ZWQgb3IgaW5lZmZpY2llbnQgdXNhZ2UgcGF0dGVybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTo1OS41NDUwNjk3MDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzcxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfZmlsdGVyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0yMzE4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzMzUtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjMzNjogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMjMzNy0gKiBAc2s6IHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0NS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzQ2OnN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ny1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU3LVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNTg6XFx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM1OS1cXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VieXRlc19yZWFkID0gMDtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0MTE9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MTgtXFxubmV0L3RpcGMvc29ja2V0LmM6MjQxOTpcXHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDIwLVxcdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOD1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU2LVxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI0NTc6XFx0XFx0XFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTo1OS41ODc4NDcyOTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5NjM3MTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0aXBjX3NrX2JhY2tsb2dfcmN2YCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgcGF0Y2ggaW1wYWN0cyBpdC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYHhtaXRxYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgdXNpbmcgYF9fc2tiX3F1ZXVlX2hlYWRfaW5pdGAuIE5vIHdvcnJpZXMgdGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgb3B0aW1pemluZyBob3cgU0tCcyBhcmUgc2VudCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gSW5zdGVhZCBvZiB0aGUgZGlyZWN0IGNhbGwgdG8gYHRpcGNfbm9kZV94bWl0YCwgaXQncyBub3cgc3BsaWNpbmcgdG8gYHhtaXRxYC4gVGhpcyBpcyBjbGFzc2ljOyB0aGlzIGlzIGFsbCBhYm91dCBhdm9pZGluZyBwb3RlbnRpYWwgbG9ja2luZyBwcm9ibGVtcyBvciByZWVudHJhbmN5IGlzc3VlcyBieSBiYXRjaGluZyB0aGUgdHJhbnNtaXNzaW9ucywgb3IgcG9zc2libHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHdpdGggc29tZSBraW5kIG9mIGxvY2FsIG9wdGltaXphdGlvbi5cblxuRnJvbSBhIG1lbW9yeSBwZXJzcGVjdGl2ZSwgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyB3aXRoIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgbWFuaXB1bGF0aW5nIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIEtBU0FOLCB3aXRoIGl0cyBzdXBlcmIgY292ZXJhZ2UsIHdpbGwgaGFuZGxlIHBlcmZlY3RseS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGlzbid0IGEgS01TQU4tcmVsZXZhbnQgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc0LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo1MDowNi42ODQyMjEzM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBvcHRpb25hbGx5IHNwbGljZSB0aGUgc29ja2V0J3Mgd3JpdGUgcXVldWUgaW50byBhIHByb3ZpZGVkIGB4bWl0cWAgaW5zdGVhZCBvZiB0cmFuc21pdHRpbmcgdGhlIGJ1ZmZlcnMgZGlyZWN0bHkgdmlhIGB0aXBjX25vZGVfeG1pdGAgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgZmllbGRzLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHRoZSBza2IgcXVldWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowwbn7v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 10:46:42 +0000 UTC FinishedAt: 2026-08-07 10:50:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "1590cf0329716306e948a8fc29f1d3ee87d3989f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "79ccab76-aba2-45b1-a91e-6713f5be341d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "tipc_sk_rcv", "tipc_sendstream", "tipc_sendmsg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX3NrX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRzdHJlYW0mIzM0OywKICAgICYjMzQ7dGlwY19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBvcHRpb25hbGx5IHNwbGljZSB0aGUgc29ja2V0JiMzOTtzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc29ja2V0IGJhY2tsb2cgcHJvY2Vzc2luZyB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCB4bWl0cSBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBhIGNhbGwgdG8gdGlwY19ub2RlX3htaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXR3b3JraW5nIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6NDg6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZTU2NDM0MWUwMjE2ZC4uMTZkODQ0ZmM4Y2E1NyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTE1Niw3ICYjNDM7MTU2LDggQEAgc3RhdGljIGludCB0aXBjX3NrX2luc2VydChzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xuIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spO1xuJiM0MztzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XG4gc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcbkBAIC01NjAsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG4gXHRcdFx0XHRcdCAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7XG4gXG4gXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cbi1cdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuJiM0MztcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xuIFx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXG4gXHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSk7XG4gXG5AQCAtMTI2OCw3ICYjNDM7MTI2OSw4IEBAIHZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcbiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxuICAqL1xuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4mIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICYjNDM7MTMxMiwxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxuIFx0XHR0c2stXHUwMDNlcGt0X2NudCAmIzQzOz0gc2tiX3F1ZXVlX2xlbih0eHEpO1xuIFx0dHNrLVx1MDAzZXNudF91bmFja2VkICYjNDM7PSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoeG1pdHEgXHUwMDI2XHUwMDI2IGluX293bl9ub2RlKG5ldCwgZG5vZGUpKSB7XG4mIzQzO1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgJiM0MzsxMzc1LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0Z290byBleGl0O1xuIFxuIFx0XHR3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTtcbi1cdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkcikpO1xuJiM0MztcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTtcbiBcdFx0dHNrLVx1MDAzZXNudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpO1xuIFx0XHRpZiAodHNrLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19CTE9DS19GTE9XQ1RMKVxuIFx0XHRcdHRzay1cdTAwM2VzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTtcbkBAIC0yMTY1LDcgJiM0MzsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuJiM0MztcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgR1JPVVBfUFJPVE9DT0w6XG4gXHRcdHRpcGNfZ3JvdXBfcHJvdG9fcmN2KGdycCwgXHUwMDI2d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpO1xuQEAgLTIyNTYsNyAmIzQzOzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBUSVBDX0VTVEFCTElTSEVEOlxuIFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSkpXG4tXHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4mIzQzO1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfc2tfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfc2VuZHN0cmVhbSYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc29ja2V0IGJhY2tsb2cgcHJvY2Vzc2luZyB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCB4bWl0cSBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBhIGNhbGwgdG8gdGlwY19ub2RlX3htaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXR3b3JraW5nIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTA6NDg6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IGU1NjQzNDFlMDIxNmQuLjE2ZDg0NGZjOGNhNTcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0xNTYsNyAmIzQzOzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CiBzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opOwogc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTsKLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spOwomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7CiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wczsKQEAgLTU2MCw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcikKIAkJCQkJICAgICF0c2tfY29ubl9jb25nKHRzaykpKTsKIAogCS8qIFB1c2ggb3V0IGRlbGF5ZWQgbWVzc2FnZXMgaWYgaW4gTmFnbGUgbW9kZSAqLwotCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCBOVUxMKTsKIAkvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi8KIAlfX3NrYl9xdWV1ZV9wdXJnZSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSk7CiAKQEAgLTEyNjgsNyAmIzQzOzEyNjksOCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsCiAvKiB0aXBjX3NrX3B1c2hfYmFja2xvZygpOiBzZW5kIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgaW4gc29ja2V0IHdyaXRlIHF1ZXVlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlCiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spCiYjNDM7c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaywKJiM0MzsJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKQogewogCXN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9ICZhbXA7dHNrLSZndDtzay5za193cml0ZV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCh0eHEpOwpAQCAtMTMxMCw2ICYjNDM7MTMxMiwxMiBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQogCQl0c2stJmd0O3BrdF9jbnQgJiM0Mzs9IHNrYl9xdWV1ZV9sZW4odHhxKTsKIAl0c2stJmd0O3NudF91bmFja2VkICYjNDM7PSB0c2stJmd0O3NuZF9iYWNrbG9nOwogCXRzay0mZ3Q7c25kX2JhY2tsb2cgPSAwOwomIzQzOwomIzQzOwlpZiAoeG1pdHEgJmFtcDsmYW1wOyBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkgewomIzQzOwkJc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQodHhxLCB4bWl0cSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLSZndDtwb3J0aWQpOwogCWlmIChyYyA9PSAtRUxJTktDT05HKQogCQl0c2stJmd0O2NvbmdfbGlua19jbnQgPSAxOwpAQCAtMTM2Nyw3ICYjNDM7MTM3NSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJZ290byBleGl0OwogCiAJCXdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7CiYjNDM7CQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSwgeG1pdHEpOwogCQl0c2stJmd0O3NudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpOwogCQlpZiAodHNrLSZndDtwZWVyX2NhcHMgJmFtcDsgVElQQ19CTE9DS19GTE9XQ1RMKQogCQkJdHNrLSZndDtzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTsKQEAgLTIxNjUsNyAmIzQzOzIxNzMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssCiAJCXNtcF93bWIoKTsKIAkJdHNrLSZndDtjb25nX2xpbmtfY250LS07CiAJCXdha2V1cCA9IHRydWU7Ci0JCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQlicmVhazsKIAljYXNlIEdST1VQX1BST1RPQ09MOgogCQl0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsICZhbXA7d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpOwpAQCAtMjI1Niw3ICYjNDM7MjI2NCw3IEBAIHN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBUSVBDX0VTVEFCTElTSEVEOgogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza193cml0ZV9xdWV1ZSkpCi0JCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7CiAJCS8qIEFjY2VwdCBvbmx5IGNvbm5lY3Rpb24tYmFzZWQgbWVzc2FnZXMgc2VudCBieSBwZWVyICovCiAJCWlmIChsaWtlbHkoY29uX21zZyAmYW1wOyZhbXA7ICFlcnIgJmFtcDsmYW1wOyBwcG9ydCA9PSBvcG9ydCAmYW1wOyZhbXA7CiAJCQkgICBwbm9kZSA9PSBvbm9kZSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRJUEMgd2l0aCBhIE5ldyBUcmFuc21pdCBRdWV1ZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gYG5ldC90aXBjL3NvY2tldC5jYC4gVGhleSYjMzk7cmUgbW9kaWZ5aW5nIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIGFkZGluZyBhIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgcGFyYW1ldGVyLiBBbmQgdGhlIHJlYWwga2lja2VyPyBUaGV5JiMzOTtyZSBub3cgdXNpbmcgdGhpcyBgeG1pdHFgIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgd2hlbiB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyB0aGUgbG9jYWwgbm9kZSDigJMgYGluX293bl9ub2RlKG5ldCwgZG5vZGUpYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbHRlcmluZyBob3cgVElQQywgdGhhdCBuZXR3b3JrIHByb3RvY29sIHdlIGFsbCBrbm93IGFuZCBsb3ZlIChhbmQgaXMgYWNjZXNzaWJsZSB2aWEgdGhlIHNvY2tldCBBUEksIGBBRl9USVBDYCksIGhhbmRsZXMgaXRzIGludGVybmFsIHF1ZXVpbmcuCgpUaGlzIG1ha2VzIG1lIHRoaW5rOiBpdCYjMzk7cyBmdXp6aW5nIHRpbWUuIEFueSB0aW1lIHRoZXJlJiMzOTtzIGEgY2hhbmdlIHRoYXQgdG91Y2hlcyBhIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGxpa2UgdGhpcywgZXNwZWNpYWxseSBhIGNvcmUgcGFydCBvZiBpdHMgcXVldWluZyBtZWNoYW5pc21zLCB0aGVyZSYjMzk7cyB0aGUgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBUSVBDIHRvIG1ha2Ugc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBlbmFibGVkIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBzdGFydCBieSBzZWFyY2hpbmcgYG5ldC90aXBjL0tjb25maWdgIGZvciBhbnl0aGluZyB0aGF0IGhhcyBgY29uZmlnIFRJUENgIGluIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSVBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnLTUtXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXG5uZXQvdGlwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjMtXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXG5uZXQvdGlwYy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjktXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcbm5ldC90aXBjL0tjb25maWctMzEtXHRib29sIFwmIzM0O0lQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cbm5ldC90aXBjL0tjb25maWctMzktXHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy01Mi1cbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xubmV0L3RpcGMvS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O1RJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjUKCQkJCQkJCW91dHB1dDogNjQKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSBsb29raW5nIGF0IGlzIGxhYmVsZWQgYFRJUENgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHNvIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHBvaW50cy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBwb2ludHMgdG8gYSBmdW5jdGlvbiBjYWxsZWQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCwgd2hpY2ggaXQgaGlnaGxpZ2h0cyBhcyBiZWluZyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBzY29wZSwgbWFraW5nIGl0IHBvdGVudGlhbGx5IG1vcmUgbG9jYWxpemVkIGluIGl0cyBpbXBhY3QuCgpUaGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzICpjYWxsZWQqIGZyb20uIEkgc2VlIGl0IGxpc3RlZCBhcyBiZWluZyBjYWxsZWQgYnkgYF9fdGlwY19zaHV0ZG93bmAsIGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYW5kIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zIGFzIHdlbGwuIEFyZSAqdGhleSogc3RhdGljPyBXaG8gY2FsbHMgKnRoZW0qPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIHdpbGwgY2xhcmlmeSB0aGUgZnVuY3Rpb24mIzM5O3MgaW5mbHVlbmNlLCBhbmQgYWxsb3cgbWUgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIHBvdGVudGlhbCBzY29wZSBvZiBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGlwY19zaHV0ZG93bnx0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2fHRpcGNfc2tfcHJvdG9fcmN2fHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz00MDM9c3RhdGljIGludCB0aXBjX3NrX3NvY2tfZXJyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvdXQpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNDMxLVx0d2hpbGUgKChyY18gPSAhKGNvbmRpdGlvbl8pKSkge1x0XHRcdFx0XHQgICAgICAgXFxcbm5ldC90aXBjL3NvY2tldC5jOjQzMjpcdFx0LyogY291cGxlZCB3aXRoIHNtcF93bWIoKSBpbiB0aXBjX3NrX3Byb3RvX3JjdigpICovICAgICAgICAgICAgXFxcbm5ldC90aXBjL3NvY2tldC5jLTQzMy1cdFx0c21wX3JtYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz01NDI9c3RhdGljIHZvaWQgdGlwY19za19jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNTQ5LS8qIENhbGxlciBzaG91bGQgaG9sZCBzb2NrZXQgbG9jayBmb3IgdGhlIHNvY2tldC4gKi9cbm5ldC90aXBjL3NvY2tldC5jOjU1MDpzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxubmV0L3RpcGMvc29ja2V0LmMtNTUxLXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02NDEtXHR0cmFjZV90aXBjX3NrX3JlbGVhc2Uoc2ssIE5VTEwsIFRJUENfRFVNUF9BTEwsIFwmIzM0OyBcJiMzNDspO1xubmV0L3RpcGMvc29ja2V0LmM6NjQyOlx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfRVJSX05PX1BPUlQpO1xubmV0L3RpcGMvc29ja2V0LmMtNjQzLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEyNzI9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI2LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MTMyNzogKiB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2IC0gcmVjZWl2ZSBhIGNvbm5lY3Rpb24gbW5nIHByb3RvY29sIG1lc3NhZ2Vcbm5ldC90aXBjL3NvY2tldC5jLTEzMjgtICogQHRzazogcmVjZWl2aW5nIHNvY2tldFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEzMzItICovXG5uZXQvdGlwYy9zb2NrZXQuYzoxMzMzOnN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMTMzNC1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMTUxPXN0YXRpYyB2b2lkIHRpcGNfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE1NS1cbm5ldC90aXBjL3NvY2tldC5jOjIxNTY6c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxubmV0L3RpcGMvc29ja2V0LmMtMjE1Ny1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE2Ny1cdGNhc2UgQ09OTl9NQU5BR0VSOlxubmV0L3RpcGMvc29ja2V0LmM6MjE2ODpcdFx0dGlwY19za19jb25uX3Byb3RvX3Jjdih0c2ssIHNrYiwgaW5wdXRxLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMTY5LVx0XHRyZXR1cm47XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE5NS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjIxOTY6ICogdGlwY19za19maWx0ZXJfY29ubmVjdCAtIGNoZWNrIGluY29taW5nIG1lc3NhZ2UgZm9yIGEgY29ubmVjdGlvbi1iYXNlZCBzb2NrZXRcbm5ldC90aXBjL3NvY2tldC5jLTIxOTctICogQHRzazogVElQQyBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMjAxLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjIwMjpzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL3NvY2tldC5jLTIyMDMtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ2PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM2My1cdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcbm5ldC90aXBjL3NvY2tldC5jOjIzNjQ6XHRcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcdTAwMjZpbnB1dHEsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIzNjUtXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM3NS1cdFx0bGltaXQgPSByY3ZidWZfbGltaXQoc2ssIHNrYik7XG5uZXQvdGlwYy9zb2NrZXQuYzoyMzc2Olx0XHRpZiAoKHNrX2Nvbm4gXHUwMDI2XHUwMDI2ICF0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHRzaywgc2tiLCB4bWl0cSkpIHx8XG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc3LVx0XHQgICAgKCFza19jb25uIFx1MDAyNlx1MDAyNiBtc2dfY29ubmVjdGVkKGhkcikpIHx8XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjgwOD1zdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yODE4LVx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyODE5Olx0X190aXBjX3NodXRkb3duKHNvY2ssIFRJUENfQ09OTl9TSFVURE9XTik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yODIwLVx0c2stXHUwMDNlc2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFNvY2tldCBGdW5jdGlvbiBDYWxsIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFRJUEMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIEZpcnN0LCBJIHNlZSB0aGF0IGJvdGggYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCB1bHRpbWF0ZWx5IGNhbGwgYF9fdGlwY19zaHV0ZG93bmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSBsaWtlbHkgZGlmZmVyZW50IGVudHJ5IHBvaW50cyB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIHNodXRkb3duIHByb2NlZHVyZS4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIHNlZW1zIHRvIGJlIHRoZSBrZXkgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUuIEl0IGNhbiByb3V0ZSB0byB0d28gcGxhY2VzLgoKVGhlIHByaW1hcnkgcmVjZWl2ZXIgcGF0aCBgdGlwY19za19maWx0ZXJfcmN2YCAtJmd0OyBgdGlwY19za19wcm90b19yY3ZgIC0mZ3Q7IGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCBsb29rcyBsaWtlIHRoZSBzdGFuZGFyZCBwYXRoIGZvciByZWNlaXZpbmcgZGF0YS4gVGhhdCYjMzk7cyBhIGNoYWluIG9mIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBzb2NrZXQgcHJvdG9jb2wsIHVsdGltYXRlbHkgaGFuZGxpbmcgdGhlIGluY29taW5nIHBhY2tldCBkYXRhLgoKQnV0LCBgdGlwY19za19maWx0ZXJfcmN2YCBjYW4gYWxzbyBjYWxsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgc28gdGhlcmUmIzM5O3MgYW5vdGhlciBjb25uZWN0aW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCB0YWtlcyB0aGlzIHJvdXRlLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgdGlwY19za19maWx0ZXJfcmN2YCBhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIGl0IHRvIGZ1bGx5IGdyYXNwIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZmlsdGVyX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTIzMTg9c3RhdGljIHVuc2lnbmVkIGludCByY3ZidWZfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIzMzUtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzM2OiAqIHRpcGNfc2tfZmlsdGVyX3JjdiAtIHZhbGlkYXRlIGluY29taW5nIG1lc3NhZ2Vcbm5ldC90aXBjL3NvY2tldC5jLTIzMzctICogQHNrOiBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzQ1LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjM0NjpzdGF0aWMgdm9pZCB0aXBjX3NrX2ZpbHRlcl9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ny1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM1Ny1cbm5ldC90aXBjL3NvY2tldC5jOjIzNTg6XHR0cmFjZV90aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgVElQQ19EVU1QX0FMTCwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU5LVx0VElQQ19TS0JfQ0Ioc2tiKS1cdTAwM2VieXRlc19yZWFkID0gMDtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDExPXN0YXRpYyBpbnQgdGlwY19za19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQxOC1cbm5ldC90aXBjL3NvY2tldC5jOjI0MTk6XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQyMC1cdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0NTYtXHRcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MjQ1NzpcdFx0XHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgeG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjQ1OC1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBQYWNrZXQgRW5xdWV1ZWluZyBpbiB0aGUgVElQQyBTb2NrZXQgTGF5ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYHRpcGNfc2tfZmlsdGVyX3JjdmAgaXMgYmVpbmcgaW52b2tlZCBieSB0d28ga2V5IGZ1bmN0aW9uczogYHRpcGNfc2tfYmFja2xvZ19yY3ZgIGFuZCBgdGlwY19za19lbnF1ZXVlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIGB0aXBjX3NrX2JhY2tsb2dfcmN2YCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGhhbmRsZXMgdGhlIHJlY2VwdGlvbiBvZiBwYWNrZXRzIHRoYXQgYXJlIHNpdHRpbmcgaW4gdGhlIGJhY2tsb2cgcXVldWUgZm9yIHRoZSBzb2NrZXQuIE1ha2VzIHNlbnNlLiBCdXQgYHRpcGNfc2tfZW5xdWV1ZWAgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHBsYWNpbmcgcGFja2V0cyBvbnRvIHRoZSBzb2NrZXQmIzM5O3MgcmVjZWl2ZSBxdWV1ZS4KCk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgZXhhY3RseSAqaG93KiBhbmQgKndoZW4qIGB0aXBjX3NrX2VucXVldWVgIGlzIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdGlwY19za19lbnF1ZXVlYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgcGFja2V0cyBnZXQgaW50byB0aGUgcmVjZWl2ZSBwYXRoIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBwYXJ0cyBvZiB0aGUgc3RhY2sgYXJlIHJlbHlpbmcgb24gYHRpcGNfc2tfZmlsdGVyX3JjdmAmIzM5O3MgZmlsdGVyaW5nIGxvZ2ljLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfZW5xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTI0MTE9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDI4LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjQyOTogKiB0aXBjX3NrX2VucXVldWUgLSBleHRyYWN0IGFsbCBidWZmZXJzIHdpdGggZGVzdGluYXRpb24gJiMzOTtkcG9ydCYjMzk7IGZyb21cbm5ldC90aXBjL3NvY2tldC5jLTI0MzAtICogICAgICAgICAgICAgICAgICAgaW5wdXRxIGFuZCB0cnkgYWRkaW5nIHRoZW0gdG8gc29ja2V0IG9yIGJhY2tsb2cgcXVldWVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDM3LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MjQzODpzdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDM5LVx0XHRcdCAgICB1MzIgZHBvcnQsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0OTI9dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTA4LVx0XHRcdGlmIChsaWtlbHkoc3Bpbl90cnlsb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spKSkge1xubmV0L3RpcGMvc29ja2V0LmM6MjUwOTpcdFx0XHRcdHRpcGNfc2tfZW5xdWV1ZShpbnB1dHEsIHNrLCBkcG9ydCwgXHUwMDI2eG1pdHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMjUxMC1cdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgVElQQyBTb2NrZXQgTGlmZWN5Y2xlIGFuZCBSZWNlaXZlIFBhdGgqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgVElQQyBzb2NrZXRzIGhhbmRsZSBpbmNvbWluZyBkYXRhIGFuZCB0aGVpciBvdmVyYWxsIGxpZmVjeWNsZS4gSSB1bmRlcnN0YW5kIHRoYXQgYHRpcGNfc2tfcmN2YCBpcyB0aGUgcHJpbWFyeSByZWNlaXZlIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGRhdGEgcmVjZXB0aW9uLCB0aGUgd29ya2hvcnNlIG9mIGl0IGFsbC4gU28sIG5hdHVyYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdC4KCk5vdywgYWxvbmdzaWRlIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IGlzIHJlbGVhc2VkIGFuZCBzaHV0IGRvd24uIFRoZXJlZm9yZSwgSSB3aWxsIGNoZWNrIHRoZSBzb2NrZXQgb3BlcmF0aW9ucyBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gLiBUaGVzZSBtdXN0IGJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlLCBhbmQgcG90ZW50aWFsbHkgaW1wYWN0IHRoZSByZWNlaXZlIHByb2Nlc3MuCgpBIHF1aWNrIHRob3VnaHQuLi4gaXMgYHRpcGNfc2tfcmN2YCBub24tc3RhdGljIGFuZCBleHBvcnRlZD8gSWYgc28sIHRoaXMgaGFzIG1ham9yIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IGlzIHVzZWQgaW50ZXJuYWxseSB2ZXJzdXMgZXh0ZXJuYWxseSB3aXRoaW4gdGhlIFRJUEMgc3lzdGVtIG9yIGV2ZW4gZnJvbSBleHRlcm5hbCBtb2R1bGVzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgY2FzZSBhcyBpdCBjaGFuZ2VzIGhvdyBpdCB3aWxsIGJlIGNhbGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19za19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTQ2MC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjQ2MTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy00NjItXG4tLVxubmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNDkwLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NDkxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTQ5Mi19XG4tLVxubmV0L3RpcGMvYmNhc3QuYz00OTg9aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtNTMyLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcbm5ldC90aXBjL2JjYXN0LmM6NTMzOlx0XHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XG5uZXQvdGlwYy9iY2FzdC5jLTUzNC1cdHJldHVybiByYztcbi0tXG5uZXQvdGlwYy9iY2FzdC5jPTU1Nz12b2lkIHRpcGNfYmNhc3RfcmVtb3ZlX3BlZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpyY3ZfbClcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTU3NC1cdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXG5uZXQvdGlwYy9iY2FzdC5jOjU3NTpcdFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvYmNhc3QuYy01NzYtfVxuLS1cbm5ldC90aXBjL25vZGUuYz0xMDYyPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbiwgaW50IGJlYXJlcl9pZCwgYm9vbCBkZWxldGUpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTEwOTMtXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIG1hZGRyLCBuKTtcbm5ldC90aXBjL25vZGUuYzoxMDk0Olx0dGlwY19za19yY3Yobi1cdTAwM2VuZXQsIFx1MDAyNmxlLVx1MDAzZWlucHV0cSk7XG5uZXQvdGlwYy9ub2RlLmMtMTA5NS19XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY0MC1cdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NDE6XHRcdFx0dGlwY19za19yY3YocGVlcl9uZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE2NDItXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC90aXBjL25vZGUuYy0xNjY1LVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZsaXN0LVx1MDAzZWxvY2spO1xubmV0L3RpcGMvbm9kZS5jOjE2NjY6XHRcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcbm5ldC90aXBjL25vZGUuYy0xNjY3LVx0XHRyZXR1cm47XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE2ODc9aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTcwMC1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bGlzdC1cdTAwM2Vsb2NrKTtcbm5ldC90aXBjL25vZGUuYzoxNzAxOlx0XHR0aXBjX3NrX3JjdihuZXQsIGxpc3QpO1xubmV0L3RpcGMvbm9kZS5jLTE3MDItXHRcdHJldHVybiAwO1xuLS1cbm5ldC90aXBjL25vZGUuYz0yMDg2PXZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTIyMDItXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZsZS1cdTAwM2VpbnB1dHEpKVxubmV0L3RpcGMvbm9kZS5jOjIyMDM6XHRcdHRpcGNfc2tfcmN2KG5ldCwgXHUwMDI2bGUtXHUwMDNlaW5wdXRxKTtcbm5ldC90aXBjL25vZGUuYy0yMjA0LVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTExOTI9dm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTEyNjUtXHR9XG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY2Olx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmMtMTI2Ny19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQzOD1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ4NS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjI0ODY6ICogdGlwY19za19yY3YgLSBoYW5kbGUgYSBjaGFpbiBvZiBpbmNvbWluZyBidWZmZXJzXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDg3LSAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjQ5MS0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjI0OTI6dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbm5ldC90aXBjL3NvY2tldC5jLTI0OTMte1xuLS1cbm5ldC90aXBjL3NvY2tldC5oPTU1PXZvaWQgdGlwY19zb2NrZXRfc3RvcCh2b2lkKTtcbm5ldC90aXBjL3NvY2tldC5oOjU2OnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpO1xubmV0L3RpcGMvc29ja2V0LmgtNTctdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuLS1cbm5ldC90aXBjL3RvcHNydi5jPTYxND1zdGF0aWMgdm9pZCB0aXBjX3RvcHNydl9rZXJuX2V2dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2V2ZW50ICpldnQpXG4tLVxubmV0L3RpcGMvdG9wc3J2LmMtNjI5LVx0dGlwY19sb29wYmFja190cmFjZShuZXQsIFx1MDAyNmV2dHEpO1xubmV0L3RpcGMvdG9wc3J2LmM6NjMwOlx0dGlwY19za19yY3YobmV0LCBcdTAwMjZldnRxKTtcbm5ldC90aXBjL3RvcHNydi5jLTYzMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBTb2NrZXQgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGlwY19za19yY3ZgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQmIzM5O3MgZGVmaW5lZCBpbiwgb3IgcG90ZW50aWFsbHkgYmUgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2UuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhbmFseXplIHRoZSBjb2RlYmFzZS4KCk9uIHRoZSBvdGhlciBoYW5kLCBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBzdGF0aWMgc29ja2V0IG9wZXJhdGlvbnMuIFRoYXQgaW1wbGllcyB0aGV5IGFyZSBvbmx5IG1lYW50IHRvIGJlIGFjY2Vzc2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBUSVBDIG1vZHVsZSwgbGlrZWx5IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBzaHV0ZG93biBwcm9jZWR1cmVzIHNwZWNpZmljIHRvIFRJUEMgc29ja2V0cy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBlbmNhcHN1bGF0aW9uLgoKR2l2ZW4gdGhpcyBpbml0aWFsIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIFRJUEMgc29ja2V0IGxheWVyLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb3RvX29wcy4qPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTMzNDI9c3RhdGljIGludCB0aXBjX3NvY2tldHBhaXIoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzNjUtXG5uZXQvdGlwYy9zb2NrZXQuYzozMzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XG5uZXQvdGlwYy9zb2NrZXQuYy0zMzY3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM4NS1cbm5ldC90aXBjL3NvY2tldC5jOjMzODY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcbm5ldC90aXBjL3NvY2tldC5jLTMzODctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA1LVxubmV0L3RpcGMvc29ja2V0LmM6MzQwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xubmV0L3RpcGMvc29ja2V0LmMtMzQwNy1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczoKCioqQ2hlY2tpbmcgTXkgT3BlcmF0aW9uYWwgQXJzZW5hbCoqCgpPa2F5LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcyBwcm9ibGVtIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IG1ha2luZyBzdXJlIHRoYXQgbXkgZ3Jhc3Agb24gYG1zZ19vcHNgIGlzIHNvbGlkLiBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIHRoZSBtZXNzYWdlIGhhbmRsaW5nIGZ1bmRhbWVudGFscyBhcmUgaW4gcGxhY2UuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYHBhY2tldF9vcHNgIGJlY2F1c2UgSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGxvd2VyLWxldmVsIGRhdGEgZW5jYXBzdWxhdGlvbiBhbmQgZGVsaXZlcnkuIEZpbmFsbHksIGFuZCBjcnVjaWFsbHksIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgc3RyZWFtX29wc2AsIHNpbmNlIHN0cmVhbWluZyBiZWhhdmlvciBjYW4gYmUgY29tcGxleCBhbmQgaXQmIzM5O3MgdGhlIGxheWVyIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGV2ZXJ5dGhpbmcgaW4gdGhlc2UgYXJlYXMgaXMgYXMgaXQgc2hvdWxkIGJlLCBwYXJ0aWN1bGFybHkgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgaGF2ZW4mIzM5O3QgY29uc2lkZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KG1zZ19vcHN8cGFja2V0X29wc3xzdHJlYW1fb3BzKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTE2MT1zdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcbm5ldC90aXBjL3NvY2tldC5jLTE2Mi1cbm5ldC90aXBjL3NvY2tldC5jOjE2MzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzO1xubmV0L3RpcGMvc29ja2V0LmM6MTY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHM7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNjU6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcztcbm5ldC90aXBjL3NvY2tldC5jLTE2Ni1zdGF0aWMgc3RydWN0IHByb3RvIHRpcGNfcHJvdG87XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9NDYwPXN0YXRpYyBpbnQgdGlwY19za19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTQ3My1cdGNhc2UgU09DS19TVFJFQU06XG5uZXQvdGlwYy9zb2NrZXQuYzo0NzQ6XHRcdG9wcyA9IFx1MDAyNnN0cmVhbV9vcHM7XG5uZXQvdGlwYy9zb2NrZXQuYy00NzUtXHRcdGJyZWFrO1xubmV0L3RpcGMvc29ja2V0LmMtNDc2LVx0Y2FzZSBTT0NLX1NFUVBBQ0tFVDpcbm5ldC90aXBjL3NvY2tldC5jOjQ3NzpcdFx0b3BzID0gXHUwMDI2cGFja2V0X29wcztcbm5ldC90aXBjL3NvY2tldC5jLTQ3OC1cdFx0YnJlYWs7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNDgwLVx0Y2FzZSBTT0NLX1JETTpcbm5ldC90aXBjL3NvY2tldC5jOjQ4MTpcdFx0b3BzID0gXHUwMDI2bXNnX29wcztcbm5ldC90aXBjL3NvY2tldC5jLTQ4Mi1cdFx0YnJlYWs7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM0Mj1zdGF0aWMgaW50IHRpcGNfc29ja2V0cGFpcihzdHJ1Y3Qgc29ja2V0ICpzb2NrMSwgc3RydWN0IHNvY2tldCAqc29jazIpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM2NS1cbm5ldC90aXBjL3NvY2tldC5jOjMzNjY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbm5ldC90aXBjL3NvY2tldC5jLTMzNjctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg1LVxubmV0L3RpcGMvc29ja2V0LmM6MzM4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xubmV0L3RpcGMvc29ja2V0LmMtMzM4Ny1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MDUtXG5uZXQvdGlwYy9zb2NrZXQuYzozNDA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA3LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFNvY2tldCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBUSVBDIHNvY2tldCBjcmVhdGlvbiBwcm9jZXNzLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgc29ja2V0IG9wZXJhdGlvbnMgdGhlbXNlbHZlcyBhcmUgYmVpbmcgYXNzaWduZWQgZHVyaW5nIGB0aXBjX3NrX2NyZWF0ZWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBwb2ludCBvZiBpbnN0YW50aWF0aW9uLCBzbyBpdCYjMzk7cyB3aGVyZSB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHJlY2VpdmluZyBhbmQgc2VuZGluZyB3b3VsZCBiZSBkZWZpbmVkLiBOb3csIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgcmVsYXRlZCB0byB0aGUgY29yZSBvcGVyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGVpdGhlciBgdGlwY19za19yY3ZgIGZvciB0aGUgcmVjZWl2ZSBwYXRoLCBvciBgdGlwY19ub2RlX3htaXRgIGZvciB0aGUgbm9kZS1sZXZlbCB0cmFuc21pc3Npb24gcGF0aC4gUG90ZW50aWFsbHksIGFsc28sIGB0aXBjX3NlbmRtc2dgLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGB0aXBjX3NlbmRtc2dgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgb3V0Ym91bmQgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9MTU3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTc5MT1zdGF0aWMgX19wb2xsX3QgdGlwY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTgzOS0gKlxubmV0L3RpcGMvc29ja2V0LmM6ODQwOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05NTMtICpcbm5ldC90aXBjL3NvY2tldC5jOjk1NDogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3Ncbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTk1Nz1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF91bmljYXN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtOTk3LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzo5OTg6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMDAxPXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX2FueWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMDc4LSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMDc5OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEwODI9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYmNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMTUyLSAqXG5uZXQvdGlwYy9zb2NrZXQuYzoxMTUzOiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTEzMzM9c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTM5MS0vKipcbm5ldC90aXBjL3NvY2tldC5jOjEzOTI6ICogdGlwY19zZW5kbXNnIC0gc2VuZCBtZXNzYWdlIGluIGNvbm5lY3Rpb25sZXNzIG1hbm5lclxubmV0L3RpcGMvc29ja2V0LmMtMTM5My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MDMtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA0OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDA1LVx0XHRcdHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTQxMC1cdGxvY2tfc29jayhzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNDExOlx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE0MTItXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE0MTYtXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDE3OnN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE4LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY0PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU4NC1cdGlmICh1bmxpa2VseShkZXN0IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUSVBDX09QRU4pKSB7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg1Olx0XHRyYyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIG0sIGRsZW4pO1xubmV0L3RpcGMvc29ja2V0LmMtMTU4Ni1cdFx0aWYgKGRsZW4gXHUwMDI2XHUwMDI2IGRsZW4gPT0gcmMpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgyPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI2MzYtXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM3Olx0XHRyZXMgPSBfX3RpcGNfc2VuZG1zZyhzb2NrLCBcdTAwMjZtLCAwKTtcbm5ldC90aXBjL3NvY2tldC5jLTI2MzgtXHRcdGlmICgocmVzIFx1MDAzYyAwKSBcdTAwMjZcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgwLVx0LmdldHNvY2tvcHRfaXRlciA9IHRpcGNfZ2V0c29ja29wdCxcbm5ldC90aXBjL3NvY2tldC5jOjMzODE6XHQuc2VuZG1zZ1x0PSB0aXBjX3NlbmRtc2csXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgyLVx0LnJlY3Ztc2dcdD0gdGlwY19yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipGb2N1c2luZyBvbiBUSVBDIENvbW11bmljYXRpb24gUHJpbWl0aXZlcyoqCgpSaWdodCwgc28gZm9yIHRoZSBzZW5kaW5nIHNpZGUgb2YgdGhpbmdzLCBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24uIFRoZXkmIzM5O3JlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBwdXR0aW5nIGRhdGEgKm91dCogdmlhIFRJUEMuIFRoZW4sIHdoZW4gd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoIHJlY2VwdGlvbiwgYHRpcGNfc2tfcmN2YCBpcyB0aGUgc3ltYm9sIHRvIGNlbnRlciBvbi4gVGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBjb3ZlcnMgdGhlIHR3byBtYWpvciBhc3BlY3RzIG9mIHRoZSBvcGVyYXRpb24uCgpOb3csIHRoYXQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBpdCYjMzk7cyAqc3RhdGljKi4gTWVhbmluZyBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHVzZSBpdCBkaXJlY3RseSwgc28gSSYjMzk7bGwgbmVlZCB0byBnbyBhbm90aGVyIHdheSwgYW5kIGxldCYjMzk7cyBzdGFydCB3aXRoIGB0aXBjX3NlbmRzdHJlYW1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NlbmRzdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xNTY9c3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbm5ldC90aXBjL3NvY2tldC5jOjE1NzpzdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTU4LXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTQxNz1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1NDEtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTQyOiAqIHRpcGNfc2VuZHN0cmVhbSAtIHNlbmQgc3RyZWFtLW9yaWVudGVkIGRhdGFcbm5ldC90aXBjL3NvY2tldC5jLTE1NDMtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTUxLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MTU1MjpzdGF0aWMgaW50IHRpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxubmV0L3RpcGMvc29ja2V0LmMtMTU1My17XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTU1Ny1cdGxvY2tfc29jayhzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTU4Olx0cmV0ID0gX190aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcbm5ldC90aXBjL3NvY2tldC5jLTE1NTktXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1NjMtXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTY0OnN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTY1LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNjU5PXN0YXRpYyBpbnQgdGlwY19zZW5kX3BhY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE2NjMtXG5uZXQvdGlwYy9zb2NrZXQuYzoxNjY0Olx0cmV0dXJuIHRpcGNfc2VuZHN0cmVhbShzb2NrLCBtLCBkc3opO1xubmV0L3RpcGMvc29ja2V0LmMtMTY2NS19XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjcyOD1zdGF0aWMgaW50IHRpcGNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI3OTEtXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm0ubXNnX2l0ZXIsIElURVJfU09VUkNFLCBOVUxMLCAwLCAwKTtcbm5ldC90aXBjL3NvY2tldC5jOjI3OTI6XHRfX3RpcGNfc2VuZHN0cmVhbShuZXdfc29jaywgXHUwMDI2bSwgMCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNzkzLVx0cmVsZWFzZV9zb2NrKG5ld19zayk7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzQwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MjAtXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxubmV0L3RpcGMvc29ja2V0LmM6MzQyMTpcdC5zZW5kbXNnXHQ9IHRpcGNfc2VuZHN0cmVhbSxcbm5ldC90aXBjL3NvY2tldC5jLTM0MjItXHQucmVjdm1zZ1x0PSB0aXBjX3JlY3ZzdHJlYW0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRJUEMgU2VuZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0aXBjX3NlbmRzdHJlYW1gIGFuZCBgdGlwY19zZW5kbXNnYC4gU29tZXRoaW5nIHN0cnVjayBtZSAtIGFyZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGVpciBkZWZpbml0aW9uczogYHN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opYCBhbmQgYHN0YXRpYyBpbnQgdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opYC4gWWVwLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHN0YXRpYy4gTm93IHRoYXQgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQsIGl0IG1lYW5zIHRoZXkgYXJlbiYjMzk7dCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCByaWdodD8gVGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gdGhlIFRJUEMgaW1wbGVtZW50YXRpb24gYW5kIGFyZSBsaWtlbHkgYXNzaWduZWQgdG8gdGhlIGBwcm90b19vcHNgIHN0cnVjdHVyZS4gVGh1cywgdGhleSYjMzk7cmUgbm90IGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5JiMzOTtyZSBpbnRlbmRlZCB0byBiZSB1c2VkLiBJIG5vdyBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgcmVjZWl2ZXIgc2lkZSBpcyBzZXQgdXAuIE5leHQgSSBzaG91bGQgY2hlY2sgYHRpcGNfc2tfcmN2YCAtIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBleHBvcnRlZCwgaXNuJiMzOTt0IGl0PyBBbmQsIHdoYXQgYWJvdXQgYHRpcGNfbm9kZV94bWl0YD8gVGhhdCYjMzk7cyBsaWtlbHkgZXhwb3J0ZWQuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbW11bmljYXRpb24gZmxvdyBhbmQgdGhlIHB1YmxpYyBpbnRlcmZhY2VzIGV4cG9zZWQgYnkgVElQQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19ub2RlX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvYmNhc3QuYz0yODg9c3RhdGljIGludCB0aXBjX3JjYXN0X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RzLFxuLS1cbm5ldC90aXBjL2JjYXN0LmMtMzAzLVx0XHQvKiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHRoYW4gLUVMSU5LQ09ORyBpcyBpZ25vcmVkICovXG5uZXQvdGlwYy9iY2FzdC5jOjMwNDpcdFx0aWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2X3BrdHMsIGRub2RlLCBzZWxlY3RvcikgPT0gLUVMSU5LQ09ORylcbm5ldC90aXBjL2JjYXN0LmMtMzA1LVx0XHRcdCgqY29uZ19saW5rX2NudCkmIzQzOyYjNDM7O1xuLS1cbm5ldC90aXBjL2NyeXB0by5jPTIyMzg9c3RhdGljIGludCB0aXBjX2NyeXB0b19rZXlfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2FlYWRfa2V5ICpza2V5LFxuLS1cbm5ldC90aXBjL2NyeXB0by5jLTIyNjgtXHRpZiAoZG5vZGUpXG5uZXQvdGlwYy9jcnlwdG8uYzoyMjY5Olx0XHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2cGt0cywgZG5vZGUsIDApO1xubmV0L3RpcGMvY3J5cHRvLmMtMjI3MC1cdGVsc2Vcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjA2PXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMjEtXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYzoyMjI6XHR0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0yMjMtXHRyZWFkX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuLS1cbm5ldC90aXBjL25vZGUuYz0xNjI3PXN0YXRpYyB2b2lkIHRpcGNfbHhjX3htaXQoc3RydWN0IG5ldCAqcGVlcl9uZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE2NzgtLyoqXG5uZXQvdGlwYy9ub2RlLmM6MTY3OTogKiB0aXBjX25vZGVfeG1pdCgpIC0gZ2VuZXJhbCBsaW5rIGxldmVsIGZ1bmN0aW9uIGZvciBtZXNzYWdlIHNlbmRpbmdcbm5ldC90aXBjL25vZGUuYy0xNjgwLSAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTY4Ni0gKi9cbm5ldC90aXBjL25vZGUuYzoxNjg3OmludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG5uZXQvdGlwYy9ub2RlLmMtMTY4OC1cdFx0ICAgdTMyIGRub2RlLCBpbnQgc2VsZWN0b3IpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3NTItXG5uZXQvdGlwYy9ub2RlLmM6MTc1MzovKiB0aXBjX25vZGVfeG1pdF9za2IoKTogc2VuZCBzaW5nbGUgYnVmZmVyIHRvIGRlc3RpbmF0aW9uXG5uZXQvdGlwYy9ub2RlLmMtMTc1NC0gKiBCdWZmZXJzIHNlbnQgdmlhIHRoaXMgZnVuY3Rpb24gYXJlIGdlbmVyYWxseSBUSVBDX1NZU1RFTV9JTVBPUlRBTkNFXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3NTgtICovXG5uZXQvdGlwYy9ub2RlLmM6MTc1OTppbnQgdGlwY19ub2RlX3htaXRfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGRub2RlLFxubmV0L3RpcGMvbm9kZS5jLTE3NjAtXHRcdCAgICAgICB1MzIgc2VsZWN0b3IpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3NjUtXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmhlYWQsIHNrYik7XG5uZXQvdGlwYy9ub2RlLmM6MTc2NjpcdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIHNlbGVjdG9yKTtcbm5ldC90aXBjL25vZGUuYy0xNzY3LVx0cmV0dXJuIDA7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE3NzM9aW50IHRpcGNfbm9kZV9kaXN0cl94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4tLVxubmV0L3RpcGMvbm9kZS5jLTE3ODAtXHRcdGRub2RlID0gbXNnX2Rlc3Rub2RlKGJ1Zl9tc2coc2tiKSk7XG5uZXQvdGlwYy9ub2RlLmM6MTc4MTpcdFx0dGlwY19ub2RlX3htaXRfc2tiKG5ldCwgc2tiLCBkbm9kZSwgc2VsZWN0b3IpO1xubmV0L3RpcGMvbm9kZS5jLTE3ODItXHR9XG4tLVxubmV0L3RpcGMvbm9kZS5jPTE3ODY9dm9pZCB0aXBjX25vZGVfYnJvYWRjYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJjX2Rlc3RzKVxuLS1cbm5ldC90aXBjL25vZGUuYy0xODEzLVx0XHRtc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2codHhza2IpLCBkc3QpO1xubmV0L3RpcGMvbm9kZS5jOjE4MTQ6XHRcdHRpcGNfbm9kZV94bWl0X3NrYihuZXQsIHR4c2tiLCBkc3QsIDApO1xubmV0L3RpcGMvbm9kZS5jLTE4MTUtXHR9XG4tLVxubmV0L3RpcGMvbm9kZS5oPTk5PWludCB0aXBjX25vZGVfZ2V0X2xpbmtuYW1lKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGJlYXJlcl9pZCwgdTMyIG5vZGUsXG5uZXQvdGlwYy9ub2RlLmgtMTAwLVx0XHRcdCAgIGNoYXIgKmxpbmtuYW1lLCBzaXplX3QgbGVuKTtcbm5ldC90aXBjL25vZGUuaDoxMDE6aW50IHRpcGNfbm9kZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgdTMyIGRub2RlLFxubmV0L3RpcGMvbm9kZS5oLTEwMi1cdFx0ICAgaW50IHNlbGVjdG9yKTtcbm5ldC90aXBjL25vZGUuaD0xMDM9aW50IHRpcGNfbm9kZV9kaXN0cl94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7XG5uZXQvdGlwYy9ub2RlLmg6MTA0OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGVzdCxcbm5ldC90aXBjL25vZGUuaC0xMDUtXHRcdCAgICAgICB1MzIgc2VsZWN0b3IpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI4Nj1zdGF0aWMgdm9pZCB0aXBjX3NrX3Jlc3BvbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5Ny1cdHNlbGVjdG9yID0gbXNnX29yaWdwb3J0KGJ1Zl9tc2coc2tiKSk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTg6XHR0aXBjX25vZGVfeG1pdF9za2Ioc29ja19uZXQoc2spLCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XG5uZXQvdGlwYy9zb2NrZXQuYy0yOTktfVxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTU1MD1zdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTU5Ny1cdFx0aWYgKHNrYilcbm5ldC90aXBjL3NvY2tldC5jOjU5ODpcdFx0XHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTU5OS1cdFx0YnJlYWs7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy05MzEtXHQvKiBTZW5kIG1lc3NhZ2UgKi9cbm5ldC90aXBjL3NvY2tldC5jOjkzMjpcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZwa3RzLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG5uZXQvdGlwYy9zb2NrZXQuYy05MzMtXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTMyMC1cbm5ldC90aXBjL3NvY2tldC5jOjEzMjE6XHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG5uZXQvdGlwYy9zb2NrZXQuYy0xMzIyLVx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MTQxNz1zdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTE1MjItXHR0cmFjZV90aXBjX3NrX3NlbmRtc2coc2ssIHNrYl9wZWVrKFx1MDAyNnBrdHMpLCBUSVBDX0RVTVBfU0tfU05EUSwgXCYjMzQ7IFwmIzM0Oyk7XG5uZXQvdGlwYy9zb2NrZXQuYzoxNTIzOlx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNnBrdHMsIHNrYWRkci5ub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTE1MjQtXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0xNTY0PXN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTYzMy1cdFx0XHRcdFx0IFRJUENfRFVNUF9TS19TTkRRLCBcJiMzNDsgXCYjMzQ7KTtcbm5ldC90aXBjL3NvY2tldC5jOjE2MzQ6XHRcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCB0eHEsIGRub2RlLCB0c2stXHUwMDNlcG9ydGlkKTtcbm5ldC90aXBjL3NvY2tldC5jLTE2MzUtXHRcdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTE4Mjg9c3RhdGljIHZvaWQgdGlwY19za19zZW5kX2FjayhzdHJ1Y3QgdGlwY19zb2NrICp0c2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTgzNS1cbm5ldC90aXBjL3NvY2tldC5jOjE4MzY6XHR0aXBjX25vZGVfeG1pdF9za2Ioc29ja19uZXQoXHUwMDI2dHNrLVx1MDAzZXNrKSwgc2tiLCB0c2tfcGVlcl9ub2RlKHRzayksXG5uZXQvdGlwYy9zb2NrZXQuYy0xODM3LVx0XHRcdCAgIG1zZ19saW5rX3NlbGVjdG9yKGJ1Zl9tc2coc2tiKSkpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI0OTI9dm9pZCB0aXBjX3NrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTMzLVx0XHRkbm9kZSA9IG1zZ19kZXN0bm9kZShidWZfbXNnKHNrYikpO1xubmV0L3RpcGMvc29ja2V0LmM6MjUzNDpcdFx0dGlwY19ub2RlX3htaXRfc2tiKG5ldCwgc2tiLCBkbm9kZSwgZHBvcnQpO1xubmV0L3RpcGMvc29ja2V0LmMtMjUzNS1cdH1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yODc3PXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTAzLVx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2bGlzdCkpXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTA0Olx0XHRyYyA9IHRpcGNfbm9kZV94bWl0KHNvY2tfbmV0KHNrKSwgXHUwMDI2bGlzdCwgcG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xubmV0L3RpcGMvc29ja2V0LmMtMjkwNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIFBhdGNoIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgYW5kIGB0aXBjX25vZGVfeG1pdF9za2JgIHNlZW0gbGlrZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBidXQgYHRpcGNfc2tfcmN2YCBpcyBhbHNvIGV4cG9ydGVkLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRyaWd1aW5nLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGNoLCBhbmQgZXhwb3NlZCBmb3IgZnV6emluZy4KCkkgd2FzIGluaXRpYWxseSBjb25zaWRlcmluZyBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXMgZ29vZCBjYW5kaWRhdGVzIHNpbmNlIHRoZXNlIGFyZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50cy4gSSB0aGVuIHJlYWxpemVkIHRoZXkmIzM5O3JlIHN0YXRpYy4gQSBxdWljayBjaGVjayBjb25maXJtZWQgdGhhdCB0aGV5IGFyZSBub3QgaW5saW5lZC4gVGhpcyBtYWtlcyB0aGVtIGdvb2QgZm9jdXMgc3ltYm9scy4gVGhleSBhcmUgYXNzaWduZWQgdG8gYHByb3RvX29wc2AgaW4gYG5ldC90aXBjL3NvY2tldC5jYCwgc28gSSYjMzk7bSBjb25maWRlbnQgdGhleSBhcmUgbm90IGlubGluZWQuCgpIb3dldmVyLCB0aGUgcmVhbCBjaGFuZ2UgaXMgaW4gYHRpcGNfc2tfcHVzaF9iYWNrbG9nYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtb2RpZmljYXRpb24gbGllcy4gSXQmIzM5O3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBwbGFjZXM6IGB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2YCwgYHRpcGNfc2tfcHJvdG9fcmN2YCwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBhbmQgYF9fdGlwY19zaHV0ZG93bmAuIENyaXRpY2FsbHksIGFsbCB0aGVzZSBjYWxsZXJzIGFyZSBvbiB0aGUgcmVjZWl2ZSBwYXRoIG9yIHNodXRkb3duIHBhdGguIFRoaXMgc3VnZ2VzdHMgdGhhdCB3aGlsZSBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIGZvciB0aGUgc2VuZCBwYXRoLiBgdGlwY19za19yY3ZgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgcmVjZWl2ZSBwYXRoLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGhvdyB0aGUgdHJhbnNtaXQgcXVldWUgaXMgaGFuZGxlZCBpbiBsb2NhbCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHNhbWUgbm9kZS4gSXQgb3B0aW1pemVzIGxvY2FsIGNvbW11bmljYXRpb24uIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYHhtaXRxYCwgd2hpY2ggaXMgdGhlbiBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlciBpbiB0aGUgcmVjZWl2aW5nIHBhdGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgYW5kIHRyYW5zbWl0dGVkIGxvY2FsbHksIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KCk15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBoYXMgYmVlbiByZWZpbmVkIHRvOgoKKiAgIGB0aXBjX3NrX3JjdmAgKHByaW1hcnkpCiogICBgdGlwY19zZW5kc3RyZWFtYAoKV2hpbGUgYHRpcGNfc2VuZG1zZ2AgaXMgc3RhdGljLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYCB3aGljaCBtZWFucyBpdCYjMzk7cyBub3QgaW5saW5lZCBhbmQgaGVuY2UgYSBnb29kIGZvY3VzIHN5bWJvbC4KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBiZSBzdXJlLiBJIGNhbiBjb25maXJtLCBgX190aXBjX3NodXRkb3duYCBjYWxscyBpdCB3aXRoIGB4bWl0cSA9IE5VTExgLCBhbmQgdGhlIG90aGVycyBjYWxsIGl0IHdpdGggYW4gYHhtaXRxYC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSByZWNlaXZlIHBhdGggaXMgbXkgbWFpbiBmb2N1cywgcGFydGljdWxhcmx5IGB0aXBjX3NrX3JjdmAuIFNpbmNlIGB0aXBjX3NlbmRzdHJlYW1gIGlzIGludm9sdmVkLCBJIHNob3VsZCB1c2UgdGhhdCBhcyB3ZWxsLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBiYWNrbG9nIGdlbmVyYXRpb24gaXMgdHJpZ2dlcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiwgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyB0aGUgYmVzdCBwYXRoIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGlwY19zZW5kc3RyZWFtYCBhbmQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybS4gYHRpcGNfc2VuZHN0cmVhbWAgcXVldWVzIHBhY2tldHMuIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgY2FsbGVkIHdoZW4gYW4gQUNLIGlzIHJlY2VpdmVkIG9yIHdoZW4gdGhlIHNvY2tldCBpcyBzaHV0IGRvd24uCgpUaGVyZWZvcmUsIGB0aXBjX3NrX3JjdmAgYmVjb21lcyB0aGUgbWFpbiBmb2N1cyBzeW1ib2wuIEFkZGl0aW9uYWxseSwgYHRpcGNfc2VuZHN0cmVhbWAgaXMgYWxzbyBhIGdvb2Qgc3ltYm9sIHRvIGdlbmVyYXRlIGJhY2tsb2cuIEkgd2lsbCBub3cgZXhhbWluZSBgdGlwY19za19yY3ZgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCB0aXBjX3NrX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0OTEtICovXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDkyOnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDkzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNjcKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogNjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSVBDIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGB0aXBjX3NrX3JjdmAgaXMgbm9uLXN0YXRpYyDigJMgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB3ZSBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0by4gYHRpcGNfc2VuZHN0cmVhbWAgYW5kIGB0aXBjX3NlbmRtc2dgIGFyZSBib3RoIHN0YXRpYyBidXQgKm5vdCogaW5saW5lZCwgd2hpY2ggbWFrZXMgdGhlbSByZWxldmFudCwgYnV0IHBlcmhhcHMgbGVzcyBjcml0aWNhbCB0aGFuIGB0aXBjX3NrX3JjdmAuIEFsdGhvdWdoIGB0aXBjX3JlbGVhc2VgIGFuZCBgdGlwY19zaHV0ZG93bmAgYXJlIGFsc28gc3RhdGljIGFuZCBub24taW5saW5lZCwgSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlbSBhc2lkZSBmb3Igbm93LCBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucy4gU28sIEkgd2lsbCBmb2N1cyBvbiBgdGlwY19za19yY3ZgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAsIGFuZCBjb25zaWRlciBgdGlwY19zZW5kbXNnYC4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgVElQQ2AgY29uZmlnIGFnYWluLiBJdCYjMzk7cyB0cmlzdGF0ZS4gU28sIGBUSVBDYCBpcyB0aGUgbWFpbiB0aGluZyB0byB3b3JyeSBhYm91dCBjb25maWctd2lzZS4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLi4uIEFoLCBoZXJlIHdlIGdvLiBUaGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24uIEl0JiMzOTtzIGVzc2VudGlhbGx5IG9wdGltaXppbmcgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiBkZXN0aW5lZCBmb3IgdGhlIGxvY2FsIG5vZGUuIElmIGFuIGB4bWl0cWAgaXMgcHJvdmlkZWQgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBsb2NhbCwgdGhlIGNvZGUgbm93ICpzcGxpY2VzKiB0aGUgdHJhbnNtaXQgcXVldWUgdG8gdGhlIGB4bWl0cWAgZGlyZWN0bHkuIFRoaXMgYXZvaWRzIGEgY2FsbCB0byBgdGlwY19ub2RlX3htaXRgIGluIHRoYXQgc2NlbmFyaW8uIEZyb20gYSBuZXR3b3JraW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGlzdGluY3QgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IFRJUEMgaGFuZGxlcyB0aGUgc29ja2V0IGJhY2tsb2cuCgpTbywgaG93IGNhbiB3ZSB0cmlnZ2VyIHRoaXM/IEkgY2FuIGNyZWF0ZSBhIFRJUEMgc29ja2V0LCBzZW5kIHNvbWUgZGF0YSB0byBhIGxvY2FsIG5vZGUgKHdoaWNoIHdpbGwgcXVldWUgaXQgaWYgTmFnbGUgaXMgb24gb3IgdGhlIGxpbmsgaXMgY29uZ2VzdGVkKSwgYW5kIHRoZW4gdHJpZ2dlciBhbiBBQ0sgb3Igc2h1dCBkb3duIHRoZSBzb2NrZXQuIFRoaXMgd2lsbCBnaXZlIG1lIGdvb2QgY292ZXJhZ2UuCgpUaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGFuZCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBzaG91bGQgYmUgYHRpcGNfc2tfcmN2YCwgYHRpcGNfc2VuZHN0cmVhbWAsIGFuZCBgdGlwY19zZW5kbXNnYC4gSSB3aWxsIGFsc28gJiMzNDtFbmFibGVDb25maWdzJiMzNDsgZm9yIGBUSVBDYC4gVGhlIGNvcmUgJiMzNDtSZWFzb25pbmcmIzM0OyBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgdGhlIGJhY2tsb2cgcHJvY2Vzc2luZywgc3BsaWNpbmcgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIGB4bWl0cWAgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYHRpcGNfbm9kZV94bWl0YCwgYW5kIHRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX3NrX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRzdHJlYW0mIzM0OywKICAgICYjMzQ7dGlwY19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHNvY2tldCBiYWNrbG9nIHByb2Nlc3NpbmcgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgeG1pdHEgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYSBjYWxsIHRvIHRpcGNfbm9kZV94bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfc2tfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfc2VuZHN0cmVhbSYjMzQ7LAogICAgJiMzNDt0aXBjX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc29ja2V0IGJhY2tsb2cgcHJvY2Vzc2luZyB0byBzcGxpY2UgdGhlIHRyYW5zbWl0IHF1ZXVlIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCB4bWl0cSBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBhIGNhbGwgdG8gdGlwY19ub2RlX3htaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVElQQyBuZXR3b3JraW5nIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCYjMzk7cyB3cml0ZSBxdWV1ZSBpbnRvIGEgcHJvdmlkZWQgYHhtaXRxYCBpbnN0ZWFkIG9mIHRyYW5zbWl0dGluZyB0aGUgYnVmZmVycyBkaXJlY3RseSB2aWEgYHRpcGNfbm9kZV94bWl0YCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHBhY2tldCB0cmFuc21pc3Npb24gZmxvdy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBmaWVsZHMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb24gdGhlIHNrYiBxdWV1ZXMpIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhM2Q4NjI4YTA4ODdjOGY3MDU2Y2YyNDAzYjMyNmIxNzVmMTk0NmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjQ4OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBlNTY0MzQxZTAyMTZkLi4xNmQ4NDRmYzhjYTU3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMTU2LDcgJiM0MzsxNTYsOCBAQCBzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CiBzdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spOwogc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTsKIHN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7Ci1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKTsKJiM0MztzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLAomIzQzOwkJCQkgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpOwogc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7CkBAIC01NjAsNyAmIzQzOzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpCiAJCQkJCSAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7CiAKIAkvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi8KLQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgTlVMTCk7CiAJLyogUmVtb3ZlIHBlbmRpbmcgU1lOICovCiAJX19za2JfcXVldWVfcHVyZ2UoJmFtcDtzay0mZ3Q7c2tfd3JpdGVfcXVldWUpOwogCkBAIC0xMjY4LDcgJiM0MzsxMjY5LDggQEAgdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLAogLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZQogICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZQogICovCi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKQomIzQzO3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0eHEgPSAmYW1wO3Rzay0mZ3Q7c2suc2tfd3JpdGVfcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTsKQEAgLTEzMTAsNiAmIzQzOzEzMTIsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaykKIAkJdHNrLSZndDtwa3RfY250ICYjNDM7PSBza2JfcXVldWVfbGVuKHR4cSk7CiAJdHNrLSZndDtzbnRfdW5hY2tlZCAmIzQzOz0gdHNrLSZndDtzbmRfYmFja2xvZzsKIAl0c2stJmd0O3NuZF9iYWNrbG9nID0gMDsKJiM0MzsKJiM0MzsJaWYgKHhtaXRxICZhbXA7JmFtcDsgaW5fb3duX25vZGUobmV0LCBkbm9kZSkpIHsKJiM0MzsJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay0mZ3Q7cG9ydGlkKTsKIAlpZiAocmMgPT0gLUVMSU5LQ09ORykKIAkJdHNrLSZndDtjb25nX2xpbmtfY250ID0gMTsKQEAgLTEzNjcsNyAmIzQzOzEzNzUsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWdvdG8gZXhpdDsKIAogCQl3YXNfY29uZyA9IHRza19jb25uX2NvbmcodHNrKTsKLQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkcikpOwomIzQzOwkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTsKIAkJdHNrLSZndDtzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTsKIAkJaWYgKHRzay0mZ3Q7cGVlcl9jYXBzICZhbXA7IFRJUENfQkxPQ0tfRkxPV0NUTCkKIAkJCXRzay0mZ3Q7c25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7CkBAIC0yMTY1LDcgJiM0MzsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLAogCQlzbXBfd21iKCk7CiAJCXRzay0mZ3Q7Y29uZ19saW5rX2NudC0tOwogCQl3YWtldXAgPSB0cnVlOwotCQl0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTsKJiM0MzsJCXRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTsKIAkJYnJlYWs7CiAJY2FzZSBHUk9VUF9QUk9UT0NPTDoKIAkJdGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCAmYW1wO3dha2V1cCwgaGRyLCBpbnB1dHEsIHhtaXRxKTsKQEAgLTIyNTYsNyAmIzQzOzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIGZhbHNlOwogCWNhc2UgVElQQ19FU1RBQkxJU0hFRDoKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfd3JpdGVfcXVldWUpKQotCQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7CiYjNDM7CQkJdGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpOwogCQkvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqLwogCQlpZiAobGlrZWx5KGNvbl9tc2cgJmFtcDsmYW1wOyAhZXJyICZhbXA7JmFtcDsgcHBvcnQgPT0gb3BvcnQgJmFtcDsmYW1wOwogCQkJICAgcG5vZGUgPT0gb25vZGUpKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVElQQyBTb2NrZXQgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgYXMgYW4gYXJndW1lbnQuIEkgc2VlIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgcXVldWVpbmcgU0tCcyB0byBgeG1pdHFgICppbnN0ZWFkKiBvZiBpbW1lZGlhdGVseSB0cmFuc21pdHRpbmcgdGhlbSB3aXRoIGB0aXBjX25vZGVfeG1pdGAgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGVzc2VudGlhbGx5IGRlZmVycmluZyB0aGUgdHJhbnNtaXNzaW9uIGZvciBsb2NhbCB0cmFmZmljLgoKVGhlIGNvZGUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXTigJlzIGEgbG9naWMgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHF1ZXVlIG1hbmFnZW1lbnQgcmVmYWN0b3IuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdCBtZW1iZXJzLCBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gSXQmIzM5O3MganVzdCBtb3ZpbmcgU0tCcyBhcm91bmQsIHNvIHRoZSB0eXBpY2FsIGJ1Z3MgSeKAmWQgYmUgd29ycmllZCBhYm91dCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWVzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBUaGFua2Z1bGx5LCBLQVNBTiBzaG91bGQgYmUgd2VsbC1lcXVpcHBlZCB0byBjYXRjaCB0aG9zZS4gVGhlcmUmIzM5O3Mgbm8gb2J2aW91cyB2ZWN0b3IgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBhIGJyYW5jaGluZyBjb25kaXRpb24uIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHN1Y2ggaXNzdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucy4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHhtaXRxYC4gSSBzZWUgaXQmIzM5O3MgcGFzc2VkIGRvd24gZnJvbSBjYWxsZXJzIGxpa2UgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgLCBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLiBUaGVzZSBmdW5jdGlvbnMgcmVjZWl2ZSBgeG1pdHFgIGFzIGFuIGFyZ3VtZW50LCBzbyBpdHMgdXNlIGlzIGNvbnNpc3RlbnQgdGhyb3VnaG91dC4gTm93LCBgdGlwY19za19yY3ZgLCBpcyBhIGxpa2VseSBpbml0aWFsaXphdGlvbiBzaXRlLCBhbmQgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGlzc3VlIHdpdGggaXQuIEhvbmVzdGx5LCBldmVuIGlmIGB4bWl0cWAgd2VyZSB1bmluaXRpYWxpemVkLCBpdCYjMzk7cyBqdXN0IGEgcG9pbnRlciwgYW5kIGl0cyB1c2FnZSB3b3VsZCBiZSBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBwb2ludGVyIGJ1ZyB0aGF0IEtNU0FOIHNob3VsZCBjYXRjaC4gSG93ZXZlciwgSSBzaG91bGQgY2hlY2ssIGZvciBjb21wbGV0ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfc2tfY29ubl9wcm90b19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMTMyNi0vKipcbm5ldC90aXBjL3NvY2tldC5jOjEzMjc6ICogdGlwY19za19jb25uX3Byb3RvX3JjdiAtIHJlY2VpdmUgYSBjb25uZWN0aW9uIG1uZyBwcm90b2NvbCBtZXNzYWdlXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI4LSAqIEB0c2s6IHJlY2VpdmluZyBzb2NrZXRcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzMyLSAqL1xubmV0L3RpcGMvc29ja2V0LmM6MTMzMzpzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL3NvY2tldC5jLTEzMzQtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjE1Nj1zdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjE2Ny1cdGNhc2UgQ09OTl9NQU5BR0VSOlxubmV0L3RpcGMvc29ja2V0LmM6MjE2ODpcdFx0dGlwY19za19jb25uX3Byb3RvX3Jjdih0c2ssIHNrYiwgaW5wdXRxLCB4bWl0cSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yMTY5LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgdGlwY19za19wcm90b19yY3ZgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY2FsbGVycyBvZiBgdGlwY19za19wcm90b19yY3ZgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmssIHNvIHVuZGVyc3RhbmRpbmcgd2hvJiMzOTtzIGNhbGxpbmcgaXQgaXMgZXNzZW50aWFsIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBwYXRocyB0aGF0IGRhdGEgY2FuIHRha2UuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgaW52ZXN0aWdhdGlvbiBvZiB0aGUga2VybmVsJiMzOTtzIHNvdXJjZSBjb2RlLCBwb3NzaWJseSB1c2luZyB0b29scyBsaWtlIGBjc2NvcGVgLCBgZ2RiYCwgb3Igc2ltcGx5IGEgZ3JlcCBzZWFyY2ggYWNyb3NzIHRoZSByZWxldmFudCBmaWxlcy4gSSYjMzk7bSBhaW1pbmcgdG8gaWRlbnRpZnkgdGhlIGltbWVkaWF0ZSBmdW5jdGlvbnMgY2FsbGluZyBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgZnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgd2lkZXIgY29udGV4dCB3aXRoaW4gdGhlIFRJUEMgc3Vic3lzdGVtLiBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0cmlnZ2VyZWQgdGhlIGludmVzdGlnYXRpb24sIGFuZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbm5lY3Rpb25zIHRvIGtub3duIGFyZWFzIG9mIGludGVyZXN0IG9yIHBvdGVudGlhbCBwcm9ibGVtIHBvaW50cywgb3IgbWF5YmUganVzdCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX3Byb3RvX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTQwMz1zdGF0aWMgaW50IHRpcGNfc2tfc29ja19lcnIoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW91dClcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXHR3aGlsZSAoKHJjXyA9ICEoY29uZGl0aW9uXykpKSB7XHRcdFx0XHRcdCAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlx0XHQvKiBjb3VwbGVkIHdpdGggc21wX3dtYigpIGluIHRpcGNfc2tfcHJvdG9fcmN2KCkgKi8gICAgICAgICAgICBcXFxubmV0L3RpcGMvc29ja2V0LmMtNDMzLVx0XHRzbXBfcm1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTIxNTE9c3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU1LVxubmV0L3RpcGMvc29ja2V0LmM6MjE1NjpzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU3LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ2PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM2My1cdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcbm5ldC90aXBjL3NvY2tldC5jOjIzNjQ6XHRcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcdTAwMjZpbnB1dHEsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTIzNjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIENhbGxlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdGlwY19za19maWx0ZXJfcmN2YCBjYWxsZXJzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBpbiB0aGUgVGlwYyBzb2NrZXQgZmlsdGVyaW5nIHByb2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIHdobyYjMzk7cyBjYWxsaW5nIGl0IGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgb3ZlcnZpZXcuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHRyYWNlIGhvdyBtZXNzYWdlcyBhcmUgZ2V0dGluZyBoYW5kbGVkLCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGV2ZW4gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlIGludG8gdGhvc2UgY2FsbCBzdGFja3MgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bmV4cGVjdGVkIG9yIGluZWZmaWNpZW50IHVzYWdlIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3NrX2ZpbHRlcl9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz0yMzE4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzM1LS8qKlxubmV0L3RpcGMvc29ja2V0LmM6MjMzNjogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzM3LSAqIEBzazogc29ja2V0XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMjM0NS0gKi9cbm5ldC90aXBjL3NvY2tldC5jOjIzNDY6c3RhdGljIHZvaWQgdGlwY19za19maWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL3NvY2tldC5jLTIzNDctXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTIzNTctXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzU4Olx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFwmIzM0OyBcJiMzNDspO1xubmV0L3RpcGMvc29ja2V0LmMtMjM1OS1cdFRJUENfU0tCX0NCKHNrYiktXHUwMDNlYnl0ZXNfcmVhZCA9IDA7XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjQxMT1zdGF0aWMgaW50IHRpcGNfc2tfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI0MTgtXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDE5Olx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFx1MDAyNnhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTI0MjAtXHRhZGRlZCA9IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAtIGJlZm9yZTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDM4PXN0YXRpYyB2b2lkIHRpcGNfc2tfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU2LVx0XHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbm5ldC90aXBjL3NvY2tldC5jOjI0NTc6XHRcdFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcbm5ldC90aXBjL3NvY2tldC5jLTI0NTgtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzQKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgdGlwY19za19iYWNrbG9nX3JjdmAgYW5kIHNwZWNpZmljYWxseSBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIGl0LiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgeG1pdHFgIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSB1c2luZyBgX19za2JfcXVldWVfaGVhZF9pbml0YC4gTm8gd29ycmllcyB0aGVyZS4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgb3B0aW1pemluZyBob3cgU0tCcyBhcmUgc2VudCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gSW5zdGVhZCBvZiB0aGUgZGlyZWN0IGNhbGwgdG8gYHRpcGNfbm9kZV94bWl0YCwgaXQmIzM5O3Mgbm93IHNwbGljaW5nIHRvIGB4bWl0cWAuIFRoaXMgaXMgY2xhc3NpYzsgdGhpcyBpcyBhbGwgYWJvdXQgYXZvaWRpbmcgcG90ZW50aWFsIGxvY2tpbmcgcHJvYmxlbXMgb3IgcmVlbnRyYW5jeSBpc3N1ZXMgYnkgYmF0Y2hpbmcgdGhlIHRyYW5zbWlzc2lvbnMsIG9yIHBvc3NpYmx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSB3aXRoIHNvbWUga2luZCBvZiBsb2NhbCBvcHRpbWl6YXRpb24uCgpGcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyB3aXRoIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgbWFuaXB1bGF0aW5nIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIEtBU0FOLCB3aXRoIGl0cyBzdXBlcmIgY292ZXJhZ2UsIHdpbGwgaGFuZGxlIHBlcmZlY3RseS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoaXMgaXNuJiMzOTt0IGEgS01TQU4tcmVsZXZhbnQgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGlwY19za19wdXNoX2JhY2tsb2dgIHRvIG9wdGlvbmFsbHkgc3BsaWNlIHRoZSBzb2NrZXQmIzM5O3Mgd3JpdGUgcXVldWUgaW50byBhIHByb3ZpZGVkIGB4bWl0cWAgaW5zdGVhZCBvZiB0cmFuc21pdHRpbmcgdGhlIGJ1ZmZlcnMgZGlyZWN0bHkgdmlhIGB0aXBjX25vZGVfeG1pdGAgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgZmllbGRzLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHRoZSBza2IgcXVldWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBvcHRpb25hbGx5IHNwbGljZSB0aGUgc29ja2V0JiMzOTtzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MTYuODYwNTU3MDAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODIzNjk1MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19zZW5kc3RyZWFtXCIsXG4gICAgXCJ0aXBjX3NlbmRtc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzb2NrZXQgYmFja2xvZyBwcm9jZXNzaW5nIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVkIHhtaXRxIGZvciBsb2NhbCBkZXN0aW5hdGlvbnMsIGF2b2lkaW5nIGEgY2FsbCB0byB0aXBjX25vZGVfeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBBUEkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjE2Ljg2MDU2MjIwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDcyODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjQ4OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmNcXG5pbmRleCBlNTY0MzQxZTAyMTZkLi4xNmQ4NDRmYzhjYTU3IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXFxuKysrIGIvbmV0L3RpcGMvc29ja2V0LmNcXG5AQCAtMTU2LDcgKzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcXG4gc3RhdGljIHZvaWQgdGlwY19za19yZW1vdmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcXG4gc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG4gc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2Fjayk7XFxuK3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cSk7XFxuIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcztcXG5AQCAtNTYwLDcgKzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7XFxuIFxcbiBcXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cXG4tXFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XFxuK1xcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xcbiBcXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cXG4gXFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSk7XFxuIFxcbkBAIC0xMjY4LDcgKzEyNjksOCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXFxuIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcXG4gICogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBzb2NrZXQgaXMgaW4gTmFnbGUgbW9kZVxcbiAgKi9cXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcXG4rc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFxcdTAwMjZ0c2stXFx1MDAzZXNrLnNrX3dyaXRlX3F1ZXVlO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCh0eHEpO1xcbkBAIC0xMzEwLDYgKzEzMTIsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcXG4gXFx0XFx0dHNrLVxcdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcXG4gXFx0dHNrLVxcdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXFx1MDAzZXNuZF9iYWNrbG9nO1xcbiBcXHR0c2stXFx1MDAzZXNuZF9iYWNrbG9nID0gMDtcXG4rXFxuK1xcdGlmICh4bWl0cSBcXHUwMDI2XFx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xcbitcXHRcXHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbiBcXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcXG4gXFx0XFx0dHNrLVxcdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcXG5AQCAtMTM2Nyw3ICsxMzc1LDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFxuIFxcdFxcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xcbi1cXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XFxuK1xcdFxcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XFxuIFxcdFxcdHRzay1cXHUwMDNlc250X3VuYWNrZWQgLT0gbXNnX2Nvbm5fYWNrKGhkcik7XFxuIFxcdFxcdGlmICh0c2stXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcXG4gXFx0XFx0XFx0dHNrLVxcdTAwM2VzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTtcXG5AQCAtMjE2NSw3ICsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRzbXBfd21iKCk7XFxuIFxcdFxcdHRzay1cXHUwMDNlY29uZ19saW5rX2NudC0tO1xcbiBcXHRcXHR3YWtldXAgPSB0cnVlO1xcbi1cXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcXG4rXFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcXG4gXFx0XFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcXHUwMDI2d2FrZXVwLCBoZHIsIGlucHV0cSwgeG1pdHEpO1xcbkBAIC0yMjU2LDcgKzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIFRJUENfRVNUQUJMSVNIRUQ6XFxuIFxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxcbi1cXHRcXHRcXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcXG4rXFx0XFx0XFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xcbiBcXHRcXHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xcbiBcXHRcXHRpZiAobGlrZWx5KGNvbl9tc2cgXFx1MDAyNlxcdTAwMjYgIWVyciBcXHUwMDI2XFx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MTcuMzIwOTE3MjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODY5Nzg5NDcyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfc2tfcmN2XCIsXG4gICAgXCJ0aXBjX3NlbmRzdHJlYW1cIixcbiAgICBcInRpcGNfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHNvY2tldCBiYWNrbG9nIHByb2Nlc3NpbmcgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgeG1pdHEgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYSBjYWxsIHRvIHRpcGNfbm9kZV94bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmEzZDg2MjhhMDg4N2M4ZjcwNTZjZjI0MDNiMzI2YjE3NWYxOTQ2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6NDg6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jXG5pbmRleCBlNTY0MzQxZTAyMTZkLi4xNmQ4NDRmYzhjYTU3IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcbisrKyBiL25ldC90aXBjL3NvY2tldC5jXG5AQCAtMTU2LDcgKzE1Niw4IEBAIHN0YXRpYyBpbnQgdGlwY19za19pbnNlcnQoc3RydWN0IHRpcGNfc29jayAqdHNrKTtcbiBzdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xuIHN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XG4gc3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKTtcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzO1xuQEAgLTU2MCw3ICs1NjEsNyBAQCBzdGF0aWMgdm9pZCBfX3RpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVycm9yKVxuIFx0XHRcdFx0XHQgICAgIXRza19jb25uX2NvbmcodHNrKSkpO1xuIFxuIFx0LyogUHVzaCBvdXQgZGVsYXllZCBtZXNzYWdlcyBpZiBpbiBOYWdsZSBtb2RlICovXG4tXHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlKTtcbitcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIE5VTEwpO1xuIFx0LyogUmVtb3ZlIHBlbmRpbmcgU1lOICovXG4gXHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSk7XG4gXG5AQCAtMTI2OCw3ICsxMjY5LDggQEAgdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLFxuIC8qIHRpcGNfc2tfcHVzaF9iYWNrbG9nKCk6IHNlbmQgYWNjdW11bGF0ZWQgYnVmZmVycyBpbiBzb2NrZXQgd3JpdGUgcXVldWVcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHNvY2tldCBpcyBpbiBOYWdsZSBtb2RlXG4gICovXG4tc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbitzdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxuIHtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKnR4cSA9IFx1MDAyNnRzay1cdTAwM2Vzay5za193cml0ZV9xdWV1ZTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVla190YWlsKHR4cSk7XG5AQCAtMTMxMCw2ICsxMzEyLDEyIEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spXG4gXHRcdHRzay1cdTAwM2Vwa3RfY250ICs9IHNrYl9xdWV1ZV9sZW4odHhxKTtcbiBcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCArPSB0c2stXHUwMDNlc25kX2JhY2tsb2c7XG4gXHR0c2stXHUwMDNlc25kX2JhY2tsb2cgPSAwO1xuK1xuK1x0aWYgKHhtaXRxIFx1MDAyNlx1MDAyNiBpbl9vd25fbm9kZShuZXQsIGRub2RlKSkge1xuK1x0XHRza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCh0eHEsIHhtaXRxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIHR4cSwgZG5vZGUsIHRzay1cdTAwM2Vwb3J0aWQpO1xuIFx0aWYgKHJjID09IC1FTElOS0NPTkcpXG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250ID0gMTtcbkBAIC0xMzY3LDcgKzEzNzUsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXG4gXHRcdHdhc19jb25nID0gdHNrX2Nvbm5fY29uZyh0c2spO1xuLVx0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIG1zZ19uYWdsZV9hY2soaGRyKSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpLCB4bWl0cSk7XG4gXHRcdHRzay1cdTAwM2VzbnRfdW5hY2tlZCAtPSBtc2dfY29ubl9hY2soaGRyKTtcbiBcdFx0aWYgKHRzay1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfQkxPQ0tfRkxPV0NUTClcbiBcdFx0XHR0c2stXHUwMDNlc25kX3dpbiA9IG1zZ19hZHZfd2luKGhkcik7XG5AQCAtMjE2NSw3ICsyMTczLDcgQEAgc3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRzbXBfd21iKCk7XG4gXHRcdHRzay1cdTAwM2Vjb25nX2xpbmtfY250LS07XG4gXHRcdHdha2V1cCA9IHRydWU7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHR0aXBjX3NrX3B1c2hfYmFja2xvZyh0c2ssIGZhbHNlLCB4bWl0cSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBHUk9VUF9QUk9UT0NPTDpcbiBcdFx0dGlwY19ncm91cF9wcm90b19yY3YoZ3JwLCBcdTAwMjZ3YWtldXAsIGhkciwgaW5wdXRxLCB4bWl0cSk7XG5AQCAtMjI1Niw3ICsyMjY0LDcgQEAgc3RhdGljIGJvb2wgdGlwY19za19maWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgVElQQ19FU1RBQkxJU0hFRDpcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfd3JpdGVfcXVldWUpKVxuLVx0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0XHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0LyogQWNjZXB0IG9ubHkgY29ubmVjdGlvbi1iYXNlZCBtZXNzYWdlcyBzZW50IGJ5IHBlZXIgKi9cbiBcdFx0aWYgKGxpa2VseShjb25fbXNnIFx1MDAyNlx1MDAyNiAhZXJyIFx1MDAyNlx1MDAyNiBwcG9ydCA9PSBvcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBwbm9kZSA9PSBvbm9kZSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjE3LjMyMDkxOTQwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NzczMzk5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUSVBDIHdpdGggYSBOZXcgVHJhbnNtaXQgUXVldWUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AuIFRoZXkncmUgbW9kaWZ5aW5nIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIGFkZGluZyBhIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgcGFyYW1ldGVyLiBBbmQgdGhlIHJlYWwga2lja2VyPyBUaGV5J3JlIG5vdyB1c2luZyB0aGlzIGB4bWl0cWAgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB3aGVuIHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIHRoZSBsb2NhbCBub2RlIOKAkyBgaW5fb3duX25vZGUobmV0LCBkbm9kZSlgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIGFsdGVyaW5nIGhvdyBUSVBDLCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgd2UgYWxsIGtub3cgYW5kIGxvdmUgKGFuZCBpcyBhY2Nlc3NpYmxlIHZpYSB0aGUgc29ja2V0IEFQSSwgYEFGX1RJUENgKSwgaGFuZGxlcyBpdHMgaW50ZXJuYWwgcXVldWluZy5cblxuVGhpcyBtYWtlcyBtZSB0aGluazogaXQncyBmdXp6aW5nIHRpbWUuIEFueSB0aW1lIHRoZXJlJ3MgYSBjaGFuZ2UgdGhhdCB0b3VjaGVzIGEgbmV0d29ya2luZyBzdWJzeXN0ZW0gbGlrZSB0aGlzLCBlc3BlY2lhbGx5IGEgY29yZSBwYXJ0IG9mIGl0cyBxdWV1aW5nIG1lY2hhbmlzbXMsIHRoZXJlJ3MgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBUSVBDIHRvIG1ha2Ugc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBlbmFibGVkIGZvciBmdXp6aW5nLiBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBgbmV0L3RpcGMvS2NvbmZpZ2AgZm9yIGFueXRoaW5nIHRoYXQgaGFzIGBjb25maWcgVElQQ2AgaW4gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODoyMi44OTgyNjE4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg0MjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVElQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL0tjb25maWctNS1cXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXFxubmV0L3RpcGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjMtXFxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxcbm5ldC90aXBjL0tjb25maWctMjUtXFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTI5LVxcdCAgSVAtb3Zlci1JbmZpbmlCYW5kIGRldmljZXMuXFxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcXG5uZXQvdGlwYy9LY29uZmlnLTMxLVxcdGJvb2wgXFxcIklQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxcbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXFxubmV0L3RpcGMvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctNTItXFxubmV0L3RpcGMvS2NvbmZpZzo1Mzpjb25maWcgVElQQ19ESUFHXFxubmV0L3RpcGMvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiVElQQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODoyMi45NDMxMTI3MDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE0Mzk3ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSdtIGxvb2tpbmcgYXQgaXMgbGFiZWxlZCBgVElQQ2AuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiwgc28gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgcG9pbnRzLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgcG9pbnRzIHRvIGEgZnVuY3Rpb24gY2FsbGVkIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AsIHdoaWNoIGl0IGhpZ2hsaWdodHMgYXMgYmVpbmcgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIGludGVybmFsIHRvIGEgcGFydGljdWxhciBtb2R1bGUgb3Igc2NvcGUsIG1ha2luZyBpdCBwb3RlbnRpYWxseSBtb3JlIGxvY2FsaXplZCBpbiBpdHMgaW1wYWN0LlxuXG5UaGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgKmNhbGxlZCogZnJvbS4gSSBzZWUgaXQgbGlzdGVkIGFzIGJlaW5nIGNhbGxlZCBieSBgX190aXBjX3NodXRkb3duYCwgYHRpcGNfc2tfY29ubl9wcm90b19yY3ZgLCBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXMgd2VsbC4gQXJlICp0aGV5KiBzdGF0aWM/IFdobyBjYWxscyAqdGhlbSo/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgY2hhaW4gd2lsbCBjbGFyaWZ5IHRoZSBmdW5jdGlvbidzIGluZmx1ZW5jZSwgYW5kIGFsbG93IG1lIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgaXRzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyNSwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODoyNy45NTc1MTMzNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTI2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aXBjX3NodXRkb3dufHRpcGNfc2tfY29ubl9wcm90b19yY3Z8dGlwY19za19wcm90b19yY3Z8dGlwY19za19maWx0ZXJfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz00MDM9c3RhdGljIGludCB0aXBjX3NrX3NvY2tfZXJyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvdXQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXFx0d2hpbGUgKChyY18gPSAhKGNvbmRpdGlvbl8pKSkge1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlxcdFxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGlwY19za19wcm90b19yY3YoKSAqLyAgICAgICAgICAgIFxcXFxcXG5uZXQvdGlwYy9zb2NrZXQuYy00MzMtXFx0XFx0c21wX3JtYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NTQyPXN0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNTQ5LS8qIENhbGxlciBzaG91bGQgaG9sZCBzb2NrZXQgbG9jayBmb3IgdGhlIHNvY2tldC4gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo1NTA6c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG5uZXQvdGlwYy9zb2NrZXQuYy01NTEte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NDEtXFx0dHJhY2VfdGlwY19za19yZWxlYXNlKHNrLCBOVUxMLCBUSVBDX0RVTVBfQUxMLCBcXFwiIFxcXCIpO1xcbm5ldC90aXBjL3NvY2tldC5jOjY0MjpcXHRfX3RpcGNfc2h1dGRvd24oc29jaywgVElQQ19FUlJfTk9fUE9SVCk7XFxubmV0L3RpcGMvc29ja2V0LmMtNjQzLVxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI2LS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjEzMjc6ICogdGlwY19za19jb25uX3Byb3RvX3JjdiAtIHJlY2VpdmUgYSBjb25uZWN0aW9uIG1uZyBwcm90b2NvbCBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMTMyOC0gKiBAdHNrOiByZWNlaXZpbmcgc29ja2V0XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzMyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjEzMzM6c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMTMzNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMTUxPXN0YXRpYyB2b2lkIHRpcGNfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU1LVxcbm5ldC90aXBjL3NvY2tldC5jOjIxNTY6c3RhdGljIHZvaWQgdGlwY19za19wcm90b19yY3Yoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTIxNTctXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE2Ny1cXHRjYXNlIENPTk5fTUFOQUdFUjpcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTY4OlxcdFxcdHRpcGNfc2tfY29ubl9wcm90b19yY3YodHNrLCBza2IsIGlucHV0cSwgeG1pdHEpO1xcbm5ldC90aXBjL3NvY2tldC5jLTIxNjktXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE5NS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTk2OiAqIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QgLSBjaGVjayBpbmNvbWluZyBtZXNzYWdlIGZvciBhIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtMjE5Ny0gKiBAdHNrOiBUSVBDIHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjIwMS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMjAyOnN0YXRpYyBib29sIHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3Qoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL3NvY2tldC5jLTIyMDMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMzQ2PXN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzYzLVxcdGlmICh1bmxpa2VseSghbXNnX2lzZGF0YShoZHIpKSlcXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzY0OlxcdFxcdHRpcGNfc2tfcHJvdG9fcmN2KHNrLCBcXHUwMDI2aW5wdXRxLCB4bWl0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM2NS1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzNzUtXFx0XFx0bGltaXQgPSByY3ZidWZfbGltaXQoc2ssIHNrYik7XFxubmV0L3RpcGMvc29ja2V0LmM6MjM3NjpcXHRcXHRpZiAoKHNrX2Nvbm4gXFx1MDAyNlxcdTAwMjYgIXRpcGNfc2tfZmlsdGVyX2Nvbm5lY3QodHNrLCBza2IsIHhtaXRxKSkgfHxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzc3LVxcdFxcdCAgICAoIXNrX2Nvbm4gXFx1MDAyNlxcdTAwMjYgbXNnX2Nvbm5lY3RlZChoZHIpKSB8fFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjgwOD1zdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI4MTgtXFx0dHJhY2VfdGlwY19za19zaHV0ZG93bihzaywgTlVMTCwgVElQQ19EVU1QX0FMTCwgXFxcIiBcXFwiKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyODE5OlxcdF9fdGlwY19zaHV0ZG93bihzb2NrLCBUSVBDX0NPTk5fU0hVVERPV04pO1xcbm5ldC90aXBjL3NvY2tldC5jLTI4MjAtXFx0c2stXFx1MDAzZXNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MjguMDAzODMyODE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5MzU3NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgU29ja2V0IEZ1bmN0aW9uIENhbGwgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIFRJUEMgZnVuY3Rpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIEZpcnN0LCBJIHNlZSB0aGF0IGJvdGggYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCB1bHRpbWF0ZWx5IGNhbGwgYF9fdGlwY19zaHV0ZG93bmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGV5J3JlIGxpa2VseSBkaWZmZXJlbnQgZW50cnkgcG9pbnRzIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgc2h1dGRvd24gcHJvY2VkdXJlLiBOb3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBgdGlwY19za19maWx0ZXJfcmN2YCBzZWVtcyB0byBiZSB0aGUga2V5IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBJdCBjYW4gcm91dGUgdG8gdHdvIHBsYWNlcy5cblxuVGhlIHByaW1hcnkgcmVjZWl2ZXIgcGF0aCBgdGlwY19za19maWx0ZXJfcmN2YCAtXHUwMDNlIGB0aXBjX3NrX3Byb3RvX3JjdmAgLVx1MDAzZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAgbG9va3MgbGlrZSB0aGUgc3RhbmRhcmQgcGF0aCBmb3IgcmVjZWl2aW5nIGRhdGEuIFRoYXQncyBhIGNoYWluIG9mIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBzb2NrZXQgcHJvdG9jb2wsIHVsdGltYXRlbHkgaGFuZGxpbmcgdGhlIGluY29taW5nIHBhY2tldCBkYXRhLlxuXG5CdXQsIGB0aXBjX3NrX2ZpbHRlcl9yY3ZgIGNhbiBhbHNvIGNhbGwgYHRpcGNfc2tfZmlsdGVyX2Nvbm5lY3RgLCBzbyB0aGVyZSdzIGFub3RoZXIgY29ubmVjdGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgaXQgdGFrZXMgdGhpcyByb3V0ZS4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYHRpcGNfc2tfZmlsdGVyX3JjdmAgYW5kIHdoYXQncyBjYWxsaW5nIGl0IHRvIGZ1bGx5IGdyYXNwIHRoZSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjM0LjQ5NzQxMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDM2MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfZmlsdGVyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0yMzE4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzMzUtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjMzNjogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMjMzNy0gKiBAc2s6IHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0NS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzQ2OnN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ny1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU3LVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNTg6XFx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM1OS1cXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VieXRlc19yZWFkID0gMDtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0MTE9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MTgtXFxubmV0L3RpcGMvc29ja2V0LmM6MjQxOTpcXHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDIwLVxcdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOD1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU2LVxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI0NTc6XFx0XFx0XFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODozNC41NDE4NTMwNzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTAyMjI5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFBhY2tldCBFbnF1ZXVlaW5nIGluIHRoZSBUSVBDIFNvY2tldCBMYXllcioqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHRpcGNfc2tfZmlsdGVyX3JjdmAgaXMgYmVpbmcgaW52b2tlZCBieSB0d28ga2V5IGZ1bmN0aW9uczogYHRpcGNfc2tfYmFja2xvZ19yY3ZgIGFuZCBgdGlwY19za19lbnF1ZXVlYC4gVGhhdCdzIGltcG9ydGFudC4gYHRpcGNfc2tfYmFja2xvZ19yY3ZgLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaGFuZGxlcyB0aGUgcmVjZXB0aW9uIG9mIHBhY2tldHMgdGhhdCBhcmUgc2l0dGluZyBpbiB0aGUgYmFja2xvZyBxdWV1ZSBmb3IgdGhlIHNvY2tldC4gTWFrZXMgc2Vuc2UuIEJ1dCBgdGlwY19za19lbnF1ZXVlYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgcGxhY2luZyBwYWNrZXRzIG9udG8gdGhlIHNvY2tldCdzIHJlY2VpdmUgcXVldWUuXG5cbk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgZXhhY3RseSAqaG93KiBhbmQgKndoZW4qIGB0aXBjX3NrX2VucXVldWVgIGlzIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgdGlwY19za19lbnF1ZXVlYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBjYWxsIHBhdGhzIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgcGFja2V0cyBnZXQgaW50byB0aGUgcmVjZWl2ZSBwYXRoIGFuZCwgdGhlcmVmb3JlLCB3aGljaCBwYXJ0cyBvZiB0aGUgc3RhY2sgYXJlIHJlbHlpbmcgb24gYHRpcGNfc2tfZmlsdGVyX3JjdmAncyBmaWx0ZXJpbmcgbG9naWMuIEl0J3MgYSBjcml0aWNhbCBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6MzkuMDQ0MDg0ODMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzczODk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX2VucXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MjQxMT1zdGF0aWMgaW50IHRpcGNfc2tfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQyOC0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDI5OiAqIHRpcGNfc2tfZW5xdWV1ZSAtIGV4dHJhY3QgYWxsIGJ1ZmZlcnMgd2l0aCBkZXN0aW5hdGlvbiAnZHBvcnQnIGZyb21cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDMwLSAqICAgICAgICAgICAgICAgICAgIGlucHV0cSBhbmQgdHJ5IGFkZGluZyB0aGVtIHRvIHNvY2tldCBvciBiYWNrbG9nIHF1ZXVlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDM3LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjI0Mzg6c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90aXBjL3NvY2tldC5jLTI0MzktXFx0XFx0XFx0ICAgIHUzMiBkcG9ydCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDkyPXZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTA4LVxcdFxcdFxcdGlmIChsaWtlbHkoc3Bpbl90cnlsb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaykpKSB7XFxubmV0L3RpcGMvc29ja2V0LmM6MjUwOTpcXHRcXHRcXHRcXHR0aXBjX3NrX2VucXVldWUoaW5wdXRxLCBzaywgZHBvcnQsIFxcdTAwMjZ4bWl0cSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjUxMC1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODozOS4wODc4MjkzMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyOTQ3OTU0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFRJUEMgU29ja2V0IExpZmVjeWNsZSBhbmQgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBUSVBDIHNvY2tldHMgaGFuZGxlIGluY29taW5nIGRhdGEgYW5kIHRoZWlyIG92ZXJhbGwgbGlmZWN5Y2xlLiBJIHVuZGVyc3RhbmQgdGhhdCBgdGlwY19za19yY3ZgIGlzIHRoZSBwcmltYXJ5IHJlY2VpdmUgZnVuY3Rpb24uIFRoYXQncyB0aGUgY29yZSBvZiBkYXRhIHJlY2VwdGlvbiwgdGhlIHdvcmtob3JzZSBvZiBpdCBhbGwuIFNvLCBuYXR1cmFsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQuXG5cbk5vdywgYWxvbmdzaWRlIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IGlzIHJlbGVhc2VkIGFuZCBzaHV0IGRvd24uIFRoZXJlZm9yZSwgSSB3aWxsIGNoZWNrIHRoZSBzb2NrZXQgb3BlcmF0aW9ucyBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gLiBUaGVzZSBtdXN0IGJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlLCBhbmQgcG90ZW50aWFsbHkgaW1wYWN0IHRoZSByZWNlaXZlIHByb2Nlc3MuXG5cbkEgcXVpY2sgdGhvdWdodC4uLiBpcyBgdGlwY19za19yY3ZgIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkPyBJZiBzbywgdGhpcyBoYXMgbWFqb3IgaW1wbGljYXRpb25zIGZvciBob3cgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHZlcnN1cyBleHRlcm5hbGx5IHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0gb3IgZXZlbiBmcm9tIGV4dGVybmFsIG1vZHVsZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSBjYXNlIGFzIGl0IGNoYW5nZXMgaG93IGl0IHdpbGwgYmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjI2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6NTEuMzgyNjI4NTM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0MDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00MzY9aW50IHRpcGNfYmNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNDYwLVxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KGlucHV0cSkpXFxubmV0L3RpcGMvYmNhc3QuYzo0NjE6XFx0XFx0dGlwY19za19yY3YobmV0LCBpbnB1dHEpO1xcbm5ldC90aXBjL2JjYXN0LmMtNDYyLVxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy00OTAtXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcXG5uZXQvdGlwYy9iY2FzdC5jOjQ5MTpcXHRcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvYmNhc3QuYy00OTItfVxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYz00OTg9aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy01MzItXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoaW5wdXRxKSlcXG5uZXQvdGlwYy9iY2FzdC5jOjUzMzpcXHRcXHR0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7XFxubmV0L3RpcGMvYmNhc3QuYy01MzQtXFx0cmV0dXJuIHJjO1xcbi0tXFxubmV0L3RpcGMvYmNhc3QuYz01NTc9dm9pZCB0aXBjX2JjYXN0X3JlbW92ZV9wZWVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqcmN2X2wpXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTU3NC1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShpbnB1dHEpKVxcbm5ldC90aXBjL2JjYXN0LmM6NTc1OlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTU3Ni19XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTA2Mj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfbGlua19kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4sIGludCBiZWFyZXJfaWQsIGJvb2wgZGVsZXRlKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTEwOTMtXFx0XFx0dGlwY19iZWFyZXJfeG1pdChuLVxcdTAwM2VuZXQsIGJlYXJlcl9pZCwgXFx1MDAyNnhtaXRxLCBtYWRkciwgbik7XFxubmV0L3RpcGMvbm9kZS5jOjEwOTQ6XFx0dGlwY19za19yY3Yobi1cXHUwMDNlbmV0LCBcXHUwMDI2bGUtXFx1MDAzZWlucHV0cSk7XFxubmV0L3RpcGMvbm9kZS5jLTEwOTUtfVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgdGlwY19seGNfeG1pdChzdHJ1Y3QgbmV0ICpwZWVyX25ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNjQwLVxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsaXN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTY0MTpcXHRcXHRcXHR0aXBjX3NrX3JjdihwZWVyX25ldCwgbGlzdCk7XFxubmV0L3RpcGMvbm9kZS5jLTE2NDItXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE2NjUtXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxpc3QtXFx1MDAzZWxvY2spO1xcbm5ldC90aXBjL25vZGUuYzoxNjY2OlxcdFxcdHRpcGNfc2tfcmN2KHBlZXJfbmV0LCBsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmMtMTY2Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MTY4Nz1pbnQgdGlwY19ub2RlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3MDAtXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxpc3QtXFx1MDAzZWxvY2spO1xcbm5ldC90aXBjL25vZGUuYzoxNzAxOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgbGlzdCk7XFxubmV0L3RpcGMvbm9kZS5jLTE3MDItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmM9MjA4Nj12b2lkIHRpcGNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRpcGNfYmVhcmVyICpiKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTIyMDItXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxlLVxcdTAwM2VpbnB1dHEpKVxcbm5ldC90aXBjL25vZGUuYzoyMjAzOlxcdFxcdHRpcGNfc2tfcmN2KG5ldCwgXFx1MDAyNmxlLVxcdTAwM2VpbnB1dHEpO1xcbm5ldC90aXBjL25vZGUuYy0yMjA0LVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTE5Mj12b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMjY1LVxcdH1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxMjY2OlxcdHRpcGNfc2tfcmN2KG5ldCwgaW5wdXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xMjY3LX1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ4NS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDg2OiAqIHRpcGNfc2tfcmN2IC0gaGFuZGxlIGEgY2hhaW4gb2YgaW5jb21pbmcgYnVmZmVyc1xcbm5ldC90aXBjL3NvY2tldC5jLTI0ODctICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0OTEtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MjQ5Mjp2b2lkIHRpcGNfc2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKVxcbm5ldC90aXBjL3NvY2tldC5jLTI0OTMte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0Lmg9NTU9dm9pZCB0aXBjX3NvY2tldF9zdG9wKHZvaWQpO1xcbm5ldC90aXBjL3NvY2tldC5oOjU2OnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpO1xcbm5ldC90aXBjL3NvY2tldC5oLTU3LXZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICphcnJ2cSxcXG4tLVxcbm5ldC90aXBjL3RvcHNydi5jPTYxND1zdGF0aWMgdm9pZCB0aXBjX3RvcHNydl9rZXJuX2V2dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2V2ZW50ICpldnQpXFxuLS1cXG5uZXQvdGlwYy90b3BzcnYuYy02MjktXFx0dGlwY19sb29wYmFja190cmFjZShuZXQsIFxcdTAwMjZldnRxKTtcXG5uZXQvdGlwYy90b3BzcnYuYzo2MzA6XFx0dGlwY19za19yY3YobmV0LCBcXHUwMDI2ZXZ0cSk7XFxubmV0L3RpcGMvdG9wc3J2LmMtNjMxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDg6NTEuNDI4NDc0NDc3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzI2MzExMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRJUEMgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB0aXBjX3NrX3JjdmAgZnVuY3Rpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgbm9uLXN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlIGl0J3MgZGVmaW5lZCBpbiwgb3IgcG90ZW50aWFsbHkgYmUgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFuYWx5emUgdGhlIGNvZGViYXNlLlxuXG5PbiB0aGUgb3RoZXIgaGFuZCwgYHRpcGNfcmVsZWFzZWAgYW5kIGB0aXBjX3NodXRkb3duYCBhcmUgc3RhdGljIHNvY2tldCBvcGVyYXRpb25zLiBUaGF0IGltcGxpZXMgdGhleSBhcmUgb25seSBtZWFudCB0byBiZSBhY2Nlc3NlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgVElQQyBtb2R1bGUsIGxpa2VseSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgc2h1dGRvd24gcHJvY2VkdXJlcyBzcGVjaWZpYyB0byBUSVBDIHNvY2tldHMuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgZW5jYXBzdWxhdGlvbi5cblxuR2l2ZW4gdGhpcyBpbml0aWFsIG9ic2VydmF0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoaW4gdGhlIFRJUEMgc29ja2V0IGxheWVyLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhlIGNvcmUgc29ja2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgIHRvIHNlZSBob3cgZXZlcnl0aGluZyBpcyB3aXJlZCB0b2dldGhlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ4OjU2LjE2MTEwODI1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMDQ0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvdG9fb3BzLio9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTMzNDI9c3RhdGljIGludCB0aXBjX3NvY2tldHBhaXIoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NS1cXG5uZXQvdGlwYy9zb2NrZXQuYzozMzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxubmV0L3RpcGMvc29ja2V0LmMtMzM2Ny1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4NS1cXG5uZXQvdGlwYy9zb2NrZXQuYzozMzg2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XFxubmV0L3RpcGMvc29ja2V0LmMtMzM4Ny1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQwNS1cXG5uZXQvdGlwYy9zb2NrZXQuYzozNDA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxubmV0L3RpcGMvc29ja2V0LmMtMzQwNy1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0ODo1Ni4yMDQzMTY1MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MDYzMjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodCBwcm9jZXNzZXM6XG5cbioqQ2hlY2tpbmcgTXkgT3BlcmF0aW9uYWwgQXJzZW5hbCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGFwcHJvYWNoaW5nIHRoaXMgcHJvYmxlbSBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0LiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCBieSBtYWtpbmcgc3VyZSB0aGF0IG15IGdyYXNwIG9uIGBtc2dfb3BzYCBpcyBzb2xpZC4gSSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSBtZXNzYWdlIGhhbmRsaW5nIGZ1bmRhbWVudGFscyBhcmUgaW4gcGxhY2UuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgcGFja2V0X29wc2AgYmVjYXVzZSBJIG5lZWQgdG8gZXhhbWluZSB0aGUgbG93ZXItbGV2ZWwgZGF0YSBlbmNhcHN1bGF0aW9uIGFuZCBkZWxpdmVyeS4gRmluYWxseSwgYW5kIGNydWNpYWxseSwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYHN0cmVhbV9vcHNgLCBzaW5jZSBzdHJlYW1pbmcgYmVoYXZpb3IgY2FuIGJlIGNvbXBsZXggYW5kIGl0J3MgdGhlIGxheWVyIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpbiB0aGVzZSBhcmVhcyBpcyBhcyBpdCBzaG91bGQgYmUsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBoYXZlbid0IGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NzYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTowMC4wODQ5NTE1MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTYyOTgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIobXNnX29wc3xwYWNrZXRfb3BzfHN0cmVhbV9vcHMpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE2MT1zdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb25nICp0aW1lb19wKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjItXFxubmV0L3RpcGMvc29ja2V0LmM6MTYzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7XFxubmV0L3RpcGMvc29ja2V0LmM6MTY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHM7XFxubmV0L3RpcGMvc29ja2V0LmM6MTY1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHM7XFxubmV0L3RpcGMvc29ja2V0LmMtMTY2LXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGlwY19wcm90bztcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTQ2MD1zdGF0aWMgaW50IHRpcGNfc2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTQ3My1cXHRjYXNlIFNPQ0tfU1RSRUFNOlxcbm5ldC90aXBjL3NvY2tldC5jOjQ3NDpcXHRcXHRvcHMgPSBcXHUwMDI2c3RyZWFtX29wcztcXG5uZXQvdGlwYy9zb2NrZXQuYy00NzUtXFx0XFx0YnJlYWs7XFxubmV0L3RpcGMvc29ja2V0LmMtNDc2LVxcdGNhc2UgU09DS19TRVFQQUNLRVQ6XFxubmV0L3RpcGMvc29ja2V0LmM6NDc3OlxcdFxcdG9wcyA9IFxcdTAwMjZwYWNrZXRfb3BzO1xcbm5ldC90aXBjL3NvY2tldC5jLTQ3OC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTQ4MC1cXHRjYXNlIFNPQ0tfUkRNOlxcbm5ldC90aXBjL3NvY2tldC5jOjQ4MTpcXHRcXHRvcHMgPSBcXHUwMDI2bXNnX29wcztcXG5uZXQvdGlwYy9zb2NrZXQuYy00ODItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzQyPXN0YXRpYyBpbnQgdGlwY19zb2NrZXRwYWlyKHN0cnVjdCBzb2NrZXQgKnNvY2sxLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrMilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjUtXFxubmV0L3RpcGMvc29ja2V0LmM6MzM2NjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbm5ldC90aXBjL3NvY2tldC5jLTMzNjctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzODUtXFxubmV0L3RpcGMvc29ja2V0LmM6MzM4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xcbm5ldC90aXBjL3NvY2tldC5jLTMzODctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDUtXFxubmV0L3RpcGMvc29ja2V0LmM6MzQwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbm5ldC90aXBjL3NvY2tldC5jLTM0MDctXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MDAuMzM0NTg3MzI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjUzOTIyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSVBDIFNvY2tldCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVElQQyBzb2NrZXQgY3JlYXRpb24gcHJvY2VzcywgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXMgYXJlIGJlaW5nIGFzc2lnbmVkIGR1cmluZyBgdGlwY19za19jcmVhdGVgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBwb2ludCBvZiBpbnN0YW50aWF0aW9uLCBzbyBpdCdzIHdoZXJlIHRoZSBmdW5jdGlvbiBwb2ludGVycyBmb3IgcmVjZWl2aW5nIGFuZCBzZW5kaW5nIHdvdWxkIGJlIGRlZmluZWQuIE5vdywgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYXJlIGxpa2VseSBnb2luZyB0byBiZSByZWxhdGVkIHRvIHRoZSBjb3JlIG9wZXJhdGlvbnMuIEknbSB0aGlua2luZyBlaXRoZXIgYHRpcGNfc2tfcmN2YCBmb3IgdGhlIHJlY2VpdmUgcGF0aCwgb3IgYHRpcGNfbm9kZV94bWl0YCBmb3IgdGhlIG5vZGUtbGV2ZWwgdHJhbnNtaXNzaW9uIHBhdGguIFBvdGVudGlhbGx5LCBhbHNvLCBgdGlwY19zZW5kbXNnYC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGB0aXBjX3NlbmRtc2dgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgb3V0Ym91bmQgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTowOC40NTk5ODE4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyODEwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTE1Nz1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1ODpzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE1OS1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NzkxPXN0YXRpYyBfX3BvbGxfdCB0aXBjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy04MzktICpcXG5uZXQvdGlwYy9zb2NrZXQuYzo4NDA6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtODQxLSAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzZW50IG9uIHN1Y2Nlc3MsIG9yIGVycm5vXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz05MDY9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc29jayAqdHNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtOTUzLSAqXFxubmV0L3RpcGMvc29ja2V0LmM6OTU0OiAqIENhbGxlZCBmcm9tIGZ1bmN0aW9uIHRpcGNfc2VuZG1zZygpLCB3aGljaCBoYXMgZG9uZSBhbGwgc2FuaXR5IGNoZWNrc1xcbm5ldC90aXBjL3NvY2tldC5jLTk1NS0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTU3PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX3VuaWNhc3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTk5Ny0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjk5ODogKiBDYWxsZWQgZnJvbSBmdW5jdGlvbiB0aXBjX3NlbmRtc2coKSwgd2hpY2ggaGFzIGRvbmUgYWxsIHNhbml0eSBjaGVja3NcXG5uZXQvdGlwYy9zb2NrZXQuYy05OTktICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2Vzcywgb3IgZXJybm9cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEwMDE9c3RhdGljIGludCB0aXBjX3NlbmRfZ3JvdXBfYW55Y2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTA3OC0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjEwNzk6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTA4MC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTA4Mj1zdGF0aWMgaW50IHRpcGNfc2VuZF9ncm91cF9iY2FzdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1Mi0gKlxcbm5ldC90aXBjL3NvY2tldC5jOjExNTM6ICogQ2FsbGVkIGZyb20gZnVuY3Rpb24gdGlwY19zZW5kbXNnKCksIHdoaWNoIGhhcyBkb25lIGFsbCBzYW5pdHkgY2hlY2tzXFxubmV0L3RpcGMvc29ja2V0LmMtMTE1NC0gKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBvciBlcnJub1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTMzMz1zdGF0aWMgdm9pZCB0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzOTEtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MTM5MjogKiB0aXBjX3NlbmRtc2cgLSBzZW5kIG1lc3NhZ2UgaW4gY29ubmVjdGlvbmxlc3MgbWFubmVyXFxubmV0L3RpcGMvc29ja2V0LmMtMTM5My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwMy0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoxNDA0OnN0YXRpYyBpbnQgdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3RpcGMvc29ja2V0LmMtMTQwNS1cXHRcXHRcXHRzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTQxMC1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE0MTE6XFx0cmV0ID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDEyLVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE2LVxcbm5ldC90aXBjL3NvY2tldC5jOjE0MTc6c3RhdGljIGludCBfX3RpcGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNDE4LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE1NjQ9c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1ODQtXFx0aWYgKHVubGlrZWx5KGRlc3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRJUENfT1BFTikpIHtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTg1OlxcdFxcdHJjID0gX190aXBjX3NlbmRtc2coc29jaywgbSwgZGxlbik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU4Ni1cXHRcXHRpZiAoZGxlbiBcXHUwMDI2XFx1MDAyNiBkbGVuID09IHJjKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNTgyPXN0YXRpYyBpbnQgdGlwY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpkZXN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjYzNi1cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNjM3OlxcdFxcdHJlcyA9IF9fdGlwY19zZW5kbXNnKHNvY2ssIFxcdTAwMjZtLCAwKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNjM4LVxcdFxcdGlmICgocmVzIFxcdTAwM2MgMCkgXFx1MDAyNlxcdTAwMjYgKHJlcyAhPSAtRVdPVUxEQkxPQ0spKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4MC1cXHQuZ2V0c29ja29wdF9pdGVyID0gdGlwY19nZXRzb2Nrb3B0LFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODE6XFx0LnNlbmRtc2dcXHQ9IHRpcGNfc2VuZG1zZyxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgyLVxcdC5yZWN2bXNnXFx0PSB0aXBjX3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjA4LjUwNzI3MDc1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjYwMzMwMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRm9jdXNpbmcgb24gVElQQyBDb21tdW5pY2F0aW9uIFByaW1pdGl2ZXMqKlxuXG5SaWdodCwgc28gZm9yIHRoZSBzZW5kaW5nIHNpZGUgb2YgdGhpbmdzLCBgdGlwY19zZW5kbXNnYCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAgYXJlIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24uIFRoZXkncmUgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIHB1dHRpbmcgZGF0YSAqb3V0KiB2aWEgVElQQy4gVGhlbiwgd2hlbiB3ZSdyZSBjb25jZXJuZWQgd2l0aCByZWNlcHRpb24sIGB0aXBjX3NrX3JjdmAgaXMgdGhlIHN5bWJvbCB0byBjZW50ZXIgb24uIFRoYXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgY292ZXJzIHRoZSB0d28gbWFqb3IgYXNwZWN0cyBvZiB0aGUgb3BlcmF0aW9uLlxuXG5Ob3csIHRoYXQgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBsb29rcyBwcm9taXNpbmcsIGJ1dCBpdCdzICpzdGF0aWMqLiBNZWFuaW5nIEknbSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byB1c2UgaXQgZGlyZWN0bHksIHNvIEknbGwgbmVlZCB0byBnbyBhbm90aGVyIHdheSwgYW5kIGxldCdzIHN0YXJ0IHdpdGggYHRpcGNfc2VuZHN0cmVhbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjI5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MTMuMTY3NjAzNjQ3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjY4NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NlbmRzdHJlYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvc29ja2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9MTU2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6MTU3OnN0YXRpYyBpbnQgX190aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxubmV0L3RpcGMvc29ja2V0LmMtMTU4LXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNDE3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTQxLS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjE1NDI6ICogdGlwY19zZW5kc3RyZWFtIC0gc2VuZCBzdHJlYW0tb3JpZW50ZWQgZGF0YVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NDMtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NTEtICovXFxubmV0L3RpcGMvc29ja2V0LmM6MTU1MjpzdGF0aWMgaW50IHRpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KVxcbm5ldC90aXBjL3NvY2tldC5jLTE1NTMte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTU1Ny1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC90aXBjL3NvY2tldC5jOjE1NTg6XFx0cmV0ID0gX190aXBjX3NlbmRzdHJlYW0oc29jaywgbSwgZHN6KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTU5LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTYzLVxcbm5ldC90aXBjL3NvY2tldC5jOjE1NjQ6c3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZGxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTY1LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTE2NTk9c3RhdGljIGludCB0aXBjX3NlbmRfcGFja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNjYzLVxcbm5ldC90aXBjL3NvY2tldC5jOjE2NjQ6XFx0cmV0dXJuIHRpcGNfc2VuZHN0cmVhbShzb2NrLCBtLCBkc3opO1xcbm5ldC90aXBjL3NvY2tldC5jLTE2NjUtfVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjcyOD1zdGF0aWMgaW50IHRpcGNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjc5MS1cXHRpb3ZfaXRlcl9rdmVjKFxcdTAwMjZtLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XFxubmV0L3RpcGMvc29ja2V0LmM6Mjc5MjpcXHRfX3RpcGNfc2VuZHN0cmVhbShuZXdfc29jaywgXFx1MDAyNm0sIDApO1xcbm5ldC90aXBjL3NvY2tldC5jLTI3OTMtXFx0cmVsZWFzZV9zb2NrKG5ld19zayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zNDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDIwLVxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB0aXBjX2dldHNvY2tvcHQsXFxubmV0L3RpcGMvc29ja2V0LmM6MzQyMTpcXHQuc2VuZG1zZ1xcdD0gdGlwY19zZW5kc3RyZWFtLFxcbm5ldC90aXBjL3NvY2tldC5jLTM0MjItXFx0LnJlY3Ztc2dcXHQ9IHRpcGNfcmVjdnN0cmVhbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MTMuMjEwMjk0Mzk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NzI4NjIxMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVElQQyBTZW5kIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0aXBjX3NlbmRzdHJlYW1gIGFuZCBgdGlwY19zZW5kbXNnYC4gU29tZXRoaW5nIHN0cnVjayBtZSAtIGFyZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIExldCdzIHF1aWNrbHkgcmV2aWV3IHRoZWlyIGRlZmluaXRpb25zOiBgc3RhdGljIGludCB0aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilgIGFuZCBgc3RhdGljIGludCB0aXBjX3NlbmRzdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRzeilgLiBZZXAsIHRoZXkncmUgZGVmaW5pdGVseSBzdGF0aWMuIE5vdyB0aGF0IEkndmUgY29uZmlybWVkIHRoYXQsIGl0IG1lYW5zIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIHJpZ2h0PyBUaGV5J3JlIGludGVybmFsIHRvIHRoZSBUSVBDIGltcGxlbWVudGF0aW9uIGFuZCBhcmUgbGlrZWx5IGFzc2lnbmVkIHRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIFRodXMsIHRoZXkncmUgbm90IGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBub3cgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIHJlY2VpdmVyIHNpZGUgaXMgc2V0IHVwLiBOZXh0IEkgc2hvdWxkIGNoZWNrIGB0aXBjX3NrX3JjdmAgLSB0aGF0J3MgZGVmaW5pdGVseSBleHBvcnRlZCwgaXNuJ3QgaXQ/IEFuZCwgd2hhdCBhYm91dCBgdGlwY19ub2RlX3htaXRgPyBUaGF0J3MgbGlrZWx5IGV4cG9ydGVkLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgYW5kIHRoZSBwdWJsaWMgaW50ZXJmYWNlcyBleHBvc2VkIGJ5IFRJUEMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjIyLjE4MzE2MDExM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMjkyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19ub2RlX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JjYXN0LmM9Mjg4PXN0YXRpYyBpbnQgdGlwY19yY2FzdF94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcGt0cyxcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtMzAzLVxcdFxcdC8qIEFueSBvdGhlciByZXR1cm4gdmFsdWUgdGhhbiAtRUxJTktDT05HIGlzIGlnbm9yZWQgKi9cXG5uZXQvdGlwYy9iY2FzdC5jOjMwNDpcXHRcXHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2X3BrdHMsIGRub2RlLCBzZWxlY3RvcikgPT0gLUVMSU5LQ09ORylcXG5uZXQvdGlwYy9iY2FzdC5jLTMwNS1cXHRcXHRcXHQoKmNvbmdfbGlua19jbnQpKys7XFxuLS1cXG5uZXQvdGlwYy9jcnlwdG8uYz0yMjM4PXN0YXRpYyBpbnQgdGlwY19jcnlwdG9fa2V5X3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19hZWFkX2tleSAqc2tleSxcXG4tLVxcbm5ldC90aXBjL2NyeXB0by5jLTIyNjgtXFx0aWYgKGRub2RlKVxcbm5ldC90aXBjL2NyeXB0by5jOjIyNjk6XFx0XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZwa3RzLCBkbm9kZSwgMCk7XFxubmV0L3RpcGMvY3J5cHRvLmMtMjI3MC1cXHRlbHNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MjA2PXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTIyMS1cXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MjIyOlxcdHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMjIzLVxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xNjI3PXN0YXRpYyB2b2lkIHRpcGNfbHhjX3htaXQoc3RydWN0IG5ldCAqcGVlcl9uZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTY3OC0vKipcXG5uZXQvdGlwYy9ub2RlLmM6MTY3OTogKiB0aXBjX25vZGVfeG1pdCgpIC0gZ2VuZXJhbCBsaW5rIGxldmVsIGZ1bmN0aW9uIGZvciBtZXNzYWdlIHNlbmRpbmdcXG5uZXQvdGlwYy9ub2RlLmMtMTY4MC0gKiBAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtMTY4Ni0gKi9cXG5uZXQvdGlwYy9ub2RlLmM6MTY4NzppbnQgdGlwY19ub2RlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbm5ldC90aXBjL25vZGUuYy0xNjg4LVxcdFxcdCAgIHUzMiBkbm9kZSwgaW50IHNlbGVjdG9yKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3NTItXFxubmV0L3RpcGMvbm9kZS5jOjE3NTM6LyogdGlwY19ub2RlX3htaXRfc2tiKCk6IHNlbmQgc2luZ2xlIGJ1ZmZlciB0byBkZXN0aW5hdGlvblxcbm5ldC90aXBjL25vZGUuYy0xNzU0LSAqIEJ1ZmZlcnMgc2VudCB2aWEgdGhpcyBmdW5jdGlvbiBhcmUgZ2VuZXJhbGx5IFRJUENfU1lTVEVNX0lNUE9SVEFOQ0VcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNzU4LSAqL1xcbm5ldC90aXBjL25vZGUuYzoxNzU5OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZG5vZGUsXFxubmV0L3RpcGMvbm9kZS5jLTE3NjAtXFx0XFx0ICAgICAgIHUzMiBzZWxlY3RvcilcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xNzY1LVxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmhlYWQsIHNrYik7XFxubmV0L3RpcGMvbm9kZS5jOjE3NjY6XFx0dGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIHNlbGVjdG9yKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTc2Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xNzczPWludCB0aXBjX25vZGVfZGlzdHJfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE3ODAtXFx0XFx0ZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTtcXG5uZXQvdGlwYy9ub2RlLmM6MTc4MTpcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBzZWxlY3Rvcik7XFxubmV0L3RpcGMvbm9kZS5jLTE3ODItXFx0fVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTE3ODY9dm9pZCB0aXBjX25vZGVfYnJvYWRjYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJjX2Rlc3RzKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTE4MTMtXFx0XFx0bXNnX3NldF9kZXN0bm9kZShidWZfbXNnKHR4c2tiKSwgZHN0KTtcXG5uZXQvdGlwYy9ub2RlLmM6MTgxNDpcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCB0eHNrYiwgZHN0LCAwKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTgxNS1cXHR9XFxuLS1cXG5uZXQvdGlwYy9ub2RlLmg9OTk9aW50IHRpcGNfbm9kZV9nZXRfbGlua25hbWUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgbm9kZSxcXG5uZXQvdGlwYy9ub2RlLmgtMTAwLVxcdFxcdFxcdCAgIGNoYXIgKmxpbmtuYW1lLCBzaXplX3QgbGVuKTtcXG5uZXQvdGlwYy9ub2RlLmg6MTAxOmludCB0aXBjX25vZGVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHUzMiBkbm9kZSxcXG5uZXQvdGlwYy9ub2RlLmgtMTAyLVxcdFxcdCAgIGludCBzZWxlY3Rvcik7XFxubmV0L3RpcGMvbm9kZS5oPTEwMz1pbnQgdGlwY19ub2RlX2Rpc3RyX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTtcXG5uZXQvdGlwYy9ub2RlLmg6MTA0OmludCB0aXBjX25vZGVfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGVzdCxcXG5uZXQvdGlwYy9ub2RlLmgtMTA1LVxcdFxcdCAgICAgICB1MzIgc2VsZWN0b3IpO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9Mjg2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVzcG9uZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTctXFx0c2VsZWN0b3IgPSBtc2dfb3JpZ3BvcnQoYnVmX21zZyhza2IpKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTg6XFx0dGlwY19ub2RlX3htaXRfc2tiKHNvY2tfbmV0KHNrKSwgc2tiLCBkbm9kZSwgc2VsZWN0b3IpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI5OS19XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz01NTA9c3RhdGljIHZvaWQgX190aXBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBlcnJvcilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTU5Ny1cXHRcXHRpZiAoc2tiKVxcbm5ldC90aXBjL3NvY2tldC5jOjU5ODpcXHRcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCB0c2stXFx1MDAzZXBvcnRpZCk7XFxubmV0L3RpcGMvc29ja2V0LmMtNTk5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9OTA2PXN0YXRpYyBpbnQgdGlwY19zZW5kX2dyb3VwX21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3NvY2sgKnRzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTkzMS1cXHQvKiBTZW5kIG1lc3NhZ2UgKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzo5MzI6XFx0cmMgPSB0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZwa3RzLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTkzMy1cXHRpZiAodW5saWtlbHkocmMgPT0gLUVMSU5LQ09ORykpIHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTEyNzI9c3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTEzMjAtXFxubmV0L3RpcGMvc29ja2V0LmM6MTMyMTpcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTEzMjItXFx0aWYgKHJjID09IC1FTElOS0NPTkcpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xNDE3PXN0YXRpYyBpbnQgX190aXBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTIyLVxcdHRyYWNlX3RpcGNfc2tfc2VuZG1zZyhzaywgc2tiX3BlZWsoXFx1MDAyNnBrdHMpLCBUSVBDX0RVTVBfU0tfU05EUSwgXFxcIiBcXFwiKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoxNTIzOlxcdHJjID0gdGlwY19ub2RlX3htaXQobmV0LCBcXHUwMDI2cGt0cywgc2thZGRyLm5vZGUsIHRzay1cXHUwMDNlcG9ydGlkKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0xNTI0LVxcdGlmICh1bmxpa2VseShyYyA9PSAtRUxJTktDT05HKSkge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MTU2ND1zdGF0aWMgaW50IF9fdGlwY19zZW5kc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTYzMy1cXHRcXHRcXHRcXHRcXHQgVElQQ19EVU1QX1NLX1NORFEsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmM6MTYzNDpcXHRcXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTE2MzUtXFx0XFx0aWYgKHVubGlrZWx5KHJjID09IC1FTElOS0NPTkcpKSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0xODI4PXN0YXRpYyB2b2lkIHRpcGNfc2tfc2VuZF9hY2soc3RydWN0IHRpcGNfc29jayAqdHNrKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMTgzNS1cXG5uZXQvdGlwYy9zb2NrZXQuYzoxODM2OlxcdHRpcGNfbm9kZV94bWl0X3NrYihzb2NrX25ldChcXHUwMDI2dHNrLVxcdTAwM2VzayksIHNrYiwgdHNrX3BlZXJfbm9kZSh0c2spLFxcbm5ldC90aXBjL3NvY2tldC5jLTE4MzctXFx0XFx0XFx0ICAgbXNnX2xpbmtfc2VsZWN0b3IoYnVmX21zZyhza2IpKSk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yNDkyPXZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNTMzLVxcdFxcdGRub2RlID0gbXNnX2Rlc3Rub2RlKGJ1Zl9tc2coc2tiKSk7XFxubmV0L3RpcGMvc29ja2V0LmM6MjUzNDpcXHRcXHR0aXBjX25vZGVfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCBkcG9ydCk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjUzNS1cXHR9XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yODc3PXN0YXRpYyB2b2lkIHRpcGNfc2tfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5MDMtXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmxpc3QpKVxcbm5ldC90aXBjL3NvY2tldC5jOjI5MDQ6XFx0XFx0cmMgPSB0aXBjX25vZGVfeG1pdChzb2NrX25ldChzayksIFxcdTAwMjZsaXN0LCBwbm9kZSwgdHNrLVxcdTAwM2Vwb3J0aWQpO1xcbm5ldC90aXBjL3NvY2tldC5jLTI5MDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjIyLjIyOTQ5NzcxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTY0MTY3MDM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgUGF0Y2ggZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0aXBjX25vZGVfeG1pdGAgYW5kIGB0aXBjX25vZGVfeG1pdF9za2JgIHNlZW0gbGlrZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBidXQgYHRpcGNfc2tfcmN2YCBpcyBhbHNvIGV4cG9ydGVkLCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRyaWd1aW5nLiBNeSBmb2N1cyBoZXJlIGlzIG9uIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIHBhdGNoLCBhbmQgZXhwb3NlZCBmb3IgZnV6emluZy5cblxuSSB3YXMgaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGB0aXBjX3NlbmRtc2dgIGFuZCBgdGlwY19zZW5kc3RyZWFtYCBhcyBnb29kIGNhbmRpZGF0ZXMgc2luY2UgdGhlc2UgYXJlIHVzZXItc3BhY2UgZW50cnkgcG9pbnRzLiBJIHRoZW4gcmVhbGl6ZWQgdGhleSdyZSBzdGF0aWMuIEEgcXVpY2sgY2hlY2sgY29uZmlybWVkIHRoYXQgdGhleSBhcmUgbm90IGlubGluZWQuIFRoaXMgbWFrZXMgdGhlbSBnb29kIGZvY3VzIHN5bWJvbHMuIFRoZXkgYXJlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AsIHNvIEknbSBjb25maWRlbnQgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkhvd2V2ZXIsIHRoZSByZWFsIGNoYW5nZSBpcyBpbiBgdGlwY19za19wdXNoX2JhY2tsb2dgLiBJdCBsb29rcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbiBsaWVzLiBJdCdzIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzOiBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0YCwgYW5kIGBfX3RpcGNfc2h1dGRvd25gLiBDcml0aWNhbGx5LCBhbGwgdGhlc2UgY2FsbGVycyBhcmUgb24gdGhlIHJlY2VpdmUgcGF0aCBvciBzaHV0ZG93biBwYXRoLiBUaGlzIHN1Z2dlc3RzIHRoYXQgd2hpbGUgYHRpcGNfc2VuZG1zZ2AgYW5kIGB0aXBjX3NlbmRzdHJlYW1gIGFyZSBmb3IgdGhlIHNlbmQgcGF0aC4gYHRpcGNfc2tfcmN2YCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHJlY2VpdmUgcGF0aC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFib3V0IGhvdyB0aGUgdHJhbnNtaXQgcXVldWUgaXMgaGFuZGxlZCBpbiBsb2NhbCBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHNhbWUgbm9kZS4gSXQgb3B0aW1pemVzIGxvY2FsIGNvbW11bmljYXRpb24uIFRoZSBjaGFuZ2UgaW52b2x2ZXMgYHhtaXRxYCwgd2hpY2ggaXMgdGhlbiBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlciBpbiB0aGUgcmVjZWl2aW5nIHBhdGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBwYWNrZXRzIGFyZSBxdWV1ZWQgYW5kIHRyYW5zbWl0dGVkIGxvY2FsbHksIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGhhcyBiZWVuIHJlZmluZWQgdG86XG5cbiogICBgdGlwY19za19yY3ZgIChwcmltYXJ5KVxuKiAgIGB0aXBjX3NlbmRzdHJlYW1gXG5cbldoaWxlIGB0aXBjX3NlbmRtc2dgIGlzIHN0YXRpYywgaXQncyBhc3NpZ25lZCB0byBgcHJvdG9fb3BzYCB3aGljaCBtZWFucyBpdCdzIG5vdCBpbmxpbmVkIGFuZCBoZW5jZSBhIGdvb2QgZm9jdXMgc3ltYm9sLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gYmUgc3VyZS4gSSBjYW4gY29uZmlybSwgYF9fdGlwY19zaHV0ZG93bmAgY2FsbHMgaXQgd2l0aCBgeG1pdHEgPSBOVUxMYCwgYW5kIHRoZSBvdGhlcnMgY2FsbCBpdCB3aXRoIGFuIGB4bWl0cWAuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSByZWNlaXZlIHBhdGggaXMgbXkgbWFpbiBmb2N1cywgcGFydGljdWxhcmx5IGB0aXBjX3NrX3JjdmAuIFNpbmNlIGB0aXBjX3NlbmRzdHJlYW1gIGlzIGludm9sdmVkLCBJIHNob3VsZCB1c2UgdGhhdCBhcyB3ZWxsLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGJhY2tsb2cgZ2VuZXJhdGlvbiBpcyB0cmlnZ2VyZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24sIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgdGhlIGJlc3QgcGF0aCB0byByZWFjaCB0aGUgbW9kaWZpZWQgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRpcGNfc2VuZHN0cmVhbWAgYW5kIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0uIGB0aXBjX3NlbmRzdHJlYW1gIHF1ZXVlcyBwYWNrZXRzLiBgdGlwY19za19wdXNoX2JhY2tsb2dgIGlzIGNhbGxlZCB3aGVuIGFuIEFDSyBpcyByZWNlaXZlZCBvciB3aGVuIHRoZSBzb2NrZXQgaXMgc2h1dCBkb3duLlxuXG5UaGVyZWZvcmUsIGB0aXBjX3NrX3JjdmAgYmVjb21lcyB0aGUgbWFpbiBmb2N1cyBzeW1ib2wuIEFkZGl0aW9uYWxseSwgYHRpcGNfc2VuZHN0cmVhbWAgaXMgYWxzbyBhIGdvb2Qgc3ltYm9sIHRvIGdlbmVyYXRlIGJhY2tsb2cuIEkgd2lsbCBub3cgZXhhbWluZSBgdGlwY19za19yY3ZgIGluIGBuZXQvdGlwYy9zb2NrZXQuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6MzMuODcxMTcwMzg3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY1NTc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHRpcGNfc2tfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL3NvY2tldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL3NvY2tldC5jPTI0Mzg9c3RhdGljIHZvaWQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5MS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyNDkyOnZvaWQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpXFxubmV0L3RpcGMvc29ja2V0LmMtMjQ5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjQ5OjMzLjk2NzgzMTQ4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI1MjY2OTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVElQQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYHRpcGNfc2tfcmN2YCBpcyBub24tc3RhdGljIOKAkyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24gd2Ugc2hvdWxkIGJlIHBheWluZyBhdHRlbnRpb24gdG8uIGB0aXBjX3NlbmRzdHJlYW1gIGFuZCBgdGlwY19zZW5kbXNnYCBhcmUgYm90aCBzdGF0aWMgYnV0ICpub3QqIGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gcmVsZXZhbnQsIGJ1dCBwZXJoYXBzIGxlc3MgY3JpdGljYWwgdGhhbiBgdGlwY19za19yY3ZgLiBBbHRob3VnaCBgdGlwY19yZWxlYXNlYCBhbmQgYHRpcGNfc2h1dGRvd25gIGFyZSBhbHNvIHN0YXRpYyBhbmQgbm9uLWlubGluZWQsIEknbSBnb2luZyB0byBzZXQgdGhlbSBhc2lkZSBmb3Igbm93LCBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucy4gU28sIEkgd2lsbCBmb2N1cyBvbiBgdGlwY19za19yY3ZgLCBhbmQgYHRpcGNfc2VuZHN0cmVhbWAsIGFuZCBjb25zaWRlciBgdGlwY19zZW5kbXNnYC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBUSVBDYCBjb25maWcgYWdhaW4uIEl0J3MgdHJpc3RhdGUuIFNvLCBgVElQQ2AgaXMgdGhlIG1haW4gdGhpbmcgdG8gd29ycnkgYWJvdXQgY29uZmlnLXdpc2UuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLi4uIEFoLCBoZXJlIHdlIGdvLiBUaGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgZnVuY3Rpb24uIEl0J3MgZXNzZW50aWFsbHkgb3B0aW1pemluZyBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCB3aGVuIGRlc3RpbmVkIGZvciB0aGUgbG9jYWwgbm9kZS4gSWYgYW4gYHhtaXRxYCBpcyBwcm92aWRlZCBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIGxvY2FsLCB0aGUgY29kZSBub3cgKnNwbGljZXMqIHRoZSB0cmFuc21pdCBxdWV1ZSB0byB0aGUgYHhtaXRxYCBkaXJlY3RseS4gVGhpcyBhdm9pZHMgYSBjYWxsIHRvIGB0aXBjX25vZGVfeG1pdGAgaW4gdGhhdCBzY2VuYXJpby4gRnJvbSBhIG5ldHdvcmtpbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkaXN0aW5jdCBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgVElQQyBoYW5kbGVzIHRoZSBzb2NrZXQgYmFja2xvZy5cblxuU28sIGhvdyBjYW4gd2UgdHJpZ2dlciB0aGlzPyBJIGNhbiBjcmVhdGUgYSBUSVBDIHNvY2tldCwgc2VuZCBzb21lIGRhdGEgdG8gYSBsb2NhbCBub2RlICh3aGljaCB3aWxsIHF1ZXVlIGl0IGlmIE5hZ2xlIGlzIG9uIG9yIHRoZSBsaW5rIGlzIGNvbmdlc3RlZCksIGFuZCB0aGVuIHRyaWdnZXIgYW4gQUNLIG9yIHNodXQgZG93biB0aGUgc29ja2V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBnb29kIGNvdmVyYWdlLlxuXG5UaGVyZWZvcmUsIGZvciBmdXp6aW5nLCBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIFwiV29ydGhGdXp6aW5nXCIgYW5kIHRoZSBcIkZvY3VzU3ltYm9sc1wiIHNob3VsZCBiZSBgdGlwY19za19yY3ZgLCBgdGlwY19zZW5kc3RyZWFtYCwgYW5kIGB0aXBjX3NlbmRtc2dgLiBJIHdpbGwgYWxzbyBcIkVuYWJsZUNvbmZpZ3NcIiBmb3IgYFRJUENgLiBUaGUgY29yZSBcIlJlYXNvbmluZ1wiIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyB0aGUgYmFja2xvZyBwcm9jZXNzaW5nLCBzcGxpY2luZyB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgdG8gYHhtaXRxYCBmb3IgbG9jYWwgZGVzdGluYXRpb25zLCBhdm9pZGluZyBgdGlwY19ub2RlX3htaXRgLCBhbmQgdGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA2NywiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMjIwNTA0MDEyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNTc2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX3NrX3JjdlwiLFxuICAgIFwidGlwY19zZW5kc3RyZWFtXCIsXG4gICAgXCJ0aXBjX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzb2NrZXQgYmFja2xvZyBwcm9jZXNzaW5nIHRvIHNwbGljZSB0aGUgdHJhbnNtaXQgcXVldWUgZGlyZWN0bHkgdG8gdGhlIHByb3ZpZGVkIHhtaXRxIGZvciBsb2NhbCBkZXN0aW5hdGlvbnMsIGF2b2lkaW5nIGEgY2FsbCB0byB0aXBjX25vZGVfeG1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUSVBDIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBBUEkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfc2tfcmN2XCIsXG4gICAgXCJ0aXBjX3NlbmRzdHJlYW1cIixcbiAgICBcInRpcGNfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHNvY2tldCBiYWNrbG9nIHByb2Nlc3NpbmcgdG8gc3BsaWNlIHRoZSB0cmFuc21pdCBxdWV1ZSBkaXJlY3RseSB0byB0aGUgcHJvdmlkZWQgeG1pdHEgZm9yIGxvY2FsIGRlc3RpbmF0aW9ucywgYXZvaWRpbmcgYSBjYWxsIHRvIHRpcGNfbm9kZV94bWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRJUEMgbmV0d29ya2luZyBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IEFQSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMjk5ODY4ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzg0Mzc0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMzAwNDIyMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjIzODM4MTcxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTNkODYyOGEwODg3YzhmNzA1NmNmMjQwM2IzMjZiMTc1ZjE5NDZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMDo0ODoxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmNcbmluZGV4IGU1NjQzNDFlMDIxNmQuLjE2ZDg0NGZjOGNhNTcgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xuKysrIGIvbmV0L3RpcGMvc29ja2V0LmNcbkBAIC0xNTYsNyArMTU2LDggQEAgc3RhdGljIGludCB0aXBjX3NrX2luc2VydChzdHJ1Y3QgdGlwY19zb2NrICp0c2spO1xuIHN0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7XG4gc3RhdGljIGludCBfX3RpcGNfc2VuZHN0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KTtcbiBzdGF0aWMgaW50IF9fdGlwY19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBkc3opO1xuLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2spO1xuK3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpO1xuIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHM7XG5AQCAtNTYwLDcgKzU2MSw3IEBAIHN0YXRpYyB2b2lkIF9fdGlwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZXJyb3IpXG4gXHRcdFx0XHRcdCAgICAhdHNrX2Nvbm5fY29uZyh0c2spKSk7XG4gXG4gXHQvKiBQdXNoIG91dCBkZWxheWVkIG1lc3NhZ2VzIGlmIGluIE5hZ2xlIG1vZGUgKi9cbi1cdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UpO1xuK1x0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgTlVMTCk7XG4gXHQvKiBSZW1vdmUgcGVuZGluZyBTWU4gKi9cbiBcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX3dyaXRlX3F1ZXVlKTtcbiBcbkBAIC0xMjY4LDcgKzEyNjksOCBAQCB2b2lkIHRpcGNfc2tfbWNhc3RfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsXG4gLyogdGlwY19za19wdXNoX2JhY2tsb2coKTogc2VuZCBhY2N1bXVsYXRlZCBidWZmZXJzIGluIHNvY2tldCB3cml0ZSBxdWV1ZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gc29ja2V0IGlzIGluIE5hZ2xlIG1vZGVcbiAgKi9cbi1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1c2hfYmFja2xvZyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIGJvb2wgbmFnbGVfYWNrKVxuK3N0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqdHhxID0gXHUwMDI2dHNrLVx1MDAzZXNrLnNrX3dyaXRlX3F1ZXVlO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwodHhxKTtcbkBAIC0xMzEwLDYgKzEzMTIsMTIgQEAgc3RhdGljIHZvaWQgdGlwY19za19wdXNoX2JhY2tsb2coc3RydWN0IHRpcGNfc29jayAqdHNrLCBib29sIG5hZ2xlX2FjaylcbiBcdFx0dHNrLVx1MDAzZXBrdF9jbnQgKz0gc2tiX3F1ZXVlX2xlbih0eHEpO1xuIFx0dHNrLVx1MDAzZXNudF91bmFja2VkICs9IHRzay1cdTAwM2VzbmRfYmFja2xvZztcbiBcdHRzay1cdTAwM2VzbmRfYmFja2xvZyA9IDA7XG4rXG4rXHRpZiAoeG1pdHEgXHUwMDI2XHUwMDI2IGluX293bl9ub2RlKG5ldCwgZG5vZGUpKSB7XG4rXHRcdHNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KHR4cSwgeG1pdHEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRyYyA9IHRpcGNfbm9kZV94bWl0KG5ldCwgdHhxLCBkbm9kZSwgdHNrLVx1MDAzZXBvcnRpZCk7XG4gXHRpZiAocmMgPT0gLUVMSU5LQ09ORylcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQgPSAxO1xuQEAgLTEzNjcsNyArMTM3NSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2tfY29ubl9wcm90b19yY3Yoc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGdvdG8gZXhpdDtcbiBcbiBcdFx0d2FzX2NvbmcgPSB0c2tfY29ubl9jb25nKHRzayk7XG4tXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgbXNnX25hZ2xlX2FjayhoZHIpKTtcbitcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBtc2dfbmFnbGVfYWNrKGhkciksIHhtaXRxKTtcbiBcdFx0dHNrLVx1MDAzZXNudF91bmFja2VkIC09IG1zZ19jb25uX2FjayhoZHIpO1xuIFx0XHRpZiAodHNrLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19CTE9DS19GTE9XQ1RMKVxuIFx0XHRcdHRzay1cdTAwM2VzbmRfd2luID0gbXNnX2Fkdl93aW4oaGRyKTtcbkBAIC0yMTY1LDcgKzIxNzMsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHNtcF93bWIoKTtcbiBcdFx0dHNrLVx1MDAzZWNvbmdfbGlua19jbnQtLTtcbiBcdFx0d2FrZXVwID0gdHJ1ZTtcbi1cdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHRcdHRpcGNfc2tfcHVzaF9iYWNrbG9nKHRzaywgZmFsc2UsIHhtaXRxKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEdST1VQX1BST1RPQ09MOlxuIFx0XHR0aXBjX2dyb3VwX3Byb3RvX3JjdihncnAsIFx1MDAyNndha2V1cCwgaGRyLCBpbnB1dHEsIHhtaXRxKTtcbkBAIC0yMjU2LDcgKzIyNjQsNyBAQCBzdGF0aWMgYm9vbCB0aXBjX3NrX2ZpbHRlcl9jb25uZWN0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBUSVBDX0VTVEFCTElTSEVEOlxuIFx0XHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSkpXG4tXHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSk7XG4rXHRcdFx0dGlwY19za19wdXNoX2JhY2tsb2codHNrLCBmYWxzZSwgeG1pdHEpO1xuIFx0XHQvKiBBY2NlcHQgb25seSBjb25uZWN0aW9uLWJhc2VkIG1lc3NhZ2VzIHNlbnQgYnkgcGVlciAqL1xuIFx0XHRpZiAobGlrZWx5KGNvbl9tc2cgXHUwMDI2XHUwMDI2ICFlcnIgXHUwMDI2XHUwMDI2IHBwb3J0ID09IG9wb3J0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIHBub2RlID09IG9ub2RlKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NDQuMzAwNDI0ODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxMzc2MzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgU29ja2V0IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCBpbiBgbmV0L3RpcGMvc29ja2V0LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp4bWl0cWAgYXMgYW4gYXJndW1lbnQuIEkgc2VlIGl0J3MgY29uZGl0aW9uYWxseSBxdWV1ZWluZyBTS0JzIHRvIGB4bWl0cWAgKmluc3RlYWQqIG9mIGltbWVkaWF0ZWx5IHRyYW5zbWl0dGluZyB0aGVtIHdpdGggYHRpcGNfbm9kZV94bWl0YCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gVGhhdCdzIGludGVyZXN0aW5nLCBlc3NlbnRpYWxseSBkZWZlcnJpbmcgdGhlIHRyYW5zbWlzc2lvbiBmb3IgbG9jYWwgdHJhZmZpYy5cblxuVGhlIGNvZGUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXTigJlzIGEgbG9naWMgY2hhbmdlLCBlc3NlbnRpYWxseSBhIHF1ZXVlIG1hbmFnZW1lbnQgcmVmYWN0b3IuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdCBtZW1iZXJzLCBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCByZWFkcy4gSXQncyBqdXN0IG1vdmluZyBTS0JzIGFyb3VuZCwgc28gdGhlIHR5cGljYWwgYnVncyBJ4oCZZCBiZSB3b3JyaWVkIGFib3V0IGhlcmUgYXJlIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoYW5rZnVsbHksIEtBU0FOIHNob3VsZCBiZSB3ZWxsLWVxdWlwcGVkIHRvIGNhdGNoIHRob3NlLiBUaGVyZSdzIG5vIG9idmlvdXMgdmVjdG9yIGZvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gYSBicmFuY2hpbmcgY29uZGl0aW9uLiBJIGFtIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyBzdWNoIGlzc3VlcyBiZWNhdXNlIHRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHhtaXRxYC4gSSBzZWUgaXQncyBwYXNzZWQgZG93biBmcm9tIGNhbGxlcnMgbGlrZSBgdGlwY19za19jb25uX3Byb3RvX3JjdmAsIGB0aXBjX3NrX3Byb3RvX3JjdmAsIGFuZCBgdGlwY19za19maWx0ZXJfY29ubmVjdGAuIFRoZXNlIGZ1bmN0aW9ucyByZWNlaXZlIGB4bWl0cWAgYXMgYW4gYXJndW1lbnQsIHNvIGl0cyB1c2UgaXMgY29uc2lzdGVudCB0aHJvdWdob3V0LiBOb3csIGB0aXBjX3NrX3JjdmAsIGlzIGEgbGlrZWx5IGluaXRpYWxpemF0aW9uIHNpdGUsIGFuZCBJIHNob3VsZCBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gaXNzdWUgd2l0aCBpdC4gSG9uZXN0bHksIGV2ZW4gaWYgYHhtaXRxYCB3ZXJlIHVuaW5pdGlhbGl6ZWQsIGl0J3MganVzdCBhIHBvaW50ZXIsIGFuZCBpdHMgdXNhZ2Ugd291bGQgYmUgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgcG9pbnRlciBidWcgdGhhdCBLTVNBTiBzaG91bGQgY2F0Y2guIEhvd2V2ZXIsIEkgc2hvdWxkIGNoZWNrLCBmb3IgY29tcGxldGVuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NTIuMjE0MTkwMTg5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1NjQwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19za19jb25uX3Byb3RvX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0xMjcyPXN0YXRpYyB2b2lkIHRpcGNfc2tfcHVzaF9iYWNrbG9nKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgYm9vbCBuYWdsZV9hY2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzI2LS8qKlxcbm5ldC90aXBjL3NvY2tldC5jOjEzMjc6ICogdGlwY19za19jb25uX3Byb3RvX3JjdiAtIHJlY2VpdmUgYSBjb25uZWN0aW9uIG1uZyBwcm90b2NvbCBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMTMyOC0gKiBAdHNrOiByZWNlaXZpbmcgc29ja2V0XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0xMzMyLSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjEzMzM6c3RhdGljIHZvaWQgdGlwY19za19jb25uX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMTMzNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yMTU2PXN0YXRpYyB2b2lkIHRpcGNfc2tfcHJvdG9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIxNjctXFx0Y2FzZSBDT05OX01BTkFHRVI6XFxubmV0L3RpcGMvc29ja2V0LmM6MjE2ODpcXHRcXHR0aXBjX3NrX2Nvbm5fcHJvdG9fcmN2KHRzaywgc2tiLCBpbnB1dHEsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTY5LVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NTIuMzU5NzYzMTg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDYzMTY5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGB0aXBjX3NrX3Byb3RvX3JjdmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY2FsbGVycyBvZiBgdGlwY19za19wcm90b19yY3ZgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXItUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBmcmFtZXdvcmssIHNvIHVuZGVyc3RhbmRpbmcgd2hvJ3MgY2FsbGluZyBpdCBpcyBlc3NlbnRpYWwgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IHBhdGhzIHRoYXQgZGF0YSBjYW4gdGFrZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBrZXJuZWwncyBzb3VyY2UgY29kZSwgcG9zc2libHkgdXNpbmcgdG9vbHMgbGlrZSBgY3Njb3BlYCwgYGdkYmAsIG9yIHNpbXBseSBhIGdyZXAgc2VhcmNoIGFjcm9zcyB0aGUgcmVsZXZhbnQgZmlsZXMuIEknbSBhaW1pbmcgdG8gaWRlbnRpZnkgdGhlIGltbWVkaWF0ZSBmdW5jdGlvbnMgY2FsbGluZyBgdGlwY19za19wcm90b19yY3ZgLCBhbmQgZnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgd2lkZXIgY29udGV4dCB3aXRoaW4gdGhlIFRJUEMgc3Vic3lzdGVtLiBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0cmlnZ2VyZWQgdGhlIGludmVzdGlnYXRpb24sIGFuZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbm5lY3Rpb25zIHRvIGtub3duIGFyZWFzIG9mIGludGVyZXN0IG9yIHBvdGVudGlhbCBwcm9ibGVtIHBvaW50cywgb3IgbWF5YmUganVzdCB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6NDk6NTYuNTY2MDgzMzI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzE5MTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX3NrX3Byb3RvX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz00MDM9c3RhdGljIGludCB0aXBjX3NrX3NvY2tfZXJyKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvdXQpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy00MzEtXFx0d2hpbGUgKChyY18gPSAhKGNvbmRpdGlvbl8pKSkge1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxubmV0L3RpcGMvc29ja2V0LmM6NDMyOlxcdFxcdC8qIGNvdXBsZWQgd2l0aCBzbXBfd21iKCkgaW4gdGlwY19za19wcm90b19yY3YoKSAqLyAgICAgICAgICAgIFxcXFxcXG5uZXQvdGlwYy9zb2NrZXQuYy00MzMtXFx0XFx0c21wX3JtYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjE1MT1zdGF0aWMgdm9pZCB0aXBjX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjE1NS1cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMTU2OnN0YXRpYyB2b2lkIHRpcGNfc2tfcHJvdG9fcmN2KHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMTU3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTIzNDY9c3RhdGljIHZvaWQgdGlwY19za19maWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzNjMtXFx0aWYgKHVubGlrZWx5KCFtc2dfaXNkYXRhKGhkcikpKVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNjQ6XFx0XFx0dGlwY19za19wcm90b19yY3Yoc2ssIFxcdTAwMjZpbnB1dHEsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTo1Ni42MjMyODEzNzVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMTc4NjEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGlwY19za19maWx0ZXJfcmN2YCBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdGlwY19za19maWx0ZXJfcmN2YCBjYWxsZXJzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBUaGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBpZWNlIGluIHRoZSBUaXBjIHNvY2tldCBmaWx0ZXJpbmcgcHJvY2VzcywgYW5kIHVuZGVyc3RhbmRpbmcgd2hvJ3MgY2FsbGluZyBpdCBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIG92ZXJ2aWV3LiBJIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFjZSBob3cgbWVzc2FnZXMgYXJlIGdldHRpbmcgaGFuZGxlZCwgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBldmVuIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc3RhcnQgdGhlIGRlZXAgZGl2ZSBpbnRvIHRob3NlIGNhbGwgc3RhY2tzIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVuZXhwZWN0ZWQgb3IgaW5lZmZpY2llbnQgdXNhZ2UgcGF0dGVybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTo1OS41NDUwNjk3MDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzcxNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfc2tfZmlsdGVyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz0yMzE4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2YnVmX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTIzMzUtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6MjMzNjogKiB0aXBjX3NrX2ZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlXFxubmV0L3RpcGMvc29ja2V0LmMtMjMzNy0gKiBAc2s6IHNvY2tldFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0NS0gKi9cXG5uZXQvdGlwYy9zb2NrZXQuYzoyMzQ2OnN0YXRpYyB2b2lkIHRpcGNfc2tfZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvc29ja2V0LmMtMjM0Ny1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yMzU3LVxcbm5ldC90aXBjL3NvY2tldC5jOjIzNTg6XFx0dHJhY2VfdGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIFRJUENfRFVNUF9BTEwsIFxcXCIgXFxcIik7XFxubmV0L3RpcGMvc29ja2V0LmMtMjM1OS1cXHRUSVBDX1NLQl9DQihza2IpLVxcdTAwM2VieXRlc19yZWFkID0gMDtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI0MTE9c3RhdGljIGludCB0aXBjX3NrX2JhY2tsb2dfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI0MTgtXFxubmV0L3RpcGMvc29ja2V0LmM6MjQxOTpcXHR0aXBjX3NrX2ZpbHRlcl9yY3Yoc2ssIHNrYiwgXFx1MDAyNnhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDIwLVxcdGFkZGVkID0gc2tfcm1lbV9hbGxvY19nZXQoc2spIC0gYmVmb3JlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MjQzOD1zdGF0aWMgdm9pZCB0aXBjX3NrX2VucXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU2LVxcdFxcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI0NTc6XFx0XFx0XFx0dGlwY19za19maWx0ZXJfcmN2KHNrLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yNDU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo0OTo1OS41ODc4NDcyOTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA5NjM3MTc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0aXBjX3NrX2JhY2tsb2dfcmN2YCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHRpcGNfc2tfYmFja2xvZ19yY3ZgIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgcGF0Y2ggaW1wYWN0cyBpdC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYHhtaXRxYCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgdXNpbmcgYF9fc2tiX3F1ZXVlX2hlYWRfaW5pdGAuIE5vIHdvcnJpZXMgdGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgb3B0aW1pemluZyBob3cgU0tCcyBhcmUgc2VudCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyB0aGUgbG9jYWwgbm9kZS4gSW5zdGVhZCBvZiB0aGUgZGlyZWN0IGNhbGwgdG8gYHRpcGNfbm9kZV94bWl0YCwgaXQncyBub3cgc3BsaWNpbmcgdG8gYHhtaXRxYC4gVGhpcyBpcyBjbGFzc2ljOyB0aGlzIGlzIGFsbCBhYm91dCBhdm9pZGluZyBwb3RlbnRpYWwgbG9ja2luZyBwcm9ibGVtcyBvciByZWVudHJhbmN5IGlzc3VlcyBieSBiYXRjaGluZyB0aGUgdHJhbnNtaXNzaW9ucywgb3IgcG9zc2libHkgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHdpdGggc29tZSBraW5kIG9mIGxvY2FsIG9wdGltaXphdGlvbi5cblxuRnJvbSBhIG1lbW9yeSBwZXJzcGVjdGl2ZSwgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyB3aXRoIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgbWFuaXB1bGF0aW5nIHF1ZXVlIG1hbmFnZW1lbnQsIHdoaWNoIEtBU0FOLCB3aXRoIGl0cyBzdXBlcmIgY292ZXJhZ2UsIHdpbGwgaGFuZGxlIHBlcmZlY3RseS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGlzbid0IGEgS01TQU4tcmVsZXZhbnQgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzc0LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDo1MDowNi42ODQyMjEzM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRpcGNfc2tfcHVzaF9iYWNrbG9nYCB0byBvcHRpb25hbGx5IHNwbGljZSB0aGUgc29ja2V0J3Mgd3JpdGUgcXVldWUgaW50byBhIHByb3ZpZGVkIGB4bWl0cWAgaW5zdGVhZCBvZiB0cmFuc21pdHRpbmcgdGhlIGJ1ZmZlcnMgZGlyZWN0bHkgdmlhIGB0aXBjX25vZGVfeG1pdGAgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIGxvY2FsIG5vZGUuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50IGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGZsb3cuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgZmllbGRzLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9uIHRoZSBza2IgcXVldWVzKSB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0aXBjX3NrX3B1c2hfYmFja2xvZ2AgdG8gb3B0aW9uYWxseSBzcGxpY2UgdGhlIHNvY2tldCdzIHdyaXRlIHF1ZXVlIGludG8gYSBwcm92aWRlZCBgeG1pdHFgIGluc3RlYWQgb2YgdHJhbnNtaXR0aW5nIHRoZSBidWZmZXJzIGRpcmVjdGx5IHZpYSBgdGlwY19ub2RlX3htaXRgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBsb2NhbCBub2RlLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBmbG93LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGZpZWxkcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvbiB0aGUgc2tiIHF1ZXVlcykgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowwbn7v[1] Phase: Succeeded StartedAt: 2026-08-07 10:50:19 +0000 UTC FinishedAt: 2026-08-07 10:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 10:50:19 +0000 UTC FinishedAt: 2026-08-07 10:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2] Phase: Succeeded StartedAt: 2026-08-07 10:50:19 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 10:50:19 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 10:50:19 +0000 UTC FinishedAt: 2026-08-07 10:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 10:50:19 +0000 UTC FinishedAt: 2026-08-07 10:50:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowwbn7v/series-workflowwbn7v-convert-artifact-1907250229/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 10:50:29 +0000 UTC FinishedAt: 2026-08-07 11:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 10:50:29 +0000 UTC FinishedAt: 2026-08-07 11:09:40 +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:*1f763ff1-4fe1-4e5d-bf28-2ffc9b23c9db,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-workflowwbn7v/series-workflowwbn7v-convert-artifact-1907250229/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": "5aa79bdb-462b-4d0b-931a-e64a1e687e4c", "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-workflowwbn7v/series-workflowwbn7v-build-action-3340505115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 10:50:29 +0000 UTC FinishedAt: 2026-08-07 11:09:30 +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:*1f763ff1-4fe1-4e5d-bf28-2ffc9b23c9db,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-workflowwbn7v/series-workflowwbn7v-convert-artifact-1907250229/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": "5aa79bdb-462b-4d0b-931a-e64a1e687e4c", "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-workflowwbn7v/series-workflowwbn7v-build-action-3340505115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 11:09:40 +0000 UTC FinishedAt: 2026-08-07 11:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 11:09:40 +0000 UTC FinishedAt: 2026-08-07 11:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 11:09:40 +0000 UTC FinishedAt: 2026-08-07 11:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 11:09:40 +0000 UTC FinishedAt: 2026-08-07 11:09:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowwbn7v/series-workflowwbn7v-convert-artifact-3191603600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 11:09:51 +0000 UTC FinishedAt: 2026-08-07 11:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 11:09:51 +0000 UTC FinishedAt: 2026-08-07 11:11:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5aa79bdb-462b-4d0b-931a-e64a1e687e4c,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-workflowwbn7v/series-workflowwbn7v-build-action-3340505115/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-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 11:11:57 +0000 UTC FinishedAt: 2026-08-07 11:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 11:11:57 +0000 UTC FinishedAt: 2026-08-07 11:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 11:11:57 +0000 UTC FinishedAt: 2026-08-07 11:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 11:11:57 +0000 UTC FinishedAt: 2026-08-07 11:28:16 +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:*1f763ff1-4fe1-4e5d-bf28-2ffc9b23c9db,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-workflowwbn7v/series-workflowwbn7v-convert-artifact-3191603600/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": "0b7c10bc-8ca9-4686-947d-9102ad02a20e", "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-workflowwbn7v/series-workflowwbn7v-build-action-3502374412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 11:11:57 +0000 UTC FinishedAt: 2026-08-07 11:28:06 +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:*1f763ff1-4fe1-4e5d-bf28-2ffc9b23c9db,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-workflowwbn7v/series-workflowwbn7v-convert-artifact-3191603600/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": "0b7c10bc-8ca9-4686-947d-9102ad02a20e", "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-workflowwbn7v/series-workflowwbn7v-build-action-3502374412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 11:28:16 +0000 UTC FinishedAt: 2026-08-07 11:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 11:28:16 +0000 UTC FinishedAt: 2026-08-07 11:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 11:28:16 +0000 UTC FinishedAt: 2026-08-07 11:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 11:28:16 +0000 UTC FinishedAt: 2026-08-07 11:30:13 +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:*0b7c10bc-8ca9-4686-947d-9102ad02a20e,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-workflowwbn7v/series-workflowwbn7v-build-action-3502374412/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-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"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:*5aa79bdb-462b-4d0b-931a-e64a1e687e4c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b7c10bc-8ca9-4686-947d-9102ad02a20e,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-workflowwbn7v/series-workflowwbn7v-build-action-3340505115/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-workflowwbn7v/series-workflowwbn7v-build-action-3502374412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 11:30:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 11:30: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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"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-workflowwbn7v/series-workflowwbn7v-convert-artifact-1081655689/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 11:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 11:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 11:30:23 +0000 UTC FinishedAt: 2026-08-07 11:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 11:30:33 +0000 UTC FinishedAt: 2026-08-07 14:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbn7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tipc_sk_rcv","tipc_sendstream","tipc_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1590cf0329716306e948a8fc29f1d3ee87d3989f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"79ccab76-aba2-45b1-a91e-6713f5be341d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 11:30:33 +0000 UTC FinishedAt: 2026-08-07 14:33:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5aa79bdb-462b-4d0b-931a-e64a1e687e4c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b7c10bc-8ca9-4686-947d-9102ad02a20e,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-workflowwbn7v/series-workflowwbn7v-build-action-3340505115/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-workflowwbn7v/series-workflowwbn7v-build-action-3502374412/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-workflowwbn7v/series-workflowwbn7v-convert-artifact-1081655689/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,}