Name: series-workflowgvfkq Phase: Succeeded StartedAt: 2026-07-24 19:55:00 +0000 UTC FinishedAt: 2026-07-25 00:40:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[0] Phase: Succeeded StartedAt: 2026-07-24 19:55:00 +0000 UTC FinishedAt: 2026-07-24 20:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 19:55:00 +0000 UTC FinishedAt: 2026-07-24 20:21:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "42f6d7d9-d576-4dfa-bd6f-cff798821b83" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_update_proto", "tcp_bpf_sendmsg_redir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl91cGRhdGVfcHJvdG8mIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnX3JlZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI1Zjc2ZGYwNDIwZTk0Zjg1MTExZjBmZThhZDkzZDYxYzMyZGIxOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMDoxNDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDhlOTA1YjUwZGVhZGJlLi5mYmIxMWI1YWJjZDQ2MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5AQCAtNDE2LDcgJiM0Mzs0MTYsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB9XG4gXG4gc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCxcbiYjNDM7XHRcdFx0XHR1MzIgbXNnX2NvcGllZCwgYm9vbCAqY29ya2VkLFxuJiM0MztcdFx0XHRcdGludCBmbGFncylcbiB7XG4gXHRib29sIGNvcmsgPSBmYWxzZSwgZW5vc3BjID0gc2tfbXNnX2Z1bGwobXNnKSwgcmVkaXJfaW5ncmVzcztcbiBcdHN0cnVjdCBzb2NrICpza19yZWRpcjtcbkBAIC00NDMsMTIgJiM0Mzs0NDUsMTggQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRcdFx0cHNvY2stXHUwMDNlY29yayA9IGt6YWxsb2Nfb2JqKCpwc29jay1cdTAwM2Vjb3JrLFxuIFx0XHRcdFx0XHRcdCAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gXHRcdFx0aWYgKCFwc29jay1cdTAwM2Vjb3JrKSB7XG4tXHRcdFx0XHRza19tc2dfZnJlZShzaywgbXNnKTtcbi1cdFx0XHRcdCpjb3BpZWQgPSAwO1xuJiM0MztcdFx0XHRcdGludCBmcmVlO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRwc29jay1cdTAwM2Vjb3JrX2J5dGVzID0gMDtcbiYjNDM7XHRcdFx0XHRmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7XG4mIzQzO1x0XHRcdFx0KmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdG1lbWNweShwc29jay1cdTAwM2Vjb3JrLCBtc2csIHNpemVvZigqbXNnKSk7XG4mIzQzO1x0XHRpZiAocHNvY2stXHUwMDNlY29yayAhPSBtc2cpIHtcbiYjNDM7XHRcdFx0c2tfbXNnX3hmZXJfZnVsbChwc29jay1cdTAwM2Vjb3JrLCBtc2cpO1xuJiM0MztcdFx0XHQqY29ya2VkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtNDk1LDE0ICYjNDM7NTAzLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuIFx0XHRcdGludCBmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7XG4gXG4tXHRcdFx0aWYgKCFjb3JrKVxuJiM0MztcdFx0XHRpZiAoY29yaylcbiYjNDM7XHRcdFx0XHQqY29waWVkIC09IG1pbl90KHUzMiwgbXNnX2NvcGllZCwgZnJlZSk7XG4mIzQzO1x0XHRcdGVsc2VcbiBcdFx0XHRcdCpjb3BpZWQgLT0gZnJlZTtcbiBcdFx0fVxuIFx0XHRpZiAoY29yaykge1xuIFx0XHRcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuIFx0XHRcdGtmcmVlKG1zZyk7XG4gXHRcdFx0bXNnID0gTlVMTDtcbi1cdFx0XHRyZXQgPSAwO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX1NLX0RST1A6XG5AQCAtNTM0LDYgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRzdHJ1Y3Qgc2tfbXNnIHRtcCwgKm1zZ190eCA9IE5VTEw7XG4gXHRpbnQgY29waWVkID0gMCwgZXJyID0gMCwgcmV0ID0gMDtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4mIzQzO1x0dTMyIG1zZ19jb3BpZWQgPSAwO1xuIFx0bG9uZyB0aW1lbztcbiBcdGludCBmbGFncztcbiBcbkBAIC01NDgsNyAmIzQzOzU1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdGxvY2tfc29jayhzayk7XG4gXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXHR3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7XG4tXHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4mIzQzO1x0XHRib29sIGNvcmtlZCA9IGZhbHNlLCBlbm9zcGMgPSBmYWxzZTtcbiBcdFx0dTMyIGNvcHksIG9zaXplO1xuIFxuIFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG5AQCAtNTYwLDkgJiM0Mzs1NzAsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpXG4gXHRcdFx0Z290byB3YWl0X2Zvcl9zbmRidWY7XG4gXHRcdGlmIChwc29jay1cdTAwM2Vjb3JrKSB7XG4mIzQzO1x0XHRcdGlmIChtc2dfdHggIT0gcHNvY2stXHUwMDNlY29yaylcbiYjNDM7XHRcdFx0XHRtc2dfY29waWVkID0gMDtcbiBcdFx0XHRtc2dfdHggPSBwc29jay1cdTAwM2Vjb3JrO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1zZ190eCA9IFx1MDAyNnRtcDtcbiYjNDM7XHRcdFx0bXNnX2NvcGllZCA9IDA7XG4gXHRcdFx0c2tfbXNnX2luaXQobXNnX3R4KTtcbiBcdFx0fVxuIFxuQEAgLTU3OSwxMCAmIzQzOzU5MiwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0XHRcdCAgICAgICBjb3B5KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdHNrX21zZ190cmltKHNrLCBtc2dfdHgsIG9zaXplKTtcbiYjNDM7XHRcdFx0ZXJyID0gcmV0O1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuIFxuIFx0XHRjb3BpZWQgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdG1zZ19jb3BpZWQgJiM0Mzs9IHJldDtcbiBcdFx0aWYgKHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMpIHtcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgcHNvY2stXHUwMDNlY29ya19ieXRlcylcbiBcdFx0XHRcdHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xuQEAgLTU5NSwyMSAmIzQzOzYxMCwyMyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0cHNvY2stXHUwMDNlY29ya19ieXRlcyA9IDA7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsIFx1MDAyNmNvcGllZCwgZmxhZ3MpO1xuJiM0MztcdFx0ZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsIFx1MDAyNmNvcGllZCxcbiYjNDM7XHRcdFx0XHRcdCAgIG1zZ19jb3BpZWQsIFx1MDAyNmNvcmtlZCwgZmxhZ3MpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSlcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHRpZiAoY29ya2VkKVxuJiM0MztcdFx0XHRtc2dfdHggPSBwc29jay1cdTAwM2Vjb3JrO1xuIFx0XHRjb250aW51ZTtcbiB3YWl0X2Zvcl9zbmRidWY6XG4gXHRcdHNldF9iaXQoU09DS19OT1NQQUNFLCBcdTAwMjZzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIHdhaXRfZm9yX21lbW9yeTpcbiBcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRpZiAobXNnX3R4IFx1MDAyNlx1MDAyNiBtc2dfdHggIT0gcHNvY2stXHUwMDNlY29yaylcbi1cdFx0XHRcdHNrX21zZ19mcmVlKHNrLCBtc2dfdHgpO1xuJiM0MztcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdH1cbiBcdH1cbiBvdXRfZXJyOlxuJiM0MztcdGlmIChtc2dfdHggPT0gXHUwMDI2dG1wKVxuJiM0MztcdFx0c2tfbXNnX2ZyZWUoc2ssIG1zZ190eCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRlcnIgPSBza19zdHJlYW1fZXJyb3Ioc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MsIGVycik7XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCB0byBmaXggY29ya2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBhc3NpZ25lZCB0byB0aGUgc29ja2V0IHByb3RvY29sIG9wZXJhdGlvbnMgdmlhIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNWY3NmRmMDQyMGU5NGY4NTExMWYwZmU4YWQ5M2Q2MWMzMmRiMTkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjA6MTQ6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmMKaW5kZXggOGU5MDViNTBkZWFkYmUuLmZiYjExYjVhYmNkNDYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2JwZi5jCkBAIC00MTYsNyAmIzQzOzQxNiw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogfQogCiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKLQkJCQlzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpCiYjNDM7CQkJCXN0cnVjdCBza19tc2cgKm1zZywgaW50ICpjb3BpZWQsCiYjNDM7CQkJCXUzMiBtc2dfY29waWVkLCBib29sICpjb3JrZWQsCiYjNDM7CQkJCWludCBmbGFncykKIHsKIAlib29sIGNvcmsgPSBmYWxzZSwgZW5vc3BjID0gc2tfbXNnX2Z1bGwobXNnKSwgcmVkaXJfaW5ncmVzczsKIAlzdHJ1Y3Qgc29jayAqc2tfcmVkaXI7CkBAIC00NDMsMTIgJiM0Mzs0NDUsMTggQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCiAJCQlwc29jay0mZ3Q7Y29yayA9IGt6YWxsb2Nfb2JqKCpwc29jay0mZ3Q7Y29yaywKIAkJCQkJCSAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCQlpZiAoIXBzb2NrLSZndDtjb3JrKSB7Ci0JCQkJc2tfbXNnX2ZyZWUoc2ssIG1zZyk7Ci0JCQkJKmNvcGllZCA9IDA7CiYjNDM7CQkJCWludCBmcmVlOwomIzQzOwomIzQzOwkJCQlwc29jay0mZ3Q7Y29ya19ieXRlcyA9IDA7CiYjNDM7CQkJCWZyZWUgPSBza19tc2dfZnJlZShzaywgbXNnKTsKJiM0MzsJCQkJKmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQl9Ci0JCW1lbWNweShwc29jay0mZ3Q7Y29yaywgbXNnLCBzaXplb2YoKm1zZykpOwomIzQzOwkJaWYgKHBzb2NrLSZndDtjb3JrICE9IG1zZykgewomIzQzOwkJCXNrX21zZ194ZmVyX2Z1bGwocHNvY2stJmd0O2NvcmssIG1zZyk7CiYjNDM7CQkJKmNvcmtlZCA9IHRydWU7CiYjNDM7CQl9CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDk1LDE0ICYjNDM7NTAzLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCQlpZiAodW5saWtlbHkocmV0ICZsdDsgMCkpIHsKIAkJCWludCBmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7CiAKLQkJCWlmICghY29yaykKJiM0MzsJCQlpZiAoY29yaykKJiM0MzsJCQkJKmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpOwomIzQzOwkJCWVsc2UKIAkJCQkqY29waWVkIC09IGZyZWU7CiAJCX0KIAkJaWYgKGNvcmspIHsKIAkJCXNrX21zZ19mcmVlKHNrLCBtc2cpOwogCQkJa2ZyZWUobXNnKTsKIAkJCW1zZyA9IE5VTEw7Ci0JCQlyZXQgPSAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgX19TS19EUk9QOgpAQCAtNTM0LDYgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJc3RydWN0IHNrX21zZyB0bXAsICptc2dfdHggPSBOVUxMOwogCWludCBjb3BpZWQgPSAwLCBlcnIgPSAwLCByZXQgPSAwOwogCXN0cnVjdCBza19wc29jayAqcHNvY2s7CiYjNDM7CXUzMiBtc2dfY29waWVkID0gMDsKIAlsb25nIHRpbWVvOwogCWludCBmbGFnczsKIApAQCAtNTQ4LDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJbG9ja19zb2NrKHNrKTsKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJd2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkgewotCQlib29sIGVub3NwYyA9IGZhbHNlOwomIzQzOwkJYm9vbCBjb3JrZWQgPSBmYWxzZSwgZW5vc3BjID0gZmFsc2U7CiAJCXUzMiBjb3B5LCBvc2l6ZTsKIAogCQlpZiAoc2stJmd0O3NrX2VycikgewpAQCAtNTYwLDkgJiM0Mzs1NzAsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCiAJCQlnb3RvIHdhaXRfZm9yX3NuZGJ1ZjsKIAkJaWYgKHBzb2NrLSZndDtjb3JrKSB7CiYjNDM7CQkJaWYgKG1zZ190eCAhPSBwc29jay0mZ3Q7Y29yaykKJiM0MzsJCQkJbXNnX2NvcGllZCA9IDA7CiAJCQltc2dfdHggPSBwc29jay0mZ3Q7Y29yazsKIAkJfSBlbHNlIHsKIAkJCW1zZ190eCA9ICZhbXA7dG1wOwomIzQzOwkJCW1zZ19jb3BpZWQgPSAwOwogCQkJc2tfbXNnX2luaXQobXNnX3R4KTsKIAkJfQogCkBAIC01NzksMTAgJiM0Mzs1OTIsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJCQkgICAgICAgY29weSk7CiAJCWlmIChyZXQgJmx0OyAwKSB7CiAJCQlza19tc2dfdHJpbShzaywgbXNnX3R4LCBvc2l6ZSk7CiYjNDM7CQkJZXJyID0gcmV0OwogCQkJZ290byBvdXRfZXJyOwogCQl9CiAKIAkJY29waWVkICYjNDM7PSByZXQ7CiYjNDM7CQltc2dfY29waWVkICYjNDM7PSByZXQ7CiAJCWlmIChwc29jay0mZ3Q7Y29ya19ieXRlcykgewogCQkJaWYgKHNpemUgJmd0OyBwc29jay0mZ3Q7Y29ya19ieXRlcykKIAkJCQlwc29jay0mZ3Q7Y29ya19ieXRlcyA9IDA7CkBAIC01OTUsMjEgJiM0Mzs2MTAsMjMgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJcHNvY2stJmd0O2NvcmtfYnl0ZXMgPSAwOwogCQl9CiAKLQkJZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsICZhbXA7Y29waWVkLCBmbGFncyk7CiYjNDM7CQllcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgJmFtcDtjb3BpZWQsCiYjNDM7CQkJCQkgICBtc2dfY29waWVkLCAmYW1wO2NvcmtlZCwgZmxhZ3MpOwogCQlpZiAodW5saWtlbHkoZXJyICZsdDsgMCkpCiAJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQlpZiAoY29ya2VkKQomIzQzOwkJCW1zZ190eCA9IHBzb2NrLSZndDtjb3JrOwogCQljb250aW51ZTsKIHdhaXRfZm9yX3NuZGJ1ZjoKIAkJc2V0X2JpdChTT0NLX05PU1BBQ0UsICZhbXA7c2stJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwogd2FpdF9mb3JfbWVtb3J5OgogCQllcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssICZhbXA7dGltZW8pOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAobXNnX3R4ICZhbXA7JmFtcDsgbXNnX3R4ICE9IHBzb2NrLSZndDtjb3JrKQotCQkJCXNrX21zZ19mcmVlKHNrLCBtc2dfdHgpOwomIzQzOwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2VycjsKLQkJfQogCX0KIG91dF9lcnI6CiYjNDM7CWlmIChtc2dfdHggPT0gJmFtcDt0bXApCiYjNDM7CQlza19tc2dfZnJlZShzaywgbXNnX3R4KTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZXJyID0gc2tfc3RyZWFtX2Vycm9yKHNrLCBtc2ctJmd0O21zZ19mbGFncywgZXJyKTsKIAlyZWxlYXNlX3NvY2soc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipFeGFtaW5pbmcgYSBUQ1AgQlBGIFBhdGNoKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiB0aGUgc2VuZCBwYXRoLCBzcGVjaWZpY2FsbHkgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgaXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBrbm93biBpc3N1ZXMgcmVsYXRlZCB0byBjb3JraW5nIGJlaGF2aW9yIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHRjcF9icGZfc2VuZG1zZ2AuIE5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcsIGJ1dCBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY29kZSB0aGF0IHJlcXVpcmVzIGEgY2xvc2UgbG9vaywgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBpbiB0aGUgY3JpdGljYWwgbmV0d29yayBwYXRoLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIHN0YWJpbGl6ZSBvciBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIEJQRiBwcm9ncmFtcyB0aGF0IGludGVyYWN0IHdpdGggVENQIHNlbmRzLiBUaGUgY2hhbmdlcyBtaWdodCBpbmNsdWRlIGNvcnJlY3RpbmcgZXhpc3RpbmcsIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkIG9yIGVuYWJsZWQgdG8gZ2V0IHRoaXMgYG5ldC9pcHY0L3RjcF9icGYuY2AgZnVuY3Rpb25hbGl0eSB3b3JraW5nLiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBkb3duIGNvZGUgcGF0aHMgdGhhdCBhcmVuJiMzOTt0IGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaW1lIHRvIGNoZWNrIHRoZSBgLmNvbmZpZ2AgZmlsZSBvciByZWxhdGVkIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgdGhhdCB0aGUgQlBGIGZ1bmN0aW9uYWxpdHkgaGFzIGEgZGVwZW5kZW5jeSBvbiBjZXJ0YWluIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgJiM0Mzs9IHRjcF9pbGxpbm9pcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB1ZHBfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IGBDT05GSUdfTkVUX1NPQ0tfTVNHYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgYWx3YXlzIHdoZW4gbmF2aWdhdGluZyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIG1ldGljdWxvdXNseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBwcmVyZXF1aXNpdGVzIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgcGFydGljdWxhciBvcHRpb24gdG8gZXZlbiBiZSB2aWFibGUuIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgdG8gYXNjZXJ0YWluIGl0cyBzdXBwb3J0aW5nIG1vZHVsZXMsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZXF1aXJlbWVudHMsIGFuZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvciBjb25zdHJhaW4gaXRzIGF2YWlsYWJpbGl0eS4gSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbi0tXG5uZXQvS2NvbmZpZy00NzgtXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctNDgwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgcHJpb3IgZXhwZXJpZW5jZSBhbmQgd2hlcmUgSSBnZW5lcmFsbHkgc2VlIGNvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGFuZGxlZCwgbGluZSA0Nzkgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0JiMzOTtzIGxpa2VseSB3aXRoaW4gYSByZWxldmFudCBzZWN0aW9uIGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIHByb3RvY29sLCBmZWF0dXJlIHNldCwgb3IgZHJpdmVyLCBnaXZlbiB0aGUgY29udGV4dCBvZiBgbmV0L2AuIEkgYW50aWNpcGF0ZSB0aGF0IEkmIzM5O2xsIGxpa2VseSBmaW5kIGVpdGhlciBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwgYW4gb3B0aW9uIGRlY2xhcmF0aW9uLCBvciBwZXJoYXBzIGEgY29tbWVudCB0aGF0IGxpbmtzIGludG8gYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0Ym9vbFxuIDQ3MTpcdFxuIDQ3MjpcdGNvbmZpZyBORVRfSUVFRTgwMjFRX0hFTFBFUlNcbiA0NzM6XHRcdGJvb2xcbiA0NzQ6XHRcbiA0NzU6XHRjb25maWcgTkVUX1NFTEZURVNUU1xuIDQ3NjpcdFx0ZGVmX3RyaXN0YXRlIFBIWUxJQlxuIDQ3NzpcdFx0ZGVwZW5kcyBvbiBQSFlMSUIgXHUwMDI2XHUwMDI2IElORVRcbiA0Nzg6XHRcbiA0Nzk6XHRjb25maWcgTkVUX1NPQ0tfTVNHXG4gNDgwOlx0XHRib29sXG4gNDgxOlx0XHRkZWZhdWx0IG5cbiA0ODI6XHRcdGhlbHBcbiA0ODM6XHRcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXG4gNDg0Olx0XHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcbiA0ODU6XHRcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXG4gNDg2Olx0XG4gNDg3Olx0Y29uZmlnIE5FVF9ERVZMSU5LXG4gNDg4Olx0XHRib29sXG4gNDg5Olx0XHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlVudmVpbGluZyB0aGUgU2VsZWN0aW9uIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBgTkVUX1NPQ0tfTVNHYCBpcyBiZWhhdmluZyBsaWtlIGEgaGlkZGVuIG9wdGlvbi4gSXQmIzM5O3MgY2xlYXJseSBiZWluZyBzZWxlY3RlZCwgb3IgZW5hYmxlZCwgYnkgc29tZSBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG9yIGJ1aWxkIHByb2Nlc3Mgc29tZXdoZXJlLCBidXQgbm90IGRpcmVjdGx5LiBUaGF0JiMzOTtzIGFsd2F5cyBhIGZ1biBjaGFsbGVuZ2Ug4oCTIGNoYXNpbmcgZG93biBkZXBlbmRlbmNpZXMhIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIHNlbGVjdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgTkVUX1NPQ0tfTVNHYCBhbmQgc2VlIHdoYXQmIzM5O3MgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBlbmFibGluZyBpdC4gSXMgaXQgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgc2V0LCBhIG1vZHVsZSBkZXBlbmRlbmN5LCBvciBtYXliZSBldmVuIGEgbWFjcm8gZGVmaW5pdGlvbj8gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzIGFuZCBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGJ1aWxkIHNjcmlwdHMuIExldCYjMzk7cyBnZXQgdGhpcyB1bnJhdmVsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXHRzZWxlY3QgQklOQVJZX1BSSU5URlxua2VybmVsL2JwZi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuLS1cbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEludGVyYWN0aW9uIHdpdGggVENQIFNlbmQgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgQmVya2VsZXkgUGFja2V0IEZpbHRlcnMgKEJQRikgaW50ZXJhY3Qgd2l0aCBUQ1Agc2VuZCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBCUEZfU1lTQ0FMTGAgd2l0aCB0aGUgYE5FVGAgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIEl0IHNlZW1zIHRoYXQgdGhpcyBzZWxlY3Rpb24gaGFzIGxlZCBtZSB0byBpbnZlc3RpZ2F0ZSBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgc2hvdWxkIHJlc2lkZSB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIExldCYjMzk7cyBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBzbyBub3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhcmUgdGhleSBzdGF0aWMgb3IgZ2xvYmFsPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgY2FsbGVkIGFuZCBpZiB0aGV5IGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhlIGdpdCBkaWZmIGNvbmZpcm1zIGB0Y3BfYnBmX3NlbmRtc2dgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBmdW5jdGlvbiBmcm9tIG91dHNpZGUgdGhpcyBmaWxlIGlzIHJlc3RyaWN0ZWQuIE5vdywgdGhpcyByYWlzZXMgYSBmbGFnLCBpdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGlmIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgaXQgd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IgaWYgdGhlIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIHNvbWUgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgYG5ldC9pcHY0L3RjcF9icGYuY2AgdG8gZ2FpbiBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbGluZyBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ny19XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5My1cdFx0b3JpZ3NpemUgPSBtc2ctXHUwMDNlc2cuc2l6ZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo0OTQ6XHRcdHJldCA9IHRjcF9icGZfc2VuZG1zZ19yZWRpcihza19yZWRpciwgcmVkaXJfaW5ncmVzcyxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTUtXHRcdFx0XHRcdCAgICBtc2csIHRvc2VuZCwgZmxhZ3MpO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy01NDAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTQxOnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcF9icGYuYy01NDIte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02NTU9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY1LVx0cHJvdFtUQ1BfQlBGX1RYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY2NjpcdHByb3RbVENQX0JQRl9UWF0uc2VuZG1zZ1x0XHQ9IHRjcF9icGZfc2VuZG1zZztcbm5ldC9pcHY0L3RjcF9icGYuYy02NjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTEKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgU2VuZG1zZyBIb29rKioKCk9rYXksIHNvIEkgc2VlIGB0Y3BfYnBmX3NlbmRtc2dgIGlzIGdldHRpbmcgaG9va2VkIGludG8gdGhlIGBUQ1BfQlBGX1RYYCBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IG1hcHBlZCB0byBgcHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnYC4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gVGhpcyBtZWFucywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgdGhhdCB3aGVuZXZlciBhIFRDUCBzb2NrZXQgaXMgYWJvdXQgdG8gc2VuZCBhIG1lc3NhZ2UsIHRoaXMgZnVuY3Rpb24sIGB0Y3BfYnBmX3NlbmRtc2dgLCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGhhcHBlbmluZyB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEkgbmVlZCBhIHF1aWNrIG92ZXJ2aWV3LiBXaGF0IGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBiZXNpZGVzIHRoZSBvYnZpb3VzbHkgaW1wb3J0YW50IGB0Y3BfYnBmX3NlbmRtc2dgPyBBcmUgdGhlcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGZpbHRlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZXJyb3IgaGFuZGxpbmcsIG90aGVyIGtleSBwb2ludHM/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBCUEYmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVENQIHN0YWNrIGR1cmluZyB0cmFuc21pc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1OnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY1MT1zdGF0aWMgc3RydWN0IHByb3RvICp0Y3B2Nl9wcm90X3NhdmVkIF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtc3RhdGljIHN0cnVjdCBwcm90byB0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfTlVNX1BST1RTXVtUQ1BfQlBGX05VTV9DRkdTXTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njk0PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MDQtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjcwNTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy03MDYtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NDA6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0MS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc4My0gKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3ODQ6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgVXBkYXRlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgY29kZSByZWxhdGVkIHRvIFRDUCwgYW5kIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYXMgYSBsaWtlbHkgY3J1Y2lhbCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHVwZGF0aW5nIHRoZSBwcm90b2NvbCB3aXRoaW4gdGhlIGB0Y3BfYnBmX3Byb3RzYCBzdHJ1Y3R1cmUsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyBjZW50cmFsaXR5LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGEgc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcCBmdXJ0aGVyIGNlbWVudHMgaXRzIGltcG9ydGFuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgZGVmaW5pdGVseSBhIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBhbHNvIG5vdGluZyB0aGF0IGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIGFzIHdlbGwsIHdoaWNoIGlzIGhlbHBmdWwgdG8ga2VlcCBpbiBtaW5kLiBOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRldGVybWluZSBwcmVjaXNlbHkgd2hlcmUgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpcyBiZWluZyBjYWxsZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgVENQIEJQRiBpbXBsZW1lbnRhdGlvbi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI4Mzg9c3RydWN0IHNrX3Bzb2NrO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4NDAtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg0MTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg0Mi12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NDA6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0MS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3Ni19XG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzc3OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcbm5ldC9pcHY0L3RjcF9icGYuYy03NzgtXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQzPXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzY5Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzcwLSNlbmRpZlxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMDEtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjg5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmcsIG1heWJlIGRlYnVnZ2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlOgoKKipUcmFjaW5nIFByb3RvY29sIFVwZGF0ZXMgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIFRDUCBCUEYgcHJvZ3JhbSBnZXRzIHVwZGF0ZWQuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHRoaXMsIGJ1dCB0aGUgYWN0dWFsIGNhbGwgdG8gaXQgaXMgcm91dGVkIHRocm91Z2ggYHBzb2NrX3VwZGF0ZV9za19wcm90YC4gU28sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgYmVpbmcgaW52b2tlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIsIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90b2NvbCB1cGRhdGUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgYmVoYXZpb3IuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgcHNvY2tfdXBkYXRlX3NrX3Byb3RgIGlzIGdvaW5nIHRvIHNoZWQgbGlnaHQgb24gd2hhdCYjMzk7cyBkcml2aW5nIHRoZSBjYWxsIHRvIHVwZGF0ZSB0aGUgQlBGIHByb2dyYW0sIGFuZCB1bHRpbWF0ZWx5LCB3aHkgdGhlIG9ic2VydmVkIGJlaGF2aW9yIGlzIGhhcHBlbmluZy4gVGltZSB0byBnbyBodW50aW5nIGZvciBjYWxsIHNpdGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc29ja191cGRhdGVfc2tfcHJvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrbXNnLmg9ODQ9c3RydWN0IHNrX3Bzb2NrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtMTExLVx0dm9pZCAoKnNhdmVkX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6MTEyOlx0LyogcHNvY2tfdXBkYXRlX3NrX3Byb3QgbWF5IGJlIGNhbGxlZCB3aXRoIHJlc3RvcmU9ZmFsc2UgbWFueSB0aW1lc1xuaW5jbHVkZS9saW51eC9za21zZy5oLTExMy1cdCAqIHNvIHRoZSBoYW5kbGVyIG11c3QgYmUgc2FmZSBmb3IgdGhpcyBjYXNlLiBJdCB3aWxsIGJlIGNhbGxlZFxuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaC0xMTYtXHQgKi9cbmluY2x1ZGUvbGludXgvc2ttc2cuaDoxMTc6XHRpbnQgICgqcHNvY2tfdXBkYXRlX3NrX3Byb3QpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC0xMTgtXHRcdFx0XHQgICAgIGJvb2wgcmVzdG9yZSk7XG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oPTQ4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfcmVzdG9yZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ5MC17XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NDkxOlx0aWYgKHBzb2NrLVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90KVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ5MjpcdFx0cHNvY2stXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Qoc2ssIHBzb2NrLCB0cnVlKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00OTMtfVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0xMjkxPXN0cnVjdCBwcm90byB7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTEzNDQtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuaW5jbHVkZS9uZXQvc29jay5oOjEzNDU6XHRpbnRcdFx0XHQoKnBzb2NrX3VwZGF0ZV9za19wcm90KShzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9zb2NrLmgtMTM0Ni1cdFx0XHRcdFx0XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDI9c3RhdGljIHZvaWQgc29ja19tYXBfZGVsX2xpbmsoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcyLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzM6XHRcdGlmIChwc29jay1cdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdClcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc0Olx0XHRcdHBzb2NrLVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90KHNrLCBwc29jaywgZmFsc2UpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNzUtXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE4OT1zdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAte1xubmV0L2NvcmUvc29ja19tYXAuYzoxOTE6XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3QpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MzpcdHBzb2NrLVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90ID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdDtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk0Olx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Qoc2ssIHBzb2NrLCBmYWxzZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE5NS19XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xubmV0L2NvcmUvc29ja19tYXAuYzo1Mzg6XHRyZXR1cm4gISFzay1cdTAwM2Vza19wcm90LVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90O1xubmV0L2NvcmUvc29ja19tYXAuYy01MzktfVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Mz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2OTpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3MC0jZW5kaWZcbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTMyPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0zMTUzLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3VkcC5jOjMxNTQ6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXG5uZXQvaXB2NC91ZHAuYy0zMTU1LSNlbmRpZlxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMDEtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxuLS1cbm5ldC9pcHY2L3VkcC5jPTE4OTU9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTkxNi0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2Ni91ZHAuYzoxOTE3Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVkcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjYvdWRwLmMtMTkxOC0jZW5kaWZcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDE9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY0LVx0LyogRGlzYWJsZSBzb2NrbWFwIHByb2Nlc3NpbmcgZm9yIHN1YmZsb3dzICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjU6XHR0Y3BfcHJvdF9vdmVycmlkZS5wc29ja191cGRhdGVfc2tfcHJvdCA9IE5VTEw7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtI2VuZGlmXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTc1PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxMS1cdC8qIERpc2FibGUgc29ja21hcCBwcm9jZXNzaW5nIGZvciBzdWJmbG93cyAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMjEyOlx0dGNwdjZfcHJvdF9vdmVycmlkZS5wc29ja191cGRhdGVfc2tfcHJvdCA9IE5VTEw7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtI2VuZGlmXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwNjA9c3RydWN0IHByb3RvIHVuaXhfZGdyYW1fcHJvdG8gPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwNjYtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNjc6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdW5peF9kZ3JhbV9icGZfdXBkYXRlX3Byb3RvLFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNjgtI2VuZGlmXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwNzE9c3RydWN0IHByb3RvIHVuaXhfc3RyZWFtX3Byb3RvID0ge1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYzoxMDc4Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVuaXhfc3RyZWFtX2JwZl91cGRhdGVfcHJvdG8sXG5uZXQvdW5peC9hZl91bml4LmMtMTA3OS0jZW5kaWZcbi0tXG5uZXQvdW5peC91bml4X2JwZi5jPTE2ND1pbnQgdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvdW5peC91bml4X2JwZi5jLTE3Ny1cbm5ldC91bml4L3VuaXhfYnBmLmM6MTc4Olx0LyogcHNvY2tfdXBkYXRlX3NrX3Byb3QgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiBwc29jayBpc1xubmV0L3VuaXgvdW5peF9icGYuYy0xNzktXHQgKiBhZGRlZCB0byBtdWx0aXBsZSBtYXBzIGFuZC9vciBzbG90cyBpbiB0aGUgc2FtZSBtYXAuIFRoZXJlIGlzXG5uZXQvdW5peC91bml4X2JwZi5jLTE4MC1cdCAqIGFsc28gYW4gZWRnZSBjYXNlIHdoZXJlIHJlcGxhY2luZyBhIHBzb2NrIHdpdGggaXRzZWxmIGNhbiB0cmlnZ2VyXG5uZXQvdW5peC91bml4X2JwZi5jOjE4MTpcdCAqIGFuIGV4dHJhIHBzb2NrX3VwZGF0ZV9za19wcm90IGR1cmluZyB0aGUgaW5zZXJ0IHByb2Nlc3MuIFNvIGl0XG5uZXQvdW5peC91bml4X2JwZi5jLTE4Mi1cdCAqIG11c3QgYmUgc2FmZSB0byBkbyBtdWx0aXBsZSBjYWxscy4gSGVyZSB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3Rcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTg1PXN0cnVjdCBwcm90byB2c29ja19wcm90byA9IHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTkwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxOTE6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3QgPSB2c29ja19icGZfdXBkYXRlX3Byb3RvLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5Mi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYHRjcF9icGZgIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb3JlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHJlcGxhY2luZyB0aGUgc29ja2V0JiMzOTtzIHByb3RvY29sIChgc2stJmd0O3NrX3Byb3RgKSB3aXRoIGEgY3VzdG9tIG9uZSwgc3BlY2lmaWNhbGx5IGB0Y3BfYnBmX3Byb3RzYCwgYW5kIHRoYXQgaGFwcGVucyB3aXRoaW4gYHRjcF9icGZfdXBkYXRlX3Byb3RvYC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gVGhlIGltcG9ydGFudCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgLgoKYHRjcF9icGZfc2VuZG1zZ2AgaXMgYXNzaWduZWQgdG8gdGhlIGBzZW5kbXNnYCBtZW1iZXIgb2YgdGhpcyBjdXN0b20gcHJvdG9jb2wgc3RydWN0dXJlLCBgdGNwX2JwZl9wcm90c2AsIGF0IGluZGV4IGBUQ1BfQlBGX1RYYC4gVGhlbiwgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpcyBjYWxsZWQgYnkgYHRjcF9icGZfc2VuZG1zZ2AsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYHRjcF9icGZfc2VuZG1zZ2AgYmVjb21lcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBnZXRzIHRyaWdnZXJlZC4KCldhaXQgYSBzZWNvbmQsIHNpbmNlIGB0Y3BfYnBmX3NlbmRtc2dgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIHRoYXQgYXMgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGlzIGEgYml0IGFubm95aW5nLiBIb3dldmVyLCBJIGp1c3QgcmVhbGl6ZWQgdGhhdCBpdCBpcyBhc3NpZ25lZCB0byBgc2VuZG1zZ2Agb2YgdGhlIGB0Y3BfYnBmX3Byb3RzYCBzdHJ1Y3R1cmUuIFNvLCBpZiBhIFRDUCBzb2NrZXQgaXMgYWRkZWQgdG8gYSBzb2NrbWFwLCBhbmQgdGhpcyBwcm90b2NvbCBnZXRzIGFzc2lnbmVkLCB0aGVuIGEgY2FsbCB0byBgc2VuZG1zZ2Agb24gdGhhdCBzb2NrZXQgd2lsbCB1bHRpbWF0ZWx5IGVuZCB1cCBjYWxsaW5nIGB0Y3BfYnBmX3NlbmRtc2dgISBBaGEsIHNvIHRoYXQgbWVhbnMgdGhlIHRyaWdnZXIgY29uZGl0aW9uIGlzIHRvIGFkZCBhIFRDUCBzb2NrZXQgdG8gYSBzb2NrbWFwLCB3aGljaCB0aGVuIGNhbGxzIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuIFRoZW4gY2FsbGluZyBgc2VuZG1zZ2Agb24gdGhlIHNvY2tldCBzaG91bGQgd29yay4KClNvLCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4gVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGlzIGFsc28gcHJvbWlzaW5nLCBzaW5jZSBpdCYjMzk7cyBub24tc3RhdGljIGFuZCBjYWxsZWQgYnkgYHRjcF9icGZfc2VuZF92ZXJkaWN0YC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0xNTM9c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNjMtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTY0OmludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY1LVx0XHRcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc3LX1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDkzLVx0XHRvcmlnc2l6ZSA9IG1zZy1cdTAwM2VzZy5zaXplO1xubmV0L2lwdjQvdGNwX2JwZi5jOjQ5NDpcdFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5NS1cdFx0XHRcdFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTU0MC1cbm5ldC9pcHY0L3RjcF9icGYuYzo1NDE6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwX2JwZi5jLTU0Mi17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY1NT1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXHRwcm90W1RDUF9CUEZfVFhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY2Olx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXHRcdD0gdGNwX2JwZl9zZW5kbXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIFNlbmQgUGF0aCoqCgpPa2F5LCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCBmZWVscyBsaWtlIGEgZ29vZCBzeW1ib2wgdG8gY2VudGVyIHRoaXMgaW52ZXN0aWdhdGlvbiBhcm91bmQuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYmFzaWM6IGlzIGB0Y3BfYnBmX3NlbmRtc2dgIGEgc3RhdGljIGZ1bmN0aW9uPyBZZXMsIGl0IGFwcGVhcnMgdG8gYmUuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uCgpHaXZlbiB0aGF0IGB0Y3BfYnBmX3NlbmRtc2dgIGlzIHN0YXRpYywgbXkgdG9vbHMgd2lsbCBuZWVkIHRvIGZvY3VzIG9uIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgLiBXaGF0IGFib3V0IHRoZSByZWNlaXZlIHNpZGU/IElzIGB0Y3BfYnBmX3JlY3Ztc2dgIGFsc28gc3RhdGljPyBZZXMsIGl0IGlzLiBBbHJpZ2h0LCB0aGF0IGd1aWRlcyBteSBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuIFRoaXMgcGF0Y2ggc2VlbXMgZGlyZWN0bHkgY29uY2VybmVkIHdpdGggYHRjcF9icGZfc2VuZG1zZ2AgYW5kIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAsIHdoaWNoIG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBidWcgcmVsYXRlZCB0byBjb3JraW5nIGFuZCwgc3BlY2lmaWNhbGx5LCBlcnJvciBoYW5kbGluZy4KClRoaXMgbWVhbnMgdGhlIHByaW1hcnkgZnV6emluZyB0YXJnZXQgKm11c3QqIGJlIGB0Y3BfYnBmX3NlbmRtc2dgLiBOb3csIHNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQgd29uJiMzOTt0IGJlIGluIGFueSBmdW5jdGlvbiBsaXN0LCB3aGljaCBjb21wbGljYXRlcyB0aGUgYXBwcm9hY2guIEhvd2V2ZXIsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgKmlzKiB0aGUgc2V0dXAgZnVuY3Rpb24sIGFuZCBhIGxvdCBvZiBpbXBvcnRhbnQgZGF0YSBwYXNzZXMgdGhyb3VnaCBpdC4gU28sIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHZpYWJsZSBlbnRyeSBwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHNjYW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgZm9yIGFueSAqb3RoZXIqIGV4cG9ydGVkIGZ1bmN0aW9ucy4gWW91IG5ldmVyIGtub3cgd2hhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZXJlIHRoYXQgY291bGQgZXhwb3NlIHNvbWV0aGluZyB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTE2ND1pbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxubmV0L2lwdjQvdGNwX2JwZi5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzQwPWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzc2LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3Nzc6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl91cGRhdGVfcHJvdG8pO1xubmV0L2lwdjQvdGNwX2JwZi5jLTc3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIEJQRiBIb29rIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgaG9va3MuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb25lcyB3ZSBjYW4gd29yayB3aXRoIGhlcmUgYXJlIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGFuZCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBXZSBjYW4gbGV2ZXJhZ2UgYm90aCBvZiB0aG9zZS4gSSBoYWQgYSBxdWljayB0aG91Z2h0IGFib3V0IGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYnV0IHVwb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGF0IGRvZXNuJiMzOTt0IHNlZW0gZGlyZWN0bHkgcmVsYXRlZCB0byBzZW5kbXNnLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIEkgYWxzbyBjaGVja2VkIGB0Y3BfYnBmX2Nsb25lYCwgaXQgaXMgbm90IHN0YXRpYywgYnV0IHVsdGltYXRlbHksIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgbG9va3MgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgb2YgdGhlIGJ1bmNoLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgdGhlIGhvb2tzIGFyZSBlbmFibGVkLiBJJiMzOTt2ZSBmb3VuZCB0aGF0IGBORVRfU09DS19NU0dgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAgaWYgYE5FVGAgaXMgYWxzbyBlbmFibGVkLiBUaGF0IG1lYW5zIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZyB3ZSBuZWVkLiBgTkVUYCBpcyBvYnZpb3VzbHkgYSBiYXNlIHJlcXVpcmVtZW50LCBidXQgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5vdWdoLCB0aG91Z2guCgpSaWdodCwgYEJQRl9TWVNDQUxMYCAqZG9lcyogc2VsZWN0IGBORVRfU09DS19NU0dgIGlmIGBORVRgIGlzIHNldC4gT2theSwgdGhhdCBsb29rcyBzb2xpZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQWZ0ZXIgYSBxdWljayBsb29rIGF0IGB0Y3BfYnBmLmNgLCB0aGUgZmlsZSBpdHNlbGYgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgc2V0LCBzbyB3ZSBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrISBFc3NlbnRpYWxseSwgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG5lZWRlZC4KCk9uZSBsYXN0IHRoaW5nLCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIHJlYWwgcXVpY2ssIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXkgYXJlIG5vdCBoaWRkZW4gaW5zaWRlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBTbywgaXQgbG9va3MgbGlrZSBgdGNwX2JwZl9zZW5kbXNnYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBkZWZpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXaGF0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhIHJlc3VsdD8KCk15IG5leHQgc3RlcCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSwgaXMgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSB0aGF0IGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBibG9jayBjbG9zZXMuIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBXaGVyZSBkb2VzIGl0IHN0YXJ0LCBhbmQgd2hlcmUgZG9lcyBpdCBlbmQ/IEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdHJ1Y3R1cmVzLCBvciBkYXRhIHBhdGhzIHRoYXQgYXJlIGFsc28gZ3VhcmRlZCBieSB0aGlzIG9wdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2UgYW5kIGltcGFjdCBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvbiBCUEYgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFRDUCBzdGFjay4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgdml0YWwgZm9yIGEgZGVlcGVyLCBtb3JlIGluZm9ybWVkIGFuYWx5c2lzLiBJIG5lZWQgdG8gc2VlIHRoZSAqd2hvbGUqIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VuZGlmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz03MDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczNy19XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzM4OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIgKi9cbm5ldC9pcHY0L3RjcF9icGYuYy03MzktXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc4ND12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc5MC19XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzkxOiNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNDAKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgQlBGIENvZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZXhhbWluZWQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gbGluZXMgMTgwIHRocm91Z2ggNzkxLiBJdCYjMzk7cyBhbGwgbmVzdGxlZCBuZWF0bHkgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBibG9jaywgd2hpY2ggbWVhbnMgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoYXQmIzM5O3Mgb3VyIHByaW1hcnkgY29uZmlndXJhdGlvbiB0byBub3RlLCB0aGUgb25seSBvbmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMuIEkgc2VlIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGFyZSB0aGUgcHJvbWluZW50IGZ1bmN0aW9uIG5hbWVzIHRvIGNvbnNpZGVyLiBIbW0sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjay4uLiBZZXMsIGB0Y3BfYnBmX2Nsb25lYCBpcyBhbHNvIG5vbi1zdGF0aWMsIGJ1dCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byBzZXQgdXAgdGhlIHByb3RvY29sIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCBpcyBpbXBvcnRhbnQgYXMgd2VsbC4KCkFscmlnaHQsIGxldCYjMzk7cyBleHBsb3JlIGlmIGB0Y3BfYnBmX3NlbmRtc2dgIGNhbiBiZSB0cmlnZ2VyZWQuIEFoLCB5ZXMhIFdlIGNhbiByZWFjaCBgdGNwX2JwZl9zZW5kbXNnYCBieSBhZGRpbmcgYSBzb2NrZXQgdG8gYSBzb2NrbWFwIGFuZCB0aGVuIGNhbGxpbmcgYHNlbmRtc2dgLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgQlBGIHNjZW5hcmlvLiBUaGF0IG1lYW5zIHRoaXMgY29kZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUgaGVyZS4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZyBpbiBhIG51dHNoZWxsOiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEl0JiMzOTtzIGZpeGluZyBpc3N1ZXMgYXJvdW5kIGNvcmtpbmcgYW5kIGVycm9yIGhhbmRsaW5nLCB3aGljaCBkaXJlY3RseSBpbXBhY3RzIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuCk15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgLgpBbmQgd2UgaGF2ZSBqdXN0IG9uZSByZWxldmFudCBjb25maWcgdG8gY29uc2lkZXI6IGBCUEZfU1lTQ0FMTGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCB0byBmaXggY29ya2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBhc3NpZ25lZCB0byB0aGUgc29ja2V0IHByb3RvY29sIG9wZXJhdGlvbnMgdmlhIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl91cGRhdGVfcHJvdG8mIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnX3JlZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI0LjEyOTU0Njg0OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTIyMjY1NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTQ6MjQuMTI5NTU1OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQ0MjIwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNWY3NmRmMDQyMGU5NGY4NTExMWYwZmU4YWQ5M2Q2MWMzMmRiMTkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDIwOjE0OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbmluZGV4IDhlOTA1YjUwZGVhZGJlLi5mYmIxMWI1YWJjZDQ2MyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5AQCAtNDE2LDcgKzQxNiw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbitcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLFxcbitcXHRcXHRcXHRcXHR1MzIgbXNnX2NvcGllZCwgYm9vbCAqY29ya2VkLFxcbitcXHRcXHRcXHRcXHRpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0Ym9vbCBjb3JrID0gZmFsc2UsIGVub3NwYyA9IHNrX21zZ19mdWxsKG1zZyksIHJlZGlyX2luZ3Jlc3M7XFxuIFxcdHN0cnVjdCBzb2NrICpza19yZWRpcjtcXG5AQCAtNDQzLDEyICs0NDUsMTggQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuIFxcdFxcdFxcdHBzb2NrLVxcdTAwM2Vjb3JrID0ga3phbGxvY19vYmooKnBzb2NrLVxcdTAwM2Vjb3JrLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRcXHRcXHRpZiAoIXBzb2NrLVxcdTAwM2Vjb3JrKSB7XFxuLVxcdFxcdFxcdFxcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xcbi1cXHRcXHRcXHRcXHQqY29waWVkID0gMDtcXG4rXFx0XFx0XFx0XFx0aW50IGZyZWU7XFxuK1xcbitcXHRcXHRcXHRcXHRwc29jay1cXHUwMDNlY29ya19ieXRlcyA9IDA7XFxuK1xcdFxcdFxcdFxcdGZyZWUgPSBza19tc2dfZnJlZShzaywgbXNnKTtcXG4rXFx0XFx0XFx0XFx0KmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdG1lbWNweShwc29jay1cXHUwMDNlY29yaywgbXNnLCBzaXplb2YoKm1zZykpO1xcbitcXHRcXHRpZiAocHNvY2stXFx1MDAzZWNvcmsgIT0gbXNnKSB7XFxuK1xcdFxcdFxcdHNrX21zZ194ZmVyX2Z1bGwocHNvY2stXFx1MDAzZWNvcmssIG1zZyk7XFxuK1xcdFxcdFxcdCpjb3JrZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC00OTUsMTQgKzUwMywxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuIFxcdFxcdFxcdGludCBmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWNvcmspXFxuK1xcdFxcdFxcdGlmIChjb3JrKVxcbitcXHRcXHRcXHRcXHQqY29waWVkIC09IG1pbl90KHUzMiwgbXNnX2NvcGllZCwgZnJlZSk7XFxuK1xcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0KmNvcGllZCAtPSBmcmVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChjb3JrKSB7XFxuIFxcdFxcdFxcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xcbiBcXHRcXHRcXHRrZnJlZShtc2cpO1xcbiBcXHRcXHRcXHRtc2cgPSBOVUxMO1xcbi1cXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIF9fU0tfRFJPUDpcXG5AQCAtNTM0LDYgKzU0Myw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c3RydWN0IHNrX21zZyB0bXAsICptc2dfdHggPSBOVUxMO1xcbiBcXHRpbnQgY29waWVkID0gMCwgZXJyID0gMCwgcmV0ID0gMDtcXG4gXFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4rXFx0dTMyIG1zZ19jb3BpZWQgPSAwO1xcbiBcXHRsb25nIHRpbWVvO1xcbiBcXHRpbnQgZmxhZ3M7XFxuIFxcbkBAIC01NDgsNyArNTU4LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRsb2NrX3NvY2soc2spO1xcbiBcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gXFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xcbi1cXHRcXHRib29sIGVub3NwYyA9IGZhbHNlO1xcbitcXHRcXHRib29sIGNvcmtlZCA9IGZhbHNlLCBlbm9zcGMgPSBmYWxzZTtcXG4gXFx0XFx0dTMyIGNvcHksIG9zaXplO1xcbiBcXG4gXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG5AQCAtNTYwLDkgKzU3MCwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdFxcdGlmICghc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSlcXG4gXFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zbmRidWY7XFxuIFxcdFxcdGlmIChwc29jay1cXHUwMDNlY29yaykge1xcbitcXHRcXHRcXHRpZiAobXNnX3R4ICE9IHBzb2NrLVxcdTAwM2Vjb3JrKVxcbitcXHRcXHRcXHRcXHRtc2dfY29waWVkID0gMDtcXG4gXFx0XFx0XFx0bXNnX3R4ID0gcHNvY2stXFx1MDAzZWNvcms7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG1zZ190eCA9IFxcdTAwMjZ0bXA7XFxuK1xcdFxcdFxcdG1zZ19jb3BpZWQgPSAwO1xcbiBcXHRcXHRcXHRza19tc2dfaW5pdChtc2dfdHgpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01NzksMTAgKzU5MiwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3B5KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0c2tfbXNnX3RyaW0oc2ssIG1zZ190eCwgb3NpemUpO1xcbitcXHRcXHRcXHRlcnIgPSByZXQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y29waWVkICs9IHJldDtcXG4rXFx0XFx0bXNnX2NvcGllZCArPSByZXQ7XFxuIFxcdFxcdGlmIChwc29jay1cXHUwMDNlY29ya19ieXRlcykge1xcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIHBzb2NrLVxcdTAwM2Vjb3JrX2J5dGVzKVxcbiBcXHRcXHRcXHRcXHRwc29jay1cXHUwMDNlY29ya19ieXRlcyA9IDA7XFxuQEAgLTU5NSwyMSArNjEwLDIzIEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0cHNvY2stXFx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgXFx1MDAyNmNvcGllZCwgZmxhZ3MpO1xcbitcXHRcXHRlcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgXFx1MDAyNmNvcGllZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbXNnX2NvcGllZCwgXFx1MDAyNmNvcmtlZCwgZmxhZ3MpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0XFx0aWYgKGNvcmtlZClcXG4rXFx0XFx0XFx0bXNnX3R4ID0gcHNvY2stXFx1MDAzZWNvcms7XFxuIFxcdFxcdGNvbnRpbnVlO1xcbiB3YWl0X2Zvcl9zbmRidWY6XFxuIFxcdFxcdHNldF9iaXQoU09DS19OT1NQQUNFLCBcXHUwMDI2c2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbiB3YWl0X2Zvcl9tZW1vcnk6XFxuIFxcdFxcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRpZiAobXNnX3R4IFxcdTAwMjZcXHUwMDI2IG1zZ190eCAhPSBwc29jay1cXHUwMDNlY29yaylcXG4tXFx0XFx0XFx0XFx0c2tfbXNnX2ZyZWUoc2ssIG1zZ190eCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIG91dF9lcnI6XFxuK1xcdGlmIChtc2dfdHggPT0gXFx1MDAyNnRtcClcXG4rXFx0XFx0c2tfbXNnX2ZyZWUoc2ssIG1zZ190eCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRlcnIgPSBza19zdHJlYW1fZXJyb3Ioc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzLCBlcnIpO1xcbiBcXHRyZWxlYXNlX3NvY2soc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDoyNC45MjUwNTI5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMzI2NzQ5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjVmNzZkZjA0MjBlOTRmODUxMTFmMGZlOGFkOTNkNjFjMzJkYjE5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDIwOjE0OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCA4ZTkwNWI1MGRlYWRiZS4uZmJiMTFiNWFiY2Q0NjMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTQxNiw3ICs0MTYsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB9XG4gXG4gc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpXG4rXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLFxuK1x0XHRcdFx0dTMyIG1zZ19jb3BpZWQsIGJvb2wgKmNvcmtlZCxcbitcdFx0XHRcdGludCBmbGFncylcbiB7XG4gXHRib29sIGNvcmsgPSBmYWxzZSwgZW5vc3BjID0gc2tfbXNnX2Z1bGwobXNnKSwgcmVkaXJfaW5ncmVzcztcbiBcdHN0cnVjdCBzb2NrICpza19yZWRpcjtcbkBAIC00NDMsMTIgKzQ0NSwxOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiBcdFx0XHRwc29jay1cdTAwM2Vjb3JrID0ga3phbGxvY19vYmooKnBzb2NrLVx1MDAzZWNvcmssXG4gXHRcdFx0XHRcdFx0ICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiBcdFx0XHRpZiAoIXBzb2NrLVx1MDAzZWNvcmspIHtcbi1cdFx0XHRcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuLVx0XHRcdFx0KmNvcGllZCA9IDA7XG4rXHRcdFx0XHRpbnQgZnJlZTtcbitcbitcdFx0XHRcdHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xuK1x0XHRcdFx0ZnJlZSA9IHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuK1x0XHRcdFx0KmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdG1lbWNweShwc29jay1cdTAwM2Vjb3JrLCBtc2csIHNpemVvZigqbXNnKSk7XG4rXHRcdGlmIChwc29jay1cdTAwM2Vjb3JrICE9IG1zZykge1xuK1x0XHRcdHNrX21zZ194ZmVyX2Z1bGwocHNvY2stXHUwMDNlY29yaywgbXNnKTtcbitcdFx0XHQqY29ya2VkID0gdHJ1ZTtcbitcdFx0fVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC00OTUsMTQgKzUwMywxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiBcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiBcdFx0XHRpbnQgZnJlZSA9IHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuIFxuLVx0XHRcdGlmICghY29yaylcbitcdFx0XHRpZiAoY29yaylcbitcdFx0XHRcdCpjb3BpZWQgLT0gbWluX3QodTMyLCBtc2dfY29waWVkLCBmcmVlKTtcbitcdFx0XHRlbHNlXG4gXHRcdFx0XHQqY29waWVkIC09IGZyZWU7XG4gXHRcdH1cbiBcdFx0aWYgKGNvcmspIHtcbiBcdFx0XHRza19tc2dfZnJlZShzaywgbXNnKTtcbiBcdFx0XHRrZnJlZShtc2cpO1xuIFx0XHRcdG1zZyA9IE5VTEw7XG4tXHRcdFx0cmV0ID0gMDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgX19TS19EUk9QOlxuQEAgLTUzNCw2ICs1NDMsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRzdHJ1Y3Qgc2tfbXNnIHRtcCwgKm1zZ190eCA9IE5VTEw7XG4gXHRpbnQgY29waWVkID0gMCwgZXJyID0gMCwgcmV0ID0gMDtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4rXHR1MzIgbXNnX2NvcGllZCA9IDA7XG4gXHRsb25nIHRpbWVvO1xuIFx0aW50IGZsYWdzO1xuIFxuQEAgLTU0OCw3ICs1NTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRsb2NrX3NvY2soc2spO1xuIFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xuLVx0XHRib29sIGVub3NwYyA9IGZhbHNlO1xuK1x0XHRib29sIGNvcmtlZCA9IGZhbHNlLCBlbm9zcGMgPSBmYWxzZTtcbiBcdFx0dTMyIGNvcHksIG9zaXplO1xuIFxuIFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG5AQCAtNTYwLDkgKzU3MCwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGlmICghc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSlcbiBcdFx0XHRnb3RvIHdhaXRfZm9yX3NuZGJ1ZjtcbiBcdFx0aWYgKHBzb2NrLVx1MDAzZWNvcmspIHtcbitcdFx0XHRpZiAobXNnX3R4ICE9IHBzb2NrLVx1MDAzZWNvcmspXG4rXHRcdFx0XHRtc2dfY29waWVkID0gMDtcbiBcdFx0XHRtc2dfdHggPSBwc29jay1cdTAwM2Vjb3JrO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1zZ190eCA9IFx1MDAyNnRtcDtcbitcdFx0XHRtc2dfY29waWVkID0gMDtcbiBcdFx0XHRza19tc2dfaW5pdChtc2dfdHgpO1xuIFx0XHR9XG4gXG5AQCAtNTc5LDEwICs1OTIsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdFx0XHQgICAgICAgY29weSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRza19tc2dfdHJpbShzaywgbXNnX3R4LCBvc2l6ZSk7XG4rXHRcdFx0ZXJyID0gcmV0O1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuIFxuIFx0XHRjb3BpZWQgKz0gcmV0O1xuK1x0XHRtc2dfY29waWVkICs9IHJldDtcbiBcdFx0aWYgKHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMpIHtcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgcHNvY2stXHUwMDNlY29ya19ieXRlcylcbiBcdFx0XHRcdHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xuQEAgLTU5NSwyMSArNjEwLDIzIEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRwc29jay1cdTAwM2Vjb3JrX2J5dGVzID0gMDtcbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgXHUwMDI2Y29waWVkLCBmbGFncyk7XG4rXHRcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcdTAwMjZjb3BpZWQsXG4rXHRcdFx0XHRcdCAgIG1zZ19jb3BpZWQsIFx1MDAyNmNvcmtlZCwgZmxhZ3MpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSlcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdGlmIChjb3JrZWQpXG4rXHRcdFx0bXNnX3R4ID0gcHNvY2stXHUwMDNlY29yaztcbiBcdFx0Y29udGludWU7XG4gd2FpdF9mb3Jfc25kYnVmOlxuIFx0XHRzZXRfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiB3YWl0X2Zvcl9tZW1vcnk6XG4gXHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0aWYgKG1zZ190eCBcdTAwMjZcdTAwMjYgbXNnX3R4ICE9IHBzb2NrLVx1MDAzZWNvcmspXG4tXHRcdFx0XHRza19tc2dfZnJlZShzaywgbXNnX3R4KTtcbitcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdH1cbiBcdH1cbiBvdXRfZXJyOlxuK1x0aWYgKG1zZ190eCA9PSBcdTAwMjZ0bXApXG4rXHRcdHNrX21zZ19mcmVlKHNrLCBtc2dfdHgpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0ZXJyID0gc2tfc3RyZWFtX2Vycm9yKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBlcnIpO1xuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI0LjkyNTA1NTc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDEwMDUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipFeGFtaW5pbmcgYSBUQ1AgQlBGIFBhdGNoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiB0aGUgc2VuZCBwYXRoLCBzcGVjaWZpY2FsbHkgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgaXQgc291bmRzIGxpa2Ugd2UncmUgYWRkcmVzc2luZyBzb21lIGtub3duIGlzc3VlcyByZWxhdGVkIHRvIGNvcmtpbmcgYmVoYXZpb3IgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdGNwX2JwZl9zZW5kbXNnYC4gTm90aGluZyBncm91bmRicmVha2luZywgYnV0IGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjb2RlIHRoYXQgcmVxdWlyZXMgYSBjbG9zZSBsb29rLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgaW4gdGhlIGNyaXRpY2FsIG5ldHdvcmsgcGF0aC4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHN0YWJpbGl6ZSBvciBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIEJQRiBwcm9ncmFtcyB0aGF0IGludGVyYWN0IHdpdGggVENQIHNlbmRzLiBUaGUgY2hhbmdlcyBtaWdodCBpbmNsdWRlIGNvcnJlY3RpbmcgZXhpc3RpbmcsIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWVkZWQgb3IgZW5hYmxlZCB0byBnZXQgdGhpcyBgbmV0L2lwdjQvdGNwX2JwZi5jYCBmdW5jdGlvbmFsaXR5IHdvcmtpbmcuIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgZG93biBjb2RlIHBhdGhzIHRoYXQgYXJlbid0IGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsIEknbSB3b3JraW5nIHdpdGguIFRpbWUgdG8gY2hlY2sgdGhlIGAuY29uZmlnYCBmaWxlIG9yIHJlbGF0ZWQgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyB0aGF0IHRoZSBCUEYgZnVuY3Rpb25hbGl0eSBoYXMgYSBkZXBlbmRlbmN5IG9uIGNlcnRhaW4gZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI5LjIxOTE2MDQzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyMTI1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSArPSB0Y3BfaWxsaW5vaXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI5LjM5MzM3OTUyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDQ5MTgxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgeW91cnNlbGY6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBgQ09ORklHX05FVF9TT0NLX01TR2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgYWx3YXlzIHdoZW4gbmF2aWdhdGluZyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIG1ldGljdWxvdXNseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBwcmVyZXF1aXNpdGVzIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgcGFydGljdWxhciBvcHRpb24gdG8gZXZlbiBiZSB2aWFibGUuIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgdG8gYXNjZXJ0YWluIGl0cyBzdXBwb3J0aW5nIG1vZHVsZXMsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZXF1aXJlbWVudHMsIGFuZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvciBjb25zdHJhaW4gaXRzIGF2YWlsYWJpbGl0eS4gSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjMyLjIzODMwMDkzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc4NzExMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTQ6MzIuNTE2MTc5NjUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxMDI1MTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBwcmlvciBleHBlcmllbmNlIGFuZCB3aGVyZSBJIGdlbmVyYWxseSBzZWUgY29tbW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYW5kbGVkLCBsaW5lIDQ3OSBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSXQncyBsaWtlbHkgd2l0aGluIGEgcmVsZXZhbnQgc2VjdGlvbiBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwcm90b2NvbCwgZmVhdHVyZSBzZXQsIG9yIGRyaXZlciwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYG5ldC9gLiBJIGFudGljaXBhdGUgdGhhdCBJJ2xsIGxpa2VseSBmaW5kIGVpdGhlciBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwgYW4gb3B0aW9uIGRlY2xhcmF0aW9uLCBvciBwZXJoYXBzIGEgY29tbWVudCB0aGF0IGxpbmtzIGludG8gYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDozNS41MjY0MzQwNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdFxcdGJvb2xcXG4gNDcxOlxcdFxcbiA0NzI6XFx0Y29uZmlnIE5FVF9JRUVFODAyMVFfSEVMUEVSU1xcbiA0NzM6XFx0XFx0Ym9vbFxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRjb25maWcgTkVUX1NFTEZURVNUU1xcbiA0NzY6XFx0XFx0ZGVmX3RyaXN0YXRlIFBIWUxJQlxcbiA0Nzc6XFx0XFx0ZGVwZW5kcyBvbiBQSFlMSUIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRjb25maWcgTkVUX1NPQ0tfTVNHXFxuIDQ4MDpcXHRcXHRib29sXFxuIDQ4MTpcXHRcXHRkZWZhdWx0IG5cXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXFxuIDQ4NDpcXHRcXHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcXG4gNDg1OlxcdFxcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXFxuIDQ4NjpcXHRcXG4gNDg3OlxcdGNvbmZpZyBORVRfREVWTElOS1xcbiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjM1LjUyNjYwNTQ1NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjE0NzMzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVudmVpbGluZyB0aGUgU2VsZWN0aW9uIE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIHNvIGBORVRfU09DS19NU0dgIGlzIGJlaGF2aW5nIGxpa2UgYSBoaWRkZW4gb3B0aW9uLiBJdCdzIGNsZWFybHkgYmVpbmcgc2VsZWN0ZWQsIG9yIGVuYWJsZWQsIGJ5IHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBvciBidWlsZCBwcm9jZXNzIHNvbWV3aGVyZSwgYnV0IG5vdCBkaXJlY3RseS4gVGhhdCdzIGFsd2F5cyBhIGZ1biBjaGFsbGVuZ2Ug4oCTIGNoYXNpbmcgZG93biBkZXBlbmRlbmNpZXMhIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoYXQncyBkcml2aW5nIHRoaXMgc2VsZWN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBORVRfU09DS19NU0dgIGFuZCBzZWUgd2hhdCdzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZW5hYmxpbmcgaXQuIElzIGl0IGEgc3BlY2lmaWMgcGxhdGZvcm0sIGEgcGFydGljdWxhciBmZWF0dXJlIHNldCwgYSBtb2R1bGUgZGVwZW5kZW5jeSwgb3IgbWF5YmUgZXZlbiBhIG1hY3JvIGRlZmluaXRpb24/IFRpbWUgdG8gYnJlYWsgb3V0IHRoZSB0b29scyBhbmQgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBidWlsZCBzY3JpcHRzLiBMZXQncyBnZXQgdGhpcyB1bnJhdmVsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDozOC43ODgwODE1ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODIxMjYwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMzLVxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxua2VybmVsL2JwZi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzY2LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWc6MzY3OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy0zNjgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZzozODY6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWctMzg3LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy05My1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY2L0tjb25maWc6OTQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWctOTUtXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbm5ldC90bHMvS2NvbmZpZzoxMTpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L3Rscy9LY29uZmlnLTEyLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDo0NC41NzAyMTQxNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2ODgwMjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJbnRlcmFjdGlvbiB3aXRoIFRDUCBTZW5kIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBCZXJrZWxleSBQYWNrZXQgRmlsdGVycyAoQlBGKSBpbnRlcmFjdCB3aXRoIFRDUCBzZW5kIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYEJQRl9TWVNDQUxMYCB3aXRoIHRoZSBgTkVUYCBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gSXQgc2VlbXMgdGhhdCB0aGlzIHNlbGVjdGlvbiBoYXMgbGVkIG1lIHRvIGludmVzdGlnYXRlIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBzaG91bGQgcmVzaWRlIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gTGV0J3MgY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCBzbyBub3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhcmUgdGhleSBzdGF0aWMgb3IgZ2xvYmFsPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBjYWxsZWQgYW5kIGlmIHRoZXkgYXJlIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGUgZ2l0IGRpZmYgY29uZmlybXMgYHRjcF9icGZfc2VuZG1zZ2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGZ1bmN0aW9uIGZyb20gb3V0c2lkZSB0aGlzIGZpbGUgaXMgcmVzdHJpY3RlZC4gTm93LCB0aGlzIHJhaXNlcyBhIGZsYWcsIGl0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QgaWYgbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCBpdCB3aXRoaW4gdGhlIHNhbWUgZmlsZSBvciBpZiB0aGUgZnVuY3Rpb24gaXMgYXNzaWduZWQgdG8gc29tZSBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGdhaW4gYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjQ5LjYzOTAyMDY1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1OTU5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTE1Mz1zdGF0aWMgaW50IHRjcF9icGZfcHVzaF9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY1LVxcdFxcdFxcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTMtXFx0XFx0b3JpZ3NpemUgPSBtc2ctXFx1MDAzZXNnLnNpemU7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjQ5NDpcXHRcXHRyZXQgPSB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc2tfcmVkaXIsIHJlZGlyX2luZ3Jlc3MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5NS1cXHRcXHRcXHRcXHRcXHQgICAgbXNnLCB0b3NlbmQsIGZsYWdzKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy01NDAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjU0MTpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTU0Mi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjU1PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY1LVxcdHByb3RbVENQX0JQRl9UWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY2OlxcdHByb3RbVENQX0JQRl9UWF0uc2VuZG1zZ1xcdFxcdD0gdGNwX2JwZl9zZW5kbXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjQ5Ljk4NDk4NjQ2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0MDI4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBTZW5kbXNnIEhvb2sqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgdGNwX2JwZl9zZW5kbXNnYCBpcyBnZXR0aW5nIGhvb2tlZCBpbnRvIHRoZSBgVENQX0JQRl9UWGAgcHJvdG9jb2wsIHNwZWNpZmljYWxseSBtYXBwZWQgdG8gYHByb3RbVENQX0JQRl9UWF0uc2VuZG1zZ2AuIFRoYXQncyBhIGtleSBwb2ludC4gVGhpcyBtZWFucywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgdGhhdCB3aGVuZXZlciBhIFRDUCBzb2NrZXQgaXMgYWJvdXQgdG8gc2VuZCBhIG1lc3NhZ2UsIHRoaXMgZnVuY3Rpb24sIGB0Y3BfYnBmX3NlbmRtc2dgLCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGhhcHBlbmluZyB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEkgbmVlZCBhIHF1aWNrIG92ZXJ2aWV3LiBXaGF0IGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBiZXNpZGVzIHRoZSBvYnZpb3VzbHkgaW1wb3J0YW50IGB0Y3BfYnBmX3NlbmRtc2dgPyBBcmUgdGhlcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGZpbHRlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZXJyb3IgaGFuZGxpbmcsIG90aGVyIGtleSBwb2ludHM/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBCUEYncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUQ1Agc3RhY2sgZHVyaW5nIHRyYW5zbWlzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQxMSwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjUzLjY1OTAxODIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzExNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYy0xNC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz0xNTM9c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTY0OmludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cXHRcXHRcXHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjUxPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gKnRjcHY2X3Byb3Rfc2F2ZWQgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUzLXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njk0PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcwNC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcwNTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzA2LVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzQwOmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03Nzc9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl91cGRhdGVfcHJvdG8pO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc4My0gKi9cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzg0OnZvaWQgdGNwX2JwZl9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzg1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTQ6NTMuNzMyMTQxNjQ0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzgyMzIzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIFVwZGF0ZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlIHJlbGF0ZWQgdG8gVENQLCBhbmQgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIGxpa2VseSBjcnVjaWFsIGZ1bmN0aW9uLiBJdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB1cGRhdGluZyB0aGUgcHJvdG9jb2wgd2l0aGluIHRoZSBgdGNwX2JwZl9wcm90c2Agc3RydWN0dXJlLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyBpdHMgY2VudHJhbGl0eS4gVGhlIGZhY3QgdGhhdCBpdCdzIHRyaWdnZXJlZCB3aGVuIGEgc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcCBmdXJ0aGVyIGNlbWVudHMgaXRzIGltcG9ydGFuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgZGVmaW5pdGVseSBhIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gSSdtIGFsc28gbm90aW5nIHRoYXQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gYXMgd2VsbCwgd2hpY2ggaXMgaGVscGZ1bCB0byBrZWVwIGluIG1pbmQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGJlaW5nIGNhbGxlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBUQ1AgQlBGIGltcGxlbWVudGF0aW9uLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDo1Ny43MTAzNzczNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDg3NTI4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI4Mzg9c3RydWN0IHNrX3Bzb2NrO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg0MC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg0MTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NDItdm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03MDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM5LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDA6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3Ni19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc3NzpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3OC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Mz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2OTpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3MC0jZW5kaWZcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMwMS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDo1OS42MTkxNDAzOTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MDMxNDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmcsIG1heWJlIGRlYnVnZ2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlOlxuXG4qKlRyYWNpbmcgUHJvdG9jb2wgVXBkYXRlcyBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIFRDUCBCUEYgcHJvZ3JhbSBnZXRzIHVwZGF0ZWQuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHRoaXMsIGJ1dCB0aGUgYWN0dWFsIGNhbGwgdG8gaXQgaXMgcm91dGVkIHRocm91Z2ggYHBzb2NrX3VwZGF0ZV9za19wcm90YC4gU28sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgYmVpbmcgaW52b2tlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIsIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90b2NvbCB1cGRhdGUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvci4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgZ29pbmcgdG8gc2hlZCBsaWdodCBvbiB3aGF0J3MgZHJpdmluZyB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIEJQRiBwcm9ncmFtLCBhbmQgdWx0aW1hdGVseSwgd2h5IHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpcyBoYXBwZW5pbmcuIFRpbWUgdG8gZ28gaHVudGluZyBmb3IgY2FsbCBzaXRlcyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODI4OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE1OjAyLjk4OTQ1NzgwNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNTA4NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc29ja191cGRhdGVfc2tfcHJvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za21zZy5oPTg0PXN0cnVjdCBza19wc29jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtMTExLVxcdHZvaWQgKCpzYXZlZF9kYXRhX3JlYWR5KShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaDoxMTI6XFx0LyogcHNvY2tfdXBkYXRlX3NrX3Byb3QgbWF5IGJlIGNhbGxlZCB3aXRoIHJlc3RvcmU9ZmFsc2UgbWFueSB0aW1lc1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaC0xMTMtXFx0ICogc28gdGhlIGhhbmRsZXIgbXVzdCBiZSBzYWZlIGZvciB0aGlzIGNhc2UuIEl0IHdpbGwgYmUgY2FsbGVkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtMTE2LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaDoxMTc6XFx0aW50ICAoKnBzb2NrX3VwZGF0ZV9za19wcm90KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTExOC1cXHRcXHRcXHRcXHQgICAgIGJvb2wgcmVzdG9yZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg9NDg4PXN0YXRpYyBpbmxpbmUgdm9pZCBza19wc29ja19yZXN0b3JlX3Byb3RvKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00OTAte1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0OTE6XFx0aWYgKHBzb2NrLVxcdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdClcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NDkyOlxcdFxcdHBzb2NrLVxcdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdChzaywgcHNvY2ssIHRydWUpO1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00OTMtfVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTEyOTE9c3RydWN0IHByb3RvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0xMzQ0LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTM0NTpcXHRpbnRcXHRcXHRcXHQoKnBzb2NrX3VwZGF0ZV9za19wcm90KShzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvc29jay5oLTEzNDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbF9saW5rKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTczOlxcdFxcdGlmIChwc29jay1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3QpXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQ6XFx0XFx0XFx0cHNvY2stXFx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90KHNrLCBwc29jaywgZmFsc2UpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc1LVxcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODk9c3RhdGljIGludCBzb2NrX21hcF9pbml0X3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MC17XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTE6XFx0aWYgKCFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3QpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTM6XFx0cHNvY2stXFx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90ID0gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90O1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk0OlxcdHJldHVybiBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Qoc2ssIHBzb2NrLCBmYWxzZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTUtfVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM3LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjUzODpcXHRyZXR1cm4gISFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MzktfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQzPXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2OC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzY5OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzcwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzEzMj1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTUzLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC91ZHAuYzozMTU0OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdWRwLmMtMzE1NS0jZW5kaWZcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMwMS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTg5NT1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5MTYtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY2L3VkcC5jOjE5MTc6XFx0LnBzb2NrX3VwZGF0ZV9za19wcm90XFx0PSB1ZHBfYnBmX3VwZGF0ZV9wcm90byxcXG5uZXQvaXB2Ni91ZHAuYy0xOTE4LSNlbmRpZlxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY0LVxcdC8qIERpc2FibGUgc29ja21hcCBwcm9jZXNzaW5nIGZvciBzdWJmbG93cyAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE2NTpcXHR0Y3BfcHJvdF9vdmVycmlkZS5wc29ja191cGRhdGVfc2tfcHJvdCA9IE5VTEw7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LSNlbmRpZlxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTc1PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjExLVxcdC8qIERpc2FibGUgc29ja21hcCBwcm9jZXNzaW5nIGZvciBzdWJmbG93cyAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxMjpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnBzb2NrX3VwZGF0ZV9za19wcm90ID0gTlVMTDtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtI2VuZGlmXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MTA2MD1zdHJ1Y3QgcHJvdG8gdW5peF9kZ3JhbV9wcm90byA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMDY2LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdW5peC9hZl91bml4LmM6MTA2NzpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHVuaXhfZGdyYW1fYnBmX3VwZGF0ZV9wcm90byxcXG5uZXQvdW5peC9hZl91bml4LmMtMTA2OC0jZW5kaWZcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0xMDcxPXN0cnVjdCBwcm90byB1bml4X3N0cmVhbV9wcm90byA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdW5peC9hZl91bml4LmM6MTA3ODpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHVuaXhfc3RyZWFtX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzktI2VuZGlmXFxuLS1cXG5uZXQvdW5peC91bml4X2JwZi5jPTE2ND1pbnQgdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC91bml4L3VuaXhfYnBmLmMtMTc3LVxcbm5ldC91bml4L3VuaXhfYnBmLmM6MTc4OlxcdC8qIHBzb2NrX3VwZGF0ZV9za19wcm90IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaWYgcHNvY2sgaXNcXG5uZXQvdW5peC91bml4X2JwZi5jLTE3OS1cXHQgKiBhZGRlZCB0byBtdWx0aXBsZSBtYXBzIGFuZC9vciBzbG90cyBpbiB0aGUgc2FtZSBtYXAuIFRoZXJlIGlzXFxubmV0L3VuaXgvdW5peF9icGYuYy0xODAtXFx0ICogYWxzbyBhbiBlZGdlIGNhc2Ugd2hlcmUgcmVwbGFjaW5nIGEgcHNvY2sgd2l0aCBpdHNlbGYgY2FuIHRyaWdnZXJcXG5uZXQvdW5peC91bml4X2JwZi5jOjE4MTpcXHQgKiBhbiBleHRyYSBwc29ja191cGRhdGVfc2tfcHJvdCBkdXJpbmcgdGhlIGluc2VydCBwcm9jZXNzLiBTbyBpdFxcbm5ldC91bml4L3VuaXhfYnBmLmMtMTgyLVxcdCAqIG11c3QgYmUgc2FmZSB0byBkbyBtdWx0aXBsZSBjYWxscy4gSGVyZSB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBkb24ndFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE4NT1zdHJ1Y3QgcHJvdG8gdnNvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTkwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTkxOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdCA9IHZzb2NrX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5Mi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTU6MDQuOTE0NTUyNTcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MTI2NTA1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGB0Y3BfYnBmYCBmdW5jdGlvbmFsaXR5LiBUaGUgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCByZXBsYWNpbmcgdGhlIHNvY2tldCdzIHByb3RvY29sIChgc2stXHUwMDNlc2tfcHJvdGApIHdpdGggYSBjdXN0b20gb25lLCBzcGVjaWZpY2FsbHkgYHRjcF9icGZfcHJvdHNgLCBhbmQgdGhhdCBoYXBwZW5zIHdpdGhpbiBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uIFRoZSBpbXBvcnRhbnQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YC5cblxuYHRjcF9icGZfc2VuZG1zZ2AgaXMgYXNzaWduZWQgdG8gdGhlIGBzZW5kbXNnYCBtZW1iZXIgb2YgdGhpcyBjdXN0b20gcHJvdG9jb2wgc3RydWN0dXJlLCBgdGNwX2JwZl9wcm90c2AsIGF0IGluZGV4IGBUQ1BfQlBGX1RYYC4gVGhlbiwgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpcyBjYWxsZWQgYnkgYHRjcF9icGZfc2VuZG1zZ2AsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYHRjcF9icGZfc2VuZG1zZ2AgYmVjb21lcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBnZXRzIHRyaWdnZXJlZC5cblxuV2FpdCBhIHNlY29uZCwgc2luY2UgYHRjcF9icGZfc2VuZG1zZ2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBJIGNhbid0IGRpcmVjdGx5IHVzZSB0aGF0IGFzIGEgZm9jdXMgc3ltYm9sLCB3aGljaCBpcyBhIGJpdCBhbm5veWluZy4gSG93ZXZlciwgSSBqdXN0IHJlYWxpemVkIHRoYXQgaXQgaXMgYXNzaWduZWQgdG8gYHNlbmRtc2dgIG9mIHRoZSBgdGNwX2JwZl9wcm90c2Agc3RydWN0dXJlLiBTbywgaWYgYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcCwgYW5kIHRoaXMgcHJvdG9jb2wgZ2V0cyBhc3NpZ25lZCwgdGhlbiBhIGNhbGwgdG8gYHNlbmRtc2dgIG9uIHRoYXQgc29ja2V0IHdpbGwgdWx0aW1hdGVseSBlbmQgdXAgY2FsbGluZyBgdGNwX2JwZl9zZW5kbXNnYCEgQWhhLCBzbyB0aGF0IG1lYW5zIHRoZSB0cmlnZ2VyIGNvbmRpdGlvbiBpcyB0byBhZGQgYSBUQ1Agc29ja2V0IHRvIGEgc29ja21hcCwgd2hpY2ggdGhlbiBjYWxscyBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBUaGVuIGNhbGxpbmcgYHNlbmRtc2dgIG9uIHRoZSBzb2NrZXQgc2hvdWxkIHdvcmsuXG5cblNvLCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4gVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGlzIGFsc28gcHJvbWlzaW5nLCBzaW5jZSBpdCdzIG5vbi1zdGF0aWMgYW5kIGNhbGxlZCBieSBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgLiBMZXQgbWUgcXVpY2tseSBzY2FuIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFnYWluIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgY2FuZGlkYXRlcy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjk2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE1OjExLjcyNzIwNjExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzc0MDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0xNTM9c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTY0OmludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cXHRcXHRcXHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc3LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDkzLVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0OTQ6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTUtXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTQwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1NDE6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01NDIte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY1NT1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY2NS1cXHRwcm90W1RDUF9CUEZfVFhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY2NjpcXHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcXHRcXHQ9IHRjcF9icGZfc2VuZG1zZztcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToxMS44MjQ5NTUyODFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0OTk4ODQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBCUEYgU2VuZCBQYXRoKipcblxuT2theSwgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAgZmVlbHMgbGlrZSBhIGdvb2Qgc3ltYm9sIHRvIGNlbnRlciB0aGlzIGludmVzdGlnYXRpb24gYXJvdW5kLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGJhc2ljOiBpcyBgdGNwX2JwZl9zZW5kbXNnYCBhIHN0YXRpYyBmdW5jdGlvbj8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbkdpdmVuIHRoYXQgYHRjcF9icGZfc2VuZG1zZ2AgaXMgc3RhdGljLCBteSB0b29scyB3aWxsIG5lZWQgdG8gZm9jdXMgb24gYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuIFdoYXQgYWJvdXQgdGhlIHJlY2VpdmUgc2lkZT8gSXMgYHRjcF9icGZfcmVjdm1zZ2AgYWxzbyBzdGF0aWM/IFllcywgaXQgaXMuIEFscmlnaHQsIHRoYXQgZ3VpZGVzIG15IGFwcHJvYWNoLlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuIFRoaXMgcGF0Y2ggc2VlbXMgZGlyZWN0bHkgY29uY2VybmVkIHdpdGggYHRjcF9icGZfc2VuZG1zZ2AgYW5kIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAsIHdoaWNoIG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBidWcgcmVsYXRlZCB0byBjb3JraW5nIGFuZCwgc3BlY2lmaWNhbGx5LCBlcnJvciBoYW5kbGluZy5cblxuVGhpcyBtZWFucyB0aGUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldCAqbXVzdCogYmUgYHRjcF9icGZfc2VuZG1zZ2AuIE5vdywgc2luY2UgaXQncyBzdGF0aWMsIGl0IHdvbid0IGJlIGluIGFueSBmdW5jdGlvbiBsaXN0LCB3aGljaCBjb21wbGljYXRlcyB0aGUgYXBwcm9hY2guIEhvd2V2ZXIsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgKmlzKiB0aGUgc2V0dXAgZnVuY3Rpb24sIGFuZCBhIGxvdCBvZiBpbXBvcnRhbnQgZGF0YSBwYXNzZXMgdGhyb3VnaCBpdC4gU28sIHRoYXQncyBkZWZpbml0ZWx5IGEgdmlhYmxlIGVudHJ5IHBvaW50LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGZvciBhbnkgKm90aGVyKiBleHBvcnRlZCBmdW5jdGlvbnMuIFlvdSBuZXZlciBrbm93IHdoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGVyZSB0aGF0IGNvdWxkIGV4cG9zZSBzb21ldGhpbmcgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToxNy4xNzQ5NDcxMjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjU4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0xNjQ9aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTc0MD1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzc2LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzc3OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToxNy4yNzAyMTUwOTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY4NTYxNTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQlBGIEhvb2sgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCUEYgaG9va3MuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb25lcyB3ZSBjYW4gd29yayB3aXRoIGhlcmUgYXJlIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGFuZCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBXZSBjYW4gbGV2ZXJhZ2UgYm90aCBvZiB0aG9zZS4gSSBoYWQgYSBxdWljayB0aG91Z2h0IGFib3V0IGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYnV0IHVwb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGF0IGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSByZWxhdGVkIHRvIHNlbmRtc2csIHNvIHRoYXQncyBhIGRlYWQgZW5kLiBJIGFsc28gY2hlY2tlZCBgdGNwX2JwZl9jbG9uZWAsIGl0IGlzIG5vdCBzdGF0aWMsIGJ1dCB1bHRpbWF0ZWx5LCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGxvb2tzIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIG9mIHRoZSBidW5jaC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGUgaG9va3MgYXJlIGVuYWJsZWQuIEkndmUgZm91bmQgdGhhdCBgTkVUX1NPQ0tfTVNHYCBpcyBzZWxlY3RlZCBieSBgQlBGX1NZU0NBTExgIGlmIGBORVRgIGlzIGFsc28gZW5hYmxlZC4gVGhhdCBtZWFucyBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcml0aWNhbCBjb25maWcgd2UgbmVlZC4gYE5FVGAgaXMgb2J2aW91c2x5IGEgYmFzZSByZXF1aXJlbWVudCwgYnV0IGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgdGhlIGtleS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBlbm91Z2gsIHRob3VnaC5cblxuUmlnaHQsIGBCUEZfU1lTQ0FMTGAgKmRvZXMqIHNlbGVjdCBgTkVUX1NPQ0tfTVNHYCBpZiBgTkVUYCBpcyBzZXQuIE9rYXksIHRoYXQgbG9va3Mgc29saWQuIExldCdzIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQWZ0ZXIgYSBxdWljayBsb29rIGF0IGB0Y3BfYnBmLmNgLCB0aGUgZmlsZSBpdHNlbGYgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgc2V0LCBzbyB3ZSBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrISBFc3NlbnRpYWxseSwgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG5lZWRlZC5cblxuT25lIGxhc3QgdGhpbmcsIGxldCdzIGRvdWJsZSBjaGVjayBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCByZWFsIHF1aWNrLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGV5IGFyZSBub3QgaGlkZGVuIGluc2lkZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToyMy45NTU4MzM0MzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODc5OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9MTc4PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTgxLXN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToyNC4wMTg3MTc5OTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MDY1ODUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gU28sIGl0IGxvb2tzIGxpa2UgYHRjcF9icGZfc2VuZG1zZ2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgZGVmaW5lLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgdGhlIGdhdGVrZWVwZXIuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXaGF0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhIHJlc3VsdD9cblxuTXkgbmV4dCBzdGVwLCBhbmQgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBpcyB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoZXJlIHRoYXQgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrIGNsb3Nlcy4gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFdoZXJlIGRvZXMgaXQgc3RhcnQsIGFuZCB3aGVyZSBkb2VzIGl0IGVuZD8gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdGhhdCBhcmUgYWxzbyBndWFyZGVkIGJ5IHRoaXMgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgY2xhcmlmeSB0aGUgcHVycG9zZSBhbmQgaW1wYWN0IG9mIGBDT05GSUdfQlBGX1NZU0NBTExgIG9uIEJQRiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGlzIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBpcyB2aXRhbCBmb3IgYSBkZWVwZXIsIG1vcmUgaW5mb3JtZWQgYW5hbHlzaXMuIEkgbmVlZCB0byBzZWUgdGhlICp3aG9sZSogcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToyOC4zMDkzNzkzOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTM3MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuZGlmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9NzA1PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTczNy19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjczODojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03ODQ9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc5MC19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc5MTojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE1OjI4LjM2OTMyMzIwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Nzk2MDMzOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQlBGIENvZGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgY29kZSBhbmQgSSd2ZSB6ZXJvZWQgaW4gb24gbGluZXMgMTgwIHRocm91Z2ggNzkxLiBJdCdzIGFsbCBuZXN0bGVkIG5lYXRseSB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrLCB3aGljaCBtZWFucyBgQlBGX1NZU0NBTExgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIG91ciBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdG8gbm90ZSwgdGhlIG9ubHkgb25lIHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzLiBJIHNlZSBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCBhcmUgdGhlIHByb21pbmVudCBmdW5jdGlvbiBuYW1lcyB0byBjb25zaWRlci4gSG1tLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suLi4gWWVzLCBgdGNwX2JwZl9jbG9uZWAgaXMgYWxzbyBub24tc3RhdGljLCBidXQgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgdG8gc2V0IHVwIHRoZSBwcm90b2NvbCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAgaXMgaW1wb3J0YW50IGFzIHdlbGwuXG5cbkFscmlnaHQsIGxldCdzIGV4cGxvcmUgaWYgYHRjcF9icGZfc2VuZG1zZ2AgY2FuIGJlIHRyaWdnZXJlZC4gQWgsIHllcyEgV2UgY2FuIHJlYWNoIGB0Y3BfYnBmX3NlbmRtc2dgIGJ5IGFkZGluZyBhIHNvY2tldCB0byBhIHNvY2ttYXAgYW5kIHRoZW4gY2FsbGluZyBgc2VuZG1zZ2AuIFRoYXQncyBhIHRleHRib29rIEJQRiBzY2VuYXJpby4gVGhhdCBtZWFucyB0aGlzIGNvZGUgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlIGhlcmUuXG5cblNvLCBoZXJlJ3MgbXkgcmVhc29uaW5nIGluIGEgbnV0c2hlbGw6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gSXQncyBmaXhpbmcgaXNzdWVzIGFyb3VuZCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZywgd2hpY2ggZGlyZWN0bHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LlxuTXkgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuXG5BbmQgd2UgaGF2ZSBqdXN0IG9uZSByZWxldmFudCBjb25maWcgdG8gY29uc2lkZXI6IGBCUEZfU1lTQ0FMTGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQwLCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNTozNi4xNjUzNjA2MjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQzNzgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3VwZGF0ZV9wcm90b1wiLFxuICAgIFwidGNwX2JwZl9zZW5kbXNnX3JlZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9icGZfc2VuZG1zZ2AgYW5kIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgdG8gZml4IGNvcmtpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgQlBGIHNvY2ttYXAgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gdGhlIHNvY2tldCBwcm90b2NvbCBvcGVyYXRpb25zIHZpYSBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgvfkq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 19:55:00 +0000 UTC FinishedAt: 2026-07-24 20:15:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "42f6d7d9-d576-4dfa-bd6f-cff798821b83" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_update_proto", "tcp_bpf_sendmsg_redir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl91cGRhdGVfcHJvdG8mIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnX3JlZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI1Zjc2ZGYwNDIwZTk0Zjg1MTExZjBmZThhZDkzZDYxYzMyZGIxOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMDoxNDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDhlOTA1YjUwZGVhZGJlLi5mYmIxMWI1YWJjZDQ2MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5AQCAtNDE2LDcgJiM0Mzs0MTYsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB9XG4gXG4gc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCxcbiYjNDM7XHRcdFx0XHR1MzIgbXNnX2NvcGllZCwgYm9vbCAqY29ya2VkLFxuJiM0MztcdFx0XHRcdGludCBmbGFncylcbiB7XG4gXHRib29sIGNvcmsgPSBmYWxzZSwgZW5vc3BjID0gc2tfbXNnX2Z1bGwobXNnKSwgcmVkaXJfaW5ncmVzcztcbiBcdHN0cnVjdCBzb2NrICpza19yZWRpcjtcbkBAIC00NDMsMTIgJiM0Mzs0NDUsMTggQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRcdFx0cHNvY2stXHUwMDNlY29yayA9IGt6YWxsb2Nfb2JqKCpwc29jay1cdTAwM2Vjb3JrLFxuIFx0XHRcdFx0XHRcdCAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gXHRcdFx0aWYgKCFwc29jay1cdTAwM2Vjb3JrKSB7XG4tXHRcdFx0XHRza19tc2dfZnJlZShzaywgbXNnKTtcbi1cdFx0XHRcdCpjb3BpZWQgPSAwO1xuJiM0MztcdFx0XHRcdGludCBmcmVlO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRwc29jay1cdTAwM2Vjb3JrX2J5dGVzID0gMDtcbiYjNDM7XHRcdFx0XHRmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7XG4mIzQzO1x0XHRcdFx0KmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdG1lbWNweShwc29jay1cdTAwM2Vjb3JrLCBtc2csIHNpemVvZigqbXNnKSk7XG4mIzQzO1x0XHRpZiAocHNvY2stXHUwMDNlY29yayAhPSBtc2cpIHtcbiYjNDM7XHRcdFx0c2tfbXNnX3hmZXJfZnVsbChwc29jay1cdTAwM2Vjb3JrLCBtc2cpO1xuJiM0MztcdFx0XHQqY29ya2VkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtNDk1LDE0ICYjNDM7NTAzLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuIFx0XHRcdGludCBmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7XG4gXG4tXHRcdFx0aWYgKCFjb3JrKVxuJiM0MztcdFx0XHRpZiAoY29yaylcbiYjNDM7XHRcdFx0XHQqY29waWVkIC09IG1pbl90KHUzMiwgbXNnX2NvcGllZCwgZnJlZSk7XG4mIzQzO1x0XHRcdGVsc2VcbiBcdFx0XHRcdCpjb3BpZWQgLT0gZnJlZTtcbiBcdFx0fVxuIFx0XHRpZiAoY29yaykge1xuIFx0XHRcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuIFx0XHRcdGtmcmVlKG1zZyk7XG4gXHRcdFx0bXNnID0gTlVMTDtcbi1cdFx0XHRyZXQgPSAwO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBfX1NLX0RST1A6XG5AQCAtNTM0LDYgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRzdHJ1Y3Qgc2tfbXNnIHRtcCwgKm1zZ190eCA9IE5VTEw7XG4gXHRpbnQgY29waWVkID0gMCwgZXJyID0gMCwgcmV0ID0gMDtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4mIzQzO1x0dTMyIG1zZ19jb3BpZWQgPSAwO1xuIFx0bG9uZyB0aW1lbztcbiBcdGludCBmbGFncztcbiBcbkBAIC01NDgsNyAmIzQzOzU1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdGxvY2tfc29jayhzayk7XG4gXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXHR3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpKSB7XG4tXHRcdGJvb2wgZW5vc3BjID0gZmFsc2U7XG4mIzQzO1x0XHRib29sIGNvcmtlZCA9IGZhbHNlLCBlbm9zcGMgPSBmYWxzZTtcbiBcdFx0dTMyIGNvcHksIG9zaXplO1xuIFxuIFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG5AQCAtNTYwLDkgJiM0Mzs1NzAsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpXG4gXHRcdFx0Z290byB3YWl0X2Zvcl9zbmRidWY7XG4gXHRcdGlmIChwc29jay1cdTAwM2Vjb3JrKSB7XG4mIzQzO1x0XHRcdGlmIChtc2dfdHggIT0gcHNvY2stXHUwMDNlY29yaylcbiYjNDM7XHRcdFx0XHRtc2dfY29waWVkID0gMDtcbiBcdFx0XHRtc2dfdHggPSBwc29jay1cdTAwM2Vjb3JrO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1zZ190eCA9IFx1MDAyNnRtcDtcbiYjNDM7XHRcdFx0bXNnX2NvcGllZCA9IDA7XG4gXHRcdFx0c2tfbXNnX2luaXQobXNnX3R4KTtcbiBcdFx0fVxuIFxuQEAgLTU3OSwxMCAmIzQzOzU5MiwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0XHRcdCAgICAgICBjb3B5KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRcdHNrX21zZ190cmltKHNrLCBtc2dfdHgsIG9zaXplKTtcbiYjNDM7XHRcdFx0ZXJyID0gcmV0O1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuIFxuIFx0XHRjb3BpZWQgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdG1zZ19jb3BpZWQgJiM0Mzs9IHJldDtcbiBcdFx0aWYgKHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMpIHtcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgcHNvY2stXHUwMDNlY29ya19ieXRlcylcbiBcdFx0XHRcdHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xuQEAgLTU5NSwyMSAmIzQzOzYxMCwyMyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0cHNvY2stXHUwMDNlY29ya19ieXRlcyA9IDA7XG4gXHRcdH1cbiBcbi1cdFx0ZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsIFx1MDAyNmNvcGllZCwgZmxhZ3MpO1xuJiM0MztcdFx0ZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsIFx1MDAyNmNvcGllZCxcbiYjNDM7XHRcdFx0XHRcdCAgIG1zZ19jb3BpZWQsIFx1MDAyNmNvcmtlZCwgZmxhZ3MpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSlcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHRpZiAoY29ya2VkKVxuJiM0MztcdFx0XHRtc2dfdHggPSBwc29jay1cdTAwM2Vjb3JrO1xuIFx0XHRjb250aW51ZTtcbiB3YWl0X2Zvcl9zbmRidWY6XG4gXHRcdHNldF9iaXQoU09DS19OT1NQQUNFLCBcdTAwMjZzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIHdhaXRfZm9yX21lbW9yeTpcbiBcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcdTAwMjZ0aW1lbyk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRpZiAobXNnX3R4IFx1MDAyNlx1MDAyNiBtc2dfdHggIT0gcHNvY2stXHUwMDNlY29yaylcbi1cdFx0XHRcdHNrX21zZ19mcmVlKHNrLCBtc2dfdHgpO1xuJiM0MztcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdH1cbiBcdH1cbiBvdXRfZXJyOlxuJiM0MztcdGlmIChtc2dfdHggPT0gXHUwMDI2dG1wKVxuJiM0MztcdFx0c2tfbXNnX2ZyZWUoc2ssIG1zZ190eCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRlcnIgPSBza19zdHJlYW1fZXJyb3Ioc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MsIGVycik7XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCB0byBmaXggY29ya2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBhc3NpZ25lZCB0byB0aGUgc29ja2V0IHByb3RvY29sIG9wZXJhdGlvbnMgdmlhIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNWY3NmRmMDQyMGU5NGY4NTExMWYwZmU4YWQ5M2Q2MWMzMmRiMTkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjA6MTQ6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmMKaW5kZXggOGU5MDViNTBkZWFkYmUuLmZiYjExYjVhYmNkNDYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2JwZi5jCkBAIC00MTYsNyAmIzQzOzQxNiw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogfQogCiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKLQkJCQlzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpCiYjNDM7CQkJCXN0cnVjdCBza19tc2cgKm1zZywgaW50ICpjb3BpZWQsCiYjNDM7CQkJCXUzMiBtc2dfY29waWVkLCBib29sICpjb3JrZWQsCiYjNDM7CQkJCWludCBmbGFncykKIHsKIAlib29sIGNvcmsgPSBmYWxzZSwgZW5vc3BjID0gc2tfbXNnX2Z1bGwobXNnKSwgcmVkaXJfaW5ncmVzczsKIAlzdHJ1Y3Qgc29jayAqc2tfcmVkaXI7CkBAIC00NDMsMTIgJiM0Mzs0NDUsMTggQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCiAJCQlwc29jay0mZ3Q7Y29yayA9IGt6YWxsb2Nfb2JqKCpwc29jay0mZ3Q7Y29yaywKIAkJCQkJCSAgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCQlpZiAoIXBzb2NrLSZndDtjb3JrKSB7Ci0JCQkJc2tfbXNnX2ZyZWUoc2ssIG1zZyk7Ci0JCQkJKmNvcGllZCA9IDA7CiYjNDM7CQkJCWludCBmcmVlOwomIzQzOwomIzQzOwkJCQlwc29jay0mZ3Q7Y29ya19ieXRlcyA9IDA7CiYjNDM7CQkJCWZyZWUgPSBza19tc2dfZnJlZShzaywgbXNnKTsKJiM0MzsJCQkJKmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQl9Ci0JCW1lbWNweShwc29jay0mZ3Q7Y29yaywgbXNnLCBzaXplb2YoKm1zZykpOwomIzQzOwkJaWYgKHBzb2NrLSZndDtjb3JrICE9IG1zZykgewomIzQzOwkJCXNrX21zZ194ZmVyX2Z1bGwocHNvY2stJmd0O2NvcmssIG1zZyk7CiYjNDM7CQkJKmNvcmtlZCA9IHRydWU7CiYjNDM7CQl9CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDk1LDE0ICYjNDM7NTAzLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCQlpZiAodW5saWtlbHkocmV0ICZsdDsgMCkpIHsKIAkJCWludCBmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7CiAKLQkJCWlmICghY29yaykKJiM0MzsJCQlpZiAoY29yaykKJiM0MzsJCQkJKmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpOwomIzQzOwkJCWVsc2UKIAkJCQkqY29waWVkIC09IGZyZWU7CiAJCX0KIAkJaWYgKGNvcmspIHsKIAkJCXNrX21zZ19mcmVlKHNrLCBtc2cpOwogCQkJa2ZyZWUobXNnKTsKIAkJCW1zZyA9IE5VTEw7Ci0JCQlyZXQgPSAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgX19TS19EUk9QOgpAQCAtNTM0LDYgJiM0Mzs1NDMsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJc3RydWN0IHNrX21zZyB0bXAsICptc2dfdHggPSBOVUxMOwogCWludCBjb3BpZWQgPSAwLCBlcnIgPSAwLCByZXQgPSAwOwogCXN0cnVjdCBza19wc29jayAqcHNvY2s7CiYjNDM7CXUzMiBtc2dfY29waWVkID0gMDsKIAlsb25nIHRpbWVvOwogCWludCBmbGFnczsKIApAQCAtNTQ4LDcgJiM0Mzs1NTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJbG9ja19zb2NrKHNrKTsKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJd2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkgewotCQlib29sIGVub3NwYyA9IGZhbHNlOwomIzQzOwkJYm9vbCBjb3JrZWQgPSBmYWxzZSwgZW5vc3BjID0gZmFsc2U7CiAJCXUzMiBjb3B5LCBvc2l6ZTsKIAogCQlpZiAoc2stJmd0O3NrX2VycikgewpAQCAtNTYwLDkgJiM0Mzs1NzAsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCiAJCQlnb3RvIHdhaXRfZm9yX3NuZGJ1ZjsKIAkJaWYgKHBzb2NrLSZndDtjb3JrKSB7CiYjNDM7CQkJaWYgKG1zZ190eCAhPSBwc29jay0mZ3Q7Y29yaykKJiM0MzsJCQkJbXNnX2NvcGllZCA9IDA7CiAJCQltc2dfdHggPSBwc29jay0mZ3Q7Y29yazsKIAkJfSBlbHNlIHsKIAkJCW1zZ190eCA9ICZhbXA7dG1wOwomIzQzOwkJCW1zZ19jb3BpZWQgPSAwOwogCQkJc2tfbXNnX2luaXQobXNnX3R4KTsKIAkJfQogCkBAIC01NzksMTAgJiM0Mzs1OTIsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJCQkgICAgICAgY29weSk7CiAJCWlmIChyZXQgJmx0OyAwKSB7CiAJCQlza19tc2dfdHJpbShzaywgbXNnX3R4LCBvc2l6ZSk7CiYjNDM7CQkJZXJyID0gcmV0OwogCQkJZ290byBvdXRfZXJyOwogCQl9CiAKIAkJY29waWVkICYjNDM7PSByZXQ7CiYjNDM7CQltc2dfY29waWVkICYjNDM7PSByZXQ7CiAJCWlmIChwc29jay0mZ3Q7Y29ya19ieXRlcykgewogCQkJaWYgKHNpemUgJmd0OyBwc29jay0mZ3Q7Y29ya19ieXRlcykKIAkJCQlwc29jay0mZ3Q7Y29ya19ieXRlcyA9IDA7CkBAIC01OTUsMjEgJiM0Mzs2MTAsMjMgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJcHNvY2stJmd0O2NvcmtfYnl0ZXMgPSAwOwogCQl9CiAKLQkJZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsICZhbXA7Y29waWVkLCBmbGFncyk7CiYjNDM7CQllcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgJmFtcDtjb3BpZWQsCiYjNDM7CQkJCQkgICBtc2dfY29waWVkLCAmYW1wO2NvcmtlZCwgZmxhZ3MpOwogCQlpZiAodW5saWtlbHkoZXJyICZsdDsgMCkpCiAJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQlpZiAoY29ya2VkKQomIzQzOwkJCW1zZ190eCA9IHBzb2NrLSZndDtjb3JrOwogCQljb250aW51ZTsKIHdhaXRfZm9yX3NuZGJ1ZjoKIAkJc2V0X2JpdChTT0NLX05PU1BBQ0UsICZhbXA7c2stJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwogd2FpdF9mb3JfbWVtb3J5OgogCQllcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssICZhbXA7dGltZW8pOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAobXNnX3R4ICZhbXA7JmFtcDsgbXNnX3R4ICE9IHBzb2NrLSZndDtjb3JrKQotCQkJCXNrX21zZ19mcmVlKHNrLCBtc2dfdHgpOwomIzQzOwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2VycjsKLQkJfQogCX0KIG91dF9lcnI6CiYjNDM7CWlmIChtc2dfdHggPT0gJmFtcDt0bXApCiYjNDM7CQlza19tc2dfZnJlZShzaywgbXNnX3R4KTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJZXJyID0gc2tfc3RyZWFtX2Vycm9yKHNrLCBtc2ctJmd0O21zZ19mbGFncywgZXJyKTsKIAlyZWxlYXNlX3NvY2soc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTAyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipFeGFtaW5pbmcgYSBUQ1AgQlBGIFBhdGNoKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiB0aGUgc2VuZCBwYXRoLCBzcGVjaWZpY2FsbHkgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgaXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBrbm93biBpc3N1ZXMgcmVsYXRlZCB0byBjb3JraW5nIGJlaGF2aW9yIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHRjcF9icGZfc2VuZG1zZ2AuIE5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcsIGJ1dCBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY29kZSB0aGF0IHJlcXVpcmVzIGEgY2xvc2UgbG9vaywgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBpbiB0aGUgY3JpdGljYWwgbmV0d29yayBwYXRoLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIHN0YWJpbGl6ZSBvciBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIEJQRiBwcm9ncmFtcyB0aGF0IGludGVyYWN0IHdpdGggVENQIHNlbmRzLiBUaGUgY2hhbmdlcyBtaWdodCBpbmNsdWRlIGNvcnJlY3RpbmcgZXhpc3RpbmcsIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSBpdHNlbGYsIEkgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkIG9yIGVuYWJsZWQgdG8gZ2V0IHRoaXMgYG5ldC9pcHY0L3RjcF9icGYuY2AgZnVuY3Rpb25hbGl0eSB3b3JraW5nLiBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBkb3duIGNvZGUgcGF0aHMgdGhhdCBhcmVuJiMzOTt0IGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaW1lIHRvIGNoZWNrIHRoZSBgLmNvbmZpZ2AgZmlsZSBvciByZWxhdGVkIGJ1aWxkIHN5c3RlbSBjb25maWd1cmF0aW9ucyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgdGhhdCB0aGUgQlBGIGZ1bmN0aW9uYWxpdHkgaGFzIGEgZGVwZW5kZW5jeSBvbiBjZXJ0YWluIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgJiM0Mzs9IHRjcF9pbGxpbm9pcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSAmIzQzOz0gdGNwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB1ZHBfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXM6IGBDT05GSUdfTkVUX1NPQ0tfTVNHYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgYWx3YXlzIHdoZW4gbmF2aWdhdGluZyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIG1ldGljdWxvdXNseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBwcmVyZXF1aXNpdGVzIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgcGFydGljdWxhciBvcHRpb24gdG8gZXZlbiBiZSB2aWFibGUuIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgdG8gYXNjZXJ0YWluIGl0cyBzdXBwb3J0aW5nIG1vZHVsZXMsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZXF1aXJlbWVudHMsIGFuZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvciBjb25zdHJhaW4gaXRzIGF2YWlsYWJpbGl0eS4gSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcbi0tXG5uZXQvS2NvbmZpZy00NzgtXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctNDgwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgcHJpb3IgZXhwZXJpZW5jZSBhbmQgd2hlcmUgSSBnZW5lcmFsbHkgc2VlIGNvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGFuZGxlZCwgbGluZSA0Nzkgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0JiMzOTtzIGxpa2VseSB3aXRoaW4gYSByZWxldmFudCBzZWN0aW9uIGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIHByb3RvY29sLCBmZWF0dXJlIHNldCwgb3IgZHJpdmVyLCBnaXZlbiB0aGUgY29udGV4dCBvZiBgbmV0L2AuIEkgYW50aWNpcGF0ZSB0aGF0IEkmIzM5O2xsIGxpa2VseSBmaW5kIGVpdGhlciBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwgYW4gb3B0aW9uIGRlY2xhcmF0aW9uLCBvciBwZXJoYXBzIGEgY29tbWVudCB0aGF0IGxpbmtzIGludG8gYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdFx0Ym9vbFxuIDQ3MTpcdFxuIDQ3MjpcdGNvbmZpZyBORVRfSUVFRTgwMjFRX0hFTFBFUlNcbiA0NzM6XHRcdGJvb2xcbiA0NzQ6XHRcbiA0NzU6XHRjb25maWcgTkVUX1NFTEZURVNUU1xuIDQ3NjpcdFx0ZGVmX3RyaXN0YXRlIFBIWUxJQlxuIDQ3NzpcdFx0ZGVwZW5kcyBvbiBQSFlMSUIgXHUwMDI2XHUwMDI2IElORVRcbiA0Nzg6XHRcbiA0Nzk6XHRjb25maWcgTkVUX1NPQ0tfTVNHXG4gNDgwOlx0XHRib29sXG4gNDgxOlx0XHRkZWZhdWx0IG5cbiA0ODI6XHRcdGhlbHBcbiA0ODM6XHRcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXG4gNDg0Olx0XHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcbiA0ODU6XHRcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXG4gNDg2Olx0XG4gNDg3Olx0Y29uZmlnIE5FVF9ERVZMSU5LXG4gNDg4Olx0XHRib29sXG4gNDg5Olx0XHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlVudmVpbGluZyB0aGUgU2VsZWN0aW9uIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBgTkVUX1NPQ0tfTVNHYCBpcyBiZWhhdmluZyBsaWtlIGEgaGlkZGVuIG9wdGlvbi4gSXQmIzM5O3MgY2xlYXJseSBiZWluZyBzZWxlY3RlZCwgb3IgZW5hYmxlZCwgYnkgc29tZSBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG9yIGJ1aWxkIHByb2Nlc3Mgc29tZXdoZXJlLCBidXQgbm90IGRpcmVjdGx5LiBUaGF0JiMzOTtzIGFsd2F5cyBhIGZ1biBjaGFsbGVuZ2Ug4oCTIGNoYXNpbmcgZG93biBkZXBlbmRlbmNpZXMhIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIHNlbGVjdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgTkVUX1NPQ0tfTVNHYCBhbmQgc2VlIHdoYXQmIzM5O3MgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBlbmFibGluZyBpdC4gSXMgaXQgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgc2V0LCBhIG1vZHVsZSBkZXBlbmRlbmN5LCBvciBtYXliZSBldmVuIGEgbWFjcm8gZGVmaW5pdGlvbj8gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzIGFuZCBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGJ1aWxkIHNjcmlwdHMuIExldCYjMzk7cyBnZXQgdGhpcyB1bnJhdmVsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzMtXHRzZWxlY3QgQklOQVJZX1BSSU5URlxua2VybmVsL2JwZi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuLS1cbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZzozODY6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEludGVyYWN0aW9uIHdpdGggVENQIFNlbmQgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgQmVya2VsZXkgUGFja2V0IEZpbHRlcnMgKEJQRikgaW50ZXJhY3Qgd2l0aCBUQ1Agc2VuZCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBCUEZfU1lTQ0FMTGAgd2l0aCB0aGUgYE5FVGAgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIEl0IHNlZW1zIHRoYXQgdGhpcyBzZWxlY3Rpb24gaGFzIGxlZCBtZSB0byBpbnZlc3RpZ2F0ZSBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgc2hvdWxkIHJlc2lkZSB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIExldCYjMzk7cyBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCBzbyBub3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhcmUgdGhleSBzdGF0aWMgb3IgZ2xvYmFsPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgY2FsbGVkIGFuZCBpZiB0aGV5IGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhlIGdpdCBkaWZmIGNvbmZpcm1zIGB0Y3BfYnBmX3NlbmRtc2dgIGlzIHN0YXRpYy4gVGhhdCBtZWFucyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBmdW5jdGlvbiBmcm9tIG91dHNpZGUgdGhpcyBmaWxlIGlzIHJlc3RyaWN0ZWQuIE5vdywgdGhpcyByYWlzZXMgYSBmbGFnLCBpdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kIGlmIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGNhbGwgaXQgd2l0aGluIHRoZSBzYW1lIGZpbGUgb3IgaWYgdGhlIGZ1bmN0aW9uIGlzIGFzc2lnbmVkIHRvIHNvbWUgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgYG5ldC9pcHY0L3RjcF9icGYuY2AgdG8gZ2FpbiBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbGluZyBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ny19XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5My1cdFx0b3JpZ3NpemUgPSBtc2ctXHUwMDNlc2cuc2l6ZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo0OTQ6XHRcdHJldCA9IHRjcF9icGZfc2VuZG1zZ19yZWRpcihza19yZWRpciwgcmVkaXJfaW5ncmVzcyxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTUtXHRcdFx0XHRcdCAgICBtc2csIHRvc2VuZCwgZmxhZ3MpO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy01NDAtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTQxOnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcF9icGYuYy01NDIte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02NTU9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY1LVx0cHJvdFtUQ1BfQlBGX1RYXVx0XHRcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY2NjpcdHByb3RbVENQX0JQRl9UWF0uc2VuZG1zZ1x0XHQ9IHRjcF9icGZfc2VuZG1zZztcbm5ldC9pcHY0L3RjcF9icGYuYy02NjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MTEKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgU2VuZG1zZyBIb29rKioKCk9rYXksIHNvIEkgc2VlIGB0Y3BfYnBmX3NlbmRtc2dgIGlzIGdldHRpbmcgaG9va2VkIGludG8gdGhlIGBUQ1BfQlBGX1RYYCBwcm90b2NvbCwgc3BlY2lmaWNhbGx5IG1hcHBlZCB0byBgcHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnYC4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gVGhpcyBtZWFucywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgdGhhdCB3aGVuZXZlciBhIFRDUCBzb2NrZXQgaXMgYWJvdXQgdG8gc2VuZCBhIG1lc3NhZ2UsIHRoaXMgZnVuY3Rpb24sIGB0Y3BfYnBmX3NlbmRtc2dgLCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGhhcHBlbmluZyB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEkgbmVlZCBhIHF1aWNrIG92ZXJ2aWV3LiBXaGF0IGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBiZXNpZGVzIHRoZSBvYnZpb3VzbHkgaW1wb3J0YW50IGB0Y3BfYnBmX3NlbmRtc2dgPyBBcmUgdGhlcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGZpbHRlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZXJyb3IgaGFuZGxpbmcsIG90aGVyIGtleSBwb2ludHM/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBCUEYmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVENQIHN0YWNrIGR1cmluZyB0cmFuc21pc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jLTE0LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1OnZvaWQgdGNwX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MTUzPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2NDppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY1MT1zdGF0aWMgc3RydWN0IHByb3RvICp0Y3B2Nl9wcm90X3NhdmVkIF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02NTMtc3RhdGljIHN0cnVjdCBwcm90byB0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfTlVNX1BST1RTXVtUQ1BfQlBGX05VTV9DRkdTXTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njk0PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MDQtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjcwNTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy03MDYtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NDA6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0MS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc3Nz1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc4My0gKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3ODQ6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgVXBkYXRlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgY29kZSByZWxhdGVkIHRvIFRDUCwgYW5kIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUgYXMgYSBsaWtlbHkgY3J1Y2lhbCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHVwZGF0aW5nIHRoZSBwcm90b2NvbCB3aXRoaW4gdGhlIGB0Y3BfYnBmX3Byb3RzYCBzdHJ1Y3R1cmUsIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyBjZW50cmFsaXR5LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGEgc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcCBmdXJ0aGVyIGNlbWVudHMgaXRzIGltcG9ydGFuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgZGVmaW5pdGVseSBhIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBhbHNvIG5vdGluZyB0aGF0IGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIGFzIHdlbGwsIHdoaWNoIGlzIGhlbHBmdWwgdG8ga2VlcCBpbiBtaW5kLiBOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRldGVybWluZSBwcmVjaXNlbHkgd2hlcmUgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpcyBiZWluZyBjYWxsZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgVENQIEJQRiBpbXBsZW1lbnRhdGlvbi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI4Mzg9c3RydWN0IHNrX3Bzb2NrO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4NDAtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg0MTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjg0Mi12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NDA6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0MS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3Ni19XG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzc3OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcbm5ldC9pcHY0L3RjcF9icGYuYy03NzgtXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQzPXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzY5Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzcwLSNlbmRpZlxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMDEtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjg5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmcsIG1heWJlIGRlYnVnZ2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlOgoKKipUcmFjaW5nIFByb3RvY29sIFVwZGF0ZXMgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIFRDUCBCUEYgcHJvZ3JhbSBnZXRzIHVwZGF0ZWQuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHRoaXMsIGJ1dCB0aGUgYWN0dWFsIGNhbGwgdG8gaXQgaXMgcm91dGVkIHRocm91Z2ggYHBzb2NrX3VwZGF0ZV9za19wcm90YC4gU28sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgYmVpbmcgaW52b2tlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIsIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90b2NvbCB1cGRhdGUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgYmVoYXZpb3IuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgcHNvY2tfdXBkYXRlX3NrX3Byb3RgIGlzIGdvaW5nIHRvIHNoZWQgbGlnaHQgb24gd2hhdCYjMzk7cyBkcml2aW5nIHRoZSBjYWxsIHRvIHVwZGF0ZSB0aGUgQlBGIHByb2dyYW0sIGFuZCB1bHRpbWF0ZWx5LCB3aHkgdGhlIG9ic2VydmVkIGJlaGF2aW9yIGlzIGhhcHBlbmluZy4gVGltZSB0byBnbyBodW50aW5nIGZvciBjYWxsIHNpdGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc29ja191cGRhdGVfc2tfcHJvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrbXNnLmg9ODQ9c3RydWN0IHNrX3Bzb2NrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtMTExLVx0dm9pZCAoKnNhdmVkX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6MTEyOlx0LyogcHNvY2tfdXBkYXRlX3NrX3Byb3QgbWF5IGJlIGNhbGxlZCB3aXRoIHJlc3RvcmU9ZmFsc2UgbWFueSB0aW1lc1xuaW5jbHVkZS9saW51eC9za21zZy5oLTExMy1cdCAqIHNvIHRoZSBoYW5kbGVyIG11c3QgYmUgc2FmZSBmb3IgdGhpcyBjYXNlLiBJdCB3aWxsIGJlIGNhbGxlZFxuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaC0xMTYtXHQgKi9cbmluY2x1ZGUvbGludXgvc2ttc2cuaDoxMTc6XHRpbnQgICgqcHNvY2tfdXBkYXRlX3NrX3Byb3QpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC0xMTgtXHRcdFx0XHQgICAgIGJvb2wgcmVzdG9yZSk7XG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oPTQ4OD1zdGF0aWMgaW5saW5lIHZvaWQgc2tfcHNvY2tfcmVzdG9yZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9saW51eC9za21zZy5oLTQ5MC17XG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NDkxOlx0aWYgKHBzb2NrLVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90KVxuaW5jbHVkZS9saW51eC9za21zZy5oOjQ5MjpcdFx0cHNvY2stXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Qoc2ssIHBzb2NrLCB0cnVlKTtcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00OTMtfVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0xMjkxPXN0cnVjdCBwcm90byB7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTEzNDQtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuaW5jbHVkZS9uZXQvc29jay5oOjEzNDU6XHRpbnRcdFx0XHQoKnBzb2NrX3VwZGF0ZV9za19wcm90KShzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9zb2NrLmgtMTM0Ni1cdFx0XHRcdFx0XHRcdHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xNDI9c3RhdGljIHZvaWQgc29ja19tYXBfZGVsX2xpbmsoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcyLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzM6XHRcdGlmIChwc29jay1cdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdClcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc0Olx0XHRcdHBzb2NrLVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90KHNrLCBwc29jaywgZmFsc2UpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xNzUtXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19jYWxsYmFja19sb2NrKTtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE4OT1zdGF0aWMgaW50IHNvY2tfbWFwX2luaXRfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc29ja19tYXAuYy0xOTAte1xubmV0L2NvcmUvc29ja19tYXAuYzoxOTE6XHRpZiAoIXNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3QpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MzpcdHBzb2NrLVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90ID0gc2stXHUwMDNlc2tfcHJvdC1cdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdDtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk0Olx0cmV0dXJuIHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Qoc2ssIHBzb2NrLCBmYWxzZSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE5NS19XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc29ja19tYXAuYy01Mzcte1xubmV0L2NvcmUvc29ja19tYXAuYzo1Mzg6XHRyZXR1cm4gISFzay1cdTAwM2Vza19wcm90LVx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90O1xubmV0L2NvcmUvc29ja19tYXAuYy01MzktfVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Mz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzY4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2OTpcdC5wc29ja191cGRhdGVfc2tfcHJvdFx0PSB0Y3BfYnBmX3VwZGF0ZV9wcm90byxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3MC0jZW5kaWZcbi0tXG5uZXQvaXB2NC91ZHAuYz0zMTMyPXN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC91ZHAuYy0zMTUzLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3VkcC5jOjMxNTQ6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXG5uZXQvaXB2NC91ZHAuYy0zMTU1LSNlbmRpZlxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIzMDEtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxuLS1cbm5ldC9pcHY2L3VkcC5jPTE4OTU9c3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvdWRwLmMtMTkxNi0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2Ni91ZHAuYzoxOTE3Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVkcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjYvdWRwLmMtMTkxOC0jZW5kaWZcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDE9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY0LVx0LyogRGlzYWJsZSBzb2NrbWFwIHByb2Nlc3NpbmcgZm9yIHN1YmZsb3dzICovXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNjU6XHR0Y3BfcHJvdF9vdmVycmlkZS5wc29ja191cGRhdGVfc2tfcHJvdCA9IE5VTEw7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNjYtI2VuZGlmXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTc1PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxMS1cdC8qIERpc2FibGUgc29ja21hcCBwcm9jZXNzaW5nIGZvciBzdWJmbG93cyAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzoyMjEyOlx0dGNwdjZfcHJvdF9vdmVycmlkZS5wc29ja191cGRhdGVfc2tfcHJvdCA9IE5VTEw7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtI2VuZGlmXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwNjA9c3RydWN0IHByb3RvIHVuaXhfZGdyYW1fcHJvdG8gPSB7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTEwNjYtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L3VuaXgvYWZfdW5peC5jOjEwNjc6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcdD0gdW5peF9kZ3JhbV9icGZfdXBkYXRlX3Byb3RvLFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNjgtI2VuZGlmXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwNzE9c3RydWN0IHByb3RvIHVuaXhfc3RyZWFtX3Byb3RvID0ge1xuLS1cbm5ldC91bml4L2FmX3VuaXguYy0xMDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC91bml4L2FmX3VuaXguYzoxMDc4Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHVuaXhfc3RyZWFtX2JwZl91cGRhdGVfcHJvdG8sXG5uZXQvdW5peC9hZl91bml4LmMtMTA3OS0jZW5kaWZcbi0tXG5uZXQvdW5peC91bml4X2JwZi5jPTE2ND1pbnQgdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvdW5peC91bml4X2JwZi5jLTE3Ny1cbm5ldC91bml4L3VuaXhfYnBmLmM6MTc4Olx0LyogcHNvY2tfdXBkYXRlX3NrX3Byb3QgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiBwc29jayBpc1xubmV0L3VuaXgvdW5peF9icGYuYy0xNzktXHQgKiBhZGRlZCB0byBtdWx0aXBsZSBtYXBzIGFuZC9vciBzbG90cyBpbiB0aGUgc2FtZSBtYXAuIFRoZXJlIGlzXG5uZXQvdW5peC91bml4X2JwZi5jLTE4MC1cdCAqIGFsc28gYW4gZWRnZSBjYXNlIHdoZXJlIHJlcGxhY2luZyBhIHBzb2NrIHdpdGggaXRzZWxmIGNhbiB0cmlnZ2VyXG5uZXQvdW5peC91bml4X2JwZi5jOjE4MTpcdCAqIGFuIGV4dHJhIHBzb2NrX3VwZGF0ZV9za19wcm90IGR1cmluZyB0aGUgaW5zZXJ0IHByb2Nlc3MuIFNvIGl0XG5uZXQvdW5peC91bml4X2JwZi5jLTE4Mi1cdCAqIG11c3QgYmUgc2FmZSB0byBkbyBtdWx0aXBsZSBjYWxscy4gSGVyZSB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3Rcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTg1PXN0cnVjdCBwcm90byB2c29ja19wcm90byA9IHtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTkwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxOTE6XHQucHNvY2tfdXBkYXRlX3NrX3Byb3QgPSB2c29ja19icGZfdXBkYXRlX3Byb3RvLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5Mi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoaXMgYHRjcF9icGZgIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb3JlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHJlcGxhY2luZyB0aGUgc29ja2V0JiMzOTtzIHByb3RvY29sIChgc2stJmd0O3NrX3Byb3RgKSB3aXRoIGEgY3VzdG9tIG9uZSwgc3BlY2lmaWNhbGx5IGB0Y3BfYnBmX3Byb3RzYCwgYW5kIHRoYXQgaGFwcGVucyB3aXRoaW4gYHRjcF9icGZfdXBkYXRlX3Byb3RvYC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi4gVGhlIGltcG9ydGFudCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgLgoKYHRjcF9icGZfc2VuZG1zZ2AgaXMgYXNzaWduZWQgdG8gdGhlIGBzZW5kbXNnYCBtZW1iZXIgb2YgdGhpcyBjdXN0b20gcHJvdG9jb2wgc3RydWN0dXJlLCBgdGNwX2JwZl9wcm90c2AsIGF0IGluZGV4IGBUQ1BfQlBGX1RYYC4gVGhlbiwgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpcyBjYWxsZWQgYnkgYHRjcF9icGZfc2VuZG1zZ2AsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYHRjcF9icGZfc2VuZG1zZ2AgYmVjb21lcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBnZXRzIHRyaWdnZXJlZC4KCldhaXQgYSBzZWNvbmQsIHNpbmNlIGB0Y3BfYnBmX3NlbmRtc2dgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdXNlIHRoYXQgYXMgYSBmb2N1cyBzeW1ib2wsIHdoaWNoIGlzIGEgYml0IGFubm95aW5nLiBIb3dldmVyLCBJIGp1c3QgcmVhbGl6ZWQgdGhhdCBpdCBpcyBhc3NpZ25lZCB0byBgc2VuZG1zZ2Agb2YgdGhlIGB0Y3BfYnBmX3Byb3RzYCBzdHJ1Y3R1cmUuIFNvLCBpZiBhIFRDUCBzb2NrZXQgaXMgYWRkZWQgdG8gYSBzb2NrbWFwLCBhbmQgdGhpcyBwcm90b2NvbCBnZXRzIGFzc2lnbmVkLCB0aGVuIGEgY2FsbCB0byBgc2VuZG1zZ2Agb24gdGhhdCBzb2NrZXQgd2lsbCB1bHRpbWF0ZWx5IGVuZCB1cCBjYWxsaW5nIGB0Y3BfYnBmX3NlbmRtc2dgISBBaGEsIHNvIHRoYXQgbWVhbnMgdGhlIHRyaWdnZXIgY29uZGl0aW9uIGlzIHRvIGFkZCBhIFRDUCBzb2NrZXQgdG8gYSBzb2NrbWFwLCB3aGljaCB0aGVuIGNhbGxzIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuIFRoZW4gY2FsbGluZyBgc2VuZG1zZ2Agb24gdGhlIHNvY2tldCBzaG91bGQgd29yay4KClNvLCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4gVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGlzIGFsc28gcHJvbWlzaW5nLCBzaW5jZSBpdCYjMzk7cyBub24tc3RhdGljIGFuZCBjYWxsZWQgYnkgYHRjcF9icGZfc2VuZF92ZXJkaWN0YC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0xNTM9c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNjMtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTY0OmludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY1LVx0XHRcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc3LX1cbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDkzLVx0XHRvcmlnc2l6ZSA9IG1zZy1cdTAwM2VzZy5zaXplO1xubmV0L2lwdjQvdGNwX2JwZi5jOjQ5NDpcdFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5NS1cdFx0XHRcdFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTU0MC1cbm5ldC9pcHY0L3RjcF9icGYuYzo1NDE6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L2lwdjQvdGNwX2JwZi5jLTU0Mi17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY1NT1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXHRwcm90W1RDUF9CUEZfVFhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY2Olx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXHRcdD0gdGNwX2JwZl9zZW5kbXNnO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIFNlbmQgUGF0aCoqCgpPa2F5LCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCBmZWVscyBsaWtlIGEgZ29vZCBzeW1ib2wgdG8gY2VudGVyIHRoaXMgaW52ZXN0aWdhdGlvbiBhcm91bmQuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYmFzaWM6IGlzIGB0Y3BfYnBmX3NlbmRtc2dgIGEgc3RhdGljIGZ1bmN0aW9uPyBZZXMsIGl0IGFwcGVhcnMgdG8gYmUuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uCgpHaXZlbiB0aGF0IGB0Y3BfYnBmX3NlbmRtc2dgIGlzIHN0YXRpYywgbXkgdG9vbHMgd2lsbCBuZWVkIHRvIGZvY3VzIG9uIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgLiBXaGF0IGFib3V0IHRoZSByZWNlaXZlIHNpZGU/IElzIGB0Y3BfYnBmX3JlY3Ztc2dgIGFsc28gc3RhdGljPyBZZXMsIGl0IGlzLiBBbHJpZ2h0LCB0aGF0IGd1aWRlcyBteSBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuIFRoaXMgcGF0Y2ggc2VlbXMgZGlyZWN0bHkgY29uY2VybmVkIHdpdGggYHRjcF9icGZfc2VuZG1zZ2AgYW5kIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAsIHdoaWNoIG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBidWcgcmVsYXRlZCB0byBjb3JraW5nIGFuZCwgc3BlY2lmaWNhbGx5LCBlcnJvciBoYW5kbGluZy4KClRoaXMgbWVhbnMgdGhlIHByaW1hcnkgZnV6emluZyB0YXJnZXQgKm11c3QqIGJlIGB0Y3BfYnBmX3NlbmRtc2dgLiBOb3csIHNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQgd29uJiMzOTt0IGJlIGluIGFueSBmdW5jdGlvbiBsaXN0LCB3aGljaCBjb21wbGljYXRlcyB0aGUgYXBwcm9hY2guIEhvd2V2ZXIsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgKmlzKiB0aGUgc2V0dXAgZnVuY3Rpb24sIGFuZCBhIGxvdCBvZiBpbXBvcnRhbnQgZGF0YSBwYXNzZXMgdGhyb3VnaCBpdC4gU28sIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHZpYWJsZSBlbnRyeSBwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHNjYW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgZm9yIGFueSAqb3RoZXIqIGV4cG9ydGVkIGZ1bmN0aW9ucy4gWW91IG5ldmVyIGtub3cgd2hhdCBtaWdodCBiZSBsdXJraW5nIGluIHRoZXJlIHRoYXQgY291bGQgZXhwb3NlIHNvbWV0aGluZyB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTE2ND1pbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxubmV0L2lwdjQvdGNwX2JwZi5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzQwPWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzc2LX1cbm5ldC9pcHY0L3RjcF9icGYuYzo3Nzc6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl91cGRhdGVfcHJvdG8pO1xubmV0L2lwdjQvdGNwX2JwZi5jLTc3OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIEJQRiBIb29rIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgaG9va3MuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb25lcyB3ZSBjYW4gd29yayB3aXRoIGhlcmUgYXJlIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGFuZCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBXZSBjYW4gbGV2ZXJhZ2UgYm90aCBvZiB0aG9zZS4gSSBoYWQgYSBxdWljayB0aG91Z2h0IGFib3V0IGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYnV0IHVwb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGF0IGRvZXNuJiMzOTt0IHNlZW0gZGlyZWN0bHkgcmVsYXRlZCB0byBzZW5kbXNnLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuIEkgYWxzbyBjaGVja2VkIGB0Y3BfYnBmX2Nsb25lYCwgaXQgaXMgbm90IHN0YXRpYywgYnV0IHVsdGltYXRlbHksIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgbG9va3MgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgb2YgdGhlIGJ1bmNoLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgdGhlIGhvb2tzIGFyZSBlbmFibGVkLiBJJiMzOTt2ZSBmb3VuZCB0aGF0IGBORVRfU09DS19NU0dgIGlzIHNlbGVjdGVkIGJ5IGBCUEZfU1lTQ0FMTGAgaWYgYE5FVGAgaXMgYWxzbyBlbmFibGVkLiBUaGF0IG1lYW5zIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZyB3ZSBuZWVkLiBgTkVUYCBpcyBvYnZpb3VzbHkgYSBiYXNlIHJlcXVpcmVtZW50LCBidXQgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUga2V5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5vdWdoLCB0aG91Z2guCgpSaWdodCwgYEJQRl9TWVNDQUxMYCAqZG9lcyogc2VsZWN0IGBORVRfU09DS19NU0dgIGlmIGBORVRgIGlzIHNldC4gT2theSwgdGhhdCBsb29rcyBzb2xpZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQWZ0ZXIgYSBxdWljayBsb29rIGF0IGB0Y3BfYnBmLmNgLCB0aGUgZmlsZSBpdHNlbGYgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgc2V0LCBzbyB3ZSBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrISBFc3NlbnRpYWxseSwgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG5lZWRlZC4KCk9uZSBsYXN0IHRoaW5nLCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIHJlYWwgcXVpY2ssIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXkgYXJlIG5vdCBoaWRkZW4gaW5zaWRlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBTbywgaXQgbG9va3MgbGlrZSBgdGNwX2JwZl9zZW5kbXNnYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBkZWZpbmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXaGF0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhIHJlc3VsdD8KCk15IG5leHQgc3RlcCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSwgaXMgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSB0aGF0IGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBibG9jayBjbG9zZXMuIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBXaGVyZSBkb2VzIGl0IHN0YXJ0LCBhbmQgd2hlcmUgZG9lcyBpdCBlbmQ/IEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBzdHJ1Y3R1cmVzLCBvciBkYXRhIHBhdGhzIHRoYXQgYXJlIGFsc28gZ3VhcmRlZCBieSB0aGlzIG9wdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2UgYW5kIGltcGFjdCBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBvbiBCUEYgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFRDUCBzdGFjay4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgdml0YWwgZm9yIGEgZGVlcGVyLCBtb3JlIGluZm9ybWVkIGFuYWx5c2lzLiBJIG5lZWQgdG8gc2VlIHRoZSAqd2hvbGUqIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VuZGlmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz03MDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczNy19XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzM4OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIgKi9cbm5ldC9pcHY0L3RjcF9icGYuYy03MzktXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTc4ND12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc5MC19XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzkxOiNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNDAKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgQlBGIENvZGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZXhhbWluZWQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gbGluZXMgMTgwIHRocm91Z2ggNzkxLiBJdCYjMzk7cyBhbGwgbmVzdGxlZCBuZWF0bHkgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCBibG9jaywgd2hpY2ggbWVhbnMgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoYXQmIzM5O3Mgb3VyIHByaW1hcnkgY29uZmlndXJhdGlvbiB0byBub3RlLCB0aGUgb25seSBvbmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMuIEkgc2VlIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGFyZSB0aGUgcHJvbWluZW50IGZ1bmN0aW9uIG5hbWVzIHRvIGNvbnNpZGVyLiBIbW0sIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjay4uLiBZZXMsIGB0Y3BfYnBmX2Nsb25lYCBpcyBhbHNvIG5vbi1zdGF0aWMsIGJ1dCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byBzZXQgdXAgdGhlIHByb3RvY29sIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCBpcyBpbXBvcnRhbnQgYXMgd2VsbC4KCkFscmlnaHQsIGxldCYjMzk7cyBleHBsb3JlIGlmIGB0Y3BfYnBmX3NlbmRtc2dgIGNhbiBiZSB0cmlnZ2VyZWQuIEFoLCB5ZXMhIFdlIGNhbiByZWFjaCBgdGNwX2JwZl9zZW5kbXNnYCBieSBhZGRpbmcgYSBzb2NrZXQgdG8gYSBzb2NrbWFwIGFuZCB0aGVuIGNhbGxpbmcgYHNlbmRtc2dgLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgQlBGIHNjZW5hcmlvLiBUaGF0IG1lYW5zIHRoaXMgY29kZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUgaGVyZS4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZyBpbiBhIG51dHNoZWxsOiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEl0JiMzOTtzIGZpeGluZyBpc3N1ZXMgYXJvdW5kIGNvcmtpbmcgYW5kIGVycm9yIGhhbmRsaW5nLCB3aGljaCBkaXJlY3RseSBpbXBhY3RzIGNvcmUga2VybmVsIGxvZ2ljIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuCk15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgYW5kIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgLgpBbmQgd2UgaGF2ZSBqdXN0IG9uZSByZWxldmFudCBjb25maWcgdG8gY29uc2lkZXI6IGBCUEZfU1lTQ0FMTGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfdXBkYXRlX3Byb3RvJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCB0byBmaXggY29ya2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGZvciBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBhc3NpZ25lZCB0byB0aGUgc29ja2V0IHByb3RvY29sIG9wZXJhdGlvbnMgdmlhIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl91cGRhdGVfcHJvdG8mIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnX3JlZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI0LjEyOTU0Njg0OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTIyMjY1NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTQ6MjQuMTI5NTU1OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQ0MjIwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNWY3NmRmMDQyMGU5NGY4NTExMWYwZmU4YWQ5M2Q2MWMzMmRiMTkxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDIwOjE0OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbmluZGV4IDhlOTA1YjUwZGVhZGJlLi5mYmIxMWI1YWJjZDQ2MyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5AQCAtNDE2LDcgKzQxNiw5IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbitcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLFxcbitcXHRcXHRcXHRcXHR1MzIgbXNnX2NvcGllZCwgYm9vbCAqY29ya2VkLFxcbitcXHRcXHRcXHRcXHRpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0Ym9vbCBjb3JrID0gZmFsc2UsIGVub3NwYyA9IHNrX21zZ19mdWxsKG1zZyksIHJlZGlyX2luZ3Jlc3M7XFxuIFxcdHN0cnVjdCBzb2NrICpza19yZWRpcjtcXG5AQCAtNDQzLDEyICs0NDUsMTggQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuIFxcdFxcdFxcdHBzb2NrLVxcdTAwM2Vjb3JrID0ga3phbGxvY19vYmooKnBzb2NrLVxcdTAwM2Vjb3JrLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRcXHRcXHRpZiAoIXBzb2NrLVxcdTAwM2Vjb3JrKSB7XFxuLVxcdFxcdFxcdFxcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xcbi1cXHRcXHRcXHRcXHQqY29waWVkID0gMDtcXG4rXFx0XFx0XFx0XFx0aW50IGZyZWU7XFxuK1xcbitcXHRcXHRcXHRcXHRwc29jay1cXHUwMDNlY29ya19ieXRlcyA9IDA7XFxuK1xcdFxcdFxcdFxcdGZyZWUgPSBza19tc2dfZnJlZShzaywgbXNnKTtcXG4rXFx0XFx0XFx0XFx0KmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdG1lbWNweShwc29jay1cXHUwMDNlY29yaywgbXNnLCBzaXplb2YoKm1zZykpO1xcbitcXHRcXHRpZiAocHNvY2stXFx1MDAzZWNvcmsgIT0gbXNnKSB7XFxuK1xcdFxcdFxcdHNrX21zZ194ZmVyX2Z1bGwocHNvY2stXFx1MDAzZWNvcmssIG1zZyk7XFxuK1xcdFxcdFxcdCpjb3JrZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC00OTUsMTQgKzUwMywxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuIFxcdFxcdFxcdGludCBmcmVlID0gc2tfbXNnX2ZyZWUoc2ssIG1zZyk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWNvcmspXFxuK1xcdFxcdFxcdGlmIChjb3JrKVxcbitcXHRcXHRcXHRcXHQqY29waWVkIC09IG1pbl90KHUzMiwgbXNnX2NvcGllZCwgZnJlZSk7XFxuK1xcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0KmNvcGllZCAtPSBmcmVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChjb3JrKSB7XFxuIFxcdFxcdFxcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xcbiBcXHRcXHRcXHRrZnJlZShtc2cpO1xcbiBcXHRcXHRcXHRtc2cgPSBOVUxMO1xcbi1cXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIF9fU0tfRFJPUDpcXG5AQCAtNTM0LDYgKzU0Myw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c3RydWN0IHNrX21zZyB0bXAsICptc2dfdHggPSBOVUxMO1xcbiBcXHRpbnQgY29waWVkID0gMCwgZXJyID0gMCwgcmV0ID0gMDtcXG4gXFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcXG4rXFx0dTMyIG1zZ19jb3BpZWQgPSAwO1xcbiBcXHRsb25nIHRpbWVvO1xcbiBcXHRpbnQgZmxhZ3M7XFxuIFxcbkBAIC01NDgsNyArNTU4LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRsb2NrX3NvY2soc2spO1xcbiBcXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gXFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xcbi1cXHRcXHRib29sIGVub3NwYyA9IGZhbHNlO1xcbitcXHRcXHRib29sIGNvcmtlZCA9IGZhbHNlLCBlbm9zcGMgPSBmYWxzZTtcXG4gXFx0XFx0dTMyIGNvcHksIG9zaXplO1xcbiBcXG4gXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG5AQCAtNTYwLDkgKzU3MCwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdFxcdGlmICghc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSlcXG4gXFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zbmRidWY7XFxuIFxcdFxcdGlmIChwc29jay1cXHUwMDNlY29yaykge1xcbitcXHRcXHRcXHRpZiAobXNnX3R4ICE9IHBzb2NrLVxcdTAwM2Vjb3JrKVxcbitcXHRcXHRcXHRcXHRtc2dfY29waWVkID0gMDtcXG4gXFx0XFx0XFx0bXNnX3R4ID0gcHNvY2stXFx1MDAzZWNvcms7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG1zZ190eCA9IFxcdTAwMjZ0bXA7XFxuK1xcdFxcdFxcdG1zZ19jb3BpZWQgPSAwO1xcbiBcXHRcXHRcXHRza19tc2dfaW5pdChtc2dfdHgpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC01NzksMTAgKzU5MiwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3B5KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0c2tfbXNnX3RyaW0oc2ssIG1zZ190eCwgb3NpemUpO1xcbitcXHRcXHRcXHRlcnIgPSByZXQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Y29waWVkICs9IHJldDtcXG4rXFx0XFx0bXNnX2NvcGllZCArPSByZXQ7XFxuIFxcdFxcdGlmIChwc29jay1cXHUwMDNlY29ya19ieXRlcykge1xcbiBcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIHBzb2NrLVxcdTAwM2Vjb3JrX2J5dGVzKVxcbiBcXHRcXHRcXHRcXHRwc29jay1cXHUwMDNlY29ya19ieXRlcyA9IDA7XFxuQEAgLTU5NSwyMSArNjEwLDIzIEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0cHNvY2stXFx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRlcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgXFx1MDAyNmNvcGllZCwgZmxhZ3MpO1xcbitcXHRcXHRlcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgXFx1MDAyNmNvcGllZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbXNnX2NvcGllZCwgXFx1MDAyNmNvcmtlZCwgZmxhZ3MpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0XFx0aWYgKGNvcmtlZClcXG4rXFx0XFx0XFx0bXNnX3R4ID0gcHNvY2stXFx1MDAzZWNvcms7XFxuIFxcdFxcdGNvbnRpbnVlO1xcbiB3YWl0X2Zvcl9zbmRidWY6XFxuIFxcdFxcdHNldF9iaXQoU09DS19OT1NQQUNFLCBcXHUwMDI2c2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbiB3YWl0X2Zvcl9tZW1vcnk6XFxuIFxcdFxcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXFx1MDAyNnRpbWVvKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRpZiAobXNnX3R4IFxcdTAwMjZcXHUwMDI2IG1zZ190eCAhPSBwc29jay1cXHUwMDNlY29yaylcXG4tXFx0XFx0XFx0XFx0c2tfbXNnX2ZyZWUoc2ssIG1zZ190eCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIG91dF9lcnI6XFxuK1xcdGlmIChtc2dfdHggPT0gXFx1MDAyNnRtcClcXG4rXFx0XFx0c2tfbXNnX2ZyZWUoc2ssIG1zZ190eCk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRlcnIgPSBza19zdHJlYW1fZXJyb3Ioc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzLCBlcnIpO1xcbiBcXHRyZWxlYXNlX3NvY2soc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDoyNC45MjUwNTI5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMzI2NzQ5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjVmNzZkZjA0MjBlOTRmODUxMTFmMGZlOGFkOTNkNjFjMzJkYjE5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDIwOjE0OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCA4ZTkwNWI1MGRlYWRiZS4uZmJiMTFiNWFiY2Q0NjMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTQxNiw3ICs0MTYsOSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB9XG4gXG4gc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLCBpbnQgZmxhZ3MpXG4rXHRcdFx0XHRzdHJ1Y3Qgc2tfbXNnICptc2csIGludCAqY29waWVkLFxuK1x0XHRcdFx0dTMyIG1zZ19jb3BpZWQsIGJvb2wgKmNvcmtlZCxcbitcdFx0XHRcdGludCBmbGFncylcbiB7XG4gXHRib29sIGNvcmsgPSBmYWxzZSwgZW5vc3BjID0gc2tfbXNnX2Z1bGwobXNnKSwgcmVkaXJfaW5ncmVzcztcbiBcdHN0cnVjdCBzb2NrICpza19yZWRpcjtcbkBAIC00NDMsMTIgKzQ0NSwxOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiBcdFx0XHRwc29jay1cdTAwM2Vjb3JrID0ga3phbGxvY19vYmooKnBzb2NrLVx1MDAzZWNvcmssXG4gXHRcdFx0XHRcdFx0ICBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiBcdFx0XHRpZiAoIXBzb2NrLVx1MDAzZWNvcmspIHtcbi1cdFx0XHRcdHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuLVx0XHRcdFx0KmNvcGllZCA9IDA7XG4rXHRcdFx0XHRpbnQgZnJlZTtcbitcbitcdFx0XHRcdHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xuK1x0XHRcdFx0ZnJlZSA9IHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuK1x0XHRcdFx0KmNvcGllZCAtPSBtaW5fdCh1MzIsIG1zZ19jb3BpZWQsIGZyZWUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdG1lbWNweShwc29jay1cdTAwM2Vjb3JrLCBtc2csIHNpemVvZigqbXNnKSk7XG4rXHRcdGlmIChwc29jay1cdTAwM2Vjb3JrICE9IG1zZykge1xuK1x0XHRcdHNrX21zZ194ZmVyX2Z1bGwocHNvY2stXHUwMDNlY29yaywgbXNnKTtcbitcdFx0XHQqY29ya2VkID0gdHJ1ZTtcbitcdFx0fVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC00OTUsMTQgKzUwMywxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiBcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiBcdFx0XHRpbnQgZnJlZSA9IHNrX21zZ19mcmVlKHNrLCBtc2cpO1xuIFxuLVx0XHRcdGlmICghY29yaylcbitcdFx0XHRpZiAoY29yaylcbitcdFx0XHRcdCpjb3BpZWQgLT0gbWluX3QodTMyLCBtc2dfY29waWVkLCBmcmVlKTtcbitcdFx0XHRlbHNlXG4gXHRcdFx0XHQqY29waWVkIC09IGZyZWU7XG4gXHRcdH1cbiBcdFx0aWYgKGNvcmspIHtcbiBcdFx0XHRza19tc2dfZnJlZShzaywgbXNnKTtcbiBcdFx0XHRrZnJlZShtc2cpO1xuIFx0XHRcdG1zZyA9IE5VTEw7XG4tXHRcdFx0cmV0ID0gMDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgX19TS19EUk9QOlxuQEAgLTUzNCw2ICs1NDMsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRzdHJ1Y3Qgc2tfbXNnIHRtcCwgKm1zZ190eCA9IE5VTEw7XG4gXHRpbnQgY29waWVkID0gMCwgZXJyID0gMCwgcmV0ID0gMDtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4rXHR1MzIgbXNnX2NvcGllZCA9IDA7XG4gXHRsb25nIHRpbWVvO1xuIFx0aW50IGZsYWdzO1xuIFxuQEAgLTU0OCw3ICs1NTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRsb2NrX3NvY2soc2spO1xuIFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFx0d2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSkge1xuLVx0XHRib29sIGVub3NwYyA9IGZhbHNlO1xuK1x0XHRib29sIGNvcmtlZCA9IGZhbHNlLCBlbm9zcGMgPSBmYWxzZTtcbiBcdFx0dTMyIGNvcHksIG9zaXplO1xuIFxuIFx0XHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG5AQCAtNTYwLDkgKzU3MCwxMiBAQCBzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdGlmICghc2tfc3RyZWFtX21lbW9yeV9mcmVlKHNrKSlcbiBcdFx0XHRnb3RvIHdhaXRfZm9yX3NuZGJ1ZjtcbiBcdFx0aWYgKHBzb2NrLVx1MDAzZWNvcmspIHtcbitcdFx0XHRpZiAobXNnX3R4ICE9IHBzb2NrLVx1MDAzZWNvcmspXG4rXHRcdFx0XHRtc2dfY29waWVkID0gMDtcbiBcdFx0XHRtc2dfdHggPSBwc29jay1cdTAwM2Vjb3JrO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1zZ190eCA9IFx1MDAyNnRtcDtcbitcdFx0XHRtc2dfY29waWVkID0gMDtcbiBcdFx0XHRza19tc2dfaW5pdChtc2dfdHgpO1xuIFx0XHR9XG4gXG5AQCAtNTc5LDEwICs1OTIsMTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdFx0XHQgICAgICAgY29weSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0XHRza19tc2dfdHJpbShzaywgbXNnX3R4LCBvc2l6ZSk7XG4rXHRcdFx0ZXJyID0gcmV0O1xuIFx0XHRcdGdvdG8gb3V0X2VycjtcbiBcdFx0fVxuIFxuIFx0XHRjb3BpZWQgKz0gcmV0O1xuK1x0XHRtc2dfY29waWVkICs9IHJldDtcbiBcdFx0aWYgKHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMpIHtcbiBcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgcHNvY2stXHUwMDNlY29ya19ieXRlcylcbiBcdFx0XHRcdHBzb2NrLVx1MDAzZWNvcmtfYnl0ZXMgPSAwO1xuQEAgLTU5NSwyMSArNjEwLDIzIEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRwc29jay1cdTAwM2Vjb3JrX2J5dGVzID0gMDtcbiBcdFx0fVxuIFxuLVx0XHRlcnIgPSB0Y3BfYnBmX3NlbmRfdmVyZGljdChzaywgcHNvY2ssIG1zZ190eCwgXHUwMDI2Y29waWVkLCBmbGFncyk7XG4rXHRcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcdTAwMjZjb3BpZWQsXG4rXHRcdFx0XHRcdCAgIG1zZ19jb3BpZWQsIFx1MDAyNmNvcmtlZCwgZmxhZ3MpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyIFx1MDAzYyAwKSlcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdGlmIChjb3JrZWQpXG4rXHRcdFx0bXNnX3R4ID0gcHNvY2stXHUwMDNlY29yaztcbiBcdFx0Y29udGludWU7XG4gd2FpdF9mb3Jfc25kYnVmOlxuIFx0XHRzZXRfYml0KFNPQ0tfTk9TUEFDRSwgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiB3YWl0X2Zvcl9tZW1vcnk6XG4gXHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0aWYgKG1zZ190eCBcdTAwMjZcdTAwMjYgbXNnX3R4ICE9IHBzb2NrLVx1MDAzZWNvcmspXG4tXHRcdFx0XHRza19tc2dfZnJlZShzaywgbXNnX3R4KTtcbitcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdH1cbiBcdH1cbiBvdXRfZXJyOlxuK1x0aWYgKG1zZ190eCA9PSBcdTAwMjZ0bXApXG4rXHRcdHNrX21zZ19mcmVlKHNrLCBtc2dfdHgpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0ZXJyID0gc2tfc3RyZWFtX2Vycm9yKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBlcnIpO1xuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI0LjkyNTA1NTc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDEwMDUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipFeGFtaW5pbmcgYSBUQ1AgQlBGIFBhdGNoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiB0aGUgc2VuZCBwYXRoLCBzcGVjaWZpY2FsbHkgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBhbmQgYHRjcF9icGZfc2VuZG1zZ2AuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgaXQgc291bmRzIGxpa2Ugd2UncmUgYWRkcmVzc2luZyBzb21lIGtub3duIGlzc3VlcyByZWxhdGVkIHRvIGNvcmtpbmcgYmVoYXZpb3IgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdGNwX2JwZl9zZW5kbXNnYC4gTm90aGluZyBncm91bmRicmVha2luZywgYnV0IGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjb2RlIHRoYXQgcmVxdWlyZXMgYSBjbG9zZSBsb29rLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgaW4gdGhlIGNyaXRpY2FsIG5ldHdvcmsgcGF0aC4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHN0YWJpbGl6ZSBvciBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIEJQRiBwcm9ncmFtcyB0aGF0IGludGVyYWN0IHdpdGggVENQIHNlbmRzLiBUaGUgY2hhbmdlcyBtaWdodCBpbmNsdWRlIGNvcnJlY3RpbmcgZXhpc3RpbmcsIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWVkZWQgb3IgZW5hYmxlZCB0byBnZXQgdGhpcyBgbmV0L2lwdjQvdGNwX2JwZi5jYCBmdW5jdGlvbmFsaXR5IHdvcmtpbmcuIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgZG93biBjb2RlIHBhdGhzIHRoYXQgYXJlbid0IGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsIEknbSB3b3JraW5nIHdpdGguIFRpbWUgdG8gY2hlY2sgdGhlIGAuY29uZmlnYCBmaWxlIG9yIHJlbGF0ZWQgYnVpbGQgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyB0aGF0IHRoZSBCUEYgZnVuY3Rpb25hbGl0eSBoYXMgYSBkZXBlbmRlbmN5IG9uIGNlcnRhaW4gZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI5LjIxOTE2MDQzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyMTI1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZlxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSArPSB0Y3BfaWxsaW5vaXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjI5LjM5MzM3OTUyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDQ5MTgxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgeW91cnNlbGY6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBgQ09ORklHX05FVF9TT0NLX01TR2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgYWx3YXlzIHdoZW4gbmF2aWdhdGluZyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGlzIHRvIG1ldGljdWxvdXNseSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBwcmVyZXF1aXNpdGVzIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgcGFydGljdWxhciBvcHRpb24gdG8gZXZlbiBiZSB2aWFibGUuIFRoaXMgbWVhbnMgZGl2aW5nIGRlZXAgdG8gYXNjZXJ0YWluIGl0cyBzdXBwb3J0aW5nIG1vZHVsZXMsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZXF1aXJlbWVudHMsIGFuZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvciBjb25zdHJhaW4gaXRzIGF2YWlsYWJpbGl0eS4gSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjMyLjIzODMwMDkzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc4NzExMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTQ6MzIuNTE2MTc5NjUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxMDI1MTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBwcmlvciBleHBlcmllbmNlIGFuZCB3aGVyZSBJIGdlbmVyYWxseSBzZWUgY29tbW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYW5kbGVkLCBsaW5lIDQ3OSBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSXQncyBsaWtlbHkgd2l0aGluIGEgcmVsZXZhbnQgc2VjdGlvbiBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uLCBwZXJoYXBzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwcm90b2NvbCwgZmVhdHVyZSBzZXQsIG9yIGRyaXZlciwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYG5ldC9gLiBJIGFudGljaXBhdGUgdGhhdCBJJ2xsIGxpa2VseSBmaW5kIGVpdGhlciBhIGRlcGVuZGVuY3kgZGVmaW5pdGlvbiwgYW4gb3B0aW9uIGRlY2xhcmF0aW9uLCBvciBwZXJoYXBzIGEgY29tbWVudCB0aGF0IGxpbmtzIGludG8gYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIG1lIHdpdGggdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDozNS41MjY0MzQwNDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdFxcdGJvb2xcXG4gNDcxOlxcdFxcbiA0NzI6XFx0Y29uZmlnIE5FVF9JRUVFODAyMVFfSEVMUEVSU1xcbiA0NzM6XFx0XFx0Ym9vbFxcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRjb25maWcgTkVUX1NFTEZURVNUU1xcbiA0NzY6XFx0XFx0ZGVmX3RyaXN0YXRlIFBIWUxJQlxcbiA0Nzc6XFx0XFx0ZGVwZW5kcyBvbiBQSFlMSUIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiA0Nzg6XFx0XFxuIDQ3OTpcXHRjb25maWcgTkVUX1NPQ0tfTVNHXFxuIDQ4MDpcXHRcXHRib29sXFxuIDQ4MTpcXHRcXHRkZWZhdWx0IG5cXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXFxuIDQ4NDpcXHRcXHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcXG4gNDg1OlxcdFxcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXFxuIDQ4NjpcXHRcXG4gNDg3OlxcdGNvbmZpZyBORVRfREVWTElOS1xcbiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjM1LjUyNjYwNTQ1NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjE0NzMzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVudmVpbGluZyB0aGUgU2VsZWN0aW9uIE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIHNvIGBORVRfU09DS19NU0dgIGlzIGJlaGF2aW5nIGxpa2UgYSBoaWRkZW4gb3B0aW9uLiBJdCdzIGNsZWFybHkgYmVpbmcgc2VsZWN0ZWQsIG9yIGVuYWJsZWQsIGJ5IHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBvciBidWlsZCBwcm9jZXNzIHNvbWV3aGVyZSwgYnV0IG5vdCBkaXJlY3RseS4gVGhhdCdzIGFsd2F5cyBhIGZ1biBjaGFsbGVuZ2Ug4oCTIGNoYXNpbmcgZG93biBkZXBlbmRlbmNpZXMhIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoYXQncyBkcml2aW5nIHRoaXMgc2VsZWN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBORVRfU09DS19NU0dgIGFuZCBzZWUgd2hhdCdzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZW5hYmxpbmcgaXQuIElzIGl0IGEgc3BlY2lmaWMgcGxhdGZvcm0sIGEgcGFydGljdWxhciBmZWF0dXJlIHNldCwgYSBtb2R1bGUgZGVwZW5kZW5jeSwgb3IgbWF5YmUgZXZlbiBhIG1hY3JvIGRlZmluaXRpb24/IFRpbWUgdG8gYnJlYWsgb3V0IHRoZSB0b29scyBhbmQgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBidWlsZCBzY3JpcHRzLiBMZXQncyBnZXQgdGhpcyB1bnJhdmVsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDozOC43ODgwODE1ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODIxMjYwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMzLVxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxua2VybmVsL2JwZi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxua2VybmVsL2JwZi9LY29uZmlnLTM1LVxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbi0tXFxubmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbi0tXFxubmV0L0tjb25maWctMzY2LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWc6MzY3OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy0zNjgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZzozODY6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWctMzg3LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy05My1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY2L0tjb25maWc6OTQ6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWctOTUtXFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG4tLVxcbm5ldC90bHMvS2NvbmZpZz01PWNvbmZpZyBUTFNcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbm5ldC90bHMvS2NvbmZpZzoxMTpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L3Rscy9LY29uZmlnLTEyLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDo0NC41NzAyMTQxNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2ODgwMjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBJbnRlcmFjdGlvbiB3aXRoIFRDUCBTZW5kIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBCZXJrZWxleSBQYWNrZXQgRmlsdGVycyAoQlBGKSBpbnRlcmFjdCB3aXRoIFRDUCBzZW5kIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYEJQRl9TWVNDQUxMYCB3aXRoIHRoZSBgTkVUYCBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gSXQgc2VlbXMgdGhhdCB0aGlzIHNlbGVjdGlvbiBoYXMgbGVkIG1lIHRvIGludmVzdGlnYXRlIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBzaG91bGQgcmVzaWRlIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gTGV0J3MgY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCBzbyBub3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhcmUgdGhleSBzdGF0aWMgb3IgZ2xvYmFsPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBjYWxsZWQgYW5kIGlmIHRoZXkgYXJlIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGUgZ2l0IGRpZmYgY29uZmlybXMgYHRjcF9icGZfc2VuZG1zZ2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGZ1bmN0aW9uIGZyb20gb3V0c2lkZSB0aGlzIGZpbGUgaXMgcmVzdHJpY3RlZC4gTm93LCB0aGlzIHJhaXNlcyBhIGZsYWcsIGl0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QgaWYgbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCBpdCB3aXRoaW4gdGhlIHNhbWUgZmlsZSBvciBpZiB0aGUgZnVuY3Rpb24gaXMgYXNzaWduZWQgdG8gc29tZSBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGdhaW4gYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjQ5LjYzOTAyMDY1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1OTU5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTE1Mz1zdGF0aWMgaW50IHRjcF9icGZfcHVzaF9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNjQ6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY1LVxcdFxcdFxcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTQxOD1zdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTMtXFx0XFx0b3JpZ3NpemUgPSBtc2ctXFx1MDAzZXNnLnNpemU7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjQ5NDpcXHRcXHRyZXQgPSB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc2tfcmVkaXIsIHJlZGlyX2luZ3Jlc3MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ5NS1cXHRcXHRcXHRcXHRcXHQgICAgbXNnLCB0b3NlbmQsIGZsYWdzKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy01NDAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjU0MTpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTU0Mi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjU1PXN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY1LVxcdHByb3RbVENQX0JQRl9UWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY2OlxcdHByb3RbVENQX0JQRl9UWF0uc2VuZG1zZ1xcdFxcdD0gdGNwX2JwZl9zZW5kbXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjQ5Ljk4NDk4NjQ2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0MDI4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBTZW5kbXNnIEhvb2sqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgdGNwX2JwZl9zZW5kbXNnYCBpcyBnZXR0aW5nIGhvb2tlZCBpbnRvIHRoZSBgVENQX0JQRl9UWGAgcHJvdG9jb2wsIHNwZWNpZmljYWxseSBtYXBwZWQgdG8gYHByb3RbVENQX0JQRl9UWF0uc2VuZG1zZ2AuIFRoYXQncyBhIGtleSBwb2ludC4gVGhpcyBtZWFucywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgdGhhdCB3aGVuZXZlciBhIFRDUCBzb2NrZXQgaXMgYWJvdXQgdG8gc2VuZCBhIG1lc3NhZ2UsIHRoaXMgZnVuY3Rpb24sIGB0Y3BfYnBmX3NlbmRtc2dgLCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGhhcHBlbmluZyB3aXRoaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIEkgbmVlZCBhIHF1aWNrIG92ZXJ2aWV3LiBXaGF0IGFyZSB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBiZXNpZGVzIHRoZSBvYnZpb3VzbHkgaW1wb3J0YW50IGB0Y3BfYnBmX3NlbmRtc2dgPyBBcmUgdGhlcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGZpbHRlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZXJyb3IgaGFuZGxpbmcsIG90aGVyIGtleSBwb2ludHM/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBCUEYncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUQ1Agc3RhY2sgZHVyaW5nIHRyYW5zbWlzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQxMSwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE0OjUzLjY1OTAxODIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzExNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYy0xNC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU6dm9pZCB0Y3BfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz0xNTM9c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTY0OmludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cXHRcXHRcXHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjUxPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gKnRjcHY2X3Byb3Rfc2F2ZWQgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUzLXN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9Njk0PXN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcwNC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcwNTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzA2LVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzQwOmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03Nzc9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl91cGRhdGVfcHJvdG8pO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc4My0gKi9cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzg0OnZvaWQgdGNwX2JwZl9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzg1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTQ6NTMuNzMyMTQxNjQ0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzgyMzIzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIFVwZGF0ZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlIHJlbGF0ZWQgdG8gVENQLCBhbmQgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZSBhcyBhIGxpa2VseSBjcnVjaWFsIGZ1bmN0aW9uLiBJdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB1cGRhdGluZyB0aGUgcHJvdG9jb2wgd2l0aGluIHRoZSBgdGNwX2JwZl9wcm90c2Agc3RydWN0dXJlLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyBpdHMgY2VudHJhbGl0eS4gVGhlIGZhY3QgdGhhdCBpdCdzIHRyaWdnZXJlZCB3aGVuIGEgc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcCBmdXJ0aGVyIGNlbWVudHMgaXRzIGltcG9ydGFuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgZGVmaW5pdGVseSBhIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gSSdtIGFsc28gbm90aW5nIHRoYXQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAgaXMgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gYXMgd2VsbCwgd2hpY2ggaXMgaGVscGZ1bCB0byBrZWVwIGluIG1pbmQuIE5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGJlaW5nIGNhbGxlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBUQ1AgQlBGIGltcGxlbWVudGF0aW9uLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDo1Ny43MTAzNzczNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDg3NTI4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI4Mzg9c3RydWN0IHNrX3Bzb2NrO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjg0MC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuaW5jbHVkZS9uZXQvdGNwLmg6Mjg0MTppbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTI4NDItdm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03MDU9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM5LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDA6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDEte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3Ni19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc3NzpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3OC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0Mz1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjgtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2OTpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3MC0jZW5kaWZcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMwMS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNDo1OS42MTkxNDAzOTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MDMxNDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmcsIG1heWJlIGRlYnVnZ2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlOlxuXG4qKlRyYWNpbmcgUHJvdG9jb2wgVXBkYXRlcyBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIFRDUCBCUEYgcHJvZ3JhbSBnZXRzIHVwZGF0ZWQuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIHRoaXMsIGJ1dCB0aGUgYWN0dWFsIGNhbGwgdG8gaXQgaXMgcm91dGVkIHRocm91Z2ggYHBzb2NrX3VwZGF0ZV9za19wcm90YC4gU28sIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgYmVpbmcgaW52b2tlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIsIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoZSBwcm90b2NvbCB1cGRhdGUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBiZWhhdmlvci4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IG9mIGBwc29ja191cGRhdGVfc2tfcHJvdGAgaXMgZ29pbmcgdG8gc2hlZCBsaWdodCBvbiB3aGF0J3MgZHJpdmluZyB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIEJQRiBwcm9ncmFtLCBhbmQgdWx0aW1hdGVseSwgd2h5IHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpcyBoYXBwZW5pbmcuIFRpbWUgdG8gZ28gaHVudGluZyBmb3IgY2FsbCBzaXRlcyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODI4OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE1OjAyLjk4OTQ1NzgwNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNTA4NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc29ja191cGRhdGVfc2tfcHJvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za21zZy5oPTg0PXN0cnVjdCBza19wc29jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtMTExLVxcdHZvaWQgKCpzYXZlZF9kYXRhX3JlYWR5KShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaDoxMTI6XFx0LyogcHNvY2tfdXBkYXRlX3NrX3Byb3QgbWF5IGJlIGNhbGxlZCB3aXRoIHJlc3RvcmU9ZmFsc2UgbWFueSB0aW1lc1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaC0xMTMtXFx0ICogc28gdGhlIGhhbmRsZXIgbXVzdCBiZSBzYWZlIGZvciB0aGlzIGNhc2UuIEl0IHdpbGwgYmUgY2FsbGVkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtMTE2LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaDoxMTc6XFx0aW50ICAoKnBzb2NrX3VwZGF0ZV9za19wcm90KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTExOC1cXHRcXHRcXHRcXHQgICAgIGJvb2wgcmVzdG9yZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg9NDg4PXN0YXRpYyBpbmxpbmUgdm9pZCBza19wc29ja19yZXN0b3JlX3Byb3RvKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00OTAte1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaDo0OTE6XFx0aWYgKHBzb2NrLVxcdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdClcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NDkyOlxcdFxcdHBzb2NrLVxcdTAwM2Vwc29ja191cGRhdGVfc2tfcHJvdChzaywgcHNvY2ssIHRydWUpO1xcbmluY2x1ZGUvbGludXgvc2ttc2cuaC00OTMtfVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTEyOTE9c3RydWN0IHByb3RvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0xMzQ0LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5pbmNsdWRlL25ldC9zb2NrLmg6MTM0NTpcXHRpbnRcXHRcXHRcXHQoKnBzb2NrX3VwZGF0ZV9za19wcm90KShzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvc29jay5oLTEzNDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTQyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX2RlbF9saW5rKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTcyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTczOlxcdFxcdGlmIChwc29jay1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3QpXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQ6XFx0XFx0XFx0cHNvY2stXFx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90KHNrLCBwc29jaywgZmFsc2UpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc1LVxcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xODk9c3RhdGljIGludCBzb2NrX21hcF9pbml0X3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MC17XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTE6XFx0aWYgKCFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3QpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTItXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxOTM6XFx0cHNvY2stXFx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90ID0gc2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXBzb2NrX3VwZGF0ZV9za19wcm90O1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTk0OlxcdHJldHVybiBzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Qoc2ssIHBzb2NrLCBmYWxzZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xOTUtfVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01MzY9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfaXNfc3VpdGFibGUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTM3LXtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjUzODpcXHRyZXR1cm4gISFzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNlcHNvY2tfdXBkYXRlX3NrX3Byb3Q7XFxubmV0L2NvcmUvc29ja19tYXAuYy01MzktfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zMzQzPXN0cnVjdCBwcm90byB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2OC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzY5OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzcwLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzEzMj1zdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zMTUzLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC91ZHAuYzozMTU0OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdWRwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdWRwLmMtMzE1NS0jZW5kaWZcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjI3Nj1zdHJ1Y3QgcHJvdG8gdGNwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjMwMS0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMzAyOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMzAzLSNlbmRpZlxcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTg5NT1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTE5MTYtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm5ldC9pcHY2L3VkcC5jOjE5MTc6XFx0LnBzb2NrX3VwZGF0ZV9za19wcm90XFx0PSB1ZHBfYnBmX3VwZGF0ZV9wcm90byxcXG5uZXQvaXB2Ni91ZHAuYy0xOTE4LSNlbmRpZlxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY0LVxcdC8qIERpc2FibGUgc29ja21hcCBwcm9jZXNzaW5nIGZvciBzdWJmbG93cyAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE2NTpcXHR0Y3BfcHJvdF9vdmVycmlkZS5wc29ja191cGRhdGVfc2tfcHJvdCA9IE5VTEw7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTY2LSNlbmRpZlxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTc1PXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMjExLVxcdC8qIERpc2FibGUgc29ja21hcCBwcm9jZXNzaW5nIGZvciBzdWJmbG93cyAqL1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxMjpcXHR0Y3B2Nl9wcm90X292ZXJyaWRlLnBzb2NrX3VwZGF0ZV9za19wcm90ID0gTlVMTDtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTMtI2VuZGlmXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9MTA2MD1zdHJ1Y3QgcHJvdG8gdW5peF9kZ3JhbV9wcm90byA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMDY2LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdW5peC9hZl91bml4LmM6MTA2NzpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHVuaXhfZGdyYW1fYnBmX3VwZGF0ZV9wcm90byxcXG5uZXQvdW5peC9hZl91bml4LmMtMTA2OC0jZW5kaWZcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0xMDcxPXN0cnVjdCBwcm90byB1bml4X3N0cmVhbV9wcm90byA9IHtcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0xMDc3LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdW5peC9hZl91bml4LmM6MTA3ODpcXHQucHNvY2tfdXBkYXRlX3NrX3Byb3RcXHQ9IHVuaXhfc3RyZWFtX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L3VuaXgvYWZfdW5peC5jLTEwNzktI2VuZGlmXFxuLS1cXG5uZXQvdW5peC91bml4X2JwZi5jPTE2ND1pbnQgdW5peF9zdHJlYW1fYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC91bml4L3VuaXhfYnBmLmMtMTc3LVxcbm5ldC91bml4L3VuaXhfYnBmLmM6MTc4OlxcdC8qIHBzb2NrX3VwZGF0ZV9za19wcm90IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaWYgcHNvY2sgaXNcXG5uZXQvdW5peC91bml4X2JwZi5jLTE3OS1cXHQgKiBhZGRlZCB0byBtdWx0aXBsZSBtYXBzIGFuZC9vciBzbG90cyBpbiB0aGUgc2FtZSBtYXAuIFRoZXJlIGlzXFxubmV0L3VuaXgvdW5peF9icGYuYy0xODAtXFx0ICogYWxzbyBhbiBlZGdlIGNhc2Ugd2hlcmUgcmVwbGFjaW5nIGEgcHNvY2sgd2l0aCBpdHNlbGYgY2FuIHRyaWdnZXJcXG5uZXQvdW5peC91bml4X2JwZi5jOjE4MTpcXHQgKiBhbiBleHRyYSBwc29ja191cGRhdGVfc2tfcHJvdCBkdXJpbmcgdGhlIGluc2VydCBwcm9jZXNzLiBTbyBpdFxcbm5ldC91bml4L3VuaXhfYnBmLmMtMTgyLVxcdCAqIG11c3QgYmUgc2FmZSB0byBkbyBtdWx0aXBsZSBjYWxscy4gSGVyZSB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBkb24ndFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTE4NT1zdHJ1Y3QgcHJvdG8gdnNvY2tfcHJvdG8gPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTkwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTkxOlxcdC5wc29ja191cGRhdGVfc2tfcHJvdCA9IHZzb2NrX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5Mi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MTU6MDQuOTE0NTUyNTcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MTI2NTA1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGlzIGB0Y3BfYnBmYCBmdW5jdGlvbmFsaXR5LiBUaGUgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCByZXBsYWNpbmcgdGhlIHNvY2tldCdzIHByb3RvY29sIChgc2stXHUwMDNlc2tfcHJvdGApIHdpdGggYSBjdXN0b20gb25lLCBzcGVjaWZpY2FsbHkgYHRjcF9icGZfcHJvdHNgLCBhbmQgdGhhdCBoYXBwZW5zIHdpdGhpbiBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uIFRoZSBpbXBvcnRhbnQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YC5cblxuYHRjcF9icGZfc2VuZG1zZ2AgaXMgYXNzaWduZWQgdG8gdGhlIGBzZW5kbXNnYCBtZW1iZXIgb2YgdGhpcyBjdXN0b20gcHJvdG9jb2wgc3RydWN0dXJlLCBgdGNwX2JwZl9wcm90c2AsIGF0IGluZGV4IGBUQ1BfQlBGX1RYYC4gVGhlbiwgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCBpcyBjYWxsZWQgYnkgYHRjcF9icGZfc2VuZG1zZ2AsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYHRjcF9icGZfc2VuZG1zZ2AgYmVjb21lcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBnZXRzIHRyaWdnZXJlZC5cblxuV2FpdCBhIHNlY29uZCwgc2luY2UgYHRjcF9icGZfc2VuZG1zZ2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCBJIGNhbid0IGRpcmVjdGx5IHVzZSB0aGF0IGFzIGEgZm9jdXMgc3ltYm9sLCB3aGljaCBpcyBhIGJpdCBhbm5veWluZy4gSG93ZXZlciwgSSBqdXN0IHJlYWxpemVkIHRoYXQgaXQgaXMgYXNzaWduZWQgdG8gYHNlbmRtc2dgIG9mIHRoZSBgdGNwX2JwZl9wcm90c2Agc3RydWN0dXJlLiBTbywgaWYgYSBUQ1Agc29ja2V0IGlzIGFkZGVkIHRvIGEgc29ja21hcCwgYW5kIHRoaXMgcHJvdG9jb2wgZ2V0cyBhc3NpZ25lZCwgdGhlbiBhIGNhbGwgdG8gYHNlbmRtc2dgIG9uIHRoYXQgc29ja2V0IHdpbGwgdWx0aW1hdGVseSBlbmQgdXAgY2FsbGluZyBgdGNwX2JwZl9zZW5kbXNnYCEgQWhhLCBzbyB0aGF0IG1lYW5zIHRoZSB0cmlnZ2VyIGNvbmRpdGlvbiBpcyB0byBhZGQgYSBUQ1Agc29ja2V0IHRvIGEgc29ja21hcCwgd2hpY2ggdGhlbiBjYWxscyBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBUaGVuIGNhbGxpbmcgYHNlbmRtc2dgIG9uIHRoZSBzb2NrZXQgc2hvdWxkIHdvcmsuXG5cblNvLCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGlzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzIHN5bWJvbC4gVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGlzIGFsc28gcHJvbWlzaW5nLCBzaW5jZSBpdCdzIG5vbi1zdGF0aWMgYW5kIGNhbGxlZCBieSBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgLiBMZXQgbWUgcXVpY2tseSBzY2FuIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFnYWluIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgY2FuZGlkYXRlcy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjk2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE1OjExLjcyNzIwNjExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzc0MDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0xNTM9c3RhdGljIGludCB0Y3BfYnBmX3B1c2hfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTY0OmludCB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc3RydWN0IHNvY2sgKnNrLCBib29sIGluZ3Jlc3MsXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NS1cXHRcXHRcXHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc3LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc4OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz00MTg9c3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDkzLVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0OTQ6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00OTUtXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTQwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1NDE6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01NDIte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY1NT1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY2NS1cXHRwcm90W1RDUF9CUEZfVFhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY2NjpcXHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcXHRcXHQ9IHRjcF9icGZfc2VuZG1zZztcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToxMS44MjQ5NTUyODFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0OTk4ODQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBCUEYgU2VuZCBQYXRoKipcblxuT2theSwgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAgZmVlbHMgbGlrZSBhIGdvb2Qgc3ltYm9sIHRvIGNlbnRlciB0aGlzIGludmVzdGlnYXRpb24gYXJvdW5kLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGJhc2ljOiBpcyBgdGNwX2JwZl9zZW5kbXNnYCBhIHN0YXRpYyBmdW5jdGlvbj8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbkdpdmVuIHRoYXQgYHRjcF9icGZfc2VuZG1zZ2AgaXMgc3RhdGljLCBteSB0b29scyB3aWxsIG5lZWQgdG8gZm9jdXMgb24gYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuIFdoYXQgYWJvdXQgdGhlIHJlY2VpdmUgc2lkZT8gSXMgYHRjcF9icGZfcmVjdm1zZ2AgYWxzbyBzdGF0aWM/IFllcywgaXQgaXMuIEFscmlnaHQsIHRoYXQgZ3VpZGVzIG15IGFwcHJvYWNoLlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AuIFRoaXMgcGF0Y2ggc2VlbXMgZGlyZWN0bHkgY29uY2VybmVkIHdpdGggYHRjcF9icGZfc2VuZG1zZ2AgYW5kIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAsIHdoaWNoIG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBidWcgcmVsYXRlZCB0byBjb3JraW5nIGFuZCwgc3BlY2lmaWNhbGx5LCBlcnJvciBoYW5kbGluZy5cblxuVGhpcyBtZWFucyB0aGUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldCAqbXVzdCogYmUgYHRjcF9icGZfc2VuZG1zZ2AuIE5vdywgc2luY2UgaXQncyBzdGF0aWMsIGl0IHdvbid0IGJlIGluIGFueSBmdW5jdGlvbiBsaXN0LCB3aGljaCBjb21wbGljYXRlcyB0aGUgYXBwcm9hY2guIEhvd2V2ZXIsIGB0Y3BfYnBmX3VwZGF0ZV9wcm90b2AgKmlzKiB0aGUgc2V0dXAgZnVuY3Rpb24sIGFuZCBhIGxvdCBvZiBpbXBvcnRhbnQgZGF0YSBwYXNzZXMgdGhyb3VnaCBpdC4gU28sIHRoYXQncyBkZWZpbml0ZWx5IGEgdmlhYmxlIGVudHJ5IHBvaW50LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBzY2FuIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGZvciBhbnkgKm90aGVyKiBleHBvcnRlZCBmdW5jdGlvbnMuIFlvdSBuZXZlciBrbm93IHdoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGVyZSB0aGF0IGNvdWxkIGV4cG9zZSBzb21ldGhpbmcgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToxNy4xNzQ5NDcxMjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjU4MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuYz0xNjQ9aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzctfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzg6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTc0MD1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzc2LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Nzc3OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToxNy4yNzAyMTUwOTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY4NTYxNTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQlBGIEhvb2sgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCUEYgaG9va3MuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb25lcyB3ZSBjYW4gd29yayB3aXRoIGhlcmUgYXJlIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgIGFuZCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLiBXZSBjYW4gbGV2ZXJhZ2UgYm90aCBvZiB0aG9zZS4gSSBoYWQgYSBxdWljayB0aG91Z2h0IGFib3V0IGB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrYCwgYnV0IHVwb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGF0IGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSByZWxhdGVkIHRvIHNlbmRtc2csIHNvIHRoYXQncyBhIGRlYWQgZW5kLiBJIGFsc28gY2hlY2tlZCBgdGNwX2JwZl9jbG9uZWAsIGl0IGlzIG5vdCBzdGF0aWMsIGJ1dCB1bHRpbWF0ZWx5LCBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGxvb2tzIGxpa2UgdGhlIG1vc3QgcHJvbWlzaW5nIG9mIHRoZSBidW5jaC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGUgaG9va3MgYXJlIGVuYWJsZWQuIEkndmUgZm91bmQgdGhhdCBgTkVUX1NPQ0tfTVNHYCBpcyBzZWxlY3RlZCBieSBgQlBGX1NZU0NBTExgIGlmIGBORVRgIGlzIGFsc28gZW5hYmxlZC4gVGhhdCBtZWFucyBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcml0aWNhbCBjb25maWcgd2UgbmVlZC4gYE5FVGAgaXMgb2J2aW91c2x5IGEgYmFzZSByZXF1aXJlbWVudCwgYnV0IGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgdGhlIGtleS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBlbm91Z2gsIHRob3VnaC5cblxuUmlnaHQsIGBCUEZfU1lTQ0FMTGAgKmRvZXMqIHNlbGVjdCBgTkVUX1NPQ0tfTVNHYCBpZiBgTkVUYCBpcyBzZXQuIE9rYXksIHRoYXQgbG9va3Mgc29saWQuIExldCdzIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQWZ0ZXIgYSBxdWljayBsb29rIGF0IGB0Y3BfYnBmLmNgLCB0aGUgZmlsZSBpdHNlbGYgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgc2V0LCBzbyB3ZSBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrISBFc3NlbnRpYWxseSwgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG5lZWRlZC5cblxuT25lIGxhc3QgdGhpbmcsIGxldCdzIGRvdWJsZSBjaGVjayBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgYHRjcF9icGZfc2VuZF92ZXJkaWN0YCByZWFsIHF1aWNrLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGV5IGFyZSBub3QgaGlkZGVuIGluc2lkZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkzOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToyMy45NTU4MzM0MzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODc5OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9MTc4PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3OS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTgxLXN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToyNC4wMTg3MTc5OTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MDY1ODUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdGNwX2JwZl9zZW5kbXNnYCBhbmQgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gU28sIGl0IGxvb2tzIGxpa2UgYHRjcF9icGZfc2VuZG1zZ2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgZGVmaW5lLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgdGhlIGdhdGVrZWVwZXIuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXaGF0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhcyBhIHJlc3VsdD9cblxuTXkgbmV4dCBzdGVwLCBhbmQgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBpcyB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoZXJlIHRoYXQgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrIGNsb3Nlcy4gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIFdoZXJlIGRvZXMgaXQgc3RhcnQsIGFuZCB3aGVyZSBkb2VzIGl0IGVuZD8gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdGhhdCBhcmUgYWxzbyBndWFyZGVkIGJ5IHRoaXMgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgY2xhcmlmeSB0aGUgcHVycG9zZSBhbmQgaW1wYWN0IG9mIGBDT05GSUdfQlBGX1NZU0NBTExgIG9uIEJQRiBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGlzIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBpcyB2aXRhbCBmb3IgYSBkZWVwZXIsIG1vcmUgaW5mb3JtZWQgYW5hbHlzaXMuIEkgbmVlZCB0byBzZWUgdGhlICp3aG9sZSogcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNToyOC4zMDkzNzkzOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTM3MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuZGlmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9NzA1PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTczNy19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjczODojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTczOS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03ODQ9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc5MC19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc5MTojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjE1OjI4LjM2OTMyMzIwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Nzk2MDMzOTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgQlBGIENvZGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgY29kZSBhbmQgSSd2ZSB6ZXJvZWQgaW4gb24gbGluZXMgMTgwIHRocm91Z2ggNzkxLiBJdCdzIGFsbCBuZXN0bGVkIG5lYXRseSB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGJsb2NrLCB3aGljaCBtZWFucyBgQlBGX1NZU0NBTExgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIG91ciBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdG8gbm90ZSwgdGhlIG9ubHkgb25lIHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzLiBJIHNlZSBgdGNwX2JwZl91cGRhdGVfcHJvdG9gIGFuZCBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYCBhcmUgdGhlIHByb21pbmVudCBmdW5jdGlvbiBuYW1lcyB0byBjb25zaWRlci4gSG1tLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suLi4gWWVzLCBgdGNwX2JwZl9jbG9uZWAgaXMgYWxzbyBub24tc3RhdGljLCBidXQgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpcyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgdG8gc2V0IHVwIHRoZSBwcm90b2NvbCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAgaXMgaW1wb3J0YW50IGFzIHdlbGwuXG5cbkFscmlnaHQsIGxldCdzIGV4cGxvcmUgaWYgYHRjcF9icGZfc2VuZG1zZ2AgY2FuIGJlIHRyaWdnZXJlZC4gQWgsIHllcyEgV2UgY2FuIHJlYWNoIGB0Y3BfYnBmX3NlbmRtc2dgIGJ5IGFkZGluZyBhIHNvY2tldCB0byBhIHNvY2ttYXAgYW5kIHRoZW4gY2FsbGluZyBgc2VuZG1zZ2AuIFRoYXQncyBhIHRleHRib29rIEJQRiBzY2VuYXJpby4gVGhhdCBtZWFucyB0aGlzIGNvZGUgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSB0cnVlIGhlcmUuXG5cblNvLCBoZXJlJ3MgbXkgcmVhc29uaW5nIGluIGEgbnV0c2hlbGw6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gSXQncyBmaXhpbmcgaXNzdWVzIGFyb3VuZCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZywgd2hpY2ggZGlyZWN0bHkgaW1wYWN0cyBjb3JlIGtlcm5lbCBsb2dpYyByZWFjaGFibGUgdGhyb3VnaCBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LlxuTXkgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBhbmQgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmAuXG5BbmQgd2UgaGF2ZSBqdXN0IG9uZSByZWxldmFudCBjb25maWcgdG8gY29uc2lkZXI6IGBCUEZfU1lTQ0FMTGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQwLCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDoxNTozNi4xNjUzNjA2MjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQzNzgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3VwZGF0ZV9wcm90b1wiLFxuICAgIFwidGNwX2JwZl9zZW5kbXNnX3JlZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9icGZfc2VuZG1zZ2AgYW5kIGB0Y3BfYnBmX3NlbmRfdmVyZGljdGAgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgdG8gZml4IGNvcmtpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgQlBGIHNvY2ttYXAgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gdGhlIHNvY2tldCBwcm90b2NvbCBvcGVyYXRpb25zIHZpYSBgdGNwX2JwZl91cGRhdGVfcHJvdG9gLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl91cGRhdGVfcHJvdG9cIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3NlbmRtc2dgIGFuZCBgdGNwX2JwZl9zZW5kX3ZlcmRpY3RgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIHRvIGZpeCBjb3JraW5nIGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgZm9yIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFzc2lnbmVkIHRvIHRoZSBzb2NrZXQgcHJvdG9jb2wgb3BlcmF0aW9ucyB2aWEgYHRjcF9icGZfdXBkYXRlX3Byb3RvYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgvfkq[1] Phase: Succeeded StartedAt: 2026-07-24 20:21:54 +0000 UTC FinishedAt: 2026-07-24 20:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 20:21:54 +0000 UTC FinishedAt: 2026-07-24 20:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2] Phase: Succeeded StartedAt: 2026-07-24 20:21:54 +0000 UTC FinishedAt: 2026-07-25 00:40:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 20:21:54 +0000 UTC FinishedAt: 2026-07-25 00:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 20:21:54 +0000 UTC FinishedAt: 2026-07-24 20:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 20:21:54 +0000 UTC FinishedAt: 2026-07-24 20:21:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgvfkq/series-workflowgvfkq-convert-artifact-1070094410/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 20:22:04 +0000 UTC FinishedAt: 2026-07-24 21:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 20:22:04 +0000 UTC FinishedAt: 2026-07-24 21:00:18 +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:*5d86979e-cf14-49e8-b379-8c4d991d97a2,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-workflowgvfkq/series-workflowgvfkq-convert-artifact-1070094410/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": "4e1e3efe-b85d-4da6-8507-2d83a184cca6", "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-workflowgvfkq/series-workflowgvfkq-build-action-1931276344/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 20:22:04 +0000 UTC FinishedAt: 2026-07-24 21:00:08 +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:*5d86979e-cf14-49e8-b379-8c4d991d97a2,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-workflowgvfkq/series-workflowgvfkq-convert-artifact-1070094410/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": "4e1e3efe-b85d-4da6-8507-2d83a184cca6", "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-workflowgvfkq/series-workflowgvfkq-build-action-1931276344/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 21:00:18 +0000 UTC FinishedAt: 2026-07-24 21:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 21:00:18 +0000 UTC FinishedAt: 2026-07-24 21:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 21:00:18 +0000 UTC FinishedAt: 2026-07-24 21:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 21:00:18 +0000 UTC FinishedAt: 2026-07-24 21:00:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgvfkq/series-workflowgvfkq-convert-artifact-577040869/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 21:00:29 +0000 UTC FinishedAt: 2026-07-24 21:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 21:00:29 +0000 UTC FinishedAt: 2026-07-24 21:02:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4e1e3efe-b85d-4da6-8507-2d83a184cca6,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-workflowgvfkq/series-workflowgvfkq-build-action-1931276344/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-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 21:03:00 +0000 UTC FinishedAt: 2026-07-24 21:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 21:03:00 +0000 UTC FinishedAt: 2026-07-24 21:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 21:03:00 +0000 UTC FinishedAt: 2026-07-24 21:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 21:03:00 +0000 UTC FinishedAt: 2026-07-24 21:35:14 +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:*5d86979e-cf14-49e8-b379-8c4d991d97a2,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-workflowgvfkq/series-workflowgvfkq-convert-artifact-577040869/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": "e1f7eaac-9949-4c8e-ba71-8c9f46fbcfd7", "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-workflowgvfkq/series-workflowgvfkq-build-action-3198666289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 21:03:00 +0000 UTC FinishedAt: 2026-07-24 21:35:04 +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:*5d86979e-cf14-49e8-b379-8c4d991d97a2,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-workflowgvfkq/series-workflowgvfkq-convert-artifact-577040869/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": "e1f7eaac-9949-4c8e-ba71-8c9f46fbcfd7", "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-workflowgvfkq/series-workflowgvfkq-build-action-3198666289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 21:35:14 +0000 UTC FinishedAt: 2026-07-24 21:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 21:35:14 +0000 UTC FinishedAt: 2026-07-24 21:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 21:35:14 +0000 UTC FinishedAt: 2026-07-24 21:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 21:35:14 +0000 UTC FinishedAt: 2026-07-24 21:36:53 +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:*e1f7eaac-9949-4c8e-ba71-8c9f46fbcfd7,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-workflowgvfkq/series-workflowgvfkq-build-action-3198666289/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-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-25 00:40:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-25 00:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"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:*4e1e3efe-b85d-4da6-8507-2d83a184cca6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1f7eaac-9949-4c8e-ba71-8c9f46fbcfd7,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-workflowgvfkq/series-workflowgvfkq-build-action-1931276344/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-workflowgvfkq/series-workflowgvfkq-build-action-3198666289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-24 21:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-24 21:37:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"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-workflowgvfkq/series-workflowgvfkq-convert-artifact-760755306/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-24 21:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-24 21:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 21:37:03 +0000 UTC FinishedAt: 2026-07-24 21:37:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 21:37:13 +0000 UTC FinishedAt: 2026-07-25 00:40:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgvfkq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_update_proto","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"42f6d7d9-d576-4dfa-bd6f-cff798821b83","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 21:37:13 +0000 UTC FinishedAt: 2026-07-25 00:40:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4e1e3efe-b85d-4da6-8507-2d83a184cca6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1f7eaac-9949-4c8e-ba71-8c9f46fbcfd7,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-workflowgvfkq/series-workflowgvfkq-build-action-1931276344/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-workflowgvfkq/series-workflowgvfkq-build-action-3198666289/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-workflowgvfkq/series-workflowgvfkq-convert-artifact-760755306/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,}