Name: series-workflowdh6vm Phase: Succeeded StartedAt: 2026-08-07 10:26:36 +0000 UTC FinishedAt: 2026-08-07 14:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[0] Phase: Succeeded StartedAt: 2026-08-07 10:26:36 +0000 UTC FinishedAt: 2026-08-07 10:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 10:26:36 +0000 UTC FinishedAt: 2026-08-07 10:30:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PM_SLEEP", "PM_AUTOSLEEP", "FUSE_FS", "SUNRPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PM_SLEEP", "PM_AUTOSLEEP", "FUSE_FS", "SUNRPC" ], "series_id": "a76d5ef8-004d-4459-83dc-4807a2d5f45a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "state_store", "autosleep_store", "fuse_chan_send", "fuse_chan_send_bg", "fuse_chan_send_notify_reply", "rpc_execute" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIEZVU0UgYW5kIFNVTlJQQyB0byB1c2UgVEFTS19GUkVFWkFCTEVfVU5TQUZFIGR1cmluZyB3YWl0cywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIChzdGF0ZV9zdG9yZSBhbmQgYXV0b3NsZWVwX3N0b3JlKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkcml2ZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE5Y2Q2ZGJmZjI3Y2ZlNTJjMTFlMjE0MTMyYjdkNjg2MTgxN2VhZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjI4OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jXG5pbmRleCA1NzYzYTdjZDNiMzdmLi45ZThkYzk2ZDI0ZjE4IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kZXYuY1xuQEAgLTExNiw3ICYjNDM7MTE2LDcgQEAgc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbiBcdFx0ZXJyID0gLUVJTlRSO1xuIFx0XHRpZiAod2FpdF9ldmVudF9zdGF0ZV9leGNsdXNpdmUoZmNoLVx1MDAzZWJsb2NrZWRfd2FpdHEsXG4gXHRcdFx0XHQhZnVzZV9ibG9ja19hbGxvYyhmY2gsIGZvcl9iYWNrZ3JvdW5kKSxcbi1cdFx0XHRcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSlcbiYjNDM7XHRcdFx0XHQoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXG5pbmRleCA1NDI5ZTlmMTliNjU1Li43ODBhZmRhMTE3NjU2IDEwMDY0NFxuLS0tIGEva2VybmVsL3Bvd2VyL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Bvd2VyL21haW4uY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZXVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtwb3dlci5oXCYjMzQ7XG4gXG5AQCAtODAyLDYgJiM0Mzs4MDMsMjIgQEAgc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiBcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZTtcbiBcdGludCBlcnJvcjtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuJiM0MztcdGludCBpZHg7XG4mIzQzO1x0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuJiM0MztcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuJiM0MztcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuJiM0MztcdHdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7XG4mIzQzO1x0aWYgKCF3cylcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTkyOSw2ICYjNDM7OTQ2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSA9IGRlY29kZV9zdGF0ZShidWYsIG4pO1xuIFx0aW50IGVycm9yO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4mIzQzO1x0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4mIzQzO1x0aWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHtcbiYjNDM7XHRcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuJiM0MztcdFx0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XG4mIzQzO1x0XHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xuJiM0MztcdFx0aWYgKCF3cylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OXG4gXHQgICAgXHUwMDI2XHUwMDI2IHN0cmNtcChidWYsIFwmIzM0O29mZlwmIzM0OykgXHUwMDI2XHUwMDI2IHN0cmNtcChidWYsIFwmIzM0O29mZlxcblwmIzM0OykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuY1xuaW5kZXggMDE2ZjE2Y2E1Nzc5OS4uNDk0OTQ3ZDUwOWYzYyAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc2NoZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zY2hlZC5jXG5AQCAtOTg0LDcgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbiBcdFx0dHJhY2VfcnBjX3Rhc2tfc3luY19zbGVlcCh0YXNrLCB0YXNrLVx1MDAzZXRrX2FjdGlvbik7XG4gXHRcdHN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KFx1MDAyNnRhc2stXHUwMDNldGtfcnVuc3RhdGUsXG4gXHRcdFx0XHRSUENfVEFTS19RVUVVRUQsIHJwY193YWl0X2JpdF9raWxsYWJsZSxcbi1cdFx0XHRcdFRBU0tfS0lMTEFCTEV8VEFTS19GUkVFWkFCTEUpO1xuJiM0MztcdFx0XHRcdFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpO1xuIFx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXaGVuIGEgc3luYyB0YXNrIHJlY2VpdmVzIGEgc2lnbmFsLCBpdCBleGl0cyB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOWNkNmRiZmYyN2NmZTUyYzExZTIxNDEzMmI3ZDY4NjE4MTdlYWUzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMDoyODo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jCmluZGV4IDU3NjNhN2NkM2IzN2YuLjllOGRjOTZkMjRmMTggMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kZXYuYwpAQCAtMTE2LDcgJiM0MzsxMTYsNyBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXEoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBib29sIGZvcl9iYWNrZ3JvdW5kKQogCQllcnIgPSAtRUlOVFI7CiAJCWlmICh3YWl0X2V2ZW50X3N0YXRlX2V4Y2x1c2l2ZShmY2gtJmd0O2Jsb2NrZWRfd2FpdHEsCiAJCQkJIWZ1c2VfYmxvY2tfYWxsb2MoZmNoLCBmb3JfYmFja2dyb3VuZCksCi0JCQkJKFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRSkpKQomIzQzOwkJCQkoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkpKQogCQkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCA1NDI5ZTlmMTliNjU1Li43ODBhZmRhMTE3NjU2IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG1fd2FrZXVwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cG93ZXIuaCYjMzQ7CiAKQEAgLTgwMiw2ICYjNDM7ODAzLDIyIEBAIHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJc3VzcGVuZF9zdGF0ZV90IHN0YXRlOwogCWludCBlcnJvcjsKIAomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaW50IGlkeDsKJiM0MzsJc3RydWN0IHdha2V1cF9zb3VyY2UgKndzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUAomIzQzOwlpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTsKJiM0MzsJd3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7CiYjNDM7CXdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7CiYjNDM7CWlmICghd3MpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOyNlbmRpZgomIzQzOwogCWVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTkyOSw2ICYjNDM7OTQ2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlzdXNwZW5kX3N0YXRlX3Qgc3RhdGUgPSBkZWNvZGVfc3RhdGUoYnVmLCBuKTsKIAlpbnQgZXJyb3I7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWludCBpZHg7CiYjNDM7CXN0cnVjdCB3YWtldXBfc291cmNlICp3czsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHsKJiM0MzsJCWlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpOwomIzQzOwkJd3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7CiYjNDM7CQl3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpOwomIzQzOwkJaWYgKCF3cykKJiM0MzsJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT04KIAkgICAgJmFtcDsmYW1wOyBzdHJjbXAoYnVmLCAmIzM0O29mZiYjMzQ7KSAmYW1wOyZhbXA7IHN0cmNtcChidWYsICYjMzQ7b2ZmXG4mIzM0OykpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IDAxNmYxNmNhNTc3OTkuLjQ5NDk0N2Q1MDlmM2MgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTk4NCw3ICYjNDM7OTg0LDcgQEAgc3RhdGljIHZvaWQgX19ycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiAJCXRyYWNlX3JwY190YXNrX3N5bmNfc2xlZXAodGFzaywgdGFzay0mZ3Q7dGtfYWN0aW9uKTsKIAkJc3RhdHVzID0gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQoJmFtcDt0YXNrLSZndDt0a19ydW5zdGF0ZSwKIAkJCQlSUENfVEFTS19RVUVVRUQsIHJwY193YWl0X2JpdF9raWxsYWJsZSwKLQkJCQlUQVNLX0tJTExBQkxFfFRBU0tfRlJFRVpBQkxFKTsKJiM0MzsJCQkJVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSk7CiAJCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCQkvKgogCQkJICogV2hlbiBhIHN5bmMgdGFzayByZWNlaXZlcyBhIHNpZ25hbCwgaXQgZXhpdHMgd2l0aAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogRnV6emluZyBDYW5kaWRhdGVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFdlJiMzOTt2ZSBnb3QgdGhyZWUgZmlsZXMgbW9kaWZpZWQ6IGBmcy9mdXNlL2Rldi5jYCwgYGtlcm5lbC9wb3dlci9tYWluLmNgLCBhbmQgYG5ldC9zdW5ycGMvc2NoZWQuY2AuIFRoZSBmaXJzdCB0d28gZmlsZXMsIHRoYXQgZGVhbCB3aXRoIGZ1c2UgYW5kIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbCwgYXJlIGFsbW9zdCBjZXJ0YWlubHkgd29ydGggY2xvc2VyIHNjcnV0aW55LiBUaGUgYG5ldC9zdW5ycGMvc2NoZWQuY2AgZmlsZSBpcyBpbnRlcmVzdGluZyBhbmQgbWlnaHQgYmUgd29ydGggZXhwbG9yaW5nLCBidXQgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZpcnN0IHR3byBmaXJzdC4KCkZpcnN0LCBga2VybmVsL3Bvd2VyL21haW4uY2AgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjaGVja3Mgd2l0aGluIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgLiBUaGVzZSBhcmUgY2xlYXJseSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSYjMzk7cmUgZXhwb3NlZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBgL3N5cy9wb3dlci9zdGF0ZWAgYW5kIGAvc3lzL3Bvd2VyL2F1dG9zbGVlcGAgaW50ZXJmYWNlcy4gV3JpdGluZyB0byB0aGVzZSBmaWxlcyBpcyBhIGNyaXRpY2FsIHBvaW50IGZvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wuIFRoZSBhZGRlZCBjYXBhYmlsaXR5IGNoZWNrLCBgY2FwYWJsZShDQVBfU1lTX0JPT1QpYCwgYW5kIHRoZSB3YWtldXAgc291cmNlIGNoZWNrIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucywgYmFzaWNhbGx5IGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSBjaGVja3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgKmRlbWFuZHMqIGZ1enppbmcuIFdlIGhhdmUgYW4gb3Bwb3J0dW5pdHkgZm9yIGNvbnRyb2wtcGxhbmUgZnV6emluZyBoZXJlLCB3aGVyZSB1c2VybGFuZCBpbnB1dCBwb3RlbnRpYWxseSBhbHRlcnMga2VybmVsIGJlaGF2aW9yLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGZzL2Z1c2UvZGV2LmNgLiBDaGFuZ2VzIGhlcmUgbW9kaWZ5IGEgZnVuY3Rpb24gbGlrZSBgZnVzZV9nZXRfcmVxYCwgd2hpY2ggSSBrbm93IGlzIGEgY29yZSBGVVNFIGZ1bmN0aW9uIGZvciByZXF1ZXN0IGhhbmRsaW5nLiBJdCBpbnZvbHZlcyBjaGFuZ2luZyBgVEFTS19GUkVFWkFCTEVgIHRvIGBUQVNLX0ZSRUVaQUJMRV9VTlNBRkVgLiBUaGUgc2FtZSB0eXBlIG9mIGNoYW5nZSwgZnJvbSBgVEFTS19GUkVFWkFCTEVgIHRvIGBUQVNLX0ZSRUVaQUJMRV9VTlNBRkVgLCBvY2N1cnMgaW4gYG5ldC9zdW5ycGMvc2NoZWQuY2Agd2l0aGluIGBfX3JwY19leGVjdXRlYC4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0byB0YXNrIHN0YXRlcyBhcmUgYWxzbyB3b3J0aCBhIGxvb2suCgpGcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGFzIGEgd2hvbGUgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljLCBlbmNvbXBhc3NpbmcgcG93ZXIgbWFuYWdlbWVudCwgRlVTRSwgYW5kIFNVTlJQQy4gVGhlc2UgYXJlIGFyZWFzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4KCkZpbmFsbHksIHJlZ2FyZGluZyBga2VybmVsL3Bvd2VyL21haW4uY2AsIEkmIzM5O2xsIHByb2JhYmx5IHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGlzIGNvZGUuIE15IGd1ZXNzIGlzIGl0JiMzOTtzIGNvbXBpbGVkIHdpdGggYENPTkZJR19QTWAgb3IgYENPTkZJR19QTV9TTEVFUGAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGluIHRoZSBga2VybmVsL3Bvd2VyL01ha2VmaWxlYC4gVGhpcyB3aWxsIGhlbHAgbWUgc2V0IHVwIGEgY29ycmVjdCBmdXp6aW5nIGVudmlyb25tZW50IGZvciB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21haW4ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvTWFrZWZpbGU9MTE9b2JqLXlcdFx0XHRcdCYjNDM7PSBxb3Mub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QTSlcdFx0JiM0Mzs9IG1haW4ub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19WVF9DT05TT0xFX1NMRUVQKVx0JiM0Mzs9IGNvbnNvbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguCgoqKlBNIENvbnRleHR1YWxpemF0aW9uIGFuZCBGVVNFIERlcGVuZGVuY3kgQW5hbHlzaXMqKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgYENPTkZJR19QTWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGxldmVyYWdpbmcgYCNpZmRlZiBDT05GSUdfUE1fU0xFRVBgLCBzbyBwb3dlciBtYW5hZ2VtZW50IGlzIGRlZmluaXRlbHkgYSBrZXkgZmFjdG9yIGluIHdoYXRldmVyIHRoaXMgaXMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzIGludm9sdmVkLCBJIHNob3VsZCBjaGVjayBgZnMvZnVzZS9kZXYuY2AuIEkgYmVsaWV2ZSBgZnVzZV9nZXRfcmVxYCByZXNpZGVzIHRoZXJlLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRvIHN0YXJ0LgoKQWxzbyBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB3ZSBoYXZlIGBDT05GSUdfRlVTRV9GU2AgZW5hYmxlZCBpbiB0aGlzIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfZ2V0X3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kZXYuYz01NT1zdGF0aWMgdm9pZCBmdXNlX3JlcXVlc3RfZnJlZShzdHJ1Y3QgZnVzZV9yZXEgKnJlcSlcbi0tXG5mcy9mdXNlL2Rldi5jLTYwLVxuZnMvZnVzZS9kZXYuYzo2MTpzdGF0aWMgdm9pZCBfX2Z1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpXG5mcy9mdXNlL2Rldi5jLTYyLXtcbi0tXG5mcy9mdXNlL2Rldi5jPTEwNj1zdGF0aWMgdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTA3LVxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbmZzL2Z1c2UvZGV2LmMtMTA5LXtcbi0tXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxuLS1cbmZzL2Z1c2UvZGV2LmMtNzUzLVx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXG5mcy9mdXNlL2Rldi5jOjc1NDpcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy03NTUtXHRmdXNlX3NlbmRfb25lKGZpcSwgcmVxKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcbi0tXG5mcy9mdXNlL2Rldi5jLTgyMS1cdH0gZWxzZSB7XG5mcy9mdXNlL2Rldi5jOjgyMjpcdFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy04MjMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jLTgyNi1cbmZzL2Z1c2UvZGV2LmM6ODI3Olx0LyogTmVlZHMgdG8gYmUgZG9uZSBhZnRlciBmdXNlX2dldF9yZXEoKSBzbyB0aGF0IGZjaC1cdTAwM2VtaW5vciBpcyB2YWxpZCAqL1xuZnMvZnVzZS9kZXYuYy04MjgtXHRmdXNlX2FkanVzdF9jb21wYXQoZmNoLCBhcmdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXG4tLVxuZnMvZnVzZS9kZXYuYy05MDEtXHR9IGVsc2Uge1xuZnMvZnVzZS9kZXYuYzo5MDI6XHRcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xuZnMvZnVzZS9kZXYuYy05MDMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jPTkxNz1pbnQgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5KHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncywgdTY0IHVuaXF1ZSlcbi0tXG5mcy9mdXNlL2Rldi5jLTkyMS1cbmZzL2Z1c2UvZGV2LmM6OTIyOlx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy05MjMtXHRpZiAoSVNfRVJSKHJlcSkpXG4tLVxuZnMvZnVzZS9kZXYuYz0xNTE2PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3JlYWQoc3RydWN0IGZ1c2VfZGV2ICpmdWQsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2Z1c2UvZGV2LmMtMTYyNi1cdGxpc3RfbW92ZV90YWlsKFx1MDAyNnJlcS1cdTAwM2VsaXN0LCBcdTAwMjZmcHEtXHUwMDNlcHJvY2Vzc2luZ1toYXNoXSk7XG5mcy9mdXNlL2Rldi5jOjE2Mjc6XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTYyOC1cdHNldF9iaXQoRlJfU0VOVCwgXHUwMDI2cmVxLVx1MDAzZWZsYWdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTE4NjA9c3RhdGljIHNzaXplX3QgZnVzZV9kZXZfZG9fd3JpdGUoc3RydWN0IGZ1c2VfZGV2ICpmdWQsXG4tLVxuZnMvZnVzZS9kZXYuYy0xOTE3LVx0aWYgKG9oLnVuaXF1ZSBcdTAwMjYgRlVTRV9JTlRfUkVRX0JJVCkge1xuZnMvZnVzZS9kZXYuYzoxOTE4Olx0XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnBxLVx1MDAzZWxvY2spO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXG4tLVxuZnMvZnVzZS9kZXYuYy0yMTYxLVx0XHRcdFx0XHRzZXRfYml0KEZSX1BSSVZBVEUsIFx1MDAyNnJlcS1cdTAwM2VmbGFncyk7XG5mcy9mdXNlL2Rldi5jOjIxNjI6XHRcdFx0XHRcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy0yMTYzLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cmVxLVx1MDAzZWxpc3QsIFx1MDAyNnRvX2VuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBmdXNlX2dldF9yZXFgIGhlcmUuIFJpZ2h0LCB0aGF0JiMzOTtzIHVzZWQgaW4gYGZ1c2VfY2hhbl9zZW5kYCwgYGZ1c2VfY2hhbl9zZW5kX2JnYCwgYW5kIGBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlgLiBPa2F5LCB0aG9zZSBhcmUgYWxsICpjb3JlKiBGVVNFIGZ1bmN0aW9ucy4gU28sIGBmdXNlX2dldF9yZXFgIGlzIHByZXR0eSBmdW5kYW1lbnRhbC4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGEgYml0LiBXaGVyZSBlbHNlIGRvZXMgdGhpcyBwYXR0ZXJuIGVtZXJnZT8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvc3VucnBjL3NjaGVkLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIG92ZXIgdGhlcmUuIEFoLCB5ZXMsIGBfX3JwY19leGVjdXRlYCwgdGhhdCYjMzk7cyBhIGtleSBTVU5SUEMgZnVuY3Rpb24uIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcnBjX2V4ZWN1dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3NjaGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zY2hlZC5jPTM0OD1FWFBPUlRfU1lNQk9MX0dQTChycGNfd2FpdF9mb3JfY29tcGxldGlvbl90YXNrKTtcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXG5uZXQvc3VucnBjL3NjaGVkLmM6MzU3OiAqIHdoaWNoIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBfX3JwY19leGVjdXRlKCkgZG9lc24mIzM5O3QgbG9vcCAoZHVlIHRvIHRoZVxubmV0L3N1bnJwYy9zY2hlZC5jLTM1OC0gKiBsb2NrbGVzcyBSUENfSVNfUVVFVUVEKCkgdGVzdCkgYmVmb3JlIHdlJiMzOTt2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz04OTc9c3RhdGljIGJvb2wgeHBydF9uZWVkc19tZW1hbGxvYyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBycGNfdGFzayAqdGspXG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jLTkwOC0gKi9cbm5ldC9zdW5ycGMvc2NoZWQuYzo5MDk6c3RhdGljIHZvaWQgX19ycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAxNT12b2lkIHJwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAyMi1cdFx0dW5zaWduZWQgaW50IHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xubmV0L3N1bnJwYy9zY2hlZC5jOjEwMjM6XHRcdF9fcnBjX2V4ZWN1dGUodGFzayk7XG5uZXQvc3VucnBjL3NjaGVkLmMtMTAyNC1cdFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTEwMjg9c3RhdGljIHZvaWQgcnBjX2FzeW5jX3NjaGVkdWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMS1cbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDMyOlx0X19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDMzLVx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgZm9yIHNvbWVvbmUgd2hvIGtub3dzIHRoZWlyIHdheSBhcm91bmQga2VybmVsIGludGVybmFsczoKCioqUlBDIEV4ZWN1dGlvbiBhbmQgUG93ZXIgTWFuYWdlbWVudDogQSBRdWljayBTY2FuKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgUmVtb3RlIFByb2NlZHVyZSBDYWxscyAoUlBDKSBpbnRlcmFjdCB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBDT05GSUdfU1VOUlBDYCBjb25maWcgb3B0aW9uLiBJIHNlZSB0aGF0IGJvdGggYHJwY19leGVjdXRlYCBhbmQgYHJwY19hc3luY19zY2hlZHVsZWAgdWx0aW1hdGVseSBmdW5uZWwgdGhlaXIgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGBfX3JwY19leGVjdXRlYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgZXhlY3V0aW9uIHBhdGggd2Ugc2hvdWxkIGtlZXAgaW4gbWluZC4KClRoZW4gdGhlIHRob3VnaHQgdmVlcnMgdG93YXJkcyBga2VybmVsL3Bvd2VyL21haW4uY2AuIE15IHNwaWRleSBzZW5zZXMgYXJlIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJhY3Rpb24sIGFuZCB0aGUgbWVudGlvbiBvZiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBhcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgcmFpc2VzIGEgcmVkIGZsYWcuIFRoZXNlIGFyZSBjbGFzc2ljIGhvb2tzIGludG8gdGhlIHN5c3RlbSYjMzk7cyBwb3dlciBzdGF0ZSwgYW5kIGFueSBSUEMgYWN0aXZpdHkgdGhhdCBtaWdodCBiZSBzZW5zaXRpdmUgdG8gc3VzcGVuZC9yZXN1bWUgc2hvdWxkIGJlIGNhcmVmdWxseSBzY3J1dGluaXplZCBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUEMgb3BlcmF0aW9ucyBiZWhhdmUgZHVyaW5nIHN5c3RlbSBzbGVlcCBvciByZXN1bWUsIGFuZCB3aGV0aGVyIGFueSBpbXByb3BlciBoYW5kbGluZyBvZiBSUEMgY2FsbHMgY2FuIGxlYWQgdG8gaXNzdWVzIHdpdGggYXV0b3NsZWVwIG9yIG90aGVyIHBvd2VyLXNhdmluZyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgUlBDIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBzeXN0ZW0gZnJvbSBlbnRlcmluZyBhIGxvdy1wb3dlciBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9tYWluLmM9NzczPXN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgZGVjb2RlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4tLVxua2VybmVsL3Bvd2VyL21haW4uYy03OTktXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjgwMDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxua2VybmVsL3Bvd2VyL21haW4uYy04MDEtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG93ZXIgTWFuYWdlbWVudCBhbmQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHN0YXRlX3N0b3JlYCBtYW5hZ2VzIHRoZSBgL3N5cy9wb3dlci9zdGF0ZWAgc3lzZnMgZW50cnkgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGhhbmRsZXMgYC9zeXMvcG93ZXIvYXV0b3NsZWVwYC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgcGllY2UuIE15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGdvZXMgdG8gdGhlc2UgdHdvIGZ1bmN0aW9uczogYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYGZ1c2VfZ2V0X3JlcWAgYW5kIGBfX3JwY19leGVjdXRlYCBpbiB0aGUgYmFjayBvZiBteSBtaW5kLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBQTV9TTEVFUGAgaXMgdGhlIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGJvdGggYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIEl0JiMzOTtzIGEga2V5IGRldGFpbCB0byBjb25maXJtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgaW4gcmVsYXRpb24gdG8gYW55IHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcyB3aXRoIGBGVVNFX0ZTYCBhbmQgYFNVTlJQQ2AsIGp1c3QgaW4gY2FzZS4gVGhleSBmZWVsIGxlc3MgZGlyZWN0bHkgcmVsZXZhbnQsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIGVsaW1pbmF0ZSBleHRyYW5lb3VzIHBvc3NpYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mz1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuLS1cbmtlcm5lbC9wb3dlci9tYWluLmMtNzk5LVxua2VybmVsL3Bvd2VyL21haW4uYzo4MDA6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbmtlcm5lbC9wb3dlci9tYWluLmMtODAxLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFBvd2VyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBgc3RhdGVfc3RvcmVgIGlzIGRlZmluZWQuIFRoZSBoaW50IHNheXMgaXQmIzM5O3MgaW4gYGtlcm5lbC9wb3dlci9tYWluLmNgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoYXQgYHN0YXRlX3N0b3JlYCBwcm9iYWJseSBkZWFscyB3aXRoIHN5c3RlbSBwb3dlciBzdGF0ZXMsIHNvIGl0JiMzOTtzIGxpa2VseSBuZXN0bGVkIHdpdGhpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgZGlyZWN0bHkgZXhhbWluaW5nIGBrZXJuZWwvcG93ZXIvbWFpbi5jYCwgYW5kIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBhcm91bmQgdGhhdCBzcGVjaWZpYyBpZGVudGlmaWVyIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCBhbmQgd2hhdCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRpZmZlcmVudCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlcyBvZiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZpbGUgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgc3lzdGVtJiMzOTtzIHBvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIDgwMTpcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4gODAyOlx0e1xuIDgwMzpcdFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlO1xuIDgwNDpcdFx0aW50IGVycm9yO1xuIDgwNTpcdFxuIDgwNjpcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbiA4MDc6XHRcdGludCBpZHg7XG4gODA4Olx0XHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4gODA5Olx0I2VuZGlmXG4gODEwOlx0XG4gODExOlx0XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSlcbiA4MTI6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4MTM6XHRcbiA4MTQ6XHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4gODE1Olx0XHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcbiA4MTY6XHRcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuIDgxNzpcdFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbiA4MTg6XHRcdGlmICghd3MpXG4gODE5Olx0XHRcdHJldHVybiAtRVBFUk07XG4gODIwOlx0I2VuZGlmXG4gODIxOlx0XG4gODIyOlx0XHRlcnJvciA9IHBtX2F1dG9zbGVlcF9sb2NrKCk7XG4gODIzOlx0XHRpZiAoZXJyb3IpXG4gODI0Olx0XHRcdHJldHVybiBlcnJvcjtcbiA4MjU6XHRcbiA4MjY6XHRcdGlmIChwbV9hdXRvc2xlZXBfc3RhdGUoKSBcdTAwM2UgUE1fU1VTUEVORF9PTikge1xuIDgyNzpcdFx0XHRlcnJvciA9IC1FQlVTWTtcbiA4Mjg6XHRcdFx0Z290byBvdXQ7XG4gODI5Olx0XHR9XG4gODMwOlx0XG4gODMxOlx0XHRzdGF0ZSA9IGRlY29kZV9zdGF0ZShidWYsIG4pO1xuIDgzMjpcdFx0aWYgKHN0YXRlIFx1MDAzYyBQTV9TVVNQRU5EX01BWCkge1xuIDgzMzpcdFx0XHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pXG4gODM0Olx0XHRcdFx0c3RhdGUgPSBtZW1fc2xlZXBfY3VycmVudDtcbiA4MzU6XHRcbiA4MzY6XHRcdFx0ZXJyb3IgPSBwbV9zdXNwZW5kKHN0YXRlKTtcbiA4Mzc6XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NQVgpIHtcbiA4Mzg6XHRcdFx0ZXJyb3IgPSBoaWJlcm5hdGUoKTtcbiA4Mzk6XHRcdH0gZWxzZSB7XG4gODQwOlx0XHRcdGVycm9yID0gLUVJTlZBTDtcbiA4NDE6XHRcdH1cbiA4NDI6XHRcbiA4NDM6XHQgb3V0OlxuIDg0NDpcdFx0cG1fYXV0b3NsZWVwX3VubG9jaygpO1xuIDg0NTpcdFx0cmV0dXJuIGVycm9yID8gZXJyb3IgOiBuO1xuIDg0NjpcdH1cbiA4NDc6XHRcbiA4NDg6XHRwb3dlcl9hdHRyKHN0YXRlKTtcbiA4NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG93ZXIgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlbGF0aW9uc2hpcCBoZXJlLiBJdCBzZWVtcyBgc3RhdGVfc3RvcmVgIGlzICp0aGUqIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIG9yIHNldHRpbmcgdGhlIHN0YXRlIGF0dHJpYnV0ZSwgcHJlc3VtYWJseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBwb3dlcl9hdHRyKHN0YXRlKWAuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBDT05GSUdfUE1fU0xFRVBgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhlcmUmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGJlIHByZWNpc2U6IGlzIGBzdGF0ZV9zdG9yZWAgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19QTV9TTEVFUGAgaXMgYWN0aXZlLCBvciBpcyBpdCBhIGJpdCBtb3JlIGdlbmVyYWwsIHRpZWQgdG8gdGhlIGJyb2FkZXIgYENPTkZJR19QTWAgdW1icmVsbGEsIG9yIHBlcmhhcHMgYm90aD8gSXQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBga2VybmVsL3Bvd2VyL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgd2lsbCBkZWZpbml0aXZlbHkgdGVsbCBtZSB3aGVuIGFuZCBob3cgYHN0YXRlX3N0b3JlYCBnZXRzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNsZWFyIGluZGljYXRpb25zIG9mIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgaXRzIGNvbXBpbGF0aW9uLiBUaGF0IHNob3VsZCByZXNvbHZlIHRoZSBhbWJpZ3VpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21haW4ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvTWFrZWZpbGU9MTE9b2JqLXlcdFx0XHRcdCYjNDM7PSBxb3Mub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QTSlcdFx0JiM0Mzs9IG1haW4ub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19WVF9DT05TT0xFX1NMRUVQKVx0JiM0Mzs9IGNvbnNvbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKlBNIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfUE1gIGlzIGVuYWJsZWQuIFdpdGhvdXQgdGhhdCwgdGhlcmUmIzM5O3Mgbm8gcG93ZXIgbWFuYWdlbWVudCwgYW5kIHRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBPbmNlIHRoYXQmIzM5O3MgdmVyaWZpZWQsIHRoZSBuZXh0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBpcyB0aGUgYGF1dG9zbGVlcF9zdG9yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IGNvbnRyb2xzIHRoZSBhdXRvbWF0aWMgc2xlZXAgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgYW5kIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55dGhpbmcgdGhlcmUgdGhhdCBtaWdodCBjb25mbGljdCBvciBpbnRlcmFjdCB3aXRoIG15IHNwZWNpZmljIG5lZWRzIGluIHRoZSBjdXJyZW50IHByb2plY3Qgb3IgYW5hbHlzaXMuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gbWFraW5nIHRoaXMgYWxsIHdvcmsgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL21haW4uYz05MjE9c3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxua2VybmVsL3Bvd2VyL21haW4uYy05NDEtXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjk0MjpzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTk0My1cdFx0XHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaGVyZSBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBgYXV0b3NsZWVwX3N0b3JlYCBpcyB3cmFwcGVkIHdpdGhpbiBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIEl0JiMzOTtzIGNydWNpYWwsIGVzcGVjaWFsbHkgaW4gdGhpcyBjb2RlYmFzZSwgdG8gdW5kZXJzdGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCBmZWF0dXJlIGZsYWdzLCBvciBwZXJoYXBzIGRlYnVnZ2luZyBkZWZpbmVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0cyBhdmFpbGFiaWxpdHk/IEkgbmVlZCB0byBrbm93IGlmIHRoaXMgdmFyaWFibGUsIG9yIG1vcmUgYWNjdXJhdGVseSwgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgdmFyaWFibGUsIGhhcyBhbnkgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGJlZm9yZSBJIGNhbiBwcm9jZWVkLiBEZXBlbmRpbmcgb24gdGhlIGFuc3dlciwgaXQgd291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIG15IHBlcnNwZWN0aXZlIG9uIHRoZSBuZXh0IHN0ZXBzLiBGb3IgaW5zdGFuY2UsIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhIGZlYXR1cmUgZmxhZywgSSYjMzk7ZCB3YW50IHRvIGZpbmQgdGhlIGRlZmluaW5nIG1hY3JvIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTQyOlx0c3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIDk0MzpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gOTQ0Olx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4gOTQ1Olx0e1xuIDk0NjpcdFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7XG4gOTQ3Olx0XHRpbnQgZXJyb3I7XG4gOTQ4Olx0XG4gOTQ5Olx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuIDk1MDpcdFx0aW50IGlkeDtcbiA5NTE6XHRcdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbiA5NTI6XHQjZW5kaWZcbiA5NTM6XHRcbiA5NTQ6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxuIDk1NTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDk1NjpcdFxuIDk1NzpcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbiA5NTg6XHRcdGlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX09OKSB7XG4gOTU5Olx0XHRcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuIDk2MDpcdFx0XHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcbiA5NjE6XHRcdFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbiA5NjI6XHRcdFx0aWYgKCF3cylcbiA5NjM6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDk2NDpcdFx0fVxuIDk2NTpcdCNlbmRpZlxuIDk2NjpcdFxuIDk2NzpcdFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT05cbiA5Njg6XHRcdCAgICBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCYjMzQ7b2ZmXCYjMzQ7KSBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCYjMzQ7b2ZmXFxuXCYjMzQ7KSlcbiA5Njk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTcwOlx0XG4gOTcxOlx0XHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pXG4gOTcyOlx0XHRcdHN0YXRlID0gbWVtX3NsZWVwX2N1cnJlbnQ7XG4gOTczOlx0XG4gOTc0Olx0XHRlcnJvciA9IHBtX2F1dG9zbGVlcF9zZXRfc3RhdGUoc3RhdGUpO1xuIDk3NTpcdFx0cmV0dXJuIGVycm9yID8gZXJyb3IgOiBuO1xuIDk3NjpcdH1cbiA5Nzc6XHRcbiA5Nzg6XHRwb3dlcl9hdHRyKGF1dG9zbGVlcCk7XG4gOTc5Olx0I2VuZGlmIC8qIENPTkZJR19QTV9BVVRPU0xFRVAgKi9cbiA5ODA6XHRcbiA5ODE6XHQjaWZkZWYgQ09ORklHX1BNX1dBS0VMT0NLU1xuIDk4MjpcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIDk4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiA5ODQ6XHRcdFx0XHQgICAgICBjaGFyICpidWYpXG4gOTg1Olx0e1xuIDk4NjpcdFx0cmV0dXJuIHBtX3Nob3dfd2FrZWxvY2tzKGJ1ZiwgdHJ1ZSk7XG4gOTg3Olx0fVxuIDk4ODpcdFxuIDk4OTpcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiA5OTA6XHRcdFx0XHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIDk5MTpcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTbGVlcCBhbmQgRmlsZXN5c3RlbSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGF1dG9zbGVlcF9zdG9yZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYCNpZmRlZiBDT05GSUdfUE1fQVVUT1NMRUVQYC4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgYW5kLCBzcGVjaWZpY2FsbHksIGF1dG9tYXRpYyBzbGVlcCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoaXMgYWxzbyBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIHJlbGF0ZWQgY29uZmlnczogYFBNX1NMRUVQYCwgYFBNX0FVVE9TTEVFUGAsIGBGVVNFX0ZTYCwgYW5kIGBTVU5SUENgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBhcmUgY29uZmlndXJlZCB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIHRoaXMgZml0cy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IHN5bWJvbHMgdG8gZm9sbG93OiBgc3RhdGVfc3RvcmVgLCBgYXV0b3NsZWVwX3N0b3JlYCAob2J2aW91c2x5KSwgYGZ1c2VfZ2V0X3JlcWAsIGFuZCBgX19ycGNfZXhlY3V0ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZWlyIGNvbm5lY3Rpb25zLiBIbW0sIGBmdXNlX2dldF9yZXFgLi4uIHRoYXQgcmluZ3MgYSBiZWxsIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgaW50byBgZnMvZnVzZS9kZXYuY2AuIFN0YXRpYyBmdW5jdGlvbnMgb2Z0ZW4gcG9pbnQgdG8gYmVpbmcgaW50ZXJuYWwgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfZ2V0X3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kZXYuYz01NT1zdGF0aWMgdm9pZCBmdXNlX3JlcXVlc3RfZnJlZShzdHJ1Y3QgZnVzZV9yZXEgKnJlcSlcbi0tXG5mcy9mdXNlL2Rldi5jLTYwLVxuZnMvZnVzZS9kZXYuYzo2MTpzdGF0aWMgdm9pZCBfX2Z1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpXG5mcy9mdXNlL2Rldi5jLTYyLXtcbi0tXG5mcy9mdXNlL2Rldi5jPTEwNj1zdGF0aWMgdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTA3LVxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbmZzL2Z1c2UvZGV2LmMtMTA5LXtcbi0tXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxuLS1cbmZzL2Z1c2UvZGV2LmMtNzUzLVx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXG5mcy9mdXNlL2Rldi5jOjc1NDpcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy03NTUtXHRmdXNlX3NlbmRfb25lKGZpcSwgcmVxKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcbi0tXG5mcy9mdXNlL2Rldi5jLTgyMS1cdH0gZWxzZSB7XG5mcy9mdXNlL2Rldi5jOjgyMjpcdFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy04MjMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jLTgyNi1cbmZzL2Z1c2UvZGV2LmM6ODI3Olx0LyogTmVlZHMgdG8gYmUgZG9uZSBhZnRlciBmdXNlX2dldF9yZXEoKSBzbyB0aGF0IGZjaC1cdTAwM2VtaW5vciBpcyB2YWxpZCAqL1xuZnMvZnVzZS9kZXYuYy04MjgtXHRmdXNlX2FkanVzdF9jb21wYXQoZmNoLCBhcmdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXG4tLVxuZnMvZnVzZS9kZXYuYy05MDEtXHR9IGVsc2Uge1xuZnMvZnVzZS9kZXYuYzo5MDI6XHRcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xuZnMvZnVzZS9kZXYuYy05MDMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jPTkxNz1pbnQgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5KHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncywgdTY0IHVuaXF1ZSlcbi0tXG5mcy9mdXNlL2Rldi5jLTkyMS1cbmZzL2Z1c2UvZGV2LmM6OTIyOlx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy05MjMtXHRpZiAoSVNfRVJSKHJlcSkpXG4tLVxuZnMvZnVzZS9kZXYuYz0xNTE2PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3JlYWQoc3RydWN0IGZ1c2VfZGV2ICpmdWQsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2Z1c2UvZGV2LmMtMTYyNi1cdGxpc3RfbW92ZV90YWlsKFx1MDAyNnJlcS1cdTAwM2VsaXN0LCBcdTAwMjZmcHEtXHUwMDNlcHJvY2Vzc2luZ1toYXNoXSk7XG5mcy9mdXNlL2Rldi5jOjE2Mjc6XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTYyOC1cdHNldF9iaXQoRlJfU0VOVCwgXHUwMDI2cmVxLVx1MDAzZWZsYWdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTE4NjA9c3RhdGljIHNzaXplX3QgZnVzZV9kZXZfZG9fd3JpdGUoc3RydWN0IGZ1c2VfZGV2ICpmdWQsXG4tLVxuZnMvZnVzZS9kZXYuYy0xOTE3LVx0aWYgKG9oLnVuaXF1ZSBcdTAwMjYgRlVTRV9JTlRfUkVRX0JJVCkge1xuZnMvZnVzZS9kZXYuYzoxOTE4Olx0XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnBxLVx1MDAzZWxvY2spO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXG4tLVxuZnMvZnVzZS9kZXYuYy0yMTYxLVx0XHRcdFx0XHRzZXRfYml0KEZSX1BSSVZBVEUsIFx1MDAyNnJlcS1cdTAwM2VmbGFncyk7XG5mcy9mdXNlL2Rldi5jOjIxNjI6XHRcdFx0XHRcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy0yMTYzLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cmVxLVx1MDAzZWxpc3QsIFx1MDAyNnRvX2VuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmxlY3Rpbmcgb24gQVBJIERlc2lnbjogU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGFkZHJlc3MgdGhlIHVzZSBvZiBgZnVzZV9nZXRfcmVxYCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGdvZXMgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmluZCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50LiBUaGlua2luZyBhYm91dCBpdCwgdGhlIGBmdXNlX2NoYW5fc2VuZGAsIGBmdXNlX2NoYW5fc2VuZF9iZ2AsIGFuZCBgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5YCBmdW5jdGlvbnMgY29tZSB0byBtaW5kLiBUaGVzZSBzZWVtIGxpa2UgbW9yZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBOb3csIGEgY3J1Y2lhbCBjaGVjazogSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZnVzZV9jaGFuX3NlbmRgIGlzbiYjMzk7dCBzdGF0aWMuIEl0IHdvdWxkIGJlIGNvdW50ZXJwcm9kdWN0aXZlIHRvIHN3YXAgYSBzdGF0aWMgZnVuY3Rpb24gZm9yIGFub3RoZXIgc3RhdGljIG9uZSEgVG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBhbmQgZ2V0IGEgZ3Jhc3Agb2Ygb3RoZXIgd2VsbCBpbXBsZW1lbnRlZCBBUElzLCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbmV0L3N1bnJwYy9zY2hlZC5jYCBhbmQgc3BlY2lmaWNhbGx5IGF0IGBfX3JwY19leGVjdXRlYCBhcyBJIGtub3cgdGhhdCBpdCBoYW5kbGVzIHRoZXNlIHR5cGVzIG9mIHNpdHVhdGlvbnMgYW5kIHNob3VsZCBoYXZlIGEgZ29vZCBwYXR0ZXJuIHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ycGNfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc2NoZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3NjaGVkLmM9MzQ4PUVYUE9SVF9TWU1CT0xfR1BMKHJwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2spO1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTYtICogTm90ZSB0aGUgb3JkZXJpbmcgb2YgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKCkgYW5kIHJwY19jbGVhcl9xdWV1ZWQoKSxcbm5ldC9zdW5ycGMvc2NoZWQuYzozNTc6ICogd2hpY2ggaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IF9fcnBjX2V4ZWN1dGUoKSBkb2VzbiYjMzk7dCBsb29wIChkdWUgdG8gdGhlXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU4LSAqIGxvY2tsZXNzIFJQQ19JU19RVUVVRUQoKSB0ZXN0KSBiZWZvcmUgd2UmIzM5O3ZlIGhhZCBhIGNoYW5jZSB0byB0ZXN0XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtOTA4LSAqL1xubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbm5ldC9zdW5ycGMvc2NoZWQuYy05MTAte1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDE1PXZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDIyLVx0XHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5uZXQvc3VucnBjL3NjaGVkLmM6MTAyMzpcdFx0X19ycGNfZXhlY3V0ZSh0YXNrKTtcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDI0LVx0XHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAyOD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfc2NoZWR1bGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDMxLVxubmV0L3N1bnJwYy9zY2hlZC5jOjEwMzI6XHRfX3JwY19leGVjdXRlKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd29yaykpO1xubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzMtXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQVBJIEVudHJ5cG9pbnRzIGZvciBQb3dlciBNYW5hZ2VtZW50KioKCk9rYXksIGhlcmUmIzM5O3MgbXkgcGxhbiBmb3IgZnV6emluZyB0aGVzZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBpbml0aWFsIHBvaW50IGFib3V0IGBfX3JwY19leGVjdXRlYCBiZWluZyBzdGF0aWMuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGdvIHdpdGggYHJwY19leGVjdXRlYCBpbnN0ZWFkOyB0aGF0JiMzOTtzIHRoZSBub24tc3RhdGljIHZlcnNpb24uIE1vdmluZyBvbiwgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIFRoZXkmIzM5O3JlIHN0YXRpYywgd2hpY2ggaW5pdGlhbGx5IGdhdmUgbWUgcGF1c2UuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgd2hpbGUgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5JiMzOTtyZSBub3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBkaXJlY3QgaGFuZGxlcnMgZm9yIHdyaXRlcyB0byB0aGUgc3lzZnMgZmlsZXMuIFRoZXkgYXJlIHRoZSBBUEkgZW50cnlwb2ludHMgZm9yIHRoZXNlIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMuCgpUaGUga2V5IGlzIHRoYXQgU3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdmlhIFZGUywgc28geWVzLCB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLiBTbywgbGlzdGluZyBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCBoZXJlLiBUaG91Z2gsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGNvdWxkIGBwbV9hdXRvc2xlZXBfc2V0X3N0YXRlYCBvciBgcG1fc3VzcGVuZGAgYmUgYmV0dGVyPyBVbHRpbWF0ZWx5LCB0aGUgZnV6emluZyBuZWVkcyB0byB0YXJnZXQgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcyB3aXRoaW4gYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAg4oCTIHRoZSBjYXBhYmlsaXR5IGFuZCB3YWtldXAgc291cmNlIGNoZWNrcy4gU28sIHRoZSBvcmlnaW5hbCBmdW5jdGlvbnMgYXJlIGluZGVlZCB0aGUgcmlnaHQgdGFyZ2V0cy4KCkkgZG91YmxlLWNoZWNrZWQgdG8gY29uZmlybSB0aGF0IGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGFyZSBzdGF0aWMuIFllcCwgdGhleSBhcmUuIEJ1dCwgYWdhaW4sIHRoZXkgYXJlICp0aGUqIGRpcmVjdCBoYW5kbGVycyBmb3IgdGhlIHN5c2ZzIHdyaXRlcywgdGhlIEFQSS4gVGhlIHByb21wdCBzYWlkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBpcyBmaW5lLiBJJiMzOTttIGdvaW5nIHRvIGxpc3QgdGhlbS4KCkkmIzM5O20gYWxzbyBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQTV9TTEVFUGAsIGBQTV9BVVRPU0xFRVBgLCBgRlVTRV9GU2AsIGFuZCBgU1VOUlBDYCDigJMganVzdCB0byBlbnN1cmUgdGhlIGZ1enppbmcgaXMgY29tcHJlaGVuc2l2ZSBhbmQgY29uc2lkZXJzIHRoZSByZWxldmFudCBvcHRpb25zLgoKRmluYWxseSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHJldmlzaXQgYGtlcm5lbC9wb3dlci9tYWluLmNgIHRvIGNvbmZpcm0gdGhlIGxvY2F0aW9uIG9mIGBzdGF0ZV9zdG9yZWAgYW5kIGVuc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL21haW4uYz03NzM9c3RhdGljIHN1c3BlbmRfc3RhdGVfdCBkZWNvZGVfc3RhdGUoY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgbilcbi0tXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTc5OS1cbmtlcm5lbC9wb3dlci9tYWluLmM6ODAwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTgwMS1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgc3RhdGVfc3RvcmVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgc3RhdGVfc3RvcmVgIGlzIGluZGVlZCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCBpdCYjMzk7cyBnb3QgaW1wbGljYXRpb25zIGZvciBob3cgdGhpcyBkYXRhIGlzIG1hbmFnZWQgYW5kIGFjY2Vzc2VkIHdpdGhpbiB0aGUgRlVTRSBpbXBsZW1lbnRhdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIHRoaXMsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IG9mIHRoZSBGVVNFIGtlcm5lbCBkcml2ZXIuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGZ1c2VfY2hhbl9zZW5kYCBhbmQgYGZ1c2VfY2hhbl9zZW5kX2JnYCBkZWZpbmVkIGluIGBmcy9mdXNlL2Rldi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBzdGF0ZV9zdG9yZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGRhdGEgY29ycnVwdGlvbiwgZ2l2ZW4gYHN0YXRlX3N0b3JlYCYjMzk7cyBzdGF0aWMgc2NvcGUuIFRoaXMgZXhwbG9yYXRpb24gd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfY2hhbl9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mdXNlL2Rldi5jPTc5NT1zdGF0aWMgdm9pZCBmdXNlX2FyZ3NfdG9fcmVxKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzKVxuLS1cbmZzL2Z1c2UvZGV2LmMtODA4LVxuZnMvZnVzZS9kZXYuYzo4MDk6c3NpemVfdCBmdXNlX2NoYW5fc2VuZChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MpXG5mcy9mdXNlL2Rldi5jLTgxMC17XG4tLVxuZnMvZnVzZS9kZXYuYz04NjE9c3RhdGljIGludCBmdXNlX3JlcXVlc3RfcXVldWVfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSlcbi0tXG5mcy9mdXNlL2Rldi5jLTg5MS1cbmZzL2Z1c2UvZGV2LmM6ODkyOmludCBmdXNlX2NoYW5fc2VuZF9iZyhzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGdmcF90IGdmcF9mbGFncylcbmZzL2Z1c2UvZGV2LmMtODkzLXtcbi0tXG5mcy9mdXNlL2Rldi5jLTkxNi1cbmZzL2Z1c2UvZGV2LmM6OTE3OmludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxuZnMvZnVzZS9kZXYuYy05MTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5vbi1TdGF0aWMgRHluYW1pY3MqKgoKUmlnaHQsIHRoZXNlIG9ic2VydmF0aW9ucyBzdWdnZXN0IGEgZHluYW1pYywgcG90ZW50aWFsbHkgZXZvbHZpbmcgc3RhdGUuIFRoaW5ncyBhcmVuJiMzOTt0IGZpeGVkOyB0aGV5JiMzOTtyZSBpbiBmbHV4LiBUaGUgY2x1ZSBJIG5lZWQgdG8gYmVnaW4gd2l0aCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29yZSwgdGhlIG1vc3QgYmFzaWMgdW5pdCBhbmQgdGhlIGhlYXJ0IG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIHNvIGxldCYjMzk7cyBjaGVjayBgcnBjX2V4ZWN1dGVgIHdpdGhpbiBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIFJQQyBjYWxscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJhc2ljIG1lY2hhbmlzbSBhbmQgaG93IHRoZXNlIGR5bmFtaWMgYmVoYXZpb3JzIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc2NoZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3NjaGVkLmM9MzQ4PUVYUE9SVF9TWU1CT0xfR1BMKHJwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2spO1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTYtICogTm90ZSB0aGUgb3JkZXJpbmcgb2YgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKCkgYW5kIHJwY19jbGVhcl9xdWV1ZWQoKSxcbm5ldC9zdW5ycGMvc2NoZWQuYzozNTc6ICogd2hpY2ggaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IF9fcnBjX2V4ZWN1dGUoKSBkb2VzbiYjMzk7dCBsb29wIChkdWUgdG8gdGhlXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU4LSAqIGxvY2tsZXNzIFJQQ19JU19RVUVVRUQoKSB0ZXN0KSBiZWZvcmUgd2UmIzM5O3ZlIGhhZCBhIGNoYW5jZSB0byB0ZXN0XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtOTA4LSAqL1xubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbm5ldC9zdW5ycGMvc2NoZWQuYy05MTAte1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDE0LSAqL1xubmV0L3N1bnJwYy9zY2hlZC5jOjEwMTU6dm9pZCBycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAxNi17XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjItXHRcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDIzOlx0XHRfX3JwY19leGVjdXRlKHRhc2spO1xubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjQtXHRcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDI4PXN0YXRpYyB2b2lkIHJwY19hc3luY19zY2hlZHVsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzEtXG5uZXQvc3VucnBjL3NjaGVkLmM6MTAzMjpcdF9fcnBjX2V4ZWN1dGUoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBycGNfdGFzaywgdS50a193b3JrKSk7XG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMy1cdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3dlciBNYW5hZ2VtZW50IFJlbGF0ZWQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gYHJwY19leGVjdXRlYCBpc24mIzM5O3Qgc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gdmFyaW91cyBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBjb250ZXh0LiBHaXZlbiB0aGlzLCBteSBhdHRlbnRpb24gaXMgbm93IGRyYXduIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHN0YXRlX3N0b3JlYCwgYGF1dG9zbGVlcF9zdG9yZWAsIGBmdXNlX2NoYW5fc2VuZGAsIGBmdXNlX2NoYW5fc2VuZF9iZ2AsIGBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlgLCBhbmQgb2YgY291cnNlLCBgcnBjX2V4ZWN1dGVgIGl0c2VsZi4KClRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBhcmUgaW5kZWVkIHRoZSBjb3JlIG9mIHRoZSBwb3dlciBtYW5hZ2VtZW50IGNoYW5nZXMuIENvbnNpZGVyaW5nIEkgd2FzIGludm9sdmVkIHdpdGggdGhlc2UgbW9kaWZpY2F0aW9ucywgSSB0aGluayB0aGlzIHNob3VsZCBiZSBhIHNpbXBsZSB2YWxpZGF0aW9uLiBZdXAsIHRob3NlIGFyZSB0aGUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIHRoYXQgd2VyZSBjaGFuZ2VkLCBzbyB0aGlzIGhlbHBzLgoKTm93LCBsZXQmIzM5O3MgY29ycmVsYXRlIHRoZXNlIHN5bWJvbHMgd2l0aCB0aGVpciBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBQTV9TTEVFUGAsIGBQTV9BVVRPU0xFRVBgLCBgRlVTRV9GU2AsIGFuZCBgU1VOUlBDYC4gV2UgYXJlIGV4cGVjdGluZyB0aGF0IHRoZSBwb3dlciBtYW5hZ2VtZW50IHdpbGwgbmVlZCB0byBjaGFuZ2UgYWNjb3JkaW5nIHRvIGhvdyB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIGJlaGF2ZXMuCgpJJiMzOTtsbCB2ZXJpZnkgdGhhdCBgUE1fU0xFRVBgIGFuZCBgUE1fQVVUT1NMRUVQYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY29kZSBzaG93cyBgI2lmZGVmIENPTkZJR19QTV9TTEVFUGAgY29uZGl0aW9ucyBhcm91bmQgYm90aCBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYC4gYFBNX0FVVE9TTEVFUGAgYWxzbyBjb25kaXRpb25hbGx5IHN1cnJvdW5kcyBgYXV0b3NsZWVwX3N0b3JlYC4gVGhpcyBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgb3ZlcmFsbCBnb2Fscy4gYEZVU0VfRlNgIGlzIGV4cGVjdGVkIGZvciBGVVNFIGZpbGVzeXN0ZW0gaW50ZWdyYXRpb24sIGFuZCBgU1VOUlBDYCByZWxhdGVzIHRvIHRoZSBTVU5SUEMgc3Vic3lzdGVtLCBhcyBleHBlY3RlZC4KCkZvciBGVVNFLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBmcy9mdXNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBGVVNFX0ZTYC4gVGhpcyBpcyBqdXN0IGdvb2QgcHJhY3RpY2UgYW5kIHdpbGwgY29uZmlybSBteSBleGlzdGluZyBrbm93bGVkZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVNFX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZnVzZS9LY29uZmlnOjI6Y29uZmlnIEZVU0VfRlNcbmZzL2Z1c2UvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6CgoqKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFNVTlJQQyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgU1VOUlBDYCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdGhlIGBuZXQvc3VucnBjL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGBuZXRgIGlzIG5ldHdvcmstcmVsYXRlZCwgYW5kIGBzdW5ycGNgLi4uIHdlbGwsIHRoYXTigJlzIHNlbGYtZXhwbGFuYXRvcnkuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBjb250YWluIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVzY3JpcHRpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgU1VOUlBDYCBpcyBidWlsdCBhbmQgZW5hYmxlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNVTlJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2OmNvbmZpZyBTVU5SUENfR1NTXG5uZXQvc3VucnBjL0tjb25maWctNy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cdGJvb2xcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMTQtXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXG5uZXQvc3VucnBjL0tjb25maWctMTYtXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMzUtXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xubmV0L3N1bnJwYy9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo1MDpjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXG5uZXQvc3VucnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1JQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXCYjMzQ7XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTYzLVxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXG5uZXQvc3VucnBjL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFNVTlJQQ2AgaXMgb25lIG9mIHRob3NlIHNldHRpbmdzIHRoYXQgZ2V0cyBmbGlwcGVkIG9uLCBvciBvZmYsIGRlcGVuZGluZyBvbiBhIGZldyBrZXkgZmFjdG9ycy4gVHlwaWNhbGx5LCBpdCYjMzk7cyBsaW5rZWQgdG8gZWl0aGVyIGBORlNfRlNgIG9yIGBORlNEYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBzdGF0ZSwgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGhhdmUgYSBoYW5kIGluIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBuZXh0IG9idmlvdXMgcGxhY2UgdG8gbG9vayBpcyBga2VybmVsL3Bvd2VyL0tjb25maWdgLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O2xsIGZpbmQgc29tZXRoaW5nIGxpa2UgYFBNX1NMRUVQYCBvciBgUE1fQVVUT1NMRUVQYCBpbiB0aGVyZSwgdGhvdWdoIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgaG93IHRoZXNlIG1pZ2h0IGluZmx1ZW5jZSBgU1VOUlBDYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBNX1NMRUVQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL0tjb25maWc9MTE4PWNvbmZpZyBQTV9TVERfUEFSVElUSU9OXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTM5LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTQwOmNvbmZpZyBQTV9TTEVFUFxua2VybmVsL3Bvd2VyL0tjb25maWctMTQxLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTE0NC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjE0NTpjb25maWcgUE1fU0xFRVBfU01QXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNDYtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTUxLVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTUyOmNvbmZpZyBQTV9TTEVFUF9TTVBfTk9OWkVST19DUFVcbmtlcm5lbC9wb3dlci9LY29uZmlnLTE1My1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0yNDY9Y29uZmlnIFBNX1RFU1RfU1VTUEVORFxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTI1Ni1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjI1Nzpjb25maWcgUE1fU0xFRVBfREVCVUdcbmtlcm5lbC9wb3dlci9LY29uZmlnLTI1OC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCBwaHJhc2VkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipQTV9TTEVFUCBBbmFseXNpcyoqCgpSaWdodCwgc28gYFBNX1NMRUVQYCBpcyBnb2luZyB0byBiZSBkZWZpbmVkIGFzICYjMzk7eWVzJiMzOTsgKGBkZWZfYm9vbCB5YCksIGFuZCB0aGF0IGhpbmdlcyBkaXJlY3RseSBvbiB0aGUgcHJlc2VuY2Ugb2YgZWl0aGVyIGBTVVNQRU5EYCBvciBgSElCRVJOQVRFX0NBTExCQUNLU2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGlmIGVpdGhlciBvZiB0aG9zZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIGFyZSBlbmFibGVkLCB0aGVuIG9idmlvdXNseSB0aGUgc3lzdGVtIGlzIGNhcGFibGUgb2YgZW50ZXJpbmcgYSBzbGVlcCBzdGF0ZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgUE1fQVVUT1NMRUVQYCBhcyBpdCYjMzk7cyBsaWtlbHkgaW1wYWN0ZWQgYnkgd2hldGhlciBvciBub3QgYFBNX1NMRUVQYCBpcyBhY3RpdmUuIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVsbCBwb3dlciBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQTV9BVVRPU0xFRVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZz0xNTI9Y29uZmlnIFBNX1NMRUVQX1NNUF9OT05aRVJPX0NQVVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTE2MC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjE2MTpjb25maWcgUE1fQVVUT1NMRUVQXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNjItXHRib29sIFwmIzM0O09wcG9ydHVuaXN0aWMgc2xlZXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwOTUKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBQTV9BVVRPU0xFRVBgIGlzIGEgdmFsaWQgY29uZmlnIG5vdywgZ29vZCB0byBrbm93LiBJJiMzOTt2ZSByZS1leGFtaW5lZCBgZnMvZnVzZS9kZXYuY2AgYW5kIHNwb3R0ZWQgdGhlIGNoYW5nZSB3aXRoaW4gYGZ1c2VfZ2V0X3JlcWAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgdGFzayBzdGF0ZSBtb2RpZmljYXRpb24sIGNoYW5naW5nIHRoZSB3YWl0IGV2ZW50IGZyb20gYFRBU0tfRlJFRVpBQkxFYCB0byBgVEFTS19GUkVFWkFCTEVfVU5TQUZFYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgc29tZXRoaW5nIHRvIHdhdGNoIG91dCBmb3IuCgpUaGVuIEkgY2hlY2tlZCBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gIExvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNpbWlsYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYF9fcnBjX2V4ZWN1dGVgIHdoZXJlIGBUQVNLX0ZSRUVaQUJMRWAgYWxzbyBnZXRzIGJ1bXBlZCB0byBgVEFTS19GUkVFWkFCTEVfVU5TQUZFYC4gIEFnYWluLCBnb29kLiAgSSBsaWtlIHRoYXQgaXQmIzM5O3MgY29uc2lzdGVudC4KCk5leHQsIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvcG93ZXIvbWFpbi5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgQSBjYXBhYmlsaXR5IGNoZWNrIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSBhIHN1c3BlbmQgb3BlcmF0aW9uLCBhbmQgdGhlcmUmIzM5O3MgYWxzbyBhIGNoZWNrIGZvciB3YWtldXAgc291cmNlcyBpbiBgc3RhdGVfc3RvcmVgLiBTZWVtcyBsaWtlIHRoZSBpZGVhIGlzIHRvIGVuaGFuY2UgdGhlIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgb2YgdGhlIHN1c3BlbmQgcHJvY2Vzcy4KCkFsbCBvZiB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgc3lzdGVtcywgd2l0aCBtb2RpZmljYXRpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXIgc3BhY2UsIGFuZCB0aHVzIHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCgpTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGZvY3VzIG9uIGZ1enppbmcgdGhlc2Ugc3ltYm9sczoKKiAgIGBzdGF0ZV9zdG9yZWAKKiAgIGBhdXRvc2xlZXBfc3RvcmVgCiogICBgZnVzZV9jaGFuX3NlbmRgCiogICBgZnVzZV9jaGFuX3NlbmRfYmdgCiogICBgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5YAoqICAgYHJwY19leGVjdXRlYAoKQW5kIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6CiogICBgUE1fU0xFRVBgCiogICBgUE1fQVVUT1NMRUVQYAoqICAgYEZVU0VfRlNgCiogICBgU1VOUlBDYAoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIHRoZSBGVVNFIGFuZCBTVU5SUEMgc3Vic3lzdGVtcyB0byB1c2UgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAgZHVyaW5nIHdhaXRzLiBJdCBhbHNvIGludHJvZHVjZXMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgaW4gdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyB1c2VkIGZvciBwb3dlciBtYW5hZ2VtZW50IChgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB3aWxsIG5lZWQgdG8gYmUgcGFydCBvZiBhbnkgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHRhc2sgc3RhdGUgY2hhbmdlcyBhcmUgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgb3BlbmluZyB1cCBuZXcgYXZlbnVlcyBmb3IgZXhwbG9pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyAoVEFTS19GUkVFWkFCTEUgdG8gVEFTS19GUkVFWkFCTEVfVU5TQUZFKSBpbiBGVVNFIGFuZCBTdW5SUEMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgYXR0cmlidXRlcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTljZDZkYmZmMjdjZmU1MmMxMWUyMTQxMzJiN2Q2ODYxODE3ZWFlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCA1NzYzYTdjZDNiMzdmLi45ZThkYzk2ZDI0ZjE4IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTExNiw3ICYjNDM7MTE2LDcgQEAgc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZCkKIAkJZXJyID0gLUVJTlRSOwogCQlpZiAod2FpdF9ldmVudF9zdGF0ZV9leGNsdXNpdmUoZmNoLSZndDtibG9ja2VkX3dhaXRxLAogCQkJCSFmdXNlX2Jsb2NrX2FsbG9jKGZjaCwgZm9yX2JhY2tncm91bmQpLAotCQkJCShUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSkKJiM0MzsJCQkJKFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpKSkKIAkJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggNTQyOWU5ZjE5YjY1NS4uNzgwYWZkYTExNzY1NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3J1bnRpbWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BtX3dha2V1cC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3Bvd2VyLmgmIzM0OwogCkBAIC04MDIsNiAmIzQzOzgwMywyMiBAQCBzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCXN1c3BlbmRfc3RhdGVfdCBzdGF0ZTsKIAlpbnQgZXJyb3I7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWludCBpZHg7CiYjNDM7CXN0cnVjdCB3YWtldXBfc291cmNlICp3czsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7CiYjNDM7CXdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpOwomIzQzOwl3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpOwomIzQzOwlpZiAoIXdzKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsjZW5kaWYKJiM0MzsKIAllcnJvciA9IHBtX2F1dG9zbGVlcF9sb2NrKCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC05MjksNiAmIzQzOzk0NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJc3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7CiAJaW50IGVycm9yOwogCiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUAomIzQzOwlpbnQgaWR4OwomIzQzOwlzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CWlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX09OKSB7CiYjNDM7CQlpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTsKJiM0MzsJCXdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpOwomIzQzOwkJd2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTsKJiM0MzsJCWlmICghd3MpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwogCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OCiAJICAgICZhbXA7JmFtcDsgc3RyY21wKGJ1ZiwgJiMzNDtvZmYmIzM0OykgJmFtcDsmYW1wOyBzdHJjbXAoYnVmLCAmIzM0O29mZlxuJiMzNDspKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCAwMTZmMTZjYTU3Nzk5Li40OTQ5NDdkNTA5ZjNjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC05ODQsNyAmIzQzOzk4NCw3IEBAIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKQogCQl0cmFjZV9ycGNfdGFza19zeW5jX3NsZWVwKHRhc2ssIHRhc2stJmd0O3RrX2FjdGlvbik7CiAJCXN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KCZhbXA7dGFzay0mZ3Q7dGtfcnVuc3RhdGUsCiAJCQkJUlBDX1RBU0tfUVVFVUVELCBycGNfd2FpdF9iaXRfa2lsbGFibGUsCi0JCQkJVEFTS19LSUxMQUJMRXxUQVNLX0ZSRUVaQUJMRSk7CiYjNDM7CQkJCVRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpOwogCQlpZiAoc3RhdHVzICZsdDsgMCkgewogCQkJLyoKIAkJCSAqIFdoZW4gYSBzeW5jIHRhc2sgcmVjZWl2ZXMgYSBzaWduYWwsIGl0IGV4aXRzIHdpdGgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjEKCQkJCQkJCW91dHB1dDogMTE3CgkJCQkJCQl0aG91Z2h0czogNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENoZWNrOiBObyBJc3N1ZXMgRGV0ZWN0ZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGcm9tIHdoYXQgSSBzZWUsIHRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHRocmVlIGZpbGVzOiBgZnMvZnVzZS9kZXYuY2AsIGBrZXJuZWwvcG93ZXIvbWFpbi5jYCwgYW5kIGBuZXQvc3VucnBjL3NjaGVkLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBqdXN0IHR3ZWFraW5nIHNvbWUgdGFzayBzdGF0ZXMgaW4gYGZzL2Z1c2UvZGV2LmNgIGFuZCBgbmV0L3N1bnJwYy9zY2hlZC5jYCwgc3dhcHBpbmcgYFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAsIGFuZCB0aGVuLCBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AsIHdlJiMzOTtyZSBhZGRpbmcgc29tZSBjaGVja3MgYXJvdW5kIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzLgoKR2l2ZW4gdGhlc2UgY2hhbmdlcywgbXkgaW5pdGlhbCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IEtNU0FOIGF0dGVudGlvbi4gTm90aGluZyBzY3JlYW1zICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnksJiMzNDsgbm8gaW50cmljYXRlLCBwb3RlbnRpYWxseS1wYXJ0aWFsbHktaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgY2VydGFpbmx5IG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3MgYXJlIHByZXNlbnQgaW4gdGhlIGNvZGUuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgZmxhZyBhZGp1c3RtZW50cyBvciB0aGUgYWRkaXRpb24gb2Ygc2VjdXJpdHkgYW5kIHBvd2VyIG1hbmFnZW1lbnQgY2hlY2tzLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBrZXJuZWwvcG93ZXIvbWFpbi5jYCBjaGFuZ2UuIExldCYjMzk7cyBzZWUuLi4KCmBgYGMKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWludCBpZHg7CiYjNDM7CXN0cnVjdCB3YWtldXBfc291cmNlICp3czsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7CiYjNDM7CXdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpOwomIzQzOwl3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpOwomIzQzOwlpZiAoIXdzKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsjZW5kaWYKYGBgCgpPa2F5LCB0aGUgY29kZSBpbml0aWFsaXplcyB0aGUgYGlkeGAgYW5kIGB3c2AgdmFyaWFibGVzIHdpdGggdGhlIHJldHVybiB2YWx1ZXMgb2YgYHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpYCBhbmQgYHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gcmV0dXJuIHdlbGwtZGVmaW5lZCB2YWx1ZXMgb3IgaGFuZGxlIGVycm9ycywgc28gYW55IHBvdGVudGlhbCBpc3N1ZSByZWxhdGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBsb29rcyB0byBiZSBhdm9pZGVkLiBUaGUgb3RoZXIgZmlsZSBjaGFuZ2VzIGFyZSBqdXN0IHRob3NlIGZsYWcgYWRqdXN0bWVudHMsIHdoaWNoIGFyZSB1bmxpa2VseSB0byBjYXVzZSBhbnkgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRvIG1lIHRoYXQgd2UgZG9uJiMzOTt0IG5lZWQgS01TQU4gaGVyZS4gKipOZWVkc0tNU0FOIGlzIEZhbHNlLioqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRhc2sgc3RhdGUgZmxhZ3MgKFRBU0tfRlJFRVpBQkxFIHRvIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkgaW4gRlVTRSBhbmQgU3VuUlBDLCBhbmQgYWRkcyBjYXBhYmlsaXR5IGFuZCB3YWtldXAgc291cmNlIGNoZWNrcyB0byBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIGF0dHJpYnV0ZXMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni4zNzkzNTIzNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1MzY2MTQyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUE1fU0xFRVBcIixcbiAgICBcIlBNX0FVVE9TTEVFUFwiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiU1VOUlBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhdGVfc3RvcmVcIixcbiAgICBcImF1dG9zbGVlcF9zdG9yZVwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX2JnXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlcIixcbiAgICBcInJwY19leGVjdXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRhc2sgc3RhdGUgZmxhZ3MgaW4gRlVTRSBhbmQgU1VOUlBDIHRvIHVzZSBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUgZHVyaW5nIHdhaXRzLCBhbmQgYWRkcyBjYXBhYmlsaXR5IGFuZCB3YWtldXAgc291cmNlIGNoZWNrcyB0byB0aGUgcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgKHN0YXRlX3N0b3JlIGFuZCBhdXRvc2xlZXBfc3RvcmUpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRyaXZlcnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni4zNzkzNTkzMDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTA2NzUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5Y2Q2ZGJmZjI3Y2ZlNTJjMTFlMjE0MTMyYjdkNjg2MTgxN2VhZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxMDoyODo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuY1xcbmluZGV4IDU3NjNhN2NkM2IzN2YuLjllOGRjOTZkMjRmMTggMTAwNjQ0XFxuLS0tIGEvZnMvZnVzZS9kZXYuY1xcbisrKyBiL2ZzL2Z1c2UvZGV2LmNcXG5AQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgZm9yX2JhY2tncm91bmQpXFxuIFxcdFxcdGVyciA9IC1FSU5UUjtcXG4gXFx0XFx0aWYgKHdhaXRfZXZlbnRfc3RhdGVfZXhjbHVzaXZlKGZjaC1cXHUwMDNlYmxvY2tlZF93YWl0cSxcXG4gXFx0XFx0XFx0XFx0IWZ1c2VfYmxvY2tfYWxsb2MoZmNoLCBmb3JfYmFja2dyb3VuZCksXFxuLVxcdFxcdFxcdFxcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSlcXG4rXFx0XFx0XFx0XFx0KFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXFxuaW5kZXggNTQyOWU5ZjE5YjY1NS4uNzgwYWZkYTExNzY1NiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jXFxuKysrIGIva2VybmVsL3Bvd2VyL21haW4uY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3dha2V1cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInBvd2VyLmhcXFwiXFxuIFxcbkBAIC04MDIsNiArODAzLDIyIEBAIHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZTtcXG4gXFx0aW50IGVycm9yO1xcbiBcXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbitcXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XFxuKyNlbmRpZlxcbitcXG4rXFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuK1xcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xcbitcXHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcXG4rXFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcXG4rXFx0aWYgKCF3cylcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRlcnJvciA9IHBtX2F1dG9zbGVlcF9sb2NrKCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbkBAIC05MjksNiArOTQ2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG4rXFx0aW50IGlkeDtcXG4rXFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbisjZW5kaWZcXG4rXFxuK1xcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbitcXHRpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9PTikge1xcbitcXHRcXHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcXG4rXFx0XFx0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XFxuK1xcdFxcdHdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7XFxuK1xcdFxcdGlmICghd3MpXFxuK1xcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9PTlxcbiBcXHQgICAgXFx1MDAyNlxcdTAwMjYgc3RyY21wKGJ1ZiwgXFxcIm9mZlxcXCIpIFxcdTAwMjZcXHUwMDI2IHN0cmNtcChidWYsIFxcXCJvZmZcXFxcblxcXCIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jXFxuaW5kZXggMDE2ZjE2Y2E1Nzc5OS4uNDk0OTQ3ZDUwOWYzYyAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3NjaGVkLmNcXG4rKysgYi9uZXQvc3VucnBjL3NjaGVkLmNcXG5AQCAtOTg0LDcgKzk4NCw3IEBAIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbiBcXHRcXHR0cmFjZV9ycGNfdGFza19zeW5jX3NsZWVwKHRhc2ssIHRhc2stXFx1MDAzZXRrX2FjdGlvbik7XFxuIFxcdFxcdHN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KFxcdTAwMjZ0YXNrLVxcdTAwM2V0a19ydW5zdGF0ZSxcXG4gXFx0XFx0XFx0XFx0UlBDX1RBU0tfUVVFVUVELCBycGNfd2FpdF9iaXRfa2lsbGFibGUsXFxuLVxcdFxcdFxcdFxcdFRBU0tfS0lMTEFCTEV8VEFTS19GUkVFWkFCTEUpO1xcbitcXHRcXHRcXHRcXHRUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEVfVU5TQUZFKTtcXG4gXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2hlbiBhIHN5bmMgdGFzayByZWNlaXZlcyBhIHNpZ25hbCwgaXQgZXhpdHMgd2l0aFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni45MzkzNzExNDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MzUyMjgwNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQTV9TTEVFUFwiLFxuICAgIFwiUE1fQVVUT1NMRUVQXCIsXG4gICAgXCJGVVNFX0ZTXCIsXG4gICAgXCJTVU5SUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGF0ZV9zdG9yZVwiLFxuICAgIFwiYXV0b3NsZWVwX3N0b3JlXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZFwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRfYmdcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseVwiLFxuICAgIFwicnBjX2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIEZVU0UgYW5kIFNVTlJQQyB0byB1c2UgVEFTS19GUkVFWkFCTEVfVU5TQUZFIGR1cmluZyB3YWl0cywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIChzdGF0ZV9zdG9yZSBhbmQgYXV0b3NsZWVwX3N0b3JlKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkcml2ZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTljZDZkYmZmMjdjZmU1MmMxMWUyMTQxMzJiN2Q2ODYxODE3ZWFlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuY1xuaW5kZXggNTc2M2E3Y2QzYjM3Zi4uOWU4ZGM5NmQyNGYxOCAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGV2LmNcbisrKyBiL2ZzL2Z1c2UvZGV2LmNcbkBAIC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbiBcdFx0ZXJyID0gLUVJTlRSO1xuIFx0XHRpZiAod2FpdF9ldmVudF9zdGF0ZV9leGNsdXNpdmUoZmNoLVx1MDAzZWJsb2NrZWRfd2FpdHEsXG4gXHRcdFx0XHQhZnVzZV9ibG9ja19hbGxvYyhmY2gsIGZvcl9iYWNrZ3JvdW5kKSxcbi1cdFx0XHRcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSlcbitcdFx0XHRcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEVfVU5TQUZFKSkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmNcbmluZGV4IDU0MjllOWYxOWI2NTUuLjc4MGFmZGExMTc2NTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jXG4rKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZXVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInBvd2VyLmhcIlxuIFxuQEAgLTgwMiw2ICs4MDMsMjIgQEAgc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiBcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZTtcbiBcdGludCBlcnJvcjtcbiBcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4rXHRpbnQgaWR4O1xuK1x0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xuKyNlbmRpZlxuK1xuK1x0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7XG4rXHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcbitcdHdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7XG4rXHRpZiAoIXdzKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuKyNlbmRpZlxuK1xuIFx0ZXJyb3IgPSBwbV9hdXRvc2xlZXBfbG9jaygpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtOTI5LDYgKzk0NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRzdXNwZW5kX3N0YXRlX3Qgc3RhdGUgPSBkZWNvZGVfc3RhdGUoYnVmLCBuKTtcbiBcdGludCBlcnJvcjtcbiBcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4rXHRpbnQgaWR4O1xuK1x0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xuKyNlbmRpZlxuK1xuK1x0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHtcbitcdFx0aWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7XG4rXHRcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuK1x0XHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xuK1x0XHRpZiAoIXdzKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHR9XG4rI2VuZGlmXG4rXG4gXHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9PTlxuIFx0ICAgIFx1MDAyNlx1MDAyNiBzdHJjbXAoYnVmLCBcIm9mZlwiKSBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCJvZmZcXG5cIikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuY1xuaW5kZXggMDE2ZjE2Y2E1Nzc5OS4uNDk0OTQ3ZDUwOWYzYyAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc2NoZWQuY1xuKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jXG5AQCAtOTg0LDcgKzk4NCw3IEBAIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxuIFx0XHR0cmFjZV9ycGNfdGFza19zeW5jX3NsZWVwKHRhc2ssIHRhc2stXHUwMDNldGtfYWN0aW9uKTtcbiBcdFx0c3RhdHVzID0gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQoXHUwMDI2dGFzay1cdTAwM2V0a19ydW5zdGF0ZSxcbiBcdFx0XHRcdFJQQ19UQVNLX1FVRVVFRCwgcnBjX3dhaXRfYml0X2tpbGxhYmxlLFxuLVx0XHRcdFx0VEFTS19LSUxMQUJMRXxUQVNLX0ZSRUVaQUJMRSk7XG4rXHRcdFx0XHRUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEVfVU5TQUZFKTtcbiBcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2hlbiBhIHN5bmMgdGFzayByZWNlaXZlcyBhIHNpZ25hbCwgaXQgZXhpdHMgd2l0aFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjg6NTYuOTM5Mzc0NDQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM4MTI4Mzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgQ2FuZGlkYXRlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBMZXQncyBicmVhayBpdCBkb3duLiBXZSd2ZSBnb3QgdGhyZWUgZmlsZXMgbW9kaWZpZWQ6IGBmcy9mdXNlL2Rldi5jYCwgYGtlcm5lbC9wb3dlci9tYWluLmNgLCBhbmQgYG5ldC9zdW5ycGMvc2NoZWQuY2AuIFRoZSBmaXJzdCB0d28gZmlsZXMsIHRoYXQgZGVhbCB3aXRoIGZ1c2UgYW5kIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbCwgYXJlIGFsbW9zdCBjZXJ0YWlubHkgd29ydGggY2xvc2VyIHNjcnV0aW55LiBUaGUgYG5ldC9zdW5ycGMvc2NoZWQuY2AgZmlsZSBpcyBpbnRlcmVzdGluZyBhbmQgbWlnaHQgYmUgd29ydGggZXhwbG9yaW5nLCBidXQgSSdsbCBmb2N1cyBvbiB0aGUgZmlyc3QgdHdvIGZpcnN0LlxuXG5GaXJzdCwgYGtlcm5lbC9wb3dlci9tYWluLmNgIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgY2hlY2tzIHdpdGhpbiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYC4gVGhlc2UgYXJlIGNsZWFybHkgc3lzZnMgc3RvcmUgZnVuY3Rpb25zLCBtZWFuaW5nIHRoZXkncmUgZXhwb3NlZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBgL3N5cy9wb3dlci9zdGF0ZWAgYW5kIGAvc3lzL3Bvd2VyL2F1dG9zbGVlcGAgaW50ZXJmYWNlcy4gV3JpdGluZyB0byB0aGVzZSBmaWxlcyBpcyBhIGNyaXRpY2FsIHBvaW50IGZvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wuIFRoZSBhZGRlZCBjYXBhYmlsaXR5IGNoZWNrLCBgY2FwYWJsZShDQVBfU1lTX0JPT1QpYCwgYW5kIHRoZSB3YWtldXAgc291cmNlIGNoZWNrIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucywgYmFzaWNhbGx5IGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSBjaGVja3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgKmRlbWFuZHMqIGZ1enppbmcuIFdlIGhhdmUgYW4gb3Bwb3J0dW5pdHkgZm9yIGNvbnRyb2wtcGxhbmUgZnV6emluZyBoZXJlLCB3aGVyZSB1c2VybGFuZCBpbnB1dCBwb3RlbnRpYWxseSBhbHRlcnMga2VybmVsIGJlaGF2aW9yLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBgZnMvZnVzZS9kZXYuY2AuIENoYW5nZXMgaGVyZSBtb2RpZnkgYSBmdW5jdGlvbiBsaWtlIGBmdXNlX2dldF9yZXFgLCB3aGljaCBJIGtub3cgaXMgYSBjb3JlIEZVU0UgZnVuY3Rpb24gZm9yIHJlcXVlc3QgaGFuZGxpbmcuIEl0IGludm9sdmVzIGNoYW5naW5nIGBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAuIFRoZSBzYW1lIHR5cGUgb2YgY2hhbmdlLCBmcm9tIGBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAsIG9jY3VycyBpbiBgbmV0L3N1bnJwYy9zY2hlZC5jYCB3aXRoaW4gYF9fcnBjX2V4ZWN1dGVgLiBUaGVzZSBtb2RpZmljYXRpb25zIHRvIHRhc2sgc3RhdGVzIGFyZSBhbHNvIHdvcnRoIGEgbG9vay5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBhcyBhIHdob2xlICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgZW5jb21wYXNzaW5nIHBvd2VyIG1hbmFnZW1lbnQsIEZVU0UsIGFuZCBTVU5SUEMuIFRoZXNlIGFyZSBhcmVhcyB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QuXG5cbkZpbmFsbHksIHJlZ2FyZGluZyBga2VybmVsL3Bvd2VyL21haW4uY2AsIEknbGwgcHJvYmFibHkgd2FudCB0byBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhpcyBjb2RlLiBNeSBndWVzcyBpcyBpdCdzIGNvbXBpbGVkIHdpdGggYENPTkZJR19QTWAgb3IgYENPTkZJR19QTV9TTEVFUGAsIHNvIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaW4gdGhlIGBrZXJuZWwvcG93ZXIvTWFrZWZpbGVgLiBUaGlzIHdpbGwgaGVscCBtZSBzZXQgdXAgYSBjb3JyZWN0IGZ1enppbmcgZW52aXJvbm1lbnQgZm9yIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTowNS4zMjA2NjA4ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMjcwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFpbi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvTWFrZWZpbGU9MTE9b2JqLXlcXHRcXHRcXHRcXHQrPSBxb3Mub1xcbmtlcm5lbC9wb3dlci9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUE0pXFx0XFx0Kz0gbWFpbi5vXFxua2VybmVsL3Bvd2VyL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19WVF9DT05TT0xFX1NMRUVQKVxcdCs9IGNvbnNvbGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTowNS4zODA4OTY5MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ0NjE4NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cbioqUE0gQ29udGV4dHVhbGl6YXRpb24gYW5kIEZVU0UgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgYENPTkZJR19QTWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGxldmVyYWdpbmcgYCNpZmRlZiBDT05GSUdfUE1fU0xFRVBgLCBzbyBwb3dlciBtYW5hZ2VtZW50IGlzIGRlZmluaXRlbHkgYSBrZXkgZmFjdG9yIGluIHdoYXRldmVyIHRoaXMgaXMuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbHMgaW52b2x2ZWQsIEkgc2hvdWxkIGNoZWNrIGBmcy9mdXNlL2Rldi5jYC4gSSBiZWxpZXZlIGBmdXNlX2dldF9yZXFgIHJlc2lkZXMgdGhlcmUsIHNvIHRoYXQncyB3aGVyZSB0byBzdGFydC5cblxuQWxzbyBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB3ZSBoYXZlIGBDT05GSUdfRlVTRV9GU2AgZW5hYmxlZCBpbiB0aGlzIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTAuNDI1NTE4Mjk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDQxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1c2VfZ2V0X3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZGV2LmM9NTU9c3RhdGljIHZvaWQgZnVzZV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGZ1c2VfcmVxICpyZXEpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTYwLVxcbmZzL2Z1c2UvZGV2LmM6NjE6c3RhdGljIHZvaWQgX19mdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbmZzL2Z1c2UvZGV2LmMtNjIte1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMDY9c3RhdGljIHZvaWQgZnVzZV9wdXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xMDctXFxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcXG5mcy9mdXNlL2Rldi5jLTEwOS17XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy03NTMtXFx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXFxuZnMvZnVzZS9kZXYuYzo3NTQ6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy03NTUtXFx0ZnVzZV9zZW5kX29uZShmaXEsIHJlcSk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODIxLVxcdH0gZWxzZSB7XFxuZnMvZnVzZS9kZXYuYzo4MjI6XFx0XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtODIzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODI2LVxcbmZzL2Z1c2UvZGV2LmM6ODI3OlxcdC8qIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgZnVzZV9nZXRfcmVxKCkgc28gdGhhdCBmY2gtXFx1MDAzZW1pbm9yIGlzIHZhbGlkICovXFxuZnMvZnVzZS9kZXYuYy04MjgtXFx0ZnVzZV9hZGp1c3RfY29tcGF0KGZjaCwgYXJncyk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTkwMS1cXHR9IGVsc2Uge1xcbmZzL2Z1c2UvZGV2LmM6OTAyOlxcdFxcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xcbmZzL2Z1c2UvZGV2LmMtOTAzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9OTE3PWludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy05MjEtXFxuZnMvZnVzZS9kZXYuYzo5MjI6XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtOTIzLVxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MTUxNj1zdGF0aWMgc3NpemVfdCBmdXNlX2Rldl9kb19yZWFkKHN0cnVjdCBmdXNlX2RldiAqZnVkLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtMTYyNi1cXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZnBxLVxcdTAwM2Vwcm9jZXNzaW5nW2hhc2hdKTtcXG5mcy9mdXNlL2Rldi5jOjE2Mjc6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xNjI4LVxcdHNldF9iaXQoRlJfU0VOVCwgXFx1MDAyNnJlcS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xODYwPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3dyaXRlKHN0cnVjdCBmdXNlX2RldiAqZnVkLFxcbi0tXFxuZnMvZnVzZS9kZXYuYy0xOTE3LVxcdGlmIChvaC51bmlxdWUgXFx1MDAyNiBGVVNFX0lOVF9SRVFfQklUKSB7XFxuZnMvZnVzZS9kZXYuYzoxOTE4OlxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZnBxLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTIxNjEtXFx0XFx0XFx0XFx0XFx0c2V0X2JpdChGUl9QUklWQVRFLCBcXHUwMDI2cmVxLVxcdTAwM2VmbGFncyk7XFxuZnMvZnVzZS9kZXYuYzoyMTYyOlxcdFxcdFxcdFxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMjE2My1cXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJlcS1cXHUwMDNlbGlzdCwgXFx1MDAyNnRvX2VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjEwLjQ5MDk2NjczN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjA4MTEwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIHRoaW5raW5nIGFib3V0IGBmdXNlX2dldF9yZXFgIGhlcmUuIFJpZ2h0LCB0aGF0J3MgdXNlZCBpbiBgZnVzZV9jaGFuX3NlbmRgLCBgZnVzZV9jaGFuX3NlbmRfYmdgLCBhbmQgYGZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseWAuIE9rYXksIHRob3NlIGFyZSBhbGwgKmNvcmUqIEZVU0UgZnVuY3Rpb25zLiBTbywgYGZ1c2VfZ2V0X3JlcWAgaXMgcHJldHR5IGZ1bmRhbWVudGFsLlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhIGJpdC4gV2hlcmUgZWxzZSBkb2VzIHRoaXMgcGF0dGVybiBlbWVyZ2U/IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvc3VucnBjL3NjaGVkLmNgLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBvdmVyIHRoZXJlLiBBaCwgeWVzLCBgX19ycGNfZXhlY3V0ZWAsIHRoYXQncyBhIGtleSBTVU5SUEMgZnVuY3Rpb24uIFxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTUuMjUxNzgwMjAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4Mzg4OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcnBjX2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zY2hlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc2NoZWQuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwocnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXFxubmV0L3N1bnJwYy9zY2hlZC5jOjM1NzogKiB3aGljaCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgX19ycGNfZXhlY3V0ZSgpIGRvZXNuJ3QgbG9vcCAoZHVlIHRvIHRoZVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTgtICogbG9ja2xlc3MgUlBDX0lTX1FVRVVFRCgpIHRlc3QpIGJlZm9yZSB3ZSd2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy05MDgtICovXFxubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDE1PXZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjItXFx0XFx0dW5zaWduZWQgaW50IHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDIzOlxcdFxcdF9fcnBjX2V4ZWN1dGUodGFzayk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjQtXFx0XFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAyOD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfc2NoZWR1bGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzEtXFxubmV0L3N1bnJwYy9zY2hlZC5jOjEwMzI6XFx0X19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMy1cXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTUuMzQwMTc0MTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MzI3MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBmb3Igc29tZW9uZSB3aG8ga25vd3MgdGhlaXIgd2F5IGFyb3VuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKlJQQyBFeGVjdXRpb24gYW5kIFBvd2VyIE1hbmFnZW1lbnQ6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgUmVtb3RlIFByb2NlZHVyZSBDYWxscyAoUlBDKSBpbnRlcmFjdCB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBDT05GSUdfU1VOUlBDYCBjb25maWcgb3B0aW9uLiBJIHNlZSB0aGF0IGJvdGggYHJwY19leGVjdXRlYCBhbmQgYHJwY19hc3luY19zY2hlZHVsZWAgdWx0aW1hdGVseSBmdW5uZWwgdGhlaXIgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGBfX3JwY19leGVjdXRlYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgZXhlY3V0aW9uIHBhdGggd2Ugc2hvdWxkIGtlZXAgaW4gbWluZC5cblxuVGhlbiB0aGUgdGhvdWdodCB2ZWVycyB0b3dhcmRzIGBrZXJuZWwvcG93ZXIvbWFpbi5jYC4gTXkgc3BpZGV5IHNlbnNlcyBhcmUgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBhbiBpbnRlcmFjdGlvbiwgYW5kIHRoZSBtZW50aW9uIG9mIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGFzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyByYWlzZXMgYSByZWQgZmxhZy4gVGhlc2UgYXJlIGNsYXNzaWMgaG9va3MgaW50byB0aGUgc3lzdGVtJ3MgcG93ZXIgc3RhdGUsIGFuZCBhbnkgUlBDIGFjdGl2aXR5IHRoYXQgbWlnaHQgYmUgc2Vuc2l0aXZlIHRvIHN1c3BlbmQvcmVzdW1lIHNob3VsZCBiZSBjYXJlZnVsbHkgc2NydXRpbml6ZWQgaGVyZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUEMgb3BlcmF0aW9ucyBiZWhhdmUgZHVyaW5nIHN5c3RlbSBzbGVlcCBvciByZXN1bWUsIGFuZCB3aGV0aGVyIGFueSBpbXByb3BlciBoYW5kbGluZyBvZiBSUEMgY2FsbHMgY2FuIGxlYWQgdG8gaXNzdWVzIHdpdGggYXV0b3NsZWVwIG9yIG90aGVyIHBvd2VyLXNhdmluZyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgUlBDIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBzeXN0ZW0gZnJvbSBlbnRlcmluZyBhIGxvdy1wb3dlciBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjE5LjQ4NDUwMzI0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNzE2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3Bvd2VyL21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mz1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcbi0tXFxua2VybmVsL3Bvd2VyL21haW4uYy03OTktXFxua2VybmVsL3Bvd2VyL21haW4uYzo4MDA6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTgwMS1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToxOS41NzA1ODE5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDc2NzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG93ZXIgTWFuYWdlbWVudCBhbmQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzdGF0ZV9zdG9yZWAgbWFuYWdlcyB0aGUgYC9zeXMvcG93ZXIvc3RhdGVgIHN5c2ZzIGVudHJ5IGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBoYW5kbGVzIGAvc3lzL3Bvd2VyL2F1dG9zbGVlcGAuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgcGllY2UuIE15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGdvZXMgdG8gdGhlc2UgdHdvIGZ1bmN0aW9uczogYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYGZ1c2VfZ2V0X3JlcWAgYW5kIGBfX3JwY19leGVjdXRlYCBpbiB0aGUgYmFjayBvZiBteSBtaW5kLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciBgUE1fU0xFRVBgIGlzIHRoZSBkZWZpbmluZyBjb25maWd1cmF0aW9uIGZvciBib3RoIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgLiBJdCdzIGEga2V5IGRldGFpbCB0byBjb25maXJtLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgdGhpcyBpbiByZWxhdGlvbiB0byBhbnkgcG90ZW50aWFsIGludGVyZGVwZW5kZW5jaWVzIHdpdGggYEZVU0VfRlNgIGFuZCBgU1VOUlBDYCwganVzdCBpbiBjYXNlLiBUaGV5IGZlZWwgbGVzcyBkaXJlY3RseSByZWxldmFudCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gZWxpbWluYXRlIGV4dHJhbmVvdXMgcG9zc2liaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToyMy4zODUzNTE0NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDc5Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL21haW4uYz03NzM9c3RhdGljIHN1c3BlbmRfc3RhdGVfdCBkZWNvZGVfc3RhdGUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG4tLVxcbmtlcm5lbC9wb3dlci9tYWluLmMtNzk5LVxcbmtlcm5lbC9wb3dlci9tYWluLmM6ODAwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxua2VybmVsL3Bvd2VyL21haW4uYy04MDEtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MjMuNDc0ODM3MzQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDY5MTk5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgUG93ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGZvciB3aGVyZSBgc3RhdGVfc3RvcmVgIGlzIGRlZmluZWQuIFRoZSBoaW50IHNheXMgaXQncyBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCBgc3RhdGVfc3RvcmVgIHByb2JhYmx5IGRlYWxzIHdpdGggc3lzdGVtIHBvd2VyIHN0YXRlcywgc28gaXQncyBsaWtlbHkgbmVzdGxlZCB3aXRoaW4gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBMZXQncyBjb25maXJtIHRoYXQgYnkgZGlyZWN0bHkgZXhhbWluaW5nIGBrZXJuZWwvcG93ZXIvbWFpbi5jYCwgYW5kIEknbGwgZm9jdXMgbXkgc2VhcmNoIGFyb3VuZCB0aGF0IHNwZWNpZmljIGlkZW50aWZpZXIgdG8gc2VlIHdoZXJlIGl0J3MgZGVjbGFyZWQgYW5kIHdoYXQgZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBkaWZmZXJlbnQgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZXMgb2YgdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmaWxlIGxpa2VseSBjb250YWlucyB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHN5c3RlbSdzIHBvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjI2LjcyMTc2MTAxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3Bvd2VyL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4gODAxOlxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXFxuIDgwMjpcXHR7XFxuIDgwMzpcXHRcXHRzdXNwZW5kX3N0YXRlX3Qgc3RhdGU7XFxuIDgwNDpcXHRcXHRpbnQgZXJyb3I7XFxuIDgwNTpcXHRcXG4gODA2OlxcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG4gODA3OlxcdFxcdGludCBpZHg7XFxuIDgwODpcXHRcXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XFxuIDgwOTpcXHQjZW5kaWZcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4MTM6XFx0XFxuIDgxNDpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuIDgxNTpcXHRcXHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcXG4gODE2OlxcdFxcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xcbiA4MTc6XFx0XFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcXG4gODE4OlxcdFxcdGlmICghd3MpXFxuIDgxOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4MjA6XFx0I2VuZGlmXFxuIDgyMTpcXHRcXG4gODIyOlxcdFxcdGVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTtcXG4gODIzOlxcdFxcdGlmIChlcnJvcilcXG4gODI0OlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gODI1OlxcdFxcbiA4MjY6XFx0XFx0aWYgKHBtX2F1dG9zbGVlcF9zdGF0ZSgpIFxcdTAwM2UgUE1fU1VTUEVORF9PTikge1xcbiA4Mjc6XFx0XFx0XFx0ZXJyb3IgPSAtRUJVU1k7XFxuIDgyODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODI5OlxcdFxcdH1cXG4gODMwOlxcdFxcbiA4MzE6XFx0XFx0c3RhdGUgPSBkZWNvZGVfc3RhdGUoYnVmLCBuKTtcXG4gODMyOlxcdFxcdGlmIChzdGF0ZSBcXHUwMDNjIFBNX1NVU1BFTkRfTUFYKSB7XFxuIDgzMzpcXHRcXHRcXHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pXFxuIDgzNDpcXHRcXHRcXHRcXHRzdGF0ZSA9IG1lbV9zbGVlcF9jdXJyZW50O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRcXHRlcnJvciA9IHBtX3N1c3BlbmQoc3RhdGUpO1xcbiA4Mzc6XFx0XFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX01BWCkge1xcbiA4Mzg6XFx0XFx0XFx0ZXJyb3IgPSBoaWJlcm5hdGUoKTtcXG4gODM5OlxcdFxcdH0gZWxzZSB7XFxuIDg0MDpcXHRcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuIDg0MTpcXHRcXHR9XFxuIDg0MjpcXHRcXG4gODQzOlxcdCBvdXQ6XFxuIDg0NDpcXHRcXHRwbV9hdXRvc2xlZXBfdW5sb2NrKCk7XFxuIDg0NTpcXHRcXHRyZXR1cm4gZXJyb3IgPyBlcnJvciA6IG47XFxuIDg0NjpcXHR9XFxuIDg0NzpcXHRcXG4gODQ4OlxcdHBvd2VyX2F0dHIoc3RhdGUpO1xcbiA4NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjI2LjcyMTkzODc4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0NzUyNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG93ZXIgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCByZWxhdGlvbnNoaXAgaGVyZS4gSXQgc2VlbXMgYHN0YXRlX3N0b3JlYCBpcyAqdGhlKiBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc3RvcmluZyBvciBzZXR0aW5nIHRoZSBzdGF0ZSBhdHRyaWJ1dGUsIHByZXN1bWFibHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgcG93ZXJfYXR0cihzdGF0ZSlgLiBUaGUgbmV3IGNvZGUgaW50cm9kdWNlcyBgQ09ORklHX1BNX1NMRUVQYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgYSBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCBoZXJlJ3Mgd2hlcmUgSSBuZWVkIHRvIGJlIHByZWNpc2U6IGlzIGBzdGF0ZV9zdG9yZWAgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19QTV9TTEVFUGAgaXMgYWN0aXZlLCBvciBpcyBpdCBhIGJpdCBtb3JlIGdlbmVyYWwsIHRpZWQgdG8gdGhlIGJyb2FkZXIgYENPTkZJR19QTWAgdW1icmVsbGEsIG9yIHBlcmhhcHMgYm90aD8gSXQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvcG93ZXIvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgd2lsbCBkZWZpbml0aXZlbHkgdGVsbCBtZSB3aGVuIGFuZCBob3cgYHN0YXRlX3N0b3JlYCBnZXRzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2xlYXIgaW5kaWNhdGlvbnMgb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMgdHJpZ2dlciBpdHMgY29tcGlsYXRpb24uIFRoYXQgc2hvdWxkIHJlc29sdmUgdGhlIGFtYmlndWl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzAuNDk2Njk1MDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg3NjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWluLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3Bvd2VyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9wb3dlci9NYWtlZmlsZT0xMT1vYmoteVxcdFxcdFxcdFxcdCs9IHFvcy5vXFxua2VybmVsL3Bvd2VyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QTSlcXHRcXHQrPSBtYWluLm9cXG5rZXJuZWwvcG93ZXIvTWFrZWZpbGUtMTMtb2JqLSQoQ09ORklHX1ZUX0NPTlNPTEVfU0xFRVApXFx0Kz0gY29uc29sZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjMwLjU2OTU3NTQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTEwMjA5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipQTSBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfUE1gIGlzIGVuYWJsZWQuIFdpdGhvdXQgdGhhdCwgdGhlcmUncyBubyBwb3dlciBtYW5hZ2VtZW50LCBhbmQgdGhhdCdzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gT25jZSB0aGF0J3MgdmVyaWZpZWQsIHRoZSBuZXh0IHRoaW5nIEknbSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGlzIHRoZSBgYXV0b3NsZWVwX3N0b3JlYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBvbmUgdGhhdCBjb250cm9scyB0aGUgYXV0b21hdGljIHNsZWVwIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZCBhbmQgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIHRoZXJlIHRoYXQgbWlnaHQgY29uZmxpY3Qgb3IgaW50ZXJhY3Qgd2l0aCBteSBzcGVjaWZpYyBuZWVkcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0IG9yIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gaXMga2V5IHRvIG1ha2luZyB0aGlzIGFsbCB3b3JrIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzMuOTYwNTk5MDk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY5NzgyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXV0b3NsZWVwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL21haW4uYz05MjE9c3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTk0MS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjk0MjpzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxua2VybmVsL3Bvd2VyL21haW4uYy05NDMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzQuMDY3NTg1NjY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODIwNDM1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaGVyZSBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBgYXV0b3NsZWVwX3N0b3JlYCBpcyB3cmFwcGVkIHdpdGhpbiBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIEl0J3MgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiB0aGlzIGNvZGViYXNlLCB0byB1bmRlcnN0YW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUsIGZlYXR1cmUgZmxhZ3MsIG9yIHBlcmhhcHMgZGVidWdnaW5nIGRlZmluZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgaXRzIGF2YWlsYWJpbGl0eT8gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyB2YXJpYWJsZSwgb3IgbW9yZSBhY2N1cmF0ZWx5LCB0aGUgY29kZSB0aGF0IHVzZXMgdGhpcyB2YXJpYWJsZSwgaGFzIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb24gYmVmb3JlIEkgY2FuIHByb2NlZWQuIERlcGVuZGluZyBvbiB0aGUgYW5zd2VyLCBpdCB3b3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgbXkgcGVyc3BlY3RpdmUgb24gdGhlIG5leHQgc3RlcHMuIEZvciBpbnN0YW5jZSwgaWYgaXQncyBwcm90ZWN0ZWQgYnkgYSBmZWF0dXJlIGZsYWcsIEknZCB3YW50IHRvIGZpbmQgdGhlIGRlZmluaW5nIG1hY3JvIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTozNy42NDk2MzI4MjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9wb3dlci9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQyOlxcdHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gOTQzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuIDk0NDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG4gOTQ1OlxcdHtcXG4gOTQ2OlxcdFxcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSA9IGRlY29kZV9zdGF0ZShidWYsIG4pO1xcbiA5NDc6XFx0XFx0aW50IGVycm9yO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuIDk1MDpcXHRcXHRpbnQgaWR4O1xcbiA5NTE6XFx0XFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbiA5NTI6XFx0I2VuZGlmXFxuIDk1MzpcXHRcXG4gOTU0OlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxcbiA5NTU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbiA5NTg6XFx0XFx0aWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHtcXG4gOTU5OlxcdFxcdFxcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xcbiA5NjA6XFx0XFx0XFx0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XFxuIDk2MTpcXHRcXHRcXHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xcbiA5NjI6XFx0XFx0XFx0aWYgKCF3cylcXG4gOTYzOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDk2NDpcXHRcXHR9XFxuIDk2NTpcXHQjZW5kaWZcXG4gOTY2OlxcdFxcbiA5Njc6XFx0XFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT05cXG4gOTY4OlxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiBzdHJjbXAoYnVmLCBcXFwib2ZmXFxcIikgXFx1MDAyNlxcdTAwMjYgc3RyY21wKGJ1ZiwgXFxcIm9mZlxcXFxuXFxcIikpXFxuIDk2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTcwOlxcdFxcbiA5NzE6XFx0XFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfTUVNKVxcbiA5NzI6XFx0XFx0XFx0c3RhdGUgPSBtZW1fc2xlZXBfY3VycmVudDtcXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0ZXJyb3IgPSBwbV9hdXRvc2xlZXBfc2V0X3N0YXRlKHN0YXRlKTtcXG4gOTc1OlxcdFxcdHJldHVybiBlcnJvciA/IGVycm9yIDogbjtcXG4gOTc2OlxcdH1cXG4gOTc3OlxcdFxcbiA5Nzg6XFx0cG93ZXJfYXR0cihhdXRvc2xlZXApO1xcbiA5Nzk6XFx0I2VuZGlmIC8qIENPTkZJR19QTV9BVVRPU0xFRVAgKi9cXG4gOTgwOlxcdFxcbiA5ODE6XFx0I2lmZGVmIENPTkZJR19QTV9XQUtFTE9DS1NcXG4gOTgyOlxcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiA5ODM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiA5ODQ6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbiA5ODU6XFx0e1xcbiA5ODY6XFx0XFx0cmV0dXJuIHBtX3Nob3dfd2FrZWxvY2tzKGJ1ZiwgdHJ1ZSk7XFxuIDk4NzpcXHR9XFxuIDk4ODpcXHRcXG4gOTg5OlxcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gOTkwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuIDk5MTpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzcuNjQ5Nzg2Nzg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTcxNjkxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNsZWVwIGFuZCBGaWxlc3lzdGVtIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGF1dG9zbGVlcF9zdG9yZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19QTV9BVVRPU0xFRVBgLiBUaGF0IHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50IGFuZCwgc3BlY2lmaWNhbGx5LCBhdXRvbWF0aWMgc2xlZXAgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGlzIGFsc28gbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSByZWxhdGVkIGNvbmZpZ3M6IGBQTV9TTEVFUGAsIGBQTV9BVVRPU0xFRVBgLCBgRlVTRV9GU2AsIGFuZCBgU1VOUlBDYC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgYXJlIGNvbmZpZ3VyZWQgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGVyZSB0aGlzIGZpdHMuXG5cbkkndmUgaWRlbnRpZmllZCBhIGZldyBrZXkgc3ltYm9scyB0byBmb2xsb3c6IGBzdGF0ZV9zdG9yZWAsIGBhdXRvc2xlZXBfc3RvcmVgIChvYnZpb3VzbHkpLCBgZnVzZV9nZXRfcmVxYCwgYW5kIGBfX3JwY19leGVjdXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlaXIgY29ubmVjdGlvbnMuIEhtbSwgYGZ1c2VfZ2V0X3JlcWAuLi4gdGhhdCByaW5ncyBhIGJlbGwgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGludG8gYGZzL2Z1c2UvZGV2LmNgLiBTdGF0aWMgZnVuY3Rpb25zIG9mdGVuIHBvaW50IHRvIGJlaW5nIGludGVybmFsIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0Mi4yMDY5NTg4OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjAwMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1c2VfZ2V0X3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZGV2LmM9NTU9c3RhdGljIHZvaWQgZnVzZV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGZ1c2VfcmVxICpyZXEpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTYwLVxcbmZzL2Z1c2UvZGV2LmM6NjE6c3RhdGljIHZvaWQgX19mdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbmZzL2Z1c2UvZGV2LmMtNjIte1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMDY9c3RhdGljIHZvaWQgZnVzZV9wdXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xMDctXFxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcXG5mcy9mdXNlL2Rldi5jLTEwOS17XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy03NTMtXFx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXFxuZnMvZnVzZS9kZXYuYzo3NTQ6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy03NTUtXFx0ZnVzZV9zZW5kX29uZShmaXEsIHJlcSk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODIxLVxcdH0gZWxzZSB7XFxuZnMvZnVzZS9kZXYuYzo4MjI6XFx0XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtODIzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODI2LVxcbmZzL2Z1c2UvZGV2LmM6ODI3OlxcdC8qIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgZnVzZV9nZXRfcmVxKCkgc28gdGhhdCBmY2gtXFx1MDAzZW1pbm9yIGlzIHZhbGlkICovXFxuZnMvZnVzZS9kZXYuYy04MjgtXFx0ZnVzZV9hZGp1c3RfY29tcGF0KGZjaCwgYXJncyk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTkwMS1cXHR9IGVsc2Uge1xcbmZzL2Z1c2UvZGV2LmM6OTAyOlxcdFxcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xcbmZzL2Z1c2UvZGV2LmMtOTAzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9OTE3PWludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy05MjEtXFxuZnMvZnVzZS9kZXYuYzo5MjI6XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtOTIzLVxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MTUxNj1zdGF0aWMgc3NpemVfdCBmdXNlX2Rldl9kb19yZWFkKHN0cnVjdCBmdXNlX2RldiAqZnVkLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtMTYyNi1cXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZnBxLVxcdTAwM2Vwcm9jZXNzaW5nW2hhc2hdKTtcXG5mcy9mdXNlL2Rldi5jOjE2Mjc6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xNjI4LVxcdHNldF9iaXQoRlJfU0VOVCwgXFx1MDAyNnJlcS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xODYwPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3dyaXRlKHN0cnVjdCBmdXNlX2RldiAqZnVkLFxcbi0tXFxuZnMvZnVzZS9kZXYuYy0xOTE3LVxcdGlmIChvaC51bmlxdWUgXFx1MDAyNiBGVVNFX0lOVF9SRVFfQklUKSB7XFxuZnMvZnVzZS9kZXYuYzoxOTE4OlxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZnBxLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTIxNjEtXFx0XFx0XFx0XFx0XFx0c2V0X2JpdChGUl9QUklWQVRFLCBcXHUwMDI2cmVxLVxcdTAwM2VmbGFncyk7XFxuZnMvZnVzZS9kZXYuYzoyMTYyOlxcdFxcdFxcdFxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMjE2My1cXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJlcS1cXHUwMDNlbGlzdCwgXFx1MDAyNnRvX2VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjQyLjI3MzU2MzQxNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk2MTQ1MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmxlY3Rpbmcgb24gQVBJIERlc2lnbjogU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgdXNlIG9mIGBmdXNlX2dldF9yZXFgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEl0J3Mgc3RhdGljLCB3aGljaCBnb2VzIGFnYWluc3QgdGhlIGd1aWRlbGluZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpbmQgYSBzdWl0YWJsZSByZXBsYWNlbWVudC4gVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBgZnVzZV9jaGFuX3NlbmRgLCBgZnVzZV9jaGFuX3NlbmRfYmdgLCBhbmQgYGZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseWAgZnVuY3Rpb25zIGNvbWUgdG8gbWluZC4gVGhlc2Ugc2VlbSBsaWtlIG1vcmUgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gTm93LCBhIGNydWNpYWwgY2hlY2s6IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGZ1c2VfY2hhbl9zZW5kYCBpc24ndCBzdGF0aWMuIEl0IHdvdWxkIGJlIGNvdW50ZXJwcm9kdWN0aXZlIHRvIHN3YXAgYSBzdGF0aWMgZnVuY3Rpb24gZm9yIGFub3RoZXIgc3RhdGljIG9uZSEgVG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBhbmQgZ2V0IGEgZ3Jhc3Agb2Ygb3RoZXIgd2VsbCBpbXBsZW1lbnRlZCBBUElzLCBJJ2xsIHRha2UgYSBsb29rIGF0IGBuZXQvc3VucnBjL3NjaGVkLmNgIGFuZCBzcGVjaWZpY2FsbHkgYXQgYF9fcnBjX2V4ZWN1dGVgIGFzIEkga25vdyB0aGF0IGl0IGhhbmRsZXMgdGhlc2UgdHlwZXMgb2Ygc2l0dWF0aW9ucyBhbmQgc2hvdWxkIGhhdmUgYSBnb29kIHBhdHRlcm4gdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0Ni4wNjk3MTA1NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTEwNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcnBjX2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zY2hlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc2NoZWQuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwocnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXFxubmV0L3N1bnJwYy9zY2hlZC5jOjM1NzogKiB3aGljaCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgX19ycGNfZXhlY3V0ZSgpIGRvZXNuJ3QgbG9vcCAoZHVlIHRvIHRoZVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTgtICogbG9ja2xlc3MgUlBDX0lTX1FVRVVFRCgpIHRlc3QpIGJlZm9yZSB3ZSd2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy05MDgtICovXFxubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDE1PXZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjItXFx0XFx0dW5zaWduZWQgaW50IHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDIzOlxcdFxcdF9fcnBjX2V4ZWN1dGUodGFzayk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjQtXFx0XFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAyOD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfc2NoZWR1bGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzEtXFxubmV0L3N1bnJwYy9zY2hlZC5jOjEwMzI6XFx0X19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMy1cXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NDYuMTU1ODI1OTY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NDUwODYyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQVBJIEVudHJ5cG9pbnRzIGZvciBQb3dlciBNYW5hZ2VtZW50KipcblxuT2theSwgaGVyZSdzIG15IHBsYW4gZm9yIGZ1enppbmcgdGhlc2UgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgaW5pdGlhbCBwb2ludCBhYm91dCBgX19ycGNfZXhlY3V0ZWAgYmVpbmcgc3RhdGljLiBXZSBzaG91bGQgZGVmaW5pdGVseSBnbyB3aXRoIGBycGNfZXhlY3V0ZWAgaW5zdGVhZDsgdGhhdCdzIHRoZSBub24tc3RhdGljIHZlcnNpb24uIE1vdmluZyBvbiwgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIFRoZXkncmUgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZS4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCB3aGlsZSB0aGV5J3JlIHN0YXRpYywgdGhleSdyZSBub3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBkaXJlY3QgaGFuZGxlcnMgZm9yIHdyaXRlcyB0byB0aGUgc3lzZnMgZmlsZXMuIFRoZXkgYXJlIHRoZSBBUEkgZW50cnlwb2ludHMgZm9yIHRoZXNlIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMuXG5cblRoZSBrZXkgaXMgdGhhdCBTeXNmcyBzdG9yZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB2aWEgVkZTLCBzbyB5ZXMsIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFNvLCBsaXN0aW5nIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGhlcmUuIFRob3VnaCwganVzdCB0byBiZSB0aG9yb3VnaCwgY291bGQgYHBtX2F1dG9zbGVlcF9zZXRfc3RhdGVgIG9yIGBwbV9zdXNwZW5kYCBiZSBiZXR0ZXI/IFVsdGltYXRlbHksIHRoZSBmdXp6aW5nIG5lZWRzIHRvIHRhcmdldCB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIHdpdGhpbiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCDigJMgdGhlIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzLiBTbywgdGhlIG9yaWdpbmFsIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHRoZSByaWdodCB0YXJnZXRzLlxuXG5JIGRvdWJsZS1jaGVja2VkIHRvIGNvbmZpcm0gdGhhdCBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBhcmUgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBCdXQsIGFnYWluLCB0aGV5IGFyZSAqdGhlKiBkaXJlY3QgaGFuZGxlcnMgZm9yIHRoZSBzeXNmcyB3cml0ZXMsIHRoZSBBUEkuIFRoZSBwcm9tcHQgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgaXMgZmluZS4gSSdtIGdvaW5nIHRvIGxpc3QgdGhlbS5cblxuSSdtIGFsc28gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgUE1fU0xFRVBgLCBgUE1fQVVUT1NMRUVQYCwgYEZVU0VfRlNgLCBhbmQgYFNVTlJQQ2Ag4oCTIGp1c3QgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIGNvbXByZWhlbnNpdmUgYW5kIGNvbnNpZGVycyB0aGUgcmVsZXZhbnQgb3B0aW9ucy5cblxuRmluYWxseSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgcmV2aXNpdCBga2VybmVsL3Bvd2VyL21haW4uY2AgdG8gY29uZmlybSB0aGUgbG9jYXRpb24gb2YgYHN0YXRlX3N0b3JlYCBhbmQgZW5zdXJlIEkgaGF2ZSBldmVyeXRoaW5nIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzI5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjUzLjcwMDkxNTA4MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDE5NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL21haW4uYz03NzM9c3RhdGljIHN1c3BlbmRfc3RhdGVfdCBkZWNvZGVfc3RhdGUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG4tLVxcbmtlcm5lbC9wb3dlci9tYWluLmMtNzk5LVxcbmtlcm5lbC9wb3dlci9tYWluLmM6ODAwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxua2VybmVsL3Bvd2VyL21haW4uYy04MDEtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTMuOTEzOTQxMjE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDk4OTUzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgc3RhdGVfc3RvcmVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgYHN0YXRlX3N0b3JlYCBpcyBpbmRlZWQgc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCBpdCdzIGdvdCBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGlzIGRhdGEgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQgd2l0aGluIHRoZSBGVVNFIGltcGxlbWVudGF0aW9uLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgdGhpcywgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhlIEZVU0Uga2VybmVsIGRyaXZlci4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGZ1c2VfY2hhbl9zZW5kYCBhbmQgYGZ1c2VfY2hhbl9zZW5kX2JnYCBkZWZpbmVkIGluIGBmcy9mdXNlL2Rldi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBzdGF0ZV9zdG9yZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGRhdGEgY29ycnVwdGlvbiwgZ2l2ZW4gYHN0YXRlX3N0b3JlYCdzIHN0YXRpYyBzY29wZS4gVGhpcyBleHBsb3JhdGlvbiB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo1Ny41NjM4Mzg3MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI3NDcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXNlX2NoYW5fc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZGV2LmM9Nzk1PXN0YXRpYyB2b2lkIGZ1c2VfYXJnc190b19yZXEoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTgwOC1cXG5mcy9mdXNlL2Rldi5jOjgwOTpzc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcXG5mcy9mdXNlL2Rldi5jLTgxMC17XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTg2MT1zdGF0aWMgaW50IGZ1c2VfcmVxdWVzdF9xdWV1ZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy04OTEtXFxuZnMvZnVzZS9kZXYuYzo4OTI6aW50IGZ1c2VfY2hhbl9zZW5kX2JnKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncywgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbmZzL2Z1c2UvZGV2LmMtODkzLXtcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtOTE2LVxcbmZzL2Z1c2UvZGV2LmM6OTE3OmludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxcbmZzL2Z1c2UvZGV2LmMtOTE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTcuNjcxMTE5NzcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTcwOTE4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBEeW5hbWljcyoqXG5cblJpZ2h0LCB0aGVzZSBvYnNlcnZhdGlvbnMgc3VnZ2VzdCBhIGR5bmFtaWMsIHBvdGVudGlhbGx5IGV2b2x2aW5nIHN0YXRlLiBUaGluZ3MgYXJlbid0IGZpeGVkOyB0aGV5J3JlIGluIGZsdXguIFRoZSBjbHVlIEkgbmVlZCB0byBiZWdpbiB3aXRoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGludG8gdGhlIGNvcmUsIHRoZSBtb3N0IGJhc2ljIHVuaXQgYW5kIHRoZSBoZWFydCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBzbyBsZXQncyBjaGVjayBgcnBjX2V4ZWN1dGVgIHdpdGhpbiBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIFJQQyBjYWxscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJhc2ljIG1lY2hhbmlzbSBhbmQgaG93IHRoZXNlIGR5bmFtaWMgYmVoYXZpb3JzIGFyZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjAxLjIyODIxNDUzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNzIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBjX2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zY2hlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc2NoZWQuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwocnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXFxubmV0L3N1bnJwYy9zY2hlZC5jOjM1NzogKiB3aGljaCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgX19ycGNfZXhlY3V0ZSgpIGRvZXNuJ3QgbG9vcCAoZHVlIHRvIHRoZVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTgtICogbG9ja2xlc3MgUlBDX0lTX1FVRVVFRCgpIHRlc3QpIGJlZm9yZSB3ZSd2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy05MDgtICovXFxubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDE0LSAqL1xcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDE1OnZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDE2LXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDIyLVxcdFxcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5uZXQvc3VucnBjL3NjaGVkLmM6MTAyMzpcXHRcXHRfX3JwY19leGVjdXRlKHRhc2spO1xcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDI0LVxcdFxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTEwMjg9c3RhdGljIHZvaWQgcnBjX2FzeW5jX3NjaGVkdWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDMxLVxcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDMyOlxcdF9fcnBjX2V4ZWN1dGUoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBycGNfdGFzaywgdS50a193b3JrKSk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzMtXFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjAxLjI4NjI5MzYyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDYxNDMzMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvd2VyIE1hbmFnZW1lbnQgUmVsYXRlZCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGBycGNfZXhlY3V0ZWAgaXNuJ3Qgc3RhdGljLCBtZWFuaW5nIGl0J3MgZXh0ZXJuYWxseSB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSBjYWxsZWQgZnJvbSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBwb3dlciBtYW5hZ2VtZW50IGNvbnRleHQuIEdpdmVuIHRoaXMsIG15IGF0dGVudGlvbiBpcyBub3cgZHJhd24gdG8gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgc3RhdGVfc3RvcmVgLCBgYXV0b3NsZWVwX3N0b3JlYCwgYGZ1c2VfY2hhbl9zZW5kYCwgYGZ1c2VfY2hhbl9zZW5kX2JnYCwgYGZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseWAsIGFuZCBvZiBjb3Vyc2UsIGBycGNfZXhlY3V0ZWAgaXRzZWxmLlxuXG5UaGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAgYXJlIGluZGVlZCB0aGUgY29yZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBjaGFuZ2VzLiBDb25zaWRlcmluZyBJIHdhcyBpbnZvbHZlZCB3aXRoIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgYSBzaW1wbGUgdmFsaWRhdGlvbi4gWXVwLCB0aG9zZSBhcmUgdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCwgc28gdGhpcyBoZWxwcy5cblxuTm93LCBsZXQncyBjb3JyZWxhdGUgdGhlc2Ugc3ltYm9scyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEknbSBmb2N1c2luZyBvbiBgUE1fU0xFRVBgLCBgUE1fQVVUT1NMRUVQYCwgYEZVU0VfRlNgLCBhbmQgYFNVTlJQQ2AuIFdlIGFyZSBleHBlY3RpbmcgdGhhdCB0aGUgcG93ZXIgbWFuYWdlbWVudCB3aWxsIG5lZWQgdG8gY2hhbmdlIGFjY29yZGluZyB0byBob3cgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBiZWhhdmVzLlxuXG5JJ2xsIHZlcmlmeSB0aGF0IGBQTV9TTEVFUGAgYW5kIGBQTV9BVVRPU0xFRVBgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIHNob3dzIGAjaWZkZWYgQ09ORklHX1BNX1NMRUVQYCBjb25kaXRpb25zIGFyb3VuZCBib3RoIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgLiBgUE1fQVVUT1NMRUVQYCBhbHNvIGNvbmRpdGlvbmFsbHkgc3Vycm91bmRzIGBhdXRvc2xlZXBfc3RvcmVgLiBUaGlzIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRoZSBvdmVyYWxsIGdvYWxzLiBgRlVTRV9GU2AgaXMgZXhwZWN0ZWQgZm9yIEZVU0UgZmlsZXN5c3RlbSBpbnRlZ3JhdGlvbiwgYW5kIGBTVU5SUENgIHJlbGF0ZXMgdG8gdGhlIFNVTlJQQyBzdWJzeXN0ZW0sIGFzIGV4cGVjdGVkLlxuXG5Gb3IgRlVTRSwgSSdsbCBxdWlja2x5IGNoZWNrIGBmcy9mdXNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBGVVNFX0ZTYC4gVGhpcyBpcyBqdXN0IGdvb2QgcHJhY3RpY2UgYW5kIHdpbGwgY29uZmlybSBteSBleGlzdGluZyBrbm93bGVkZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjA4LjM0NzczMDMxOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDkyNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MDguNDU4ODI5NDI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODU2MTM1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgU1VOUlBDKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFNVTlJQQ2Agd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRoZSBgbmV0L3N1bnJwYy9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGBuZXRgIGlzIG5ldHdvcmstcmVsYXRlZCwgYW5kIGBzdW5ycGNgLi4uIHdlbGwsIHRoYXTigJlzIHNlbGYtZXhwbGFuYXRvcnkuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBjb250YWluIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVzY3JpcHRpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgU1VOUlBDYCBpcyBidWlsdCBhbmQgZW5hYmxlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjExLjc0NDQ0NTQ0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjQ4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVU5SUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMzUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcXG5uZXQvc3VucnBjL0tjb25maWctMzctXFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNDktXFxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0VcXG5uZXQvc3VucnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNjMtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXFxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MTEuODU2Njk5NDA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTAzNTc1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBTVU5SUENgIGlzIG9uZSBvZiB0aG9zZSBzZXR0aW5ncyB0aGF0IGdldHMgZmxpcHBlZCBvbiwgb3Igb2ZmLCBkZXBlbmRpbmcgb24gYSBmZXcga2V5IGZhY3RvcnMuIFR5cGljYWxseSwgaXQncyBsaW5rZWQgdG8gZWl0aGVyIGBORlNfRlNgIG9yIGBORlNEYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBzdGF0ZSwgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGhhdmUgYSBoYW5kIGluIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgb2J2aW91cyBwbGFjZSB0byBsb29rIGlzIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AuIEknbSBwcmV0dHkgc3VyZSBJJ2xsIGZpbmQgc29tZXRoaW5nIGxpa2UgYFBNX1NMRUVQYCBvciBgUE1fQVVUT1NMRUVQYCBpbiB0aGVyZSwgdGhvdWdoIEknbSBub3QgZW50aXJlbHkgc3VyZSBob3cgdGhlc2UgbWlnaHQgaW5mbHVlbmNlIGBTVU5SUENgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjE1LjU2NzA1OTU2MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc5MTA0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBNX1NMRUVQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnPTExOD1jb25maWcgUE1fU1REX1BBUlRJVElPTlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTM5LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjE0MDpjb25maWcgUE1fU0xFRVBcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNDEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTQ0LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjE0NTpjb25maWcgUE1fU0xFRVBfU01QXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTQ2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTE1MS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxNTI6Y29uZmlnIFBNX1NMRUVQX1NNUF9OT05aRVJPX0NQVVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTE1My1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0yNDY9Y29uZmlnIFBNX1RFU1RfU1VTUEVORFxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMjU2LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjI1Nzpjb25maWcgUE1fU0xFRVBfREVCVUdcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yNTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDozMDoxNS42NTQ5NzYyNTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MTE5MTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIHBocmFzZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUE1fU0xFRVAgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gYFBNX1NMRUVQYCBpcyBnb2luZyB0byBiZSBkZWZpbmVkIGFzICd5ZXMnIChgZGVmX2Jvb2wgeWApLCBhbmQgdGhhdCBoaW5nZXMgZGlyZWN0bHkgb24gdGhlIHByZXNlbmNlIG9mIGVpdGhlciBgU1VTUEVORGAgb3IgYEhJQkVSTkFURV9DQUxMQkFDS1NgLiBNYWtlcyBwZXJmZWN0IHNlbnNlOyBpZiBlaXRoZXIgb2YgdGhvc2UgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgdGhlbiBvYnZpb3VzbHkgdGhlIHN5c3RlbSBpcyBjYXBhYmxlIG9mIGVudGVyaW5nIGEgc2xlZXAgc3RhdGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgUE1fQVVUT1NMRUVQYCBhcyBpdCdzIGxpa2VseSBpbXBhY3RlZCBieSB3aGV0aGVyIG9yIG5vdCBgUE1fU0xFRVBgIGlzIGFjdGl2ZS4gSSB3YW50IHRvIGhhdmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdWxsIHBvd2VyIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDozMDoxOS44NDYxNzExMTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE2NjM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUE1fQVVUT1NMRUVQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnPTE1Mj1jb25maWcgUE1fU0xFRVBfU01QX05PTlpFUk9fQ1BVXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNjAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTYxOmNvbmZpZyBQTV9BVVRPU0xFRVBcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNjItXFx0Ym9vbCBcXFwiT3Bwb3J0dW5pc3RpYyBzbGVlcFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MTkuOTU3MzQxNjQ5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzU1MDQ3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IGFzc2Vzc21lbnQuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBQTV9BVVRPU0xFRVBgIGlzIGEgdmFsaWQgY29uZmlnIG5vdywgZ29vZCB0byBrbm93LiBJJ3ZlIHJlLWV4YW1pbmVkIGBmcy9mdXNlL2Rldi5jYCBhbmQgc3BvdHRlZCB0aGUgY2hhbmdlIHdpdGhpbiBgZnVzZV9nZXRfcmVxYC4gVGhlIGtleSBoZXJlIGlzIHRoZSB0YXNrIHN0YXRlIG1vZGlmaWNhdGlvbiwgY2hhbmdpbmcgdGhlIHdhaXQgZXZlbnQgZnJvbSBgVEFTS19GUkVFWkFCTEVgIHRvIGBUQVNLX0ZSRUVaQUJMRV9VTlNBRkVgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIHNvbWV0aGluZyB0byB3YXRjaCBvdXQgZm9yLlxuXG5UaGVuIEkgY2hlY2tlZCBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gIExvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNpbWlsYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYF9fcnBjX2V4ZWN1dGVgIHdoZXJlIGBUQVNLX0ZSRUVaQUJMRWAgYWxzbyBnZXRzIGJ1bXBlZCB0byBgVEFTS19GUkVFWkFCTEVfVU5TQUZFYC4gIEFnYWluLCBnb29kLiAgSSBsaWtlIHRoYXQgaXQncyBjb25zaXN0ZW50LlxuXG5OZXh0LCB0aGUgY2hhbmdlcyBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIEEgY2FwYWJpbGl0eSBjaGVjayBoYXMgYmVlbiBhZGRlZCBiZWZvcmUgYSBzdXNwZW5kIG9wZXJhdGlvbiwgYW5kIHRoZXJlJ3MgYWxzbyBhIGNoZWNrIGZvciB3YWtldXAgc291cmNlcyBpbiBgc3RhdGVfc3RvcmVgLiBTZWVtcyBsaWtlIHRoZSBpZGVhIGlzIHRvIGVuaGFuY2UgdGhlIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgb2YgdGhlIHN1c3BlbmQgcHJvY2Vzcy5cblxuQWxsIG9mIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBzeXN0ZW1zLCB3aXRoIG1vZGlmaWNhdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlciBzcGFjZSwgYW5kIHRodXMgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXM6XG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcblxuU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmb2N1cyBvbiBmdXp6aW5nIHRoZXNlIHN5bWJvbHM6XG4qICAgYHN0YXRlX3N0b3JlYFxuKiAgIGBhdXRvc2xlZXBfc3RvcmVgXG4qICAgYGZ1c2VfY2hhbl9zZW5kYFxuKiAgIGBmdXNlX2NoYW5fc2VuZF9iZ2BcbiogICBgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5YFxuKiAgIGBycGNfZXhlY3V0ZWBcblxuQW5kIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6XG4qICAgYFBNX1NMRUVQYFxuKiAgIGBQTV9BVVRPU0xFRVBgXG4qICAgYEZVU0VfRlNgXG4qICAgYFNVTlJQQ2BcblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIHRoZSBGVVNFIGFuZCBTVU5SUEMgc3Vic3lzdGVtcyB0byB1c2UgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAgZHVyaW5nIHdhaXRzLiBJdCBhbHNvIGludHJvZHVjZXMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgaW4gdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyB1c2VkIGZvciBwb3dlciBtYW5hZ2VtZW50IChgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB3aWxsIG5lZWQgdG8gYmUgcGFydCBvZiBhbnkgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHRhc2sgc3RhdGUgY2hhbmdlcyBhcmUgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgb3BlbmluZyB1cCBuZXcgYXZlbnVlcyBmb3IgZXhwbG9pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTUsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjMxMjM5MjcyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTc4MTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUE1fU0xFRVBcIixcbiAgICBcIlBNX0FVVE9TTEVFUFwiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiU1VOUlBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhdGVfc3RvcmVcIixcbiAgICBcImF1dG9zbGVlcF9zdG9yZVwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX2JnXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlcIixcbiAgICBcInJwY19leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUE1fU0xFRVBcIixcbiAgICBcIlBNX0FVVE9TTEVFUFwiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiU1VOUlBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhdGVfc3RvcmVcIixcbiAgICBcImF1dG9zbGVlcF9zdG9yZVwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX2JnXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlcIixcbiAgICBcInJwY19leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjQ2MjE4MTcwMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1Mzc3MTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjQ2MjcxODU1MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDUzMjMwNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE5Y2Q2ZGJmZjI3Y2ZlNTJjMTFlMjE0MTMyYjdkNjg2MTgxN2VhZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjI4OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXYuYyBiL2ZzL2Z1c2UvZGV2LmNcbmluZGV4IDU3NjNhN2NkM2IzN2YuLjllOGRjOTZkMjRmMTggMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rldi5jXG4rKysgYi9mcy9mdXNlL2Rldi5jXG5AQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgZm9yX2JhY2tncm91bmQpXG4gXHRcdGVyciA9IC1FSU5UUjtcbiBcdFx0aWYgKHdhaXRfZXZlbnRfc3RhdGVfZXhjbHVzaXZlKGZjaC1cdTAwM2VibG9ja2VkX3dhaXRxLFxuIFx0XHRcdFx0IWZ1c2VfYmxvY2tfYWxsb2MoZmNoLCBmb3JfYmFja2dyb3VuZCksXG4tXHRcdFx0XHQoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFKSkpXG4rXHRcdFx0XHQoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXG5pbmRleCA1NDI5ZTlmMTliNjU1Li43ODBhZmRhMTE3NjU2IDEwMDY0NFxuLS0tIGEva2VybmVsL3Bvd2VyL21haW4uY1xuKysrIGIva2VybmVsL3Bvd2VyL21haW4uY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2V1cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJwb3dlci5oXCJcbiBcbkBAIC04MDIsNiArODAzLDIyIEBAIHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gXHRzdXNwZW5kX3N0YXRlX3Qgc3RhdGU7XG4gXHRpbnQgZXJyb3I7XG4gXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aW50IGlkeDtcbitcdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbisjZW5kaWZcbitcbitcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbitcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuK1x0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XG4rXHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xuK1x0aWYgKCF3cylcbitcdFx0cmV0dXJuIC1FUEVSTTtcbisjZW5kaWZcbitcbiBcdGVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTkyOSw2ICs5NDYsMjQgQEAgc3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7XG4gXHRpbnQgZXJyb3I7XG4gXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aW50IGlkeDtcbitcdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbisjZW5kaWZcbitcbitcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbitcdGlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX09OKSB7XG4rXHRcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuK1x0XHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcbitcdFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbitcdFx0aWYgKCF3cylcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1x0fVxuKyNlbmRpZlxuK1xuIFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT05cbiBcdCAgICBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCJvZmZcIikgXHUwMDI2XHUwMDI2IHN0cmNtcChidWYsIFwib2ZmXFxuXCIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmNcbmluZGV4IDAxNmYxNmNhNTc3OTkuLjQ5NDk0N2Q1MDlmM2MgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3NjaGVkLmNcbisrKyBiL25ldC9zdW5ycGMvc2NoZWQuY1xuQEAgLTk4NCw3ICs5ODQsNyBAQCBzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbiBcdFx0dHJhY2VfcnBjX3Rhc2tfc3luY19zbGVlcCh0YXNrLCB0YXNrLVx1MDAzZXRrX2FjdGlvbik7XG4gXHRcdHN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KFx1MDAyNnRhc2stXHUwMDNldGtfcnVuc3RhdGUsXG4gXHRcdFx0XHRSUENfVEFTS19RVUVVRUQsIHJwY193YWl0X2JpdF9raWxsYWJsZSxcbi1cdFx0XHRcdFRBU0tfS0lMTEFCTEV8VEFTS19GUkVFWkFCTEUpO1xuK1x0XHRcdFx0VEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSk7XG4gXHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdoZW4gYSBzeW5jIHRhc2sgcmVjZWl2ZXMgYSBzaWduYWwsIGl0IGV4aXRzIHdpdGhcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjQ2MjcxOTQ4MloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDUzMjA1MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrOiBObyBJc3N1ZXMgRGV0ZWN0ZWQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyB0aHJlZSBmaWxlczogYGZzL2Z1c2UvZGV2LmNgLCBga2VybmVsL3Bvd2VyL21haW4uY2AsIGFuZCBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBqdXN0IHR3ZWFraW5nIHNvbWUgdGFzayBzdGF0ZXMgaW4gYGZzL2Z1c2UvZGV2LmNgIGFuZCBgbmV0L3N1bnJwYy9zY2hlZC5jYCwgc3dhcHBpbmcgYFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAsIGFuZCB0aGVuLCBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AsIHdlJ3JlIGFkZGluZyBzb21lIGNoZWNrcyBhcm91bmQgcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIG15IGluaXRpYWwgZmVlbGluZyBpcyB0aGF0IHRoaXMgZG9lc24ndCB3YXJyYW50IEtNU0FOIGF0dGVudGlvbi4gTm90aGluZyBzY3JlYW1zIFwidW5pbml0aWFsaXplZCBtZW1vcnksXCIgbm8gaW50cmljYXRlLCBwb3RlbnRpYWxseS1wYXJ0aWFsbHktaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgY2VydGFpbmx5IG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3MgYXJlIHByZXNlbnQgaW4gdGhlIGNvZGUuIEl0IHNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBmbGFnIGFkanVzdG1lbnRzIG9yIHRoZSBhZGRpdGlvbiBvZiBzZWN1cml0eSBhbmQgcG93ZXIgbWFuYWdlbWVudCBjaGVja3MuXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBga2VybmVsL3Bvd2VyL21haW4uY2AgY2hhbmdlLiBMZXQncyBzZWUuLi5cblxuYGBgY1xuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbitcdGludCBpZHg7XG4rXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4rI2VuZGlmXG4rXG4rXHRpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4rXHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcbitcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuK1x0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbitcdGlmICghd3MpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rI2VuZGlmXG5gYGBcblxuT2theSwgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgdGhlIGBpZHhgIGFuZCBgd3NgIHZhcmlhYmxlcyB3aXRoIHRoZSByZXR1cm4gdmFsdWVzIG9mIGB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKWAgYW5kIGB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KClgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHJldHVybiB3ZWxsLWRlZmluZWQgdmFsdWVzIG9yIGhhbmRsZSBlcnJvcnMsIHNvIGFueSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgbG9va3MgdG8gYmUgYXZvaWRlZC4gVGhlIG90aGVyIGZpbGUgY2hhbmdlcyBhcmUganVzdCB0aG9zZSBmbGFnIGFkanVzdG1lbnRzLCB3aGljaCBhcmUgdW5saWtlbHkgdG8gY2F1c2UgYW55IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQncyBwcmV0dHkgY2xlYXIgdG8gbWUgdGhhdCB3ZSBkb24ndCBuZWVkIEtNU0FOIGhlcmUuICoqTmVlZHNLTVNBTiBpcyBGYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODIxLCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjM4LjkxNTkyODE5NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyAoVEFTS19GUkVFWkFCTEUgdG8gVEFTS19GUkVFWkFCTEVfVU5TQUZFKSBpbiBGVVNFIGFuZCBTdW5SUEMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgYXR0cmlidXRlcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 10:26:36 +0000 UTC FinishedAt: 2026-08-07 10:30:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PM_SLEEP", "PM_AUTOSLEEP", "FUSE_FS", "SUNRPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PM_SLEEP", "PM_AUTOSLEEP", "FUSE_FS", "SUNRPC" ], "series_id": "a76d5ef8-004d-4459-83dc-4807a2d5f45a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "state_store", "autosleep_store", "fuse_chan_send", "fuse_chan_send_bg", "fuse_chan_send_notify_reply", "rpc_execute" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIEZVU0UgYW5kIFNVTlJQQyB0byB1c2UgVEFTS19GUkVFWkFCTEVfVU5TQUZFIGR1cmluZyB3YWl0cywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIChzdGF0ZV9zdG9yZSBhbmQgYXV0b3NsZWVwX3N0b3JlKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkcml2ZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE5Y2Q2ZGJmZjI3Y2ZlNTJjMTFlMjE0MTMyYjdkNjg2MTgxN2VhZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjI4OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jXG5pbmRleCA1NzYzYTdjZDNiMzdmLi45ZThkYzk2ZDI0ZjE4IDEwMDY0NFxuLS0tIGEvZnMvZnVzZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kZXYuY1xuQEAgLTExNiw3ICYjNDM7MTE2LDcgQEAgc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbiBcdFx0ZXJyID0gLUVJTlRSO1xuIFx0XHRpZiAod2FpdF9ldmVudF9zdGF0ZV9leGNsdXNpdmUoZmNoLVx1MDAzZWJsb2NrZWRfd2FpdHEsXG4gXHRcdFx0XHQhZnVzZV9ibG9ja19hbGxvYyhmY2gsIGZvcl9iYWNrZ3JvdW5kKSxcbi1cdFx0XHRcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSlcbiYjNDM7XHRcdFx0XHQoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXG5pbmRleCA1NDI5ZTlmMTliNjU1Li43ODBhZmRhMTE3NjU2IDEwMDY0NFxuLS0tIGEva2VybmVsL3Bvd2VyL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3Bvd2VyL21haW4uY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZXVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtwb3dlci5oXCYjMzQ7XG4gXG5AQCAtODAyLDYgJiM0Mzs4MDMsMjIgQEAgc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiBcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZTtcbiBcdGludCBlcnJvcjtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuJiM0MztcdGludCBpZHg7XG4mIzQzO1x0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuJiM0MztcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuJiM0MztcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuJiM0MztcdHdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7XG4mIzQzO1x0aWYgKCF3cylcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTkyOSw2ICYjNDM7OTQ2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSA9IGRlY29kZV9zdGF0ZShidWYsIG4pO1xuIFx0aW50IGVycm9yO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4mIzQzO1x0aW50IGlkeDtcbiYjNDM7XHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSlcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4mIzQzO1x0aWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHtcbiYjNDM7XHRcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuJiM0MztcdFx0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XG4mIzQzO1x0XHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xuJiM0MztcdFx0aWYgKCF3cylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OXG4gXHQgICAgXHUwMDI2XHUwMDI2IHN0cmNtcChidWYsIFwmIzM0O29mZlwmIzM0OykgXHUwMDI2XHUwMDI2IHN0cmNtcChidWYsIFwmIzM0O29mZlxcblwmIzM0OykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuY1xuaW5kZXggMDE2ZjE2Y2E1Nzc5OS4uNDk0OTQ3ZDUwOWYzYyAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc2NoZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zY2hlZC5jXG5AQCAtOTg0LDcgJiM0Mzs5ODQsNyBAQCBzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbiBcdFx0dHJhY2VfcnBjX3Rhc2tfc3luY19zbGVlcCh0YXNrLCB0YXNrLVx1MDAzZXRrX2FjdGlvbik7XG4gXHRcdHN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KFx1MDAyNnRhc2stXHUwMDNldGtfcnVuc3RhdGUsXG4gXHRcdFx0XHRSUENfVEFTS19RVUVVRUQsIHJwY193YWl0X2JpdF9raWxsYWJsZSxcbi1cdFx0XHRcdFRBU0tfS0lMTEFCTEV8VEFTS19GUkVFWkFCTEUpO1xuJiM0MztcdFx0XHRcdFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpO1xuIFx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXaGVuIGEgc3luYyB0YXNrIHJlY2VpdmVzIGEgc2lnbmFsLCBpdCBleGl0cyB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOWNkNmRiZmYyN2NmZTUyYzExZTIxNDEzMmI3ZDY4NjE4MTdlYWUzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMDoyODo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jCmluZGV4IDU3NjNhN2NkM2IzN2YuLjllOGRjOTZkMjRmMTggMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kZXYuYwpAQCAtMTE2LDcgJiM0MzsxMTYsNyBAQCBzdGF0aWMgc3RydWN0IGZ1c2VfcmVxICpmdXNlX2dldF9yZXEoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBib29sIGZvcl9iYWNrZ3JvdW5kKQogCQllcnIgPSAtRUlOVFI7CiAJCWlmICh3YWl0X2V2ZW50X3N0YXRlX2V4Y2x1c2l2ZShmY2gtJmd0O2Jsb2NrZWRfd2FpdHEsCiAJCQkJIWZ1c2VfYmxvY2tfYWxsb2MoZmNoLCBmb3JfYmFja2dyb3VuZCksCi0JCQkJKFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRSkpKQomIzQzOwkJCQkoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkpKQogCQkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCA1NDI5ZTlmMTliNjU1Li43ODBhZmRhMTE3NjU2IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG1fd2FrZXVwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cG93ZXIuaCYjMzQ7CiAKQEAgLTgwMiw2ICYjNDM7ODAzLDIyIEBAIHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiAJc3VzcGVuZF9zdGF0ZV90IHN0YXRlOwogCWludCBlcnJvcjsKIAomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaW50IGlkeDsKJiM0MzsJc3RydWN0IHdha2V1cF9zb3VyY2UgKndzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSkKJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUAomIzQzOwlpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTsKJiM0MzsJd3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7CiYjNDM7CXdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7CiYjNDM7CWlmICghd3MpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOyNlbmRpZgomIzQzOwogCWVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTkyOSw2ICYjNDM7OTQ2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlzdXNwZW5kX3N0YXRlX3Qgc3RhdGUgPSBkZWNvZGVfc3RhdGUoYnVmLCBuKTsKIAlpbnQgZXJyb3I7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWludCBpZHg7CiYjNDM7CXN0cnVjdCB3YWtldXBfc291cmNlICp3czsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHsKJiM0MzsJCWlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpOwomIzQzOwkJd3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7CiYjNDM7CQl3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpOwomIzQzOwkJaWYgKCF3cykKJiM0MzsJCQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT04KIAkgICAgJmFtcDsmYW1wOyBzdHJjbXAoYnVmLCAmIzM0O29mZiYjMzQ7KSAmYW1wOyZhbXA7IHN0cmNtcChidWYsICYjMzQ7b2ZmXG4mIzM0OykpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IDAxNmYxNmNhNTc3OTkuLjQ5NDk0N2Q1MDlmM2MgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTk4NCw3ICYjNDM7OTg0LDcgQEAgc3RhdGljIHZvaWQgX19ycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiAJCXRyYWNlX3JwY190YXNrX3N5bmNfc2xlZXAodGFzaywgdGFzay0mZ3Q7dGtfYWN0aW9uKTsKIAkJc3RhdHVzID0gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQoJmFtcDt0YXNrLSZndDt0a19ydW5zdGF0ZSwKIAkJCQlSUENfVEFTS19RVUVVRUQsIHJwY193YWl0X2JpdF9raWxsYWJsZSwKLQkJCQlUQVNLX0tJTExBQkxFfFRBU0tfRlJFRVpBQkxFKTsKJiM0MzsJCQkJVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSk7CiAJCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCQkvKgogCQkJICogV2hlbiBhIHN5bmMgdGFzayByZWNlaXZlcyBhIHNpZ25hbCwgaXQgZXhpdHMgd2l0aAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogRnV6emluZyBDYW5kaWRhdGVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFdlJiMzOTt2ZSBnb3QgdGhyZWUgZmlsZXMgbW9kaWZpZWQ6IGBmcy9mdXNlL2Rldi5jYCwgYGtlcm5lbC9wb3dlci9tYWluLmNgLCBhbmQgYG5ldC9zdW5ycGMvc2NoZWQuY2AuIFRoZSBmaXJzdCB0d28gZmlsZXMsIHRoYXQgZGVhbCB3aXRoIGZ1c2UgYW5kIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbCwgYXJlIGFsbW9zdCBjZXJ0YWlubHkgd29ydGggY2xvc2VyIHNjcnV0aW55LiBUaGUgYG5ldC9zdW5ycGMvc2NoZWQuY2AgZmlsZSBpcyBpbnRlcmVzdGluZyBhbmQgbWlnaHQgYmUgd29ydGggZXhwbG9yaW5nLCBidXQgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZpcnN0IHR3byBmaXJzdC4KCkZpcnN0LCBga2VybmVsL3Bvd2VyL21haW4uY2AgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjaGVja3Mgd2l0aGluIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgLiBUaGVzZSBhcmUgY2xlYXJseSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSYjMzk7cmUgZXhwb3NlZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBgL3N5cy9wb3dlci9zdGF0ZWAgYW5kIGAvc3lzL3Bvd2VyL2F1dG9zbGVlcGAgaW50ZXJmYWNlcy4gV3JpdGluZyB0byB0aGVzZSBmaWxlcyBpcyBhIGNyaXRpY2FsIHBvaW50IGZvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wuIFRoZSBhZGRlZCBjYXBhYmlsaXR5IGNoZWNrLCBgY2FwYWJsZShDQVBfU1lTX0JPT1QpYCwgYW5kIHRoZSB3YWtldXAgc291cmNlIGNoZWNrIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucywgYmFzaWNhbGx5IGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSBjaGVja3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgKmRlbWFuZHMqIGZ1enppbmcuIFdlIGhhdmUgYW4gb3Bwb3J0dW5pdHkgZm9yIGNvbnRyb2wtcGxhbmUgZnV6emluZyBoZXJlLCB3aGVyZSB1c2VybGFuZCBpbnB1dCBwb3RlbnRpYWxseSBhbHRlcnMga2VybmVsIGJlaGF2aW9yLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGZzL2Z1c2UvZGV2LmNgLiBDaGFuZ2VzIGhlcmUgbW9kaWZ5IGEgZnVuY3Rpb24gbGlrZSBgZnVzZV9nZXRfcmVxYCwgd2hpY2ggSSBrbm93IGlzIGEgY29yZSBGVVNFIGZ1bmN0aW9uIGZvciByZXF1ZXN0IGhhbmRsaW5nLiBJdCBpbnZvbHZlcyBjaGFuZ2luZyBgVEFTS19GUkVFWkFCTEVgIHRvIGBUQVNLX0ZSRUVaQUJMRV9VTlNBRkVgLiBUaGUgc2FtZSB0eXBlIG9mIGNoYW5nZSwgZnJvbSBgVEFTS19GUkVFWkFCTEVgIHRvIGBUQVNLX0ZSRUVaQUJMRV9VTlNBRkVgLCBvY2N1cnMgaW4gYG5ldC9zdW5ycGMvc2NoZWQuY2Agd2l0aGluIGBfX3JwY19leGVjdXRlYC4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0byB0YXNrIHN0YXRlcyBhcmUgYWxzbyB3b3J0aCBhIGxvb2suCgpGcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGFzIGEgd2hvbGUgKmFic29sdXRlbHkqIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUga2VybmVsIGxvZ2ljLCBlbmNvbXBhc3NpbmcgcG93ZXIgbWFuYWdlbWVudCwgRlVTRSwgYW5kIFNVTlJQQy4gVGhlc2UgYXJlIGFyZWFzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4KCkZpbmFsbHksIHJlZ2FyZGluZyBga2VybmVsL3Bvd2VyL21haW4uY2AsIEkmIzM5O2xsIHByb2JhYmx5IHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZyBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGlzIGNvZGUuIE15IGd1ZXNzIGlzIGl0JiMzOTtzIGNvbXBpbGVkIHdpdGggYENPTkZJR19QTWAgb3IgYENPTkZJR19QTV9TTEVFUGAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGluIHRoZSBga2VybmVsL3Bvd2VyL01ha2VmaWxlYC4gVGhpcyB3aWxsIGhlbHAgbWUgc2V0IHVwIGEgY29ycmVjdCBmdXp6aW5nIGVudmlyb25tZW50IGZvciB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21haW4ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvTWFrZWZpbGU9MTE9b2JqLXlcdFx0XHRcdCYjNDM7PSBxb3Mub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QTSlcdFx0JiM0Mzs9IG1haW4ub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19WVF9DT05TT0xFX1NMRUVQKVx0JiM0Mzs9IGNvbnNvbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguCgoqKlBNIENvbnRleHR1YWxpemF0aW9uIGFuZCBGVVNFIERlcGVuZGVuY3kgQW5hbHlzaXMqKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgYENPTkZJR19QTWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGxldmVyYWdpbmcgYCNpZmRlZiBDT05GSUdfUE1fU0xFRVBgLCBzbyBwb3dlciBtYW5hZ2VtZW50IGlzIGRlZmluaXRlbHkgYSBrZXkgZmFjdG9yIGluIHdoYXRldmVyIHRoaXMgaXMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzIGludm9sdmVkLCBJIHNob3VsZCBjaGVjayBgZnMvZnVzZS9kZXYuY2AuIEkgYmVsaWV2ZSBgZnVzZV9nZXRfcmVxYCByZXNpZGVzIHRoZXJlLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRvIHN0YXJ0LgoKQWxzbyBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB3ZSBoYXZlIGBDT05GSUdfRlVTRV9GU2AgZW5hYmxlZCBpbiB0aGlzIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfZ2V0X3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kZXYuYz01NT1zdGF0aWMgdm9pZCBmdXNlX3JlcXVlc3RfZnJlZShzdHJ1Y3QgZnVzZV9yZXEgKnJlcSlcbi0tXG5mcy9mdXNlL2Rldi5jLTYwLVxuZnMvZnVzZS9kZXYuYzo2MTpzdGF0aWMgdm9pZCBfX2Z1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpXG5mcy9mdXNlL2Rldi5jLTYyLXtcbi0tXG5mcy9mdXNlL2Rldi5jPTEwNj1zdGF0aWMgdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTA3LVxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbmZzL2Z1c2UvZGV2LmMtMTA5LXtcbi0tXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxuLS1cbmZzL2Z1c2UvZGV2LmMtNzUzLVx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXG5mcy9mdXNlL2Rldi5jOjc1NDpcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy03NTUtXHRmdXNlX3NlbmRfb25lKGZpcSwgcmVxKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcbi0tXG5mcy9mdXNlL2Rldi5jLTgyMS1cdH0gZWxzZSB7XG5mcy9mdXNlL2Rldi5jOjgyMjpcdFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy04MjMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jLTgyNi1cbmZzL2Z1c2UvZGV2LmM6ODI3Olx0LyogTmVlZHMgdG8gYmUgZG9uZSBhZnRlciBmdXNlX2dldF9yZXEoKSBzbyB0aGF0IGZjaC1cdTAwM2VtaW5vciBpcyB2YWxpZCAqL1xuZnMvZnVzZS9kZXYuYy04MjgtXHRmdXNlX2FkanVzdF9jb21wYXQoZmNoLCBhcmdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXG4tLVxuZnMvZnVzZS9kZXYuYy05MDEtXHR9IGVsc2Uge1xuZnMvZnVzZS9kZXYuYzo5MDI6XHRcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xuZnMvZnVzZS9kZXYuYy05MDMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jPTkxNz1pbnQgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5KHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncywgdTY0IHVuaXF1ZSlcbi0tXG5mcy9mdXNlL2Rldi5jLTkyMS1cbmZzL2Z1c2UvZGV2LmM6OTIyOlx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy05MjMtXHRpZiAoSVNfRVJSKHJlcSkpXG4tLVxuZnMvZnVzZS9kZXYuYz0xNTE2PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3JlYWQoc3RydWN0IGZ1c2VfZGV2ICpmdWQsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2Z1c2UvZGV2LmMtMTYyNi1cdGxpc3RfbW92ZV90YWlsKFx1MDAyNnJlcS1cdTAwM2VsaXN0LCBcdTAwMjZmcHEtXHUwMDNlcHJvY2Vzc2luZ1toYXNoXSk7XG5mcy9mdXNlL2Rldi5jOjE2Mjc6XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTYyOC1cdHNldF9iaXQoRlJfU0VOVCwgXHUwMDI2cmVxLVx1MDAzZWZsYWdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTE4NjA9c3RhdGljIHNzaXplX3QgZnVzZV9kZXZfZG9fd3JpdGUoc3RydWN0IGZ1c2VfZGV2ICpmdWQsXG4tLVxuZnMvZnVzZS9kZXYuYy0xOTE3LVx0aWYgKG9oLnVuaXF1ZSBcdTAwMjYgRlVTRV9JTlRfUkVRX0JJVCkge1xuZnMvZnVzZS9kZXYuYzoxOTE4Olx0XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnBxLVx1MDAzZWxvY2spO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXG4tLVxuZnMvZnVzZS9kZXYuYy0yMTYxLVx0XHRcdFx0XHRzZXRfYml0KEZSX1BSSVZBVEUsIFx1MDAyNnJlcS1cdTAwM2VmbGFncyk7XG5mcy9mdXNlL2Rldi5jOjIxNjI6XHRcdFx0XHRcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy0yMTYzLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cmVxLVx1MDAzZWxpc3QsIFx1MDAyNnRvX2VuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBmdXNlX2dldF9yZXFgIGhlcmUuIFJpZ2h0LCB0aGF0JiMzOTtzIHVzZWQgaW4gYGZ1c2VfY2hhbl9zZW5kYCwgYGZ1c2VfY2hhbl9zZW5kX2JnYCwgYW5kIGBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlgLiBPa2F5LCB0aG9zZSBhcmUgYWxsICpjb3JlKiBGVVNFIGZ1bmN0aW9ucy4gU28sIGBmdXNlX2dldF9yZXFgIGlzIHByZXR0eSBmdW5kYW1lbnRhbC4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGEgYml0LiBXaGVyZSBlbHNlIGRvZXMgdGhpcyBwYXR0ZXJuIGVtZXJnZT8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvc3VucnBjL3NjaGVkLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIG92ZXIgdGhlcmUuIEFoLCB5ZXMsIGBfX3JwY19leGVjdXRlYCwgdGhhdCYjMzk7cyBhIGtleSBTVU5SUEMgZnVuY3Rpb24uIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcnBjX2V4ZWN1dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3NjaGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zY2hlZC5jPTM0OD1FWFBPUlRfU1lNQk9MX0dQTChycGNfd2FpdF9mb3JfY29tcGxldGlvbl90YXNrKTtcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXG5uZXQvc3VucnBjL3NjaGVkLmM6MzU3OiAqIHdoaWNoIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBfX3JwY19leGVjdXRlKCkgZG9lc24mIzM5O3QgbG9vcCAoZHVlIHRvIHRoZVxubmV0L3N1bnJwYy9zY2hlZC5jLTM1OC0gKiBsb2NrbGVzcyBSUENfSVNfUVVFVUVEKCkgdGVzdCkgYmVmb3JlIHdlJiMzOTt2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz04OTc9c3RhdGljIGJvb2wgeHBydF9uZWVkc19tZW1hbGxvYyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBycGNfdGFzayAqdGspXG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jLTkwOC0gKi9cbm5ldC9zdW5ycGMvc2NoZWQuYzo5MDk6c3RhdGljIHZvaWQgX19ycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAxNT12b2lkIHJwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAyMi1cdFx0dW5zaWduZWQgaW50IHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xubmV0L3N1bnJwYy9zY2hlZC5jOjEwMjM6XHRcdF9fcnBjX2V4ZWN1dGUodGFzayk7XG5uZXQvc3VucnBjL3NjaGVkLmMtMTAyNC1cdFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTEwMjg9c3RhdGljIHZvaWQgcnBjX2FzeW5jX3NjaGVkdWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMS1cbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDMyOlx0X19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDMzLVx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgZm9yIHNvbWVvbmUgd2hvIGtub3dzIHRoZWlyIHdheSBhcm91bmQga2VybmVsIGludGVybmFsczoKCioqUlBDIEV4ZWN1dGlvbiBhbmQgUG93ZXIgTWFuYWdlbWVudDogQSBRdWljayBTY2FuKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgUmVtb3RlIFByb2NlZHVyZSBDYWxscyAoUlBDKSBpbnRlcmFjdCB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBDT05GSUdfU1VOUlBDYCBjb25maWcgb3B0aW9uLiBJIHNlZSB0aGF0IGJvdGggYHJwY19leGVjdXRlYCBhbmQgYHJwY19hc3luY19zY2hlZHVsZWAgdWx0aW1hdGVseSBmdW5uZWwgdGhlaXIgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGBfX3JwY19leGVjdXRlYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgZXhlY3V0aW9uIHBhdGggd2Ugc2hvdWxkIGtlZXAgaW4gbWluZC4KClRoZW4gdGhlIHRob3VnaHQgdmVlcnMgdG93YXJkcyBga2VybmVsL3Bvd2VyL21haW4uY2AuIE15IHNwaWRleSBzZW5zZXMgYXJlIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJhY3Rpb24sIGFuZCB0aGUgbWVudGlvbiBvZiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBhcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgcmFpc2VzIGEgcmVkIGZsYWcuIFRoZXNlIGFyZSBjbGFzc2ljIGhvb2tzIGludG8gdGhlIHN5c3RlbSYjMzk7cyBwb3dlciBzdGF0ZSwgYW5kIGFueSBSUEMgYWN0aXZpdHkgdGhhdCBtaWdodCBiZSBzZW5zaXRpdmUgdG8gc3VzcGVuZC9yZXN1bWUgc2hvdWxkIGJlIGNhcmVmdWxseSBzY3J1dGluaXplZCBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUEMgb3BlcmF0aW9ucyBiZWhhdmUgZHVyaW5nIHN5c3RlbSBzbGVlcCBvciByZXN1bWUsIGFuZCB3aGV0aGVyIGFueSBpbXByb3BlciBoYW5kbGluZyBvZiBSUEMgY2FsbHMgY2FuIGxlYWQgdG8gaXNzdWVzIHdpdGggYXV0b3NsZWVwIG9yIG90aGVyIHBvd2VyLXNhdmluZyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgUlBDIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBzeXN0ZW0gZnJvbSBlbnRlcmluZyBhIGxvdy1wb3dlciBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9tYWluLmM9NzczPXN0YXRpYyBzdXNwZW5kX3N0YXRlX3QgZGVjb2RlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4tLVxua2VybmVsL3Bvd2VyL21haW4uYy03OTktXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjgwMDpzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxua2VybmVsL3Bvd2VyL21haW4uYy04MDEtXHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG93ZXIgTWFuYWdlbWVudCBhbmQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHN0YXRlX3N0b3JlYCBtYW5hZ2VzIHRoZSBgL3N5cy9wb3dlci9zdGF0ZWAgc3lzZnMgZW50cnkgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGhhbmRsZXMgYC9zeXMvcG93ZXIvYXV0b3NsZWVwYC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgcGllY2UuIE15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGdvZXMgdG8gdGhlc2UgdHdvIGZ1bmN0aW9uczogYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYGZ1c2VfZ2V0X3JlcWAgYW5kIGBfX3JwY19leGVjdXRlYCBpbiB0aGUgYmFjayBvZiBteSBtaW5kLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBQTV9TTEVFUGAgaXMgdGhlIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGJvdGggYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIEl0JiMzOTtzIGEga2V5IGRldGFpbCB0byBjb25maXJtLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgaW4gcmVsYXRpb24gdG8gYW55IHBvdGVudGlhbCBpbnRlcmRlcGVuZGVuY2llcyB3aXRoIGBGVVNFX0ZTYCBhbmQgYFNVTlJQQ2AsIGp1c3QgaW4gY2FzZS4gVGhleSBmZWVsIGxlc3MgZGlyZWN0bHkgcmVsZXZhbnQsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIGVsaW1pbmF0ZSBleHRyYW5lb3VzIHBvc3NpYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mz1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuLS1cbmtlcm5lbC9wb3dlci9tYWluLmMtNzk5LVxua2VybmVsL3Bvd2VyL21haW4uYzo4MDA6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbmtlcm5lbC9wb3dlci9tYWluLmMtODAxLVx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFBvd2VyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBgc3RhdGVfc3RvcmVgIGlzIGRlZmluZWQuIFRoZSBoaW50IHNheXMgaXQmIzM5O3MgaW4gYGtlcm5lbC9wb3dlci9tYWluLmNgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGdpdmVuIHRoYXQgYHN0YXRlX3N0b3JlYCBwcm9iYWJseSBkZWFscyB3aXRoIHN5c3RlbSBwb3dlciBzdGF0ZXMsIHNvIGl0JiMzOTtzIGxpa2VseSBuZXN0bGVkIHdpdGhpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIExldCYjMzk7cyBjb25maXJtIHRoYXQgYnkgZGlyZWN0bHkgZXhhbWluaW5nIGBrZXJuZWwvcG93ZXIvbWFpbi5jYCwgYW5kIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBhcm91bmQgdGhhdCBzcGVjaWZpYyBpZGVudGlmaWVyIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWNsYXJlZCBhbmQgd2hhdCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRpZmZlcmVudCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlcyBvZiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIGZpbGUgbGlrZWx5IGNvbnRhaW5zIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgc3lzdGVtJiMzOTtzIHBvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIDgwMTpcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4gODAyOlx0e1xuIDgwMzpcdFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlO1xuIDgwNDpcdFx0aW50IGVycm9yO1xuIDgwNTpcdFxuIDgwNjpcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbiA4MDc6XHRcdGludCBpZHg7XG4gODA4Olx0XHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4gODA5Olx0I2VuZGlmXG4gODEwOlx0XG4gODExOlx0XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSlcbiA4MTI6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiA4MTM6XHRcbiA4MTQ6XHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4gODE1Olx0XHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcbiA4MTY6XHRcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuIDgxNzpcdFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbiA4MTg6XHRcdGlmICghd3MpXG4gODE5Olx0XHRcdHJldHVybiAtRVBFUk07XG4gODIwOlx0I2VuZGlmXG4gODIxOlx0XG4gODIyOlx0XHRlcnJvciA9IHBtX2F1dG9zbGVlcF9sb2NrKCk7XG4gODIzOlx0XHRpZiAoZXJyb3IpXG4gODI0Olx0XHRcdHJldHVybiBlcnJvcjtcbiA4MjU6XHRcbiA4MjY6XHRcdGlmIChwbV9hdXRvc2xlZXBfc3RhdGUoKSBcdTAwM2UgUE1fU1VTUEVORF9PTikge1xuIDgyNzpcdFx0XHRlcnJvciA9IC1FQlVTWTtcbiA4Mjg6XHRcdFx0Z290byBvdXQ7XG4gODI5Olx0XHR9XG4gODMwOlx0XG4gODMxOlx0XHRzdGF0ZSA9IGRlY29kZV9zdGF0ZShidWYsIG4pO1xuIDgzMjpcdFx0aWYgKHN0YXRlIFx1MDAzYyBQTV9TVVNQRU5EX01BWCkge1xuIDgzMzpcdFx0XHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pXG4gODM0Olx0XHRcdFx0c3RhdGUgPSBtZW1fc2xlZXBfY3VycmVudDtcbiA4MzU6XHRcbiA4MzY6XHRcdFx0ZXJyb3IgPSBwbV9zdXNwZW5kKHN0YXRlKTtcbiA4Mzc6XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NQVgpIHtcbiA4Mzg6XHRcdFx0ZXJyb3IgPSBoaWJlcm5hdGUoKTtcbiA4Mzk6XHRcdH0gZWxzZSB7XG4gODQwOlx0XHRcdGVycm9yID0gLUVJTlZBTDtcbiA4NDE6XHRcdH1cbiA4NDI6XHRcbiA4NDM6XHQgb3V0OlxuIDg0NDpcdFx0cG1fYXV0b3NsZWVwX3VubG9jaygpO1xuIDg0NTpcdFx0cmV0dXJuIGVycm9yID8gZXJyb3IgOiBuO1xuIDg0NjpcdH1cbiA4NDc6XHRcbiA4NDg6XHRwb3dlcl9hdHRyKHN0YXRlKTtcbiA4NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG93ZXIgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHJlbGF0aW9uc2hpcCBoZXJlLiBJdCBzZWVtcyBgc3RhdGVfc3RvcmVgIGlzICp0aGUqIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIG9yIHNldHRpbmcgdGhlIHN0YXRlIGF0dHJpYnV0ZSwgcHJlc3VtYWJseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBwb3dlcl9hdHRyKHN0YXRlKWAuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBDT05GSUdfUE1fU0xFRVBgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhlcmUmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGJlIHByZWNpc2U6IGlzIGBzdGF0ZV9zdG9yZWAgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19QTV9TTEVFUGAgaXMgYWN0aXZlLCBvciBpcyBpdCBhIGJpdCBtb3JlIGdlbmVyYWwsIHRpZWQgdG8gdGhlIGJyb2FkZXIgYENPTkZJR19QTWAgdW1icmVsbGEsIG9yIHBlcmhhcHMgYm90aD8gSXQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBga2VybmVsL3Bvd2VyL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgd2lsbCBkZWZpbml0aXZlbHkgdGVsbCBtZSB3aGVuIGFuZCBob3cgYHN0YXRlX3N0b3JlYCBnZXRzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNsZWFyIGluZGljYXRpb25zIG9mIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRyaWdnZXIgaXRzIGNvbXBpbGF0aW9uLiBUaGF0IHNob3VsZCByZXNvbHZlIHRoZSBhbWJpZ3VpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21haW4ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvTWFrZWZpbGU9MTE9b2JqLXlcdFx0XHRcdCYjNDM7PSBxb3Mub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QTSlcdFx0JiM0Mzs9IG1haW4ub1xua2VybmVsL3Bvd2VyL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19WVF9DT05TT0xFX1NMRUVQKVx0JiM0Mzs9IGNvbnNvbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKlBNIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfUE1gIGlzIGVuYWJsZWQuIFdpdGhvdXQgdGhhdCwgdGhlcmUmIzM5O3Mgbm8gcG93ZXIgbWFuYWdlbWVudCwgYW5kIHRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBPbmNlIHRoYXQmIzM5O3MgdmVyaWZpZWQsIHRoZSBuZXh0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBpcyB0aGUgYGF1dG9zbGVlcF9zdG9yZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IGNvbnRyb2xzIHRoZSBhdXRvbWF0aWMgc2xlZXAgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgYW5kIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55dGhpbmcgdGhlcmUgdGhhdCBtaWdodCBjb25mbGljdCBvciBpbnRlcmFjdCB3aXRoIG15IHNwZWNpZmljIG5lZWRzIGluIHRoZSBjdXJyZW50IHByb2plY3Qgb3IgYW5hbHlzaXMuIFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gbWFraW5nIHRoaXMgYWxsIHdvcmsgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL21haW4uYz05MjE9c3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxua2VybmVsL3Bvd2VyL21haW4uYy05NDEtXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjk0MjpzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTk0My1cdFx0XHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaGVyZSBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBgYXV0b3NsZWVwX3N0b3JlYCBpcyB3cmFwcGVkIHdpdGhpbiBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIEl0JiMzOTtzIGNydWNpYWwsIGVzcGVjaWFsbHkgaW4gdGhpcyBjb2RlYmFzZSwgdG8gdW5kZXJzdGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gQXJlIHdlIGRlYWxpbmcgd2l0aCBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCBmZWF0dXJlIGZsYWdzLCBvciBwZXJoYXBzIGRlYnVnZ2luZyBkZWZpbmVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0cyBhdmFpbGFiaWxpdHk/IEkgbmVlZCB0byBrbm93IGlmIHRoaXMgdmFyaWFibGUsIG9yIG1vcmUgYWNjdXJhdGVseSwgdGhlIGNvZGUgdGhhdCB1c2VzIHRoaXMgdmFyaWFibGUsIGhhcyBhbnkgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGJlZm9yZSBJIGNhbiBwcm9jZWVkLiBEZXBlbmRpbmcgb24gdGhlIGFuc3dlciwgaXQgd291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIG15IHBlcnNwZWN0aXZlIG9uIHRoZSBuZXh0IHN0ZXBzLiBGb3IgaW5zdGFuY2UsIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhIGZlYXR1cmUgZmxhZywgSSYjMzk7ZCB3YW50IHRvIGZpbmQgdGhlIGRlZmluaW5nIG1hY3JvIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTQyOlx0c3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIDk0MzpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gOTQ0Olx0XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXG4gOTQ1Olx0e1xuIDk0NjpcdFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7XG4gOTQ3Olx0XHRpbnQgZXJyb3I7XG4gOTQ4Olx0XG4gOTQ5Olx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxuIDk1MDpcdFx0aW50IGlkeDtcbiA5NTE6XHRcdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbiA5NTI6XHQjZW5kaWZcbiA5NTM6XHRcbiA5NTQ6XHRcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxuIDk1NTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDk1NjpcdFxuIDk1NzpcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbiA5NTg6XHRcdGlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX09OKSB7XG4gOTU5Olx0XHRcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuIDk2MDpcdFx0XHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcbiA5NjE6XHRcdFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbiA5NjI6XHRcdFx0aWYgKCF3cylcbiA5NjM6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDk2NDpcdFx0fVxuIDk2NTpcdCNlbmRpZlxuIDk2NjpcdFxuIDk2NzpcdFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT05cbiA5Njg6XHRcdCAgICBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCYjMzQ7b2ZmXCYjMzQ7KSBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCYjMzQ7b2ZmXFxuXCYjMzQ7KSlcbiA5Njk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTcwOlx0XG4gOTcxOlx0XHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pXG4gOTcyOlx0XHRcdHN0YXRlID0gbWVtX3NsZWVwX2N1cnJlbnQ7XG4gOTczOlx0XG4gOTc0Olx0XHRlcnJvciA9IHBtX2F1dG9zbGVlcF9zZXRfc3RhdGUoc3RhdGUpO1xuIDk3NTpcdFx0cmV0dXJuIGVycm9yID8gZXJyb3IgOiBuO1xuIDk3NjpcdH1cbiA5Nzc6XHRcbiA5Nzg6XHRwb3dlcl9hdHRyKGF1dG9zbGVlcCk7XG4gOTc5Olx0I2VuZGlmIC8qIENPTkZJR19QTV9BVVRPU0xFRVAgKi9cbiA5ODA6XHRcbiA5ODE6XHQjaWZkZWYgQ09ORklHX1BNX1dBS0VMT0NLU1xuIDk4MjpcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIDk4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiA5ODQ6XHRcdFx0XHQgICAgICBjaGFyICpidWYpXG4gOTg1Olx0e1xuIDk4NjpcdFx0cmV0dXJuIHBtX3Nob3dfd2FrZWxvY2tzKGJ1ZiwgdHJ1ZSk7XG4gOTg3Olx0fVxuIDk4ODpcdFxuIDk4OTpcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbiA5OTA6XHRcdFx0XHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIDk5MTpcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTbGVlcCBhbmQgRmlsZXN5c3RlbSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGF1dG9zbGVlcF9zdG9yZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYCNpZmRlZiBDT05GSUdfUE1fQVVUT1NMRUVQYC4gVGhhdCB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgYW5kLCBzcGVjaWZpY2FsbHksIGF1dG9tYXRpYyBzbGVlcCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoaXMgYWxzbyBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSBnbGFuY2UgYXQgdGhlIHJlbGF0ZWQgY29uZmlnczogYFBNX1NMRUVQYCwgYFBNX0FVVE9TTEVFUGAsIGBGVVNFX0ZTYCwgYW5kIGBTVU5SUENgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBhcmUgY29uZmlndXJlZCB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIHRoaXMgZml0cy4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IHN5bWJvbHMgdG8gZm9sbG93OiBgc3RhdGVfc3RvcmVgLCBgYXV0b3NsZWVwX3N0b3JlYCAob2J2aW91c2x5KSwgYGZ1c2VfZ2V0X3JlcWAsIGFuZCBgX19ycGNfZXhlY3V0ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZWlyIGNvbm5lY3Rpb25zLiBIbW0sIGBmdXNlX2dldF9yZXFgLi4uIHRoYXQgcmluZ3MgYSBiZWxsIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgaW50byBgZnMvZnVzZS9kZXYuY2AuIFN0YXRpYyBmdW5jdGlvbnMgb2Z0ZW4gcG9pbnQgdG8gYmVpbmcgaW50ZXJuYWwgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfZ2V0X3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kZXYuYz01NT1zdGF0aWMgdm9pZCBmdXNlX3JlcXVlc3RfZnJlZShzdHJ1Y3QgZnVzZV9yZXEgKnJlcSlcbi0tXG5mcy9mdXNlL2Rldi5jLTYwLVxuZnMvZnVzZS9kZXYuYzo2MTpzdGF0aWMgdm9pZCBfX2Z1c2VfZ2V0X3JlcXVlc3Qoc3RydWN0IGZ1c2VfcmVxICpyZXEpXG5mcy9mdXNlL2Rldi5jLTYyLXtcbi0tXG5mcy9mdXNlL2Rldi5jPTEwNj1zdGF0aWMgdm9pZCBmdXNlX3B1dF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTA3LVxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbmZzL2Z1c2UvZGV2LmMtMTA5LXtcbi0tXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxuLS1cbmZzL2Z1c2UvZGV2LmMtNzUzLVx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXG5mcy9mdXNlL2Rldi5jOjc1NDpcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy03NTUtXHRmdXNlX3NlbmRfb25lKGZpcSwgcmVxKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcbi0tXG5mcy9mdXNlL2Rldi5jLTgyMS1cdH0gZWxzZSB7XG5mcy9mdXNlL2Rldi5jOjgyMjpcdFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy04MjMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jLTgyNi1cbmZzL2Z1c2UvZGV2LmM6ODI3Olx0LyogTmVlZHMgdG8gYmUgZG9uZSBhZnRlciBmdXNlX2dldF9yZXEoKSBzbyB0aGF0IGZjaC1cdTAwM2VtaW5vciBpcyB2YWxpZCAqL1xuZnMvZnVzZS9kZXYuYy04MjgtXHRmdXNlX2FkanVzdF9jb21wYXQoZmNoLCBhcmdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXG4tLVxuZnMvZnVzZS9kZXYuYy05MDEtXHR9IGVsc2Uge1xuZnMvZnVzZS9kZXYuYzo5MDI6XHRcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xuZnMvZnVzZS9kZXYuYy05MDMtXHRcdGlmIChJU19FUlIocmVxKSlcbi0tXG5mcy9mdXNlL2Rldi5jPTkxNz1pbnQgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5KHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncywgdTY0IHVuaXF1ZSlcbi0tXG5mcy9mdXNlL2Rldi5jLTkyMS1cbmZzL2Z1c2UvZGV2LmM6OTIyOlx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xuZnMvZnVzZS9kZXYuYy05MjMtXHRpZiAoSVNfRVJSKHJlcSkpXG4tLVxuZnMvZnVzZS9kZXYuYz0xNTE2PXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3JlYWQoc3RydWN0IGZ1c2VfZGV2ICpmdWQsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2Z1c2UvZGV2LmMtMTYyNi1cdGxpc3RfbW92ZV90YWlsKFx1MDAyNnJlcS1cdTAwM2VsaXN0LCBcdTAwMjZmcHEtXHUwMDNlcHJvY2Vzc2luZ1toYXNoXSk7XG5mcy9mdXNlL2Rldi5jOjE2Mjc6XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTYyOC1cdHNldF9iaXQoRlJfU0VOVCwgXHUwMDI2cmVxLVx1MDAzZWZsYWdzKTtcbi0tXG5mcy9mdXNlL2Rldi5jPTE4NjA9c3RhdGljIHNzaXplX3QgZnVzZV9kZXZfZG9fd3JpdGUoc3RydWN0IGZ1c2VfZGV2ICpmdWQsXG4tLVxuZnMvZnVzZS9kZXYuYy0xOTE3LVx0aWYgKG9oLnVuaXF1ZSBcdTAwMjYgRlVTRV9JTlRfUkVRX0JJVCkge1xuZnMvZnVzZS9kZXYuYzoxOTE4Olx0XHRfX2Z1c2VfZ2V0X3JlcXVlc3QocmVxKTtcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnBxLVx1MDAzZWxvY2spO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXG4tLVxuZnMvZnVzZS9kZXYuYy0yMTYxLVx0XHRcdFx0XHRzZXRfYml0KEZSX1BSSVZBVEUsIFx1MDAyNnJlcS1cdTAwM2VmbGFncyk7XG5mcy9mdXNlL2Rldi5jOjIxNjI6XHRcdFx0XHRcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xuZnMvZnVzZS9kZXYuYy0yMTYzLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cmVxLVx1MDAzZWxpc3QsIFx1MDAyNnRvX2VuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmxlY3Rpbmcgb24gQVBJIERlc2lnbjogU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGVtcGhhc2l6ZXMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGFkZHJlc3MgdGhlIHVzZSBvZiBgZnVzZV9nZXRfcmVxYCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGdvZXMgYWdhaW5zdCB0aGUgZ3VpZGVsaW5lLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmluZCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50LiBUaGlua2luZyBhYm91dCBpdCwgdGhlIGBmdXNlX2NoYW5fc2VuZGAsIGBmdXNlX2NoYW5fc2VuZF9iZ2AsIGFuZCBgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5YCBmdW5jdGlvbnMgY29tZSB0byBtaW5kLiBUaGVzZSBzZWVtIGxpa2UgbW9yZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBOb3csIGEgY3J1Y2lhbCBjaGVjazogSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZnVzZV9jaGFuX3NlbmRgIGlzbiYjMzk7dCBzdGF0aWMuIEl0IHdvdWxkIGJlIGNvdW50ZXJwcm9kdWN0aXZlIHRvIHN3YXAgYSBzdGF0aWMgZnVuY3Rpb24gZm9yIGFub3RoZXIgc3RhdGljIG9uZSEgVG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBhbmQgZ2V0IGEgZ3Jhc3Agb2Ygb3RoZXIgd2VsbCBpbXBsZW1lbnRlZCBBUElzLCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbmV0L3N1bnJwYy9zY2hlZC5jYCBhbmQgc3BlY2lmaWNhbGx5IGF0IGBfX3JwY19leGVjdXRlYCBhcyBJIGtub3cgdGhhdCBpdCBoYW5kbGVzIHRoZXNlIHR5cGVzIG9mIHNpdHVhdGlvbnMgYW5kIHNob3VsZCBoYXZlIGEgZ29vZCBwYXR0ZXJuIHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ycGNfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc2NoZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3NjaGVkLmM9MzQ4PUVYUE9SVF9TWU1CT0xfR1BMKHJwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2spO1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTYtICogTm90ZSB0aGUgb3JkZXJpbmcgb2YgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKCkgYW5kIHJwY19jbGVhcl9xdWV1ZWQoKSxcbm5ldC9zdW5ycGMvc2NoZWQuYzozNTc6ICogd2hpY2ggaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IF9fcnBjX2V4ZWN1dGUoKSBkb2VzbiYjMzk7dCBsb29wIChkdWUgdG8gdGhlXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU4LSAqIGxvY2tsZXNzIFJQQ19JU19RVUVVRUQoKSB0ZXN0KSBiZWZvcmUgd2UmIzM5O3ZlIGhhZCBhIGNoYW5jZSB0byB0ZXN0XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtOTA4LSAqL1xubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbm5ldC9zdW5ycGMvc2NoZWQuYy05MTAte1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDE1PXZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDIyLVx0XHR1bnNpZ25lZCBpbnQgcGZsYWdzID0gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG5uZXQvc3VucnBjL3NjaGVkLmM6MTAyMzpcdFx0X19ycGNfZXhlY3V0ZSh0YXNrKTtcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDI0LVx0XHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAyOD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfc2NoZWR1bGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDMxLVxubmV0L3N1bnJwYy9zY2hlZC5jOjEwMzI6XHRfX3JwY19leGVjdXRlKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd29yaykpO1xubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzMtXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQVBJIEVudHJ5cG9pbnRzIGZvciBQb3dlciBNYW5hZ2VtZW50KioKCk9rYXksIGhlcmUmIzM5O3MgbXkgcGxhbiBmb3IgZnV6emluZyB0aGVzZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBpbml0aWFsIHBvaW50IGFib3V0IGBfX3JwY19leGVjdXRlYCBiZWluZyBzdGF0aWMuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGdvIHdpdGggYHJwY19leGVjdXRlYCBpbnN0ZWFkOyB0aGF0JiMzOTtzIHRoZSBub24tc3RhdGljIHZlcnNpb24uIE1vdmluZyBvbiwgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIFRoZXkmIzM5O3JlIHN0YXRpYywgd2hpY2ggaW5pdGlhbGx5IGdhdmUgbWUgcGF1c2UuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgd2hpbGUgdGhleSYjMzk7cmUgc3RhdGljLCB0aGV5JiMzOTtyZSBub3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBkaXJlY3QgaGFuZGxlcnMgZm9yIHdyaXRlcyB0byB0aGUgc3lzZnMgZmlsZXMuIFRoZXkgYXJlIHRoZSBBUEkgZW50cnlwb2ludHMgZm9yIHRoZXNlIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMuCgpUaGUga2V5IGlzIHRoYXQgU3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdmlhIFZGUywgc28geWVzLCB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLiBTbywgbGlzdGluZyBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCBoZXJlLiBUaG91Z2gsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGNvdWxkIGBwbV9hdXRvc2xlZXBfc2V0X3N0YXRlYCBvciBgcG1fc3VzcGVuZGAgYmUgYmV0dGVyPyBVbHRpbWF0ZWx5LCB0aGUgZnV6emluZyBuZWVkcyB0byB0YXJnZXQgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcyB3aXRoaW4gYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAg4oCTIHRoZSBjYXBhYmlsaXR5IGFuZCB3YWtldXAgc291cmNlIGNoZWNrcy4gU28sIHRoZSBvcmlnaW5hbCBmdW5jdGlvbnMgYXJlIGluZGVlZCB0aGUgcmlnaHQgdGFyZ2V0cy4KCkkgZG91YmxlLWNoZWNrZWQgdG8gY29uZmlybSB0aGF0IGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGFyZSBzdGF0aWMuIFllcCwgdGhleSBhcmUuIEJ1dCwgYWdhaW4sIHRoZXkgYXJlICp0aGUqIGRpcmVjdCBoYW5kbGVycyBmb3IgdGhlIHN5c2ZzIHdyaXRlcywgdGhlIEFQSS4gVGhlIHByb21wdCBzYWlkIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBpcyBmaW5lLiBJJiMzOTttIGdvaW5nIHRvIGxpc3QgdGhlbS4KCkkmIzM5O20gYWxzbyBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBQTV9TTEVFUGAsIGBQTV9BVVRPU0xFRVBgLCBgRlVTRV9GU2AsIGFuZCBgU1VOUlBDYCDigJMganVzdCB0byBlbnN1cmUgdGhlIGZ1enppbmcgaXMgY29tcHJlaGVuc2l2ZSBhbmQgY29uc2lkZXJzIHRoZSByZWxldmFudCBvcHRpb25zLgoKRmluYWxseSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHJldmlzaXQgYGtlcm5lbC9wb3dlci9tYWluLmNgIHRvIGNvbmZpcm0gdGhlIGxvY2F0aW9uIG9mIGBzdGF0ZV9zdG9yZWAgYW5kIGVuc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL21haW4uYz03NzM9c3RhdGljIHN1c3BlbmRfc3RhdGVfdCBkZWNvZGVfc3RhdGUoY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgbilcbi0tXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTc5OS1cbmtlcm5lbC9wb3dlci9tYWluLmM6ODAwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTgwMS1cdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgc3RhdGVfc3RvcmVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgc3RhdGVfc3RvcmVgIGlzIGluZGVlZCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCBpdCYjMzk7cyBnb3QgaW1wbGljYXRpb25zIGZvciBob3cgdGhpcyBkYXRhIGlzIG1hbmFnZWQgYW5kIGFjY2Vzc2VkIHdpdGhpbiB0aGUgRlVTRSBpbXBsZW1lbnRhdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2VzIG9mIHRoaXMsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBhdCBob3cgZGF0YSBmbG93cyBpbiBhbmQgb3V0IG9mIHRoZSBGVVNFIGtlcm5lbCBkcml2ZXIuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGZ1c2VfY2hhbl9zZW5kYCBhbmQgYGZ1c2VfY2hhbl9zZW5kX2JnYCBkZWZpbmVkIGluIGBmcy9mdXNlL2Rldi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBzdGF0ZV9zdG9yZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGRhdGEgY29ycnVwdGlvbiwgZ2l2ZW4gYHN0YXRlX3N0b3JlYCYjMzk7cyBzdGF0aWMgc2NvcGUuIFRoaXMgZXhwbG9yYXRpb24gd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1c2VfY2hhbl9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mdXNlL2Rldi5jPTc5NT1zdGF0aWMgdm9pZCBmdXNlX2FyZ3NfdG9fcmVxKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzKVxuLS1cbmZzL2Z1c2UvZGV2LmMtODA4LVxuZnMvZnVzZS9kZXYuYzo4MDk6c3NpemVfdCBmdXNlX2NoYW5fc2VuZChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MpXG5mcy9mdXNlL2Rldi5jLTgxMC17XG4tLVxuZnMvZnVzZS9kZXYuYz04NjE9c3RhdGljIGludCBmdXNlX3JlcXVlc3RfcXVldWVfYmFja2dyb3VuZChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSlcbi0tXG5mcy9mdXNlL2Rldi5jLTg5MS1cbmZzL2Z1c2UvZGV2LmM6ODkyOmludCBmdXNlX2NoYW5fc2VuZF9iZyhzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MsIGdmcF90IGdmcF9mbGFncylcbmZzL2Z1c2UvZGV2LmMtODkzLXtcbi0tXG5mcy9mdXNlL2Rldi5jLTkxNi1cbmZzL2Z1c2UvZGV2LmM6OTE3OmludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxuZnMvZnVzZS9kZXYuYy05MTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5vbi1TdGF0aWMgRHluYW1pY3MqKgoKUmlnaHQsIHRoZXNlIG9ic2VydmF0aW9ucyBzdWdnZXN0IGEgZHluYW1pYywgcG90ZW50aWFsbHkgZXZvbHZpbmcgc3RhdGUuIFRoaW5ncyBhcmVuJiMzOTt0IGZpeGVkOyB0aGV5JiMzOTtyZSBpbiBmbHV4LiBUaGUgY2x1ZSBJIG5lZWQgdG8gYmVnaW4gd2l0aCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29yZSwgdGhlIG1vc3QgYmFzaWMgdW5pdCBhbmQgdGhlIGhlYXJ0IG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGhhbmRsZWQsIHNvIGxldCYjMzk7cyBjaGVjayBgcnBjX2V4ZWN1dGVgIHdpdGhpbiBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIFJQQyBjYWxscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJhc2ljIG1lY2hhbmlzbSBhbmQgaG93IHRoZXNlIGR5bmFtaWMgYmVoYXZpb3JzIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNfZXhlY3V0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc2NoZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3NjaGVkLmM9MzQ4PUVYUE9SVF9TWU1CT0xfR1BMKHJwY193YWl0X2Zvcl9jb21wbGV0aW9uX3Rhc2spO1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTYtICogTm90ZSB0aGUgb3JkZXJpbmcgb2YgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKCkgYW5kIHJwY19jbGVhcl9xdWV1ZWQoKSxcbm5ldC9zdW5ycGMvc2NoZWQuYzozNTc6ICogd2hpY2ggaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IF9fcnBjX2V4ZWN1dGUoKSBkb2VzbiYjMzk7dCBsb29wIChkdWUgdG8gdGhlXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU4LSAqIGxvY2tsZXNzIFJQQ19JU19RVUVVRUQoKSB0ZXN0KSBiZWZvcmUgd2UmIzM5O3ZlIGhhZCBhIGNoYW5jZSB0byB0ZXN0XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcbi0tXG5uZXQvc3VucnBjL3NjaGVkLmMtOTA4LSAqL1xubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbm5ldC9zdW5ycGMvc2NoZWQuYy05MTAte1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDE0LSAqL1xubmV0L3N1bnJwYy9zY2hlZC5jOjEwMTU6dm9pZCBycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAxNi17XG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjItXHRcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDIzOlx0XHRfX3JwY19leGVjdXRlKHRhc2spO1xubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjQtXHRcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xuLS1cbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDI4PXN0YXRpYyB2b2lkIHJwY19hc3luY19zY2hlZHVsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzEtXG5uZXQvc3VucnBjL3NjaGVkLmM6MTAzMjpcdF9fcnBjX2V4ZWN1dGUoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBycGNfdGFzaywgdS50a193b3JrKSk7XG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMy1cdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3dlciBNYW5hZ2VtZW50IFJlbGF0ZWQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gYHJwY19leGVjdXRlYCBpc24mIzM5O3Qgc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gdmFyaW91cyBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBjb250ZXh0LiBHaXZlbiB0aGlzLCBteSBhdHRlbnRpb24gaXMgbm93IGRyYXduIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHN0YXRlX3N0b3JlYCwgYGF1dG9zbGVlcF9zdG9yZWAsIGBmdXNlX2NoYW5fc2VuZGAsIGBmdXNlX2NoYW5fc2VuZF9iZ2AsIGBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlgLCBhbmQgb2YgY291cnNlLCBgcnBjX2V4ZWN1dGVgIGl0c2VsZi4KClRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBhcmUgaW5kZWVkIHRoZSBjb3JlIG9mIHRoZSBwb3dlciBtYW5hZ2VtZW50IGNoYW5nZXMuIENvbnNpZGVyaW5nIEkgd2FzIGludm9sdmVkIHdpdGggdGhlc2UgbW9kaWZpY2F0aW9ucywgSSB0aGluayB0aGlzIHNob3VsZCBiZSBhIHNpbXBsZSB2YWxpZGF0aW9uLiBZdXAsIHRob3NlIGFyZSB0aGUgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIHRoYXQgd2VyZSBjaGFuZ2VkLCBzbyB0aGlzIGhlbHBzLgoKTm93LCBsZXQmIzM5O3MgY29ycmVsYXRlIHRoZXNlIHN5bWJvbHMgd2l0aCB0aGVpciBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBQTV9TTEVFUGAsIGBQTV9BVVRPU0xFRVBgLCBgRlVTRV9GU2AsIGFuZCBgU1VOUlBDYC4gV2UgYXJlIGV4cGVjdGluZyB0aGF0IHRoZSBwb3dlciBtYW5hZ2VtZW50IHdpbGwgbmVlZCB0byBjaGFuZ2UgYWNjb3JkaW5nIHRvIGhvdyB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIGJlaGF2ZXMuCgpJJiMzOTtsbCB2ZXJpZnkgdGhhdCBgUE1fU0xFRVBgIGFuZCBgUE1fQVVUT1NMRUVQYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY29kZSBzaG93cyBgI2lmZGVmIENPTkZJR19QTV9TTEVFUGAgY29uZGl0aW9ucyBhcm91bmQgYm90aCBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYC4gYFBNX0FVVE9TTEVFUGAgYWxzbyBjb25kaXRpb25hbGx5IHN1cnJvdW5kcyBgYXV0b3NsZWVwX3N0b3JlYC4gVGhpcyBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgb3ZlcmFsbCBnb2Fscy4gYEZVU0VfRlNgIGlzIGV4cGVjdGVkIGZvciBGVVNFIGZpbGVzeXN0ZW0gaW50ZWdyYXRpb24sIGFuZCBgU1VOUlBDYCByZWxhdGVzIHRvIHRoZSBTVU5SUEMgc3Vic3lzdGVtLCBhcyBleHBlY3RlZC4KCkZvciBGVVNFLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBmcy9mdXNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBGVVNFX0ZTYC4gVGhpcyBpcyBqdXN0IGdvb2QgcHJhY3RpY2UgYW5kIHdpbGwgY29uZmlybSBteSBleGlzdGluZyBrbm93bGVkZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGVVNFX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZnVzZS9LY29uZmlnOjI6Y29uZmlnIEZVU0VfRlNcbmZzL2Z1c2UvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6CgoqKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFNVTlJQQyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgU1VOUlBDYCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdGhlIGBuZXQvc3VucnBjL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGBuZXRgIGlzIG5ldHdvcmstcmVsYXRlZCwgYW5kIGBzdW5ycGNgLi4uIHdlbGwsIHRoYXTigJlzIHNlbGYtZXhwbGFuYXRvcnkuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBjb250YWluIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVzY3JpcHRpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgU1VOUlBDYCBpcyBidWlsdCBhbmQgZW5hYmxlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNVTlJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2OmNvbmZpZyBTVU5SUENfR1NTXG5uZXQvc3VucnBjL0tjb25maWctNy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cdGJvb2xcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMTQtXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXG5uZXQvc3VucnBjL0tjb25maWctMTYtXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMzUtXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xubmV0L3N1bnJwYy9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo1MDpjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXG5uZXQvc3VucnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1JQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXCYjMzQ7XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTYzLVxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXG5uZXQvc3VucnBjL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFNVTlJQQ2AgaXMgb25lIG9mIHRob3NlIHNldHRpbmdzIHRoYXQgZ2V0cyBmbGlwcGVkIG9uLCBvciBvZmYsIGRlcGVuZGluZyBvbiBhIGZldyBrZXkgZmFjdG9ycy4gVHlwaWNhbGx5LCBpdCYjMzk7cyBsaW5rZWQgdG8gZWl0aGVyIGBORlNfRlNgIG9yIGBORlNEYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBzdGF0ZSwgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGhhdmUgYSBoYW5kIGluIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBuZXh0IG9idmlvdXMgcGxhY2UgdG8gbG9vayBpcyBga2VybmVsL3Bvd2VyL0tjb25maWdgLiBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O2xsIGZpbmQgc29tZXRoaW5nIGxpa2UgYFBNX1NMRUVQYCBvciBgUE1fQVVUT1NMRUVQYCBpbiB0aGVyZSwgdGhvdWdoIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgaG93IHRoZXNlIG1pZ2h0IGluZmx1ZW5jZSBgU1VOUlBDYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBNX1NMRUVQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3Bvd2VyL0tjb25maWc9MTE4PWNvbmZpZyBQTV9TVERfUEFSVElUSU9OXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTM5LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTQwOmNvbmZpZyBQTV9TTEVFUFxua2VybmVsL3Bvd2VyL0tjb25maWctMTQxLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTE0NC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjE0NTpjb25maWcgUE1fU0xFRVBfU01QXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNDYtXHRkZWZfYm9vbCB5XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTUxLVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTUyOmNvbmZpZyBQTV9TTEVFUF9TTVBfTk9OWkVST19DUFVcbmtlcm5lbC9wb3dlci9LY29uZmlnLTE1My1cdGRlZl9ib29sIHlcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0yNDY9Y29uZmlnIFBNX1RFU1RfU1VTUEVORFxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTI1Ni1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjI1Nzpjb25maWcgUE1fU0xFRVBfREVCVUdcbmtlcm5lbC9wb3dlci9LY29uZmlnLTI1OC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCBwaHJhc2VkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipQTV9TTEVFUCBBbmFseXNpcyoqCgpSaWdodCwgc28gYFBNX1NMRUVQYCBpcyBnb2luZyB0byBiZSBkZWZpbmVkIGFzICYjMzk7eWVzJiMzOTsgKGBkZWZfYm9vbCB5YCksIGFuZCB0aGF0IGhpbmdlcyBkaXJlY3RseSBvbiB0aGUgcHJlc2VuY2Ugb2YgZWl0aGVyIGBTVVNQRU5EYCBvciBgSElCRVJOQVRFX0NBTExCQUNLU2AuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGlmIGVpdGhlciBvZiB0aG9zZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIGFyZSBlbmFibGVkLCB0aGVuIG9idmlvdXNseSB0aGUgc3lzdGVtIGlzIGNhcGFibGUgb2YgZW50ZXJpbmcgYSBzbGVlcCBzdGF0ZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgUE1fQVVUT1NMRUVQYCBhcyBpdCYjMzk7cyBsaWtlbHkgaW1wYWN0ZWQgYnkgd2hldGhlciBvciBub3QgYFBNX1NMRUVQYCBpcyBhY3RpdmUuIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVsbCBwb3dlciBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQTV9BVVRPU0xFRVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZz0xNTI9Y29uZmlnIFBNX1NMRUVQX1NNUF9OT05aRVJPX0NQVVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTE2MC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjE2MTpjb25maWcgUE1fQVVUT1NMRUVQXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNjItXHRib29sIFwmIzM0O09wcG9ydHVuaXN0aWMgc2xlZXBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwOTUKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBQTV9BVVRPU0xFRVBgIGlzIGEgdmFsaWQgY29uZmlnIG5vdywgZ29vZCB0byBrbm93LiBJJiMzOTt2ZSByZS1leGFtaW5lZCBgZnMvZnVzZS9kZXYuY2AgYW5kIHNwb3R0ZWQgdGhlIGNoYW5nZSB3aXRoaW4gYGZ1c2VfZ2V0X3JlcWAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgdGFzayBzdGF0ZSBtb2RpZmljYXRpb24sIGNoYW5naW5nIHRoZSB3YWl0IGV2ZW50IGZyb20gYFRBU0tfRlJFRVpBQkxFYCB0byBgVEFTS19GUkVFWkFCTEVfVU5TQUZFYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBhbmQgc29tZXRoaW5nIHRvIHdhdGNoIG91dCBmb3IuCgpUaGVuIEkgY2hlY2tlZCBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gIExvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNpbWlsYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYF9fcnBjX2V4ZWN1dGVgIHdoZXJlIGBUQVNLX0ZSRUVaQUJMRWAgYWxzbyBnZXRzIGJ1bXBlZCB0byBgVEFTS19GUkVFWkFCTEVfVU5TQUZFYC4gIEFnYWluLCBnb29kLiAgSSBsaWtlIHRoYXQgaXQmIzM5O3MgY29uc2lzdGVudC4KCk5leHQsIHRoZSBjaGFuZ2VzIGluIGBrZXJuZWwvcG93ZXIvbWFpbi5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgQSBjYXBhYmlsaXR5IGNoZWNrIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSBhIHN1c3BlbmQgb3BlcmF0aW9uLCBhbmQgdGhlcmUmIzM5O3MgYWxzbyBhIGNoZWNrIGZvciB3YWtldXAgc291cmNlcyBpbiBgc3RhdGVfc3RvcmVgLiBTZWVtcyBsaWtlIHRoZSBpZGVhIGlzIHRvIGVuaGFuY2UgdGhlIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgb2YgdGhlIHN1c3BlbmQgcHJvY2Vzcy4KCkFsbCBvZiB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgc3lzdGVtcywgd2l0aCBtb2RpZmljYXRpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXIgc3BhY2UsIGFuZCB0aHVzIHdhcnJhbnQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCgpTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGZvY3VzIG9uIGZ1enppbmcgdGhlc2Ugc3ltYm9sczoKKiAgIGBzdGF0ZV9zdG9yZWAKKiAgIGBhdXRvc2xlZXBfc3RvcmVgCiogICBgZnVzZV9jaGFuX3NlbmRgCiogICBgZnVzZV9jaGFuX3NlbmRfYmdgCiogICBgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5YAoqICAgYHJwY19leGVjdXRlYAoKQW5kIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6CiogICBgUE1fU0xFRVBgCiogICBgUE1fQVVUT1NMRUVQYAoqICAgYEZVU0VfRlNgCiogICBgU1VOUlBDYAoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIHRoZSBGVVNFIGFuZCBTVU5SUEMgc3Vic3lzdGVtcyB0byB1c2UgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAgZHVyaW5nIHdhaXRzLiBJdCBhbHNvIGludHJvZHVjZXMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgaW4gdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyB1c2VkIGZvciBwb3dlciBtYW5hZ2VtZW50IChgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB3aWxsIG5lZWQgdG8gYmUgcGFydCBvZiBhbnkgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHRhc2sgc3RhdGUgY2hhbmdlcyBhcmUgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgb3BlbmluZyB1cCBuZXcgYXZlbnVlcyBmb3IgZXhwbG9pdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BNX1NMRUVQJiMzNDssCiAgICAmIzM0O1BNX0FVVE9TTEVFUCYjMzQ7LAogICAgJiMzNDtGVVNFX0ZTJiMzNDssCiAgICAmIzM0O1NVTlJQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXRlX3N0b3JlJiMzNDssCiAgICAmIzM0O2F1dG9zbGVlcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9iZyYjMzQ7LAogICAgJiMzNDtmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkmIzM0OywKICAgICYjMzQ7cnBjX2V4ZWN1dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyAoVEFTS19GUkVFWkFCTEUgdG8gVEFTS19GUkVFWkFCTEVfVU5TQUZFKSBpbiBGVVNFIGFuZCBTdW5SUEMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgYXR0cmlidXRlcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTljZDZkYmZmMjdjZmU1MmMxMWUyMTQxMzJiN2Q2ODYxODE3ZWFlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCA1NzYzYTdjZDNiMzdmLi45ZThkYzk2ZDI0ZjE4IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTExNiw3ICYjNDM7MTE2LDcgQEAgc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZCkKIAkJZXJyID0gLUVJTlRSOwogCQlpZiAod2FpdF9ldmVudF9zdGF0ZV9leGNsdXNpdmUoZmNoLSZndDtibG9ja2VkX3dhaXRxLAogCQkJCSFmdXNlX2Jsb2NrX2FsbG9jKGZjaCwgZm9yX2JhY2tncm91bmQpLAotCQkJCShUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSkKJiM0MzsJCQkJKFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpKSkKIAkJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggNTQyOWU5ZjE5YjY1NS4uNzgwYWZkYTExNzY1NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BtX3J1bnRpbWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BtX3dha2V1cC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3Bvd2VyLmgmIzM0OwogCkBAIC04MDIsNiAmIzQzOzgwMywyMiBAQCBzdGF0aWMgc3NpemVfdCBzdGF0ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCXN1c3BlbmRfc3RhdGVfdCBzdGF0ZTsKIAlpbnQgZXJyb3I7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWludCBpZHg7CiYjNDM7CXN0cnVjdCB3YWtldXBfc291cmNlICp3czsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7CiYjNDM7CXdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpOwomIzQzOwl3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpOwomIzQzOwlpZiAoIXdzKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsjZW5kaWYKJiM0MzsKIAllcnJvciA9IHBtX2F1dG9zbGVlcF9sb2NrKCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC05MjksNiAmIzQzOzk0NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJc3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7CiAJaW50IGVycm9yOwogCiYjNDM7I2lmZGVmIENPTkZJR19QTV9TTEVFUAomIzQzOwlpbnQgaWR4OwomIzQzOwlzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CWlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX09OKSB7CiYjNDM7CQlpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTsKJiM0MzsJCXdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpOwomIzQzOwkJd2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTsKJiM0MzsJCWlmICghd3MpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwogCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX09OCiAJICAgICZhbXA7JmFtcDsgc3RyY21wKGJ1ZiwgJiMzNDtvZmYmIzM0OykgJmFtcDsmYW1wOyBzdHJjbXAoYnVmLCAmIzM0O29mZlxuJiMzNDspKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCAwMTZmMTZjYTU3Nzk5Li40OTQ5NDdkNTA5ZjNjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC05ODQsNyAmIzQzOzk4NCw3IEBAIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKQogCQl0cmFjZV9ycGNfdGFza19zeW5jX3NsZWVwKHRhc2ssIHRhc2stJmd0O3RrX2FjdGlvbik7CiAJCXN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KCZhbXA7dGFzay0mZ3Q7dGtfcnVuc3RhdGUsCiAJCQkJUlBDX1RBU0tfUVVFVUVELCBycGNfd2FpdF9iaXRfa2lsbGFibGUsCi0JCQkJVEFTS19LSUxMQUJMRXxUQVNLX0ZSRUVaQUJMRSk7CiYjNDM7CQkJCVRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpOwogCQlpZiAoc3RhdHVzICZsdDsgMCkgewogCQkJLyoKIAkJCSAqIFdoZW4gYSBzeW5jIHRhc2sgcmVjZWl2ZXMgYSBzaWduYWwsIGl0IGV4aXRzIHdpdGgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjEKCQkJCQkJCW91dHB1dDogMTE3CgkJCQkJCQl0aG91Z2h0czogNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENoZWNrOiBObyBJc3N1ZXMgRGV0ZWN0ZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGcm9tIHdoYXQgSSBzZWUsIHRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHRocmVlIGZpbGVzOiBgZnMvZnVzZS9kZXYuY2AsIGBrZXJuZWwvcG93ZXIvbWFpbi5jYCwgYW5kIGBuZXQvc3VucnBjL3NjaGVkLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBqdXN0IHR3ZWFraW5nIHNvbWUgdGFzayBzdGF0ZXMgaW4gYGZzL2Z1c2UvZGV2LmNgIGFuZCBgbmV0L3N1bnJwYy9zY2hlZC5jYCwgc3dhcHBpbmcgYFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAsIGFuZCB0aGVuLCBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AsIHdlJiMzOTtyZSBhZGRpbmcgc29tZSBjaGVja3MgYXJvdW5kIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzLgoKR2l2ZW4gdGhlc2UgY2hhbmdlcywgbXkgaW5pdGlhbCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IEtNU0FOIGF0dGVudGlvbi4gTm90aGluZyBzY3JlYW1zICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnksJiMzNDsgbm8gaW50cmljYXRlLCBwb3RlbnRpYWxseS1wYXJ0aWFsbHktaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgY2VydGFpbmx5IG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3MgYXJlIHByZXNlbnQgaW4gdGhlIGNvZGUuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgZmxhZyBhZGp1c3RtZW50cyBvciB0aGUgYWRkaXRpb24gb2Ygc2VjdXJpdHkgYW5kIHBvd2VyIG1hbmFnZW1lbnQgY2hlY2tzLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBrZXJuZWwvcG93ZXIvbWFpbi5jYCBjaGFuZ2UuIExldCYjMzk7cyBzZWUuLi4KCmBgYGMKJiM0MzsjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiYjNDM7CWludCBpZHg7CiYjNDM7CXN0cnVjdCB3YWtldXBfc291cmNlICp3czsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJaWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKJiM0MzsJaWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7CiYjNDM7CXdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpOwomIzQzOwl3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpOwomIzQzOwlpZiAoIXdzKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsjZW5kaWYKYGBgCgpPa2F5LCB0aGUgY29kZSBpbml0aWFsaXplcyB0aGUgYGlkeGAgYW5kIGB3c2AgdmFyaWFibGVzIHdpdGggdGhlIHJldHVybiB2YWx1ZXMgb2YgYHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpYCBhbmQgYHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gcmV0dXJuIHdlbGwtZGVmaW5lZCB2YWx1ZXMgb3IgaGFuZGxlIGVycm9ycywgc28gYW55IHBvdGVudGlhbCBpc3N1ZSByZWxhdGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBsb29rcyB0byBiZSBhdm9pZGVkLiBUaGUgb3RoZXIgZmlsZSBjaGFuZ2VzIGFyZSBqdXN0IHRob3NlIGZsYWcgYWRqdXN0bWVudHMsIHdoaWNoIGFyZSB1bmxpa2VseSB0byBjYXVzZSBhbnkgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRvIG1lIHRoYXQgd2UgZG9uJiMzOTt0IG5lZWQgS01TQU4gaGVyZS4gKipOZWVkc0tNU0FOIGlzIEZhbHNlLioqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRhc2sgc3RhdGUgZmxhZ3MgKFRBU0tfRlJFRVpBQkxFIHRvIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkgaW4gRlVTRSBhbmQgU3VuUlBDLCBhbmQgYWRkcyBjYXBhYmlsaXR5IGFuZCB3YWtldXAgc291cmNlIGNoZWNrcyB0byBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIGF0dHJpYnV0ZXMuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni4zNzkzNTIzNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1MzY2MTQyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUE1fU0xFRVBcIixcbiAgICBcIlBNX0FVVE9TTEVFUFwiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiU1VOUlBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhdGVfc3RvcmVcIixcbiAgICBcImF1dG9zbGVlcF9zdG9yZVwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX2JnXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlcIixcbiAgICBcInJwY19leGVjdXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRhc2sgc3RhdGUgZmxhZ3MgaW4gRlVTRSBhbmQgU1VOUlBDIHRvIHVzZSBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUgZHVyaW5nIHdhaXRzLCBhbmQgYWRkcyBjYXBhYmlsaXR5IGFuZCB3YWtldXAgc291cmNlIGNoZWNrcyB0byB0aGUgcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgKHN0YXRlX3N0b3JlIGFuZCBhdXRvc2xlZXBfc3RvcmUpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUga2VybmVsIHN1YnN5c3RlbXMgYW5kIGRyaXZlcnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni4zNzkzNTkzMDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTA2NzUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5Y2Q2ZGJmZjI3Y2ZlNTJjMTFlMjE0MTMyYjdkNjg2MTgxN2VhZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAxMDoyODo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuY1xcbmluZGV4IDU3NjNhN2NkM2IzN2YuLjllOGRjOTZkMjRmMTggMTAwNjQ0XFxuLS0tIGEvZnMvZnVzZS9kZXYuY1xcbisrKyBiL2ZzL2Z1c2UvZGV2LmNcXG5AQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgZm9yX2JhY2tncm91bmQpXFxuIFxcdFxcdGVyciA9IC1FSU5UUjtcXG4gXFx0XFx0aWYgKHdhaXRfZXZlbnRfc3RhdGVfZXhjbHVzaXZlKGZjaC1cXHUwMDNlYmxvY2tlZF93YWl0cSxcXG4gXFx0XFx0XFx0XFx0IWZ1c2VfYmxvY2tfYWxsb2MoZmNoLCBmb3JfYmFja2dyb3VuZCksXFxuLVxcdFxcdFxcdFxcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSlcXG4rXFx0XFx0XFx0XFx0KFRBU0tfS0lMTEFCTEUgfCBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpKSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXFxuaW5kZXggNTQyOWU5ZjE5YjY1NS4uNzgwYWZkYTExNzY1NiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jXFxuKysrIGIva2VybmVsL3Bvd2VyL21haW4uY1xcbkBAIC0yMCw2ICsyMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3dha2V1cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInBvd2VyLmhcXFwiXFxuIFxcbkBAIC04MDIsNiArODAzLDIyIEBAIHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZTtcXG4gXFx0aW50IGVycm9yO1xcbiBcXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbitcXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XFxuKyNlbmRpZlxcbitcXG4rXFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXFxuK1xcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuK1xcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xcbitcXHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcXG4rXFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcXG4rXFx0aWYgKCF3cylcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRlcnJvciA9IHBtX2F1dG9zbGVlcF9sb2NrKCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbkBAIC05MjksNiArOTQ2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG4rXFx0aW50IGlkeDtcXG4rXFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbisjZW5kaWZcXG4rXFxuK1xcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbitcXHRpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9PTikge1xcbitcXHRcXHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcXG4rXFx0XFx0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XFxuK1xcdFxcdHdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7XFxuK1xcdFxcdGlmICghd3MpXFxuK1xcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9PTlxcbiBcXHQgICAgXFx1MDAyNlxcdTAwMjYgc3RyY21wKGJ1ZiwgXFxcIm9mZlxcXCIpIFxcdTAwMjZcXHUwMDI2IHN0cmNtcChidWYsIFxcXCJvZmZcXFxcblxcXCIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jXFxuaW5kZXggMDE2ZjE2Y2E1Nzc5OS4uNDk0OTQ3ZDUwOWYzYyAxMDA2NDRcXG4tLS0gYS9uZXQvc3VucnBjL3NjaGVkLmNcXG4rKysgYi9uZXQvc3VucnBjL3NjaGVkLmNcXG5AQCAtOTg0LDcgKzk4NCw3IEBAIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbiBcXHRcXHR0cmFjZV9ycGNfdGFza19zeW5jX3NsZWVwKHRhc2ssIHRhc2stXFx1MDAzZXRrX2FjdGlvbik7XFxuIFxcdFxcdHN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KFxcdTAwMjZ0YXNrLVxcdTAwM2V0a19ydW5zdGF0ZSxcXG4gXFx0XFx0XFx0XFx0UlBDX1RBU0tfUVVFVUVELCBycGNfd2FpdF9iaXRfa2lsbGFibGUsXFxuLVxcdFxcdFxcdFxcdFRBU0tfS0lMTEFCTEV8VEFTS19GUkVFWkFCTEUpO1xcbitcXHRcXHRcXHRcXHRUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEVfVU5TQUZFKTtcXG4gXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2hlbiBhIHN5bmMgdGFzayByZWNlaXZlcyBhIHNpZ25hbCwgaXQgZXhpdHMgd2l0aFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyODo1Ni45MzkzNzExNDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MzUyMjgwNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQTV9TTEVFUFwiLFxuICAgIFwiUE1fQVVUT1NMRUVQXCIsXG4gICAgXCJGVVNFX0ZTXCIsXG4gICAgXCJTVU5SUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdGF0ZV9zdG9yZVwiLFxuICAgIFwiYXV0b3NsZWVwX3N0b3JlXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZFwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRfYmdcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseVwiLFxuICAgIFwicnBjX2V4ZWN1dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIEZVU0UgYW5kIFNVTlJQQyB0byB1c2UgVEFTS19GUkVFWkFCTEVfVU5TQUZFIGR1cmluZyB3YWl0cywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIChzdGF0ZV9zdG9yZSBhbmQgYXV0b3NsZWVwX3N0b3JlKS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBzdWJzeXN0ZW1zIGFuZCBkcml2ZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTljZDZkYmZmMjdjZmU1MmMxMWUyMTQxMzJiN2Q2ODYxODE3ZWFlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTA6Mjg6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuY1xuaW5kZXggNTc2M2E3Y2QzYjM3Zi4uOWU4ZGM5NmQyNGYxOCAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGV2LmNcbisrKyBiL2ZzL2Z1c2UvZGV2LmNcbkBAIC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcbiBcdFx0ZXJyID0gLUVJTlRSO1xuIFx0XHRpZiAod2FpdF9ldmVudF9zdGF0ZV9leGNsdXNpdmUoZmNoLVx1MDAzZWJsb2NrZWRfd2FpdHEsXG4gXHRcdFx0XHQhZnVzZV9ibG9ja19hbGxvYyhmY2gsIGZvcl9iYWNrZ3JvdW5kKSxcbi1cdFx0XHRcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEUpKSlcbitcdFx0XHRcdChUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEVfVU5TQUZFKSkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmNcbmluZGV4IDU0MjllOWYxOWI2NTUuLjc4MGFmZGExMTc2NTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jXG4rKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fd2FrZXVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInBvd2VyLmhcIlxuIFxuQEAgLTgwMiw2ICs4MDMsMjIgQEAgc3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiBcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZTtcbiBcdGludCBlcnJvcjtcbiBcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4rXHRpbnQgaWR4O1xuK1x0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xuKyNlbmRpZlxuK1xuK1x0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7XG4rXHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcbitcdHdha2V1cF9zb3VyY2VzX3JlYWRfdW5sb2NrKGlkeCk7XG4rXHRpZiAoIXdzKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuKyNlbmRpZlxuK1xuIFx0ZXJyb3IgPSBwbV9hdXRvc2xlZXBfbG9jaygpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtOTI5LDYgKzk0NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRzdXNwZW5kX3N0YXRlX3Qgc3RhdGUgPSBkZWNvZGVfc3RhdGUoYnVmLCBuKTtcbiBcdGludCBlcnJvcjtcbiBcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4rXHRpbnQgaWR4O1xuK1x0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xuKyNlbmRpZlxuK1xuK1x0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHtcbitcdFx0aWR4ID0gd2FrZXVwX3NvdXJjZXNfcmVhZF9sb2NrKCk7XG4rXHRcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuK1x0XHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xuK1x0XHRpZiAoIXdzKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHR9XG4rI2VuZGlmXG4rXG4gXHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9PTlxuIFx0ICAgIFx1MDAyNlx1MDAyNiBzdHJjbXAoYnVmLCBcIm9mZlwiKSBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCJvZmZcXG5cIikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuY1xuaW5kZXggMDE2ZjE2Y2E1Nzc5OS4uNDk0OTQ3ZDUwOWYzYyAxMDA2NDRcbi0tLSBhL25ldC9zdW5ycGMvc2NoZWQuY1xuKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jXG5AQCAtOTg0LDcgKzk4NCw3IEBAIHN0YXRpYyB2b2lkIF9fcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxuIFx0XHR0cmFjZV9ycGNfdGFza19zeW5jX3NsZWVwKHRhc2ssIHRhc2stXHUwMDNldGtfYWN0aW9uKTtcbiBcdFx0c3RhdHVzID0gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXQoXHUwMDI2dGFzay1cdTAwM2V0a19ydW5zdGF0ZSxcbiBcdFx0XHRcdFJQQ19UQVNLX1FVRVVFRCwgcnBjX3dhaXRfYml0X2tpbGxhYmxlLFxuLVx0XHRcdFx0VEFTS19LSUxMQUJMRXxUQVNLX0ZSRUVaQUJMRSk7XG4rXHRcdFx0XHRUQVNLX0tJTExBQkxFIHwgVEFTS19GUkVFWkFCTEVfVU5TQUZFKTtcbiBcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2hlbiBhIHN5bmMgdGFzayByZWNlaXZlcyBhIHNpZ25hbCwgaXQgZXhpdHMgd2l0aFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjg6NTYuOTM5Mzc0NDQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM4MTI4Mzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgQ2FuZGlkYXRlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLiBMZXQncyBicmVhayBpdCBkb3duLiBXZSd2ZSBnb3QgdGhyZWUgZmlsZXMgbW9kaWZpZWQ6IGBmcy9mdXNlL2Rldi5jYCwgYGtlcm5lbC9wb3dlci9tYWluLmNgLCBhbmQgYG5ldC9zdW5ycGMvc2NoZWQuY2AuIFRoZSBmaXJzdCB0d28gZmlsZXMsIHRoYXQgZGVhbCB3aXRoIGZ1c2UgYW5kIHBvd2VyIG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbCwgYXJlIGFsbW9zdCBjZXJ0YWlubHkgd29ydGggY2xvc2VyIHNjcnV0aW55LiBUaGUgYG5ldC9zdW5ycGMvc2NoZWQuY2AgZmlsZSBpcyBpbnRlcmVzdGluZyBhbmQgbWlnaHQgYmUgd29ydGggZXhwbG9yaW5nLCBidXQgSSdsbCBmb2N1cyBvbiB0aGUgZmlyc3QgdHdvIGZpcnN0LlxuXG5GaXJzdCwgYGtlcm5lbC9wb3dlci9tYWluLmNgIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgY2hlY2tzIHdpdGhpbiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYC4gVGhlc2UgYXJlIGNsZWFybHkgc3lzZnMgc3RvcmUgZnVuY3Rpb25zLCBtZWFuaW5nIHRoZXkncmUgZXhwb3NlZCBkaXJlY3RseSB0byB1c2Vyc3BhY2UgdmlhIHRoZSBgL3N5cy9wb3dlci9zdGF0ZWAgYW5kIGAvc3lzL3Bvd2VyL2F1dG9zbGVlcGAgaW50ZXJmYWNlcy4gV3JpdGluZyB0byB0aGVzZSBmaWxlcyBpcyBhIGNyaXRpY2FsIHBvaW50IGZvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wuIFRoZSBhZGRlZCBjYXBhYmlsaXR5IGNoZWNrLCBgY2FwYWJsZShDQVBfU1lTX0JPT1QpYCwgYW5kIHRoZSB3YWtldXAgc291cmNlIGNoZWNrIGFyZSBmdW5jdGlvbmFsIGFkZGl0aW9ucywgYmFzaWNhbGx5IGludHJvZHVjaW5nIG5ldyBzZWN1cml0eSBjaGVja3MuIFRoaXMgaXMgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgKmRlbWFuZHMqIGZ1enppbmcuIFdlIGhhdmUgYW4gb3Bwb3J0dW5pdHkgZm9yIGNvbnRyb2wtcGxhbmUgZnV6emluZyBoZXJlLCB3aGVyZSB1c2VybGFuZCBpbnB1dCBwb3RlbnRpYWxseSBhbHRlcnMga2VybmVsIGJlaGF2aW9yLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCBgZnMvZnVzZS9kZXYuY2AuIENoYW5nZXMgaGVyZSBtb2RpZnkgYSBmdW5jdGlvbiBsaWtlIGBmdXNlX2dldF9yZXFgLCB3aGljaCBJIGtub3cgaXMgYSBjb3JlIEZVU0UgZnVuY3Rpb24gZm9yIHJlcXVlc3QgaGFuZGxpbmcuIEl0IGludm9sdmVzIGNoYW5naW5nIGBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAuIFRoZSBzYW1lIHR5cGUgb2YgY2hhbmdlLCBmcm9tIGBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAsIG9jY3VycyBpbiBgbmV0L3N1bnJwYy9zY2hlZC5jYCB3aXRoaW4gYF9fcnBjX2V4ZWN1dGVgLiBUaGVzZSBtb2RpZmljYXRpb25zIHRvIHRhc2sgc3RhdGVzIGFyZSBhbHNvIHdvcnRoIGEgbG9vay5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBhcyBhIHdob2xlICphYnNvbHV0ZWx5KiB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBsb2dpYywgZW5jb21wYXNzaW5nIHBvd2VyIG1hbmFnZW1lbnQsIEZVU0UsIGFuZCBTVU5SUEMuIFRoZXNlIGFyZSBhcmVhcyB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QuXG5cbkZpbmFsbHksIHJlZ2FyZGluZyBga2VybmVsL3Bvd2VyL21haW4uY2AsIEknbGwgcHJvYmFibHkgd2FudCB0byBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhpcyBjb2RlLiBNeSBndWVzcyBpcyBpdCdzIGNvbXBpbGVkIHdpdGggYENPTkZJR19QTWAgb3IgYENPTkZJR19QTV9TTEVFUGAsIHNvIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaW4gdGhlIGBrZXJuZWwvcG93ZXIvTWFrZWZpbGVgLiBUaGlzIHdpbGwgaGVscCBtZSBzZXQgdXAgYSBjb3JyZWN0IGZ1enppbmcgZW52aXJvbm1lbnQgZm9yIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTowNS4zMjA2NjA4ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMjcwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFpbi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvTWFrZWZpbGU9MTE9b2JqLXlcXHRcXHRcXHRcXHQrPSBxb3Mub1xcbmtlcm5lbC9wb3dlci9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfUE0pXFx0XFx0Kz0gbWFpbi5vXFxua2VybmVsL3Bvd2VyL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19WVF9DT05TT0xFX1NMRUVQKVxcdCs9IGNvbnNvbGUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTowNS4zODA4OTY5MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ0NjE4NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cbioqUE0gQ29udGV4dHVhbGl6YXRpb24gYW5kIEZVU0UgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyB3ZSd2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgYENPTkZJR19QTWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIGxldmVyYWdpbmcgYCNpZmRlZiBDT05GSUdfUE1fU0xFRVBgLCBzbyBwb3dlciBtYW5hZ2VtZW50IGlzIGRlZmluaXRlbHkgYSBrZXkgZmFjdG9yIGluIHdoYXRldmVyIHRoaXMgaXMuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbHMgaW52b2x2ZWQsIEkgc2hvdWxkIGNoZWNrIGBmcy9mdXNlL2Rldi5jYC4gSSBiZWxpZXZlIGBmdXNlX2dldF9yZXFgIHJlc2lkZXMgdGhlcmUsIHNvIHRoYXQncyB3aGVyZSB0byBzdGFydC5cblxuQWxzbyBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB3ZSBoYXZlIGBDT05GSUdfRlVTRV9GU2AgZW5hYmxlZCBpbiB0aGlzIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTAuNDI1NTE4Mjk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDQxMDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1c2VfZ2V0X3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZGV2LmM9NTU9c3RhdGljIHZvaWQgZnVzZV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGZ1c2VfcmVxICpyZXEpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTYwLVxcbmZzL2Z1c2UvZGV2LmM6NjE6c3RhdGljIHZvaWQgX19mdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbmZzL2Z1c2UvZGV2LmMtNjIte1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMDY9c3RhdGljIHZvaWQgZnVzZV9wdXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xMDctXFxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcXG5mcy9mdXNlL2Rldi5jLTEwOS17XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy03NTMtXFx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXFxuZnMvZnVzZS9kZXYuYzo3NTQ6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy03NTUtXFx0ZnVzZV9zZW5kX29uZShmaXEsIHJlcSk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODIxLVxcdH0gZWxzZSB7XFxuZnMvZnVzZS9kZXYuYzo4MjI6XFx0XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtODIzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODI2LVxcbmZzL2Z1c2UvZGV2LmM6ODI3OlxcdC8qIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgZnVzZV9nZXRfcmVxKCkgc28gdGhhdCBmY2gtXFx1MDAzZW1pbm9yIGlzIHZhbGlkICovXFxuZnMvZnVzZS9kZXYuYy04MjgtXFx0ZnVzZV9hZGp1c3RfY29tcGF0KGZjaCwgYXJncyk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTkwMS1cXHR9IGVsc2Uge1xcbmZzL2Z1c2UvZGV2LmM6OTAyOlxcdFxcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xcbmZzL2Z1c2UvZGV2LmMtOTAzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9OTE3PWludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy05MjEtXFxuZnMvZnVzZS9kZXYuYzo5MjI6XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtOTIzLVxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MTUxNj1zdGF0aWMgc3NpemVfdCBmdXNlX2Rldl9kb19yZWFkKHN0cnVjdCBmdXNlX2RldiAqZnVkLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtMTYyNi1cXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZnBxLVxcdTAwM2Vwcm9jZXNzaW5nW2hhc2hdKTtcXG5mcy9mdXNlL2Rldi5jOjE2Mjc6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xNjI4LVxcdHNldF9iaXQoRlJfU0VOVCwgXFx1MDAyNnJlcS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xODYwPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3dyaXRlKHN0cnVjdCBmdXNlX2RldiAqZnVkLFxcbi0tXFxuZnMvZnVzZS9kZXYuYy0xOTE3LVxcdGlmIChvaC51bmlxdWUgXFx1MDAyNiBGVVNFX0lOVF9SRVFfQklUKSB7XFxuZnMvZnVzZS9kZXYuYzoxOTE4OlxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZnBxLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTIxNjEtXFx0XFx0XFx0XFx0XFx0c2V0X2JpdChGUl9QUklWQVRFLCBcXHUwMDI2cmVxLVxcdTAwM2VmbGFncyk7XFxuZnMvZnVzZS9kZXYuYzoyMTYyOlxcdFxcdFxcdFxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMjE2My1cXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJlcS1cXHUwMDNlbGlzdCwgXFx1MDAyNnRvX2VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjEwLjQ5MDk2NjczN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjA4MTEwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIHRoaW5raW5nIGFib3V0IGBmdXNlX2dldF9yZXFgIGhlcmUuIFJpZ2h0LCB0aGF0J3MgdXNlZCBpbiBgZnVzZV9jaGFuX3NlbmRgLCBgZnVzZV9jaGFuX3NlbmRfYmdgLCBhbmQgYGZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseWAuIE9rYXksIHRob3NlIGFyZSBhbGwgKmNvcmUqIEZVU0UgZnVuY3Rpb25zLiBTbywgYGZ1c2VfZ2V0X3JlcWAgaXMgcHJldHR5IGZ1bmRhbWVudGFsLlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhIGJpdC4gV2hlcmUgZWxzZSBkb2VzIHRoaXMgcGF0dGVybiBlbWVyZ2U/IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvc3VucnBjL3NjaGVkLmNgLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBvdmVyIHRoZXJlLiBBaCwgeWVzLCBgX19ycGNfZXhlY3V0ZWAsIHRoYXQncyBhIGtleSBTVU5SUEMgZnVuY3Rpb24uIFxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTUuMjUxNzgwMjAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4Mzg4OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcnBjX2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zY2hlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc2NoZWQuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwocnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXFxubmV0L3N1bnJwYy9zY2hlZC5jOjM1NzogKiB3aGljaCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgX19ycGNfZXhlY3V0ZSgpIGRvZXNuJ3QgbG9vcCAoZHVlIHRvIHRoZVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTgtICogbG9ja2xlc3MgUlBDX0lTX1FVRVVFRCgpIHRlc3QpIGJlZm9yZSB3ZSd2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy05MDgtICovXFxubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDE1PXZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjItXFx0XFx0dW5zaWduZWQgaW50IHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDIzOlxcdFxcdF9fcnBjX2V4ZWN1dGUodGFzayk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjQtXFx0XFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAyOD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfc2NoZWR1bGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzEtXFxubmV0L3N1bnJwYy9zY2hlZC5jOjEwMzI6XFx0X19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMy1cXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MTUuMzQwMTc0MTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MzI3MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBmb3Igc29tZW9uZSB3aG8ga25vd3MgdGhlaXIgd2F5IGFyb3VuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKlJQQyBFeGVjdXRpb24gYW5kIFBvd2VyIE1hbmFnZW1lbnQ6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBob3cgUmVtb3RlIFByb2NlZHVyZSBDYWxscyAoUlBDKSBpbnRlcmFjdCB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBDT05GSUdfU1VOUlBDYCBjb25maWcgb3B0aW9uLiBJIHNlZSB0aGF0IGJvdGggYHJwY19leGVjdXRlYCBhbmQgYHJwY19hc3luY19zY2hlZHVsZWAgdWx0aW1hdGVseSBmdW5uZWwgdGhlaXIgZXhlY3V0aW9uIHRocm91Z2ggdGhlIGBfX3JwY19leGVjdXRlYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNvcmUgZXhlY3V0aW9uIHBhdGggd2Ugc2hvdWxkIGtlZXAgaW4gbWluZC5cblxuVGhlbiB0aGUgdGhvdWdodCB2ZWVycyB0b3dhcmRzIGBrZXJuZWwvcG93ZXIvbWFpbi5jYC4gTXkgc3BpZGV5IHNlbnNlcyBhcmUgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBhbiBpbnRlcmFjdGlvbiwgYW5kIHRoZSBtZW50aW9uIG9mIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGFzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyByYWlzZXMgYSByZWQgZmxhZy4gVGhlc2UgYXJlIGNsYXNzaWMgaG9va3MgaW50byB0aGUgc3lzdGVtJ3MgcG93ZXIgc3RhdGUsIGFuZCBhbnkgUlBDIGFjdGl2aXR5IHRoYXQgbWlnaHQgYmUgc2Vuc2l0aXZlIHRvIHN1c3BlbmQvcmVzdW1lIHNob3VsZCBiZSBjYXJlZnVsbHkgc2NydXRpbml6ZWQgaGVyZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyBSUEMgb3BlcmF0aW9ucyBiZWhhdmUgZHVyaW5nIHN5c3RlbSBzbGVlcCBvciByZXN1bWUsIGFuZCB3aGV0aGVyIGFueSBpbXByb3BlciBoYW5kbGluZyBvZiBSUEMgY2FsbHMgY2FuIGxlYWQgdG8gaXNzdWVzIHdpdGggYXV0b3NsZWVwIG9yIG90aGVyIHBvd2VyLXNhdmluZyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgUlBDIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBzeXN0ZW0gZnJvbSBlbnRlcmluZyBhIGxvdy1wb3dlciBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjE5LjQ4NDUwMzI0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYwNzE2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3Bvd2VyL21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvbWFpbi5jPTc3Mz1zdGF0aWMgc3VzcGVuZF9zdGF0ZV90IGRlY29kZV9zdGF0ZShjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcbi0tXFxua2VybmVsL3Bvd2VyL21haW4uYy03OTktXFxua2VybmVsL3Bvd2VyL21haW4uYzo4MDA6c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTgwMS1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToxOS41NzA1ODE5OTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDc2NzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG93ZXIgTWFuYWdlbWVudCBhbmQgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzdGF0ZV9zdG9yZWAgbWFuYWdlcyB0aGUgYC9zeXMvcG93ZXIvc3RhdGVgIHN5c2ZzIGVudHJ5IGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBoYW5kbGVzIGAvc3lzL3Bvd2VyL2F1dG9zbGVlcGAuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHRoaXMgcGllY2UuIE15IGltbWVkaWF0ZSBmb2N1cyB0aGVuIGdvZXMgdG8gdGhlc2UgdHdvIGZ1bmN0aW9uczogYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIEkgYWxzbyBuZWVkIHRvIGtlZXAgYGZ1c2VfZ2V0X3JlcWAgYW5kIGBfX3JwY19leGVjdXRlYCBpbiB0aGUgYmFjayBvZiBteSBtaW5kLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgcXVlc3Rpb24gaXMgd2hldGhlciBgUE1fU0xFRVBgIGlzIHRoZSBkZWZpbmluZyBjb25maWd1cmF0aW9uIGZvciBib3RoIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgLiBJdCdzIGEga2V5IGRldGFpbCB0byBjb25maXJtLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgdGhpcyBpbiByZWxhdGlvbiB0byBhbnkgcG90ZW50aWFsIGludGVyZGVwZW5kZW5jaWVzIHdpdGggYEZVU0VfRlNgIGFuZCBgU1VOUlBDYCwganVzdCBpbiBjYXNlLiBUaGV5IGZlZWwgbGVzcyBkaXJlY3RseSByZWxldmFudCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gZWxpbWluYXRlIGV4dHJhbmVvdXMgcG9zc2liaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOToyMy4zODUzNTE0NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDc5Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL21haW4uYz03NzM9c3RhdGljIHN1c3BlbmRfc3RhdGVfdCBkZWNvZGVfc3RhdGUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG4tLVxcbmtlcm5lbC9wb3dlci9tYWluLmMtNzk5LVxcbmtlcm5lbC9wb3dlci9tYWluLmM6ODAwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxua2VybmVsL3Bvd2VyL21haW4uYy04MDEtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MjMuNDc0ODM3MzQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDY5MTk5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgUG93ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGZvciB3aGVyZSBgc3RhdGVfc3RvcmVgIGlzIGRlZmluZWQuIFRoZSBoaW50IHNheXMgaXQncyBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AuIFRoYXQgc2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhhdCBgc3RhdGVfc3RvcmVgIHByb2JhYmx5IGRlYWxzIHdpdGggc3lzdGVtIHBvd2VyIHN0YXRlcywgc28gaXQncyBsaWtlbHkgbmVzdGxlZCB3aXRoaW4gdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBMZXQncyBjb25maXJtIHRoYXQgYnkgZGlyZWN0bHkgZXhhbWluaW5nIGBrZXJuZWwvcG93ZXIvbWFpbi5jYCwgYW5kIEknbGwgZm9jdXMgbXkgc2VhcmNoIGFyb3VuZCB0aGF0IHNwZWNpZmljIGlkZW50aWZpZXIgdG8gc2VlIHdoZXJlIGl0J3MgZGVjbGFyZWQgYW5kIHdoYXQgZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBkaWZmZXJlbnQgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZXMgb2YgdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmaWxlIGxpa2VseSBjb250YWlucyB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHN5c3RlbSdzIHBvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjI2LjcyMTc2MTAxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3Bvd2VyL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0c3RhdGljIHNzaXplX3Qgc3RhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4gODAxOlxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pXFxuIDgwMjpcXHR7XFxuIDgwMzpcXHRcXHRzdXNwZW5kX3N0YXRlX3Qgc3RhdGU7XFxuIDgwNDpcXHRcXHRpbnQgZXJyb3I7XFxuIDgwNTpcXHRcXG4gODA2OlxcdCNpZmRlZiBDT05GSUdfUE1fU0xFRVBcXG4gODA3OlxcdFxcdGludCBpZHg7XFxuIDgwODpcXHRcXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XFxuIDgwOTpcXHQjZW5kaWZcXG4gODEwOlxcdFxcbiA4MTE6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQk9PVCkpXFxuIDgxMjpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4MTM6XFx0XFxuIDgxNDpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuIDgxNTpcXHRcXHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcXG4gODE2OlxcdFxcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xcbiA4MTc6XFx0XFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcXG4gODE4OlxcdFxcdGlmICghd3MpXFxuIDgxOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiA4MjA6XFx0I2VuZGlmXFxuIDgyMTpcXHRcXG4gODIyOlxcdFxcdGVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTtcXG4gODIzOlxcdFxcdGlmIChlcnJvcilcXG4gODI0OlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gODI1OlxcdFxcbiA4MjY6XFx0XFx0aWYgKHBtX2F1dG9zbGVlcF9zdGF0ZSgpIFxcdTAwM2UgUE1fU1VTUEVORF9PTikge1xcbiA4Mjc6XFx0XFx0XFx0ZXJyb3IgPSAtRUJVU1k7XFxuIDgyODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODI5OlxcdFxcdH1cXG4gODMwOlxcdFxcbiA4MzE6XFx0XFx0c3RhdGUgPSBkZWNvZGVfc3RhdGUoYnVmLCBuKTtcXG4gODMyOlxcdFxcdGlmIChzdGF0ZSBcXHUwMDNjIFBNX1NVU1BFTkRfTUFYKSB7XFxuIDgzMzpcXHRcXHRcXHRpZiAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pXFxuIDgzNDpcXHRcXHRcXHRcXHRzdGF0ZSA9IG1lbV9zbGVlcF9jdXJyZW50O1xcbiA4MzU6XFx0XFxuIDgzNjpcXHRcXHRcXHRlcnJvciA9IHBtX3N1c3BlbmQoc3RhdGUpO1xcbiA4Mzc6XFx0XFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX01BWCkge1xcbiA4Mzg6XFx0XFx0XFx0ZXJyb3IgPSBoaWJlcm5hdGUoKTtcXG4gODM5OlxcdFxcdH0gZWxzZSB7XFxuIDg0MDpcXHRcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuIDg0MTpcXHRcXHR9XFxuIDg0MjpcXHRcXG4gODQzOlxcdCBvdXQ6XFxuIDg0NDpcXHRcXHRwbV9hdXRvc2xlZXBfdW5sb2NrKCk7XFxuIDg0NTpcXHRcXHRyZXR1cm4gZXJyb3IgPyBlcnJvciA6IG47XFxuIDg0NjpcXHR9XFxuIDg0NzpcXHRcXG4gODQ4OlxcdHBvd2VyX2F0dHIoc3RhdGUpO1xcbiA4NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjI2LjcyMTkzODc4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0NzUyNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG93ZXIgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCByZWxhdGlvbnNoaXAgaGVyZS4gSXQgc2VlbXMgYHN0YXRlX3N0b3JlYCBpcyAqdGhlKiBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc3RvcmluZyBvciBzZXR0aW5nIHRoZSBzdGF0ZSBhdHRyaWJ1dGUsIHByZXN1bWFibHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgcG93ZXJfYXR0cihzdGF0ZSlgLiBUaGUgbmV3IGNvZGUgaW50cm9kdWNlcyBgQ09ORklHX1BNX1NMRUVQYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgYSBkaXJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCBoZXJlJ3Mgd2hlcmUgSSBuZWVkIHRvIGJlIHByZWNpc2U6IGlzIGBzdGF0ZV9zdG9yZWAgKm9ubHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19QTV9TTEVFUGAgaXMgYWN0aXZlLCBvciBpcyBpdCBhIGJpdCBtb3JlIGdlbmVyYWwsIHRpZWQgdG8gdGhlIGJyb2FkZXIgYENPTkZJR19QTWAgdW1icmVsbGEsIG9yIHBlcmhhcHMgYm90aD8gSXQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvcG93ZXIvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgd2lsbCBkZWZpbml0aXZlbHkgdGVsbCBtZSB3aGVuIGFuZCBob3cgYHN0YXRlX3N0b3JlYCBnZXRzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2xlYXIgaW5kaWNhdGlvbnMgb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMgdHJpZ2dlciBpdHMgY29tcGlsYXRpb24uIFRoYXQgc2hvdWxkIHJlc29sdmUgdGhlIGFtYmlndWl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzAuNDk2Njk1MDcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg3NjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWluLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3Bvd2VyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9wb3dlci9NYWtlZmlsZT0xMT1vYmoteVxcdFxcdFxcdFxcdCs9IHFvcy5vXFxua2VybmVsL3Bvd2VyL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QTSlcXHRcXHQrPSBtYWluLm9cXG5rZXJuZWwvcG93ZXIvTWFrZWZpbGUtMTMtb2JqLSQoQ09ORklHX1ZUX0NPTlNPTEVfU0xFRVApXFx0Kz0gY29uc29sZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjMwLjU2OTU3NTQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTEwMjA5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipQTSBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfUE1gIGlzIGVuYWJsZWQuIFdpdGhvdXQgdGhhdCwgdGhlcmUncyBubyBwb3dlciBtYW5hZ2VtZW50LCBhbmQgdGhhdCdzIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gT25jZSB0aGF0J3MgdmVyaWZpZWQsIHRoZSBuZXh0IHRoaW5nIEknbSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGlzIHRoZSBgYXV0b3NsZWVwX3N0b3JlYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBvbmUgdGhhdCBjb250cm9scyB0aGUgYXV0b21hdGljIHNsZWVwIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZCBhbmQgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIHRoZXJlIHRoYXQgbWlnaHQgY29uZmxpY3Qgb3IgaW50ZXJhY3Qgd2l0aCBteSBzcGVjaWZpYyBuZWVkcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0IG9yIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gaXMga2V5IHRvIG1ha2luZyB0aGlzIGFsbCB3b3JrIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTk2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzMuOTYwNTk5MDk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY5NzgyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXV0b3NsZWVwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL21haW4uYz05MjE9c3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jLTk0MS1cXG5rZXJuZWwvcG93ZXIvbWFpbi5jOjk0MjpzdGF0aWMgc3NpemVfdCBhdXRvc2xlZXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxua2VybmVsL3Bvd2VyL21haW4uYy05NDMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzQuMDY3NTg1NjY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODIwNDM1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkNoZWNraW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaGVyZSBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBgYXV0b3NsZWVwX3N0b3JlYCBpcyB3cmFwcGVkIHdpdGhpbiBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIEl0J3MgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiB0aGlzIGNvZGViYXNlLCB0byB1bmRlcnN0YW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUsIGZlYXR1cmUgZmxhZ3MsIG9yIHBlcmhhcHMgZGVidWdnaW5nIGRlZmluZXMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgaXRzIGF2YWlsYWJpbGl0eT8gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyB2YXJpYWJsZSwgb3IgbW9yZSBhY2N1cmF0ZWx5LCB0aGUgY29kZSB0aGF0IHVzZXMgdGhpcyB2YXJpYWJsZSwgaGFzIGFueSBjb25kaXRpb25hbCBpbmNsdXNpb24gYmVmb3JlIEkgY2FuIHByb2NlZWQuIERlcGVuZGluZyBvbiB0aGUgYW5zd2VyLCBpdCB3b3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgbXkgcGVyc3BlY3RpdmUgb24gdGhlIG5leHQgc3RlcHMuIEZvciBpbnN0YW5jZSwgaWYgaXQncyBwcm90ZWN0ZWQgYnkgYSBmZWF0dXJlIGZsYWcsIEknZCB3YW50IHRvIGZpbmQgdGhlIGRlZmluaW5nIG1hY3JvIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTozNy42NDk2MzI4MjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9wb3dlci9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQyOlxcdHN0YXRpYyBzc2l6ZV90IGF1dG9zbGVlcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gOTQzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuIDk0NDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG4gOTQ1OlxcdHtcXG4gOTQ2OlxcdFxcdHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSA9IGRlY29kZV9zdGF0ZShidWYsIG4pO1xcbiA5NDc6XFx0XFx0aW50IGVycm9yO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuIDk1MDpcXHRcXHRpbnQgaWR4O1xcbiA5NTE6XFx0XFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbiA5NTI6XFx0I2VuZGlmXFxuIDk1MzpcXHRcXG4gOTU0OlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxcbiA5NTU6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0I2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbiA5NTg6XFx0XFx0aWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfT04pIHtcXG4gOTU5OlxcdFxcdFxcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xcbiA5NjA6XFx0XFx0XFx0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XFxuIDk2MTpcXHRcXHRcXHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xcbiA5NjI6XFx0XFx0XFx0aWYgKCF3cylcXG4gOTYzOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDk2NDpcXHRcXHR9XFxuIDk2NTpcXHQjZW5kaWZcXG4gOTY2OlxcdFxcbiA5Njc6XFx0XFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT05cXG4gOTY4OlxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiBzdHJjbXAoYnVmLCBcXFwib2ZmXFxcIikgXFx1MDAyNlxcdTAwMjYgc3RyY21wKGJ1ZiwgXFxcIm9mZlxcXFxuXFxcIikpXFxuIDk2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTcwOlxcdFxcbiA5NzE6XFx0XFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfTUVNKVxcbiA5NzI6XFx0XFx0XFx0c3RhdGUgPSBtZW1fc2xlZXBfY3VycmVudDtcXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0ZXJyb3IgPSBwbV9hdXRvc2xlZXBfc2V0X3N0YXRlKHN0YXRlKTtcXG4gOTc1OlxcdFxcdHJldHVybiBlcnJvciA/IGVycm9yIDogbjtcXG4gOTc2OlxcdH1cXG4gOTc3OlxcdFxcbiA5Nzg6XFx0cG93ZXJfYXR0cihhdXRvc2xlZXApO1xcbiA5Nzk6XFx0I2VuZGlmIC8qIENPTkZJR19QTV9BVVRPU0xFRVAgKi9cXG4gOTgwOlxcdFxcbiA5ODE6XFx0I2lmZGVmIENPTkZJR19QTV9XQUtFTE9DS1NcXG4gOTgyOlxcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiA5ODM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbiA5ODQ6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbiA5ODU6XFx0e1xcbiA5ODY6XFx0XFx0cmV0dXJuIHBtX3Nob3dfd2FrZWxvY2tzKGJ1ZiwgdHJ1ZSk7XFxuIDk4NzpcXHR9XFxuIDk4ODpcXHRcXG4gOTg5OlxcdHN0YXRpYyBzc2l6ZV90IHdha2VfbG9ja19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gOTkwOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuIDk5MTpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6MzcuNjQ5Nzg2Nzg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTcxNjkxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNsZWVwIGFuZCBGaWxlc3lzdGVtIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGF1dG9zbGVlcF9zdG9yZWAgZnVuY3Rpb24sIGFuZCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19QTV9BVVRPU0xFRVBgLiBUaGF0IHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50IGFuZCwgc3BlY2lmaWNhbGx5LCBhdXRvbWF0aWMgc2xlZXAgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGlzIGFsc28gbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSByZWxhdGVkIGNvbmZpZ3M6IGBQTV9TTEVFUGAsIGBQTV9BVVRPU0xFRVBgLCBgRlVTRV9GU2AsIGFuZCBgU1VOUlBDYC4gVW5kZXJzdGFuZGluZyBob3cgdGhvc2UgYXJlIGNvbmZpZ3VyZWQgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGVyZSB0aGlzIGZpdHMuXG5cbkkndmUgaWRlbnRpZmllZCBhIGZldyBrZXkgc3ltYm9scyB0byBmb2xsb3c6IGBzdGF0ZV9zdG9yZWAsIGBhdXRvc2xlZXBfc3RvcmVgIChvYnZpb3VzbHkpLCBgZnVzZV9nZXRfcmVxYCwgYW5kIGBfX3JwY19leGVjdXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlaXIgY29ubmVjdGlvbnMuIEhtbSwgYGZ1c2VfZ2V0X3JlcWAuLi4gdGhhdCByaW5ncyBhIGJlbGwgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGludG8gYGZzL2Z1c2UvZGV2LmNgLiBTdGF0aWMgZnVuY3Rpb25zIG9mdGVuIHBvaW50IHRvIGJlaW5nIGludGVybmFsIHdpdGhpbiBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0Mi4yMDY5NTg4OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjAwMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1c2VfZ2V0X3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZGV2LmM9NTU9c3RhdGljIHZvaWQgZnVzZV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGZ1c2VfcmVxICpyZXEpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTYwLVxcbmZzL2Z1c2UvZGV2LmM6NjE6c3RhdGljIHZvaWQgX19mdXNlX2dldF9yZXF1ZXN0KHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbmZzL2Z1c2UvZGV2LmMtNjIte1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMDY9c3RhdGljIHZvaWQgZnVzZV9wdXRfcmVxdWVzdChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xMDctXFxuZnMvZnVzZS9kZXYuYzoxMDg6c3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqZnVzZV9nZXRfcmVxKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgYm9vbCBmb3JfYmFja2dyb3VuZClcXG5mcy9mdXNlL2Rldi5jLTEwOS17XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTc0Nj1zdGF0aWMgdm9pZCBfX2Z1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy03NTMtXFx0ICAgZnVzZV9yZXF1ZXN0X2VuZCgpICovXFxuZnMvZnVzZS9kZXYuYzo3NTQ6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy03NTUtXFx0ZnVzZV9zZW5kX29uZShmaXEsIHJlcSk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTgwOT1zc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODIxLVxcdH0gZWxzZSB7XFxuZnMvZnVzZS9kZXYuYzo4MjI6XFx0XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtODIzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtODI2LVxcbmZzL2Z1c2UvZGV2LmM6ODI3OlxcdC8qIE5lZWRzIHRvIGJlIGRvbmUgYWZ0ZXIgZnVzZV9nZXRfcmVxKCkgc28gdGhhdCBmY2gtXFx1MDAzZW1pbm9yIGlzIHZhbGlkICovXFxuZnMvZnVzZS9kZXYuYy04MjgtXFx0ZnVzZV9hZGp1c3RfY29tcGF0KGZjaCwgYXJncyk7XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTg5Mj1pbnQgZnVzZV9jaGFuX3NlbmRfYmcoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCBnZnBfdCBnZnBfZmxhZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTkwMS1cXHR9IGVsc2Uge1xcbmZzL2Z1c2UvZGV2LmM6OTAyOlxcdFxcdHJlcSA9IGZ1c2VfZ2V0X3JlcShmY2gsIHRydWUpO1xcbmZzL2Z1c2UvZGV2LmMtOTAzLVxcdFxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9OTE3PWludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy05MjEtXFxuZnMvZnVzZS9kZXYuYzo5MjI6XFx0cmVxID0gZnVzZV9nZXRfcmVxKGZjaCwgZmFsc2UpO1xcbmZzL2Z1c2UvZGV2LmMtOTIzLVxcdGlmIChJU19FUlIocmVxKSlcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MTUxNj1zdGF0aWMgc3NpemVfdCBmdXNlX2Rldl9kb19yZWFkKHN0cnVjdCBmdXNlX2RldiAqZnVkLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtMTYyNi1cXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2cmVxLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZnBxLVxcdTAwM2Vwcm9jZXNzaW5nW2hhc2hdKTtcXG5mcy9mdXNlL2Rldi5jOjE2Mjc6XFx0X19mdXNlX2dldF9yZXF1ZXN0KHJlcSk7XFxuZnMvZnVzZS9kZXYuYy0xNjI4LVxcdHNldF9iaXQoRlJfU0VOVCwgXFx1MDAyNnJlcS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xODYwPXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X2RvX3dyaXRlKHN0cnVjdCBmdXNlX2RldiAqZnVkLFxcbi0tXFxuZnMvZnVzZS9kZXYuYy0xOTE3LVxcdGlmIChvaC51bmlxdWUgXFx1MDAyNiBGVVNFX0lOVF9SRVFfQklUKSB7XFxuZnMvZnVzZS9kZXYuYzoxOTE4OlxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMTkxOS1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZnBxLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmZzL2Z1c2UvZGV2LmM9MjEyOT12b2lkIGZ1c2VfY2hhbl9hYm9ydChzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgYWJvcnRfd2l0aF9lcnIpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTIxNjEtXFx0XFx0XFx0XFx0XFx0c2V0X2JpdChGUl9QUklWQVRFLCBcXHUwMDI2cmVxLVxcdTAwM2VmbGFncyk7XFxuZnMvZnVzZS9kZXYuYzoyMTYyOlxcdFxcdFxcdFxcdFxcdF9fZnVzZV9nZXRfcmVxdWVzdChyZXEpO1xcbmZzL2Z1c2UvZGV2LmMtMjE2My1cXHRcXHRcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNnJlcS1cXHUwMDNlbGlzdCwgXFx1MDAyNnRvX2VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjQyLjI3MzU2MzQxNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk2MTQ1MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmxlY3Rpbmcgb24gQVBJIERlc2lnbjogU3RhdGljIHZzLiBOb24tU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgZW1waGFzaXplcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgdXNlIG9mIGBmdXNlX2dldF9yZXFgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEl0J3Mgc3RhdGljLCB3aGljaCBnb2VzIGFnYWluc3QgdGhlIGd1aWRlbGluZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpbmQgYSBzdWl0YWJsZSByZXBsYWNlbWVudC4gVGhpbmtpbmcgYWJvdXQgaXQsIHRoZSBgZnVzZV9jaGFuX3NlbmRgLCBgZnVzZV9jaGFuX3NlbmRfYmdgLCBhbmQgYGZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseWAgZnVuY3Rpb25zIGNvbWUgdG8gbWluZC4gVGhlc2Ugc2VlbSBsaWtlIG1vcmUgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gTm93LCBhIGNydWNpYWwgY2hlY2s6IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGZ1c2VfY2hhbl9zZW5kYCBpc24ndCBzdGF0aWMuIEl0IHdvdWxkIGJlIGNvdW50ZXJwcm9kdWN0aXZlIHRvIHN3YXAgYSBzdGF0aWMgZnVuY3Rpb24gZm9yIGFub3RoZXIgc3RhdGljIG9uZSEgVG8gZnVydGhlciBpbnZlc3RpZ2F0ZSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBhbmQgZ2V0IGEgZ3Jhc3Agb2Ygb3RoZXIgd2VsbCBpbXBsZW1lbnRlZCBBUElzLCBJJ2xsIHRha2UgYSBsb29rIGF0IGBuZXQvc3VucnBjL3NjaGVkLmNgIGFuZCBzcGVjaWZpY2FsbHkgYXQgYF9fcnBjX2V4ZWN1dGVgIGFzIEkga25vdyB0aGF0IGl0IGhhbmRsZXMgdGhlc2UgdHlwZXMgb2Ygc2l0dWF0aW9ucyBhbmQgc2hvdWxkIGhhdmUgYSBnb29kIHBhdHRlcm4gdG8gZm9sbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo0Ni4wNjk3MTA1NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTEwNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcnBjX2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zY2hlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc2NoZWQuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwocnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXFxubmV0L3N1bnJwYy9zY2hlZC5jOjM1NzogKiB3aGljaCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgX19ycGNfZXhlY3V0ZSgpIGRvZXNuJ3QgbG9vcCAoZHVlIHRvIHRoZVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTgtICogbG9ja2xlc3MgUlBDX0lTX1FVRVVFRCgpIHRlc3QpIGJlZm9yZSB3ZSd2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy05MDgtICovXFxubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYz0xMDE1PXZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjItXFx0XFx0dW5zaWduZWQgaW50IHBmbGFncyA9IG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDIzOlxcdFxcdF9fcnBjX2V4ZWN1dGUodGFzayk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMjQtXFx0XFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmM9MTAyOD1zdGF0aWMgdm9pZCBycGNfYXN5bmNfc2NoZWR1bGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzEtXFxubmV0L3N1bnJwYy9zY2hlZC5jOjEwMzI6XFx0X19ycGNfZXhlY3V0ZShjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspKTtcXG5uZXQvc3VucnBjL3NjaGVkLmMtMTAzMy1cXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUocGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NDYuMTU1ODI1OTY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NDUwODYyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogQVBJIEVudHJ5cG9pbnRzIGZvciBQb3dlciBNYW5hZ2VtZW50KipcblxuT2theSwgaGVyZSdzIG15IHBsYW4gZm9yIGZ1enppbmcgdGhlc2UgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEZpcnN0LCBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgaW5pdGlhbCBwb2ludCBhYm91dCBgX19ycGNfZXhlY3V0ZWAgYmVpbmcgc3RhdGljLiBXZSBzaG91bGQgZGVmaW5pdGVseSBnbyB3aXRoIGBycGNfZXhlY3V0ZWAgaW5zdGVhZDsgdGhhdCdzIHRoZSBub24tc3RhdGljIHZlcnNpb24uIE1vdmluZyBvbiwgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAuIFRoZXkncmUgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZS4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCB3aGlsZSB0aGV5J3JlIHN0YXRpYywgdGhleSdyZSBub3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBkaXJlY3QgaGFuZGxlcnMgZm9yIHdyaXRlcyB0byB0aGUgc3lzZnMgZmlsZXMuIFRoZXkgYXJlIHRoZSBBUEkgZW50cnlwb2ludHMgZm9yIHRoZXNlIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMuXG5cblRoZSBrZXkgaXMgdGhhdCBTeXNmcyBzdG9yZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB2aWEgVkZTLCBzbyB5ZXMsIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFNvLCBsaXN0aW5nIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGhlcmUuIFRob3VnaCwganVzdCB0byBiZSB0aG9yb3VnaCwgY291bGQgYHBtX2F1dG9zbGVlcF9zZXRfc3RhdGVgIG9yIGBwbV9zdXNwZW5kYCBiZSBiZXR0ZXI/IFVsdGltYXRlbHksIHRoZSBmdXp6aW5nIG5lZWRzIHRvIHRhcmdldCB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzIHdpdGhpbiBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCDigJMgdGhlIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzLiBTbywgdGhlIG9yaWdpbmFsIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHRoZSByaWdodCB0YXJnZXRzLlxuXG5JIGRvdWJsZS1jaGVja2VkIHRvIGNvbmZpcm0gdGhhdCBgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCBhcmUgc3RhdGljLiBZZXAsIHRoZXkgYXJlLiBCdXQsIGFnYWluLCB0aGV5IGFyZSAqdGhlKiBkaXJlY3QgaGFuZGxlcnMgZm9yIHRoZSBzeXNmcyB3cml0ZXMsIHRoZSBBUEkuIFRoZSBwcm9tcHQgc2FpZCB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgaXMgZmluZS4gSSdtIGdvaW5nIHRvIGxpc3QgdGhlbS5cblxuSSdtIGFsc28gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgUE1fU0xFRVBgLCBgUE1fQVVUT1NMRUVQYCwgYEZVU0VfRlNgLCBhbmQgYFNVTlJQQ2Ag4oCTIGp1c3QgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIGNvbXByZWhlbnNpdmUgYW5kIGNvbnNpZGVycyB0aGUgcmVsZXZhbnQgb3B0aW9ucy5cblxuRmluYWxseSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgcmV2aXNpdCBga2VybmVsL3Bvd2VyL21haW4uY2AgdG8gY29uZmlybSB0aGUgbG9jYXRpb24gb2YgYHN0YXRlX3N0b3JlYCBhbmQgZW5zdXJlIEkgaGF2ZSBldmVyeXRoaW5nIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzI5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjI5OjUzLjcwMDkxNTA4MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDE5NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL21haW4uYz03NzM9c3RhdGljIHN1c3BlbmRfc3RhdGVfdCBkZWNvZGVfc3RhdGUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG4tLVxcbmtlcm5lbC9wb3dlci9tYWluLmMtNzk5LVxcbmtlcm5lbC9wb3dlci9tYWluLmM6ODAwOnN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxua2VybmVsL3Bvd2VyL21haW4uYy04MDEtXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTMuOTEzOTQxMjE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDk4OTUzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgU3RhdGljIE5hdHVyZSBvZiBgc3RhdGVfc3RvcmVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgYHN0YXRlX3N0b3JlYCBpcyBpbmRlZWQgc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIGFuZCBpdCdzIGdvdCBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGlzIGRhdGEgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQgd2l0aGluIHRoZSBGVVNFIGltcGxlbWVudGF0aW9uLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgdGhpcywgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgdGhlIEZVU0Uga2VybmVsIGRyaXZlci4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGZ1c2VfY2hhbl9zZW5kYCBhbmQgYGZ1c2VfY2hhbl9zZW5kX2JnYCBkZWZpbmVkIGluIGBmcy9mdXNlL2Rldi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBzdGF0ZV9zdG9yZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGRhdGEgY29ycnVwdGlvbiwgZ2l2ZW4gYHN0YXRlX3N0b3JlYCdzIHN0YXRpYyBzY29wZS4gVGhpcyBleHBsb3JhdGlvbiB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDoyOTo1Ny41NjM4Mzg3MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI3NDcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXNlX2NoYW5fc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9mdXNlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZGV2LmM9Nzk1PXN0YXRpYyB2b2lkIGZ1c2VfYXJnc190b19yZXEoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmdXNlX2FyZ3MgKmFyZ3MpXFxuLS1cXG5mcy9mdXNlL2Rldi5jLTgwOC1cXG5mcy9mdXNlL2Rldi5jOjgwOTpzc2l6ZV90IGZ1c2VfY2hhbl9zZW5kKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncylcXG5mcy9mdXNlL2Rldi5jLTgxMC17XFxuLS1cXG5mcy9mdXNlL2Rldi5jPTg2MT1zdGF0aWMgaW50IGZ1c2VfcmVxdWVzdF9xdWV1ZV9iYWNrZ3JvdW5kKHN0cnVjdCBmdXNlX3JlcSAqcmVxKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy04OTEtXFxuZnMvZnVzZS9kZXYuYzo4OTI6aW50IGZ1c2VfY2hhbl9zZW5kX2JnKHN0cnVjdCBmdXNlX2NoYW4gKmZjaCwgc3RydWN0IGZ1c2VfYXJncyAqYXJncywgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbmZzL2Z1c2UvZGV2LmMtODkzLXtcXG4tLVxcbmZzL2Z1c2UvZGV2LmMtOTE2LVxcbmZzL2Z1c2UvZGV2LmM6OTE3OmludCBmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHkoc3RydWN0IGZ1c2VfY2hhbiAqZmNoLCBzdHJ1Y3QgZnVzZV9hcmdzICphcmdzLCB1NjQgdW5pcXVlKVxcbmZzL2Z1c2UvZGV2LmMtOTE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6Mjk6NTcuNjcxMTE5NzcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTcwOTE4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBEeW5hbWljcyoqXG5cblJpZ2h0LCB0aGVzZSBvYnNlcnZhdGlvbnMgc3VnZ2VzdCBhIGR5bmFtaWMsIHBvdGVudGlhbGx5IGV2b2x2aW5nIHN0YXRlLiBUaGluZ3MgYXJlbid0IGZpeGVkOyB0aGV5J3JlIGluIGZsdXguIFRoZSBjbHVlIEkgbmVlZCB0byBiZWdpbiB3aXRoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGludG8gdGhlIGNvcmUsIHRoZSBtb3N0IGJhc2ljIHVuaXQgYW5kIHRoZSBoZWFydCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBoYW5kbGVkLCBzbyBsZXQncyBjaGVjayBgcnBjX2V4ZWN1dGVgIHdpdGhpbiBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgZXhlY3V0aW9uIG9mIFJQQyBjYWxscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gdGhlIGJhc2ljIG1lY2hhbmlzbSBhbmQgaG93IHRoZXNlIGR5bmFtaWMgYmVoYXZpb3JzIGFyZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjAxLjIyODIxNDUzNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNzIxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBjX2V4ZWN1dGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zY2hlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc2NoZWQuYz0zNDg9RVhQT1JUX1NZTUJPTF9HUEwocnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayk7XFxuLS1cXG5uZXQvc3VucnBjL3NjaGVkLmMtMzU2LSAqIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHJwY190ZXN0X2FuZF9zZXRfcnVubmluZygpIGFuZCBycGNfY2xlYXJfcXVldWVkKCksXFxubmV0L3N1bnJwYy9zY2hlZC5jOjM1NzogKiB3aGljaCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgX19ycGNfZXhlY3V0ZSgpIGRvZXNuJ3QgbG9vcCAoZHVlIHRvIHRoZVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0zNTgtICogbG9ja2xlc3MgUlBDX0lTX1FVRVVFRCgpIHRlc3QpIGJlZm9yZSB3ZSd2ZSBoYWQgYSBjaGFuY2UgdG8gdGVzdFxcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTg5Nz1zdGF0aWMgYm9vbCB4cHJ0X25lZWRzX21lbWFsbG9jKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0aylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy05MDgtICovXFxubmV0L3N1bnJwYy9zY2hlZC5jOjkwOTpzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcXG5uZXQvc3VucnBjL3NjaGVkLmMtOTEwLXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDE0LSAqL1xcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDE1OnZvaWQgcnBjX2V4ZWN1dGUoc3RydWN0IHJwY190YXNrICp0YXNrKVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDE2LXtcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDIyLVxcdFxcdHVuc2lnbmVkIGludCBwZmxhZ3MgPSBtZW1hbGxvY19ub2ZzX3NhdmUoKTtcXG5uZXQvc3VucnBjL3NjaGVkLmM6MTAyMzpcXHRcXHRfX3JwY19leGVjdXRlKHRhc2spO1xcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDI0LVxcdFxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShwZmxhZ3MpO1xcbi0tXFxubmV0L3N1bnJwYy9zY2hlZC5jPTEwMjg9c3RhdGljIHZvaWQgcnBjX2FzeW5jX3NjaGVkdWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zdW5ycGMvc2NoZWQuYy0xMDMxLVxcbm5ldC9zdW5ycGMvc2NoZWQuYzoxMDMyOlxcdF9fcnBjX2V4ZWN1dGUoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBycGNfdGFzaywgdS50a193b3JrKSk7XFxubmV0L3N1bnJwYy9zY2hlZC5jLTEwMzMtXFx0bWVtYWxsb2Nfbm9mc19yZXN0b3JlKHBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjAxLjI4NjI5MzYyM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDYxNDMzMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBvd2VyIE1hbmFnZW1lbnQgUmVsYXRlZCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGBycGNfZXhlY3V0ZWAgaXNuJ3Qgc3RhdGljLCBtZWFuaW5nIGl0J3MgZXh0ZXJuYWxseSB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSBjYWxsZWQgZnJvbSB2YXJpb3VzIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBwb3dlciBtYW5hZ2VtZW50IGNvbnRleHQuIEdpdmVuIHRoaXMsIG15IGF0dGVudGlvbiBpcyBub3cgZHJhd24gdG8gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgc3RhdGVfc3RvcmVgLCBgYXV0b3NsZWVwX3N0b3JlYCwgYGZ1c2VfY2hhbl9zZW5kYCwgYGZ1c2VfY2hhbl9zZW5kX2JnYCwgYGZ1c2VfY2hhbl9zZW5kX25vdGlmeV9yZXBseWAsIGFuZCBvZiBjb3Vyc2UsIGBycGNfZXhlY3V0ZWAgaXRzZWxmLlxuXG5UaGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHN0YXRlX3N0b3JlYCBhbmQgYGF1dG9zbGVlcF9zdG9yZWAgYXJlIGluZGVlZCB0aGUgY29yZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBjaGFuZ2VzLiBDb25zaWRlcmluZyBJIHdhcyBpbnZvbHZlZCB3aXRoIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgYSBzaW1wbGUgdmFsaWRhdGlvbi4gWXVwLCB0aG9zZSBhcmUgdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCwgc28gdGhpcyBoZWxwcy5cblxuTm93LCBsZXQncyBjb3JyZWxhdGUgdGhlc2Ugc3ltYm9scyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbnMuIEknbSBmb2N1c2luZyBvbiBgUE1fU0xFRVBgLCBgUE1fQVVUT1NMRUVQYCwgYEZVU0VfRlNgLCBhbmQgYFNVTlJQQ2AuIFdlIGFyZSBleHBlY3RpbmcgdGhhdCB0aGUgcG93ZXIgbWFuYWdlbWVudCB3aWxsIG5lZWQgdG8gY2hhbmdlIGFjY29yZGluZyB0byBob3cgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBiZWhhdmVzLlxuXG5JJ2xsIHZlcmlmeSB0aGF0IGBQTV9TTEVFUGAgYW5kIGBQTV9BVVRPU0xFRVBgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIHNob3dzIGAjaWZkZWYgQ09ORklHX1BNX1NMRUVQYCBjb25kaXRpb25zIGFyb3VuZCBib3RoIGBzdGF0ZV9zdG9yZWAgYW5kIGBhdXRvc2xlZXBfc3RvcmVgLiBgUE1fQVVUT1NMRUVQYCBhbHNvIGNvbmRpdGlvbmFsbHkgc3Vycm91bmRzIGBhdXRvc2xlZXBfc3RvcmVgLiBUaGlzIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRoZSBvdmVyYWxsIGdvYWxzLiBgRlVTRV9GU2AgaXMgZXhwZWN0ZWQgZm9yIEZVU0UgZmlsZXN5c3RlbSBpbnRlZ3JhdGlvbiwgYW5kIGBTVU5SUENgIHJlbGF0ZXMgdG8gdGhlIFNVTlJQQyBzdWJzeXN0ZW0sIGFzIGV4cGVjdGVkLlxuXG5Gb3IgRlVTRSwgSSdsbCBxdWlja2x5IGNoZWNrIGBmcy9mdXNlL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGRldGFpbHMgYXJvdW5kIGBGVVNFX0ZTYC4gVGhpcyBpcyBqdXN0IGdvb2QgcHJhY3RpY2UgYW5kIHdpbGwgY29uZmlybSBteSBleGlzdGluZyBrbm93bGVkZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjA4LjM0NzczMDMxOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDkyNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MDguNDU4ODI5NDI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODU2MTM1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgU1VOUlBDKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFNVTlJQQ2Agd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRoZSBgbmV0L3N1bnJwYy9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGBuZXRgIGlzIG5ldHdvcmstcmVsYXRlZCwgYW5kIGBzdW5ycGNgLi4uIHdlbGwsIHRoYXTigJlzIHNlbGYtZXhwbGFuYXRvcnkuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBjb250YWluIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgZGVwZW5kZW5jaWVzLCBhbmQgZGVzY3JpcHRpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgU1VOUlBDYCBpcyBidWlsdCBhbmQgZW5hYmxlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjExLjc0NDQ0NTQ0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjQ4MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVU5SUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMzUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcXG5uZXQvc3VucnBjL0tjb25maWctMzctXFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNDktXFxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0VcXG5uZXQvc3VucnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNjMtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXFxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MTEuODU2Njk5NDA0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTAzNTc1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBTVU5SUENgIGlzIG9uZSBvZiB0aG9zZSBzZXR0aW5ncyB0aGF0IGdldHMgZmxpcHBlZCBvbiwgb3Igb2ZmLCBkZXBlbmRpbmcgb24gYSBmZXcga2V5IGZhY3RvcnMuIFR5cGljYWxseSwgaXQncyBsaW5rZWQgdG8gZWl0aGVyIGBORlNfRlNgIG9yIGBORlNEYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBzdGF0ZSwgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGhhdmUgYSBoYW5kIGluIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgb2J2aW91cyBwbGFjZSB0byBsb29rIGlzIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AuIEknbSBwcmV0dHkgc3VyZSBJJ2xsIGZpbmQgc29tZXRoaW5nIGxpa2UgYFBNX1NMRUVQYCBvciBgUE1fQVVUT1NMRUVQYCBpbiB0aGVyZSwgdGhvdWdoIEknbSBub3QgZW50aXJlbHkgc3VyZSBob3cgdGhlc2UgbWlnaHQgaW5mbHVlbmNlIGBTVU5SUENgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjE1LjU2NzA1OTU2MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc5MTA0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBNX1NMRUVQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnPTExOD1jb25maWcgUE1fU1REX1BBUlRJVElPTlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTM5LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjE0MDpjb25maWcgUE1fU0xFRVBcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNDEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTQ0LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjE0NTpjb25maWcgUE1fU0xFRVBfU01QXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTQ2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTE1MS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxNTI6Y29uZmlnIFBNX1NMRUVQX1NNUF9OT05aRVJPX0NQVVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTE1My1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0yNDY9Y29uZmlnIFBNX1RFU1RfU1VTUEVORFxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMjU2LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjI1Nzpjb25maWcgUE1fU0xFRVBfREVCVUdcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0yNTgtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDozMDoxNS42NTQ5NzYyNTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5MTE5MTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIHBocmFzZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUE1fU0xFRVAgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gYFBNX1NMRUVQYCBpcyBnb2luZyB0byBiZSBkZWZpbmVkIGFzICd5ZXMnIChgZGVmX2Jvb2wgeWApLCBhbmQgdGhhdCBoaW5nZXMgZGlyZWN0bHkgb24gdGhlIHByZXNlbmNlIG9mIGVpdGhlciBgU1VTUEVORGAgb3IgYEhJQkVSTkFURV9DQUxMQkFDS1NgLiBNYWtlcyBwZXJmZWN0IHNlbnNlOyBpZiBlaXRoZXIgb2YgdGhvc2UgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgdGhlbiBvYnZpb3VzbHkgdGhlIHN5c3RlbSBpcyBjYXBhYmxlIG9mIGVudGVyaW5nIGEgc2xlZXAgc3RhdGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgUE1fQVVUT1NMRUVQYCBhcyBpdCdzIGxpa2VseSBpbXBhY3RlZCBieSB3aGV0aGVyIG9yIG5vdCBgUE1fU0xFRVBgIGlzIGFjdGl2ZS4gSSB3YW50IHRvIGhhdmUgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdWxsIHBvd2VyIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMDozMDoxOS44NDYxNzExMTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE2NjM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUE1fQVVUT1NMRUVQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnPTE1Mj1jb25maWcgUE1fU0xFRVBfU01QX05PTlpFUk9fQ1BVXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNjAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTYxOmNvbmZpZyBQTV9BVVRPU0xFRVBcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xNjItXFx0Ym9vbCBcXFwiT3Bwb3J0dW5pc3RpYyBzbGVlcFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTA6MzA6MTkuOTU3MzQxNjQ5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzU1MDQ3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IGFzc2Vzc21lbnQuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBQTV9BVVRPU0xFRVBgIGlzIGEgdmFsaWQgY29uZmlnIG5vdywgZ29vZCB0byBrbm93LiBJJ3ZlIHJlLWV4YW1pbmVkIGBmcy9mdXNlL2Rldi5jYCBhbmQgc3BvdHRlZCB0aGUgY2hhbmdlIHdpdGhpbiBgZnVzZV9nZXRfcmVxYC4gVGhlIGtleSBoZXJlIGlzIHRoZSB0YXNrIHN0YXRlIG1vZGlmaWNhdGlvbiwgY2hhbmdpbmcgdGhlIHdhaXQgZXZlbnQgZnJvbSBgVEFTS19GUkVFWkFCTEVgIHRvIGBUQVNLX0ZSRUVaQUJMRV9VTlNBRkVgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgYW5kIHNvbWV0aGluZyB0byB3YXRjaCBvdXQgZm9yLlxuXG5UaGVuIEkgY2hlY2tlZCBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gIExvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNpbWlsYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYF9fcnBjX2V4ZWN1dGVgIHdoZXJlIGBUQVNLX0ZSRUVaQUJMRWAgYWxzbyBnZXRzIGJ1bXBlZCB0byBgVEFTS19GUkVFWkFCTEVfVU5TQUZFYC4gIEFnYWluLCBnb29kLiAgSSBsaWtlIHRoYXQgaXQncyBjb25zaXN0ZW50LlxuXG5OZXh0LCB0aGUgY2hhbmdlcyBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIEEgY2FwYWJpbGl0eSBjaGVjayBoYXMgYmVlbiBhZGRlZCBiZWZvcmUgYSBzdXNwZW5kIG9wZXJhdGlvbiwgYW5kIHRoZXJlJ3MgYWxzbyBhIGNoZWNrIGZvciB3YWtldXAgc291cmNlcyBpbiBgc3RhdGVfc3RvcmVgLiBTZWVtcyBsaWtlIHRoZSBpZGVhIGlzIHRvIGVuaGFuY2UgdGhlIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgb2YgdGhlIHN1c3BlbmQgcHJvY2Vzcy5cblxuQWxsIG9mIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBzeXN0ZW1zLCB3aXRoIG1vZGlmaWNhdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlciBzcGFjZSwgYW5kIHRodXMgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXM6XG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcblxuU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBmb2N1cyBvbiBmdXp6aW5nIHRoZXNlIHN5bWJvbHM6XG4qICAgYHN0YXRlX3N0b3JlYFxuKiAgIGBhdXRvc2xlZXBfc3RvcmVgXG4qICAgYGZ1c2VfY2hhbl9zZW5kYFxuKiAgIGBmdXNlX2NoYW5fc2VuZF9iZ2BcbiogICBgZnVzZV9jaGFuX3NlbmRfbm90aWZ5X3JlcGx5YFxuKiAgIGBycGNfZXhlY3V0ZWBcblxuQW5kIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6XG4qICAgYFBNX1NMRUVQYFxuKiAgIGBQTV9BVVRPU0xFRVBgXG4qICAgYEZVU0VfRlNgXG4qICAgYFNVTlJQQ2BcblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIGluIHRoZSBGVVNFIGFuZCBTVU5SUEMgc3Vic3lzdGVtcyB0byB1c2UgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAgZHVyaW5nIHdhaXRzLiBJdCBhbHNvIGludHJvZHVjZXMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgaW4gdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyB1c2VkIGZvciBwb3dlciBtYW5hZ2VtZW50IChgc3RhdGVfc3RvcmVgIGFuZCBgYXV0b3NsZWVwX3N0b3JlYCkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCB3aWxsIG5lZWQgdG8gYmUgcGFydCBvZiBhbnkgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHRhc2sgc3RhdGUgY2hhbmdlcyBhcmUgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgb3BlbmluZyB1cCBuZXcgYXZlbnVlcyBmb3IgZXhwbG9pdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTUsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjMxMjM5MjcyNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTc4MTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUE1fU0xFRVBcIixcbiAgICBcIlBNX0FVVE9TTEVFUFwiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiU1VOUlBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhdGVfc3RvcmVcIixcbiAgICBcImF1dG9zbGVlcF9zdG9yZVwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX2JnXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlcIixcbiAgICBcInJwY19leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUE1fU0xFRVBcIixcbiAgICBcIlBNX0FVVE9TTEVFUFwiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiU1VOUlBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhdGVfc3RvcmVcIixcbiAgICBcImF1dG9zbGVlcF9zdG9yZVwiLFxuICAgIFwiZnVzZV9jaGFuX3NlbmRcIixcbiAgICBcImZ1c2VfY2hhbl9zZW5kX2JnXCIsXG4gICAgXCJmdXNlX2NoYW5fc2VuZF9ub3RpZnlfcmVwbHlcIixcbiAgICBcInJwY19leGVjdXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyBpbiBGVVNFIGFuZCBTVU5SUEMgdG8gdXNlIFRBU0tfRlJFRVpBQkxFX1VOU0FGRSBkdXJpbmcgd2FpdHMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHRoZSBwb3dlciBtYW5hZ2VtZW50IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyAoc3RhdGVfc3RvcmUgYW5kIGF1dG9zbGVlcF9zdG9yZSkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgc3Vic3lzdGVtcyBhbmQgZHJpdmVycyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjQ2MjE4MTcwMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1Mzc3MTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjQ2MjcxODU1MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NDUzMjMwNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE5Y2Q2ZGJmZjI3Y2ZlNTJjMTFlMjE0MTMyYjdkNjg2MTgxN2VhZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEwOjI4OjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kZXYuYyBiL2ZzL2Z1c2UvZGV2LmNcbmluZGV4IDU3NjNhN2NkM2IzN2YuLjllOGRjOTZkMjRmMTggMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rldi5jXG4rKysgYi9mcy9mdXNlL2Rldi5jXG5AQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZnVzZV9yZXEgKmZ1c2VfZ2V0X3JlcShzdHJ1Y3QgZnVzZV9jaGFuICpmY2gsIGJvb2wgZm9yX2JhY2tncm91bmQpXG4gXHRcdGVyciA9IC1FSU5UUjtcbiBcdFx0aWYgKHdhaXRfZXZlbnRfc3RhdGVfZXhjbHVzaXZlKGZjaC1cdTAwM2VibG9ja2VkX3dhaXRxLFxuIFx0XHRcdFx0IWZ1c2VfYmxvY2tfYWxsb2MoZmNoLCBmb3JfYmFja2dyb3VuZCksXG4tXHRcdFx0XHQoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFKSkpXG4rXHRcdFx0XHQoVEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSkpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jXG5pbmRleCA1NDI5ZTlmMTliNjU1Li43ODBhZmRhMTE3NjU2IDEwMDY0NFxuLS0tIGEva2VybmVsL3Bvd2VyL21haW4uY1xuKysrIGIva2VybmVsL3Bvd2VyL21haW4uY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3dha2V1cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJwb3dlci5oXCJcbiBcbkBAIC04MDIsNiArODAzLDIyIEBAIHN0YXRpYyBzc2l6ZV90IHN0YXRlX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4gXHRzdXNwZW5kX3N0YXRlX3Qgc3RhdGU7XG4gXHRpbnQgZXJyb3I7XG4gXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aW50IGlkeDtcbitcdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbisjZW5kaWZcbitcbitcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbitcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuK1x0d3MgPSB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KCk7XG4rXHR3YWtldXBfc291cmNlc19yZWFkX3VubG9jayhpZHgpO1xuK1x0aWYgKCF3cylcbitcdFx0cmV0dXJuIC1FUEVSTTtcbisjZW5kaWZcbitcbiBcdGVycm9yID0gcG1fYXV0b3NsZWVwX2xvY2soKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTkyOSw2ICs5NDYsMjQgQEAgc3RhdGljIHNzaXplX3QgYXV0b3NsZWVwX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0c3VzcGVuZF9zdGF0ZV90IHN0YXRlID0gZGVjb2RlX3N0YXRlKGJ1Ziwgbik7XG4gXHRpbnQgZXJyb3I7XG4gXG4rI2lmZGVmIENPTkZJR19QTV9TTEVFUFxuK1x0aW50IGlkeDtcbitcdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbisjZW5kaWZcbitcbitcdGlmICghY2FwYWJsZShDQVBfU1lTX0JPT1QpKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbitcdGlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX09OKSB7XG4rXHRcdGlkeCA9IHdha2V1cF9zb3VyY2VzX3JlYWRfbG9jaygpO1xuK1x0XHR3cyA9IHdha2V1cF9zb3VyY2VzX3dhbGtfc3RhcnQoKTtcbitcdFx0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbitcdFx0aWYgKCF3cylcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1x0fVxuKyNlbmRpZlxuK1xuIFx0aWYgKHN0YXRlID09IFBNX1NVU1BFTkRfT05cbiBcdCAgICBcdTAwMjZcdTAwMjYgc3RyY21wKGJ1ZiwgXCJvZmZcIikgXHUwMDI2XHUwMDI2IHN0cmNtcChidWYsIFwib2ZmXFxuXCIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmNcbmluZGV4IDAxNmYxNmNhNTc3OTkuLjQ5NDk0N2Q1MDlmM2MgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3NjaGVkLmNcbisrKyBiL25ldC9zdW5ycGMvc2NoZWQuY1xuQEAgLTk4NCw3ICs5ODQsNyBAQCBzdGF0aWMgdm9pZCBfX3JwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaylcbiBcdFx0dHJhY2VfcnBjX3Rhc2tfc3luY19zbGVlcCh0YXNrLCB0YXNrLVx1MDAzZXRrX2FjdGlvbik7XG4gXHRcdHN0YXR1cyA9IG91dF9vZl9saW5lX3dhaXRfb25fYml0KFx1MDAyNnRhc2stXHUwMDNldGtfcnVuc3RhdGUsXG4gXHRcdFx0XHRSUENfVEFTS19RVUVVRUQsIHJwY193YWl0X2JpdF9raWxsYWJsZSxcbi1cdFx0XHRcdFRBU0tfS0lMTEFCTEV8VEFTS19GUkVFWkFCTEUpO1xuK1x0XHRcdFx0VEFTS19LSUxMQUJMRSB8IFRBU0tfRlJFRVpBQkxFX1VOU0FGRSk7XG4gXHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdoZW4gYSBzeW5jIHRhc2sgcmVjZWl2ZXMgYSBzaWduYWwsIGl0IGV4aXRzIHdpdGhcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjMwLjQ2MjcxOTQ4MloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDUzMjA1MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrOiBObyBJc3N1ZXMgRGV0ZWN0ZWQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyB0aHJlZSBmaWxlczogYGZzL2Z1c2UvZGV2LmNgLCBga2VybmVsL3Bvd2VyL21haW4uY2AsIGFuZCBgbmV0L3N1bnJwYy9zY2hlZC5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBqdXN0IHR3ZWFraW5nIHNvbWUgdGFzayBzdGF0ZXMgaW4gYGZzL2Z1c2UvZGV2LmNgIGFuZCBgbmV0L3N1bnJwYy9zY2hlZC5jYCwgc3dhcHBpbmcgYFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfRlJFRVpBQkxFX1VOU0FGRWAsIGFuZCB0aGVuLCBpbiBga2VybmVsL3Bvd2VyL21haW4uY2AsIHdlJ3JlIGFkZGluZyBzb21lIGNoZWNrcyBhcm91bmQgcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHkgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIG15IGluaXRpYWwgZmVlbGluZyBpcyB0aGF0IHRoaXMgZG9lc24ndCB3YXJyYW50IEtNU0FOIGF0dGVudGlvbi4gTm90aGluZyBzY3JlYW1zIFwidW5pbml0aWFsaXplZCBtZW1vcnksXCIgbm8gaW50cmljYXRlLCBwb3RlbnRpYWxseS1wYXJ0aWFsbHktaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgY2VydGFpbmx5IG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3MgYXJlIHByZXNlbnQgaW4gdGhlIGNvZGUuIEl0IHNlZW1zIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBmbGFnIGFkanVzdG1lbnRzIG9yIHRoZSBhZGRpdGlvbiBvZiBzZWN1cml0eSBhbmQgcG93ZXIgbWFuYWdlbWVudCBjaGVja3MuXG5cblRvIGJlIGV4dHJhIGNlcnRhaW4sIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBga2VybmVsL3Bvd2VyL21haW4uY2AgY2hhbmdlLiBMZXQncyBzZWUuLi5cblxuYGBgY1xuKyNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbitcdGludCBpZHg7XG4rXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4rI2VuZGlmXG4rXG4rXHRpZiAoIWNhcGFibGUoQ0FQX1NZU19CT09UKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbisjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4rXHRpZHggPSB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKTtcbitcdHdzID0gd2FrZXVwX3NvdXJjZXNfd2Fsa19zdGFydCgpO1xuK1x0d2FrZXVwX3NvdXJjZXNfcmVhZF91bmxvY2soaWR4KTtcbitcdGlmICghd3MpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rI2VuZGlmXG5gYGBcblxuT2theSwgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgdGhlIGBpZHhgIGFuZCBgd3NgIHZhcmlhYmxlcyB3aXRoIHRoZSByZXR1cm4gdmFsdWVzIG9mIGB3YWtldXBfc291cmNlc19yZWFkX2xvY2soKWAgYW5kIGB3YWtldXBfc291cmNlc193YWxrX3N0YXJ0KClgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHJldHVybiB3ZWxsLWRlZmluZWQgdmFsdWVzIG9yIGhhbmRsZSBlcnJvcnMsIHNvIGFueSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgbG9va3MgdG8gYmUgYXZvaWRlZC4gVGhlIG90aGVyIGZpbGUgY2hhbmdlcyBhcmUganVzdCB0aG9zZSBmbGFnIGFkanVzdG1lbnRzLCB3aGljaCBhcmUgdW5saWtlbHkgdG8gY2F1c2UgYW55IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQncyBwcmV0dHkgY2xlYXIgdG8gbWUgdGhhdCB3ZSBkb24ndCBuZWVkIEtNU0FOIGhlcmUuICoqTmVlZHNLTVNBTiBpcyBGYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODIxLCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEwOjMwOjM4LjkxNTkyODE5NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGFzayBzdGF0ZSBmbGFncyAoVEFTS19GUkVFWkFCTEUgdG8gVEFTS19GUkVFWkFCTEVfVU5TQUZFKSBpbiBGVVNFIGFuZCBTdW5SUEMsIGFuZCBhZGRzIGNhcGFiaWxpdHkgYW5kIHdha2V1cCBzb3VyY2UgY2hlY2tzIHRvIHBvd2VyIG1hbmFnZW1lbnQgc3lzZnMgYXR0cmlidXRlcy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0YXNrIHN0YXRlIGZsYWdzIChUQVNLX0ZSRUVaQUJMRSB0byBUQVNLX0ZSRUVaQUJMRV9VTlNBRkUpIGluIEZVU0UgYW5kIFN1blJQQywgYW5kIGFkZHMgY2FwYWJpbGl0eSBhbmQgd2FrZXVwIHNvdXJjZSBjaGVja3MgdG8gcG93ZXIgbWFuYWdlbWVudCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[1] Phase: Succeeded StartedAt: 2026-08-07 10:30:50 +0000 UTC FinishedAt: 2026-08-07 10:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 10:30:50 +0000 UTC FinishedAt: 2026-08-07 10:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2] Phase: Succeeded StartedAt: 2026-08-07 10:30:50 +0000 UTC FinishedAt: 2026-08-07 14:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 10:30:50 +0000 UTC FinishedAt: 2026-08-07 14:18:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 10:30:50 +0000 UTC FinishedAt: 2026-08-07 10:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 10:30:50 +0000 UTC FinishedAt: 2026-08-07 10:30:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdh6vm/series-workflowdh6vm-convert-artifact-211642866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 10:31:00 +0000 UTC FinishedAt: 2026-08-07 10:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 10:31:00 +0000 UTC FinishedAt: 2026-08-07 10:52:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bbf4cf48-2954-4265-89ee-fa4f367f1899,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-workflowdh6vm/series-workflowdh6vm-convert-artifact-211642866/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": "a818fe73-a607-40e6-8455-e21cf9ec525a", "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-workflowdh6vm/series-workflowdh6vm-build-action-2609836400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 10:31:00 +0000 UTC FinishedAt: 2026-08-07 10:52:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bbf4cf48-2954-4265-89ee-fa4f367f1899,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-workflowdh6vm/series-workflowdh6vm-convert-artifact-211642866/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": "a818fe73-a607-40e6-8455-e21cf9ec525a", "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-workflowdh6vm/series-workflowdh6vm-build-action-2609836400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 10:52:40 +0000 UTC FinishedAt: 2026-08-07 10:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 10:52:40 +0000 UTC FinishedAt: 2026-08-07 10:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 10:52:40 +0000 UTC FinishedAt: 2026-08-07 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 10:52:40 +0000 UTC FinishedAt: 2026-08-07 10:52:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdh6vm/series-workflowdh6vm-convert-artifact-395316237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 10:52:50 +0000 UTC FinishedAt: 2026-08-07 10:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 10:52:50 +0000 UTC FinishedAt: 2026-08-07 10:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a818fe73-a607-40e6-8455-e21cf9ec525a,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-workflowdh6vm/series-workflowdh6vm-build-action-2609836400/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-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 10:55:18 +0000 UTC FinishedAt: 2026-08-07 10:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 10:55:18 +0000 UTC FinishedAt: 2026-08-07 10:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 10:55:18 +0000 UTC FinishedAt: 2026-08-07 11:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 10:55:18 +0000 UTC FinishedAt: 2026-08-07 11:11:28 +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:*bbf4cf48-2954-4265-89ee-fa4f367f1899,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-workflowdh6vm/series-workflowdh6vm-convert-artifact-395316237/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": "2ee011a7-7236-49d4-b5c5-df011b08844c", "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-workflowdh6vm/series-workflowdh6vm-build-action-2847971817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 10:55:18 +0000 UTC FinishedAt: 2026-08-07 11:11:18 +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:*bbf4cf48-2954-4265-89ee-fa4f367f1899,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-workflowdh6vm/series-workflowdh6vm-convert-artifact-395316237/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": "2ee011a7-7236-49d4-b5c5-df011b08844c", "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-workflowdh6vm/series-workflowdh6vm-build-action-2847971817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 11:11:28 +0000 UTC FinishedAt: 2026-08-07 11:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 11:11:28 +0000 UTC FinishedAt: 2026-08-07 11:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 11:11:28 +0000 UTC FinishedAt: 2026-08-07 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 11:11:28 +0000 UTC FinishedAt: 2026-08-07 11:13:41 +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:*2ee011a7-7236-49d4-b5c5-df011b08844c,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-workflowdh6vm/series-workflowdh6vm-build-action-2847971817/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-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 14:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 14:18:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"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:*a818fe73-a607-40e6-8455-e21cf9ec525a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ee011a7-7236-49d4-b5c5-df011b08844c,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-workflowdh6vm/series-workflowdh6vm-build-action-2609836400/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-workflowdh6vm/series-workflowdh6vm-build-action-2847971817/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 11:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 11:13:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"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-workflowdh6vm/series-workflowdh6vm-convert-artifact-592317426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 11:13:51 +0000 UTC FinishedAt: 2026-08-07 11:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 11:14:01 +0000 UTC FinishedAt: 2026-08-07 14:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdh6vm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["state_store","autosleep_store","fuse_chan_send","fuse_chan_send_bg","fuse_chan_send_notify_reply","rpc_execute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["PM_SLEEP","PM_AUTOSLEEP","FUSE_FS","SUNRPC"],"series_id":"a76d5ef8-004d-4459-83dc-4807a2d5f45a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 11:14:01 +0000 UTC FinishedAt: 2026-08-07 14:17:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a818fe73-a607-40e6-8455-e21cf9ec525a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ee011a7-7236-49d4-b5c5-df011b08844c,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-workflowdh6vm/series-workflowdh6vm-build-action-2609836400/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-workflowdh6vm/series-workflowdh6vm-build-action-2847971817/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-workflowdh6vm/series-workflowdh6vm-convert-artifact-592317426/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,}