Name: series-workflowlk2sp Phase: Succeeded StartedAt: 2026-09-05 04:45:49 +0000 UTC FinishedAt: 2026-09-05 09:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[0] Phase: Succeeded StartedAt: 2026-09-05 04:45:49 +0000 UTC FinishedAt: 2026-09-05 05:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 04:45:49 +0000 UTC FinishedAt: 2026-09-05 05:29:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "6262acad9db197b5ed12e3b245d2e6d0c80fb960", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "6262acad9db197b5ed12e3b245d2e6d0c80fb960", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL", "MAC80211" ], "series_id": "87ed9fd2-65f2-401a-a24d-e18fb558f771" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "codel_qdisc_dequeue", "codel_peek", "codel_change", "fq_codel_dequeue", "fq_codel_peek", "fq_codel_change", "fq_tin_dequeue_func" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RlbF9xZGlzY19kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2NvZGVsX3BlZWsmIzM0OywKICAgICYjMzQ7Y29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfcGVlayYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfdGluX2RlcXVldWVfZnVuYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBxdWV1ZSBkaXNjaXBsaW5lIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2FsbHkgY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oKSB0byBwcmV2ZW50IGluZmluaXRlIGRyb3BwaW5nIGxvb3BzL3NvZnQgbG9ja3VwcyBjYXVzZWQgYnkgc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGJhY2tsb2dzLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2sgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRyb3BzIHBlciBkZXF1ZXVlIGl0ZXJhdGlvbi5cblxuVGhlIG9ubHkgbmV3IGxvY2FsIHZhcmlhYmxlIGludHJvZHVjZWQgKGBkcm9wc2ApIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKSBpbXBsZW1lbnRhdGlvbiBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggKGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlKS4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyB0aW1lIHN0ZXAgdG8gYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgc3RhbGxzIG9uIHNtYWxsIGludGVydmFscyBvciBsYXJnZSBkcm9wIGNvdW50cywgYW5kIGludHJvZHVjZXMgYSBjYXAgb24gY29uc2VjdXRpdmUgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgZHJvcCBsb29wcyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWZmaWMgY29udHJvbCAoc2NoX2NvZGVsLCBzY2hfZnFfY29kZWwpIGFuZCBtYWM4MDIxMSB3aXJlbGVzcyBxdWV1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NDZhZmMyNjJiZGIyNGNkNTlmMmRhOGRlMzkwMzA0NWRhYWM2MGU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNToyNzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7XG4gLyogbmVlZGVkIHNoaWZ0IHRvIGdldCBhIFEwLjMyIG51bWJlciBmcm9tIHJlY19pbnZfc3FydCAqL1xuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxuIFxuJiM0MzsvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCYjMzk7cyB3b3JrIGRlcGVuZHMgb24gdGhlXG4mIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBjb2RlbF9zdGF0cyAtIGNvbnRhaW5zIGNvZGVsIHNoYXJlZCB2YXJpYWJsZXMgYW5kIHN0YXRzXG4gICogQG1heHBhY2tldDpcdGxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOWU3NzljZDRkNmRlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycylcbiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpXG4gICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcbiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cbiAgKi9cbiBzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxuIFx0XHRcdFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxuIFx0XHRcdFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcbiB7XG4tXHRyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4mIzQzO1x0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuJiM0MztcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTYsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gXHRjb2RlbF90aW1lX3Qgbm93O1xuIFx0Ym9vbCBkcm9wO1xuJiM0MztcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XG4gXG4gXHRpZiAoIXNrYikge1xuIFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuQEAgLTE4MCw2ICYjNDM7MTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRcdFx0ICovXG4gXHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbiYjNDM7XHRcdFx0XHRpZiAoJiM0MzsmIzQzO2Ryb3BzIFx1MDAzZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHtcbiYjNDM7XHRcdFx0XHRcdC8qIGZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUgKi9cbiYjNDM7XHRcdFx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wX25leHQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNvZGVsX2NvbnRyb2xfbGF3KG5vdyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZWludGVydmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgICB2YXJzLVx1MDAzZXJlY19pbnZfc3FydCkpO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcbiBcdFx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxuIFx0XHRcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5AQCAtMjEzLDUgJiM0MzsyMTMsNzcgQEBcbiAgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxcCB0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zXCYjMzQ7LFxuICAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiAgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDs2ZTQ0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDthOGMzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDthNjk1XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Y29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0Ozk3OTNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtjb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtc1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuICAgICB9XG4gXVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5pbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuQEAgLTMxNiw1ICYjNDM7MzE2LDc3IEBAXG4gICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuICAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiAgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDsxYjRkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZxX2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgNW1zIGludGVydmFsIDB1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7MzU0MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0OzQ5YzVcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0OzNlMGZcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCB0YXJnZXQgMXVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiAgICAgfVxuIF1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9DT0RFTCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29kZWxfcWRpc2NfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9wZWVrJiMzNDssCiAgICAmIzM0O2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX3BlZWsmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX3Rpbl9kZXF1ZXVlX2Z1bmMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIEFjdGl2ZSBRdWV1ZSBNYW5hZ2VtZW50IChBUU0pIGltcGxlbWVudGF0aW9uIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCAoY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUpLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IHRpbWUgc3RlcCB0byBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBzdGFsbHMgb24gc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGRyb3AgY291bnRzLCBhbmQgaW50cm9kdWNlcyBhIGNhcCBvbiBjb25zZWN1dGl2ZSBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBkcm9wIGxvb3BzIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgbG9naWMgYW5kIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdHJhZmZpYyBjb250cm9sIChzY2hfY29kZWwsIHNjaF9mcV9jb2RlbCkgYW5kIG1hYzgwMjExIHdpcmVsZXNzIHF1ZXVlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmFmYzI2MmJkYjI0Y2Q1OWYyZGE4ZGUzOTAzMDQ1ZGFhYzYwZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjI3OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbC5oCkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7CiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovCiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUykKIAomIzQzOy8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJiMzOTtzIHdvcmsgZGVwZW5kcyBvbiB0aGUKJiM0MzsgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTYKJiM0MzsKIC8qKgogICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHMKICAqIEBtYXhwYWNrZXQ6CWxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCmluZGV4IDJjMWYwZWMzMDllOWYuLjllNzc5Y2Q0ZDZkZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKQEAgLTkzLDEyICYjNDM7OTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpCiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpCiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWQKICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYQomIzQzOyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuCiAgKi8KIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsCiAJCQkJICAgICAgY29kZWxfdGltZV90IGludGVydmFsLAogCQkJCSAgICAgIHUzMiByZWNfaW52X3NxcnQpCiB7Ci0JcmV0dXJuIHQgJiM0MzsgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCk7CiYjNDM7CXJldHVybiB0ICYjNDM7IG1heF90KHUzMiwgMSwKJiM0MzsJCQkgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwKJiM0MzsJCQkJCSAgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCkpOwogfQogCiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU2LDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LAogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTsKIAljb2RlbF90aW1lX3Qgbm93OwogCWJvb2wgZHJvcDsKJiM0MzsJdW5zaWduZWQgaW50IGRyb3BzID0gMDsKIAogCWlmICghc2tiKSB7CiAJCXZhcnMtJmd0O2ZpcnN0X2Fib3ZlX3RpbWUgPSAwOwpAQCAtMTgwLDYgJiM0MzsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCwKIAkJCSAqLwogCQkJd2hpbGUgKHZhcnMtJmd0O2Ryb3BwaW5nICZhbXA7JmFtcDsKIAkJCSAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy0mZ3Q7ZHJvcF9uZXh0KSkgewomIzQzOwkJCQlpZiAoJiM0MzsmIzQzO2Ryb3BzICZndDsgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7CiYjNDM7CQkJCQkvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovCiYjNDM7CQkJCQlXUklURV9PTkNFKHZhcnMtJmd0O2Ryb3BfbmV4dCwKJiM0MzsJCQkJCQkgICBjb2RlbF9jb250cm9sX2xhdyhub3csCiYjNDM7CQkJCQkJCQkgICAgIHBhcmFtcy0mZ3Q7aW50ZXJ2YWwsCiYjNDM7CQkJCQkJCQkgICAgIHZhcnMtJmd0O3JlY19pbnZfc3FydCkpOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KIAkJCQkvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcAogCQkJCSAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KaW5kZXggNmQ1MTVkMGU1ZWQ2OS4uYTg5NGU2ZjBlMjY3NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCkBAIC0yMTMsNSAmIzQzOzIxMyw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAogICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzZlNDQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZCkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YThjMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDthNjk1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OTc5MyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgppbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KQEAgLTMxNiw1ICYjNDM7MzE2LDc3IEBACiAgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDsxYjRkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszNTQwJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs0OWM1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzNlMGYmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IENPREVMIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBhbmQgaWYgc28sIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGF0IGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYWZldHkgY2hlY2s7IHRoaXMgaXMgYSBzdGFuZGFyZCBzb2Z0d2FyZSBxdWFsaXR5IGFuYWx5c2lzIG9mIGEgTGludXgga2VybmVsIHBhdGNoLCBmb2N1c2luZyBvbiBkZWZlbnNpdmUgbWFpbnRlbmFuY2UgYW5kIHF1YWxpdHkgYXNzdXJhbmNlLCBzbyBpdCYjMzk7cyBhIGNvbXBsZXRlbHkgc2FmZSBhbmQgbmVjZXNzYXJ5IHRhc2suCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAsIGFuZCB0d28gdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIChgLmpzb25gKSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nYCBkaXJlY3RvcnkgcmVsYXRlZCB0byBgY29kZWxgIGFuZCBgZnFfY29kZWxgLgoKTG9va2luZyBhdCB0aGUga2VybmVsIGNvZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgdGhlcmUmIzM5O3MgYSBuZXcgbWFjcm8gZGVmaW5pdGlvbiBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIFRoZW4sIGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIHRoZSBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb25zLiBOb3RhYmx5LCB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBpcyBtb2RpZmllZCB0byB1c2UgYHJlY2lwcm9jYWxfc2NhbGVgIGNhbGN1bGF0aW9ucy4gVGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjb3VudGVyIChgZHJvcHNgKSBhbmQgYSBjaGVjayBhZ2FpbnN0IGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBhcmVhIG9mIGludGVyZXN0LCBlc3BlY2lhbGx5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBtYXhpbXVtIGRyb3BzIGxpbWl0LiBUaGVyZSYjMzk7cyBhIGB3aGlsZWAgbG9vcCB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgd2hpY2ggaW5jcmVtZW50IHRoZSBgZHJvcHNgIGNvdW50ZXIuCgpUbyB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBjb2RlbF9kZXF1ZXVlYCBpcyBjYWxsZWQgb3Igd2hlcmUgYGNvZGVsX2ltcGwuaGAgaXMgaW5jbHVkZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZG8gdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgdnVsbmVyYWJpbGl0eSB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zLiBJZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgY29kZWxfZGVxdWV1ZWAgYW5kIHRoZSBpbmNsdXNpb24gc2l0ZXMgb2YgYGNvZGVsX2ltcGwuaGAgd2lsbCBiZSBrZXkgaW4gZGV0ZXJtaW5pbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RlbF9pbXBsXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYy0yNS0jaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmM6MjY6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmMtMjctI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjItI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMzojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjQtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzUzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBDb2RlbCBhbmQgaXRzIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBDb0RlbCYjMzk7cyBwcmFjdGljYWwgYXBwbGljYXRpb24sIGVzcGVjaWFsbHkgdGhlIHNwZWNpZmljcyBvZiBpdHMgcXVldWluZyBhbmQgZGVxdWV1ZWluZyBtZWNoYW5pc21zLiBNeSBpbml0aWFsIHBsYW4gaXMgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgY29yZSBjb2RlIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCB0aGUgRmFpciBRdWV1aW5nIHZhcmlhbnQgaW4gYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AsIGFuZCB0aGUgcmVsZXZhbnQgdHJhbnNtaXNzaW9uIGFzcGVjdHMgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhlc2UgZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgQ29EZWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjaywgcGFydGljdWxhcmx5IGluIGRpZmZlcmVudCBjb250ZXh0cy4KClRvIGV4cGVkaXRlIHRoZSBwcm9jZXNzIGFuZCBwaW5wb2ludCB0aGUgY3JpdGljYWwgc2VjdGlvbnMsIEkmIzM5O2xsIGxldmVyYWdlIGBncmVwcGVyYCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbi4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gcXVpY2tseSBpZGVudGlmeSBleGFjdGx5ICp3aGVyZSogYW5kICpob3cqIENvRGVsJiMzOTtzIGRlcXVldWVpbmcgbG9naWMgaXMgYmVpbmcgaW52b2tlZCBpbiB0aGUgY29kZSwgcHJvdmlkaW5nIGEgZm9jdXNlZCB2aWV3IG9mIGl0cyBwcmFjdGljYWwgaW1wbGVtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIGZsb3cuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIGxldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29kZWxfZGVxdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jb2RlbC5oPTEyOT1zdHJ1Y3QgY29kZWxfdmFycyB7XG4tLVxuaW5jbHVkZS9uZXQvY29kZWwuaC0xNDItXG5pbmNsdWRlL25ldC9jb2RlbC5oOjE0MzovKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCYjMzk7cyB3b3JrIGRlcGVuZHMgb24gdGhlXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0NC0gKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cbi0tXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmg9MTA5PXN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oLTE1MC1cbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaDoxNTE6c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaC0xNTItXHRcdFx0XHQgICAgIHUzMiAqYmFja2xvZyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYz0xMzY4PXN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfc2tiX3RpbWVfZnVuYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTEzNzUtXG5uZXQvbWFjODAyMTEvdHguYzoxMzc2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZV9mdW5jKHN0cnVjdCBjb2RlbF92YXJzICpjdmFycyxcbm5ldC9tYWM4MDIxMS90eC5jLTEzNzctXHRcdFx0XHRcdCAgdm9pZCAqY3R4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTE0MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV90aW5fZGVxdWV1ZV9mdW5jKHN0cnVjdCBmcSAqZnEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTQyOS1cbm5ldC9tYWM4MDIxMS90eC5jOjE0MzA6XHRyZXR1cm4gY29kZWxfZGVxdWV1ZSh0eHFpLFxubmV0L21hYzgwMjExL3R4LmMtMTQzMS1cdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNlYmFja2xvZyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xNDM3LVx0XHRcdCAgICAgY29kZWxfZHJvcF9mdW5jLFxubmV0L21hYzgwMjExL3R4LmM6MTQzODpcdFx0XHQgICAgIGNvZGVsX2RlcXVldWVfZnVuYyk7XG5uZXQvbWFjODAyMTEvdHguYy0xNDM5LX1cbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9Mjg9c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zNC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozNTovKiBUaGlzIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb2RlbF9kZXF1ZXVlKClcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zNi0gKiB0byBkZXF1ZXVlIGEgcGFja2V0IGZyb20gcXVldWUuIE5vdGU6IGJhY2tsb2cgaXMgaGFuZGxlZCBpblxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz01OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjMtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NjQ6XHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXHUwMDI2c2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcdTAwMjZxLVx1MDAzZXBhcmFtcywgXHUwMDI2cS1cdTAwM2V2YXJzLFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTY1LVx0XHRcdCAgICBcdTAwMjZxLVx1MDAzZXN0YXRzLCBxZGlzY19wa3RfbGVuLCBjb2RlbF9nZXRfZW5xdWV1ZV90aW1lLFxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo3MzpzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz04NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTkwLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjkxOlx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTItXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTk2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTA5LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjExMDpcdFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTExLVx0fVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0xODU9c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTItXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjUzOi8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1NC0gKiB0byBkZXF1ZXVlIGEgcGFja2V0IGZyb20gcXVldWUuIE5vdGU6IGJhY2tsb2cgaXMgaGFuZGxlZCBpblxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0yNzY9c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjgzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI4NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMDUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzA2Olx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFx1MDAyNnNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZywgXHUwMDI2cS1cdTAwM2VjcGFyYW1zLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNy1cdFx0XHQgICAgXHUwMDI2Zmxvdy1cdTAwM2VjdmFycywgXHUwMDI2cS1cdTAwM2Vjc3RhdHMsIHFkaXNjX3BrdF9sZW4sXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyMy1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMjQ6c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyNS17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMzY6c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNy17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzOS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNDA6XHRza2IgPSAgX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQxLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0MjpcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM0My1cbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9MzQ3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUxLVx0aWYgKCFza2IpIHtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNTI6XHRcdHNrYiA9IF9fZnFfY29kZWxfZGVxdWV1ZShzY2gpO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM1My1cbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzYwLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM2MTpcdFx0ZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzYyLVx0fVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz03NjI9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZnFfY29kZWxfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc2Ni1cdC5lbnF1ZXVlXHQ9XHRmcV9jb2RlbF9lbnF1ZXVlLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc2NzpcdC5kZXF1ZXVlXHQ9XHRmcV9jb2RlbF9kZXF1ZXVlLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc2OC1cdC5wZWVrXHRcdD1cdGZxX2NvZGVsX3BlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIENvZGVsIEltcGxlbWVudGF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIENvZGVsIGFuZCBGUS1Db2RlbCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgZmlsZXMgYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLiBUaGVzZSBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJleW9uZCB0aGUgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkIGFuZCBlbmFibGVkLiBJJiMzOTtsbCBzcGVjaWZpY2FsbHkgbG9vayBhdCB0aGVpciBhc3NvY2lhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJIGNvdWxkIHByb2JhYmx5IG1hbnVhbGx5IGNyYXdsIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCB0byBzcGVlZCB0aGluZ3MgdXAsIEkmIzM5O2xsIGxldmVyYWdlIGEgc2VhcmNoIHRvb2wgLSBtb3N0IGxpa2VseSBgZ3JlcHBlcmAgLSB0byBlZmZpY2llbnRseSBsb2NhdGUgdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfKEZRXyk/Q09ERUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MjU1PWNvbmZpZyBORVRfU0NIX1FGUVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI2NS1cbm5ldC9zY2hlZC9LY29uZmlnOjI2Njpjb25maWcgTkVUX1NDSF9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjY3LVx0dHJpc3RhdGUgXCYjMzQ7Q29udHJvbGxlZCBEZWxheSBBUU0gKENPREVMKVwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgQ29yZSBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBuZXR3b3JraW5nLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZXMgMjYwLTI5MC4gVGhhdCBhcmVhIHVzdWFsbHkgY292ZXJzIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRyYWZmaWMgc2hhcGluZyBvciBxdWV1aW5nIGRpc2NpcGxpbmVzOyBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byBhIGZlYXR1cmUgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyB3aXRoLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGluIHRoYXQgYmxvY2suIExldCYjMzk7cyBzZWUgd2hhdCBwb3BzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjYwOlx0XG4gMjYxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyNjI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX3FmcS5cbiAyNjM6XHRcbiAyNjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjU6XHRcbiAyNjY6XHRjb25maWcgTkVUX1NDSF9DT0RFTFxuIDI2NzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29udHJvbGxlZCBEZWxheSBBUU0gKENPREVMKVwmIzM0O1xuIDI2ODpcdFx0aGVscFxuIDI2OTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQ29udHJvbGxlZCBEZWxheSAoQ09ERUwpXG4gMjcwOlx0XHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyNzE6XHRcbiAyNzI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDI3MzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfY29kZWwuXG4gMjc0Olx0XG4gMjc1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjc2Olx0XG4gMjc3Olx0Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbiAyNzg6XHRcdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWUgQ29udHJvbGxlZCBEZWxheSBBUU0gKEZRX0NPREVMKVwmIzM0O1xuIDI3OTpcdFx0aGVscFxuIDI4MDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlEgQ29udHJvbGxlZCBEZWxheSAoRlFfQ09ERUwpXG4gMjgxOlx0XHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyODI6XHRcbiAyODM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDI4NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZnFfY29kZWwuXG4gMjg1Olx0XG4gMjg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjg3Olx0XG4gMjg4Olx0Y29uZmlnIE5FVF9TQ0hfQ0FLRVxuIDI4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVwmIzM0O1xuIDI5MDpcdFx0aGVscFxuIDI5MTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkXG4gMjkyOlx0XHQgIChDQUtFKSBxdWV1ZSBtYW5hZ2VtZW50IGFsZ29yaXRobS5cbiAyOTM6XHRcbiAyOTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIENvZGVsIFVzYWdlIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgY29kZWJhc2UsIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGBpbmNsdWRlL25ldC9jb2RlbC5oYCBhbmQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgdGhpbmcuIFNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSAqd2hlcmUqIGVsc2UgdGhpcyBpcyB1c2VkLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZSBvbiBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZ29pbmcgdG8gZmlyZSB1cCBncmVwIGFuZCBzY2FuIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBib3RoIGBjb2RlbC5oYCBhbmQgc2VlIGlmIHRoZSBzYW1lIGFwcGxpZXMgdG8gYGNvZGVsX2ltcGwuaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2Ygd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHJlbHkgb24gdGhpcyBDb2RlbCBpbXBsZW1lbnRhdGlvbiBhbmQgbWF5YmUgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJJiMzOTttIGNvbnNpZGVyaW5nLiBTaG91bGQgYmUgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIHVuY292ZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaC01MS1cbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmg6NTI6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2VcbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmgtNTMtI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDoyMzojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmhcdTAwM2Vcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvbWFjODAyMTEuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmM6MjU6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9tYWM4MDIxMS90eC5jOjI2OiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcdTAwM2Vcbm5ldC9tYWM4MDIxMS90eC5jLTI3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjIxOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjI6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjIzOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjQtXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTIxLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjIzOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNDojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfcWRpc2MuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgaG93IENvRGVsJiMzOTtzIGRlcXVldWUgYW5kIGNvbnRyb2wgbGF3IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQ6CgoqKkFuYWx5emluZyB0aGUgQ29EZWwgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHRvIHRydWx5IGdyYXNwIGhvdyB0aGlzIENvRGVsIG1lY2hhbmlzbSB3b3JrcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNyYWNrIG9wZW4gdGhlIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhlYWRlciBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBgY29kZWxfZGVxdWV1ZWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlc2UgYXJlIGRlY2xhcmVkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgdXNlLCBhbmQgcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCB0aGUgYXJndW1lbnRzIHRoZXkgdGFrZS4gVGhpcyBpcyB0aGUgYmx1ZXByaW50OyB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGludm9rZWQuIFdoZXJlIGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYXJlIHRoZXkgY2FsbGVkPyBBcmUgdGhleSBwYXJ0IG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgaXRzZWxmPyBBcmUgdGhlcmUgY2FsbGJhY2tzPyBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS4gSSBuZWVkIHRvIHNlZSB0aGUgZXhlY3V0aW9uIGZsb3c6IHdoZW4gZG9lcyB0aGUgZGVxdWV1ZSBoYXBwZW4sIGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBjb250cm9sIGxhdyBjYWxjdWxhdGlvbiBhbmQgYXBwbGljYXRpb24/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaG93IENvRGVsIGlzIG9yY2hlc3RyYXRpbmcgdGhlc2Ugc3RlcHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbGwgY2hhaW5zLCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBjb2RlICphY3R1YWxseSogZG9lcyBzb21ldGhpbmcgd2l0aCB0aGUgcXVldWUgYW5kIGl0cyBwYWNrZXRzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgdGhlb3JldGljYWwgQ29EZWwgZGVzaWduIGlzIHJlYWxpemVkIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0fVxuICA5MTpcdFxuICA5MjpcdC8qXG4gIDkzOlx0ICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCAmIzQzOyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICA5NDpcdCAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICA5NTpcdCAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuICA5ODpcdCAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gIDk5Olx0ICovXG4gMTAwOlx0c3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiAxMDE6XHRcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiAxMDI6XHRcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4gMTAzOlx0e1xuIDEwNDpcdFx0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuIDEwNTpcdFx0XHRcdCByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLFxuIDEwNjpcdFx0XHRcdFx0XHQgIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKSk7XG4gMTA3Olx0fVxuIDEwODpcdFxuIDEwOTpcdHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTEwOlx0XHRcdFx0ICAgICAgdm9pZCAqY3R4LFxuIDExMTpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDExMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcbiAxMTM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDExNDpcdFx0XHRcdCAgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXG4gMTE1Olx0XHRcdFx0ICAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxuIDExNjpcdFx0XHRcdCAgICAgIHUzMiAqYmFja2xvZyxcbiAxMTc6XHRcdFx0XHQgICAgICBjb2RlbF90aW1lX3Qgbm93KVxuIDExODpcdHtcbiAxMTk6XHRcdGJvb2wgb2tfdG9fZHJvcDtcbiAxMjA6XHRcdHUzMiBza2JfbGVuO1xuIDEyMTpcdFxuIDEyMjpcdFx0aWYgKCFza2IpIHtcbiAxMjM6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcbiAxMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0c2tiX2xlbiA9IHNrYl9sZW5fZnVuYyhza2IpO1xuIDEyODpcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWxkZWxheSwgbm93IC0gc2tiX3RpbWVfZnVuYyhza2IpKTtcbiAxMjk6XHRcbiAxMzA6XHRcdGlmICh1bmxpa2VseShza2JfbGVuIFx1MDAzZSBzdGF0cy1cdTAwM2VtYXhwYWNrZXQpKVxuIDEzMTpcdFx0XHRXUklURV9PTkNFKHN0YXRzLVx1MDAzZW1heHBhY2tldCwgc2tiX2xlbik7XG4gMTMyOlx0XG4gMTMzOlx0XHRpZiAoY29kZWxfdGltZV9iZWZvcmUodmFycy1cdTAwM2VsZGVsYXksIHBhcmFtcy1cdTAwM2V0YXJnZXQpIHx8XG4gMTM0Olx0XHQgICAgKmJhY2tsb2cgXHUwMDNjPSBwYXJhbXMtXHUwMDNlbXR1KSB7XG4gMTM1Olx0XHRcdC8qIHdlbnQgYmVsb3cgLSBzdGF5IGJlbG93IGZvciBhdCBsZWFzdCBpbnRlcnZhbCAqL1xuIDEzNjpcdFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuIDEzNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTM4Olx0XHR9XG4gMTM5Olx0XHRva190b19kcm9wID0gZmFsc2U7XG4gMTQwOlx0XHRpZiAodmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID09IDApIHtcbiAxNDE6XHRcdFx0LyoganVzdCB3ZW50IGFib3ZlIGZyb20gYmVsb3cuIElmIHdlIHN0YXkgYWJvdmVcbiAxNDI6XHRcdFx0ICogZm9yIGF0IGxlYXN0IGludGVydmFsIHdlJiMzOTtsbCBzYXkgaXQmIzM5O3Mgb2sgdG8gZHJvcFxuIDE0MzpcdFx0XHQgKi9cbiAxNDQ6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gbm93ICYjNDM7IHBhcmFtcy1cdTAwM2VpbnRlcnZhbDtcbiAxNDU6XHRcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcbiAxNDY6XHRcdFx0b2tfdG9fZHJvcCA9IHRydWU7XG4gMTQ3Olx0XHR9XG4gMTQ4Olx0XHRyZXR1cm4gb2tfdG9fZHJvcDtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiAxNTI6XHRcdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuIDE1MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXG4gMTU0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDE1NTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDE1NjpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxuIDE1NzpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxuIDE1OTpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiAxNjA6XHR7XG4gMTYxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gMTYyOlx0XHRjb2RlbF90aW1lX3Qgbm93O1xuIDE2MzpcdFx0Ym9vbCBkcm9wO1xuIDE2NDpcdFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiAxNjU6XHRcbiAxNjY6XHRcdGlmICghc2tiKSB7XG4gMTY3Olx0XHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG4gMTY4Olx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xuIDE2OTpcdFx0XHRyZXR1cm4gc2tiO1xuIDE3MDpcdFx0fVxuIDE3MTpcdFx0bm93ID0gY29kZWxfZ2V0X3RpbWUoKTtcbiAxNzI6XHRcdGRyb3AgPSBjb2RlbF9zaG91bGRfZHJvcChza2IsIGN0eCwgdmFycywgcGFyYW1zLCBzdGF0cyxcbiAxNzM6XHRcdFx0XHRcdCBza2JfbGVuX2Z1bmMsIHNrYl90aW1lX2Z1bmMsIGJhY2tsb2csIG5vdyk7XG4gMTc0Olx0XHRpZiAodmFycy1cdTAwM2Vkcm9wcGluZykge1xuIDE3NTpcdFx0XHRpZiAoIWRyb3ApIHtcbiAxNzY6XHRcdFx0XHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cbiAxNzc6XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNzg6XHRcdFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4gMTc5Olx0XHRcdFx0LyogSXQmIzM5O3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxuIDE4MDpcdFx0XHRcdCAqIHBhY2tldCBhbmQgZGVxdWV1ZSB0aGUgbmV4dC4gVGhlIGRlcXVldWUgbWlnaHRcbiAxODE6XHRcdFx0XHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cbiAxODI6XHRcdFx0XHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXG4gMTgzOlx0XHRcdFx0ICogQSBsYXJnZSBiYWNrbG9nIG1pZ2h0IHJlc3VsdCBpbiBkcm9wIHJhdGVzIHNvIGhpZ2hcbiAxODQ6XHRcdFx0XHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXG4gMTg1Olx0XHRcdFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXG4gMTg2Olx0XHRcdFx0ICovXG4gMTg3Olx0XHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gMTg4Olx0XHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbiAxODk6XHRcdFx0XHRcdGlmICgmIzQzOyYjNDM7ZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBDb0RlbCBhbmQgRlEtQ29EZWwgZnVuY3Rpb24gYXQgdGhlIGtlcm5lbCBsZXZlbC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCwgSSBhc3N1bWUsIHBvdGVudGlhbCBwb2ludHMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24sIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMuCgoqKkV4YW1pbmluZyBDb0RlbCBhbmQgRlEtQ29EZWwgSW1wbGVtZW50YXRpb25zKioKCk15IGluaXRpYWwgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBmaWxlcyBmb3IgYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBiYXNpYyBmbG93IG9mIG9wZXJhdGlvbi4gU28sIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgdG8gZXN0YWJsaXNoIHRoZSBiYXNlbGluZSBvZiB0aGUgcWRpc2MgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY29kZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvZGVsIC0gVGhlIENvbnRyb2xsZWQtRGVsYXkgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgYWxnb3JpdGhtXG4gICA0Olx0ICpcbiAgIDU6XHQgKiAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgS2F0aGxlZW4gTmljaG9scyBcdTAwM2NuaWNob2xzQHBvbGxlcmUuY29tXHUwMDNlXG4gICA2Olx0ICogIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFZhbiBKYWNvYnNvbiBcdTAwM2N2YW5AcG9sbGVyZS5uZXRcdTAwM2VcbiAgIDc6XHQgKlxuICAgODpcdCAqICBJbXBsZW1lbnRlZCBvbiBsaW51eCBieSA6XG4gICA5Olx0ICogIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIEQuIFRhaHQgXHUwMDNjZGF2ZS50YWh0QGJ1ZmZlcmJsb2F0Lm5ldFx1MDAzZVxuICAxMDpcdCAqICBDb3B5cmlnaHQgKEMpIDIwMTIsMjAxNSBFcmljIER1bWF6ZXQgXHUwMDNjZWR1bWF6ZXRAZ29vZ2xlLmNvbVx1MDAzZVxuICAxMTpcdCAqL1xuICAxMjpcdFxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXHUwMDNlXG4gIDI0Olx0XG4gIDI1Olx0XG4gIDI2Olx0I2RlZmluZSBERUZBVUxUX0NPREVMX0xJTUlUIDEwMDBcbiAgMjc6XHRcbiAgMjg6XHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSB7XG4gIDI5Olx0XHRzdHJ1Y3QgY29kZWxfcGFyYW1zXHRwYXJhbXM7XG4gIDMwOlx0XHRzdHJ1Y3QgY29kZWxfdmFyc1x0dmFycztcbiAgMzE6XHRcdHN0cnVjdCBjb2RlbF9zdGF0c1x0c3RhdHM7XG4gIDMyOlx0XHR1MzJcdFx0XHRkcm9wX292ZXJsaW1pdDtcbiAgMzM6XHR9O1xuICAzNDpcdFxuICAzNTpcdC8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxuICAzNjpcdCAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXG4gIDM3Olx0ICogY29kZWwsIHdlIGRvbnQgbmVlZCB0byByZWR1Y2UgaXQgaGVyZS5cbiAgMzg6XHQgKi9cbiAgMzk6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxuICA0MDpcdHtcbiAgNDE6XHRcdHN0cnVjdCBRZGlzYyAqc2NoID0gY3R4O1xuICA0MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fcWRpc2NfZGVxdWV1ZV9oZWFkKFx1MDAyNnNjaC1cdTAwM2VxKTtcbiAgNDM6XHRcbiAgNDQ6XHRcdGlmIChza2IpIHtcbiAgNDU6XHRcdFx0cXN0YXRzX2JhY2tsb2dfc3ViKHNjaCwgcWRpc2NfcGt0X2xlbihza2IpKTtcbiAgNDY6XHRcdFx0cHJlZmV0Y2goXHUwMDI2c2tiLVx1MDAzZWVuZCk7IC8qIHdlJiMzOTtsbCBuZWVkIHNrYl9zaGluZm8oKSAqL1xuICA0NzpcdFx0fVxuICA0ODpcdFx0cmV0dXJuIHNrYjtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcbiAgNTI6XHR7XG4gIDUzOlx0XHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IGN0eDtcbiAgNTQ6XHRcbiAgNTU6XHRcdHFkaXNjX2RlcXVldWVfZHJvcChzY2gsIHNrYiwgUURJU0NfRFJPUF9DT05HRVNURUQpO1xuICA1NjpcdFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcbiAgNTc6XHR9XG4gIDU4Olx0XG4gIDU5Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gIDYwOlx0e1xuICA2MTpcdFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gIDYyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA2MzpcdFxuICA2NDpcdFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFx1MDAyNnNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZywgXHUwMDI2cS1cdTAwM2VwYXJhbXMsIFx1MDAyNnEtXHUwMDNldmFycyxcbiAgNjU6XHRcdFx0XHQgICAgXHUwMDI2cS1cdTAwM2VzdGF0cywgcWRpc2NfcGt0X2xlbiwgY29kZWxfZ2V0X2VucXVldWVfdGltZSxcbiAgNjY6XHRcdFx0XHQgICAgZHJvcF9mdW5jLCBkZXF1ZXVlX2Z1bmMpO1xuICA2NzpcdFxuICA2ODpcdFx0aWYgKHNrYilcbiAgNjk6XHRcdFx0cWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7XG4gIDcwOlx0XHRyZXR1cm4gc2tiO1xuICA3MTpcdH1cbiAgNzI6XHRcbiAgNzM6XHRzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG4gIDc0Olx0e1xuICA3NTpcdFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAocS1cdTAwM2VzdGF0cy5kcm9wX2NvdW50KSB7XG4gIDc4Olx0XHRcdHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBxLVx1MDAzZXN0YXRzLmRyb3BfY291bnQsXG4gIDc5Olx0XHRcdFx0XHRcdCAgcS1cdTAwM2VzdGF0cy5kcm9wX2xlbik7XG4gIDgwOlx0XHRcdHEtXHUwMDNlc3RhdHMuZHJvcF9jb3VudCA9IDA7XG4gIDgxOlx0XHRcdHEtXHUwMDNlc3RhdHMuZHJvcF9sZW4gPSAwO1xuICA4MjpcdFx0fVxuICA4MzpcdH1cbiAgODQ6XHRcbiAgODU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gIDg2Olx0e1xuICA4NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgODg6XHRcbiAgODk6XHRcdHNrYiA9IF9fY29kZWxfcWRpc2NfZGVxdWV1ZShzY2gpO1xuICA5MDpcdFxuICA5MTpcdFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG4gIDkyOlx0XG4gIDkzOlx0XHRyZXR1cm4gc2tiO1xuICA5NDpcdH1cbiAgOTU6XHRcbiAgOTY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXG4gIDk3Olx0e1xuICA5ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKFx1MDAyNnNjaC1cdTAwM2Vnc29fc2tiKTtcbiAgOTk6XHRcbiAxMDA6XHRcdGlmICghc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjkxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlcywgZnJvbSBteSBwZXJzcGVjdGl2ZSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFNjaGVkdWxpbmcgQ29kZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBjb25jZXB0dWFsIGdyYXNwIG9mIENvRGVsIGFuZCBGUS1Db0RlbCwgYnV0IGEgZGVlcCBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0aGVvcmV0aWNhbCBjb25jZXB0cyBhcmUgdHJhbnNsYXRlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwmIzM5O3Mgc2NoZWR1bGluZyBmcmFtZXdvcmsuIEkgd2FudCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBxdWV1aW5nIGxvZ2ljLCB0aGUgZGVxdWV1ZSBwcm9jZXNzLCBob3cgdGhlIHRhcmdldCBhbmQgaW50ZXJ2YWwgcGFyYW1ldGVycyBhcmUgaGFuZGxlZCwgYW5kIGhvdyBkcm9wcyBhcmUgZGV0ZXJtaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9wdGltaXphdGlvbnMgb3IgbnVhbmNlcyBzcGVjaWZpYyB0byB0aGlzIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBsb3cgbGV2ZWwgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdFx0c2tiID0gX19jb2RlbF9xZGlzY19kZXF1ZXVlKHNjaCk7XG4gMTAyOlx0XG4gMTAzOlx0XHRcdGlmIChza2IpIHtcbiAxMDQ6XHRcdFx0XHRfX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnNjaC1cdTAwM2Vnc29fc2tiLCBza2IpO1xuIDEwNTpcdFx0XHRcdC8qIGl0JiMzOTtzIHN0aWxsIHBhcnQgb2YgdGhlIHF1ZXVlICovXG4gMTA2Olx0XHRcdFx0cWRpc2NfcXN0YXRzX2JhY2tsb2dfaW5jKHNjaCwgc2tiKTtcbiAxMDc6XHRcdFx0XHRzY2gtXHUwMDNlcS5xbGVuJiM0MzsmIzQzOztcbiAxMDg6XHRcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0XHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbiAxMTE6XHRcdH1cbiAxMTI6XHRcbiAxMTM6XHRcdHJldHVybiBza2I7XG4gMTE0Olx0fVxuIDExNTpcdFxuIDExNjpcdHN0YXRpYyBpbnQgY29kZWxfcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiAxMTc6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuIDExODpcdHtcbiAxMTk6XHRcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKGxpa2VseShxZGlzY19xbGVuKHNjaCkgXHUwMDNjIHNjaC1cdTAwM2VsaW1pdCkpIHtcbiAxMjI6XHRcdFx0Y29kZWxfc2V0X2VucXVldWVfdGltZShza2IpO1xuIDEyMzpcdFx0XHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcbiAxMjQ6XHRcdH1cbiAxMjU6XHRcdHEgPSBxZGlzY19wcml2KHNjaCk7XG4gMTI2Olx0XHRXUklURV9PTkNFKHEtXHUwMDNlZHJvcF9vdmVybGltaXQsIHEtXHUwMDNlZHJvcF9vdmVybGltaXQgJiM0MzsgMSk7XG4gMTI3Olx0XHRyZXR1cm4gcWRpc2NfZHJvcF9yZWFzb24oc2tiLCBzY2gsIHRvX2ZyZWUsIFFESVNDX0RST1BfT1ZFUkxJTUlUKTtcbiAxMjg6XHR9XG4gMTI5Olx0XG4gMTMwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGNvZGVsX3BvbGljeVtUQ0FfQ09ERUxfTUFYICYjNDM7IDFdID0ge1xuIDEzMTpcdFx0W1RDQV9DT0RFTF9UQVJHRVRdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gMTMyOlx0XHRbVENBX0NPREVMX0xJTUlUXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDEzMzpcdFx0W1RDQV9DT0RFTF9JTlRFUlZBTF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiAxMzQ6XHRcdFtUQ0FfQ09ERUxfRUNOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gMTM1Olx0XHRbVENBX0NPREVMX0NFX1RIUkVTSE9MRF09IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gMTM2Olx0fTtcbiAxMzc6XHRcbiAxMzg6XHRzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIDEzOTpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxNDA6XHR7XG4gMTQxOlx0XHR1bnNpZ25lZCBpbnQgZHJvcHBlZF9wa3RzID0gMCwgZHJvcHBlZF9ieXRlcyA9IDA7XG4gMTQyOlx0XHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbiAxNDM6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DT0RFTF9NQVggJiM0MzsgMV07XG4gMTQ0Olx0XHRpbnQgZXJyO1xuIDE0NTpcdFxuIDE0NjpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfQ09ERUxfTUFYLCBvcHQsXG4gMTQ3Olx0XHRcdFx0XHRcdCAgY29kZWxfcG9saWN5LCBOVUxMKTtcbiAxNDg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTQ5Olx0XHRcdHJldHVybiBlcnI7XG4gMTUwOlx0XG4gMTUxOlx0XHRzY2hfdHJlZV9sb2NrKHNjaCk7XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAodGJbVENBX0NPREVMX1RBUkdFVF0pIHtcbiAxNTQ6XHRcdFx0dTMyIHRhcmdldCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9DT0RFTF9UQVJHRVRdKTtcbiAxNTU6XHRcbiAxNTY6XHRcdFx0V1JJVEVfT05DRShxLVx1MDAzZXBhcmFtcy50YXJnZXQsXG4gMTU3Olx0XHRcdFx0ICAgKCh1NjQpdGFyZ2V0ICogTlNFQ19QRVJfVVNFQykgXHUwMDNlXHUwMDNlIENPREVMX1NISUZUKTtcbiAxNTg6XHRcdH1cbiAxNTk6XHRcbiAxNjA6XHRcdGlmICh0YltUQ0FfQ09ERUxfQ0VfVEhSRVNIT0xEXSkge1xuIDE2MTpcdFx0XHR1NjQgdmFsID0gbmxhX2dldF91MzIodGJbVENBX0NPREVMX0NFX1RIUkVTSE9MRF0pO1xuIDE2MjpcdFxuIDE2MzpcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlcGFyYW1zLmNlX3RocmVzaG9sZCxcbiAxNjQ6XHRcdFx0XHQgICAodmFsICogTlNFQ19QRVJfVVNFQykgXHUwMDNlXHUwMDNlIENPREVMX1NISUZUKTtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcbiAxNjc6XHRcdGlmICh0YltUQ0FfQ09ERUxfSU5URVJWQUxdKSB7XG4gMTY4Olx0XHRcdHUzMiBpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9DT0RFTF9JTlRFUlZBTF0pO1xuIDE2OTpcdFxuIDE3MDpcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlcGFyYW1zLmludGVydmFsLFxuIDE3MTpcdFx0XHRcdCAgICgodTY0KWludGVydmFsICogTlNFQ19QRVJfVVNFQykgXHUwMDNlXHUwMDNlIENPREVMX1NISUZUKTtcbiAxNzI6XHRcdH1cbiAxNzM6XHRcbiAxNzQ6XHRcdGlmICh0YltUQ0FfQ09ERUxfTElNSVRdKVxuIDE3NTpcdFx0XHRXUklURV9PTkNFKHNjaC1cdTAwM2VsaW1pdCxcbiAxNzY6XHRcdFx0XHQgICBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfTElNSVRdKSk7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAodGJbVENBX0NPREVMX0VDTl0pXG4gMTc5Olx0XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VwYXJhbXMuZWNuLFxuIDE4MDpcdFx0XHRcdCAgICEhbmxhX2dldF91MzIodGJbVENBX0NPREVMX0VDTl0pKTtcbiAxODE6XHRcbiAxODI6XHRcdHdoaWxlIChzY2gtXHUwMDNlcS5xbGVuIFx1MDAzZSBzY2gtXHUwMDNlbGltaXQpIHtcbiAxODM6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjX2RlcXVldWVfaW50ZXJuYWwoc2NoLCB0cnVlKTtcbiAxODQ6XHRcbiAxODU6XHRcdFx0aWYgKCFza2IpXG4gMTg2Olx0XHRcdFx0YnJlYWs7XG4gMTg3Olx0XG4gMTg4Olx0XHRcdGRyb3BwZWRfcGt0cyYjNDM7JiM0Mzs7XG4gMTg5Olx0XHRcdGRyb3BwZWRfYnl0ZXMgJiM0Mzs9IHFkaXNjX3BrdF9sZW4oc2tiKTtcbiAxOTA6XHRcdFx0cnRubF9xZGlzY19kcm9wKHNrYiwgc2NoKTtcbiAxOTE6XHRcdH1cbiAxOTI6XHRcdHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBkcm9wcGVkX3BrdHMsIGRyb3BwZWRfYnl0ZXMpO1xuIDE5MzpcdFxuIDE5NDpcdFx0c2NoX3RyZWVfdW5sb2NrKHNjaCk7XG4gMTk1Olx0XHRyZXR1cm4gMDtcbiAxOTY6XHR9XG4gMTk3Olx0XG4gMTk4Olx0c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gMTk5Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyMDA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgKioKCk9rYXksIEkmIzM5O20gc2hpZnRpbmcgZm9jdXMuIFdlJiMzOTt2ZSBjb3ZlcmVkIGEgZ29vZCBhbW91bnQgb2YgZ3JvdW5kLCBidXQgbm93IGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyB0aGlzIGlzIGFsbCAqYWN0dWFsbHkqIGRvbmUuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBjcnVjaWFsIGFsZ29yaXRobXMgZm9yIHBhY2tldCBzY2hlZHVsaW5nIGFuZCBxdWV1ZSBtYW5hZ2VtZW50LCBhbmQgdGhlIGxvZ2ljIHRoYXQgaW1wbGVtZW50cyBDb0RlbCYjMzk7cyBhY3RpdmUgcXVldWUgbWFuYWdlbWVudC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGZhaXIgcXVldWVpbmcgYXNwZWN0IOKAkyBhcmUgdGhleSB1c2luZyBhIGhhc2gsIHNvbWUgZm9ybSBvZiByb3VuZC1yb2Jpbiwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBmcSBhbmQgY29kZWwgYXNwZWN0cywgdGhhdCBpcyB0byBzYXkgdGhlIGZhaXIgcXVldWluZyBhbmQgdGhlIGNvbnRyb2xsZWQgZGVsYXkgb2YgQ29EZWwuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgbWFuYWdlbWVudCBhcyB3ZWxsLCBnaXZlbiB0aGUgY29uY3VycmVuY3kgaW52b2x2ZWQgaW4gYSBuZXR3b3JrIHNjaGVkdWxlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdFxuIDMyMTpcdFx0cmV0dXJuIHNrYjtcbiAzMjI6XHR9XG4gMzIzOlx0XG4gMzI0Olx0c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDMyNTpcdHtcbiAzMjY6XHRcdHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQpIHtcbiAzMjk6XHRcdFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQsXG4gMzMwOlx0XHRcdFx0XHRcdCAgcS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4pO1xuIDMzMTpcdFx0XHRxLVx1MDAzZWNzdGF0cy5kcm9wX2NvdW50ID0gMDtcbiAzMzI6XHRcdFx0cS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4gPSAwO1xuIDMzMzpcdFx0fVxuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gMzM3Olx0e1xuIDMzODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzMzk6XHRcbiAzNDA6XHRcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNDE6XHRcbiAzNDI6XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dXJuIHNrYjtcbiAzNDU6XHR9XG4gMzQ2Olx0XG4gMzQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDM0ODpcdHtcbiAzNDk6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZzY2gtXHUwMDNlZ3NvX3NrYik7XG4gMzUwOlx0XG4gMzUxOlx0XHRpZiAoIXNrYikge1xuIDM1MjpcdFx0XHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNTM6XHRcbiAzNTQ6XHRcdFx0aWYgKHNrYikge1xuIDM1NTpcdFx0XHRcdF9fc2tiX3F1ZXVlX2hlYWQoXHUwMDI2c2NoLVx1MDAzZWdzb19za2IsIHNrYik7XG4gMzU2Olx0XHRcdFx0LyogaXQmIzM5O3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cbiAzNTc6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19pbmMoc2NoLCBza2IpO1xuIDM1ODpcdFx0XHRcdHNjaC1cdTAwM2VxLnFsZW4mIzQzOyYjNDM7O1xuIDM1OTpcdFx0XHR9XG4gMzYwOlx0XG4gMzYxOlx0XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM2MjpcdFx0fVxuIDM2MzpcdFxuIDM2NDpcdFx0cmV0dXJuIHNrYjtcbiAzNjU6XHR9XG4gMzY2Olx0XG4gMzY3Olx0c3RhdGljIHZvaWQgZnFfY29kZWxfZmxvd19wdXJnZShzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdylcbiAzNjg6XHR7XG4gMzY5Olx0XHRydG5sX2tmcmVlX3NrYnMoZmxvdy1cdTAwM2VoZWFkLCBmbG93LVx1MDAzZXRhaWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKlBlZXJpbmcgaW50byBtYWM4MDIxMSYjMzk7cyBUWCBQYXRoKioKCkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIG1hYzgwMjExIHN0YWNrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRyYW5zbWlzc2lvbi4gV2hlcmUgZG8gSSBzdGFydD8gQWgsIHJpZ2h0LCBgbmV0L21hYzgwMjExL3R4LmNgIGlzIHRoZSBsb2dpY2FsIHBsYWNlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgY29yZSB0cmFuc21pc3Npb24gbG9naWMsIHBhcnRpY3VsYXJseSBpbiB0aGF0IGNyaXRpY2FsIGFyZWEuIEkmIzM5O2xsIHplcm8gaW4gb24gbGluZXMgMTM3MC0xNDQ1LiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgZ290Y2hhcyBJIGNhbiBmaW5kLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBzZWN0aW9uIHRvdWNoZXMgb24gdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlIGRyaXZlciBmb3JtcyBmcmFtZXMsIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgbWF5YmUgZXZlbiBzb21lIFFvUyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgcmF0ZSBjb250cm9sIGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoZSBzdGF0ZSBvZiB0aGlzIGNvZGUgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgdW5kZXIgbG9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3MDpcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuMTM3MTpcdFxuMTM3MjpcdFx0aW5mbyA9IChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKilza2ItXHUwMDNlY2I7XG4xMzczOlx0XHRyZXR1cm4gaW5mby1cdTAwM2Vjb250cm9sLmVucXVldWVfdGltZTtcbjEzNzQ6XHR9XG4xMzc1Olx0XG4xMzc2Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzLFxuMTM3NzpcdFx0XHRcdFx0XHQgIHZvaWQgKmN0eClcbjEzNzg6XHR7XG4xMzc5Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcbjEzODA6XHRcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcbjEzODE6XHRcdHN0cnVjdCBmcSAqZnE7XG4xMzgyOlx0XHRzdHJ1Y3QgZnFfZmxvdyAqZmxvdztcbjEzODM6XHRcbjEzODQ6XHRcdHR4cWkgPSBjdHg7XG4xMzg1Olx0XHRsb2NhbCA9IHZpZl90b19zZGF0YSh0eHFpLVx1MDAzZXR4cS52aWYpLVx1MDAzZWxvY2FsO1xuMTM4NjpcdFx0ZnEgPSBcdTAwMjZsb2NhbC1cdTAwM2VmcTtcbjEzODc6XHRcbjEzODg6XHRcdGlmIChjdmFycyA9PSBcdTAwMjZ0eHFpLVx1MDAzZWRlZl9jdmFycylcbjEzODk6XHRcdFx0ZmxvdyA9IFx1MDAyNnR4cWktXHUwMDNldGluLmRlZmF1bHRfZmxvdztcbjEzOTA6XHRcdGVsc2VcbjEzOTE6XHRcdFx0ZmxvdyA9IFx1MDAyNmZxLVx1MDAzZWZsb3dzW2N2YXJzIC0gbG9jYWwtXHUwMDNlY3ZhcnNdO1xuMTM5MjpcdFxuMTM5MzpcdFx0cmV0dXJuIGZxX2Zsb3dfZGVxdWV1ZShmcSwgZmxvdyk7XG4xMzk0Olx0fVxuMTM5NTpcdFxuMTM5NjpcdHN0YXRpYyB2b2lkIGNvZGVsX2Ryb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTM5NzpcdFx0XHRcdCAgICB2b2lkICpjdHgpXG4xMzk4Olx0e1xuMTM5OTpcdFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7XG4xNDAwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbjE0MDE6XHRcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcbjE0MDI6XHRcbjE0MDM6XHRcdHR4cWkgPSBjdHg7XG4xNDA0Olx0XHRsb2NhbCA9IHZpZl90b19zZGF0YSh0eHFpLVx1MDAzZXR4cS52aWYpLVx1MDAzZWxvY2FsO1xuMTQwNTpcdFx0aHcgPSBcdTAwMjZsb2NhbC1cdTAwM2VodztcbjE0MDY6XHRcbjE0MDc6XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKGh3LCBza2IpO1xuMTQwODpcdH1cbjE0MDk6XHRcbjE0MTA6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcbjE0MTE6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGZxX3RpbiAqdGluLFxuMTQxMjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnFfZmxvdyAqZmxvdylcbjE0MTM6XHR7XG4xNDE0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcbjE0MTU6XHRcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcbjE0MTY6XHRcdHN0cnVjdCBjb2RlbF92YXJzICpjdmFycztcbjE0MTc6XHRcdHN0cnVjdCBjb2RlbF9wYXJhbXMgKmNwYXJhbXM7XG4xNDE4Olx0XHRzdHJ1Y3QgY29kZWxfc3RhdHMgKmNzdGF0cztcbjE0MTk6XHRcbjE0MjA6XHRcdGxvY2FsID0gY29udGFpbmVyX29mKGZxLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBmcSk7XG4xNDIxOlx0XHR0eHFpID0gY29udGFpbmVyX29mKHRpbiwgc3RydWN0IHR4cV9pbmZvLCB0aW4pO1xuMTQyMjpcdFx0Y3BhcmFtcyA9IFx1MDAyNmxvY2FsLVx1MDAzZWNwYXJhbXM7XG4xNDIzOlx0XHRjc3RhdHMgPSBcdTAwMjZ0eHFpLVx1MDAzZWNzdGF0cztcbjE0MjQ6XHRcbjE0MjU6XHRcdGlmIChmbG93ID09IFx1MDAyNnRpbi1cdTAwM2VkZWZhdWx0X2Zsb3cpXG4xNDI2Olx0XHRcdGN2YXJzID0gXHUwMDI2dHhxaS1cdTAwM2VkZWZfY3ZhcnM7XG4xNDI3Olx0XHRlbHNlXG4xNDI4Olx0XHRcdGN2YXJzID0gXHUwMDI2bG9jYWwtXHUwMDNlY3ZhcnNbZmxvdyAtIGZxLVx1MDAzZWZsb3dzXTtcbjE0Mjk6XHRcbjE0MzA6XHRcdHJldHVybiBjb2RlbF9kZXF1ZXVlKHR4cWksXG4xNDMxOlx0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZWJhY2tsb2csXG4xNDMyOlx0XHRcdFx0ICAgICBjcGFyYW1zLFxuMTQzMzpcdFx0XHRcdCAgICAgY3ZhcnMsXG4xNDM0Olx0XHRcdFx0ICAgICBjc3RhdHMsXG4xNDM1Olx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX2Z1bmMsXG4xNDM2Olx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV9mdW5jLFxuMTQzNzpcdFx0XHRcdCAgICAgY29kZWxfZHJvcF9mdW5jLFxuMTQzODpcdFx0XHRcdCAgICAgY29kZWxfZGVxdWV1ZV9mdW5jKTtcbjE0Mzk6XHR9XG4xNDQwOlx0XG4xNDQxOlx0c3RhdGljIHZvaWQgZnFfc2tiX2ZyZWVfZnVuYyhzdHJ1Y3QgZnEgKmZxLFxuMTQ0MjpcdFx0XHRcdCAgICAgc3RydWN0IGZxX3RpbiAqdGluLFxuMTQ0MzpcdFx0XHRcdCAgICAgc3RydWN0IGZxX2Zsb3cgKmZsb3csXG4xNDQ0Olx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY0OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDU5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZWwvRlEtQ29kZWwgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXM6IGBpbmNsdWRlL25ldC9jb2RlbC5oYCBub3cgaGFzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2YCwgd2hpY2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbGltaXQuIFRoZW4sIHdpdGhpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCwgdGhlIGBjb2RlbF9jb250cm9sX2xhd2AgZnVuY3Rpb24gaGFzIGJlZW4gdHdlYWtlZCB0byBlbnN1cmUgYSBtaW5pbXVtIGluY3JlbWVudCBvZiAxIHRpY2suIFRoaXMgaXMga2V5OyBpdCBwcmV2ZW50cyBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcHMgb3Igc3RhbGxzIHdoZW4gZGVhbGluZyB3aXRoIGV4dHJlbWVseSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgY291bnRzLiBUaGF0JiMzOTtzIGEgY2xldmVyIGFuZCBuZWNlc3NhcnkgZ3VhcmRyYWlsIGFnYWluc3QgdGhvc2UgZWRnZS1jYXNlIHNjZW5hcmlvcy4KClRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgY29kZWxfZGVxdWV1ZWAsIHdoZXJlIGRyb3AgbGltaXRpbmcgaGFzIGJlZW4gZXhwbGljaXRseSBhZGRlZC4gQSBgZHJvcHNgIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2l0aGluIHRoZSBkZXF1ZXVlIGxvb3AsIGFuZCBpZiBpdCBleGNlZWRzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLCB0aGUgY29kZSBub3cgc2V0cyBgZHJvcF9uZXh0YCB1c2luZyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCB0aGVuIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgbWVhbnMgdGhlIGRlcXVldWUgZnVuY3Rpb24gaXMgYmVpbmcgbWFkZSBtb3JlIHJvYnVzdCBhbmQgcHJldmVudHMgYSBzaW5nbGUgZGVxdWV1ZSBvcGVyYXRpb24gZnJvbSBnZXR0aW5nIHN0dWNrIGRyb3BwaW5nIHBhY2tldHMgaW5kZWZpbml0ZWx5LiBTbWFydC4KClRoZSBzZWxmdGVzdHMgYXJlIGFsc28gdXBkYXRlZCwgd2hpY2ggaXMgZ29vZC4gV2Ugc2hvdWxkIGV4cGVjdCB0aG9zZSB0byBjYXRjaCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIENvZGVsIGFuZCBGUS1Db2RlbCBxZGlzY3MgYXJlIGVhc2lseSBhdHRhY2hlZCB0byBuZXR3b3JrIGludGVyZmFjZXMgbGlrZSBgbG9gLCBgZHVtbXlgLCBgdmV0aGAsIG9yIGB0YXBgIHVzaW5nIGBydG5ldGxpbmtgIGZyb20gdXNlcnNwYWNlLiBQYWNrZXQgZW5xdWV1ZS9kZXF1ZXVlIG9wZXJhdGlvbnMgKGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGZxX2NvZGVsX2RlcXVldWVgLCBldGMuKSBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlc2UuIEFsc28sIGlmIHRoYXQgd2FzbiYjMzk7dCBlbm91Z2gsIG1hYzgwMjExIGFsc28gdXNlcyBjb2RlbC4gVGhhdCYjMzk7cyBhIGdvb2QgY292ZXJhZ2UgcHJvZmlsZS4KCkNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzICh0aGUgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHkpLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgJiMzNDtXb3J0aEZ1enppbmc9VFJVRSYjMzQ7LiBUaGUgbG9naWMgaXMgbW9kaWZpZWQsIGl0JiMzOTtzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCB3ZSYjMzk7cmUgbG9va2luZyBhdCBjb3JlIHN1YnN5c3RlbSBjaGFuZ2VzLCB0aGUga2luZCB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzIG9yIHNlY3VyaXR5IGlzc3Vlcy4gVGhlIHJlZmFjdG9yaW5nIGFzcGVjdCBpcyBhbHNvIGluIHBsYXkgaGVyZSwgc2luY2UgdGhlcmUgaXMgYSByZXN0cnVjdHVyaW5nIG9mIGFsZ29yaXRobSBmbG93cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZWFyY2ggdGhlIGNvbmZpZ3MgYW5kIHN5bWJvbHMgY2FyZWZ1bGx5LCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIE5FVF9TQ0hFRHxjb25maWcgTkVUX1NDSF9DT0RFTHxjb25maWcgTkVUX1NDSF9GUV9DT0RFTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTI1NT1jb25maWcgTkVUX1NDSF9RRlFcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yNjUtXG5uZXQvc2NoZWQvS2NvbmZpZzoyNjY6Y29uZmlnIE5FVF9TQ0hfQ09ERUxcbm5ldC9zY2hlZC9LY29uZmlnLTI2Ny1cdHRyaXN0YXRlIFwmIzM0O0NvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXG5uZXQvc2NoZWQvS2NvbmZpZzoyNzc6Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWUgQ29udHJvbGxlZCBEZWxheSBBUU0gKEZRX0NPREVMKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9TQ0hFRGAg4oCTIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBpdHNlbGYuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDEgdG8gMjAsIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIGRlZmluaXRpb25zIGFuZCBrZXkgZGVwZW5kZW5jaWVzIGFyZSBvdXRsaW5lZC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGNsYXJpZnkgdGhlIHByZXJlcXVpc2l0ZXMsIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgb3Igb3RoZXIga2VybmVsIGZlYXR1cmVzIHRoYXQgYE5FVF9TQ0hFRGAgcmVsaWVzIHVwb24uIFRoaXMgaW5pdGlhbCBzY2FuIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGlzIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcbiAgMTc6XHRcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXG4gIDE5Olx0XHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDIwOlx0XHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmb3IgUmVsZXZhbmNlKioKCk9rYXksIHNvIEkgbmVlZCB0byBwaXZvdCBhIGJpdCBhbmQgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCByZWxhdGVkIHRvIG1hYzgwMjExLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGdvaW5nIHRvIGJlIGRpdmluZyBpbnRvIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhhdCBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0aGVyZSB0aGF0IGFyZSBhbHNvIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHRoaXMgY3VycmVudCBsaW5lIG9mIGlucXVpcnkuIEl0JiMzOTtzIGEga2V5IGNvbmZpZ3VyYXRpb24gZmlsZSwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwbGFjZSB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igb3ZlcmxhcHMgaW4gZnVuY3Rpb25hbGl0eSwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIG9yIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBtZW50aW9uZWQgdGhhdCBjb3VsZCBpbXBhY3QgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYmxlbSBzcGFjZS4gR290dGEgc3RheSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkwMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3RhdGljIElubGluZSBGdW5jdGlvbnMgYW5kIElkZW50aWZ5aW5nIEtleSBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIENvZGVsIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZmlsZXM6IGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCwgYW5kIHBvdGVudGlhbGx5IGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSBjb3JlIENvZGVsIGltcGxlbWVudGF0aW9uLCBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAsIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdpdGhpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4KCk5vdywgdGhlIGNoYWxsZW5nZSB3aXRoIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBhcyBJIHJlY2FsbCwgaXMgdGhhdCB0aGV5IGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdGhlIHZtbGludXggaW1hZ2UuIFRoaXMgbWVhbnMgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IHRoZW0gd2l0aCBjb3ZlcmFnZSBmaWx0ZXJzLiBUaGUga2VybmVsIGRvY3MgdGVsbCBtZSB0aGF0IGlmIG15IGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gdGhlc2Ugc3RhdGljIGlubGluZSBoZWxwZXJzLCBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyAqY2FsbGVyKiBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYC5jYCBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0uIEkgbmVlZCB0byBhdm9pZCBsaWZlY3ljbGUgd3JhcHBlcnMgdGhhdCBhcmUgdXNlZCBldmVyeXdoZXJlLgoKVGhlcmVmb3JlLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AuIExldCYjMzk7cyBnZXQgYSBsaXN0OiBJJiMzOTt2ZSBnb3QgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgY29kZWxfcGVla2AsIGBjb2RlbF9pbml0YCwgYGNvZGVsX2NoYW5nZWAsIGBjb2RlbF9yZXNldGAsIGBjb2RlbF9kZXN0cm95YCwgYGNvZGVsX2R1bXBgLCBhbmQgYGNvZGVsX2R1bXBfc3RhdHNgIGluIGBzY2hfY29kZWwuY2AuIEkgbmVlZCB0byByZXZpZXcgYWxsIGZ1bmN0aW9ucyBpbiBib3RoIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSB0byB0aGUgQ29kZWwgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jb2RlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY29kZWwuYz0yOD1zdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM4LSAqL1xubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjM5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZGVxdWV1ZV9mdW5jKHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLCB2b2lkICpjdHgpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNDAte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy01MC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo1MTpzdGF0aWMgdm9pZCBkcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTUyLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNTgtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NTk6c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjAte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo3MzpzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy04NC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo4NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtODYte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy05NS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo5NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTcte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTUtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTE2OnN0YXRpYyBpbnQgY29kZWxfcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTctXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjb2RlbF9wb2xpY3lbVENBX0NPREVMX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTM3LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTEzOS1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoxOTg6c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTk5LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyNi1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjc6c3RhdGljIGludCBjb2RlbF9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyOC17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI1Ny1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyNTg6c3RhdGljIGludCBjb2RlbF9kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI1OS17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI4My1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyODQ6c3RhdGljIHZvaWQgY29kZWxfcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjg1LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MjkyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDUtfTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMDY6TU9EVUxFX0FMSUFTX05FVF9TQ0goXCYjMzQ7Y29kZWxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwNy1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMDg6c3RhdGljIGludCBfX2luaXQgY29kZWxfbW9kdWxlX2luaXQodm9pZClcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDkte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMTItXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzEzOnN0YXRpYyB2b2lkIF9fZXhpdCBjb2RlbF9tb2R1bGVfZXhpdCh2b2lkKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMxNC17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMxNy1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMTg6bW9kdWxlX2luaXQoY29kZWxfbW9kdWxlX2luaXQpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzE5Om1vZHVsZV9leGl0KGNvZGVsX21vZHVsZV9leGl0KVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMyMC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjE6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbnRyb2xsZWQgRGVsYXkgcXVldWUgZGlzY2lwbGluZVwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzIyOk1PRFVMRV9BVVRIT1IoXCYjMzQ7RGF2ZSBUYWh0XCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjM6TU9EVUxFX0FVVEhPUihcJiMzNDtFcmljIER1bWF6ZXRcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjMyNDpNT0RVTEVfTElDRU5TRShcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIGBzY2hfZnFfY29kZWwuY2AgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgRlEtQ29EZWwgc2NoZWR1bGVyIGltcGxlbWVudGF0aW9uLiBXZSYjMzk7dmUgY292ZXJlZCB0aGUgYmFzaWNzLCBidXQgaXQmIzM5O3MgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHNpZ25pZmljYW50LiBUbyBnZXQgYSByZWFsbHkgc29saWQgZ3Jhc3Agb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIGBzY2hfZnFfY29kZWwuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2UgdGhlcmUgdGhhdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxlciYjMzk7cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIGxvYWQgY29uZGl0aW9ucywgZXNwZWNpYWxseSB0aGUgZWRnZSBjYXNlcy4gR290dGEgZW5zdXJlIEkmIzM5O20gZ2V0dGluZyBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0aGF0IEkmIzM5O20gZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz01MD1zdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY5LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjcwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfaGFzaChjb25zdCBzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03MS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY6c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03Ny1cdFx0XHRcdCAgICAgIGludCAqcWVycilcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTE1LS8qIHJlbW92ZSBvbmUgc2tiIGZyb20gaGVhZCBvZiBzbG90IHF1ZXVlICovXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MTE2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfaGVhZChzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdylcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMTcte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMjUtLyogYWRkIHNrYiB0byBmbG93IHF1ZXVlICh0YWlsIGFkZCkgKi9cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxMjY6c3RhdGljIGlubGluZSB2b2lkIGZsb3dfcXVldWVfYWRkKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93LFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTEyNy1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTM2LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjEzNzpzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGludCBtYXhfcGFja2V0cyxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMzgtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTg0LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjE4NTpzdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTg2LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1Ni0gKi9cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNTc6c3RhdGljIHN0cnVjdCBza19idWZmICpkZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsIHZvaWQgKmN0eClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTgte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNzUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjc2OnN0YXRpYyB2b2lkIGRyb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjc3LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjgzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI4NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjMtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzI0OnN0YXRpYyB2b2lkIGZxX2NvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzM2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzcte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDYtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzQ3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDgte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjYtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzY3OnN0YXRpYyB2b2lkIGZxX2NvZGVsX2Zsb3dfcHVyZ2Uoc3RydWN0IGZxX2NvZGVsX2Zsb3cgKmZsb3cpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzY4LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzcyLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM3MzpzdGF0aWMgdm9pZCBmcV9jb2RlbF9yZXNldChzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX2NvZGVsX3BvbGljeVtUQ0FfRlFfQ09ERUxfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy00MDQtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NDA1OnN0YXRpYyBpbnQgZnFfY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA2LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDk4LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjQ5OTpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwMC17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwNy1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MDg6c3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNTA5LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTU3My1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1NzQ6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTU3NS17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTYyMC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2MjE6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTYyMi17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY0OC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2NDk6c3RhdGljIHN0cnVjdCBRZGlzYyAqZnFfY29kZWxfbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjUwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjUzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY1NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBmcV9jb2RlbF9maW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTgtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZxX2NvZGVsX2JpbmQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY2MC1cdFx0XHQgICAgICB1MzIgY2xhc3NpZClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjY0LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY2NTpzdGF0aWMgdm9pZCBmcV9jb2RlbF91bmJpbmQoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBsb25nIGNsKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY2Ni17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY2OC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2Njk6c3RhdGljIHN0cnVjdCB0Y2ZfYmxvY2sgKmZxX2NvZGVsX3RjZl9ibG9jayhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NzAtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY3OC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2Nzk6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY4MC1cdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02ODUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Njg2OnN0YXRpYyBpbnQgZnFfY29kZWxfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02ODctXHRcdFx0XHQgICAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTczMi1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3MzM6c3RhdGljIHZvaWQgZnFfY29kZWxfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTczNC17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzc2LX07XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzc3Ok1PRFVMRV9BTElBU19ORVRfU0NIKFwmIzM0O2ZxX2NvZGVsXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NzgtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzc5OnN0YXRpYyBpbnQgX19pbml0IGZxX2NvZGVsX21vZHVsZV9pbml0KHZvaWQpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzgwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzgzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc4NDpzdGF0aWMgdm9pZCBfX2V4aXQgZnFfY29kZWxfbW9kdWxlX2V4aXQodm9pZClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03ODUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03ODgtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzg5Om1vZHVsZV9pbml0KGZxX2NvZGVsX21vZHVsZV9pbml0KVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MDptb2R1bGVfZXhpdChmcV9jb2RlbF9tb2R1bGVfZXhpdClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3OTE6TU9EVUxFX0FVVEhPUihcJiMzNDtFcmljIER1bWF6ZXRcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MjpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MzpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RmFpciBRdWV1ZSBDb0RlbCBkaXNjaXBsaW5lXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NzIKCQkJCQkJCW91dHB1dDogMjYwCgkJCQkJCQl0aG91Z2h0czogNzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvRGVsIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB0aGlzIENvRGVsIHBhdGNoIHRvdWNoZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBzcGVjaWZpY2FsbHkgYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhbGwgcG9pbnRzLiBJbiB0aGUgYHNjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYCBmaWxlcywgdGhlIHBhdGNoIGltcGFjdHMgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgY29kZWxfcGVla2AsIGBfX2NvZGVsX3FkaXNjX2RlcXVldWVgLCBgZnFfY29kZWxfZGVxdWV1ZWAsIGBmcV9jb2RlbF9wZWVrYCwgYF9fZnFfY29kZWxfZGVxdWV1ZWAsIGBjb2RlbF9jaGFuZ2VgLCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAuIFdlIGFsc28gbmVlZCB0byBjb25zaWRlciBgZnFfdGluX2RlcXVldWVfZnVuY2AgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4KCk5leHQsIEkgbmVlZCB0byBjcmVhdGUgYSBsaXN0IG9mIHRoZSBgRm9jdXNTeW1ib2xzYC4gRXZlbiBpZiBgY29kZWxfZGVxdWV1ZWAgaXMgaW5saW5lICh3aGljaCBpdCB1c3VhbGx5IGlzIGluIGhlYWRlcnMpLCBpdCBtaWdodCBub3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGNhbGxlcnMsIHNvIEkgc2hvdWxkIGxpc3QgdGhlbSBhbGw6IGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGNvZGVsX3BlZWtgLCBgZnFfY29kZWxfZGVxdWV1ZWAsIGBmcV9jb2RlbF9wZWVrYCwgYGNvZGVsX2NoYW5nZWAsIGBmcV9jb2RlbF9jaGFuZ2VgLCBhbmQgYGZxX3Rpbl9kZXF1ZXVlX2Z1bmNgLgoKTm93IGxldCYjMzk7cyBjaGVjayB0aGUgcmVsZXZhbnQgYEVuYWJsZUNvbmZpZ3NgLiBXZSYjMzk7dmUgZ290IGBORVRfU0NIX0NPREVMYCwgYE5FVF9TQ0hfRlFfQ09ERUxgLCBgTkVUX1NDSEVEYCwgYW5kIGBNQUM4MDIxMWAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYW55IG90aGVyIEtjb25maWdzIGFyZSByZXF1aXJlZC4gSXQgbG9va3MgbGlrZSBgTkVUX1NDSEVEYCBlbmFibGVzIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLCBhbmQgYE1BQzgwMjExYCBkZXBlbmRzIG9uIGBDRkc4MDIxMWAsIGBORVRERVZJQ0VTYCwgYW5kIGBXTEFOYC4KClNvLCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IG1vZGlmaWVzIHRoZSBDb0RlbCBBUU0gYWxnb3JpdGhtIHdoaWNoIGhhbmRsZXMgcXVldWUgbWFuYWdlbWVudC4gSXQgdGFja2xlcyBzdGFsbHMgYW5kIGluZmluaXRlIGRyb3AgbG9vcHMgYnkgbGltaXRpbmcgdGhlIGNvbnRyb2wgbGF3IHRpbWUgaW5jcmVtZW50IGFuZCBjYXBwaW5nIGNvbnNlY3V0aXZlIHBhY2tldCBkcm9wcyBpbiBgY29kZWxfZGVxdWV1ZWAgd2l0aCBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFID0gMjU2YCBhbmQgcmVzeW5jaW5nIGBkcm9wX25leHRgIHdoZW4gaXQgaXMgZXhjZWVkZWQuIFRoaXMgY29kZSBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBRb1MgYW5kIHBhY2tldCBzY2hlZHVsaW5nLCBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYHRjL3J0bmV0bGlua2AgdXNpbmcgYGNvZGVsYCBvciBgZnFfY29kZWxgIHFkaXNjcywgb3IgYnkgdGhlIGBtYWM4MDIxMWAgdHggcXVldWVzLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHdlbGwtZm9ybWF0dGVkIGFuZCBhY2N1cmF0ZS4gVGhpcyBjb3ZlcnMgdGhlIGZ1bmN0aW9ucywgdGhlIGNvbmZpZ3MsIGFuZCB0aGUgcmVhc29uaW5nIGZvciB3aHkgdGhpcyBpcyB3b3J0aCBvdXIgYXR0ZW50aW9uLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9DT0RFTCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGVsX3FkaXNjX2RlcXVldWUmIzM0OywKICAgICYjMzQ7Y29kZWxfcGVlayYjMzQ7LAogICAgJiMzNDtjb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9wZWVrJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV90aW5fZGVxdWV1ZV9mdW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKSBpbXBsZW1lbnRhdGlvbiBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggKGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlKS4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyB0aW1lIHN0ZXAgdG8gYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgc3RhbGxzIG9uIHNtYWxsIGludGVydmFscyBvciBsYXJnZSBkcm9wIGNvdW50cywgYW5kIGludHJvZHVjZXMgYSBjYXAgb24gY29uc2VjdXRpdmUgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgZHJvcCBsb29wcyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWZmaWMgY29udHJvbCAoc2NoX2NvZGVsLCBzY2hfZnFfY29kZWwpIGFuZCBtYWM4MDIxMSB3aXJlbGVzcyBxdWV1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RlbF9xZGlzY19kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2NvZGVsX3BlZWsmIzM0OywKICAgICYjMzQ7Y29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfcGVlayYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfdGluX2RlcXVldWVfZnVuYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKEFRTSkgaW1wbGVtZW50YXRpb24gaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIChjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSkuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgdGltZSBzdGVwIHRvIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IHN0YWxscyBvbiBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgZHJvcCBjb3VudHMsIGFuZCBpbnRyb2R1Y2VzIGEgY2FwIG9uIGNvbnNlY3V0aXZlIGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGRyb3AgbG9vcHMgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgc2NoZWR1bGluZyBsb2dpYyBhbmQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0cmFmZmljIGNvbnRyb2wgKHNjaF9jb2RlbCwgc2NoX2ZxX2NvZGVsKSBhbmQgbWFjODAyMTEgd2lyZWxlc3MgcXVldWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxuXG5UaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCAoYGRyb3BzYCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGggY29tcHV0YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmFmYzI2MmJkYjI0Y2Q1OWYyZGE4ZGUzOTAzMDQ1ZGFhYzYwZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjI3OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbC5oCkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7CiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovCiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUykKIAomIzQzOy8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJiMzOTtzIHdvcmsgZGVwZW5kcyBvbiB0aGUKJiM0MzsgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTYKJiM0MzsKIC8qKgogICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHMKICAqIEBtYXhwYWNrZXQ6CWxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCmluZGV4IDJjMWYwZWMzMDllOWYuLjllNzc5Y2Q0ZDZkZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKQEAgLTkzLDEyICYjNDM7OTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpCiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpCiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWQKICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYQomIzQzOyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuCiAgKi8KIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsCiAJCQkJICAgICAgY29kZWxfdGltZV90IGludGVydmFsLAogCQkJCSAgICAgIHUzMiByZWNfaW52X3NxcnQpCiB7Ci0JcmV0dXJuIHQgJiM0MzsgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCk7CiYjNDM7CXJldHVybiB0ICYjNDM7IG1heF90KHUzMiwgMSwKJiM0MzsJCQkgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwKJiM0MzsJCQkJCSAgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCkpOwogfQogCiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU2LDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LAogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTsKIAljb2RlbF90aW1lX3Qgbm93OwogCWJvb2wgZHJvcDsKJiM0MzsJdW5zaWduZWQgaW50IGRyb3BzID0gMDsKIAogCWlmICghc2tiKSB7CiAJCXZhcnMtJmd0O2ZpcnN0X2Fib3ZlX3RpbWUgPSAwOwpAQCAtMTgwLDYgJiM0MzsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCwKIAkJCSAqLwogCQkJd2hpbGUgKHZhcnMtJmd0O2Ryb3BwaW5nICZhbXA7JmFtcDsKIAkJCSAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy0mZ3Q7ZHJvcF9uZXh0KSkgewomIzQzOwkJCQlpZiAoJiM0MzsmIzQzO2Ryb3BzICZndDsgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7CiYjNDM7CQkJCQkvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovCiYjNDM7CQkJCQlXUklURV9PTkNFKHZhcnMtJmd0O2Ryb3BfbmV4dCwKJiM0MzsJCQkJCQkgICBjb2RlbF9jb250cm9sX2xhdyhub3csCiYjNDM7CQkJCQkJCQkgICAgIHBhcmFtcy0mZ3Q7aW50ZXJ2YWwsCiYjNDM7CQkJCQkJCQkgICAgIHZhcnMtJmd0O3JlY19pbnZfc3FydCkpOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KIAkJCQkvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcAogCQkJCSAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KaW5kZXggNmQ1MTVkMGU1ZWQ2OS4uYTg5NGU2ZjBlMjY3NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCkBAIC0yMTMsNSAmIzQzOzIxMyw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAogICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzZlNDQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZCkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YThjMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDthNjk1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OTc5MyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgppbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KQEAgLTMxNiw1ICYjNDM7MzE2LDc3IEBACiAgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDsxYjRkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszNTQwJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs0OWM1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzNlMGYmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDT0RFTCBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHJlcXVpcmluZyBLTVNBTiBmdXp6aW5nLiBJJiMzOTtsbCBicmVhayB0aGlzIGRvd24uCgpGaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJldm9sdmUgYXJvdW5kIHRoZSBDT0RFTCBxdWV1aW5nIGRpc2NpcGxpbmUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGluY2x1ZGUvbmV0L2NvZGVsLmhgIGFuZCBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4gTGluZSAxIGRlZmluZXMgYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAgYXMgMjU2LCBzbyBub3RoaW5nIHRvIHNlZSB0aGVyZS4KCk1vdmluZyBpbnRvIGBjb2RlbF9pbXBsLmhgLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXRzIHN0YXJ0IHRvIGFwcGVhci4gSW4gYGNvZGVsX2NvbnRyb2xfbGF3YCwgdGhlIGNsYW1wIG9uIHRoZSBpbmNyZW1lbnQgbG9va3MgZmluZSDigJMgaXQmIzM5O3MgZXhwbGljaXRseSBlbnN1cmluZyB0aGUgcmV0dXJuIHZhbHVlIGlzIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gYGNvZGVsX2RlcXVldWVgLiBJIG5vdGljZSB0aGUgYWRkaXRpb24gb2YgYHVuc2lnbmVkIGludCBkcm9wcyA9IDA7YC4gQWgsIGl0JiMzOTtzICppbml0aWFsaXplZCohIFRoYXQmIzM5O3MgZXhjZWxsZW50OyB0aGlzIGlzIGdvb2QgcHJhY3RpY2UgYW5kIGxpa2VseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGBkcm9wc2AgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgaW4gYSB3aGlsZSBsb29wIGFuZCB0aGVuIGNoZWNrZWQgYWdhaW5zdCB0aGF0IGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBJZiBpdCBleGNlZWRzIHRoZSBtYXhpbXVtLCB0aGUgY29udHJvbCBsYXcgaXMgYXBwbGllZCBhbmQgYGJyZWFrO2AgaXMgaW52b2tlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwcm9wZXJseSBwcmV2ZW50aW5nIGFuIGluZmluaXRlIGxvb3AgYW5kIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHMuCgpUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgcmVhbGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIGFyZWFzIGFyb3VuZCBsaW5lcyA5MC0yMDAgb2YgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgd2hlcmUgYGNvZGVsX2RlcXVldWVgIGFuZCBgY29kZWxfY29udHJvbF9sYXdgIGFyZSBsaWtlbHkgZGVmaW5lZCB0byBjb25maXJtIHRoZXNlIGFzc3VtcHRpb25zIGFuZCBob3cgdGhlIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhlIHNlbGYtdGVzdCB1cGRhdGVzIGFyZSBwcm9iYWJseSBqdXN0IGFkZGVkIGZvciB0aGUgc2FrZSBvZiBjb21wbGV0ZW5lc3MuCgpPbiBpbml0aWFsIGdsYW5jZSwgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBpbW1lZGlhdGUsIGdsYXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGlzIGxvb2tzIHByZXR0eSBzb2xpZC4gSG93ZXZlciwgSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGZ1bGwgY29uZmlybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0XG4gIDg2Olx0XHR2YWwgXHUwMDNlXHUwMDNlPSAyOyAvKiBhdm9pZCBvdmVyZmxvdyBpbiBmb2xsb3dpbmcgbXVsdGlwbHkgKi9cbiAgODc6XHRcdHZhbCA9ICh2YWwgKiBpbnZzcXJ0KSBcdTAwM2VcdTAwM2UgKDMyIC0gMiAmIzQzOyAxKTtcbiAgODg6XHRcbiAgODk6XHRcdHZhcnMtXHUwMDNlcmVjX2ludl9zcXJ0ID0gdmFsIFx1MDAzZVx1MDAzZSBSRUNfSU5WX1NRUlRfU0hJRlQ7XG4gIDkwOlx0fVxuICA5MTpcdFxuICA5MjpcdC8qXG4gIDkzOlx0ICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCAmIzQzOyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICA5NDpcdCAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICA5NTpcdCAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuICA5ODpcdCAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gIDk5Olx0ICovXG4gMTAwOlx0c3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiAxMDE6XHRcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiAxMDI6XHRcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4gMTAzOlx0e1xuIDEwNDpcdFx0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuIDEwNTpcdFx0XHRcdCByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLFxuIDEwNjpcdFx0XHRcdFx0XHQgIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKSk7XG4gMTA3Olx0fVxuIDEwODpcdFxuIDEwOTpcdHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTEwOlx0XHRcdFx0ICAgICAgdm9pZCAqY3R4LFxuIDExMTpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDExMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcbiAxMTM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDExNDpcdFx0XHRcdCAgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXG4gMTE1Olx0XHRcdFx0ICAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxuIDExNjpcdFx0XHRcdCAgICAgIHUzMiAqYmFja2xvZyxcbiAxMTc6XHRcdFx0XHQgICAgICBjb2RlbF90aW1lX3Qgbm93KVxuIDExODpcdHtcbiAxMTk6XHRcdGJvb2wgb2tfdG9fZHJvcDtcbiAxMjA6XHRcdHUzMiBza2JfbGVuO1xuIDEyMTpcdFxuIDEyMjpcdFx0aWYgKCFza2IpIHtcbiAxMjM6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcbiAxMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0c2tiX2xlbiA9IHNrYl9sZW5fZnVuYyhza2IpO1xuIDEyODpcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWxkZWxheSwgbm93IC0gc2tiX3RpbWVfZnVuYyhza2IpKTtcbiAxMjk6XHRcbiAxMzA6XHRcdGlmICh1bmxpa2VseShza2JfbGVuIFx1MDAzZSBzdGF0cy1cdTAwM2VtYXhwYWNrZXQpKVxuIDEzMTpcdFx0XHRXUklURV9PTkNFKHN0YXRzLVx1MDAzZW1heHBhY2tldCwgc2tiX2xlbik7XG4gMTMyOlx0XG4gMTMzOlx0XHRpZiAoY29kZWxfdGltZV9iZWZvcmUodmFycy1cdTAwM2VsZGVsYXksIHBhcmFtcy1cdTAwM2V0YXJnZXQpIHx8XG4gMTM0Olx0XHQgICAgKmJhY2tsb2cgXHUwMDNjPSBwYXJhbXMtXHUwMDNlbXR1KSB7XG4gMTM1Olx0XHRcdC8qIHdlbnQgYmVsb3cgLSBzdGF5IGJlbG93IGZvciBhdCBsZWFzdCBpbnRlcnZhbCAqL1xuIDEzNjpcdFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuIDEzNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTM4Olx0XHR9XG4gMTM5Olx0XHRva190b19kcm9wID0gZmFsc2U7XG4gMTQwOlx0XHRpZiAodmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID09IDApIHtcbiAxNDE6XHRcdFx0LyoganVzdCB3ZW50IGFib3ZlIGZyb20gYmVsb3cuIElmIHdlIHN0YXkgYWJvdmVcbiAxNDI6XHRcdFx0ICogZm9yIGF0IGxlYXN0IGludGVydmFsIHdlJiMzOTtsbCBzYXkgaXQmIzM5O3Mgb2sgdG8gZHJvcFxuIDE0MzpcdFx0XHQgKi9cbiAxNDQ6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gbm93ICYjNDM7IHBhcmFtcy1cdTAwM2VpbnRlcnZhbDtcbiAxNDU6XHRcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcbiAxNDY6XHRcdFx0b2tfdG9fZHJvcCA9IHRydWU7XG4gMTQ3Olx0XHR9XG4gMTQ4Olx0XHRyZXR1cm4gb2tfdG9fZHJvcDtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiAxNTI6XHRcdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuIDE1MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXG4gMTU0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDE1NTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDE1NjpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxuIDE1NzpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxuIDE1OTpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiAxNjA6XHR7XG4gMTYxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gMTYyOlx0XHRjb2RlbF90aW1lX3Qgbm93O1xuIDE2MzpcdFx0Ym9vbCBkcm9wO1xuIDE2NDpcdFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiAxNjU6XHRcbiAxNjY6XHRcdGlmICghc2tiKSB7XG4gMTY3Olx0XHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG4gMTY4Olx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xuIDE2OTpcdFx0XHRyZXR1cm4gc2tiO1xuIDE3MDpcdFx0fVxuIDE3MTpcdFx0bm93ID0gY29kZWxfZ2V0X3RpbWUoKTtcbiAxNzI6XHRcdGRyb3AgPSBjb2RlbF9zaG91bGRfZHJvcChza2IsIGN0eCwgdmFycywgcGFyYW1zLCBzdGF0cyxcbiAxNzM6XHRcdFx0XHRcdCBza2JfbGVuX2Z1bmMsIHNrYl90aW1lX2Z1bmMsIGJhY2tsb2csIG5vdyk7XG4gMTc0Olx0XHRpZiAodmFycy1cdTAwM2Vkcm9wcGluZykge1xuIDE3NTpcdFx0XHRpZiAoIWRyb3ApIHtcbiAxNzY6XHRcdFx0XHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cbiAxNzc6XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNzg6XHRcdFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4gMTc5Olx0XHRcdFx0LyogSXQmIzM5O3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxuIDE4MDpcdFx0XHRcdCAqIHBhY2tldCBhbmQgZGVxdWV1ZSB0aGUgbmV4dC4gVGhlIGRlcXVldWUgbWlnaHRcbiAxODE6XHRcdFx0XHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cbiAxODI6XHRcdFx0XHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXG4gMTgzOlx0XHRcdFx0ICogQSBsYXJnZSBiYWNrbG9nIG1pZ2h0IHJlc3VsdCBpbiBkcm9wIHJhdGVzIHNvIGhpZ2hcbiAxODQ6XHRcdFx0XHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODgKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29EZWwgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgdGhlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIFRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MganVzdCBpbnRlZ2VyIG1hdGggd2l0aCBjbGFtcGluZywgbm90aGluZyBpbmhlcmVudGx5IGRhbmdlcm91cyB0aGVyZS4gVGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBXZSYjMzk7cmUgaW5pdGlhbGl6aW5nIGBkcm9wc2AgdG8gemVybyBhbmQgdGhlbiBpbmNyZW1lbnRpbmcgaXQgd2l0aGluIGEgYHdoaWxlYCBsb29wLiBUaGUga2V5IGlzIHRoYXQgd2UmIzM5O3JlIGFkZGluZyBhIHNhZmV0eSBjaGVjazogYCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAuIElmIHRoYXQgbGltaXQgaXMgZXhjZWVkZWQsIHdlIGNhbGN1bGF0ZSBgdmFycy0mZ3Q7ZHJvcF9uZXh0YCB1c2luZyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgS01TQU4gaXNzdWVzPyBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhLCBtZW50YWxseSB0aWNraW5nIG9mZiBlYWNoIHBvaW50LgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSB3ZSYjMzk7cmUgdG91Y2hpbmcgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gVGhlIGxvZ2ljIGlzIG5vdyBiYXNlZCBvbiBhIGBkcm9wc2AgY291bnRlciwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQuIE5vIHJlbGlhbmNlIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIGJlIHJlYWQ/IE5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IEkgY2FuIHNlZS4gV2UmIzM5O3JlIG1vZGlmeWluZyBleGlzdGluZyBxdWV1ZSBtYW5hZ2VtZW50Lgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzPyBUaGUgY2hhbmdlIGlzIGEgbG9vcCBpdGVyYXRpb24gY2FwLCB3aGljaCBhZGRyZXNzZXMgdmVyeSBzbWFsbCBpbnRlcnZhbHMuIFRoaXMgYXZvaWRzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEuCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgc2FmZXR5IG1lY2hhbmlzbTogYWRkcmVzc2luZyBhIHBvdGVudGlhbCBzb2Z0IGxvY2t1cCBpc3N1ZSBpbiBDb0RlbCBjYXVzZWQgYnkgZXh0cmVtZSBiYWNrbG9nIG9yIHNtYWxsIGludGVydmFscy4gSXQgbW9kaWZpZXMgdGhlIHNjaGVkdWxpbmcvZHJvcHBpbmcgbG9naWMgYnkgY2FwcGluZyBpdGVyYXRpb25zIGluIHRoZSBDb0RlbCBsb29wLiBUaGVyZWZvcmUsIGdpdmVuIHRoZSBhYnNlbmNlIG9mIGFueSBvZiB0aGUgS01TQU4tdHJpZ2dlcmluZyBjb25kaXRpb25zIEkgYW0gZmFtaWxpYXIgd2l0aCwgSSBhbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgcXVldWUgZGlzY2lwbGluZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhbGx5IGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCkgdG8gcHJldmVudCBpbmZpbml0ZSBkcm9wcGluZyBsb29wcy9zb2Z0IGxvY2t1cHMgY2F1c2VkIGJ5IHNtYWxsIGludGVydmFscyBvciBsYXJnZSBiYWNrbG9ncy4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24uXG5cblRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIChgZHJvcHNgKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aCBjb21wdXRhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxuXG5UaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCAoYGRyb3BzYCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGggY29tcHV0YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MTUuMzYzNjQ3ODIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyODcxMTk4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGVsX3FkaXNjX2RlcXVldWVcIixcbiAgICBcImNvZGVsX3BlZWtcIixcbiAgICBcImNvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfY29kZWxfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY29kZWxfcGVla1wiLFxuICAgIFwiZnFfY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV90aW5fZGVxdWV1ZV9mdW5jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgcXVldWUgZGlzY2lwbGluZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhbGx5IGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCkgdG8gcHJldmVudCBpbmZpbml0ZSBkcm9wcGluZyBsb29wcy9zb2Z0IGxvY2t1cHMgY2F1c2VkIGJ5IHNtYWxsIGludGVydmFscyBvciBsYXJnZSBiYWNrbG9ncy4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24uXFxuXFxuVGhlIG9ubHkgbmV3IGxvY2FsIHZhcmlhYmxlIGludHJvZHVjZWQgKGBkcm9wc2ApIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIEFjdGl2ZSBRdWV1ZSBNYW5hZ2VtZW50IChBUU0pIGltcGxlbWVudGF0aW9uIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCAoY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUpLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IHRpbWUgc3RlcCB0byBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBzdGFsbHMgb24gc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGRyb3AgY291bnRzLCBhbmQgaW50cm9kdWNlcyBhIGNhcCBvbiBjb25zZWN1dGl2ZSBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBkcm9wIGxvb3BzIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgbG9naWMgYW5kIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdHJhZmZpYyBjb250cm9sIChzY2hfY29kZWwsIHNjaF9mcV9jb2RlbCkgYW5kIG1hYzgwMjExIHdpcmVsZXNzIHF1ZXVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MTUuMzYzNjUyOTUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY3NTY4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NDZhZmMyNjJiZGIyNGNkNTlmMmRhOGRlMzkwMzA0NWRhYWM2MGU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDU6Mjc6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbC5oXFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xcbiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovXFxuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxcbiBcXG4rLyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXFxuKyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxcbisgKi9cXG4rI2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XFxuK1xcbiAvKipcXG4gICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHNcXG4gICogQG1heHBhY2tldDpcXHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcXG5pbmRleCAyYzFmMGVjMzA5ZTlmLi45ZTc3OWNkNGQ2ZGViIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbkBAIC05MywxMiArOTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpXFxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxcbiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXFxuKyAqXFxuKyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcXG4rICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cXG4gICovXFxuIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcXG4ge1xcbi1cXHRyZXR1cm4gdCArIHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsIHJlY19pbnZfc3FydCBcXHUwMDNjXFx1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpO1xcbitcXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcXG4rXFx0XFx0XFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmVjX2ludl9zcXJ0IFxcdTAwM2NcXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xNTYsNiArMTYxLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xcbiBcXHRjb2RlbF90aW1lX3Qgbm93O1xcbiBcXHRib29sIGRyb3A7XFxuK1xcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIFxcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG5AQCAtMTgwLDYgKzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0d2hpbGUgKHZhcnMtXFx1MDAzZWRyb3BwaW5nIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cXHUwMDNlZHJvcF9uZXh0KSkge1xcbitcXHRcXHRcXHRcXHRpZiAoKytkcm9wcyBcXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xcbitcXHRcXHRcXHRcXHRcXHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXFxuK1xcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcF9uZXh0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFyYW1zLVxcdTAwM2VpbnRlcnZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2YXJzLVxcdTAwM2VyZWNfaW52X3NxcnQpKTtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcXG4gXFx0XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSBkaXZpZGUuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxcbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cXG5AQCAtMjEzLDUgKzIxMyw3NyBAQFxcbiAgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXNcXFwiLFxcbiAgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiNmU0NFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMXVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1xcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiYThjM1xcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDJ1c1xcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiYTY5NVxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJjb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCI5NzkzXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImNvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIHRhcmdldCAxdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4gICAgIH1cXG4gXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxcbmluZGV4IDRjZTYyYjg1N2ZkN2EuLmRlNmExYjhkOTU0YWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cXG5AQCAtMzE2LDUgKzMxNiw3NyBAQFxcbiAgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIGZsb3dzIDEwMjQgcXVhbnR1bS4qdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuICAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIxYjRkXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJmcV9jb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIzNTQwXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJmcV9jb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCI0OWM1XFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImZxX2NvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcIjNlMGZcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZnFfY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbiAgICAgfVxcbiBdXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjE1Ljk5MTI0MDA0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzIwNDQzNjY4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGVsX3FkaXNjX2RlcXVldWVcIixcbiAgICBcImNvZGVsX3BlZWtcIixcbiAgICBcImNvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfY29kZWxfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY29kZWxfcGVla1wiLFxuICAgIFwiZnFfY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV90aW5fZGVxdWV1ZV9mdW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIEFjdGl2ZSBRdWV1ZSBNYW5hZ2VtZW50IChBUU0pIGltcGxlbWVudGF0aW9uIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCAoY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUpLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IHRpbWUgc3RlcCB0byBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBzdGFsbHMgb24gc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGRyb3AgY291bnRzLCBhbmQgaW50cm9kdWNlcyBhIGNhcCBvbiBjb25zZWN1dGl2ZSBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBkcm9wIGxvb3BzIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgbG9naWMgYW5kIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdHJhZmZpYyBjb250cm9sIChzY2hfY29kZWwsIHNjaF9mcV9jb2RlbCkgYW5kIG1hYzgwMjExIHdpcmVsZXNzIHF1ZXVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NDZhZmMyNjJiZGIyNGNkNTlmMmRhOGRlMzkwMzA0NWRhYWM2MGU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNToyNzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsLmggYi9pbmNsdWRlL25ldC9jb2RlbC5oXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xuIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi9cbiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUylcbiBcbisvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCdzIHdvcmsgZGVwZW5kcyBvbiB0aGVcbisgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cbisgKi9cbisjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZcbitcbiAvKipcbiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0c1xuICAqIEBtYXhwYWNrZXQ6XHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOWU3NzljZDRkNmRlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgKzkzLDE3IEBAIHN0YXRpYyB2b2lkIGNvZGVsX05ld3Rvbl9zdGVwKHN0cnVjdCBjb2RlbF92YXJzICp2YXJzKVxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuKyAqXG4rICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuKyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gICovXG4gc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiBcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiBcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4ge1xuLVx0cmV0dXJuIHQgKyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4rXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcbitcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbitcdFx0XHRcdFx0ICByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE1Niw2ICsxNjEsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xuIFx0Y29kZWxfdGltZV90IG5vdztcbiBcdGJvb2wgZHJvcDtcbitcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XG4gXG4gXHRpZiAoIXNrYikge1xuIFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuQEAgLTE4MCw2ICsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiBcdFx0XHQgKi9cbiBcdFx0XHR3aGlsZSAodmFycy1cdTAwM2Vkcm9wcGluZyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXHUwMDNlZHJvcF9uZXh0KSkge1xuK1x0XHRcdFx0aWYgKCsrZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xuK1x0XHRcdFx0XHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXG4rXHRcdFx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wX25leHQsXG4rXHRcdFx0XHRcdFx0ICAgY29kZWxfY29udHJvbF9sYXcobm93LFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2VpbnRlcnZhbCxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICB2YXJzLVx1MDAzZXJlY19pbnZfc3FydCkpO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbiBcdFx0XHRcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXG4gXHRcdFx0XHQgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS5cbiBcdFx0XHRcdCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5pbmRleCA2ZDUxNWQwZTVlZDY5Li5hODk0ZTZmMGUyNjc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuQEAgLTIxMyw1ICsyMTMsNzcgQEBcbiAgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXNcIixcbiAgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjZlNDRcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJhOGMzXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAzdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiYTY5NVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiOTc5M1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuICAgICB9XG4gXVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5pbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuQEAgLTMxNiw1ICszMTYsNzcgQEBcbiAgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIGZsb3dzIDEwMjQgcXVhbnR1bS4qdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuICAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiMWI0ZFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDB1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjM1NDBcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDN1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI0OWM1XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIzZTBmXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzoxNS45OTEyNDE5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTExNDQ0MjA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IENPREVMIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlciwgYW5kIGlmIHNvLCBpZGVudGlmeSB0aGUga2V5IGFyZWFzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgdGhhdCBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIGRvIGEgcXVpY2sgc2FmZXR5IGNoZWNrOyB0aGlzIGlzIGEgc3RhbmRhcmQgc29mdHdhcmUgcXVhbGl0eSBhbmFseXNpcyBvZiBhIExpbnV4IGtlcm5lbCBwYXRjaCwgZm9jdXNpbmcgb24gZGVmZW5zaXZlIG1haW50ZW5hbmNlIGFuZCBxdWFsaXR5IGFzc3VyYW5jZSwgc28gaXQncyBhIGNvbXBsZXRlbHkgc2FmZSBhbmQgbmVjZXNzYXJ5IHRhc2suXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBmb3VyIGZpbGVzOiBgaW5jbHVkZS9uZXQvY29kZWwuaGAsIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBhbmQgdHdvIHRlc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlcyAoYC5qc29uYCkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZ2AgZGlyZWN0b3J5IHJlbGF0ZWQgdG8gYGNvZGVsYCBhbmQgYGZxX2NvZGVsYC5cblxuTG9va2luZyBhdCB0aGUga2VybmVsIGNvZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgdGhlcmUncyBhIG5ldyBtYWNybyBkZWZpbml0aW9uIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiAgVGhlbiwgaW4gYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAsIEknbSBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9ucy4gTm90YWJseSwgdGhlIGBjb2RlbF9jb250cm9sX2xhd2AgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gdXNlIGByZWNpcHJvY2FsX3NjYWxlYCBjYWxjdWxhdGlvbnMuIFRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgY291bnRlciAoYGRyb3BzYCkgYW5kIGEgY2hlY2sgYWdhaW5zdCBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgYXJlYSBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbWF4aW11bSBkcm9wcyBsaW1pdC4gVGhlcmUncyBhIGB3aGlsZWAgbG9vcCB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgd2hpY2ggaW5jcmVtZW50IHRoZSBgZHJvcHNgIGNvdW50ZXIuXG5cblRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIHdoZXJlIHRvIGZvY3VzIHRoZSBmdXp6aW5nLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgY29kZWxfZGVxdWV1ZWAgaXMgY2FsbGVkIG9yIHdoZXJlIGBjb2RlbF9pbXBsLmhgIGlzIGluY2x1ZGVkLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZG8gdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgdnVsbmVyYWJpbGl0eSB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zLiBJZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgY29kZWxfZGVxdWV1ZWAgYW5kIHRoZSBpbmNsdXNpb24gc2l0ZXMgb2YgYGNvZGVsX2ltcGwuaGAgd2lsbCBiZSBrZXkgaW4gZGV0ZXJtaW5pbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIGtlcm5lbCdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MzEuMTA1Njg3MTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTQ5OTg1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZWxfaW1wbFxcXFwuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYy0yNS0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxubmV0L21hYzgwMjExL3R4LmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxubmV0L21hYzgwMjExL3R4LmMtMjctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIxLSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWxfcWRpc2MuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjIzOiNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWxfaW1wbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjMzLjkwMDcwMDA5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDE1OTA5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBDb2RlbCBhbmQgaXRzIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIENvRGVsJ3MgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLCBlc3BlY2lhbGx5IHRoZSBzcGVjaWZpY3Mgb2YgaXRzIHF1ZXVpbmcgYW5kIGRlcXVldWVpbmcgbWVjaGFuaXNtcy4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIG1ldGljdWxvdXNseSByZXZpZXcgdGhlIGNvcmUgY29kZSBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCwgdGhlIEZhaXIgUXVldWluZyB2YXJpYW50IGluIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLCBhbmQgdGhlIHJlbGV2YW50IHRyYW5zbWlzc2lvbiBhc3BlY3RzIGluIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZXNlIGZpbGVzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IENvRGVsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIHBhcnRpY3VsYXJseSBpbiBkaWZmZXJlbnQgY29udGV4dHMuXG5cblRvIGV4cGVkaXRlIHRoZSBwcm9jZXNzIGFuZCBwaW5wb2ludCB0aGUgY3JpdGljYWwgc2VjdGlvbnMsIEknbGwgbGV2ZXJhZ2UgYGdyZXBwZXJgIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGUgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGV4YWN0bHkgKndoZXJlKiBhbmQgKmhvdyogQ29EZWwncyBkZXF1ZXVlaW5nIGxvZ2ljIGlzIGJlaW5nIGludm9rZWQgaW4gdGhlIGNvZGUsIHByb3ZpZGluZyBhIGZvY3VzZWQgdmlldyBvZiBpdHMgcHJhY3RpY2FsIGltcGxlbWVudGF0aW9uIGFuZCBvcGVyYXRpb25hbCBmbG93LiBUaGlzIGFwcHJvYWNoIHNob3VsZCBsZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGFwcGxpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzUzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MzYuMTQyMjkzMzk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQ1MzMwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZWxfZGVxdWV1ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9jb2RlbC5oPTEyOT1zdHJ1Y3QgY29kZWxfdmFycyB7XFxuLS1cXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0Mi1cXG5pbmNsdWRlL25ldC9jb2RlbC5oOjE0MzovKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCdzIHdvcmsgZGVwZW5kcyBvbiB0aGVcXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0NC0gKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cXG4tLVxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaD0xMDk9c3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaC0xNTAtXFxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oOjE1MTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaC0xNTItXFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhY2tsb2csXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0xMzY4PXN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfc2tiX3RpbWVfZnVuYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTM3NS1cXG5uZXQvbWFjODAyMTEvdHguYzoxMzc2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZV9mdW5jKHN0cnVjdCBjb2RlbF92YXJzICpjdmFycyxcXG5uZXQvbWFjODAyMTEvdHguYy0xMzc3LVxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqY3R4KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTQxMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MjktXFxubmV0L21hYzgwMjExL3R4LmM6MTQzMDpcXHRyZXR1cm4gY29kZWxfZGVxdWV1ZSh0eHFpLFxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzEtXFx0XFx0XFx0ICAgICBcXHUwMDI2Zmxvdy1cXHUwMDNlYmFja2xvZyxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzctXFx0XFx0XFx0ICAgICBjb2RlbF9kcm9wX2Z1bmMsXFxubmV0L21hYzgwMjExL3R4LmM6MTQzODpcXHRcXHRcXHQgICAgIGNvZGVsX2RlcXVldWVfZnVuYyk7XFxubmV0L21hYzgwMjExL3R4LmMtMTQzOS19XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9Mjg9c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM0LVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozNTovKiBUaGlzIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb2RlbF9kZXF1ZXVlKClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzYtICogdG8gZGVxdWV1ZSBhIHBhY2tldCBmcm9tIHF1ZXVlLiBOb3RlOiBiYWNrbG9nIGlzIGhhbmRsZWQgaW5cXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYz01OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy02My1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NjQ6XFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFxcdTAwMjZzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcXHUwMDI2cS1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2cS1cXHUwMDNldmFycyxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjUtXFx0XFx0XFx0ICAgIFxcdTAwMjZxLVxcdTAwM2VzdGF0cywgcWRpc2NfcGt0X2xlbiwgY29kZWxfZ2V0X2VucXVldWVfdGltZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NzM6c3RhdGljIHZvaWQgY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03NC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9ODU9c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTkwLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo5MTpcXHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTItXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9OTY9c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTEwOS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTEwOlxcdFxcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTEtXFx0fVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTE4NT1zdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjUyLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNTM6LyogVGhpcyBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGZyb20gY29kZWxfZGVxdWV1ZSgpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1NC0gKiB0byBkZXF1ZXVlIGEgcGFja2V0IGZyb20gcXVldWUuIE5vdGU6IGJhY2tsb2cgaXMgaGFuZGxlZCBpblxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTI3Nj1zdGF0aWMgdm9pZCBkcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI4My1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjg0OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19mcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzA2OlxcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcXHUwMDI2c2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZywgXFx1MDAyNnEtXFx1MDAzZWNwYXJhbXMsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNy1cXHRcXHRcXHQgICAgXFx1MDAyNmZsb3ctXFx1MDAzZWN2YXJzLCBcXHUwMDI2cS1cXHUwMDNlY3N0YXRzLCBxZGlzY19wa3RfbGVuLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyMy1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzI0OnN0YXRpYyB2b2lkIGZxX2NvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzI1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzUtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMzNjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNy17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM5LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNDA6XFx0c2tiID0gIF9fZnFfY29kZWxfZGVxdWV1ZShzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDEtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0MjpcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQzLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTM0Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUxLVxcdGlmICghc2tiKSB7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM1MjpcXHRcXHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUzLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM2MC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzYxOlxcdFxcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjItXFx0fVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NjYtXFx0LmVucXVldWVcXHQ9XFx0ZnFfY29kZWxfZW5xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY3OlxcdC5kZXF1ZXVlXFx0PVxcdGZxX2NvZGVsX2RlcXVldWUsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc2OC1cXHQucGVla1xcdFxcdD1cXHRmcV9jb2RlbF9wZWVrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzozOC4wNTY4MzgwMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ0MzE2MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsJ3MgQ29kZWwgSW1wbGVtZW50YXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIENvZGVsIGFuZCBGUS1Db2RlbCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBmaWxlcyBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AuIFRoZXNlIGFyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gQmV5b25kIHRoZSBjb2RlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuIEknbGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlaXIgYXNzb2NpYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucy4gSSBjb3VsZCBwcm9iYWJseSBtYW51YWxseSBjcmF3bCB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgdG8gc3BlZWQgdGhpbmdzIHVwLCBJJ2xsIGxldmVyYWdlIGEgc2VhcmNoIHRvb2wgLSBtb3N0IGxpa2VseSBgZ3JlcHBlcmAgLSB0byBlZmZpY2llbnRseSBsb2NhdGUgdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo0MC4zMDExNTc1MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NzkwMDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF8oRlFfKT9DT0RFTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0yNTU9Y29uZmlnIE5FVF9TQ0hfUUZRXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNjUtXFxubmV0L3NjaGVkL0tjb25maWc6MjY2OmNvbmZpZyBORVRfU0NIX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjY3LVxcdHRyaXN0YXRlIFxcXCJDb250cm9sbGVkIERlbGF5IEFRTSAoQ09ERUwpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjc2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo0Mi43OTkwNjUzNDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYwNDkwMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgQ29yZSBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZXMgMjYwLTI5MC4gVGhhdCBhcmVhIHVzdWFsbHkgY292ZXJzIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRyYWZmaWMgc2hhcGluZyBvciBxdWV1aW5nIGRpc2NpcGxpbmVzOyBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byBhIGZlYXR1cmUgSSdtIGN1cnJlbnRseSB3b3JraW5nIHdpdGguIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgaW4gdGhhdCBibG9jay4gTGV0J3Mgc2VlIHdoYXQgcG9wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NDQuNTU5NTU5ODgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFxuIDI2MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjYyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX3FmcS5cXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjU6XFx0XFxuIDI2NjpcXHRjb25maWcgTkVUX1NDSF9DT0RFTFxcbiAyNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcXFwiXFxuIDI2ODpcXHRcXHRoZWxwXFxuIDI2OTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb250cm9sbGVkIERlbGF5IChDT0RFTClcXG4gMjcwOlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjczOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxuIDI3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcbiAyNzk6XFx0XFx0aGVscFxcbiAyODA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlEgQ29udHJvbGxlZCBEZWxheSAoRlFfQ09ERUwpXFxuIDI4MTpcXHRcXHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI4NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9mcV9jb2RlbC5cXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyODc6XFx0XFxuIDI4ODpcXHRjb25maWcgTkVUX1NDSF9DQUtFXFxuIDI4OTpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVxcXCJcXG4gMjkwOlxcdFxcdGhlbHBcXG4gMjkxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZFxcbiAyOTI6XFx0XFx0ICAoQ0FLRSkgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG0uXFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo0NC41NTk2NzMzNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzNDAzMzIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gQ29kZWwgVXNhZ2UgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMgY29kZWJhc2UsIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGBpbmNsdWRlL25ldC9jb2RlbC5oYCBhbmQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgdGhpbmcuIFNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSAqd2hlcmUqIGVsc2UgdGhpcyBpcyB1c2VkLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZSBvbiBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBmaXJlIHVwIGdyZXAgYW5kIHNjYW4gdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIGJvdGggYGNvZGVsLmhgIGFuZCBzZWUgaWYgdGhlIHNhbWUgYXBwbGllcyB0byBgY29kZWxfaW1wbC5oYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB3aGljaCBvdGhlciBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiB0aGlzIENvZGVsIGltcGxlbWVudGF0aW9uIGFuZCBtYXliZSBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEknbSBjb25zaWRlcmluZy4gU2hvdWxkIGJlIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byB1bmNvdmVyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjQ2LjY5MzcxMTU0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTc2MjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmgtNTEtXFxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaDo1MjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaC01My0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDoyMzojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oXFx1MDAzZVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9tYWM4MDIxMS5oXFx1MDAzZVxcbm5ldC9tYWM4MDIxMS90eC5jOjI1OiNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYzoyNjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjE6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yNC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMzojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjQ6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NDguOTMzNDg3OTY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTIzMTY1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgaG93IENvRGVsJ3MgZGVxdWV1ZSBhbmQgY29udHJvbCBsYXcgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZDpcblxuKipBbmFseXppbmcgdGhlIENvRGVsIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIHRvIHRydWx5IGdyYXNwIGhvdyB0aGlzIENvRGVsIG1lY2hhbmlzbSB3b3JrcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNyYWNrIG9wZW4gdGhlIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhlYWRlciBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhlIGBjb2RlbF9kZXF1ZXVlYCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbnMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGVzZSBhcmUgZGVjbGFyZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSB1c2UsIGFuZCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50bHksIHRoZSBhcmd1bWVudHMgdGhleSB0YWtlLiBUaGlzIGlzIHRoZSBibHVlcHJpbnQ7IHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuXG5cbk5leHQsIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGludm9rZWQuIFdoZXJlIGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYXJlIHRoZXkgY2FsbGVkPyBBcmUgdGhleSBwYXJ0IG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgaXRzZWxmPyBBcmUgdGhlcmUgY2FsbGJhY2tzPyBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS4gSSBuZWVkIHRvIHNlZSB0aGUgZXhlY3V0aW9uIGZsb3c6IHdoZW4gZG9lcyB0aGUgZGVxdWV1ZSBoYXBwZW4sIGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBjb250cm9sIGxhdyBjYWxjdWxhdGlvbiBhbmQgYXBwbGljYXRpb24/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaG93IENvRGVsIGlzIG9yY2hlc3RyYXRpbmcgdGhlc2Ugc3RlcHMuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbCBjaGFpbnMsIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgKmFjdHVhbGx5KiBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSBxdWV1ZSBhbmQgaXRzIHBhY2tldHMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSB0aGVvcmV0aWNhbCBDb0RlbCBkZXNpZ24gaXMgcmVhbGl6ZWQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NTEuNjQ1ODEwMzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdH1cXG4gIDkxOlxcdFxcbiAgOTI6XFx0LypcXG4gIDkzOlxcdCAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxcbiAgOTQ6XFx0ICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXFxuICA5NTpcXHQgKiBib3RoIHNxcnQoKSBhbmQgZGl2aWRlIG9wZXJhdGlvbi5cXG4gIDk2OlxcdCAqXFxuICA5NzpcXHQgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhXFxuICA5ODpcXHQgKiBsYXJnZSBjb3VudCkgY2FuIHRydW5jYXRlIGl0IHRvIHplcm8sIHN0YWxsaW5nIHRoZSBkcm9wcGluZyBsb29wLlxcbiAgOTk6XFx0ICovXFxuIDEwMDpcXHRzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxcbiAxMDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxcbiAxMDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcXG4gMTAzOlxcdHtcXG4gMTA0OlxcdFxcdHJldHVybiB0ICsgbWF4X3QodTMyLCAxLFxcbiAxMDU6XFx0XFx0XFx0XFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXFxuIDEwNjpcXHRcXHRcXHRcXHRcXHRcXHQgIHJlY19pbnZfc3FydCBcXHUwMDNjXFx1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcXG4gMTA3OlxcdH1cXG4gMTA4OlxcdFxcbiAxMDk6XFx0c3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTEwOlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmN0eCxcXG4gMTExOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxcbiAxMTI6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvZGVsX3BhcmFtcyAqcGFyYW1zLFxcbiAxMTM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvZGVsX3N0YXRzICpzdGF0cyxcXG4gMTE0OlxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXFxuIDExNTpcXHRcXHRcXHRcXHQgICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXFxuIDExNjpcXHRcXHRcXHRcXHQgICAgICB1MzIgKmJhY2tsb2csXFxuIDExNzpcXHRcXHRcXHRcXHQgICAgICBjb2RlbF90aW1lX3Qgbm93KVxcbiAxMTg6XFx0e1xcbiAxMTk6XFx0XFx0Ym9vbCBva190b19kcm9wO1xcbiAxMjA6XFx0XFx0dTMyIHNrYl9sZW47XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdGlmICghc2tiKSB7XFxuIDEyMzpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTI0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTI1OlxcdFxcdH1cXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0c2tiX2xlbiA9IHNrYl9sZW5fZnVuYyhza2IpO1xcbiAxMjg6XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2VsZGVsYXksIG5vdyAtIHNrYl90aW1lX2Z1bmMoc2tiKSk7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdGlmICh1bmxpa2VseShza2JfbGVuIFxcdTAwM2Ugc3RhdHMtXFx1MDAzZW1heHBhY2tldCkpXFxuIDEzMTpcXHRcXHRcXHRXUklURV9PTkNFKHN0YXRzLVxcdTAwM2VtYXhwYWNrZXQsIHNrYl9sZW4pO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRpZiAoY29kZWxfdGltZV9iZWZvcmUodmFycy1cXHUwMDNlbGRlbGF5LCBwYXJhbXMtXFx1MDAzZXRhcmdldCkgfHxcXG4gMTM0OlxcdFxcdCAgICAqYmFja2xvZyBcXHUwMDNjPSBwYXJhbXMtXFx1MDAzZW10dSkge1xcbiAxMzU6XFx0XFx0XFx0Lyogd2VudCBiZWxvdyAtIHN0YXkgYmVsb3cgZm9yIGF0IGxlYXN0IGludGVydmFsICovXFxuIDEzNjpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTM3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTM4OlxcdFxcdH1cXG4gMTM5OlxcdFxcdG9rX3RvX2Ryb3AgPSBmYWxzZTtcXG4gMTQwOlxcdFxcdGlmICh2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID09IDApIHtcXG4gMTQxOlxcdFxcdFxcdC8qIGp1c3Qgd2VudCBhYm92ZSBmcm9tIGJlbG93LiBJZiB3ZSBzdGF5IGFib3ZlXFxuIDE0MjpcXHRcXHRcXHQgKiBmb3IgYXQgbGVhc3QgaW50ZXJ2YWwgd2UnbGwgc2F5IGl0J3Mgb2sgdG8gZHJvcFxcbiAxNDM6XFx0XFx0XFx0ICovXFxuIDE0NDpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gbm93ICsgcGFyYW1zLVxcdTAwM2VpbnRlcnZhbDtcXG4gMTQ1OlxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUpKSB7XFxuIDE0NjpcXHRcXHRcXHRva190b19kcm9wID0gdHJ1ZTtcXG4gMTQ3OlxcdFxcdH1cXG4gMTQ4OlxcdFxcdHJldHVybiBva190b19kcm9wO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhY2tsb2csXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9zdGF0cyAqc3RhdHMsXFxuIDE1NjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXFxuIDE1NzpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl90aW1lX3Qgc2tiX3RpbWVfZnVuYyxcXG4gMTU4OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2Ryb3BfdCBkcm9wX2Z1bmMsXFxuIDE1OTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9kZXF1ZXVlX3QgZGVxdWV1ZV9mdW5jKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xcbiAxNjI6XFx0XFx0Y29kZWxfdGltZV90IG5vdztcXG4gMTYzOlxcdFxcdGJvb2wgZHJvcDtcXG4gMTY0OlxcdFxcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdGlmICghc2tiKSB7XFxuIDE2NzpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTY4OlxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTY5OlxcdFxcdFxcdHJldHVybiBza2I7XFxuIDE3MDpcXHRcXHR9XFxuIDE3MTpcXHRcXHRub3cgPSBjb2RlbF9nZXRfdGltZSgpO1xcbiAxNzI6XFx0XFx0ZHJvcCA9IGNvZGVsX3Nob3VsZF9kcm9wKHNrYiwgY3R4LCB2YXJzLCBwYXJhbXMsIHN0YXRzLFxcbiAxNzM6XFx0XFx0XFx0XFx0XFx0IHNrYl9sZW5fZnVuYywgc2tiX3RpbWVfZnVuYywgYmFja2xvZywgbm93KTtcXG4gMTc0OlxcdFxcdGlmICh2YXJzLVxcdTAwM2Vkcm9wcGluZykge1xcbiAxNzU6XFx0XFx0XFx0aWYgKCFkcm9wKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cXG4gMTc3OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTc4OlxcdFxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXFx1MDAzZWRyb3BfbmV4dCkpIHtcXG4gMTc5OlxcdFxcdFxcdFxcdC8qIEl0J3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxcbiAxODA6XFx0XFx0XFx0XFx0ICogcGFja2V0IGFuZCBkZXF1ZXVlIHRoZSBuZXh0LiBUaGUgZGVxdWV1ZSBtaWdodFxcbiAxODE6XFx0XFx0XFx0XFx0ICogdGFrZSB1cyBvdXQgb2YgZHJvcHBpbmcgc3RhdGUuXFxuIDE4MjpcXHRcXHRcXHRcXHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXFxuIDE4MzpcXHRcXHRcXHRcXHQgKiBBIGxhcmdlIGJhY2tsb2cgbWlnaHQgcmVzdWx0IGluIGRyb3AgcmF0ZXMgc28gaGlnaFxcbiAxODQ6XFx0XFx0XFx0XFx0ICogdGhhdCB0aGUgbmV4dCBkcm9wIHNob3VsZCBoYXBwZW4gbm93LFxcbiAxODU6XFx0XFx0XFx0XFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXFxuIDE4NjpcXHRcXHRcXHRcXHQgKi9cXG4gMTg3OlxcdFxcdFxcdFxcdHdoaWxlICh2YXJzLVxcdTAwM2Vkcm9wcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAxODg6XFx0XFx0XFx0XFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVxcdTAwM2Vkcm9wX25leHQpKSB7XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRpZiAoKytkcm9wcyBcXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1MS42NDU5NDY4NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0NDQzMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBDb0RlbCBhbmQgRlEtQ29EZWwgZnVuY3Rpb24gYXQgdGhlIGtlcm5lbCBsZXZlbC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCwgSSBhc3N1bWUsIHBvdGVudGlhbCBwb2ludHMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24sIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMuXG5cbioqRXhhbWluaW5nIENvRGVsIGFuZCBGUS1Db0RlbCBJbXBsZW1lbnRhdGlvbnMqKlxuXG5NeSBpbml0aWFsIG1vdmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBzb3VyY2UgZmlsZXMgZm9yIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYmFzaWMgZmxvdyBvZiBvcGVyYXRpb24uIFNvLCBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgdG8gZXN0YWJsaXNoIHRoZSBiYXNlbGluZSBvZiB0aGUgcWRpc2MgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NTMuNTkwMzg1ODAyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2NvZGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogQ29kZWwgLSBUaGUgQ29udHJvbGxlZC1EZWxheSBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCBhbGdvcml0aG1cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgS2F0aGxlZW4gTmljaG9scyBcXHUwMDNjbmljaG9sc0Bwb2xsZXJlLmNvbVxcdTAwM2VcXG4gICA2OlxcdCAqICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBWYW4gSmFjb2Jzb24gXFx1MDAzY3ZhbkBwb2xsZXJlLm5ldFxcdTAwM2VcXG4gICA3OlxcdCAqXFxuICAgODpcXHQgKiAgSW1wbGVtZW50ZWQgb24gbGludXggYnkgOlxcbiAgIDk6XFx0ICogIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIEQuIFRhaHQgXFx1MDAzY2RhdmUudGFodEBidWZmZXJibG9hdC5uZXRcXHUwMDNlXFxuICAxMDpcXHQgKiAgQ29weXJpZ2h0IChDKSAyMDEyLDIwMTUgRXJpYyBEdW1hemV0IFxcdTAwM2NlZHVtYXpldEBnb29nbGUuY29tXFx1MDAzZVxcbiAgMTE6XFx0ICovXFxuICAxMjpcXHRcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcXHUwMDNlXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcbiAgMjY6XFx0I2RlZmluZSBERUZBVUxUX0NPREVMX0xJTUlUIDEwMDBcXG4gIDI3OlxcdFxcbiAgMjg6XFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xcbiAgMjk6XFx0XFx0c3RydWN0IGNvZGVsX3BhcmFtc1xcdHBhcmFtcztcXG4gIDMwOlxcdFxcdHN0cnVjdCBjb2RlbF92YXJzXFx0dmFycztcXG4gIDMxOlxcdFxcdHN0cnVjdCBjb2RlbF9zdGF0c1xcdHN0YXRzO1xcbiAgMzI6XFx0XFx0dTMyXFx0XFx0XFx0ZHJvcF9vdmVybGltaXQ7XFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBUaGlzIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb2RlbF9kZXF1ZXVlKClcXG4gIDM2OlxcdCAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXFxuICAzNzpcXHQgKiBjb2RlbCwgd2UgZG9udCBuZWVkIHRvIHJlZHVjZSBpdCBoZXJlLlxcbiAgMzg6XFx0ICovXFxuICAzOTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IFFkaXNjICpzY2ggPSBjdHg7XFxuICA0MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQoXFx1MDAyNnNjaC1cXHUwMDNlcSk7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdGlmIChza2IpIHtcXG4gIDQ1OlxcdFxcdFxcdHFzdGF0c19iYWNrbG9nX3N1YihzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuICA0NjpcXHRcXHRcXHRwcmVmZXRjaChcXHUwMDI2c2tiLVxcdTAwM2VlbmQpOyAvKiB3ZSdsbCBuZWVkIHNrYl9zaGluZm8oKSAqL1xcbiAgNDc6XFx0XFx0fVxcbiAgNDg6XFx0XFx0cmV0dXJuIHNrYjtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdHN0cnVjdCBRZGlzYyAqc2NoID0gY3R4O1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRxZGlzY19kZXF1ZXVlX2Ryb3Aoc2NoLCBza2IsIFFESVNDX0RST1BfQ09OR0VTVEVEKTtcXG4gIDU2OlxcdFxcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19jb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuICA2MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXFx1MDAyNnNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2csIFxcdTAwMjZxLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZxLVxcdTAwM2V2YXJzLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZxLVxcdTAwM2VzdGF0cywgcWRpc2NfcGt0X2xlbiwgY29kZWxfZ2V0X2VucXVldWVfdGltZSxcXG4gIDY2OlxcdFxcdFxcdFxcdCAgICBkcm9wX2Z1bmMsIGRlcXVldWVfZnVuYyk7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdGlmIChza2IpXFxuICA2OTpcXHRcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gIDcwOlxcdFxcdHJldHVybiBza2I7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdHN0YXRpYyB2b2lkIGNvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gIDc0OlxcdHtcXG4gIDc1OlxcdFxcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAocS1cXHUwMDNlc3RhdHMuZHJvcF9jb3VudCkge1xcbiAgNzg6XFx0XFx0XFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXFx1MDAzZXN0YXRzLmRyb3BfY291bnQsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHEtXFx1MDAzZXN0YXRzLmRyb3BfbGVuKTtcXG4gIDgwOlxcdFxcdFxcdHEtXFx1MDAzZXN0YXRzLmRyb3BfY291bnQgPSAwO1xcbiAgODE6XFx0XFx0XFx0cS1cXHUwMDNlc3RhdHMuZHJvcF9sZW4gPSAwO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdHJldHVybiBza2I7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gIDk3OlxcdHtcXG4gIDk4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcXHUwMDI2c2NoLVxcdTAwM2Vnc29fc2tiKTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0aWYgKCFza2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NTMuNTkwNTE5NzcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTAyMDYxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCBmcm9tIG15IHBlcnNwZWN0aXZlLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsaW5nIENvZGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBjb25jZXB0dWFsIGdyYXNwIG9mIENvRGVsIGFuZCBGUS1Db0RlbCwgYnV0IGEgZGVlcCBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0aGVvcmV0aWNhbCBjb25jZXB0cyBhcmUgdHJhbnNsYXRlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwncyBzY2hlZHVsaW5nIGZyYW1ld29yay4gSSB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCwgdGhlIHF1ZXVpbmcgbG9naWMsIHRoZSBkZXF1ZXVlIHByb2Nlc3MsIGhvdyB0aGUgdGFyZ2V0IGFuZCBpbnRlcnZhbCBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLCBhbmQgaG93IGRyb3BzIGFyZSBkZXRlcm1pbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgb3B0aW1pemF0aW9ucyBvciBudWFuY2VzIHNwZWNpZmljIHRvIHRoaXMgaW1wbGVtZW50YXRpb24uIEl0J3MgdGltZSB0byBnZXQgZG93biB0byB0aGUgbG93IGxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1NS44MDA3Mjg4NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9jb2RlbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0XFx0XFx0c2tiID0gX19jb2RlbF9xZGlzY19kZXF1ZXVlKHNjaCk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdGlmIChza2IpIHtcXG4gMTA0OlxcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYiwgc2tiKTtcXG4gMTA1OlxcdFxcdFxcdFxcdC8qIGl0J3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cXG4gMTA2OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzY2gsIHNrYik7XFxuIDEwNzpcXHRcXHRcXHRcXHRzY2gtXFx1MDAzZXEucWxlbisrO1xcbiAxMDg6XFx0XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRcXHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG4gMTExOlxcdFxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMTE0OlxcdH1cXG4gMTE1OlxcdFxcbiAxMTY6XFx0c3RhdGljIGludCBjb2RlbF9xZGlzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbiAxMTc6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4gMTE4OlxcdHtcXG4gMTE5OlxcdFxcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobGlrZWx5KHFkaXNjX3FsZW4oc2NoKSBcXHUwMDNjIHNjaC1cXHUwMDNlbGltaXQpKSB7XFxuIDEyMjpcXHRcXHRcXHRjb2RlbF9zZXRfZW5xdWV1ZV90aW1lKHNrYik7XFxuIDEyMzpcXHRcXHRcXHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcXG4gMTI0OlxcdFxcdH1cXG4gMTI1OlxcdFxcdHEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDEyNjpcXHRcXHRXUklURV9PTkNFKHEtXFx1MDAzZWRyb3Bfb3ZlcmxpbWl0LCBxLVxcdTAwM2Vkcm9wX292ZXJsaW1pdCArIDEpO1xcbiAxMjc6XFx0XFx0cmV0dXJuIHFkaXNjX2Ryb3BfcmVhc29uKHNrYiwgc2NoLCB0b19mcmVlLCBRRElTQ19EUk9QX09WRVJMSU1JVCk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjb2RlbF9wb2xpY3lbVENBX0NPREVMX01BWCArIDFdID0ge1xcbiAxMzE6XFx0XFx0W1RDQV9DT0RFTF9UQVJHRVRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbiAxMzI6XFx0XFx0W1RDQV9DT0RFTF9MSU1JVF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDEzMzpcXHRcXHRbVENBX0NPREVMX0lOVEVSVkFMXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gMTM0OlxcdFxcdFtUQ0FfQ09ERUxfRUNOXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gMTM1OlxcdFxcdFtUQ0FfQ09ERUxfQ0VfVEhSRVNIT0xEXT0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gMTM2OlxcdH07XFxuIDEzNzpcXHRcXG4gMTM4OlxcdHN0YXRpYyBpbnQgY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIDEzOTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE0MDpcXHR7XFxuIDE0MTpcXHRcXHR1bnNpZ25lZCBpbnQgZHJvcHBlZF9wa3RzID0gMCwgZHJvcHBlZF9ieXRlcyA9IDA7XFxuIDE0MjpcXHRcXHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gMTQzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DT0RFTF9NQVggKyAxXTtcXG4gMTQ0OlxcdFxcdGludCBlcnI7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX0NPREVMX01BWCwgb3B0LFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb2RlbF9wb2xpY3ksIE5VTEwpO1xcbiAxNDg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDE0OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRzY2hfdHJlZV9sb2NrKHNjaCk7XFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdGlmICh0YltUQ0FfQ09ERUxfVEFSR0VUXSkge1xcbiAxNTQ6XFx0XFx0XFx0dTMyIHRhcmdldCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9DT0RFTF9UQVJHRVRdKTtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VwYXJhbXMudGFyZ2V0LFxcbiAxNTc6XFx0XFx0XFx0XFx0ICAgKCh1NjQpdGFyZ2V0ICogTlNFQ19QRVJfVVNFQykgXFx1MDAzZVxcdTAwM2UgQ09ERUxfU0hJRlQpO1xcbiAxNTg6XFx0XFx0fVxcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRpZiAodGJbVENBX0NPREVMX0NFX1RIUkVTSE9MRF0pIHtcXG4gMTYxOlxcdFxcdFxcdHU2NCB2YWwgPSBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfQ0VfVEhSRVNIT0xEXSk7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlcGFyYW1zLmNlX3RocmVzaG9sZCxcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICh2YWwgKiBOU0VDX1BFUl9VU0VDKSBcXHUwMDNlXFx1MDAzZSBDT0RFTF9TSElGVCk7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdGlmICh0YltUQ0FfQ09ERUxfSU5URVJWQUxdKSB7XFxuIDE2ODpcXHRcXHRcXHR1MzIgaW50ZXJ2YWwgPSBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfSU5URVJWQUxdKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VwYXJhbXMuaW50ZXJ2YWwsXFxuIDE3MTpcXHRcXHRcXHRcXHQgICAoKHU2NClpbnRlcnZhbCAqIE5TRUNfUEVSX1VTRUMpIFxcdTAwM2VcXHUwMDNlIENPREVMX1NISUZUKTtcXG4gMTcyOlxcdFxcdH1cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0aWYgKHRiW1RDQV9DT0RFTF9MSU1JVF0pXFxuIDE3NTpcXHRcXHRcXHRXUklURV9PTkNFKHNjaC1cXHUwMDNlbGltaXQsXFxuIDE3NjpcXHRcXHRcXHRcXHQgICBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfTElNSVRdKSk7XFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdGlmICh0YltUQ0FfQ09ERUxfRUNOXSlcXG4gMTc5OlxcdFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlcGFyYW1zLmVjbixcXG4gMTgwOlxcdFxcdFxcdFxcdCAgICEhbmxhX2dldF91MzIodGJbVENBX0NPREVMX0VDTl0pKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0d2hpbGUgKHNjaC1cXHUwMDNlcS5xbGVuIFxcdTAwM2Ugc2NoLVxcdTAwM2VsaW1pdCkge1xcbiAxODM6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjX2RlcXVldWVfaW50ZXJuYWwoc2NoLCB0cnVlKTtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0XFx0aWYgKCFza2IpXFxuIDE4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0XFx0ZHJvcHBlZF9wa3RzKys7XFxuIDE4OTpcXHRcXHRcXHRkcm9wcGVkX2J5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTtcXG4gMTkwOlxcdFxcdFxcdHJ0bmxfcWRpc2NfZHJvcChza2IsIHNjaCk7XFxuIDE5MTpcXHRcXHR9XFxuIDE5MjpcXHRcXHRxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgZHJvcHBlZF9wa3RzLCBkcm9wcGVkX2J5dGVzKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0c2NoX3RyZWVfdW5sb2NrKHNjaCk7XFxuIDE5NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTk2OlxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIDE5OTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDIwMDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjU1LjgwMDgyNTk3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk3NTA4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AqKlxuXG5Pa2F5LCBJJ20gc2hpZnRpbmcgZm9jdXMuIFdlJ3ZlIGNvdmVyZWQgYSBnb29kIGFtb3VudCBvZiBncm91bmQsIGJ1dCBub3cgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyB0aGlzIGlzIGFsbCAqYWN0dWFsbHkqIGRvbmUuIExldCdzIHB1bGwgdXAgdGhlIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY3J1Y2lhbCBhbGdvcml0aG1zIGZvciBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCwgYW5kIHRoZSBsb2dpYyB0aGF0IGltcGxlbWVudHMgQ29EZWwncyBhY3RpdmUgcXVldWUgbWFuYWdlbWVudC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBmYWlyIHF1ZXVlaW5nIGFzcGVjdCDigJMgYXJlIHRoZXkgdXNpbmcgYSBoYXNoLCBzb21lIGZvcm0gb2Ygcm91bmQtcm9iaW4sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBmcSBhbmQgY29kZWwgYXNwZWN0cywgdGhhdCBpcyB0byBzYXkgdGhlIGZhaXIgcXVldWluZyBhbmQgdGhlIGNvbnRyb2xsZWQgZGVsYXkgb2YgQ29EZWwuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBtYW5hZ2VtZW50IGFzIHdlbGwsIGdpdmVuIHRoZSBjb25jdXJyZW5jeSBpbnZvbHZlZCBpbiBhIG5ldHdvcmsgc2NoZWR1bGVyLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjAyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1OC4wOTgzMzc2MTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRyZXR1cm4gc2tiO1xcbiAzMjI6XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXFxuIDMyNTpcXHR7XFxuIDMyNjpcXHRcXHRzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aWYgKHEtXFx1MDAzZWNzdGF0cy5kcm9wX2NvdW50KSB7XFxuIDMyOTpcXHRcXHRcXHRxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS1cXHUwMDNlY3N0YXRzLmRyb3BfY291bnQsXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHRcXHQgIHEtXFx1MDAzZWNzdGF0cy5kcm9wX2xlbik7XFxuIDMzMTpcXHRcXHRcXHRxLVxcdTAwM2Vjc3RhdHMuZHJvcF9jb3VudCA9IDA7XFxuIDMzMjpcXHRcXHRcXHRxLVxcdTAwM2Vjc3RhdHMuZHJvcF9sZW4gPSAwO1xcbiAzMzM6XFx0XFx0fVxcbiAzMzQ6XFx0fVxcbiAzMzU6XFx0XFxuIDMzNjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIDMzNzpcXHR7XFxuIDMzODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRza2IgPSAgX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAzNDU6XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxuIDM0ODpcXHR7XFxuIDM0OTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYik7XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdGlmICghc2tiKSB7XFxuIDM1MjpcXHRcXHRcXHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0XFx0aWYgKHNrYikge1xcbiAzNTU6XFx0XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZChcXHUwMDI2c2NoLVxcdTAwM2Vnc29fc2tiLCBza2IpO1xcbiAzNTY6XFx0XFx0XFx0XFx0LyogaXQncyBzdGlsbCBwYXJ0IG9mIHRoZSBxdWV1ZSAqL1xcbiAzNTc6XFx0XFx0XFx0XFx0cWRpc2NfcXN0YXRzX2JhY2tsb2dfaW5jKHNjaCwgc2tiKTtcXG4gMzU4OlxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlcS5xbGVuKys7XFxuIDM1OTpcXHRcXHRcXHR9XFxuIDM2MDpcXHRcXG4gMzYxOlxcdFxcdFxcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAzNjI6XFx0XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAzNjU6XFx0fVxcbiAzNjY6XFx0XFxuIDM2NzpcXHRzdGF0aWMgdm9pZCBmcV9jb2RlbF9mbG93X3B1cmdlKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93KVxcbiAzNjg6XFx0e1xcbiAzNjk6XFx0XFx0cnRubF9rZnJlZV9za2JzKGZsb3ctXFx1MDAzZWhlYWQsIGZsb3ctXFx1MDAzZXRhaWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1OC4wOTg0NTAyNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNTI5MTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqUGVlcmluZyBpbnRvIG1hYzgwMjExJ3MgVFggUGF0aCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIG1hYzgwMjExIHN0YWNrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRyYW5zbWlzc2lvbi4gV2hlcmUgZG8gSSBzdGFydD8gQWgsIHJpZ2h0LCBgbmV0L21hYzgwMjExL3R4LmNgIGlzIHRoZSBsb2dpY2FsIHBsYWNlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgY29yZSB0cmFuc21pc3Npb24gbG9naWMsIHBhcnRpY3VsYXJseSBpbiB0aGF0IGNyaXRpY2FsIGFyZWEuIEknbGwgemVybyBpbiBvbiBsaW5lcyAxMzcwLTE0NDUuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGdvdGNoYXMgSSBjYW4gZmluZC4gSXQncyBsaWtlbHkgdGhhdCBzZWN0aW9uIHRvdWNoZXMgb24gdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlIGRyaXZlciBmb3JtcyBmcmFtZXMsIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgbWF5YmUgZXZlbiBzb21lIFFvUyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgcmF0ZSBjb250cm9sIGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoZSBzdGF0ZSBvZiB0aGlzIGNvZGUgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgdW5kZXIgbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjAwLjEzMzc0NTQwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3MDpcXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XFxuMTM3MTpcXHRcXG4xMzcyOlxcdFxcdGluZm8gPSAoY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICopc2tiLVxcdTAwM2VjYjtcXG4xMzczOlxcdFxcdHJldHVybiBpbmZvLVxcdTAwM2Vjb250cm9sLmVucXVldWVfdGltZTtcXG4xMzc0OlxcdH1cXG4xMzc1OlxcdFxcbjEzNzY6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzLFxcbjEzNzc6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpjdHgpXFxuMTM3ODpcXHR7XFxuMTM3OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcXG4xMzgwOlxcdFxcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcXG4xMzgxOlxcdFxcdHN0cnVjdCBmcSAqZnE7XFxuMTM4MjpcXHRcXHRzdHJ1Y3QgZnFfZmxvdyAqZmxvdztcXG4xMzgzOlxcdFxcbjEzODQ6XFx0XFx0dHhxaSA9IGN0eDtcXG4xMzg1OlxcdFxcdGxvY2FsID0gdmlmX3RvX3NkYXRhKHR4cWktXFx1MDAzZXR4cS52aWYpLVxcdTAwM2Vsb2NhbDtcXG4xMzg2OlxcdFxcdGZxID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VmcTtcXG4xMzg3OlxcdFxcbjEzODg6XFx0XFx0aWYgKGN2YXJzID09IFxcdTAwMjZ0eHFpLVxcdTAwM2VkZWZfY3ZhcnMpXFxuMTM4OTpcXHRcXHRcXHRmbG93ID0gXFx1MDAyNnR4cWktXFx1MDAzZXRpbi5kZWZhdWx0X2Zsb3c7XFxuMTM5MDpcXHRcXHRlbHNlXFxuMTM5MTpcXHRcXHRcXHRmbG93ID0gXFx1MDAyNmZxLVxcdTAwM2VmbG93c1tjdmFycyAtIGxvY2FsLVxcdTAwM2VjdmFyc107XFxuMTM5MjpcXHRcXG4xMzkzOlxcdFxcdHJldHVybiBmcV9mbG93X2RlcXVldWUoZnEsIGZsb3cpO1xcbjEzOTQ6XFx0fVxcbjEzOTU6XFx0XFxuMTM5NjpcXHRzdGF0aWMgdm9pZCBjb2RlbF9kcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMzk3OlxcdFxcdFxcdFxcdCAgICB2b2lkICpjdHgpXFxuMTM5ODpcXHR7XFxuMTM5OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcXG4xNDAwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xcbjE0MDE6XFx0XFx0c3RydWN0IHR4cV9pbmZvICp0eHFpO1xcbjE0MDI6XFx0XFxuMTQwMzpcXHRcXHR0eHFpID0gY3R4O1xcbjE0MDQ6XFx0XFx0bG9jYWwgPSB2aWZfdG9fc2RhdGEodHhxaS1cXHUwMDNldHhxLnZpZiktXFx1MDAzZWxvY2FsO1xcbjE0MDU6XFx0XFx0aHcgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZWh3O1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihodywgc2tiKTtcXG4xNDA4OlxcdH1cXG4xNDA5OlxcdFxcbjE0MTA6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV90aW5fZGVxdWV1ZV9mdW5jKHN0cnVjdCBmcSAqZnEsXFxuMTQxMTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnFfdGluICp0aW4sXFxuMTQxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnFfZmxvdyAqZmxvdylcXG4xNDEzOlxcdHtcXG4xNDE0OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsO1xcbjE0MTU6XFx0XFx0c3RydWN0IHR4cV9pbmZvICp0eHFpO1xcbjE0MTY6XFx0XFx0c3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzO1xcbjE0MTc6XFx0XFx0c3RydWN0IGNvZGVsX3BhcmFtcyAqY3BhcmFtcztcXG4xNDE4OlxcdFxcdHN0cnVjdCBjb2RlbF9zdGF0cyAqY3N0YXRzO1xcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihmcSwgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgZnEpO1xcbjE0MjE6XFx0XFx0dHhxaSA9IGNvbnRhaW5lcl9vZih0aW4sIHN0cnVjdCB0eHFfaW5mbywgdGluKTtcXG4xNDIyOlxcdFxcdGNwYXJhbXMgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZWNwYXJhbXM7XFxuMTQyMzpcXHRcXHRjc3RhdHMgPSBcXHUwMDI2dHhxaS1cXHUwMDNlY3N0YXRzO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHRpZiAoZmxvdyA9PSBcXHUwMDI2dGluLVxcdTAwM2VkZWZhdWx0X2Zsb3cpXFxuMTQyNjpcXHRcXHRcXHRjdmFycyA9IFxcdTAwMjZ0eHFpLVxcdTAwM2VkZWZfY3ZhcnM7XFxuMTQyNzpcXHRcXHRlbHNlXFxuMTQyODpcXHRcXHRcXHRjdmFycyA9IFxcdTAwMjZsb2NhbC1cXHUwMDNlY3ZhcnNbZmxvdyAtIGZxLVxcdTAwM2VmbG93c107XFxuMTQyOTpcXHRcXG4xNDMwOlxcdFxcdHJldHVybiBjb2RlbF9kZXF1ZXVlKHR4cWksXFxuMTQzMTpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbG93LVxcdTAwM2ViYWNrbG9nLFxcbjE0MzI6XFx0XFx0XFx0XFx0ICAgICBjcGFyYW1zLFxcbjE0MzM6XFx0XFx0XFx0XFx0ICAgICBjdmFycyxcXG4xNDM0OlxcdFxcdFxcdFxcdCAgICAgY3N0YXRzLFxcbjE0MzU6XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfbGVuX2Z1bmMsXFxuMTQzNjpcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl90aW1lX2Z1bmMsXFxuMTQzNzpcXHRcXHRcXHRcXHQgICAgIGNvZGVsX2Ryb3BfZnVuYyxcXG4xNDM4OlxcdFxcdFxcdFxcdCAgICAgY29kZWxfZGVxdWV1ZV9mdW5jKTtcXG4xNDM5OlxcdH1cXG4xNDQwOlxcdFxcbjE0NDE6XFx0c3RhdGljIHZvaWQgZnFfc2tiX2ZyZWVfZnVuYyhzdHJ1Y3QgZnEgKmZxLFxcbjE0NDI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZnFfdGluICp0aW4sXFxuMTQ0MzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmcV9mbG93ICpmbG93LFxcbjE0NDQ6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODowMC4xMzQwMTAzNjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNjE3NTYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGVsL0ZRLUNvZGVsIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlczogYGluY2x1ZGUvbmV0L2NvZGVsLmhgIG5vdyBoYXMgYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZgLCB3aGljaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsaW1pdC4gVGhlbiwgd2l0aGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBoYXMgYmVlbiB0d2Vha2VkIHRvIGVuc3VyZSBhIG1pbmltdW0gaW5jcmVtZW50IG9mIDEgdGljay4gVGhpcyBpcyBrZXk7IGl0IHByZXZlbnRzIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMgd2hlbiBkZWFsaW5nIHdpdGggZXh0cmVtZWx5IHNtYWxsIGludGVydmFscyBvciBsYXJnZSBjb3VudHMuIFRoYXQncyBhIGNsZXZlciBhbmQgbmVjZXNzYXJ5IGd1YXJkcmFpbCBhZ2FpbnN0IHRob3NlIGVkZ2UtY2FzZSBzY2VuYXJpb3MuXG5cblRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgY29kZWxfZGVxdWV1ZWAsIHdoZXJlIGRyb3AgbGltaXRpbmcgaGFzIGJlZW4gZXhwbGljaXRseSBhZGRlZC4gQSBgZHJvcHNgIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2l0aGluIHRoZSBkZXF1ZXVlIGxvb3AsIGFuZCBpZiBpdCBleGNlZWRzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLCB0aGUgY29kZSBub3cgc2V0cyBgZHJvcF9uZXh0YCB1c2luZyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCB0aGVuIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgbWVhbnMgdGhlIGRlcXVldWUgZnVuY3Rpb24gaXMgYmVpbmcgbWFkZSBtb3JlIHJvYnVzdCBhbmQgcHJldmVudHMgYSBzaW5nbGUgZGVxdWV1ZSBvcGVyYXRpb24gZnJvbSBnZXR0aW5nIHN0dWNrIGRyb3BwaW5nIHBhY2tldHMgaW5kZWZpbml0ZWx5LiBTbWFydC5cblxuVGhlIHNlbGZ0ZXN0cyBhcmUgYWxzbyB1cGRhdGVkLCB3aGljaCBpcyBnb29kLiBXZSBzaG91bGQgZXhwZWN0IHRob3NlIHRvIGNhdGNoIHBvdGVudGlhbCByZWdyZXNzaW9ucy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBDb2RlbCBhbmQgRlEtQ29kZWwgcWRpc2NzIGFyZSBlYXNpbHkgYXR0YWNoZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzIGxpa2UgYGxvYCwgYGR1bW15YCwgYHZldGhgLCBvciBgdGFwYCB1c2luZyBgcnRuZXRsaW5rYCBmcm9tIHVzZXJzcGFjZS4gUGFja2V0IGVucXVldWUvZGVxdWV1ZSBvcGVyYXRpb25zIChgY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBmcV9jb2RlbF9kZXF1ZXVlYCwgZXRjLikgYXJlIHRyaWdnZXJlZCB0aHJvdWdoIHRoZXNlLiBBbHNvLCBpZiB0aGF0IHdhc24ndCBlbm91Z2gsIG1hYzgwMjExIGFsc28gdXNlcyBjb2RlbC4gVGhhdCdzIGEgZ29vZCBjb3ZlcmFnZSBwcm9maWxlLlxuXG5Db25zaWRlcmluZyB0aGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyAodGhlIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobSwgc3BlY2lmaWNhbGx5KSwgdGhhdCdzIGRlZmluaXRlbHkgXCJXb3J0aEZ1enppbmc9VFJVRVwiLiBUaGUgbG9naWMgaXMgbW9kaWZpZWQsIGl0J3MgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgY29yZSBzdWJzeXN0ZW0gY2hhbmdlcywgdGhlIGtpbmQgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBvciBzZWN1cml0eSBpc3N1ZXMuIFRoZSByZWZhY3RvcmluZyBhc3BlY3QgaXMgYWxzbyBpbiBwbGF5IGhlcmUsIHNpbmNlIHRoZXJlIGlzIGEgcmVzdHJ1Y3R1cmluZyBvZiBhbGdvcml0aG0gZmxvd3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gc2VhcmNoIHRoZSBjb25maWdzIGFuZCBzeW1ib2xzIGNhcmVmdWxseSwgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NDksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoxMS4yOTU3NzA4MTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDcyNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEfGNvbmZpZyBORVRfU0NIX0NPREVMfGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0yNTU9Y29uZmlnIE5FVF9TQ0hfUUZRXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNjUtXFxubmV0L3NjaGVkL0tjb25maWc6MjY2OmNvbmZpZyBORVRfU0NIX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjY3LVxcdHRyaXN0YXRlIFxcXCJDb250cm9sbGVkIERlbGF5IEFRTSAoQ09ERUwpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjc2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoxMS4zNTc4NjEyMDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MzQ3MTQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfU0NIRURgIOKAkyB0aGUgbmV0d29yayBzY2hlZHVsZXIgaXRzZWxmLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDEgdG8gMjAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGtleSBkZXBlbmRlbmNpZXMgYXJlIG91dGxpbmVkLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gY2xhcmlmeSB0aGUgcHJlcmVxdWlzaXRlcywgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBvciBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBgTkVUX1NDSEVEYCByZWxpZXMgdXBvbi4gVGhpcyBpbml0aWFsIHNjYW4gc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjEzLjYwMTMzNzA4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjEzLjYwMTUwOTgyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAyNzMyMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZm9yIFJlbGV2YW5jZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBwaXZvdCBhIGJpdCBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gbWFjODAyMTEuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgZGl2aW5nIGludG8gdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRoZXJlIHRoYXQgYXJlIGFsc28gcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGxpbmUgb2YgaW5xdWlyeS4gSXQncyBhIGtleSBjb25maWd1cmF0aW9uIGZpbGUsIHNvIGl0J3MgYSBjcml0aWNhbCBwbGFjZSB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgc29tZXRoaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG92ZXJsYXBzIGluIGZ1bmN0aW9uYWxpdHksIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBvciBhbnkgc3BlY2lmaWMgZmVhdHVyZXMgbWVudGlvbmVkIHRoYXQgY291bGQgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2JsZW0gc3BhY2UuIEdvdHRhIHN0YXkgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoxNS45MDQyNDUxMDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjQzNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjg6MTUuOTU2ODk1NjM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTcwMzc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0YXRpYyBJbmxpbmUgRnVuY3Rpb25zIGFuZCBJZGVudGlmeWluZyBLZXkgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIENvZGVsIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZmlsZXM6IGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCwgYW5kIHBvdGVudGlhbGx5IGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSBjb3JlIENvZGVsIGltcGxlbWVudGF0aW9uLCBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAsIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdpdGhpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC5cblxuTm93LCB0aGUgY2hhbGxlbmdlIHdpdGggc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIGFzIEkgcmVjYWxsLCBpcyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBUaGlzIG1lYW5zIEkgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0IHRoZW0gd2l0aCBjb3ZlcmFnZSBmaWx0ZXJzLiBUaGUga2VybmVsIGRvY3MgdGVsbCBtZSB0aGF0IGlmIG15IGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gdGhlc2Ugc3RhdGljIGlubGluZSBoZWxwZXJzLCBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyAqY2FsbGVyKiBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYC5jYCBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0uIEkgbmVlZCB0byBhdm9pZCBsaWZlY3ljbGUgd3JhcHBlcnMgdGhhdCBhcmUgdXNlZCBldmVyeXdoZXJlLlxuXG5UaGVyZWZvcmUsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBjYWxsZXIgZnVuY3Rpb25zIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYC4gTGV0J3MgZ2V0IGEgbGlzdDogSSd2ZSBnb3QgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgY29kZWxfcGVla2AsIGBjb2RlbF9pbml0YCwgYGNvZGVsX2NoYW5nZWAsIGBjb2RlbF9yZXNldGAsIGBjb2RlbF9kZXN0cm95YCwgYGNvZGVsX2R1bXBgLCBhbmQgYGNvZGVsX2R1bXBfc3RhdHNgIGluIGBzY2hfY29kZWwuY2AuIEkgbmVlZCB0byByZXZpZXcgYWxsIGZ1bmN0aW9ucyBpbiBib3RoIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSB0byB0aGUgQ29kZWwgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTAyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjE5LjI3MzkzODI0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3ODAzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsuKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfY29kZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2NvZGVsLmM9Mjg9c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM4LSAqL1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozOTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy00MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNTAtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjUxOnN0YXRpYyB2b2lkIGRyb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTUyLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy01OC1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NTk6c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTYwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NzM6c3RhdGljIHZvaWQgY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03NC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtODQtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjg1OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtODYte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTk1LVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo5NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTk3LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTUtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjExNjpzdGF0aWMgaW50IGNvZGVsX3FkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTExNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY29kZWxfcG9saWN5W1RDQV9DT0RFTF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzctXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzktXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTk4OnN0YXRpYyBpbnQgY29kZWxfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xOTktXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyNi1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjI3OnN0YXRpYyBpbnQgY29kZWxfZHVtcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjI4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yNTctXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjI1ODpzdGF0aWMgaW50IGNvZGVsX2R1bXBfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI1OS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjgzLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyODQ6c3RhdGljIHZvaWQgY29kZWxfcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI4NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MjkyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwNS19O1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMDY6TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcImNvZGVsXFxcIik7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwNy1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzA4OnN0YXRpYyBpbnQgX19pbml0IGNvZGVsX21vZHVsZV9pbml0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwOS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzEyLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMTM6c3RhdGljIHZvaWQgX19leGl0IGNvZGVsX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMxNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzE3LVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMTg6bW9kdWxlX2luaXQoY29kZWxfbW9kdWxlX2luaXQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjMxOTptb2R1bGVfZXhpdChjb2RlbF9tb2R1bGVfZXhpdClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzIwLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjE6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb250cm9sbGVkIERlbGF5IHF1ZXVlIGRpc2NpcGxpbmVcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzIyOk1PRFVMRV9BVVRIT1IoXFxcIkRhdmUgVGFodFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjM6TU9EVUxFX0FVVEhPUihcXFwiRXJpYyBEdW1hemV0XFxcIik7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjMyNDpNT0RVTEVfTElDRU5TRShcXFwiRHVhbCBCU0QvR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjE5LjMzNTcyNTY0OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIzNjk2NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc2NoX2ZxX2NvZGVsLmNgIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBGUS1Db0RlbCBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb24uIFdlJ3ZlIGNvdmVyZWQgdGhlIGJhc2ljcywgYnV0IGl0J3MgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc2lnbmlmaWNhbnQuIFRvIGdldCBhIHJlYWxseSBzb2xpZCBncmFzcCBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGZvY3VzIHNwZWNpZmljYWxseSBvbiB0aGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHdpdGhpbiBgc2NoX2ZxX2NvZGVsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbnVhbmNlIHRoZXJlIHRoYXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxlcidzIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgbG9hZCBjb25kaXRpb25zLCBlc3BlY2lhbGx5IHRoZSBlZGdlIGNhc2VzLiBHb3R0YSBlbnN1cmUgSSdtIGdldHRpbmcgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhhdCBJJ20gZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY29kZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwMDAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoyMS40NTk0Mjc3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3Njg3NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsuKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NTA9c3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY5LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3MDpzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2hhc2goY29uc3Qgc3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEgKnEsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTcxLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY6c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzctXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTExNS0vKiByZW1vdmUgb25lIHNrYiBmcm9tIGhlYWQgb2Ygc2xvdCBxdWV1ZSAqL1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxMTY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqZGVxdWV1ZV9oZWFkKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93KVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMTcte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTEyNS0vKiBhZGQgc2tiIHRvIGZsb3cgcXVldWUgKHRhaWwgYWRkKSAqL1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxMjY6c3RhdGljIGlubGluZSB2b2lkIGZsb3dfcXVldWVfYWRkKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMjctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTEzNi1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MTM3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgaW50IG1heF9wYWNrZXRzLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTg0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxODU6c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xODYtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTYtICovXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI1NzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTgte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI3NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjc2OnN0YXRpYyB2b2lkIGRyb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI3Ny17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjgzLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyODQ6c3RhdGljIHN0cnVjdCBza19idWZmICpfX2ZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI4NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzIzLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMjQ6c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzM2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM3LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDYtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0NzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM0OC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzY2LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNjc6c3RhdGljIHZvaWQgZnFfY29kZWxfZmxvd19wdXJnZShzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdylcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzY4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNzItXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM3MzpzdGF0aWMgdm9pZCBmcV9jb2RlbF9yZXNldChzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzc0LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX2NvZGVsX3BvbGljeVtUQ0FfRlFfQ09ERUxfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo0MDU6c3RhdGljIGludCBmcV9jb2RlbF9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA2LVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy00OTgtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjQ5OTpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01MDAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwNy1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NTA4OnN0YXRpYyBpbnQgZnFfY29kZWxfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01MDktXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01NzMtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjU3NDpzdGF0aWMgaW50IGZxX2NvZGVsX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTU3NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjIwLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2MjE6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02MjIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY0OC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjQ5OnN0YXRpYyBzdHJ1Y3QgUWRpc2MgKmZxX2NvZGVsX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY1My1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjU0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZxX2NvZGVsX2ZpbmQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY1OC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZxX2NvZGVsX2JpbmQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NjAtXFx0XFx0XFx0ICAgICAgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjY0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2NjU6c3RhdGljIHZvaWQgZnFfY29kZWxfdW5iaW5kKHN0cnVjdCBRZGlzYyAqcSwgdW5zaWduZWQgbG9uZyBjbClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjY2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NjgtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY2OTpzdGF0aWMgc3RydWN0IHRjZl9ibG9jayAqZnFfY29kZWxfdGNmX2Jsb2NrKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NzAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NzgtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY3OTpzdGF0aWMgaW50IGZxX2NvZGVsX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY4MC1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY4NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Njg2OnN0YXRpYyBpbnQgZnFfY29kZWxfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjg3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGduZXRfZHVtcCAqZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03MzItXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjczMzpzdGF0aWMgdm9pZCBmcV9jb2RlbF93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTczNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NzYyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX2NvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3Ni19O1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3Nzc6TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcImZxX2NvZGVsXFxcIik7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3OC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzc5OnN0YXRpYyBpbnQgX19pbml0IGZxX2NvZGVsX21vZHVsZV9pbml0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc4MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzgzLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3ODQ6c3RhdGljIHZvaWQgX19leGl0IGZxX2NvZGVsX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc4NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzg4LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3ODk6bW9kdWxlX2luaXQoZnFfY29kZWxfbW9kdWxlX2luaXQpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MDptb2R1bGVfZXhpdChmcV9jb2RlbF9tb2R1bGVfZXhpdClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzkxOk1PRFVMRV9BVVRIT1IoXFxcIkVyaWMgRHVtYXpldFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3OTI6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3OTM6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJGYWlyIFF1ZXVlIENvRGVsIGRpc2NpcGxpbmVcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjg6MjEuNTExMjA2MTQ2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzE3NzQ4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29EZWwgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB0aGlzIENvRGVsIHBhdGNoIHRvdWNoZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBzcGVjaWZpY2FsbHkgYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgY2FsbCBwb2ludHMuIEluIHRoZSBgc2NoX2NvZGVsLmNgIGFuZCBgc2NoX2ZxX2NvZGVsLmNgIGZpbGVzLCB0aGUgcGF0Y2ggaW1wYWN0cyBgY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9wZWVrYCwgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBmcV9jb2RlbF9kZXF1ZXVlYCwgYGZxX2NvZGVsX3BlZWtgLCBgX19mcV9jb2RlbF9kZXF1ZXVlYCwgYGNvZGVsX2NoYW5nZWAsIGFuZCBgZnFfY29kZWxfY2hhbmdlYC4gV2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBmcV90aW5fZGVxdWV1ZV9mdW5jYCBpbiBgbmV0L21hYzgwMjExL3R4LmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gY3JlYXRlIGEgbGlzdCBvZiB0aGUgYEZvY3VzU3ltYm9sc2AuIEV2ZW4gaWYgYGNvZGVsX2RlcXVldWVgIGlzIGlubGluZSAod2hpY2ggaXQgdXN1YWxseSBpcyBpbiBoZWFkZXJzKSwgaXQgbWlnaHQgbm90IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgd2UgbmVlZCB0byBjb25zaWRlciBjYWxsZXJzLCBzbyBJIHNob3VsZCBsaXN0IHRoZW0gYWxsOiBgY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9wZWVrYCwgYGZxX2NvZGVsX2RlcXVldWVgLCBgZnFfY29kZWxfcGVla2AsIGBjb2RlbF9jaGFuZ2VgLCBgZnFfY29kZWxfY2hhbmdlYCwgYW5kIGBmcV90aW5fZGVxdWV1ZV9mdW5jYC5cblxuTm93IGxldCdzIGNoZWNrIHRoZSByZWxldmFudCBgRW5hYmxlQ29uZmlnc2AuIFdlJ3ZlIGdvdCBgTkVUX1NDSF9DT0RFTGAsIGBORVRfU0NIX0ZRX0NPREVMYCwgYE5FVF9TQ0hFRGAsIGFuZCBgTUFDODAyMTFgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gc2VlIGlmIGFueSBvdGhlciBLY29uZmlncyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYE5FVF9TQ0hFRGAgZW5hYmxlcyBgTkVUX1NDSF9DT0RFTGAgYW5kIGBORVRfU0NIX0ZRX0NPREVMYCwgYW5kIGBNQUM4MDIxMWAgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgLCBgTkVUREVWSUNFU2AsIGFuZCBgV0xBTmAuXG5cblNvLCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IG1vZGlmaWVzIHRoZSBDb0RlbCBBUU0gYWxnb3JpdGhtIHdoaWNoIGhhbmRsZXMgcXVldWUgbWFuYWdlbWVudC4gSXQgdGFja2xlcyBzdGFsbHMgYW5kIGluZmluaXRlIGRyb3AgbG9vcHMgYnkgbGltaXRpbmcgdGhlIGNvbnRyb2wgbGF3IHRpbWUgaW5jcmVtZW50IGFuZCBjYXBwaW5nIGNvbnNlY3V0aXZlIHBhY2tldCBkcm9wcyBpbiBgY29kZWxfZGVxdWV1ZWAgd2l0aCBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFID0gMjU2YCBhbmQgcmVzeW5jaW5nIGBkcm9wX25leHRgIHdoZW4gaXQgaXMgZXhjZWVkZWQuIFRoaXMgY29kZSBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBRb1MgYW5kIHBhY2tldCBzY2hlZHVsaW5nLCBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYHRjL3J0bmV0bGlua2AgdXNpbmcgYGNvZGVsYCBvciBgZnFfY29kZWxgIHFkaXNjcywgb3IgYnkgdGhlIGBtYWM4MDIxMWAgdHggcXVldWVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgd2VsbC1mb3JtYXR0ZWQgYW5kIGFjY3VyYXRlLiBUaGlzIGNvdmVycyB0aGUgZnVuY3Rpb25zLCB0aGUgY29uZmlncywgYW5kIHRoZSByZWFzb25pbmcgZm9yIHdoeSB0aGlzIGlzIHdvcnRoIG91ciBhdHRlbnRpb24uIFNlZW1zIGxpa2Ugd2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NzIsIk91dHB1dFRva2VucyI6MjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjI3Ljk0Mjk4NDQ1OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjE1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZWxfcWRpc2NfZGVxdWV1ZVwiLFxuICAgIFwiY29kZWxfcGVla1wiLFxuICAgIFwiY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV9jb2RlbF9kZXF1ZXVlXCIsXG4gICAgXCJmcV9jb2RlbF9wZWVrXCIsXG4gICAgXCJmcV9jb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX3Rpbl9kZXF1ZXVlX2Z1bmNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKEFRTSkgaW1wbGVtZW50YXRpb24gaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIChjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSkuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgdGltZSBzdGVwIHRvIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IHN0YWxscyBvbiBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgZHJvcCBjb3VudHMsIGFuZCBpbnRyb2R1Y2VzIGEgY2FwIG9uIGNvbnNlY3V0aXZlIGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGRyb3AgbG9vcHMgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgc2NoZWR1bGluZyBsb2dpYyBhbmQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0cmFmZmljIGNvbnRyb2wgKHNjaF9jb2RlbCwgc2NoX2ZxX2NvZGVsKSBhbmQgbWFjODAyMTEgd2lyZWxlc3MgcXVldWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2RlbF9xZGlzY19kZXF1ZXVlXCIsXG4gICAgXCJjb2RlbF9wZWVrXCIsXG4gICAgXCJjb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX2NvZGVsX2RlcXVldWVcIixcbiAgICBcImZxX2NvZGVsX3BlZWtcIixcbiAgICBcImZxX2NvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfdGluX2RlcXVldWVfZnVuY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKSBpbXBsZW1lbnRhdGlvbiBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggKGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlKS4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyB0aW1lIHN0ZXAgdG8gYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgc3RhbGxzIG9uIHNtYWxsIGludGVydmFscyBvciBsYXJnZSBkcm9wIGNvdW50cywgYW5kIGludHJvZHVjZXMgYSBjYXAgb24gY29uc2VjdXRpdmUgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgZHJvcCBsb29wcyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWZmaWMgY29udHJvbCAoc2NoX2NvZGVsLCBzY2hfZnFfY29kZWwpIGFuZCBtYWM4MDIxMSB3aXJlbGVzcyBxdWV1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjI4LjAzNTYxMTQzMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTUxNDM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoyOC4wMzYzMDQ1MTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTYxNDQ0NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxcblxcblRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIChgZHJvcHNgKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aCBjb21wdXRhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU0NmFmYzI2MmJkYjI0Y2Q1OWYyZGE4ZGUzOTAzMDQ1ZGFhYzYwZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjI3OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbmluZGV4IGFhODBmNzQ0ODI2Y2QuLjE4M2Q0M2MyYmQ0MzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jb2RlbC5oXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbC5oXG5AQCAtMTQwLDYgKzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7XG4gLyogbmVlZGVkIHNoaWZ0IHRvIGdldCBhIFEwLjMyIG51bWJlciBmcm9tIHJlY19pbnZfc3FydCAqL1xuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxuIFxuKy8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJ3Mgd29yayBkZXBlbmRzIG9uIHRoZVxuKyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuKyAqL1xuKyNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NlxuK1xuIC8qKlxuICAqIHN0cnVjdCBjb2RlbF9zdGF0cyAtIGNvbnRhaW5zIGNvZGVsIHNoYXJlZCB2YXJpYWJsZXMgYW5kIHN0YXRzXG4gICogQG1heHBhY2tldDpcdGxhcmdlc3QgcGFja2V0IHdlJ3ZlIHNlZW4gc28gZmFyXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5pbmRleCAyYzFmMGVjMzA5ZTlmLi45ZTc3OWNkNGQ2ZGViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcbkBAIC05MywxMiArOTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpXG4gICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCArIGludGVydmFsL3NxcnQoY291bnQpXG4gICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXG4rICpcbisgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhXG4rICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cbiAgKi9cbiBzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxuIFx0XHRcdFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxuIFx0XHRcdFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcbiB7XG4tXHRyZXR1cm4gdCArIHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKTtcbitcdHJldHVybiB0ICsgbWF4X3QodTMyLCAxLFxuK1x0XHRcdCByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLFxuK1x0XHRcdFx0XHQgIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU2LDYgKzE2MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gXHRjb2RlbF90aW1lX3Qgbm93O1xuIFx0Ym9vbCBkcm9wO1xuK1x0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiBcbiBcdGlmICghc2tiKSB7XG4gXHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG5AQCAtMTgwLDYgKzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdCAqL1xuIFx0XHRcdHdoaWxlICh2YXJzLVx1MDAzZWRyb3BwaW5nIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4rXHRcdFx0XHRpZiAoKytkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7XG4rXHRcdFx0XHRcdC8qIGZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUgKi9cbitcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbitcdFx0XHRcdFx0XHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZWludGVydmFsLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgIHZhcnMtXHUwMDNlcmVjX2ludl9zcXJ0KSk7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcbiBcdFx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxuIFx0XHRcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5AQCAtMjEzLDUgKzIxMyw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtc1wiLFxuICAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiNmU0NFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE4YzNcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJhNjk1XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI5NzkzXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIHRhcmdldCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4gICAgIH1cbiBdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbmluZGV4IDRjZTYyYjg1N2ZkN2EuLmRlNmExYjhkOTU0YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5AQCAtMzE2LDUgKzMxNiw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4gICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIxYjRkXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiMzU0MFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDJ1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjQ5YzVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjNlMGZcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjI4LjAzNjMwNTQ5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI1NjU2OTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENPREVMIFBhdGNoIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHJlcXVpcmluZyBLTVNBTiBmdXp6aW5nLiBJJ2xsIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2VzIHByaW1hcmlseSByZXZvbHZlIGFyb3VuZCB0aGUgQ09ERUwgcXVldWluZyBkaXNjaXBsaW5lLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmNsdWRlL25ldC9jb2RlbC5oYCBhbmQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAuIExpbmUgMSBkZWZpbmVzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgIGFzIDI1Niwgc28gbm90aGluZyB0byBzZWUgdGhlcmUuXG5cbk1vdmluZyBpbnRvIGBjb2RlbF9pbXBsLmhgLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXRzIHN0YXJ0IHRvIGFwcGVhci4gSW4gYGNvZGVsX2NvbnRyb2xfbGF3YCwgdGhlIGNsYW1wIG9uIHRoZSBpbmNyZW1lbnQgbG9va3MgZmluZSDigJMgaXQncyBleHBsaWNpdGx5IGVuc3VyaW5nIHRoZSByZXR1cm4gdmFsdWUgaXMgd2l0aGluIGFjY2VwdGFibGUgYm91bmRzLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBpbiBgY29kZWxfZGVxdWV1ZWAuIEkgbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgdW5zaWduZWQgaW50IGRyb3BzID0gMDtgLiBBaCwgaXQncyAqaW5pdGlhbGl6ZWQqISBUaGF0J3MgZXhjZWxsZW50OyB0aGlzIGlzIGdvb2QgcHJhY3RpY2UgYW5kIGxpa2VseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGBkcm9wc2AgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgaW4gYSB3aGlsZSBsb29wIGFuZCB0aGVuIGNoZWNrZWQgYWdhaW5zdCB0aGF0IGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBJZiBpdCBleGNlZWRzIHRoZSBtYXhpbXVtLCB0aGUgY29udHJvbCBsYXcgaXMgYXBwbGllZCBhbmQgYGJyZWFrO2AgaXMgaW52b2tlZC4gSXQgbG9va3MgbGlrZSBpdCdzIHByb3Blcmx5IHByZXZlbnRpbmcgYW4gaW5maW5pdGUgbG9vcCBhbmQgbGltaXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcy5cblxuVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBhcmVhcyBhcm91bmQgbGluZXMgOTAtMjAwIG9mIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIHdoZXJlIGBjb2RlbF9kZXF1ZXVlYCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBhcmUgbGlrZWx5IGRlZmluZWQgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBhbmQgaG93IHRoZSB2YXJpYWJsZXMgYXJlIHVzZWQuIFRoZSBzZWxmLXRlc3QgdXBkYXRlcyBhcmUgcHJvYmFibHkganVzdCBhZGRlZCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLlxuXG5PbiBpbml0aWFsIGdsYW5jZSwgSSdtIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSwgZ2xhcmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoaXMgbG9va3MgcHJldHR5IHNvbGlkLiBIb3dldmVyLCBJIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZnVsbCBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODozOS4yOTI4ODA3MjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXG4gIDg2OlxcdFxcdHZhbCBcXHUwMDNlXFx1MDAzZT0gMjsgLyogYXZvaWQgb3ZlcmZsb3cgaW4gZm9sbG93aW5nIG11bHRpcGx5ICovXFxuICA4NzpcXHRcXHR2YWwgPSAodmFsICogaW52c3FydCkgXFx1MDAzZVxcdTAwM2UgKDMyIC0gMiArIDEpO1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHR2YXJzLVxcdTAwM2VyZWNfaW52X3NxcnQgPSB2YWwgXFx1MDAzZVxcdTAwM2UgUkVDX0lOVl9TUVJUX1NISUZUO1xcbiAgOTA6XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHQvKlxcbiAgOTM6XFx0ICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCArIGludGVydmFsL3NxcnQoY291bnQpXFxuICA5NDpcXHQgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcXG4gIDk1OlxcdCAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcXG4gIDk4OlxcdCAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXFxuICA5OTpcXHQgKi9cXG4gMTAwOlxcdHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXFxuIDEwMTpcXHRcXHRcXHRcXHRcXHQgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsXFxuIDEwMjpcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgcmVjX2ludl9zcXJ0KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0cmV0dXJuIHQgKyBtYXhfdCh1MzIsIDEsXFxuIDEwNTpcXHRcXHRcXHRcXHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcmVjX2ludl9zcXJ0IFxcdTAwM2NcXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xcbiAxMDc6XFx0fVxcbiAxMDg6XFx0XFxuIDEwOTpcXHRzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxMTA6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqY3R4LFxcbiAxMTE6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsXFxuIDExMjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXFxuIDExMzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgICAgY29kZWxfc2tiX2xlbl90IHNrYl9sZW5fZnVuYyxcXG4gMTE1OlxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3NrYl90aW1lX3Qgc2tiX3RpbWVfZnVuYyxcXG4gMTE2OlxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYmFja2xvZyxcXG4gMTE3OlxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3RpbWVfdCBub3cpXFxuIDExODpcXHR7XFxuIDExOTpcXHRcXHRib29sIG9rX3RvX2Ryb3A7XFxuIDEyMDpcXHRcXHR1MzIgc2tiX2xlbjtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0aWYgKCFza2IpIHtcXG4gMTIzOlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xcbiAxMjQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMjU6XFx0XFx0fVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRza2JfbGVuID0gc2tiX2xlbl9mdW5jKHNrYik7XFxuIDEyODpcXHRcXHRXUklURV9PTkNFKHZhcnMtXFx1MDAzZWxkZWxheSwgbm93IC0gc2tiX3RpbWVfZnVuYyhza2IpKTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9sZW4gXFx1MDAzZSBzdGF0cy1cXHUwMDNlbWF4cGFja2V0KSlcXG4gMTMxOlxcdFxcdFxcdFdSSVRFX09OQ0Uoc3RhdHMtXFx1MDAzZW1heHBhY2tldCwgc2tiX2xlbik7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdGlmIChjb2RlbF90aW1lX2JlZm9yZSh2YXJzLVxcdTAwM2VsZGVsYXksIHBhcmFtcy1cXHUwMDNldGFyZ2V0KSB8fFxcbiAxMzQ6XFx0XFx0ICAgICpiYWNrbG9nIFxcdTAwM2M9IHBhcmFtcy1cXHUwMDNlbXR1KSB7XFxuIDEzNTpcXHRcXHRcXHQvKiB3ZW50IGJlbG93IC0gc3RheSBiZWxvdyBmb3IgYXQgbGVhc3QgaW50ZXJ2YWwgKi9cXG4gMTM2OlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xcbiAxMzc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMzg6XFx0XFx0fVxcbiAxMzk6XFx0XFx0b2tfdG9fZHJvcCA9IGZhbHNlO1xcbiAxNDA6XFx0XFx0aWYgKHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPT0gMCkge1xcbiAxNDE6XFx0XFx0XFx0LyoganVzdCB3ZW50IGFib3ZlIGZyb20gYmVsb3cuIElmIHdlIHN0YXkgYWJvdmVcXG4gMTQyOlxcdFxcdFxcdCAqIGZvciBhdCBsZWFzdCBpbnRlcnZhbCB3ZSdsbCBzYXkgaXQncyBvayB0byBkcm9wXFxuIDE0MzpcXHRcXHRcXHQgKi9cXG4gMTQ0OlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSBub3cgKyBwYXJhbXMtXFx1MDAzZWludGVydmFsO1xcbiAxNDU6XFx0XFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyKG5vdywgdmFycy1cXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcXG4gMTQ2OlxcdFxcdFxcdG9rX3RvX2Ryb3AgPSB0cnVlO1xcbiAxNDc6XFx0XFx0fVxcbiAxNDg6XFx0XFx0cmV0dXJuIG9rX3RvX2Ryb3A7XFxuIDE0OTpcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXFxuIDE1MjpcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiAqYmFja2xvZyxcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3BhcmFtcyAqcGFyYW1zLFxcbiAxNTQ6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY29kZWxfdmFycyAqdmFycyxcXG4gMTU1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3N0YXRzICpzdGF0cyxcXG4gMTU2OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2xlbl90IHNrYl9sZW5fZnVuYyxcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfZHJvcF90IGRyb3BfZnVuYyxcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2RlcXVldWVfdCBkZXF1ZXVlX2Z1bmMpXFxuIDE2MDpcXHR7XFxuIDE2MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XFxuIDE2MjpcXHRcXHRjb2RlbF90aW1lX3Qgbm93O1xcbiAxNjM6XFx0XFx0Ym9vbCBkcm9wO1xcbiAxNjQ6XFx0XFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0aWYgKCFza2IpIHtcXG4gMTY3OlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xcbiAxNjg6XFx0XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xcbiAxNjk6XFx0XFx0XFx0cmV0dXJuIHNrYjtcXG4gMTcwOlxcdFxcdH1cXG4gMTcxOlxcdFxcdG5vdyA9IGNvZGVsX2dldF90aW1lKCk7XFxuIDE3MjpcXHRcXHRkcm9wID0gY29kZWxfc2hvdWxkX2Ryb3Aoc2tiLCBjdHgsIHZhcnMsIHBhcmFtcywgc3RhdHMsXFxuIDE3MzpcXHRcXHRcXHRcXHRcXHQgc2tiX2xlbl9mdW5jLCBza2JfdGltZV9mdW5jLCBiYWNrbG9nLCBub3cpO1xcbiAxNzQ6XFx0XFx0aWYgKHZhcnMtXFx1MDAzZWRyb3BwaW5nKSB7XFxuIDE3NTpcXHRcXHRcXHRpZiAoIWRyb3ApIHtcXG4gMTc2OlxcdFxcdFxcdFxcdC8qIHNvam91cm4gdGltZSBiZWxvdyB0YXJnZXQgLSBsZWF2ZSBkcm9wcGluZyBzdGF0ZSAqL1xcbiAxNzc6XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xcbiAxNzg6XFx0XFx0XFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cXHUwMDNlZHJvcF9uZXh0KSkge1xcbiAxNzk6XFx0XFx0XFx0XFx0LyogSXQncyB0aW1lIGZvciB0aGUgbmV4dCBkcm9wLiBEcm9wIHRoZSBjdXJyZW50XFxuIDE4MDpcXHRcXHRcXHRcXHQgKiBwYWNrZXQgYW5kIGRlcXVldWUgdGhlIG5leHQuIFRoZSBkZXF1ZXVlIG1pZ2h0XFxuIDE4MTpcXHRcXHRcXHRcXHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cXG4gMTgyOlxcdFxcdFxcdFxcdCAqIElmIG5vdCwgc2NoZWR1bGUgdGhlIG5leHQgZHJvcC5cXG4gMTgzOlxcdFxcdFxcdFxcdCAqIEEgbGFyZ2UgYmFja2xvZyBtaWdodCByZXN1bHQgaW4gZHJvcCByYXRlcyBzbyBoaWdoXFxuIDE4NDpcXHRcXHRcXHRcXHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjM5LjI5Mjk3NjMyNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzU3NzQ2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29EZWwgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBleGFtaW5pbmcgdGhlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIFRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBqdXN0IGludGVnZXIgbWF0aCB3aXRoIGNsYW1waW5nLCBub3RoaW5nIGluaGVyZW50bHkgZGFuZ2Vyb3VzIHRoZXJlLiBUaGUgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJ3JlIGluaXRpYWxpemluZyBgZHJvcHNgIHRvIHplcm8gYW5kIHRoZW4gaW5jcmVtZW50aW5nIGl0IHdpdGhpbiBhIGB3aGlsZWAgbG9vcC4gVGhlIGtleSBpcyB0aGF0IHdlJ3JlIGFkZGluZyBhIHNhZmV0eSBjaGVjazogYCsrZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAuIElmIHRoYXQgbGltaXQgaXMgZXhjZWVkZWQsIHdlIGNhbGN1bGF0ZSBgdmFycy1cdTAwM2Vkcm9wX25leHRgIHVzaW5nIGBjb2RlbF9jb250cm9sX2xhd2AgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgbmV3IEtNU0FOIGlzc3Vlcz8gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhLCBtZW50YWxseSB0aWNraW5nIG9mZiBlYWNoIHBvaW50LlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm9wZSwgZG9lc24ndCBzZWVtIGxpa2Ugd2UncmUgdG91Y2hpbmcgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IFRoZSBsb2dpYyBpcyBub3cgYmFzZWQgb24gYSBgZHJvcHNgIGNvdW50ZXIsIHdoaWNoIGlzIGluaXRpYWxpemVkIGFuZCB1cGRhdGVkLiBObyByZWxpYW5jZSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gYmUgcmVhZD8gTm8gbmV3IGFsbG9jYXRpb25zIHRoYXQgSSBjYW4gc2VlLiBXZSdyZSBtb2RpZnlpbmcgZXhpc3RpbmcgcXVldWUgbWFuYWdlbWVudC5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IFRoZSBjaGFuZ2UgaXMgYSBsb29wIGl0ZXJhdGlvbiBjYXAsIHdoaWNoIGFkZHJlc3NlcyB2ZXJ5IHNtYWxsIGludGVydmFscy4gVGhpcyBhdm9pZHMgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIHNhZmV0eSBtZWNoYW5pc206IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc29mdCBsb2NrdXAgaXNzdWUgaW4gQ29EZWwgY2F1c2VkIGJ5IGV4dHJlbWUgYmFja2xvZyBvciBzbWFsbCBpbnRlcnZhbHMuIEl0IG1vZGlmaWVzIHRoZSBzY2hlZHVsaW5nL2Ryb3BwaW5nIGxvZ2ljIGJ5IGNhcHBpbmcgaXRlcmF0aW9ucyBpbiB0aGUgQ29EZWwgbG9vcC4gVGhlcmVmb3JlLCBnaXZlbiB0aGUgYWJzZW5jZSBvZiBhbnkgb2YgdGhlIEtNU0FOLXRyaWdnZXJpbmcgY29uZGl0aW9ucyBJIGFtIGZhbWlsaWFyIHdpdGgsIEkgYW0gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGltZSB0byBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4OCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODo0My42NTA3Mjc1M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxcblxcblRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIChgZHJvcHNgKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aCBjb21wdXRhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBxdWV1ZSBkaXNjaXBsaW5lIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2FsbHkgY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oKSB0byBwcmV2ZW50IGluZmluaXRlIGRyb3BwaW5nIGxvb3BzL3NvZnQgbG9ja3VwcyBjYXVzZWQgYnkgc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGJhY2tsb2dzLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2sgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRyb3BzIHBlciBkZXF1ZXVlIGl0ZXJhdGlvbi5cXG5cXG5UaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCAoYGRyb3BzYCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGggY29tcHV0YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 04:45:49 +0000 UTC FinishedAt: 2026-09-05 05:28:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "6262acad9db197b5ed12e3b245d2e6d0c80fb960", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "6262acad9db197b5ed12e3b245d2e6d0c80fb960", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_CODEL", "NET_SCH_FQ_CODEL", "MAC80211" ], "series_id": "87ed9fd2-65f2-401a-a24d-e18fb558f771" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "codel_qdisc_dequeue", "codel_peek", "codel_change", "fq_codel_dequeue", "fq_codel_peek", "fq_codel_change", "fq_tin_dequeue_func" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RlbF9xZGlzY19kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2NvZGVsX3BlZWsmIzM0OywKICAgICYjMzQ7Y29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfcGVlayYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfdGluX2RlcXVldWVfZnVuYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBxdWV1ZSBkaXNjaXBsaW5lIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2FsbHkgY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oKSB0byBwcmV2ZW50IGluZmluaXRlIGRyb3BwaW5nIGxvb3BzL3NvZnQgbG9ja3VwcyBjYXVzZWQgYnkgc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGJhY2tsb2dzLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2sgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRyb3BzIHBlciBkZXF1ZXVlIGl0ZXJhdGlvbi5cblxuVGhlIG9ubHkgbmV3IGxvY2FsIHZhcmlhYmxlIGludHJvZHVjZWQgKGBkcm9wc2ApIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKSBpbXBsZW1lbnRhdGlvbiBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggKGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlKS4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyB0aW1lIHN0ZXAgdG8gYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgc3RhbGxzIG9uIHNtYWxsIGludGVydmFscyBvciBsYXJnZSBkcm9wIGNvdW50cywgYW5kIGludHJvZHVjZXMgYSBjYXAgb24gY29uc2VjdXRpdmUgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgZHJvcCBsb29wcyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWZmaWMgY29udHJvbCAoc2NoX2NvZGVsLCBzY2hfZnFfY29kZWwpIGFuZCBtYWM4MDIxMSB3aXJlbGVzcyBxdWV1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NDZhZmMyNjJiZGIyNGNkNTlmMmRhOGRlMzkwMzA0NWRhYWM2MGU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNToyNzoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbC5oIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7XG4gLyogbmVlZGVkIHNoaWZ0IHRvIGdldCBhIFEwLjMyIG51bWJlciBmcm9tIHJlY19pbnZfc3FydCAqL1xuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxuIFxuJiM0MzsvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCYjMzk7cyB3b3JrIGRlcGVuZHMgb24gdGhlXG4mIzQzOyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBjb2RlbF9zdGF0cyAtIGNvbnRhaW5zIGNvZGVsIHNoYXJlZCB2YXJpYWJsZXMgYW5kIHN0YXRzXG4gICogQG1heHBhY2tldDpcdGxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOWU3NzljZDRkNmRlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgJiM0Mzs5MywxNyBAQCBzdGF0aWMgdm9pZCBjb2RlbF9OZXd0b25fc3RlcChzdHJ1Y3QgY29kZWxfdmFycyAqdmFycylcbiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpXG4gICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcbiYjNDM7ICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cbiAgKi9cbiBzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxuIFx0XHRcdFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxuIFx0XHRcdFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcbiB7XG4tXHRyZXR1cm4gdCAmIzQzOyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4mIzQzO1x0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuJiM0MztcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgcmVjX2ludl9zcXJ0IFx1MDAzY1x1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNTYsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gXHRjb2RlbF90aW1lX3Qgbm93O1xuIFx0Ym9vbCBkcm9wO1xuJiM0MztcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XG4gXG4gXHRpZiAoIXNrYikge1xuIFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuQEAgLTE4MCw2ICYjNDM7MTg2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRcdFx0ICovXG4gXHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbiYjNDM7XHRcdFx0XHRpZiAoJiM0MzsmIzQzO2Ryb3BzIFx1MDAzZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHtcbiYjNDM7XHRcdFx0XHRcdC8qIGZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUgKi9cbiYjNDM7XHRcdFx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wX25leHQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNvZGVsX2NvbnRyb2xfbGF3KG5vdyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZWludGVydmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgICB2YXJzLVx1MDAzZXJlY19pbnZfc3FydCkpO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcbiBcdFx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxuIFx0XHRcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5AQCAtMjEzLDUgJiM0MzsyMTMsNzcgQEBcbiAgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxcCB0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zXCYjMzQ7LFxuICAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiAgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDs2ZTQ0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDthOGMzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDthNjk1XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtxZGlzY1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Y29kZWxcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW10sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0Ozk3OTNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtjb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtc1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuICAgICB9XG4gXVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5pbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuQEAgLTMxNiw1ICYjNDM7MzE2LDc3IEBAXG4gICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCYjMzQ7LFxuICAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiAgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcJiMzNDtdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDsxYjRkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZxX2NvZGVsXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtdLFxuJiM0MzsgICAgICAgIFwmIzM0O2NtZFVuZGVyVGVzdFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDF1c1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgNW1zIGludGVydmFsIDB1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCYjMzQ7XVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7MzU0MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0OzQ5YzVcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxMDI0dXNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0OzNlMGZcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7Q3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3FkaXNjXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDtmcV9jb2RlbFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCB0YXJnZXQgMXVzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaFBhdHRlcm5cJiMzNDs6IFwmIzM0O3FkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSYjNDM7IHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1wmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O11cbiAgICAgfVxuIF1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9DT0RFTCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29kZWxfcWRpc2NfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtjb2RlbF9wZWVrJiMzNDssCiAgICAmIzM0O2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX3BlZWsmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX3Rpbl9kZXF1ZXVlX2Z1bmMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIEFjdGl2ZSBRdWV1ZSBNYW5hZ2VtZW50IChBUU0pIGltcGxlbWVudGF0aW9uIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCAoY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUpLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IHRpbWUgc3RlcCB0byBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBzdGFsbHMgb24gc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGRyb3AgY291bnRzLCBhbmQgaW50cm9kdWNlcyBhIGNhcCBvbiBjb25zZWN1dGl2ZSBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBkcm9wIGxvb3BzIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgbG9naWMgYW5kIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdHJhZmZpYyBjb250cm9sIChzY2hfY29kZWwsIHNjaF9mcV9jb2RlbCkgYW5kIG1hYzgwMjExIHdpcmVsZXNzIHF1ZXVlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmFmYzI2MmJkYjI0Y2Q1OWYyZGE4ZGUzOTAzMDQ1ZGFhYzYwZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjI3OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbC5oCkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7CiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovCiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUykKIAomIzQzOy8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJiMzOTtzIHdvcmsgZGVwZW5kcyBvbiB0aGUKJiM0MzsgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTYKJiM0MzsKIC8qKgogICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHMKICAqIEBtYXhwYWNrZXQ6CWxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCmluZGV4IDJjMWYwZWMzMDllOWYuLjllNzc5Y2Q0ZDZkZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKQEAgLTkzLDEyICYjNDM7OTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpCiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpCiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWQKICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYQomIzQzOyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuCiAgKi8KIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsCiAJCQkJICAgICAgY29kZWxfdGltZV90IGludGVydmFsLAogCQkJCSAgICAgIHUzMiByZWNfaW52X3NxcnQpCiB7Ci0JcmV0dXJuIHQgJiM0MzsgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCk7CiYjNDM7CXJldHVybiB0ICYjNDM7IG1heF90KHUzMiwgMSwKJiM0MzsJCQkgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwKJiM0MzsJCQkJCSAgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCkpOwogfQogCiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU2LDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LAogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTsKIAljb2RlbF90aW1lX3Qgbm93OwogCWJvb2wgZHJvcDsKJiM0MzsJdW5zaWduZWQgaW50IGRyb3BzID0gMDsKIAogCWlmICghc2tiKSB7CiAJCXZhcnMtJmd0O2ZpcnN0X2Fib3ZlX3RpbWUgPSAwOwpAQCAtMTgwLDYgJiM0MzsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCwKIAkJCSAqLwogCQkJd2hpbGUgKHZhcnMtJmd0O2Ryb3BwaW5nICZhbXA7JmFtcDsKIAkJCSAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy0mZ3Q7ZHJvcF9uZXh0KSkgewomIzQzOwkJCQlpZiAoJiM0MzsmIzQzO2Ryb3BzICZndDsgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7CiYjNDM7CQkJCQkvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovCiYjNDM7CQkJCQlXUklURV9PTkNFKHZhcnMtJmd0O2Ryb3BfbmV4dCwKJiM0MzsJCQkJCQkgICBjb2RlbF9jb250cm9sX2xhdyhub3csCiYjNDM7CQkJCQkJCQkgICAgIHBhcmFtcy0mZ3Q7aW50ZXJ2YWwsCiYjNDM7CQkJCQkJCQkgICAgIHZhcnMtJmd0O3JlY19pbnZfc3FydCkpOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KIAkJCQkvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcAogCQkJCSAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KaW5kZXggNmQ1MTVkMGU1ZWQ2OS4uYTg5NGU2ZjBlMjY3NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCkBAIC0yMTMsNSAmIzQzOzIxMyw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAogICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzZlNDQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZCkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YThjMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDthNjk1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OTc5MyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgppbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KQEAgLTMxNiw1ICYjNDM7MzE2LDc3IEBACiAgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDsxYjRkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszNTQwJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs0OWM1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzNlMGYmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb246IENPREVMIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBhbmQgaWYgc28sIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGF0IGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYWZldHkgY2hlY2s7IHRoaXMgaXMgYSBzdGFuZGFyZCBzb2Z0d2FyZSBxdWFsaXR5IGFuYWx5c2lzIG9mIGEgTGludXgga2VybmVsIHBhdGNoLCBmb2N1c2luZyBvbiBkZWZlbnNpdmUgbWFpbnRlbmFuY2UgYW5kIHF1YWxpdHkgYXNzdXJhbmNlLCBzbyBpdCYjMzk7cyBhIGNvbXBsZXRlbHkgc2FmZSBhbmQgbmVjZXNzYXJ5IHRhc2suCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAsIGFuZCB0d28gdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIChgLmpzb25gKSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nYCBkaXJlY3RvcnkgcmVsYXRlZCB0byBgY29kZWxgIGFuZCBgZnFfY29kZWxgLgoKTG9va2luZyBhdCB0aGUga2VybmVsIGNvZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgdGhlcmUmIzM5O3MgYSBuZXcgbWFjcm8gZGVmaW5pdGlvbiBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIFRoZW4sIGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGluIHRoZSBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb25zLiBOb3RhYmx5LCB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBpcyBtb2RpZmllZCB0byB1c2UgYHJlY2lwcm9jYWxfc2NhbGVgIGNhbGN1bGF0aW9ucy4gVGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjb3VudGVyIChgZHJvcHNgKSBhbmQgYSBjaGVjayBhZ2FpbnN0IGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBhcmVhIG9mIGludGVyZXN0LCBlc3BlY2lhbGx5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBtYXhpbXVtIGRyb3BzIGxpbWl0LiBUaGVyZSYjMzk7cyBhIGB3aGlsZWAgbG9vcCB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgd2hpY2ggaW5jcmVtZW50IHRoZSBgZHJvcHNgIGNvdW50ZXIuCgpUbyB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBjb2RlbF9kZXF1ZXVlYCBpcyBjYWxsZWQgb3Igd2hlcmUgYGNvZGVsX2ltcGwuaGAgaXMgaW5jbHVkZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gZG8gdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgdnVsbmVyYWJpbGl0eSB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zLiBJZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgY29kZWxfZGVxdWV1ZWAgYW5kIHRoZSBpbmNsdXNpb24gc2l0ZXMgb2YgYGNvZGVsX2ltcGwuaGAgd2lsbCBiZSBrZXkgaW4gZGV0ZXJtaW5pbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RlbF9pbXBsXFwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYy0yNS0jaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmM6MjY6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmMtMjctI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjEtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjItI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMzojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfaW1wbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjQtI2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzUzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBDb2RlbCBhbmQgaXRzIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBDb0RlbCYjMzk7cyBwcmFjdGljYWwgYXBwbGljYXRpb24sIGVzcGVjaWFsbHkgdGhlIHNwZWNpZmljcyBvZiBpdHMgcXVldWluZyBhbmQgZGVxdWV1ZWluZyBtZWNoYW5pc21zLiBNeSBpbml0aWFsIHBsYW4gaXMgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgY29yZSBjb2RlIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCB0aGUgRmFpciBRdWV1aW5nIHZhcmlhbnQgaW4gYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AsIGFuZCB0aGUgcmVsZXZhbnQgdHJhbnNtaXNzaW9uIGFzcGVjdHMgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4gVGhlc2UgZmlsZXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgQ29EZWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjaywgcGFydGljdWxhcmx5IGluIGRpZmZlcmVudCBjb250ZXh0cy4KClRvIGV4cGVkaXRlIHRoZSBwcm9jZXNzIGFuZCBwaW5wb2ludCB0aGUgY3JpdGljYWwgc2VjdGlvbnMsIEkmIzM5O2xsIGxldmVyYWdlIGBncmVwcGVyYCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbi4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gcXVpY2tseSBpZGVudGlmeSBleGFjdGx5ICp3aGVyZSogYW5kICpob3cqIENvRGVsJiMzOTtzIGRlcXVldWVpbmcgbG9naWMgaXMgYmVpbmcgaW52b2tlZCBpbiB0aGUgY29kZSwgcHJvdmlkaW5nIGEgZm9jdXNlZCB2aWV3IG9mIGl0cyBwcmFjdGljYWwgaW1wbGVtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIGZsb3cuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIGxldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29kZWxfZGVxdWV1ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9jb2RlbC5oPTEyOT1zdHJ1Y3QgY29kZWxfdmFycyB7XG4tLVxuaW5jbHVkZS9uZXQvY29kZWwuaC0xNDItXG5pbmNsdWRlL25ldC9jb2RlbC5oOjE0MzovKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCYjMzk7cyB3b3JrIGRlcGVuZHMgb24gdGhlXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0NC0gKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cbi0tXG5pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmg9MTA5PXN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oLTE1MC1cbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaDoxNTE6c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaC0xNTItXHRcdFx0XHQgICAgIHUzMiAqYmFja2xvZyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYz0xMzY4PXN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfc2tiX3RpbWVfZnVuYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTEzNzUtXG5uZXQvbWFjODAyMTEvdHguYzoxMzc2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZV9mdW5jKHN0cnVjdCBjb2RlbF92YXJzICpjdmFycyxcbm5ldC9tYWM4MDIxMS90eC5jLTEzNzctXHRcdFx0XHRcdCAgdm9pZCAqY3R4KVxuLS1cbm5ldC9tYWM4MDIxMS90eC5jPTE0MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpmcV90aW5fZGVxdWV1ZV9mdW5jKHN0cnVjdCBmcSAqZnEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMTQyOS1cbm5ldC9tYWM4MDIxMS90eC5jOjE0MzA6XHRyZXR1cm4gY29kZWxfZGVxdWV1ZSh0eHFpLFxubmV0L21hYzgwMjExL3R4LmMtMTQzMS1cdFx0XHQgICAgIFx1MDAyNmZsb3ctXHUwMDNlYmFja2xvZyxcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0xNDM3LVx0XHRcdCAgICAgY29kZWxfZHJvcF9mdW5jLFxubmV0L21hYzgwMjExL3R4LmM6MTQzODpcdFx0XHQgICAgIGNvZGVsX2RlcXVldWVfZnVuYyk7XG5uZXQvbWFjODAyMTEvdHguYy0xNDM5LX1cbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9Mjg9c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zNC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozNTovKiBUaGlzIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb2RlbF9kZXF1ZXVlKClcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zNi0gKiB0byBkZXF1ZXVlIGEgcGFja2V0IGZyb20gcXVldWUuIE5vdGU6IGJhY2tsb2cgaXMgaGFuZGxlZCBpblxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz01OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjMtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NjQ6XHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXHUwMDI2c2NoLVx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcdTAwMjZxLVx1MDAzZXBhcmFtcywgXHUwMDI2cS1cdTAwM2V2YXJzLFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTY1LVx0XHRcdCAgICBcdTAwMjZxLVx1MDAzZXN0YXRzLCBxZGlzY19wa3RfbGVuLCBjb2RlbF9nZXRfZW5xdWV1ZV90aW1lLFxuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo3MzpzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYz04NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTkwLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjkxOlx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTItXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTk2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTA5LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjExMDpcdFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTExLVx0fVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0xODU9c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTItXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjUzOi8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1NC0gKiB0byBkZXF1ZXVlIGEgcGFja2V0IGZyb20gcXVldWUuIE5vdGU6IGJhY2tsb2cgaXMgaGFuZGxlZCBpblxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0yNzY9c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjgzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI4NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMDUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzA2Olx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFx1MDAyNnNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZywgXHUwMDI2cS1cdTAwM2VjcGFyYW1zLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNy1cdFx0XHQgICAgXHUwMDI2Zmxvdy1cdTAwM2VjdmFycywgXHUwMDI2cS1cdTAwM2Vjc3RhdHMsIHFkaXNjX3BrdF9sZW4sXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyMy1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMjQ6c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyNS17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMzY6c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNy17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzOS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNDA6XHRza2IgPSAgX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQxLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0MjpcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM0My1cbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9MzQ3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUxLVx0aWYgKCFza2IpIHtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNTI6XHRcdHNrYiA9IF9fZnFfY29kZWxfZGVxdWV1ZShzY2gpO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM1My1cbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzYwLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM2MTpcdFx0ZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzYyLVx0fVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz03NjI9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZnFfY29kZWxfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc2Ni1cdC5lbnF1ZXVlXHQ9XHRmcV9jb2RlbF9lbnF1ZXVlLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc2NzpcdC5kZXF1ZXVlXHQ9XHRmcV9jb2RlbF9kZXF1ZXVlLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc2OC1cdC5wZWVrXHRcdD1cdGZxX2NvZGVsX3BlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsJiMzOTtzIENvZGVsIEltcGxlbWVudGF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIENvZGVsIGFuZCBGUS1Db2RlbCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzb3VyY2UgZmlsZXMgYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLiBUaGVzZSBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEJleW9uZCB0aGUgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkIGFuZCBlbmFibGVkLiBJJiMzOTtsbCBzcGVjaWZpY2FsbHkgbG9vayBhdCB0aGVpciBhc3NvY2lhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJIGNvdWxkIHByb2JhYmx5IG1hbnVhbGx5IGNyYXdsIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGJ1dCB0byBzcGVlZCB0aGluZ3MgdXAsIEkmIzM5O2xsIGxldmVyYWdlIGEgc2VhcmNoIHRvb2wgLSBtb3N0IGxpa2VseSBgZ3JlcHBlcmAgLSB0byBlZmZpY2llbnRseSBsb2NhdGUgdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfKEZRXyk/Q09ERUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MjU1PWNvbmZpZyBORVRfU0NIX1FGUVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI2NS1cbm5ldC9zY2hlZC9LY29uZmlnOjI2Njpjb25maWcgTkVUX1NDSF9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjY3LVx0dHJpc3RhdGUgXCYjMzQ7Q29udHJvbGxlZCBEZWxheSBBUU0gKENPREVMKVwmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTI3Ni1cbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxubmV0L3NjaGVkL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7RmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgQ29yZSBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBuZXR3b3JraW5nLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZXMgMjYwLTI5MC4gVGhhdCBhcmVhIHVzdWFsbHkgY292ZXJzIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRyYWZmaWMgc2hhcGluZyBvciBxdWV1aW5nIGRpc2NpcGxpbmVzOyBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byBhIGZlYXR1cmUgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyB3aXRoLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGluIHRoYXQgYmxvY2suIExldCYjMzk7cyBzZWUgd2hhdCBwb3BzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjYwOlx0XG4gMjYxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyNjI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX3FmcS5cbiAyNjM6XHRcbiAyNjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjU6XHRcbiAyNjY6XHRjb25maWcgTkVUX1NDSF9DT0RFTFxuIDI2NzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29udHJvbGxlZCBEZWxheSBBUU0gKENPREVMKVwmIzM0O1xuIDI2ODpcdFx0aGVscFxuIDI2OTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQ29udHJvbGxlZCBEZWxheSAoQ09ERUwpXG4gMjcwOlx0XHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyNzE6XHRcbiAyNzI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDI3MzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfY29kZWwuXG4gMjc0Olx0XG4gMjc1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjc2Olx0XG4gMjc3Olx0Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbiAyNzg6XHRcdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWUgQ29udHJvbGxlZCBEZWxheSBBUU0gKEZRX0NPREVMKVwmIzM0O1xuIDI3OTpcdFx0aGVscFxuIDI4MDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlEgQ29udHJvbGxlZCBEZWxheSAoRlFfQ09ERUwpXG4gMjgxOlx0XHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAyODI6XHRcbiAyODM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDI4NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfZnFfY29kZWwuXG4gMjg1Olx0XG4gMjg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjg3Olx0XG4gMjg4Olx0Y29uZmlnIE5FVF9TQ0hfQ0FLRVxuIDI4OTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVwmIzM0O1xuIDI5MDpcdFx0aGVscFxuIDI5MTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkXG4gMjkyOlx0XHQgIChDQUtFKSBxdWV1ZSBtYW5hZ2VtZW50IGFsZ29yaXRobS5cbiAyOTM6XHRcbiAyOTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIENvZGVsIFVzYWdlIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgY29kZWJhc2UsIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGBpbmNsdWRlL25ldC9jb2RlbC5oYCBhbmQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgdGhpbmcuIFNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSAqd2hlcmUqIGVsc2UgdGhpcyBpcyB1c2VkLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZSBvbiBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZ29pbmcgdG8gZmlyZSB1cCBncmVwIGFuZCBzY2FuIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSB0cmVlIGZvciBib3RoIGBjb2RlbC5oYCBhbmQgc2VlIGlmIHRoZSBzYW1lIGFwcGxpZXMgdG8gYGNvZGVsX2ltcGwuaGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2Ygd2hpY2ggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHJlbHkgb24gdGhpcyBDb2RlbCBpbXBsZW1lbnRhdGlvbiBhbmQgbWF5YmUgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGltcGFjdCBvZiBhbnkgY2hhbmdlcyBJJiMzOTttIGNvbnNpZGVyaW5nLiBTaG91bGQgYmUgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIHVuY292ZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaC01MS1cbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmg6NTI6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2VcbmluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmgtNTMtI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvY2ZnODAyMTEuaFx1MDAzZVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDoyMzojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmhcdTAwM2Vcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvbWFjODAyMTEuaFx1MDAzZVxubmV0L21hYzgwMjExL3R4LmM6MjU6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsLmhcdTAwM2Vcbm5ldC9tYWM4MDIxMS90eC5jOjI2OiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcdTAwM2Vcbm5ldC9tYWM4MDIxMS90eC5jLTI3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjIxOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjI6I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjIzOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXHUwMDNlXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjQtXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTIxLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWwuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjIzOiNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcdTAwM2Vcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNDojaW5jbHVkZSBcdTAwM2NuZXQvY29kZWxfcWRpc2MuaFx1MDAzZVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgaG93IENvRGVsJiMzOTtzIGRlcXVldWUgYW5kIGNvbnRyb2wgbGF3IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQ6CgoqKkFuYWx5emluZyB0aGUgQ29EZWwgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHRvIHRydWx5IGdyYXNwIGhvdyB0aGlzIENvRGVsIG1lY2hhbmlzbSB3b3JrcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNyYWNrIG9wZW4gdGhlIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhlYWRlciBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBgY29kZWxfZGVxdWV1ZWAgYW5kIGBjb2RlbF9jb250cm9sX2xhd2AgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlc2UgYXJlIGRlY2xhcmVkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgdXNlLCBhbmQgcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCB0aGUgYXJndW1lbnRzIHRoZXkgdGFrZS4gVGhpcyBpcyB0aGUgYmx1ZXByaW50OyB0aGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLgoKTmV4dCwgSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGludm9rZWQuIFdoZXJlIGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYXJlIHRoZXkgY2FsbGVkPyBBcmUgdGhleSBwYXJ0IG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgaXRzZWxmPyBBcmUgdGhlcmUgY2FsbGJhY2tzPyBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS4gSSBuZWVkIHRvIHNlZSB0aGUgZXhlY3V0aW9uIGZsb3c6IHdoZW4gZG9lcyB0aGUgZGVxdWV1ZSBoYXBwZW4sIGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBjb250cm9sIGxhdyBjYWxjdWxhdGlvbiBhbmQgYXBwbGljYXRpb24/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaG93IENvRGVsIGlzIG9yY2hlc3RyYXRpbmcgdGhlc2Ugc3RlcHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbGwgY2hhaW5zLCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBjb2RlICphY3R1YWxseSogZG9lcyBzb21ldGhpbmcgd2l0aCB0aGUgcXVldWUgYW5kIGl0cyBwYWNrZXRzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgdGhlb3JldGljYWwgQ29EZWwgZGVzaWduIGlzIHJlYWxpemVkIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0fVxuICA5MTpcdFxuICA5MjpcdC8qXG4gIDkzOlx0ICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCAmIzQzOyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICA5NDpcdCAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICA5NTpcdCAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuICA5ODpcdCAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gIDk5Olx0ICovXG4gMTAwOlx0c3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiAxMDE6XHRcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiAxMDI6XHRcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4gMTAzOlx0e1xuIDEwNDpcdFx0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuIDEwNTpcdFx0XHRcdCByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLFxuIDEwNjpcdFx0XHRcdFx0XHQgIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKSk7XG4gMTA3Olx0fVxuIDEwODpcdFxuIDEwOTpcdHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTEwOlx0XHRcdFx0ICAgICAgdm9pZCAqY3R4LFxuIDExMTpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDExMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcbiAxMTM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDExNDpcdFx0XHRcdCAgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXG4gMTE1Olx0XHRcdFx0ICAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxuIDExNjpcdFx0XHRcdCAgICAgIHUzMiAqYmFja2xvZyxcbiAxMTc6XHRcdFx0XHQgICAgICBjb2RlbF90aW1lX3Qgbm93KVxuIDExODpcdHtcbiAxMTk6XHRcdGJvb2wgb2tfdG9fZHJvcDtcbiAxMjA6XHRcdHUzMiBza2JfbGVuO1xuIDEyMTpcdFxuIDEyMjpcdFx0aWYgKCFza2IpIHtcbiAxMjM6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcbiAxMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0c2tiX2xlbiA9IHNrYl9sZW5fZnVuYyhza2IpO1xuIDEyODpcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWxkZWxheSwgbm93IC0gc2tiX3RpbWVfZnVuYyhza2IpKTtcbiAxMjk6XHRcbiAxMzA6XHRcdGlmICh1bmxpa2VseShza2JfbGVuIFx1MDAzZSBzdGF0cy1cdTAwM2VtYXhwYWNrZXQpKVxuIDEzMTpcdFx0XHRXUklURV9PTkNFKHN0YXRzLVx1MDAzZW1heHBhY2tldCwgc2tiX2xlbik7XG4gMTMyOlx0XG4gMTMzOlx0XHRpZiAoY29kZWxfdGltZV9iZWZvcmUodmFycy1cdTAwM2VsZGVsYXksIHBhcmFtcy1cdTAwM2V0YXJnZXQpIHx8XG4gMTM0Olx0XHQgICAgKmJhY2tsb2cgXHUwMDNjPSBwYXJhbXMtXHUwMDNlbXR1KSB7XG4gMTM1Olx0XHRcdC8qIHdlbnQgYmVsb3cgLSBzdGF5IGJlbG93IGZvciBhdCBsZWFzdCBpbnRlcnZhbCAqL1xuIDEzNjpcdFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuIDEzNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTM4Olx0XHR9XG4gMTM5Olx0XHRva190b19kcm9wID0gZmFsc2U7XG4gMTQwOlx0XHRpZiAodmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID09IDApIHtcbiAxNDE6XHRcdFx0LyoganVzdCB3ZW50IGFib3ZlIGZyb20gYmVsb3cuIElmIHdlIHN0YXkgYWJvdmVcbiAxNDI6XHRcdFx0ICogZm9yIGF0IGxlYXN0IGludGVydmFsIHdlJiMzOTtsbCBzYXkgaXQmIzM5O3Mgb2sgdG8gZHJvcFxuIDE0MzpcdFx0XHQgKi9cbiAxNDQ6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gbm93ICYjNDM7IHBhcmFtcy1cdTAwM2VpbnRlcnZhbDtcbiAxNDU6XHRcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcbiAxNDY6XHRcdFx0b2tfdG9fZHJvcCA9IHRydWU7XG4gMTQ3Olx0XHR9XG4gMTQ4Olx0XHRyZXR1cm4gb2tfdG9fZHJvcDtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiAxNTI6XHRcdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuIDE1MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXG4gMTU0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDE1NTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDE1NjpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxuIDE1NzpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxuIDE1OTpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiAxNjA6XHR7XG4gMTYxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gMTYyOlx0XHRjb2RlbF90aW1lX3Qgbm93O1xuIDE2MzpcdFx0Ym9vbCBkcm9wO1xuIDE2NDpcdFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiAxNjU6XHRcbiAxNjY6XHRcdGlmICghc2tiKSB7XG4gMTY3Olx0XHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG4gMTY4Olx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xuIDE2OTpcdFx0XHRyZXR1cm4gc2tiO1xuIDE3MDpcdFx0fVxuIDE3MTpcdFx0bm93ID0gY29kZWxfZ2V0X3RpbWUoKTtcbiAxNzI6XHRcdGRyb3AgPSBjb2RlbF9zaG91bGRfZHJvcChza2IsIGN0eCwgdmFycywgcGFyYW1zLCBzdGF0cyxcbiAxNzM6XHRcdFx0XHRcdCBza2JfbGVuX2Z1bmMsIHNrYl90aW1lX2Z1bmMsIGJhY2tsb2csIG5vdyk7XG4gMTc0Olx0XHRpZiAodmFycy1cdTAwM2Vkcm9wcGluZykge1xuIDE3NTpcdFx0XHRpZiAoIWRyb3ApIHtcbiAxNzY6XHRcdFx0XHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cbiAxNzc6XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNzg6XHRcdFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4gMTc5Olx0XHRcdFx0LyogSXQmIzM5O3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxuIDE4MDpcdFx0XHRcdCAqIHBhY2tldCBhbmQgZGVxdWV1ZSB0aGUgbmV4dC4gVGhlIGRlcXVldWUgbWlnaHRcbiAxODE6XHRcdFx0XHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cbiAxODI6XHRcdFx0XHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXG4gMTgzOlx0XHRcdFx0ICogQSBsYXJnZSBiYWNrbG9nIG1pZ2h0IHJlc3VsdCBpbiBkcm9wIHJhdGVzIHNvIGhpZ2hcbiAxODQ6XHRcdFx0XHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXG4gMTg1Olx0XHRcdFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXG4gMTg2Olx0XHRcdFx0ICovXG4gMTg3Olx0XHRcdFx0d2hpbGUgKHZhcnMtXHUwMDNlZHJvcHBpbmcgXHUwMDI2XHUwMDI2XG4gMTg4Olx0XHRcdFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVx1MDAzZWRyb3BfbmV4dCkpIHtcbiAxODk6XHRcdFx0XHRcdGlmICgmIzQzOyYjNDM7ZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBDb0RlbCBhbmQgRlEtQ29EZWwgZnVuY3Rpb24gYXQgdGhlIGtlcm5lbCBsZXZlbC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCwgSSBhc3N1bWUsIHBvdGVudGlhbCBwb2ludHMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24sIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMuCgoqKkV4YW1pbmluZyBDb0RlbCBhbmQgRlEtQ29EZWwgSW1wbGVtZW50YXRpb25zKioKCk15IGluaXRpYWwgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBmaWxlcyBmb3IgYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgYW5kIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBiYXNpYyBmbG93IG9mIG9wZXJhdGlvbi4gU28sIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgdG8gZXN0YWJsaXNoIHRoZSBiYXNlbGluZSBvZiB0aGUgcWRpc2MgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY29kZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvZGVsIC0gVGhlIENvbnRyb2xsZWQtRGVsYXkgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgYWxnb3JpdGhtXG4gICA0Olx0ICpcbiAgIDU6XHQgKiAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgS2F0aGxlZW4gTmljaG9scyBcdTAwM2NuaWNob2xzQHBvbGxlcmUuY29tXHUwMDNlXG4gICA2Olx0ICogIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFZhbiBKYWNvYnNvbiBcdTAwM2N2YW5AcG9sbGVyZS5uZXRcdTAwM2VcbiAgIDc6XHQgKlxuICAgODpcdCAqICBJbXBsZW1lbnRlZCBvbiBsaW51eCBieSA6XG4gICA5Olx0ICogIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIEQuIFRhaHQgXHUwMDNjZGF2ZS50YWh0QGJ1ZmZlcmJsb2F0Lm5ldFx1MDAzZVxuICAxMDpcdCAqICBDb3B5cmlnaHQgKEMpIDIwMTIsMjAxNSBFcmljIER1bWF6ZXQgXHUwMDNjZWR1bWF6ZXRAZ29vZ2xlLmNvbVx1MDAzZVxuICAxMTpcdCAqL1xuICAxMjpcdFxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbC5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXHUwMDNlXG4gIDI0Olx0XG4gIDI1Olx0XG4gIDI2Olx0I2RlZmluZSBERUZBVUxUX0NPREVMX0xJTUlUIDEwMDBcbiAgMjc6XHRcbiAgMjg6XHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSB7XG4gIDI5Olx0XHRzdHJ1Y3QgY29kZWxfcGFyYW1zXHRwYXJhbXM7XG4gIDMwOlx0XHRzdHJ1Y3QgY29kZWxfdmFyc1x0dmFycztcbiAgMzE6XHRcdHN0cnVjdCBjb2RlbF9zdGF0c1x0c3RhdHM7XG4gIDMyOlx0XHR1MzJcdFx0XHRkcm9wX292ZXJsaW1pdDtcbiAgMzM6XHR9O1xuICAzNDpcdFxuICAzNTpcdC8qIFRoaXMgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvZGVsX2RlcXVldWUoKVxuICAzNjpcdCAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXG4gIDM3Olx0ICogY29kZWwsIHdlIGRvbnQgbmVlZCB0byByZWR1Y2UgaXQgaGVyZS5cbiAgMzg6XHQgKi9cbiAgMzk6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxuICA0MDpcdHtcbiAgNDE6XHRcdHN0cnVjdCBRZGlzYyAqc2NoID0gY3R4O1xuICA0MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fcWRpc2NfZGVxdWV1ZV9oZWFkKFx1MDAyNnNjaC1cdTAwM2VxKTtcbiAgNDM6XHRcbiAgNDQ6XHRcdGlmIChza2IpIHtcbiAgNDU6XHRcdFx0cXN0YXRzX2JhY2tsb2dfc3ViKHNjaCwgcWRpc2NfcGt0X2xlbihza2IpKTtcbiAgNDY6XHRcdFx0cHJlZmV0Y2goXHUwMDI2c2tiLVx1MDAzZWVuZCk7IC8qIHdlJiMzOTtsbCBuZWVkIHNrYl9zaGluZm8oKSAqL1xuICA0NzpcdFx0fVxuICA0ODpcdFx0cmV0dXJuIHNrYjtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcbiAgNTI6XHR7XG4gIDUzOlx0XHRzdHJ1Y3QgUWRpc2MgKnNjaCA9IGN0eDtcbiAgNTQ6XHRcbiAgNTU6XHRcdHFkaXNjX2RlcXVldWVfZHJvcChzY2gsIHNrYiwgUURJU0NfRFJPUF9DT05HRVNURUQpO1xuICA1NjpcdFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcbiAgNTc6XHR9XG4gIDU4Olx0XG4gIDU5Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gIDYwOlx0e1xuICA2MTpcdFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gIDYyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuICA2MzpcdFxuICA2NDpcdFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFx1MDAyNnNjaC1cdTAwM2Vxc3RhdHMuYmFja2xvZywgXHUwMDI2cS1cdTAwM2VwYXJhbXMsIFx1MDAyNnEtXHUwMDNldmFycyxcbiAgNjU6XHRcdFx0XHQgICAgXHUwMDI2cS1cdTAwM2VzdGF0cywgcWRpc2NfcGt0X2xlbiwgY29kZWxfZ2V0X2VucXVldWVfdGltZSxcbiAgNjY6XHRcdFx0XHQgICAgZHJvcF9mdW5jLCBkZXF1ZXVlX2Z1bmMpO1xuICA2NzpcdFxuICA2ODpcdFx0aWYgKHNrYilcbiAgNjk6XHRcdFx0cWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7XG4gIDcwOlx0XHRyZXR1cm4gc2tiO1xuICA3MTpcdH1cbiAgNzI6XHRcbiAgNzM6XHRzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG4gIDc0Olx0e1xuICA3NTpcdFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAocS1cdTAwM2VzdGF0cy5kcm9wX2NvdW50KSB7XG4gIDc4Olx0XHRcdHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBxLVx1MDAzZXN0YXRzLmRyb3BfY291bnQsXG4gIDc5Olx0XHRcdFx0XHRcdCAgcS1cdTAwM2VzdGF0cy5kcm9wX2xlbik7XG4gIDgwOlx0XHRcdHEtXHUwMDNlc3RhdHMuZHJvcF9jb3VudCA9IDA7XG4gIDgxOlx0XHRcdHEtXHUwMDNlc3RhdHMuZHJvcF9sZW4gPSAwO1xuICA4MjpcdFx0fVxuICA4MzpcdH1cbiAgODQ6XHRcbiAgODU6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gIDg2Olx0e1xuICA4NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAgODg6XHRcbiAgODk6XHRcdHNrYiA9IF9fY29kZWxfcWRpc2NfZGVxdWV1ZShzY2gpO1xuICA5MDpcdFxuICA5MTpcdFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XG4gIDkyOlx0XG4gIDkzOlx0XHRyZXR1cm4gc2tiO1xuICA5NDpcdH1cbiAgOTU6XHRcbiAgOTY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXG4gIDk3Olx0e1xuICA5ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKFx1MDAyNnNjaC1cdTAwM2Vnc29fc2tiKTtcbiAgOTk6XHRcbiAxMDA6XHRcdGlmICghc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjkxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlcywgZnJvbSBteSBwZXJzcGVjdGl2ZSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFNjaGVkdWxpbmcgQ29kZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBjb25jZXB0dWFsIGdyYXNwIG9mIENvRGVsIGFuZCBGUS1Db0RlbCwgYnV0IGEgZGVlcCBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0aGVvcmV0aWNhbCBjb25jZXB0cyBhcmUgdHJhbnNsYXRlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwmIzM5O3Mgc2NoZWR1bGluZyBmcmFtZXdvcmsuIEkgd2FudCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBxdWV1aW5nIGxvZ2ljLCB0aGUgZGVxdWV1ZSBwcm9jZXNzLCBob3cgdGhlIHRhcmdldCBhbmQgaW50ZXJ2YWwgcGFyYW1ldGVycyBhcmUgaGFuZGxlZCwgYW5kIGhvdyBkcm9wcyBhcmUgZGV0ZXJtaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IG9wdGltaXphdGlvbnMgb3IgbnVhbmNlcyBzcGVjaWZpYyB0byB0aGlzIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBkb3duIHRvIHRoZSBsb3cgbGV2ZWwgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdFx0c2tiID0gX19jb2RlbF9xZGlzY19kZXF1ZXVlKHNjaCk7XG4gMTAyOlx0XG4gMTAzOlx0XHRcdGlmIChza2IpIHtcbiAxMDQ6XHRcdFx0XHRfX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnNjaC1cdTAwM2Vnc29fc2tiLCBza2IpO1xuIDEwNTpcdFx0XHRcdC8qIGl0JiMzOTtzIHN0aWxsIHBhcnQgb2YgdGhlIHF1ZXVlICovXG4gMTA2Olx0XHRcdFx0cWRpc2NfcXN0YXRzX2JhY2tsb2dfaW5jKHNjaCwgc2tiKTtcbiAxMDc6XHRcdFx0XHRzY2gtXHUwMDNlcS5xbGVuJiM0MzsmIzQzOztcbiAxMDg6XHRcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0XHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcbiAxMTE6XHRcdH1cbiAxMTI6XHRcbiAxMTM6XHRcdHJldHVybiBza2I7XG4gMTE0Olx0fVxuIDExNTpcdFxuIDExNjpcdHN0YXRpYyBpbnQgY29kZWxfcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiAxMTc6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuIDExODpcdHtcbiAxMTk6XHRcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKGxpa2VseShxZGlzY19xbGVuKHNjaCkgXHUwMDNjIHNjaC1cdTAwM2VsaW1pdCkpIHtcbiAxMjI6XHRcdFx0Y29kZWxfc2V0X2VucXVldWVfdGltZShza2IpO1xuIDEyMzpcdFx0XHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcbiAxMjQ6XHRcdH1cbiAxMjU6XHRcdHEgPSBxZGlzY19wcml2KHNjaCk7XG4gMTI2Olx0XHRXUklURV9PTkNFKHEtXHUwMDNlZHJvcF9vdmVybGltaXQsIHEtXHUwMDNlZHJvcF9vdmVybGltaXQgJiM0MzsgMSk7XG4gMTI3Olx0XHRyZXR1cm4gcWRpc2NfZHJvcF9yZWFzb24oc2tiLCBzY2gsIHRvX2ZyZWUsIFFESVNDX0RST1BfT1ZFUkxJTUlUKTtcbiAxMjg6XHR9XG4gMTI5Olx0XG4gMTMwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGNvZGVsX3BvbGljeVtUQ0FfQ09ERUxfTUFYICYjNDM7IDFdID0ge1xuIDEzMTpcdFx0W1RDQV9DT0RFTF9UQVJHRVRdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gMTMyOlx0XHRbVENBX0NPREVMX0xJTUlUXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDEzMzpcdFx0W1RDQV9DT0RFTF9JTlRFUlZBTF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiAxMzQ6XHRcdFtUQ0FfQ09ERUxfRUNOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gMTM1Olx0XHRbVENBX0NPREVMX0NFX1RIUkVTSE9MRF09IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gMTM2Olx0fTtcbiAxMzc6XHRcbiAxMzg6XHRzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuIDEzOTpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxNDA6XHR7XG4gMTQxOlx0XHR1bnNpZ25lZCBpbnQgZHJvcHBlZF9wa3RzID0gMCwgZHJvcHBlZF9ieXRlcyA9IDA7XG4gMTQyOlx0XHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbiAxNDM6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DT0RFTF9NQVggJiM0MzsgMV07XG4gMTQ0Olx0XHRpbnQgZXJyO1xuIDE0NTpcdFxuIDE0NjpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfQ09ERUxfTUFYLCBvcHQsXG4gMTQ3Olx0XHRcdFx0XHRcdCAgY29kZWxfcG9saWN5LCBOVUxMKTtcbiAxNDg6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTQ5Olx0XHRcdHJldHVybiBlcnI7XG4gMTUwOlx0XG4gMTUxOlx0XHRzY2hfdHJlZV9sb2NrKHNjaCk7XG4gMTUyOlx0XG4gMTUzOlx0XHRpZiAodGJbVENBX0NPREVMX1RBUkdFVF0pIHtcbiAxNTQ6XHRcdFx0dTMyIHRhcmdldCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9DT0RFTF9UQVJHRVRdKTtcbiAxNTU6XHRcbiAxNTY6XHRcdFx0V1JJVEVfT05DRShxLVx1MDAzZXBhcmFtcy50YXJnZXQsXG4gMTU3Olx0XHRcdFx0ICAgKCh1NjQpdGFyZ2V0ICogTlNFQ19QRVJfVVNFQykgXHUwMDNlXHUwMDNlIENPREVMX1NISUZUKTtcbiAxNTg6XHRcdH1cbiAxNTk6XHRcbiAxNjA6XHRcdGlmICh0YltUQ0FfQ09ERUxfQ0VfVEhSRVNIT0xEXSkge1xuIDE2MTpcdFx0XHR1NjQgdmFsID0gbmxhX2dldF91MzIodGJbVENBX0NPREVMX0NFX1RIUkVTSE9MRF0pO1xuIDE2MjpcdFxuIDE2MzpcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlcGFyYW1zLmNlX3RocmVzaG9sZCxcbiAxNjQ6XHRcdFx0XHQgICAodmFsICogTlNFQ19QRVJfVVNFQykgXHUwMDNlXHUwMDNlIENPREVMX1NISUZUKTtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcbiAxNjc6XHRcdGlmICh0YltUQ0FfQ09ERUxfSU5URVJWQUxdKSB7XG4gMTY4Olx0XHRcdHUzMiBpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9DT0RFTF9JTlRFUlZBTF0pO1xuIDE2OTpcdFxuIDE3MDpcdFx0XHRXUklURV9PTkNFKHEtXHUwMDNlcGFyYW1zLmludGVydmFsLFxuIDE3MTpcdFx0XHRcdCAgICgodTY0KWludGVydmFsICogTlNFQ19QRVJfVVNFQykgXHUwMDNlXHUwMDNlIENPREVMX1NISUZUKTtcbiAxNzI6XHRcdH1cbiAxNzM6XHRcbiAxNzQ6XHRcdGlmICh0YltUQ0FfQ09ERUxfTElNSVRdKVxuIDE3NTpcdFx0XHRXUklURV9PTkNFKHNjaC1cdTAwM2VsaW1pdCxcbiAxNzY6XHRcdFx0XHQgICBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfTElNSVRdKSk7XG4gMTc3Olx0XG4gMTc4Olx0XHRpZiAodGJbVENBX0NPREVMX0VDTl0pXG4gMTc5Olx0XHRcdFdSSVRFX09OQ0UocS1cdTAwM2VwYXJhbXMuZWNuLFxuIDE4MDpcdFx0XHRcdCAgICEhbmxhX2dldF91MzIodGJbVENBX0NPREVMX0VDTl0pKTtcbiAxODE6XHRcbiAxODI6XHRcdHdoaWxlIChzY2gtXHUwMDNlcS5xbGVuIFx1MDAzZSBzY2gtXHUwMDNlbGltaXQpIHtcbiAxODM6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjX2RlcXVldWVfaW50ZXJuYWwoc2NoLCB0cnVlKTtcbiAxODQ6XHRcbiAxODU6XHRcdFx0aWYgKCFza2IpXG4gMTg2Olx0XHRcdFx0YnJlYWs7XG4gMTg3Olx0XG4gMTg4Olx0XHRcdGRyb3BwZWRfcGt0cyYjNDM7JiM0Mzs7XG4gMTg5Olx0XHRcdGRyb3BwZWRfYnl0ZXMgJiM0Mzs9IHFkaXNjX3BrdF9sZW4oc2tiKTtcbiAxOTA6XHRcdFx0cnRubF9xZGlzY19kcm9wKHNrYiwgc2NoKTtcbiAxOTE6XHRcdH1cbiAxOTI6XHRcdHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBkcm9wcGVkX3BrdHMsIGRyb3BwZWRfYnl0ZXMpO1xuIDE5MzpcdFxuIDE5NDpcdFx0c2NoX3RyZWVfdW5sb2NrKHNjaCk7XG4gMTk1Olx0XHRyZXR1cm4gMDtcbiAxOTY6XHR9XG4gMTk3Olx0XG4gMTk4Olx0c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4gMTk5Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyMDA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgKioKCk9rYXksIEkmIzM5O20gc2hpZnRpbmcgZm9jdXMuIFdlJiMzOTt2ZSBjb3ZlcmVkIGEgZ29vZCBhbW91bnQgb2YgZ3JvdW5kLCBidXQgbm93IGl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyB0aGlzIGlzIGFsbCAqYWN0dWFsbHkqIGRvbmUuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSBjcnVjaWFsIGFsZ29yaXRobXMgZm9yIHBhY2tldCBzY2hlZHVsaW5nIGFuZCBxdWV1ZSBtYW5hZ2VtZW50LCBhbmQgdGhlIGxvZ2ljIHRoYXQgaW1wbGVtZW50cyBDb0RlbCYjMzk7cyBhY3RpdmUgcXVldWUgbWFuYWdlbWVudC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGZhaXIgcXVldWVpbmcgYXNwZWN0IOKAkyBhcmUgdGhleSB1c2luZyBhIGhhc2gsIHNvbWUgZm9ybSBvZiByb3VuZC1yb2Jpbiwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBmcSBhbmQgY29kZWwgYXNwZWN0cywgdGhhdCBpcyB0byBzYXkgdGhlIGZhaXIgcXVldWluZyBhbmQgdGhlIGNvbnRyb2xsZWQgZGVsYXkgb2YgQ29EZWwuIEkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2sgbWFuYWdlbWVudCBhcyB3ZWxsLCBnaXZlbiB0aGUgY29uY3VycmVuY3kgaW52b2x2ZWQgaW4gYSBuZXR3b3JrIHNjaGVkdWxlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdFxuIDMyMTpcdFx0cmV0dXJuIHNrYjtcbiAzMjI6XHR9XG4gMzIzOlx0XG4gMzI0Olx0c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDMyNTpcdHtcbiAzMjY6XHRcdHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQpIHtcbiAzMjk6XHRcdFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXHUwMDNlY3N0YXRzLmRyb3BfY291bnQsXG4gMzMwOlx0XHRcdFx0XHRcdCAgcS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4pO1xuIDMzMTpcdFx0XHRxLVx1MDAzZWNzdGF0cy5kcm9wX2NvdW50ID0gMDtcbiAzMzI6XHRcdFx0cS1cdTAwM2Vjc3RhdHMuZHJvcF9sZW4gPSAwO1xuIDMzMzpcdFx0fVxuIDMzNDpcdH1cbiAzMzU6XHRcbiAzMzY6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG4gMzM3Olx0e1xuIDMzODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzMzk6XHRcbiAzNDA6XHRcdHNrYiA9ICBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNDE6XHRcbiAzNDI6XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dXJuIHNrYjtcbiAzNDU6XHR9XG4gMzQ2Olx0XG4gMzQ3Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV9jb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxuIDM0ODpcdHtcbiAzNDk6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZzY2gtXHUwMDNlZ3NvX3NrYik7XG4gMzUwOlx0XG4gMzUxOlx0XHRpZiAoIXNrYikge1xuIDM1MjpcdFx0XHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcbiAzNTM6XHRcbiAzNTQ6XHRcdFx0aWYgKHNrYikge1xuIDM1NTpcdFx0XHRcdF9fc2tiX3F1ZXVlX2hlYWQoXHUwMDI2c2NoLVx1MDAzZWdzb19za2IsIHNrYik7XG4gMzU2Olx0XHRcdFx0LyogaXQmIzM5O3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cbiAzNTc6XHRcdFx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19pbmMoc2NoLCBza2IpO1xuIDM1ODpcdFx0XHRcdHNjaC1cdTAwM2VxLnFsZW4mIzQzOyYjNDM7O1xuIDM1OTpcdFx0XHR9XG4gMzYwOlx0XG4gMzYxOlx0XHRcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xuIDM2MjpcdFx0fVxuIDM2MzpcdFxuIDM2NDpcdFx0cmV0dXJuIHNrYjtcbiAzNjU6XHR9XG4gMzY2Olx0XG4gMzY3Olx0c3RhdGljIHZvaWQgZnFfY29kZWxfZmxvd19wdXJnZShzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdylcbiAzNjg6XHR7XG4gMzY5Olx0XHRydG5sX2tmcmVlX3NrYnMoZmxvdy1cdTAwM2VoZWFkLCBmbG93LVx1MDAzZXRhaWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIzNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKlBlZXJpbmcgaW50byBtYWM4MDIxMSYjMzk7cyBUWCBQYXRoKioKCkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIG1hYzgwMjExIHN0YWNrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRyYW5zbWlzc2lvbi4gV2hlcmUgZG8gSSBzdGFydD8gQWgsIHJpZ2h0LCBgbmV0L21hYzgwMjExL3R4LmNgIGlzIHRoZSBsb2dpY2FsIHBsYWNlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgY29yZSB0cmFuc21pc3Npb24gbG9naWMsIHBhcnRpY3VsYXJseSBpbiB0aGF0IGNyaXRpY2FsIGFyZWEuIEkmIzM5O2xsIHplcm8gaW4gb24gbGluZXMgMTM3MC0xNDQ1LiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgZ290Y2hhcyBJIGNhbiBmaW5kLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBzZWN0aW9uIHRvdWNoZXMgb24gdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlIGRyaXZlciBmb3JtcyBmcmFtZXMsIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgbWF5YmUgZXZlbiBzb21lIFFvUyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgcmF0ZSBjb250cm9sIGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoZSBzdGF0ZSBvZiB0aGlzIGNvZGUgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgdW5kZXIgbG9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvdHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM3MDpcdFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvO1xuMTM3MTpcdFxuMTM3MjpcdFx0aW5mbyA9IChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKilza2ItXHUwMDNlY2I7XG4xMzczOlx0XHRyZXR1cm4gaW5mby1cdTAwM2Vjb250cm9sLmVucXVldWVfdGltZTtcbjEzNzQ6XHR9XG4xMzc1Olx0XG4xMzc2Olx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzLFxuMTM3NzpcdFx0XHRcdFx0XHQgIHZvaWQgKmN0eClcbjEzNzg6XHR7XG4xMzc5Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcbjEzODA6XHRcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcbjEzODE6XHRcdHN0cnVjdCBmcSAqZnE7XG4xMzgyOlx0XHRzdHJ1Y3QgZnFfZmxvdyAqZmxvdztcbjEzODM6XHRcbjEzODQ6XHRcdHR4cWkgPSBjdHg7XG4xMzg1Olx0XHRsb2NhbCA9IHZpZl90b19zZGF0YSh0eHFpLVx1MDAzZXR4cS52aWYpLVx1MDAzZWxvY2FsO1xuMTM4NjpcdFx0ZnEgPSBcdTAwMjZsb2NhbC1cdTAwM2VmcTtcbjEzODc6XHRcbjEzODg6XHRcdGlmIChjdmFycyA9PSBcdTAwMjZ0eHFpLVx1MDAzZWRlZl9jdmFycylcbjEzODk6XHRcdFx0ZmxvdyA9IFx1MDAyNnR4cWktXHUwMDNldGluLmRlZmF1bHRfZmxvdztcbjEzOTA6XHRcdGVsc2VcbjEzOTE6XHRcdFx0ZmxvdyA9IFx1MDAyNmZxLVx1MDAzZWZsb3dzW2N2YXJzIC0gbG9jYWwtXHUwMDNlY3ZhcnNdO1xuMTM5MjpcdFxuMTM5MzpcdFx0cmV0dXJuIGZxX2Zsb3dfZGVxdWV1ZShmcSwgZmxvdyk7XG4xMzk0Olx0fVxuMTM5NTpcdFxuMTM5NjpcdHN0YXRpYyB2b2lkIGNvZGVsX2Ryb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTM5NzpcdFx0XHRcdCAgICB2b2lkICpjdHgpXG4xMzk4Olx0e1xuMTM5OTpcdFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7XG4xNDAwOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbjE0MDE6XHRcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcbjE0MDI6XHRcbjE0MDM6XHRcdHR4cWkgPSBjdHg7XG4xNDA0Olx0XHRsb2NhbCA9IHZpZl90b19zZGF0YSh0eHFpLVx1MDAzZXR4cS52aWYpLVx1MDAzZWxvY2FsO1xuMTQwNTpcdFx0aHcgPSBcdTAwMjZsb2NhbC1cdTAwM2VodztcbjE0MDY6XHRcbjE0MDc6XHRcdGllZWU4MDIxMV9mcmVlX3R4c2tiKGh3LCBza2IpO1xuMTQwODpcdH1cbjE0MDk6XHRcbjE0MTA6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcbjE0MTE6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGZxX3RpbiAqdGluLFxuMTQxMjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZnFfZmxvdyAqZmxvdylcbjE0MTM6XHR7XG4xNDE0Olx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcbjE0MTU6XHRcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcbjE0MTY6XHRcdHN0cnVjdCBjb2RlbF92YXJzICpjdmFycztcbjE0MTc6XHRcdHN0cnVjdCBjb2RlbF9wYXJhbXMgKmNwYXJhbXM7XG4xNDE4Olx0XHRzdHJ1Y3QgY29kZWxfc3RhdHMgKmNzdGF0cztcbjE0MTk6XHRcbjE0MjA6XHRcdGxvY2FsID0gY29udGFpbmVyX29mKGZxLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBmcSk7XG4xNDIxOlx0XHR0eHFpID0gY29udGFpbmVyX29mKHRpbiwgc3RydWN0IHR4cV9pbmZvLCB0aW4pO1xuMTQyMjpcdFx0Y3BhcmFtcyA9IFx1MDAyNmxvY2FsLVx1MDAzZWNwYXJhbXM7XG4xNDIzOlx0XHRjc3RhdHMgPSBcdTAwMjZ0eHFpLVx1MDAzZWNzdGF0cztcbjE0MjQ6XHRcbjE0MjU6XHRcdGlmIChmbG93ID09IFx1MDAyNnRpbi1cdTAwM2VkZWZhdWx0X2Zsb3cpXG4xNDI2Olx0XHRcdGN2YXJzID0gXHUwMDI2dHhxaS1cdTAwM2VkZWZfY3ZhcnM7XG4xNDI3Olx0XHRlbHNlXG4xNDI4Olx0XHRcdGN2YXJzID0gXHUwMDI2bG9jYWwtXHUwMDNlY3ZhcnNbZmxvdyAtIGZxLVx1MDAzZWZsb3dzXTtcbjE0Mjk6XHRcbjE0MzA6XHRcdHJldHVybiBjb2RlbF9kZXF1ZXVlKHR4cWksXG4xNDMxOlx0XHRcdFx0ICAgICBcdTAwMjZmbG93LVx1MDAzZWJhY2tsb2csXG4xNDMyOlx0XHRcdFx0ICAgICBjcGFyYW1zLFxuMTQzMzpcdFx0XHRcdCAgICAgY3ZhcnMsXG4xNDM0Olx0XHRcdFx0ICAgICBjc3RhdHMsXG4xNDM1Olx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX2Z1bmMsXG4xNDM2Olx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV9mdW5jLFxuMTQzNzpcdFx0XHRcdCAgICAgY29kZWxfZHJvcF9mdW5jLFxuMTQzODpcdFx0XHRcdCAgICAgY29kZWxfZGVxdWV1ZV9mdW5jKTtcbjE0Mzk6XHR9XG4xNDQwOlx0XG4xNDQxOlx0c3RhdGljIHZvaWQgZnFfc2tiX2ZyZWVfZnVuYyhzdHJ1Y3QgZnEgKmZxLFxuMTQ0MjpcdFx0XHRcdCAgICAgc3RydWN0IGZxX3RpbiAqdGluLFxuMTQ0MzpcdFx0XHRcdCAgICAgc3RydWN0IGZxX2Zsb3cgKmZsb3csXG4xNDQ0Olx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY0OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDU5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZWwvRlEtQ29kZWwgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXM6IGBpbmNsdWRlL25ldC9jb2RlbC5oYCBub3cgaGFzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2YCwgd2hpY2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbGltaXQuIFRoZW4sIHdpdGhpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYCwgdGhlIGBjb2RlbF9jb250cm9sX2xhd2AgZnVuY3Rpb24gaGFzIGJlZW4gdHdlYWtlZCB0byBlbnN1cmUgYSBtaW5pbXVtIGluY3JlbWVudCBvZiAxIHRpY2suIFRoaXMgaXMga2V5OyBpdCBwcmV2ZW50cyBwb3RlbnRpYWwgaW5maW5pdGUgbG9vcHMgb3Igc3RhbGxzIHdoZW4gZGVhbGluZyB3aXRoIGV4dHJlbWVseSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgY291bnRzLiBUaGF0JiMzOTtzIGEgY2xldmVyIGFuZCBuZWNlc3NhcnkgZ3VhcmRyYWlsIGFnYWluc3QgdGhvc2UgZWRnZS1jYXNlIHNjZW5hcmlvcy4KClRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgY29kZWxfZGVxdWV1ZWAsIHdoZXJlIGRyb3AgbGltaXRpbmcgaGFzIGJlZW4gZXhwbGljaXRseSBhZGRlZC4gQSBgZHJvcHNgIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2l0aGluIHRoZSBkZXF1ZXVlIGxvb3AsIGFuZCBpZiBpdCBleGNlZWRzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLCB0aGUgY29kZSBub3cgc2V0cyBgZHJvcF9uZXh0YCB1c2luZyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCB0aGVuIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgbWVhbnMgdGhlIGRlcXVldWUgZnVuY3Rpb24gaXMgYmVpbmcgbWFkZSBtb3JlIHJvYnVzdCBhbmQgcHJldmVudHMgYSBzaW5nbGUgZGVxdWV1ZSBvcGVyYXRpb24gZnJvbSBnZXR0aW5nIHN0dWNrIGRyb3BwaW5nIHBhY2tldHMgaW5kZWZpbml0ZWx5LiBTbWFydC4KClRoZSBzZWxmdGVzdHMgYXJlIGFsc28gdXBkYXRlZCwgd2hpY2ggaXMgZ29vZC4gV2Ugc2hvdWxkIGV4cGVjdCB0aG9zZSB0byBjYXRjaCBwb3RlbnRpYWwgcmVncmVzc2lvbnMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIENvZGVsIGFuZCBGUS1Db2RlbCBxZGlzY3MgYXJlIGVhc2lseSBhdHRhY2hlZCB0byBuZXR3b3JrIGludGVyZmFjZXMgbGlrZSBgbG9gLCBgZHVtbXlgLCBgdmV0aGAsIG9yIGB0YXBgIHVzaW5nIGBydG5ldGxpbmtgIGZyb20gdXNlcnNwYWNlLiBQYWNrZXQgZW5xdWV1ZS9kZXF1ZXVlIG9wZXJhdGlvbnMgKGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGZxX2NvZGVsX2RlcXVldWVgLCBldGMuKSBhcmUgdHJpZ2dlcmVkIHRocm91Z2ggdGhlc2UuIEFsc28sIGlmIHRoYXQgd2FzbiYjMzk7dCBlbm91Z2gsIG1hYzgwMjExIGFsc28gdXNlcyBjb2RlbC4gVGhhdCYjMzk7cyBhIGdvb2QgY292ZXJhZ2UgcHJvZmlsZS4KCkNvbnNpZGVyaW5nIHRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzICh0aGUgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHkpLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgJiMzNDtXb3J0aEZ1enppbmc9VFJVRSYjMzQ7LiBUaGUgbG9naWMgaXMgbW9kaWZpZWQsIGl0JiMzOTtzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCB3ZSYjMzk7cmUgbG9va2luZyBhdCBjb3JlIHN1YnN5c3RlbSBjaGFuZ2VzLCB0aGUga2luZCB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzIG9yIHNlY3VyaXR5IGlzc3Vlcy4gVGhlIHJlZmFjdG9yaW5nIGFzcGVjdCBpcyBhbHNvIGluIHBsYXkgaGVyZSwgc2luY2UgdGhlcmUgaXMgYSByZXN0cnVjdHVyaW5nIG9mIGFsZ29yaXRobSBmbG93cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZWFyY2ggdGhlIGNvbmZpZ3MgYW5kIHN5bWJvbHMgY2FyZWZ1bGx5LCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIE5FVF9TQ0hFRHxjb25maWcgTkVUX1NDSF9DT0RFTHxjb25maWcgTkVUX1NDSF9GUV9DT0RFTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTI1NT1jb25maWcgTkVUX1NDSF9RRlFcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yNjUtXG5uZXQvc2NoZWQvS2NvbmZpZzoyNjY6Y29uZmlnIE5FVF9TQ0hfQ09ERUxcbm5ldC9zY2hlZC9LY29uZmlnLTI2Ny1cdHRyaXN0YXRlIFwmIzM0O0NvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXG5uZXQvc2NoZWQvS2NvbmZpZzoyNzc6Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O0ZhaXIgUXVldWUgQ29udHJvbGxlZCBEZWxheSBBUU0gKEZRX0NPREVMKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9TQ0hFRGAg4oCTIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBpdHNlbGYuIEkmIzM5O2xsIGZvY3VzIG9uIGxpbmVzIDEgdG8gMjAsIGFzIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIGRlZmluaXRpb25zIGFuZCBrZXkgZGVwZW5kZW5jaWVzIGFyZSBvdXRsaW5lZC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGNsYXJpZnkgdGhlIHByZXJlcXVpc2l0ZXMsIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgb3Igb3RoZXIga2VybmVsIGZlYXR1cmVzIHRoYXQgYE5FVF9TQ0hFRGAgcmVsaWVzIHVwb24uIFRoaXMgaW5pdGlhbCBzY2FuIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGlzIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcbiAgMTc6XHRcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXG4gIDE5Olx0XHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDIwOlx0XHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmb3IgUmVsZXZhbmNlKioKCk9rYXksIHNvIEkgbmVlZCB0byBwaXZvdCBhIGJpdCBhbmQgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCByZWxhdGVkIHRvIG1hYzgwMjExLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGdvaW5nIHRvIGJlIGRpdmluZyBpbnRvIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhhdCBjb25maWd1cmF0aW9uIGZpbGUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0aGVyZSB0aGF0IGFyZSBhbHNvIHBvdGVudGlhbGx5IHJlbGV2YW50IHRvIHRoaXMgY3VycmVudCBsaW5lIG9mIGlucXVpcnkuIEl0JiMzOTtzIGEga2V5IGNvbmZpZ3VyYXRpb24gZmlsZSwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwbGFjZSB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igb3ZlcmxhcHMgaW4gZnVuY3Rpb25hbGl0eSwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIG9yIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBtZW50aW9uZWQgdGhhdCBjb3VsZCBpbXBhY3QgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYmxlbSBzcGFjZS4gR290dGEgc3RheSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwLVxubmV0L21hYzgwMjExL0tjb25maWc6MjE6Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xubmV0L21hYzgwMjExL0tjb25maWctMjItXHRib29sXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMy1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctMjUtXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQwLVxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxubmV0L21hYzgwMjExL0tjb25maWctNDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo1MDpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXHRzdHJpbmdcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFwmIzM0O1NvbWUgd2lyZWxlc3MgZHJpdmVycyByZXF1aXJlIGEgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTU5LVxubmV0L21hYzgwMjExL0tjb25maWc6NjA6Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIG1hYzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNzgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo3OTpjb25maWcgTUFDODAyMTFfTEVEU1xubmV0L21hYzgwMjExL0tjb25maWctODAtXHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjg4OmNvbmZpZyBNQUM4MDIxMV9ERUJVR0ZTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7VHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxubmV0L21hYzgwMjExL0tjb25maWc6MTEwOm1lbnVjb25maWcgTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtTZWxlY3QgbWFjODAyMTEgZGVidWdnaW5nIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTE1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTE2OmNvbmZpZyBNQUM4MDIxMV9OT0lOTElORVxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtEbyBub3QgaW5saW5lIFRYL1JYIGhhbmRsZXJzXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTMxLVxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzMtXHRib29sIFwmIzM0O1ZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE0Mzpjb25maWcgTUFDODAyMTFfTUxNRV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTQ0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1hbmFnZWQgTUxNRSBvdXRwdXRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTMtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNTQ6Y29uZmlnIE1BQzgwMjExX1NUQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHN0YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTYyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTY0LVx0Ym9vbCBcJiMzNDtWZXJib3NlIEhUIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE3NTpjb25maWcgTUFDODAyMTFfT0NCX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgT0NCIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE4NS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE4Njpjb25maWcgTUFDODAyMTFfSUJTU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTg3LVx0Ym9vbCBcJiMzNDtWZXJib3NlIElCU1MgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTk2LVxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIwOTpjb25maWcgTUFDODAyMTFfTVBMX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwZWVyIGxpbmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjIxLVxubmV0L21hYzgwMjExL0tjb25maWc6MjIyOmNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcGF0aCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzQtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNTk6Y29uZmlnIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBjaGFubmVsIHN3aXRjaCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3MS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyODE6Y29uZmlnIE1BQzgwMjExX1RETFNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4Mi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBURExTIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5Mi1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI5Mzpjb25maWcgTUFDODAyMTFfREVCVUdfQ09VTlRFUlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cdGJvb2wgXCYjMzQ7RXh0cmEgc3RhdGlzdGljcyBmb3IgVFgvUlggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMzA3LVxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxubmV0L21hYzgwMjExL0tjb25maWctMzA5LVx0aW50IFwmIzM0O1N0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcJiMzNDsgaWYgTUFDODAyMTFfREVCVUdfTUVOVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkwMgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3RhdGljIElubGluZSBGdW5jdGlvbnMgYW5kIElkZW50aWZ5aW5nIEtleSBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIENvZGVsIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZmlsZXM6IGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCwgYW5kIHBvdGVudGlhbGx5IGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSBjb3JlIENvZGVsIGltcGxlbWVudGF0aW9uLCBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAsIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdpdGhpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4KCk5vdywgdGhlIGNoYWxsZW5nZSB3aXRoIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLCBhcyBJIHJlY2FsbCwgaXMgdGhhdCB0aGV5IGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdGhlIHZtbGludXggaW1hZ2UuIFRoaXMgbWVhbnMgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IHRoZW0gd2l0aCBjb3ZlcmFnZSBmaWx0ZXJzLiBUaGUga2VybmVsIGRvY3MgdGVsbCBtZSB0aGF0IGlmIG15IGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gdGhlc2Ugc3RhdGljIGlubGluZSBoZWxwZXJzLCBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyAqY2FsbGVyKiBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYC5jYCBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0uIEkgbmVlZCB0byBhdm9pZCBsaWZlY3ljbGUgd3JhcHBlcnMgdGhhdCBhcmUgdXNlZCBldmVyeXdoZXJlLgoKVGhlcmVmb3JlLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgY2FsbGVyIGZ1bmN0aW9ucyBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AuIExldCYjMzk7cyBnZXQgYSBsaXN0OiBJJiMzOTt2ZSBnb3QgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgY29kZWxfcGVla2AsIGBjb2RlbF9pbml0YCwgYGNvZGVsX2NoYW5nZWAsIGBjb2RlbF9yZXNldGAsIGBjb2RlbF9kZXN0cm95YCwgYGNvZGVsX2R1bXBgLCBhbmQgYGNvZGVsX2R1bXBfc3RhdHNgIGluIGBzY2hfY29kZWwuY2AuIEkgbmVlZCB0byByZXZpZXcgYWxsIGZ1bmN0aW9ucyBpbiBib3RoIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSB0byB0aGUgQ29kZWwgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jb2RlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfY29kZWwuYz0yOD1zdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM4LSAqL1xubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjM5OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZGVxdWV1ZV9mdW5jKHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLCB2b2lkICpjdHgpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNDAte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy01MC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo1MTpzdGF0aWMgdm9pZCBkcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTUyLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNTgtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NTk6c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjAte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo3MzpzdGF0aWMgdm9pZCBjb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy04NC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo4NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtODYte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy05NS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo5NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTcte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTUtXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTE2OnN0YXRpYyBpbnQgY29kZWxfcWRpc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTctXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjb2RlbF9wb2xpY3lbVENBX0NPREVMX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTM3LVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTEzOS1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoxOTg6c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMTk5LVx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyNi1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjc6c3RhdGljIGludCBjb2RlbF9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyOC17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI1Ny1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyNTg6c3RhdGljIGludCBjb2RlbF9kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI1OS17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI4My1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyODQ6c3RhdGljIHZvaWQgY29kZWxfcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjg1LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MjkyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDUtfTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMDY6TU9EVUxFX0FMSUFTX05FVF9TQ0goXCYjMzQ7Y29kZWxcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwNy1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMDg6c3RhdGljIGludCBfX2luaXQgY29kZWxfbW9kdWxlX2luaXQodm9pZClcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMDkte1xuLS1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0zMTItXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzEzOnN0YXRpYyB2b2lkIF9fZXhpdCBjb2RlbF9tb2R1bGVfZXhpdCh2b2lkKVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMxNC17XG4tLVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMxNy1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMTg6bW9kdWxlX2luaXQoY29kZWxfbW9kdWxlX2luaXQpXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzE5Om1vZHVsZV9leGl0KGNvZGVsX21vZHVsZV9leGl0KVxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMyMC1cbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjE6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbnRyb2xsZWQgRGVsYXkgcXVldWUgZGlzY2lwbGluZVwmIzM0Oyk7XG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzIyOk1PRFVMRV9BVVRIT1IoXCYjMzQ7RGF2ZSBUYWh0XCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjM6TU9EVUxFX0FVVEhPUihcJiMzNDtFcmljIER1bWF6ZXRcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjMyNDpNT0RVTEVfTElDRU5TRShcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIGBzY2hfZnFfY29kZWwuY2AgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgRlEtQ29EZWwgc2NoZWR1bGVyIGltcGxlbWVudGF0aW9uLiBXZSYjMzk7dmUgY292ZXJlZCB0aGUgYmFzaWNzLCBidXQgaXQmIzM5O3MgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHNpZ25pZmljYW50LiBUbyBnZXQgYSByZWFsbHkgc29saWQgZ3Jhc3Agb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZm9jdXMgc3BlY2lmaWNhbGx5IG9uIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIGBzY2hfZnFfY29kZWwuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2UgdGhlcmUgdGhhdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxlciYjMzk7cyBiZWhhdmlvciB1bmRlciB2YXJpb3VzIGxvYWQgY29uZGl0aW9ucywgZXNwZWNpYWxseSB0aGUgZWRnZSBjYXNlcy4gR290dGEgZW5zdXJlIEkmIzM5O20gZ2V0dGluZyBhIGhvbGlzdGljIHZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0aGF0IEkmIzM5O20gZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOy4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz01MD1zdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSB7XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY5LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjcwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfaGFzaChjb25zdCBzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03MS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY6c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03Ny1cdFx0XHRcdCAgICAgIGludCAqcWVycilcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTE1LS8qIHJlbW92ZSBvbmUgc2tiIGZyb20gaGVhZCBvZiBzbG90IHF1ZXVlICovXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MTE2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfaGVhZChzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdylcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMTcte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMjUtLyogYWRkIHNrYiB0byBmbG93IHF1ZXVlICh0YWlsIGFkZCkgKi9cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxMjY6c3RhdGljIGlubGluZSB2b2lkIGZsb3dfcXVldWVfYWRkKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93LFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTEyNy1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTM2LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjEzNzpzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGludCBtYXhfcGFja2V0cyxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMzgtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTg0LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjE4NTpzdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTg2LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1Ni0gKi9cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNTc6c3RhdGljIHN0cnVjdCBza19idWZmICpkZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsIHZvaWQgKmN0eClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTgte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNzUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjc2OnN0YXRpYyB2b2lkIGRyb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjc3LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjgzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI4NDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjMtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzI0OnN0YXRpYyB2b2lkIGZxX2NvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzM2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzcte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDYtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzQ3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDgte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjYtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzY3OnN0YXRpYyB2b2lkIGZxX2NvZGVsX2Zsb3dfcHVyZ2Uoc3RydWN0IGZxX2NvZGVsX2Zsb3cgKmZsb3cpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzY4LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzcyLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM3MzpzdGF0aWMgdm9pZCBmcV9jb2RlbF9yZXNldChzdHJ1Y3QgUWRpc2MgKnNjaClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNzQte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX2NvZGVsX3BvbGljeVtUQ0FfRlFfQ09ERUxfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy00MDQtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NDA1OnN0YXRpYyBpbnQgZnFfY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA2LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDk4LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjQ5OTpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwMC17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwNy1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1MDg6c3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNTA5LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTU3My1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo1NzQ6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTU3NS17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTYyMC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2MjE6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTYyMi17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY0OC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2NDk6c3RhdGljIHN0cnVjdCBRZGlzYyAqZnFfY29kZWxfbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjUwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjUzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY1NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBmcV9jb2RlbF9maW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTgtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZxX2NvZGVsX2JpbmQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY2MC1cdFx0XHQgICAgICB1MzIgY2xhc3NpZClcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjY0LVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY2NTpzdGF0aWMgdm9pZCBmcV9jb2RlbF91bmJpbmQoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBsb25nIGNsKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY2Ni17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY2OC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2Njk6c3RhdGljIHN0cnVjdCB0Y2ZfYmxvY2sgKmZxX2NvZGVsX3RjZl9ibG9jayhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NzAtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY3OC1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2Nzk6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY4MC1cdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02ODUtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Njg2OnN0YXRpYyBpbnQgZnFfY29kZWxfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02ODctXHRcdFx0XHQgICAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpXG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTczMi1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3MzM6c3RhdGljIHZvaWQgZnFfY29kZWxfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqYXJnKVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTczNC17XG4tLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzc2LX07XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzc3Ok1PRFVMRV9BTElBU19ORVRfU0NIKFwmIzM0O2ZxX2NvZGVsXCYjMzQ7KTtcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NzgtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzc5OnN0YXRpYyBpbnQgX19pbml0IGZxX2NvZGVsX21vZHVsZV9pbml0KHZvaWQpXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzgwLXtcbi0tXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzgzLVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc4NDpzdGF0aWMgdm9pZCBfX2V4aXQgZnFfY29kZWxfbW9kdWxlX2V4aXQodm9pZClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03ODUte1xuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03ODgtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzg5Om1vZHVsZV9pbml0KGZxX2NvZGVsX21vZHVsZV9pbml0KVxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MDptb2R1bGVfZXhpdChmcV9jb2RlbF9tb2R1bGVfZXhpdClcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3OTE6TU9EVUxFX0FVVEhPUihcJiMzNDtFcmljIER1bWF6ZXRcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MjpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MzpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RmFpciBRdWV1ZSBDb0RlbCBkaXNjaXBsaW5lXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NzIKCQkJCQkJCW91dHB1dDogMjYwCgkJCQkJCQl0aG91Z2h0czogNzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvRGVsIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB0aGlzIENvRGVsIHBhdGNoIHRvdWNoZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBzcGVjaWZpY2FsbHkgYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhbGwgcG9pbnRzLiBJbiB0aGUgYHNjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYCBmaWxlcywgdGhlIHBhdGNoIGltcGFjdHMgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgY29kZWxfcGVla2AsIGBfX2NvZGVsX3FkaXNjX2RlcXVldWVgLCBgZnFfY29kZWxfZGVxdWV1ZWAsIGBmcV9jb2RlbF9wZWVrYCwgYF9fZnFfY29kZWxfZGVxdWV1ZWAsIGBjb2RlbF9jaGFuZ2VgLCBhbmQgYGZxX2NvZGVsX2NoYW5nZWAuIFdlIGFsc28gbmVlZCB0byBjb25zaWRlciBgZnFfdGluX2RlcXVldWVfZnVuY2AgaW4gYG5ldC9tYWM4MDIxMS90eC5jYC4KCk5leHQsIEkgbmVlZCB0byBjcmVhdGUgYSBsaXN0IG9mIHRoZSBgRm9jdXNTeW1ib2xzYC4gRXZlbiBpZiBgY29kZWxfZGVxdWV1ZWAgaXMgaW5saW5lICh3aGljaCBpdCB1c3VhbGx5IGlzIGluIGhlYWRlcnMpLCBpdCBtaWdodCBub3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIGFuZCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGNhbGxlcnMsIHNvIEkgc2hvdWxkIGxpc3QgdGhlbSBhbGw6IGBjb2RlbF9xZGlzY19kZXF1ZXVlYCwgYGNvZGVsX3BlZWtgLCBgZnFfY29kZWxfZGVxdWV1ZWAsIGBmcV9jb2RlbF9wZWVrYCwgYGNvZGVsX2NoYW5nZWAsIGBmcV9jb2RlbF9jaGFuZ2VgLCBhbmQgYGZxX3Rpbl9kZXF1ZXVlX2Z1bmNgLgoKTm93IGxldCYjMzk7cyBjaGVjayB0aGUgcmVsZXZhbnQgYEVuYWJsZUNvbmZpZ3NgLiBXZSYjMzk7dmUgZ290IGBORVRfU0NIX0NPREVMYCwgYE5FVF9TQ0hfRlFfQ09ERUxgLCBgTkVUX1NDSEVEYCwgYW5kIGBNQUM4MDIxMWAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYW55IG90aGVyIEtjb25maWdzIGFyZSByZXF1aXJlZC4gSXQgbG9va3MgbGlrZSBgTkVUX1NDSEVEYCBlbmFibGVzIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLCBhbmQgYE1BQzgwMjExYCBkZXBlbmRzIG9uIGBDRkc4MDIxMWAsIGBORVRERVZJQ0VTYCwgYW5kIGBXTEFOYC4KClNvLCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IG1vZGlmaWVzIHRoZSBDb0RlbCBBUU0gYWxnb3JpdGhtIHdoaWNoIGhhbmRsZXMgcXVldWUgbWFuYWdlbWVudC4gSXQgdGFja2xlcyBzdGFsbHMgYW5kIGluZmluaXRlIGRyb3AgbG9vcHMgYnkgbGltaXRpbmcgdGhlIGNvbnRyb2wgbGF3IHRpbWUgaW5jcmVtZW50IGFuZCBjYXBwaW5nIGNvbnNlY3V0aXZlIHBhY2tldCBkcm9wcyBpbiBgY29kZWxfZGVxdWV1ZWAgd2l0aCBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFID0gMjU2YCBhbmQgcmVzeW5jaW5nIGBkcm9wX25leHRgIHdoZW4gaXQgaXMgZXhjZWVkZWQuIFRoaXMgY29kZSBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBRb1MgYW5kIHBhY2tldCBzY2hlZHVsaW5nLCBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYHRjL3J0bmV0bGlua2AgdXNpbmcgYGNvZGVsYCBvciBgZnFfY29kZWxgIHFkaXNjcywgb3IgYnkgdGhlIGBtYWM4MDIxMWAgdHggcXVldWVzLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHdlbGwtZm9ybWF0dGVkIGFuZCBhY2N1cmF0ZS4gVGhpcyBjb3ZlcnMgdGhlIGZ1bmN0aW9ucywgdGhlIGNvbmZpZ3MsIGFuZCB0aGUgcmVhc29uaW5nIGZvciB3aHkgdGhpcyBpcyB3b3J0aCBvdXIgYXR0ZW50aW9uLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBnb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9GUV9DT0RFTCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGVsX3FkaXNjX2RlcXVldWUmIzM0OywKICAgICYjMzQ7Y29kZWxfcGVlayYjMzQ7LAogICAgJiMzNDtjb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9wZWVrJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmcV90aW5fZGVxdWV1ZV9mdW5jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKSBpbXBsZW1lbnRhdGlvbiBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggKGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlKS4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyB0aW1lIHN0ZXAgdG8gYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgc3RhbGxzIG9uIHNtYWxsIGludGVydmFscyBvciBsYXJnZSBkcm9wIGNvdW50cywgYW5kIGludHJvZHVjZXMgYSBjYXAgb24gY29uc2VjdXRpdmUgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgZHJvcCBsb29wcyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWZmaWMgY29udHJvbCAoc2NoX2NvZGVsLCBzY2hfZnFfY29kZWwpIGFuZCBtYWM4MDIxMSB3aXJlbGVzcyBxdWV1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RlbF9xZGlzY19kZXF1ZXVlJiMzNDssCiAgICAmIzM0O2NvZGVsX3BlZWsmIzM0OywKICAgICYjMzQ7Y29kZWxfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZxX2NvZGVsX2RlcXVldWUmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfcGVlayYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZnFfdGluX2RlcXVldWVfZnVuYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKEFRTSkgaW1wbGVtZW50YXRpb24gaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIChjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSkuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgdGltZSBzdGVwIHRvIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IHN0YWxscyBvbiBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgZHJvcCBjb3VudHMsIGFuZCBpbnRyb2R1Y2VzIGEgY2FwIG9uIGNvbnNlY3V0aXZlIGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGRyb3AgbG9vcHMgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgc2NoZWR1bGluZyBsb2dpYyBhbmQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0cmFmZmljIGNvbnRyb2wgKHNjaF9jb2RlbCwgc2NoX2ZxX2NvZGVsKSBhbmQgbWFjODAyMTEgd2lyZWxlc3MgcXVldWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxuXG5UaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCAoYGRyb3BzYCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGggY29tcHV0YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU0NmFmYzI2MmJkYjI0Y2Q1OWYyZGE4ZGUzOTAzMDQ1ZGFhYzYwZTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjI3OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmgKaW5kZXggYWE4MGY3NDQ4MjZjZC4uMTgzZDQzYzJiZDQzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbC5oCkBAIC0xNDAsNiAmIzQzOzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7CiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovCiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUykKIAomIzQzOy8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJiMzOTtzIHdvcmsgZGVwZW5kcyBvbiB0aGUKJiM0MzsgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTYKJiM0MzsKIC8qKgogICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHMKICAqIEBtYXhwYWNrZXQ6CWxhcmdlc3QgcGFja2V0IHdlJiMzOTt2ZSBzZWVuIHNvIGZhcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oCmluZGV4IDJjMWYwZWMzMDllOWYuLjllNzc5Y2Q0ZDZkZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgKQEAgLTkzLDEyICYjNDM7OTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpCiAgKiBDb0RlbCBjb250cm9sX2xhdyBpcyB0ICYjNDM7IGludGVydmFsL3NxcnQoY291bnQpCiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWQKICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYQomIzQzOyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuCiAgKi8KIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsCiAJCQkJICAgICAgY29kZWxfdGltZV90IGludGVydmFsLAogCQkJCSAgICAgIHUzMiByZWNfaW52X3NxcnQpCiB7Ci0JcmV0dXJuIHQgJiM0MzsgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCk7CiYjNDM7CXJldHVybiB0ICYjNDM7IG1heF90KHUzMiwgMSwKJiM0MzsJCQkgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCwKJiM0MzsJCQkJCSAgcmVjX2ludl9zcXJ0ICZsdDsmbHQ7IFJFQ19JTlZfU1FSVF9TSElGVCkpOwogfQogCiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU2LDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LAogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXF1ZXVlX2Z1bmModmFycywgY3R4KTsKIAljb2RlbF90aW1lX3Qgbm93OwogCWJvb2wgZHJvcDsKJiM0MzsJdW5zaWduZWQgaW50IGRyb3BzID0gMDsKIAogCWlmICghc2tiKSB7CiAJCXZhcnMtJmd0O2ZpcnN0X2Fib3ZlX3RpbWUgPSAwOwpAQCAtMTgwLDYgJiM0MzsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCwKIAkJCSAqLwogCQkJd2hpbGUgKHZhcnMtJmd0O2Ryb3BwaW5nICZhbXA7JmFtcDsKIAkJCSAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy0mZ3Q7ZHJvcF9uZXh0KSkgewomIzQzOwkJCQlpZiAoJiM0MzsmIzQzO2Ryb3BzICZndDsgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7CiYjNDM7CQkJCQkvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovCiYjNDM7CQkJCQlXUklURV9PTkNFKHZhcnMtJmd0O2Ryb3BfbmV4dCwKJiM0MzsJCQkJCQkgICBjb2RlbF9jb250cm9sX2xhdyhub3csCiYjNDM7CQkJCQkJCQkgICAgIHBhcmFtcy0mZ3Q7aW50ZXJ2YWwsCiYjNDM7CQkJCQkJCQkgICAgIHZhcnMtJmd0O3JlY19pbnZfc3FydCkpOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KIAkJCQkvKiBkb250IGNhcmUgb2YgcG9zc2libGUgd3JhcAogCQkJCSAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24KaW5kZXggNmQ1MTVkMGU1ZWQ2OS4uYTg5NGU2ZjBlMjY3NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbgomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uCkBAIC0yMTMsNSAmIzQzOzIxMyw3NyBAQAogICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAogICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiAgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzZlNDQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZCkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YThjMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Y29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDthNjk1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OTc5MyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7Q3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtjb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3FkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldJiM0MzsgbGltaXQgMTAwMHAgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KICAgICB9CiBdCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbgppbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24KQEAgLTMxNiw1ICYjNDM7MzE2LDc3IEBACiAgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxcCBmbG93cyAxMDI0IHF1YW50dW0uKnRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKICAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDsxYjRkJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszNTQwJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtmcV9jb2RlbCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogW10sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDswJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7cWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0mIzQzOyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldJiM0MzsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWyYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDtdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDs0OWM1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWQmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7cWRpc2MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2ZxX2NvZGVsJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QmIzM0O10KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzNlMGYmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0NyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7ZnFfY29kZWwmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFtdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1cyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDtxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSYjNDM7IGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0mIzQzOyB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7XQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDT0RFTCBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHJlcXVpcmluZyBLTVNBTiBmdXp6aW5nLiBJJiMzOTtsbCBicmVhayB0aGlzIGRvd24uCgpGaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJldm9sdmUgYXJvdW5kIHRoZSBDT0RFTCBxdWV1aW5nIGRpc2NpcGxpbmUsIHNwZWNpZmljYWxseSB3aXRoaW4gYGluY2x1ZGUvbmV0L2NvZGVsLmhgIGFuZCBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC4gTGluZSAxIGRlZmluZXMgYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAgYXMgMjU2LCBzbyBub3RoaW5nIHRvIHNlZSB0aGVyZS4KCk1vdmluZyBpbnRvIGBjb2RlbF9pbXBsLmhgLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXRzIHN0YXJ0IHRvIGFwcGVhci4gSW4gYGNvZGVsX2NvbnRyb2xfbGF3YCwgdGhlIGNsYW1wIG9uIHRoZSBpbmNyZW1lbnQgbG9va3MgZmluZSDigJMgaXQmIzM5O3MgZXhwbGljaXRseSBlbnN1cmluZyB0aGUgcmV0dXJuIHZhbHVlIGlzIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gYGNvZGVsX2RlcXVldWVgLiBJIG5vdGljZSB0aGUgYWRkaXRpb24gb2YgYHVuc2lnbmVkIGludCBkcm9wcyA9IDA7YC4gQWgsIGl0JiMzOTtzICppbml0aWFsaXplZCohIFRoYXQmIzM5O3MgZXhjZWxsZW50OyB0aGlzIGlzIGdvb2QgcHJhY3RpY2UgYW5kIGxpa2VseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGBkcm9wc2AgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgaW4gYSB3aGlsZSBsb29wIGFuZCB0aGVuIGNoZWNrZWQgYWdhaW5zdCB0aGF0IGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBJZiBpdCBleGNlZWRzIHRoZSBtYXhpbXVtLCB0aGUgY29udHJvbCBsYXcgaXMgYXBwbGllZCBhbmQgYGJyZWFrO2AgaXMgaW52b2tlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwcm9wZXJseSBwcmV2ZW50aW5nIGFuIGluZmluaXRlIGxvb3AgYW5kIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgZHJvcHMuCgpUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgcmVhbGx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIGFyZWFzIGFyb3VuZCBsaW5lcyA5MC0yMDAgb2YgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgd2hlcmUgYGNvZGVsX2RlcXVldWVgIGFuZCBgY29kZWxfY29udHJvbF9sYXdgIGFyZSBsaWtlbHkgZGVmaW5lZCB0byBjb25maXJtIHRoZXNlIGFzc3VtcHRpb25zIGFuZCBob3cgdGhlIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhlIHNlbGYtdGVzdCB1cGRhdGVzIGFyZSBwcm9iYWJseSBqdXN0IGFkZGVkIGZvciB0aGUgc2FrZSBvZiBjb21wbGV0ZW5lc3MuCgpPbiBpbml0aWFsIGdsYW5jZSwgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBpbW1lZGlhdGUsIGdsYXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaGlzIGxvb2tzIHByZXR0eSBzb2xpZC4gSG93ZXZlciwgSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGZ1bGwgY29uZmlybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0XG4gIDg2Olx0XHR2YWwgXHUwMDNlXHUwMDNlPSAyOyAvKiBhdm9pZCBvdmVyZmxvdyBpbiBmb2xsb3dpbmcgbXVsdGlwbHkgKi9cbiAgODc6XHRcdHZhbCA9ICh2YWwgKiBpbnZzcXJ0KSBcdTAwM2VcdTAwM2UgKDMyIC0gMiAmIzQzOyAxKTtcbiAgODg6XHRcbiAgODk6XHRcdHZhcnMtXHUwMDNlcmVjX2ludl9zcXJ0ID0gdmFsIFx1MDAzZVx1MDAzZSBSRUNfSU5WX1NRUlRfU0hJRlQ7XG4gIDkwOlx0fVxuICA5MTpcdFxuICA5MjpcdC8qXG4gIDkzOlx0ICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCAmIzQzOyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICA5NDpcdCAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICA5NTpcdCAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuICA5ODpcdCAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gIDk5Olx0ICovXG4gMTAwOlx0c3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiAxMDE6XHRcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiAxMDI6XHRcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4gMTAzOlx0e1xuIDEwNDpcdFx0cmV0dXJuIHQgJiM0MzsgbWF4X3QodTMyLCAxLFxuIDEwNTpcdFx0XHRcdCByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLFxuIDEwNjpcdFx0XHRcdFx0XHQgIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKSk7XG4gMTA3Olx0fVxuIDEwODpcdFxuIDEwOTpcdHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMTEwOlx0XHRcdFx0ICAgICAgdm9pZCAqY3R4LFxuIDExMTpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDExMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcbiAxMTM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDExNDpcdFx0XHRcdCAgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXG4gMTE1Olx0XHRcdFx0ICAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxuIDExNjpcdFx0XHRcdCAgICAgIHUzMiAqYmFja2xvZyxcbiAxMTc6XHRcdFx0XHQgICAgICBjb2RlbF90aW1lX3Qgbm93KVxuIDExODpcdHtcbiAxMTk6XHRcdGJvb2wgb2tfdG9fZHJvcDtcbiAxMjA6XHRcdHUzMiBza2JfbGVuO1xuIDEyMTpcdFxuIDEyMjpcdFx0aWYgKCFza2IpIHtcbiAxMjM6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcbiAxMjQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNTpcdFx0fVxuIDEyNjpcdFxuIDEyNzpcdFx0c2tiX2xlbiA9IHNrYl9sZW5fZnVuYyhza2IpO1xuIDEyODpcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWxkZWxheSwgbm93IC0gc2tiX3RpbWVfZnVuYyhza2IpKTtcbiAxMjk6XHRcbiAxMzA6XHRcdGlmICh1bmxpa2VseShza2JfbGVuIFx1MDAzZSBzdGF0cy1cdTAwM2VtYXhwYWNrZXQpKVxuIDEzMTpcdFx0XHRXUklURV9PTkNFKHN0YXRzLVx1MDAzZW1heHBhY2tldCwgc2tiX2xlbik7XG4gMTMyOlx0XG4gMTMzOlx0XHRpZiAoY29kZWxfdGltZV9iZWZvcmUodmFycy1cdTAwM2VsZGVsYXksIHBhcmFtcy1cdTAwM2V0YXJnZXQpIHx8XG4gMTM0Olx0XHQgICAgKmJhY2tsb2cgXHUwMDNjPSBwYXJhbXMtXHUwMDNlbXR1KSB7XG4gMTM1Olx0XHRcdC8qIHdlbnQgYmVsb3cgLSBzdGF5IGJlbG93IGZvciBhdCBsZWFzdCBpbnRlcnZhbCAqL1xuIDEzNjpcdFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuIDEzNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTM4Olx0XHR9XG4gMTM5Olx0XHRva190b19kcm9wID0gZmFsc2U7XG4gMTQwOlx0XHRpZiAodmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID09IDApIHtcbiAxNDE6XHRcdFx0LyoganVzdCB3ZW50IGFib3ZlIGZyb20gYmVsb3cuIElmIHdlIHN0YXkgYWJvdmVcbiAxNDI6XHRcdFx0ICogZm9yIGF0IGxlYXN0IGludGVydmFsIHdlJiMzOTtsbCBzYXkgaXQmIzM5O3Mgb2sgdG8gZHJvcFxuIDE0MzpcdFx0XHQgKi9cbiAxNDQ6XHRcdFx0dmFycy1cdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gbm93ICYjNDM7IHBhcmFtcy1cdTAwM2VpbnRlcnZhbDtcbiAxNDU6XHRcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcbiAxNDY6XHRcdFx0b2tfdG9fZHJvcCA9IHRydWU7XG4gMTQ3Olx0XHR9XG4gMTQ4Olx0XHRyZXR1cm4gb2tfdG9fZHJvcDtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiAxNTI6XHRcdFx0XHRcdCAgICAgdTMyICpiYWNrbG9nLFxuIDE1MzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXG4gMTU0Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxuIDE1NTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxuIDE1NjpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfbGVuX3Qgc2tiX2xlbl9mdW5jLFxuIDE1NzpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgIGNvZGVsX3NrYl9kcm9wX3QgZHJvcF9mdW5jLFxuIDE1OTpcdFx0XHRcdFx0ICAgICBjb2RlbF9za2JfZGVxdWV1ZV90IGRlcXVldWVfZnVuYylcbiAxNjA6XHR7XG4gMTYxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gMTYyOlx0XHRjb2RlbF90aW1lX3Qgbm93O1xuIDE2MzpcdFx0Ym9vbCBkcm9wO1xuIDE2NDpcdFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiAxNjU6XHRcbiAxNjY6XHRcdGlmICghc2tiKSB7XG4gMTY3Olx0XHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG4gMTY4Olx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xuIDE2OTpcdFx0XHRyZXR1cm4gc2tiO1xuIDE3MDpcdFx0fVxuIDE3MTpcdFx0bm93ID0gY29kZWxfZ2V0X3RpbWUoKTtcbiAxNzI6XHRcdGRyb3AgPSBjb2RlbF9zaG91bGRfZHJvcChza2IsIGN0eCwgdmFycywgcGFyYW1zLCBzdGF0cyxcbiAxNzM6XHRcdFx0XHRcdCBza2JfbGVuX2Z1bmMsIHNrYl90aW1lX2Z1bmMsIGJhY2tsb2csIG5vdyk7XG4gMTc0Olx0XHRpZiAodmFycy1cdTAwM2Vkcm9wcGluZykge1xuIDE3NTpcdFx0XHRpZiAoIWRyb3ApIHtcbiAxNzY6XHRcdFx0XHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cbiAxNzc6XHRcdFx0XHRXUklURV9PTkNFKHZhcnMtXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcbiAxNzg6XHRcdFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4gMTc5Olx0XHRcdFx0LyogSXQmIzM5O3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxuIDE4MDpcdFx0XHRcdCAqIHBhY2tldCBhbmQgZGVxdWV1ZSB0aGUgbmV4dC4gVGhlIGRlcXVldWUgbWlnaHRcbiAxODE6XHRcdFx0XHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cbiAxODI6XHRcdFx0XHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXG4gMTgzOlx0XHRcdFx0ICogQSBsYXJnZSBiYWNrbG9nIG1pZ2h0IHJlc3VsdCBpbiBkcm9wIHJhdGVzIHNvIGhpZ2hcbiAxODQ6XHRcdFx0XHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODgKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29EZWwgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgdGhlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIFRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MganVzdCBpbnRlZ2VyIG1hdGggd2l0aCBjbGFtcGluZywgbm90aGluZyBpbmhlcmVudGx5IGRhbmdlcm91cyB0aGVyZS4gVGhlIGBjb2RlbF9kZXF1ZXVlYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBXZSYjMzk7cmUgaW5pdGlhbGl6aW5nIGBkcm9wc2AgdG8gemVybyBhbmQgdGhlbiBpbmNyZW1lbnRpbmcgaXQgd2l0aGluIGEgYHdoaWxlYCBsb29wLiBUaGUga2V5IGlzIHRoYXQgd2UmIzM5O3JlIGFkZGluZyBhIHNhZmV0eSBjaGVjazogYCYjNDM7JiM0Mztkcm9wcyAmZ3Q7IENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAuIElmIHRoYXQgbGltaXQgaXMgZXhjZWVkZWQsIHdlIGNhbGN1bGF0ZSBgdmFycy0mZ3Q7ZHJvcF9uZXh0YCB1c2luZyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYXJlIHdlIGludHJvZHVjaW5nIGFueSBuZXcgS01TQU4gaXNzdWVzPyBJJiMzOTttIGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhLCBtZW50YWxseSB0aWNraW5nIG9mZiBlYWNoIHBvaW50LgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSB3ZSYjMzk7cmUgdG91Y2hpbmcgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gVGhlIGxvZ2ljIGlzIG5vdyBiYXNlZCBvbiBhIGBkcm9wc2AgY291bnRlciwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQuIE5vIHJlbGlhbmNlIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIGJlIHJlYWQ/IE5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IEkgY2FuIHNlZS4gV2UmIzM5O3JlIG1vZGlmeWluZyBleGlzdGluZyBxdWV1ZSBtYW5hZ2VtZW50Lgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzPyBUaGUgY2hhbmdlIGlzIGEgbG9vcCBpdGVyYXRpb24gY2FwLCB3aGljaCBhZGRyZXNzZXMgdmVyeSBzbWFsbCBpbnRlcnZhbHMuIFRoaXMgYXZvaWRzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEuCgpUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGEgc2FmZXR5IG1lY2hhbmlzbTogYWRkcmVzc2luZyBhIHBvdGVudGlhbCBzb2Z0IGxvY2t1cCBpc3N1ZSBpbiBDb0RlbCBjYXVzZWQgYnkgZXh0cmVtZSBiYWNrbG9nIG9yIHNtYWxsIGludGVydmFscy4gSXQgbW9kaWZpZXMgdGhlIHNjaGVkdWxpbmcvZHJvcHBpbmcgbG9naWMgYnkgY2FwcGluZyBpdGVyYXRpb25zIGluIHRoZSBDb0RlbCBsb29wLiBUaGVyZWZvcmUsIGdpdmVuIHRoZSBhYnNlbmNlIG9mIGFueSBvZiB0aGUgS01TQU4tdHJpZ2dlcmluZyBjb25kaXRpb25zIEkgYW0gZmFtaWxpYXIgd2l0aCwgSSBhbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgcXVldWUgZGlzY2lwbGluZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhbGx5IGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCkgdG8gcHJldmVudCBpbmZpbml0ZSBkcm9wcGluZyBsb29wcy9zb2Z0IGxvY2t1cHMgY2F1c2VkIGJ5IHNtYWxsIGludGVydmFscyBvciBsYXJnZSBiYWNrbG9ncy4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24uXG5cblRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIChgZHJvcHNgKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aCBjb21wdXRhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxuXG5UaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCAoYGRyb3BzYCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGggY29tcHV0YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MTUuMzYzNjQ3ODIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyODcxMTk4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGVsX3FkaXNjX2RlcXVldWVcIixcbiAgICBcImNvZGVsX3BlZWtcIixcbiAgICBcImNvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfY29kZWxfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY29kZWxfcGVla1wiLFxuICAgIFwiZnFfY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV90aW5fZGVxdWV1ZV9mdW5jXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgcXVldWUgZGlzY2lwbGluZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhbGx5IGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCkgdG8gcHJldmVudCBpbmZpbml0ZSBkcm9wcGluZyBsb29wcy9zb2Z0IGxvY2t1cHMgY2F1c2VkIGJ5IHNtYWxsIGludGVydmFscyBvciBsYXJnZSBiYWNrbG9ncy4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrIGFuZCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkcm9wcyBwZXIgZGVxdWV1ZSBpdGVyYXRpb24uXFxuXFxuVGhlIG9ubHkgbmV3IGxvY2FsIHZhcmlhYmxlIGludHJvZHVjZWQgKGBkcm9wc2ApIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoIGNvbXB1dGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIEFjdGl2ZSBRdWV1ZSBNYW5hZ2VtZW50IChBUU0pIGltcGxlbWVudGF0aW9uIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCAoY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUpLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IHRpbWUgc3RlcCB0byBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBzdGFsbHMgb24gc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGRyb3AgY291bnRzLCBhbmQgaW50cm9kdWNlcyBhIGNhcCBvbiBjb25zZWN1dGl2ZSBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBkcm9wIGxvb3BzIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgbG9naWMgYW5kIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdHJhZmZpYyBjb250cm9sIChzY2hfY29kZWwsIHNjaF9mcV9jb2RlbCkgYW5kIG1hYzgwMjExIHdpcmVsZXNzIHF1ZXVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MTUuMzYzNjUyOTUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY3NTY4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NDZhZmMyNjJiZGIyNGNkNTlmMmRhOGRlMzkwMzA0NWRhYWM2MGU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDU6Mjc6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbC5oXFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xcbiAvKiBuZWVkZWQgc2hpZnQgdG8gZ2V0IGEgUTAuMzIgbnVtYmVyIGZyb20gcmVjX2ludl9zcXJ0ICovXFxuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxcbiBcXG4rLyogQ2FwIG9uIGRyb3BzIHBlciBjb2RlbF9kZXF1ZXVlKCkgY2FsbDogdGhlIGxvb3AncyB3b3JrIGRlcGVuZHMgb24gdGhlXFxuKyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxcbisgKi9cXG4rI2RlZmluZSBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2XFxuK1xcbiAvKipcXG4gICogc3RydWN0IGNvZGVsX3N0YXRzIC0gY29udGFpbnMgY29kZWwgc2hhcmVkIHZhcmlhYmxlcyBhbmQgc3RhdHNcXG4gICogQG1heHBhY2tldDpcXHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcXG5pbmRleCAyYzFmMGVjMzA5ZTlmLi45ZTc3OWNkNGQ2ZGViIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxcbkBAIC05MywxMiArOTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpXFxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxcbiAgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXFxuKyAqXFxuKyAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcXG4rICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cXG4gICovXFxuIHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcXG4ge1xcbi1cXHRyZXR1cm4gdCArIHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsIHJlY19pbnZfc3FydCBcXHUwMDNjXFx1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpO1xcbitcXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcXG4rXFx0XFx0XFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcmVjX2ludl9zcXJ0IFxcdTAwM2NcXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbkBAIC0xNTYsNiArMTYxLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xcbiBcXHRjb2RlbF90aW1lX3Qgbm93O1xcbiBcXHRib29sIGRyb3A7XFxuK1xcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIFxcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG5AQCAtMTgwLDYgKzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0d2hpbGUgKHZhcnMtXFx1MDAzZWRyb3BwaW5nIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cXHUwMDNlZHJvcF9uZXh0KSkge1xcbitcXHRcXHRcXHRcXHRpZiAoKytkcm9wcyBcXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xcbitcXHRcXHRcXHRcXHRcXHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXFxuK1xcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcF9uZXh0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGFyYW1zLVxcdTAwM2VpbnRlcnZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2YXJzLVxcdTAwM2VyZWNfaW52X3NxcnQpKTtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcXG4gXFx0XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSBkaXZpZGUuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxcbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cXG5AQCAtMjEzLDUgKzIxMyw3NyBAQFxcbiAgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXNcXFwiLFxcbiAgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbiAgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiNmU0NFxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMXVzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1xcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiYThjM1xcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgM3VzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDJ1c1xcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiYTY5NVxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiQ3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJjb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCI5NzkzXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImNvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIHRhcmdldCAxdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4gICAgIH1cXG4gXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxcbmluZGV4IDRjZTYyYjg1N2ZkN2EuLmRlNmExYjhkOTU0YWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cXG5AQCAtMzE2LDUgKzMxNiw3NyBAQFxcbiAgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIGZsb3dzIDEwMjQgcXVhbnR1bS4qdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuICAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIxYjRkXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJmcV9jb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIzNTQwXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJxZGlzY1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCJmcV9jb2RlbFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAzdXNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFxcXCJdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCI0OWM1XFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcInFkaXNjXFxcIixcXG4rICAgICAgICAgICAgXFxcImZxX2NvZGVsXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIl1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcIjNlMGZcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiZnFfY29kZWxcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW10sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1xcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoUGF0dGVyblxcXCI6IFxcXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcXFwiXVxcbiAgICAgfVxcbiBdXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjE1Ljk5MTI0MDA0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzIwNDQzNjY4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGVsX3FkaXNjX2RlcXVldWVcIixcbiAgICBcImNvZGVsX3BlZWtcIixcbiAgICBcImNvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfY29kZWxfZGVxdWV1ZVwiLFxuICAgIFwiZnFfY29kZWxfcGVla1wiLFxuICAgIFwiZnFfY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV90aW5fZGVxdWV1ZV9mdW5jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIEFjdGl2ZSBRdWV1ZSBNYW5hZ2VtZW50IChBUU0pIGltcGxlbWVudGF0aW9uIGluIGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCAoY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUpLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IHRpbWUgc3RlcCB0byBhdCBsZWFzdCAxIHRpY2sgdG8gcHJldmVudCBzdGFsbHMgb24gc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGRyb3AgY291bnRzLCBhbmQgaW50cm9kdWNlcyBhIGNhcCBvbiBjb25zZWN1dGl2ZSBkcm9wcyBwZXIgZGVxdWV1ZSAoQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBkcm9wIGxvb3BzIHdoZW4gZmFsbGluZyBiZWhpbmQgc2NoZWR1bGUuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIHNjaGVkdWxpbmcgbG9naWMgYW5kIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdHJhZmZpYyBjb250cm9sIChzY2hfY29kZWwsIHNjaF9mcV9jb2RlbCkgYW5kIG1hYzgwMjExIHdpcmVsZXNzIHF1ZXVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NDZhZmMyNjJiZGIyNGNkNTlmMmRhOGRlMzkwMzA0NWRhYWM2MGU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNToyNzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsLmggYi9pbmNsdWRlL25ldC9jb2RlbC5oXG5pbmRleCBhYTgwZjc0NDgyNmNkLi4xODNkNDNjMmJkNDM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY29kZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWwuaFxuQEAgLTE0MCw2ICsxNDAsMTEgQEAgc3RydWN0IGNvZGVsX3ZhcnMge1xuIC8qIG5lZWRlZCBzaGlmdCB0byBnZXQgYSBRMC4zMiBudW1iZXIgZnJvbSByZWNfaW52X3NxcnQgKi9cbiAjZGVmaW5lIFJFQ19JTlZfU1FSVF9TSElGVCAoMzIgLSBSRUNfSU5WX1NRUlRfQklUUylcbiBcbisvKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCdzIHdvcmsgZGVwZW5kcyBvbiB0aGVcbisgKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cbisgKi9cbisjZGVmaW5lIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZcbitcbiAvKipcbiAgKiBzdHJ1Y3QgY29kZWxfc3RhdHMgLSBjb250YWlucyBjb2RlbCBzaGFyZWQgdmFyaWFibGVzIGFuZCBzdGF0c1xuICAqIEBtYXhwYWNrZXQ6XHRsYXJnZXN0IHBhY2tldCB3ZSd2ZSBzZWVuIHNvIGZhclxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuaW5kZXggMmMxZjBlYzMwOWU5Zi4uOWU3NzljZDRkNmRlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaFxuKysrIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5AQCAtOTMsMTIgKzkzLDE3IEBAIHN0YXRpYyB2b2lkIGNvZGVsX05ld3Rvbl9zdGVwKHN0cnVjdCBjb2RlbF92YXJzICp2YXJzKVxuICAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxuICAqIFdlIG1haW50YWluIGluIHJlY19pbnZfc3FydCB0aGUgcmVjaXByb2NhbCB2YWx1ZSBvZiBzcXJ0KGNvdW50KSB0byBhdm9pZFxuICAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxuKyAqXG4rICogQ2xhbXAgdGhlIGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2s6IGEgdmVyeSBzbWFsbCBpbnRlcnZhbCAob3IgYVxuKyAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXG4gICovXG4gc3RhdGljIGNvZGVsX3RpbWVfdCBjb2RlbF9jb250cm9sX2xhdyhjb2RlbF90aW1lX3QgdCxcbiBcdFx0XHRcdCAgICAgIGNvZGVsX3RpbWVfdCBpbnRlcnZhbCxcbiBcdFx0XHRcdCAgICAgIHUzMiByZWNfaW52X3NxcnQpXG4ge1xuLVx0cmV0dXJuIHQgKyByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLCByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCk7XG4rXHRyZXR1cm4gdCArIG1heF90KHUzMiwgMSxcbitcdFx0XHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcbitcdFx0XHRcdFx0ICByZWNfaW52X3NxcnQgXHUwMDNjXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE1Niw2ICsxNjEsNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xuIFx0Y29kZWxfdGltZV90IG5vdztcbiBcdGJvb2wgZHJvcDtcbitcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XG4gXG4gXHRpZiAoIXNrYikge1xuIFx0XHR2YXJzLVx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xuQEAgLTE4MCw2ICsxODYsMTQgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlKHZvaWQgKmN0eCxcbiBcdFx0XHQgKi9cbiBcdFx0XHR3aGlsZSAodmFycy1cdTAwM2Vkcm9wcGluZyBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAgY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXHUwMDNlZHJvcF9uZXh0KSkge1xuK1x0XHRcdFx0aWYgKCsrZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xuK1x0XHRcdFx0XHQvKiBmZWxsIGZhciBiZWhpbmQgdGhlIHNjaGVkdWxlICovXG4rXHRcdFx0XHRcdFdSSVRFX09OQ0UodmFycy1cdTAwM2Vkcm9wX25leHQsXG4rXHRcdFx0XHRcdFx0ICAgY29kZWxfY29udHJvbF9sYXcobm93LFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2VpbnRlcnZhbCxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICB2YXJzLVx1MDAzZXJlY19pbnZfc3FydCkpO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbiBcdFx0XHRcdC8qIGRvbnQgY2FyZSBvZiBwb3NzaWJsZSB3cmFwXG4gXHRcdFx0XHQgKiBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRpdmlkZS5cbiBcdFx0XHRcdCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5pbmRleCA2ZDUxNWQwZTVlZDY5Li5hODk0ZTZmMGUyNjc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvblxuQEAgLTIxMyw1ICsyMTMsNzcgQEBcbiAgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMTAwbXNcIixcbiAgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjZlNDRcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDF1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHN1Yi10aWNrLCB1QVBJIGxvY2tlZClcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAwdXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJhOGMzXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAzdXMgaW50ZXJ2YWwsIGFjY2VwdGVkICh0d28gdGlja3MpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAzdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMnVzXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiYTY5NVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMTAyNHVzIGludGVydmFsIGJvdW5kYXJ5IGFjY2VwdGVkXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCBpbnRlcnZhbCAxMDI0dXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCA1bXMgaW50ZXJ2YWwgMS4wMm1zXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiOTc5M1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIHRhcmdldCwgYWNjZXB0ZWQgKHRhcmdldCBub3QgaW4gY29udHJvbCBsYXcpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJjb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBjb2RlbCB0YXJnZXQgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgMHVzIGludGVydmFsIDEwMG1zXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuICAgICB9XG4gXVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5pbmRleCA0Y2U2MmI4NTdmZDdhLi5kZTZhMWI4ZDk1NGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvblxuQEAgLTMxNiw1ICszMTYsNzcgQEBcbiAgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDFwIGZsb3dzIDEwMjQgcXVhbnR1bS4qdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuICAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiMWI0ZFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDB1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjM1NDBcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDN1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI0OWM1XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIGludGVydmFsIDEwMjR1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIzZTBmXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImZxX2NvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGZxX2NvZGVsIHRhcmdldCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXMgbWVtb3J5X2xpbWl0IDMyTWIgZWNuIGRyb3BfYmF0Y2ggNjRcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzoxNS45OTEyNDE5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTExNDQ0MjA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEV2YWx1YXRpb246IENPREVMIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlciwgYW5kIGlmIHNvLCBpZGVudGlmeSB0aGUga2V5IGFyZWFzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgdGhhdCBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIGRvIGEgcXVpY2sgc2FmZXR5IGNoZWNrOyB0aGlzIGlzIGEgc3RhbmRhcmQgc29mdHdhcmUgcXVhbGl0eSBhbmFseXNpcyBvZiBhIExpbnV4IGtlcm5lbCBwYXRjaCwgZm9jdXNpbmcgb24gZGVmZW5zaXZlIG1haW50ZW5hbmNlIGFuZCBxdWFsaXR5IGFzc3VyYW5jZSwgc28gaXQncyBhIGNvbXBsZXRlbHkgc2FmZSBhbmQgbmVjZXNzYXJ5IHRhc2suXG5cbk5vdywgbGV0J3MgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBmb3VyIGZpbGVzOiBgaW5jbHVkZS9uZXQvY29kZWwuaGAsIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBhbmQgdHdvIHRlc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlcyAoYC5qc29uYCkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZ2AgZGlyZWN0b3J5IHJlbGF0ZWQgdG8gYGNvZGVsYCBhbmQgYGZxX2NvZGVsYC5cblxuTG9va2luZyBhdCB0aGUga2VybmVsIGNvZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL25ldC9jb2RlbC5oYCwgdGhlcmUncyBhIG5ldyBtYWNybyBkZWZpbml0aW9uIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUgMjU2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiAgVGhlbiwgaW4gYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAsIEknbSBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9ucy4gTm90YWJseSwgdGhlIGBjb2RlbF9jb250cm9sX2xhd2AgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gdXNlIGByZWNpcHJvY2FsX3NjYWxlYCBjYWxjdWxhdGlvbnMuIFRoZSBgY29kZWxfZGVxdWV1ZWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgY291bnRlciAoYGRyb3BzYCkgYW5kIGEgY2hlY2sgYWdhaW5zdCBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgYXJlYSBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgbWF4aW11bSBkcm9wcyBsaW1pdC4gVGhlcmUncyBhIGB3aGlsZWAgbG9vcCB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgd2hpY2ggaW5jcmVtZW50IHRoZSBgZHJvcHNgIGNvdW50ZXIuXG5cblRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIHdoZXJlIHRvIGZvY3VzIHRoZSBmdXp6aW5nLCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgY29kZWxfZGVxdWV1ZWAgaXMgY2FsbGVkIG9yIHdoZXJlIGBjb2RlbF9pbXBsLmhgIGlzIGluY2x1ZGVkLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZG8gdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBmbG93IGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgdnVsbmVyYWJpbGl0eSB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zLiBJZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgY29kZWxfZGVxdWV1ZWAgYW5kIHRoZSBpbmNsdXNpb24gc2l0ZXMgb2YgYGNvZGVsX2ltcGwuaGAgd2lsbCBiZSBrZXkgaW4gZGV0ZXJtaW5pbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIGtlcm5lbCdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MzEuMTA1Njg3MTMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTQ5OTg1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZWxfaW1wbFxcXFwuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvdHguYy0yNS0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxubmV0L21hYzgwMjExL3R4LmM6MjY6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxubmV0L21hYzgwMjExL3R4LmMtMjctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIxLSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWxfcWRpc2MuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjIzOiNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWxfaW1wbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjMzLjkwMDcwMDA5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDE1OTA5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBDb2RlbCBhbmQgaXRzIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIENvRGVsJ3MgcHJhY3RpY2FsIGFwcGxpY2F0aW9uLCBlc3BlY2lhbGx5IHRoZSBzcGVjaWZpY3Mgb2YgaXRzIHF1ZXVpbmcgYW5kIGRlcXVldWVpbmcgbWVjaGFuaXNtcy4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIG1ldGljdWxvdXNseSByZXZpZXcgdGhlIGNvcmUgY29kZSBpbiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCwgdGhlIEZhaXIgUXVldWluZyB2YXJpYW50IGluIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgLCBhbmQgdGhlIHJlbGV2YW50IHRyYW5zbWlzc2lvbiBhc3BlY3RzIGluIGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZXNlIGZpbGVzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IENvRGVsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIHBhcnRpY3VsYXJseSBpbiBkaWZmZXJlbnQgY29udGV4dHMuXG5cblRvIGV4cGVkaXRlIHRoZSBwcm9jZXNzIGFuZCBwaW5wb2ludCB0aGUgY3JpdGljYWwgc2VjdGlvbnMsIEknbGwgbGV2ZXJhZ2UgYGdyZXBwZXJgIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGUgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGV4YWN0bHkgKndoZXJlKiBhbmQgKmhvdyogQ29EZWwncyBkZXF1ZXVlaW5nIGxvZ2ljIGlzIGJlaW5nIGludm9rZWQgaW4gdGhlIGNvZGUsIHByb3ZpZGluZyBhIGZvY3VzZWQgdmlldyBvZiBpdHMgcHJhY3RpY2FsIGltcGxlbWVudGF0aW9uIGFuZCBvcGVyYXRpb25hbCBmbG93LiBUaGlzIGFwcHJvYWNoIHNob3VsZCBsZXQgbWUgcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGFwcGxpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzUzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6MzYuMTQyMjkzMzk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTQ1MzMwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZWxfZGVxdWV1ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9jb2RlbC5oPTEyOT1zdHJ1Y3QgY29kZWxfdmFycyB7XFxuLS1cXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0Mi1cXG5pbmNsdWRlL25ldC9jb2RlbC5oOjE0MzovKiBDYXAgb24gZHJvcHMgcGVyIGNvZGVsX2RlcXVldWUoKSBjYWxsOiB0aGUgbG9vcCdzIHdvcmsgZGVwZW5kcyBvbiB0aGVcXG5pbmNsdWRlL25ldC9jb2RlbC5oLTE0NC0gKiBpZGxlIGdhcCBhbmQgYmFja2xvZywgYm90aCBvdXRzaWRlIG91ciBjb250cm9sOyByZXN5bmMgd2hlbiBleGNlZWRlZC5cXG4tLVxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaD0xMDk9c3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaC0xNTAtXFxuaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oOjE1MTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbmluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaC0xNTItXFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhY2tsb2csXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz0xMzY4PXN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfc2tiX3RpbWVfZnVuYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMTM3NS1cXG5uZXQvbWFjODAyMTEvdHguYzoxMzc2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZV9mdW5jKHN0cnVjdCBjb2RlbF92YXJzICpjdmFycyxcXG5uZXQvbWFjODAyMTEvdHguYy0xMzc3LVxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqY3R4KVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MTQxMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX3Rpbl9kZXF1ZXVlX2Z1bmMoc3RydWN0IGZxICpmcSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MjktXFxubmV0L21hYzgwMjExL3R4LmM6MTQzMDpcXHRyZXR1cm4gY29kZWxfZGVxdWV1ZSh0eHFpLFxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzEtXFx0XFx0XFx0ICAgICBcXHUwMDI2Zmxvdy1cXHUwMDNlYmFja2xvZyxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTE0MzctXFx0XFx0XFx0ICAgICBjb2RlbF9kcm9wX2Z1bmMsXFxubmV0L21hYzgwMjExL3R4LmM6MTQzODpcXHRcXHRcXHQgICAgIGNvZGVsX2RlcXVldWVfZnVuYyk7XFxubmV0L21hYzgwMjExL3R4LmMtMTQzOS19XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9Mjg9c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM0LVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozNTovKiBUaGlzIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb2RlbF9kZXF1ZXVlKClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzYtICogdG8gZGVxdWV1ZSBhIHBhY2tldCBmcm9tIHF1ZXVlLiBOb3RlOiBiYWNrbG9nIGlzIGhhbmRsZWQgaW5cXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYz01OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy02My1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NjQ6XFx0c2tiID0gY29kZWxfZGVxdWV1ZShzY2gsIFxcdTAwMjZzY2gtXFx1MDAzZXFzdGF0cy5iYWNrbG9nLCBcXHUwMDI2cS1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2cS1cXHUwMDNldmFycyxcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNjUtXFx0XFx0XFx0ICAgIFxcdTAwMjZxLVxcdTAwM2VzdGF0cywgcWRpc2NfcGt0X2xlbiwgY29kZWxfZ2V0X2VucXVldWVfdGltZSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NzM6c3RhdGljIHZvaWQgY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03NC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9ODU9c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTkwLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo5MTpcXHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtOTItXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9OTY9c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTEwOS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTEwOlxcdFxcdGNvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTEtXFx0fVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTE4NT1zdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjUyLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyNTM6LyogVGhpcyBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbGVkIGZyb20gY29kZWxfZGVxdWV1ZSgpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI1NC0gKiB0byBkZXF1ZXVlIGEgcGFja2V0IGZyb20gcXVldWUuIE5vdGU6IGJhY2tsb2cgaXMgaGFuZGxlZCBpblxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTI3Nj1zdGF0aWMgdm9pZCBkcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqY3R4KVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI4My1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjg0OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19mcV9jb2RlbF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yODUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzA2OlxcdHNrYiA9IGNvZGVsX2RlcXVldWUoc2NoLCBcXHUwMDI2c2NoLVxcdTAwM2Vxc3RhdHMuYmFja2xvZywgXFx1MDAyNnEtXFx1MDAzZWNwYXJhbXMsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMwNy1cXHRcXHRcXHQgICAgXFx1MDAyNmZsb3ctXFx1MDAzZWN2YXJzLCBcXHUwMDI2cS1cXHUwMDNlY3N0YXRzLCBxZGlzY19wa3RfbGVuLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMyMy1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzI0OnN0YXRpYyB2b2lkIGZxX2NvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzI1LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMzUtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjMzNjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNy17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM5LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNDA6XFx0c2tiID0gIF9fZnFfY29kZWxfZGVxdWV1ZShzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDEtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0MjpcXHRmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzQzLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTM0Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUxLVxcdGlmICghc2tiKSB7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM1MjpcXHRcXHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzUzLVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM2MC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzYxOlxcdFxcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNjItXFx0fVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTc2Mj1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NjYtXFx0LmVucXVldWVcXHQ9XFx0ZnFfY29kZWxfZW5xdWV1ZSxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY3OlxcdC5kZXF1ZXVlXFx0PVxcdGZxX2NvZGVsX2RlcXVldWUsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc2OC1cXHQucGVla1xcdFxcdD1cXHRmcV9jb2RlbF9wZWVrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzozOC4wNTY4MzgwMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ0MzE2MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsJ3MgQ29kZWwgSW1wbGVtZW50YXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIENvZGVsIGFuZCBGUS1Db2RlbCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBmaWxlcyBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AuIFRoZXNlIGFyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gQmV5b25kIHRoZSBjb2RlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuIEknbGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgdGhlaXIgYXNzb2NpYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucy4gSSBjb3VsZCBwcm9iYWJseSBtYW51YWxseSBjcmF3bCB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgdG8gc3BlZWQgdGhpbmdzIHVwLCBJJ2xsIGxldmVyYWdlIGEgc2VhcmNoIHRvb2wgLSBtb3N0IGxpa2VseSBgZ3JlcHBlcmAgLSB0byBlZmZpY2llbnRseSBsb2NhdGUgdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBORVRfU0NIX0NPREVMYCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo0MC4zMDExNTc1MTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NzkwMDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF8oRlFfKT9DT0RFTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz0yNTU9Y29uZmlnIE5FVF9TQ0hfUUZRXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNjUtXFxubmV0L3NjaGVkL0tjb25maWc6MjY2OmNvbmZpZyBORVRfU0NIX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjY3LVxcdHRyaXN0YXRlIFxcXCJDb250cm9sbGVkIERlbGF5IEFRTSAoQ09ERUwpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjc2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo0Mi43OTkwNjUzNDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzYwNDkwMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgQ29yZSBTY2hlZHVsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZXMgMjYwLTI5MC4gVGhhdCBhcmVhIHVzdWFsbHkgY292ZXJzIGEgc3BlY2lmaWMgYXNwZWN0IG9mIHRyYWZmaWMgc2hhcGluZyBvciBxdWV1aW5nIGRpc2NpcGxpbmVzOyBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byBhIGZlYXR1cmUgSSdtIGN1cnJlbnRseSB3b3JraW5nIHdpdGguIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgaW4gdGhhdCBibG9jay4gTGV0J3Mgc2VlIHdoYXQgcG9wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NDQuNTU5NTU5ODgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFxuIDI2MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjYyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX3FmcS5cXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjU6XFx0XFxuIDI2NjpcXHRjb25maWcgTkVUX1NDSF9DT0RFTFxcbiAyNjc6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbnRyb2xsZWQgRGVsYXkgQVFNIChDT0RFTClcXFwiXFxuIDI2ODpcXHRcXHRoZWxwXFxuIDI2OTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBDb250cm9sbGVkIERlbGF5IChDT0RFTClcXG4gMjcwOlxcdFxcdCAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjczOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgc2NoX2NvZGVsLlxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI3NjpcXHRcXG4gMjc3OlxcdGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxuIDI3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcbiAyNzk6XFx0XFx0aGVscFxcbiAyODA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgRlEgQ29udHJvbGxlZCBEZWxheSAoRlFfQ09ERUwpXFxuIDI4MTpcXHRcXHQgIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobS5cXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI4NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9mcV9jb2RlbC5cXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyODc6XFx0XFxuIDI4ODpcXHRjb25maWcgTkVUX1NDSF9DQUtFXFxuIDI4OTpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVxcXCJcXG4gMjkwOlxcdFxcdGhlbHBcXG4gMjkxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZFxcbiAyOTI6XFx0XFx0ICAoQ0FLRSkgcXVldWUgbWFuYWdlbWVudCBhbGdvcml0aG0uXFxuIDI5MzpcXHRcXG4gMjk0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo0NC41NTk2NzMzNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzNDAzMzIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gQ29kZWwgVXNhZ2UgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMgY29kZWJhc2UsIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGBpbmNsdWRlL25ldC9jb2RlbC5oYCBhbmQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAgdGhpbmcuIFNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSAqd2hlcmUqIGVsc2UgdGhpcyBpcyB1c2VkLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZSBvbiBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBmaXJlIHVwIGdyZXAgYW5kIHNjYW4gdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIGJvdGggYGNvZGVsLmhgIGFuZCBzZWUgaWYgdGhlIHNhbWUgYXBwbGllcyB0byBgY29kZWxfaW1wbC5oYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB3aGljaCBvdGhlciBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiB0aGlzIENvZGVsIGltcGxlbWVudGF0aW9uIGFuZCBtYXliZSBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEknbSBjb25zaWRlcmluZy4gU2hvdWxkIGJlIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byB1bmNvdmVyIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjQ2LjY5MzcxMTU0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTc2MjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2NvZGVsX3FkaXNjLmgtNTEtXFxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaDo1MjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvY29kZWxfcWRpc2MuaC01My0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2NmZzgwMjExLmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDoyMzojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsLmhcXHUwMDNlXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC0yNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oXFx1MDAzZVxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjQtI2luY2x1ZGUgXFx1MDAzY25ldC9tYWM4MDIxMS5oXFx1MDAzZVxcbm5ldC9tYWM4MDIxMS90eC5jOjI1OiNpbmNsdWRlIFxcdTAwM2NuZXQvY29kZWwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYzoyNjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvbWFjODAyMTEvdHguYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjE6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyMjojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjM6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yNC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyMzojaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX2ltcGwuaFxcdTAwM2VcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MjQ6I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9xZGlzYy5oXFx1MDAzZVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NDguOTMzNDg3OTY4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTIzMTY1NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgaG93IENvRGVsJ3MgZGVxdWV1ZSBhbmQgY29udHJvbCBsYXcgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZDpcblxuKipBbmFseXppbmcgdGhlIENvRGVsIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIHRvIHRydWx5IGdyYXNwIGhvdyB0aGlzIENvRGVsIG1lY2hhbmlzbSB3b3JrcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNyYWNrIG9wZW4gdGhlIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIGhlYWRlciBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgdGhlIGBjb2RlbF9kZXF1ZXVlYCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbnMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGVzZSBhcmUgZGVjbGFyZWQsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSB1c2UsIGFuZCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50bHksIHRoZSBhcmd1bWVudHMgdGhleSB0YWtlLiBUaGlzIGlzIHRoZSBibHVlcHJpbnQ7IHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuXG5cbk5leHQsIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgZ2V0IGludm9rZWQuIFdoZXJlIGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYXJlIHRoZXkgY2FsbGVkPyBBcmUgdGhleSBwYXJ0IG9mIHRoZSBxdWV1aW5nIGRpc2NpcGxpbmUgaXRzZWxmPyBBcmUgdGhlcmUgY2FsbGJhY2tzPyBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS4gSSBuZWVkIHRvIHNlZSB0aGUgZXhlY3V0aW9uIGZsb3c6IHdoZW4gZG9lcyB0aGUgZGVxdWV1ZSBoYXBwZW4sIGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBjb250cm9sIGxhdyBjYWxjdWxhdGlvbiBhbmQgYXBwbGljYXRpb24/IFRoaXMgaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaG93IENvRGVsIGlzIG9yY2hlc3RyYXRpbmcgdGhlc2Ugc3RlcHMuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbCBjaGFpbnMsIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgKmFjdHVhbGx5KiBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSBxdWV1ZSBhbmQgaXRzIHBhY2tldHMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSB0aGVvcmV0aWNhbCBDb0RlbCBkZXNpZ24gaXMgcmVhbGl6ZWQgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NTEuNjQ1ODEwMzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdH1cXG4gIDkxOlxcdFxcbiAgOTI6XFx0LypcXG4gIDkzOlxcdCAqIENvRGVsIGNvbnRyb2xfbGF3IGlzIHQgKyBpbnRlcnZhbC9zcXJ0KGNvdW50KVxcbiAgOTQ6XFx0ICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXFxuICA5NTpcXHQgKiBib3RoIHNxcnQoKSBhbmQgZGl2aWRlIG9wZXJhdGlvbi5cXG4gIDk2OlxcdCAqXFxuICA5NzpcXHQgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhXFxuICA5ODpcXHQgKiBsYXJnZSBjb3VudCkgY2FuIHRydW5jYXRlIGl0IHRvIHplcm8sIHN0YWxsaW5nIHRoZSBkcm9wcGluZyBsb29wLlxcbiAgOTk6XFx0ICovXFxuIDEwMDpcXHRzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxcbiAxMDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxcbiAxMDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcXG4gMTAzOlxcdHtcXG4gMTA0OlxcdFxcdHJldHVybiB0ICsgbWF4X3QodTMyLCAxLFxcbiAxMDU6XFx0XFx0XFx0XFx0IHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsXFxuIDEwNjpcXHRcXHRcXHRcXHRcXHRcXHQgIHJlY19pbnZfc3FydCBcXHUwMDNjXFx1MDAzYyBSRUNfSU5WX1NRUlRfU0hJRlQpKTtcXG4gMTA3OlxcdH1cXG4gMTA4OlxcdFxcbiAxMDk6XFx0c3RhdGljIGJvb2wgY29kZWxfc2hvdWxkX2Ryb3AoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTEwOlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmN0eCxcXG4gMTExOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjb2RlbF92YXJzICp2YXJzLFxcbiAxMTI6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvZGVsX3BhcmFtcyAqcGFyYW1zLFxcbiAxMTM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvZGVsX3N0YXRzICpzdGF0cyxcXG4gMTE0OlxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXFxuIDExNTpcXHRcXHRcXHRcXHQgICAgICBjb2RlbF9za2JfdGltZV90IHNrYl90aW1lX2Z1bmMsXFxuIDExNjpcXHRcXHRcXHRcXHQgICAgICB1MzIgKmJhY2tsb2csXFxuIDExNzpcXHRcXHRcXHRcXHQgICAgICBjb2RlbF90aW1lX3Qgbm93KVxcbiAxMTg6XFx0e1xcbiAxMTk6XFx0XFx0Ym9vbCBva190b19kcm9wO1xcbiAxMjA6XFx0XFx0dTMyIHNrYl9sZW47XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdGlmICghc2tiKSB7XFxuIDEyMzpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTI0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTI1OlxcdFxcdH1cXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0c2tiX2xlbiA9IHNrYl9sZW5fZnVuYyhza2IpO1xcbiAxMjg6XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2VsZGVsYXksIG5vdyAtIHNrYl90aW1lX2Z1bmMoc2tiKSk7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdGlmICh1bmxpa2VseShza2JfbGVuIFxcdTAwM2Ugc3RhdHMtXFx1MDAzZW1heHBhY2tldCkpXFxuIDEzMTpcXHRcXHRcXHRXUklURV9PTkNFKHN0YXRzLVxcdTAwM2VtYXhwYWNrZXQsIHNrYl9sZW4pO1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHRpZiAoY29kZWxfdGltZV9iZWZvcmUodmFycy1cXHUwMDNlbGRlbGF5LCBwYXJhbXMtXFx1MDAzZXRhcmdldCkgfHxcXG4gMTM0OlxcdFxcdCAgICAqYmFja2xvZyBcXHUwMDNjPSBwYXJhbXMtXFx1MDAzZW10dSkge1xcbiAxMzU6XFx0XFx0XFx0Lyogd2VudCBiZWxvdyAtIHN0YXkgYmVsb3cgZm9yIGF0IGxlYXN0IGludGVydmFsICovXFxuIDEzNjpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTM3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTM4OlxcdFxcdH1cXG4gMTM5OlxcdFxcdG9rX3RvX2Ryb3AgPSBmYWxzZTtcXG4gMTQwOlxcdFxcdGlmICh2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID09IDApIHtcXG4gMTQxOlxcdFxcdFxcdC8qIGp1c3Qgd2VudCBhYm92ZSBmcm9tIGJlbG93LiBJZiB3ZSBzdGF5IGFib3ZlXFxuIDE0MjpcXHRcXHRcXHQgKiBmb3IgYXQgbGVhc3QgaW50ZXJ2YWwgd2UnbGwgc2F5IGl0J3Mgb2sgdG8gZHJvcFxcbiAxNDM6XFx0XFx0XFx0ICovXFxuIDE0NDpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gbm93ICsgcGFyYW1zLVxcdTAwM2VpbnRlcnZhbDtcXG4gMTQ1OlxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcihub3csIHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUpKSB7XFxuIDE0NjpcXHRcXHRcXHRva190b19kcm9wID0gdHJ1ZTtcXG4gMTQ3OlxcdFxcdH1cXG4gMTQ4OlxcdFxcdHJldHVybiBva190b19kcm9wO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgKmJhY2tsb2csXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9wYXJhbXMgKnBhcmFtcyxcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsXFxuIDE1NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBjb2RlbF9zdGF0cyAqc3RhdHMsXFxuIDE1NjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9sZW5fdCBza2JfbGVuX2Z1bmMsXFxuIDE1NzpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl90aW1lX3Qgc2tiX3RpbWVfZnVuYyxcXG4gMTU4OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2Ryb3BfdCBkcm9wX2Z1bmMsXFxuIDE1OTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl9kZXF1ZXVlX3QgZGVxdWV1ZV9mdW5jKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlcXVldWVfZnVuYyh2YXJzLCBjdHgpO1xcbiAxNjI6XFx0XFx0Y29kZWxfdGltZV90IG5vdztcXG4gMTYzOlxcdFxcdGJvb2wgZHJvcDtcXG4gMTY0OlxcdFxcdHVuc2lnbmVkIGludCBkcm9wcyA9IDA7XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdGlmICghc2tiKSB7XFxuIDE2NzpcXHRcXHRcXHR2YXJzLVxcdTAwM2VmaXJzdF9hYm92ZV90aW1lID0gMDtcXG4gMTY4OlxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTY5OlxcdFxcdFxcdHJldHVybiBza2I7XFxuIDE3MDpcXHRcXHR9XFxuIDE3MTpcXHRcXHRub3cgPSBjb2RlbF9nZXRfdGltZSgpO1xcbiAxNzI6XFx0XFx0ZHJvcCA9IGNvZGVsX3Nob3VsZF9kcm9wKHNrYiwgY3R4LCB2YXJzLCBwYXJhbXMsIHN0YXRzLFxcbiAxNzM6XFx0XFx0XFx0XFx0XFx0IHNrYl9sZW5fZnVuYywgc2tiX3RpbWVfZnVuYywgYmFja2xvZywgbm93KTtcXG4gMTc0OlxcdFxcdGlmICh2YXJzLVxcdTAwM2Vkcm9wcGluZykge1xcbiAxNzU6XFx0XFx0XFx0aWYgKCFkcm9wKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHQvKiBzb2pvdXJuIHRpbWUgYmVsb3cgdGFyZ2V0IC0gbGVhdmUgZHJvcHBpbmcgc3RhdGUgKi9cXG4gMTc3OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodmFycy1cXHUwMDNlZHJvcHBpbmcsIGZhbHNlKTtcXG4gMTc4OlxcdFxcdFxcdH0gZWxzZSBpZiAoY29kZWxfdGltZV9hZnRlcl9lcShub3csIHZhcnMtXFx1MDAzZWRyb3BfbmV4dCkpIHtcXG4gMTc5OlxcdFxcdFxcdFxcdC8qIEl0J3MgdGltZSBmb3IgdGhlIG5leHQgZHJvcC4gRHJvcCB0aGUgY3VycmVudFxcbiAxODA6XFx0XFx0XFx0XFx0ICogcGFja2V0IGFuZCBkZXF1ZXVlIHRoZSBuZXh0LiBUaGUgZGVxdWV1ZSBtaWdodFxcbiAxODE6XFx0XFx0XFx0XFx0ICogdGFrZSB1cyBvdXQgb2YgZHJvcHBpbmcgc3RhdGUuXFxuIDE4MjpcXHRcXHRcXHRcXHQgKiBJZiBub3QsIHNjaGVkdWxlIHRoZSBuZXh0IGRyb3AuXFxuIDE4MzpcXHRcXHRcXHRcXHQgKiBBIGxhcmdlIGJhY2tsb2cgbWlnaHQgcmVzdWx0IGluIGRyb3AgcmF0ZXMgc28gaGlnaFxcbiAxODQ6XFx0XFx0XFx0XFx0ICogdGhhdCB0aGUgbmV4dCBkcm9wIHNob3VsZCBoYXBwZW4gbm93LFxcbiAxODU6XFx0XFx0XFx0XFx0ICogaGVuY2UgdGhlIHdoaWxlIGxvb3AuXFxuIDE4NjpcXHRcXHRcXHRcXHQgKi9cXG4gMTg3OlxcdFxcdFxcdFxcdHdoaWxlICh2YXJzLVxcdTAwM2Vkcm9wcGluZyBcXHUwMDI2XFx1MDAyNlxcbiAxODg6XFx0XFx0XFx0XFx0ICAgICAgIGNvZGVsX3RpbWVfYWZ0ZXJfZXEobm93LCB2YXJzLVxcdTAwM2Vkcm9wX25leHQpKSB7XFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRpZiAoKytkcm9wcyBcXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1MS42NDU5NDY4NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk0NDQzMzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBDb0RlbCBhbmQgRlEtQ29EZWwgZnVuY3Rpb24gYXQgdGhlIGtlcm5lbCBsZXZlbC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCwgSSBhc3N1bWUsIHBvdGVudGlhbCBwb2ludHMgZm9yIG9wdGltaXphdGlvbiBvciBtb2RpZmljYXRpb24sIEkgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbnMuXG5cbioqRXhhbWluaW5nIENvRGVsIGFuZCBGUS1Db0RlbCBJbXBsZW1lbnRhdGlvbnMqKlxuXG5NeSBpbml0aWFsIG1vdmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBzb3VyY2UgZmlsZXMgZm9yIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYmFzaWMgZmxvdyBvZiBvcGVyYXRpb24uIFNvLCBJJ2xsIHN0YXJ0IHdpdGggYG5ldC9zY2hlZC9zY2hfY29kZWwuY2AgdG8gZXN0YWJsaXNoIHRoZSBiYXNlbGluZSBvZiB0aGUgcWRpc2MgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NTMuNTkwMzg1ODAyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2NvZGVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogQ29kZWwgLSBUaGUgQ29udHJvbGxlZC1EZWxheSBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCBhbGdvcml0aG1cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgS2F0aGxlZW4gTmljaG9scyBcXHUwMDNjbmljaG9sc0Bwb2xsZXJlLmNvbVxcdTAwM2VcXG4gICA2OlxcdCAqICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBWYW4gSmFjb2Jzb24gXFx1MDAzY3ZhbkBwb2xsZXJlLm5ldFxcdTAwM2VcXG4gICA3OlxcdCAqXFxuICAgODpcXHQgKiAgSW1wbGVtZW50ZWQgb24gbGludXggYnkgOlxcbiAgIDk6XFx0ICogIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIEQuIFRhaHQgXFx1MDAzY2RhdmUudGFodEBidWZmZXJibG9hdC5uZXRcXHUwMDNlXFxuICAxMDpcXHQgKiAgQ29weXJpZ2h0IChDKSAyMDEyLDIwMTUgRXJpYyBEdW1hemV0IFxcdTAwM2NlZHVtYXpldEBnb29nbGUuY29tXFx1MDAzZVxcbiAgMTE6XFx0ICovXFxuICAxMjpcXHRcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbC5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9jb2RlbF9pbXBsLmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2NvZGVsX3FkaXNjLmhcXHUwMDNlXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcbiAgMjY6XFx0I2RlZmluZSBERUZBVUxUX0NPREVMX0xJTUlUIDEwMDBcXG4gIDI3OlxcdFxcbiAgMjg6XFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xcbiAgMjk6XFx0XFx0c3RydWN0IGNvZGVsX3BhcmFtc1xcdHBhcmFtcztcXG4gIDMwOlxcdFxcdHN0cnVjdCBjb2RlbF92YXJzXFx0dmFycztcXG4gIDMxOlxcdFxcdHN0cnVjdCBjb2RlbF9zdGF0c1xcdHN0YXRzO1xcbiAgMzI6XFx0XFx0dTMyXFx0XFx0XFx0ZHJvcF9vdmVybGltaXQ7XFxuICAzMzpcXHR9O1xcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBUaGlzIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb2RlbF9kZXF1ZXVlKClcXG4gIDM2OlxcdCAqIHRvIGRlcXVldWUgYSBwYWNrZXQgZnJvbSBxdWV1ZS4gTm90ZTogYmFja2xvZyBpcyBoYW5kbGVkIGluXFxuICAzNzpcXHQgKiBjb2RlbCwgd2UgZG9udCBuZWVkIHRvIHJlZHVjZSBpdCBoZXJlLlxcbiAgMzg6XFx0ICovXFxuICAzOTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IFFkaXNjICpzY2ggPSBjdHg7XFxuICA0MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQoXFx1MDAyNnNjaC1cXHUwMDNlcSk7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdGlmIChza2IpIHtcXG4gIDQ1OlxcdFxcdFxcdHFzdGF0c19iYWNrbG9nX3N1YihzY2gsIHFkaXNjX3BrdF9sZW4oc2tiKSk7XFxuICA0NjpcXHRcXHRcXHRwcmVmZXRjaChcXHUwMDI2c2tiLVxcdTAwM2VlbmQpOyAvKiB3ZSdsbCBuZWVkIHNrYl9zaGluZm8oKSAqL1xcbiAgNDc6XFx0XFx0fVxcbiAgNDg6XFx0XFx0cmV0dXJuIHNrYjtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0c3RhdGljIHZvaWQgZHJvcF9mdW5jKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eClcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdHN0cnVjdCBRZGlzYyAqc2NoID0gY3R4O1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRxZGlzY19kZXF1ZXVlX2Ryb3Aoc2NoLCBza2IsIFFESVNDX0RST1BfQ09OR0VTVEVEKTtcXG4gIDU2OlxcdFxcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRcXG4gIDU5OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19jb2RlbF9xZGlzY19kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuICA2MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRza2IgPSBjb2RlbF9kZXF1ZXVlKHNjaCwgXFx1MDAyNnNjaC1cXHUwMDNlcXN0YXRzLmJhY2tsb2csIFxcdTAwMjZxLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZxLVxcdTAwM2V2YXJzLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZxLVxcdTAwM2VzdGF0cywgcWRpc2NfcGt0X2xlbiwgY29kZWxfZ2V0X2VucXVldWVfdGltZSxcXG4gIDY2OlxcdFxcdFxcdFxcdCAgICBkcm9wX2Z1bmMsIGRlcXVldWVfZnVuYyk7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdGlmIChza2IpXFxuICA2OTpcXHRcXHRcXHRxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTtcXG4gIDcwOlxcdFxcdHJldHVybiBza2I7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdHN0YXRpYyB2b2lkIGNvZGVsX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gIDc0OlxcdHtcXG4gIDc1OlxcdFxcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAocS1cXHUwMDNlc3RhdHMuZHJvcF9jb3VudCkge1xcbiAgNzg6XFx0XFx0XFx0cWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZyhzY2gsIHEtXFx1MDAzZXN0YXRzLmRyb3BfY291bnQsXFxuICA3OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHEtXFx1MDAzZXN0YXRzLmRyb3BfbGVuKTtcXG4gIDgwOlxcdFxcdFxcdHEtXFx1MDAzZXN0YXRzLmRyb3BfY291bnQgPSAwO1xcbiAgODE6XFx0XFx0XFx0cS1cXHUwMDNlc3RhdHMuZHJvcF9sZW4gPSAwO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHRza2IgPSBfX2NvZGVsX3FkaXNjX2RlcXVldWUoc2NoKTtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0Y29kZWxfZGVxdWV1ZV9kcm9wKHNjaCk7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdHJldHVybiBza2I7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcGVlayhzdHJ1Y3QgUWRpc2MgKnNjaClcXG4gIDk3OlxcdHtcXG4gIDk4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcXHUwMDI2c2NoLVxcdTAwM2Vnc29fc2tiKTtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0aWYgKCFza2IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjc6NTMuNTkwNTE5NzcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTAyMDYxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCBmcm9tIG15IHBlcnNwZWN0aXZlLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsaW5nIENvZGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0L3NjaGVkL3NjaF9jb2RlbC5jYCBhbmQgYHNjaF9mcV9jb2RlbC5jYC4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBjb25jZXB0dWFsIGdyYXNwIG9mIENvRGVsIGFuZCBGUS1Db0RlbCwgYnV0IGEgZGVlcCBkaXZlIGludG8gdGhlIGFjdHVhbCBjb2RlIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZSB0aGVvcmV0aWNhbCBjb25jZXB0cyBhcmUgdHJhbnNsYXRlZCBpbnRvIHRoZSBMaW51eCBrZXJuZWwncyBzY2hlZHVsaW5nIGZyYW1ld29yay4gSSB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCwgdGhlIHF1ZXVpbmcgbG9naWMsIHRoZSBkZXF1ZXVlIHByb2Nlc3MsIGhvdyB0aGUgdGFyZ2V0IGFuZCBpbnRlcnZhbCBwYXJhbWV0ZXJzIGFyZSBoYW5kbGVkLCBhbmQgaG93IGRyb3BzIGFyZSBkZXRlcm1pbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgb3B0aW1pemF0aW9ucyBvciBudWFuY2VzIHNwZWNpZmljIHRvIHRoaXMgaW1wbGVtZW50YXRpb24uIEl0J3MgdGltZSB0byBnZXQgZG93biB0byB0aGUgbG93IGxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjkxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1NS44MDA3Mjg4NDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9jb2RlbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0XFx0XFx0c2tiID0gX19jb2RlbF9xZGlzY19kZXF1ZXVlKHNjaCk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdGlmIChza2IpIHtcXG4gMTA0OlxcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYiwgc2tiKTtcXG4gMTA1OlxcdFxcdFxcdFxcdC8qIGl0J3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi9cXG4gMTA2OlxcdFxcdFxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2luYyhzY2gsIHNrYik7XFxuIDEwNzpcXHRcXHRcXHRcXHRzY2gtXFx1MDAzZXEucWxlbisrO1xcbiAxMDg6XFx0XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRcXHRjb2RlbF9kZXF1ZXVlX2Ryb3Aoc2NoKTtcXG4gMTExOlxcdFxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0cmV0dXJuIHNrYjtcXG4gMTE0OlxcdH1cXG4gMTE1OlxcdFxcbiAxMTY6XFx0c3RhdGljIGludCBjb2RlbF9xZGlzY19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbiAxMTc6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4gMTE4OlxcdHtcXG4gMTE5OlxcdFxcdHN0cnVjdCBjb2RlbF9zY2hlZF9kYXRhICpxO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobGlrZWx5KHFkaXNjX3FsZW4oc2NoKSBcXHUwMDNjIHNjaC1cXHUwMDNlbGltaXQpKSB7XFxuIDEyMjpcXHRcXHRcXHRjb2RlbF9zZXRfZW5xdWV1ZV90aW1lKHNrYik7XFxuIDEyMzpcXHRcXHRcXHRyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTtcXG4gMTI0OlxcdFxcdH1cXG4gMTI1OlxcdFxcdHEgPSBxZGlzY19wcml2KHNjaCk7XFxuIDEyNjpcXHRcXHRXUklURV9PTkNFKHEtXFx1MDAzZWRyb3Bfb3ZlcmxpbWl0LCBxLVxcdTAwM2Vkcm9wX292ZXJsaW1pdCArIDEpO1xcbiAxMjc6XFx0XFx0cmV0dXJuIHFkaXNjX2Ryb3BfcmVhc29uKHNrYiwgc2NoLCB0b19mcmVlLCBRRElTQ19EUk9QX09WRVJMSU1JVCk7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjb2RlbF9wb2xpY3lbVENBX0NPREVMX01BWCArIDFdID0ge1xcbiAxMzE6XFx0XFx0W1RDQV9DT0RFTF9UQVJHRVRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbiAxMzI6XFx0XFx0W1RDQV9DT0RFTF9MSU1JVF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDEzMzpcXHRcXHRbVENBX0NPREVMX0lOVEVSVkFMXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gMTM0OlxcdFxcdFtUQ0FfQ09ERUxfRUNOXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gMTM1OlxcdFxcdFtUQ0FfQ09ERUxfQ0VfVEhSRVNIT0xEXT0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4gMTM2OlxcdH07XFxuIDEzNzpcXHRcXG4gMTM4OlxcdHN0YXRpYyBpbnQgY29kZWxfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIDEzOTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE0MDpcXHR7XFxuIDE0MTpcXHRcXHR1bnNpZ25lZCBpbnQgZHJvcHBlZF9wa3RzID0gMCwgZHJvcHBlZF9ieXRlcyA9IDA7XFxuIDE0MjpcXHRcXHRzdHJ1Y3QgY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gMTQzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9DT0RFTF9NQVggKyAxXTtcXG4gMTQ0OlxcdFxcdGludCBlcnI7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX0NPREVMX01BWCwgb3B0LFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb2RlbF9wb2xpY3ksIE5VTEwpO1xcbiAxNDg6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDE0OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRzY2hfdHJlZV9sb2NrKHNjaCk7XFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdGlmICh0YltUQ0FfQ09ERUxfVEFSR0VUXSkge1xcbiAxNTQ6XFx0XFx0XFx0dTMyIHRhcmdldCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9DT0RFTF9UQVJHRVRdKTtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VwYXJhbXMudGFyZ2V0LFxcbiAxNTc6XFx0XFx0XFx0XFx0ICAgKCh1NjQpdGFyZ2V0ICogTlNFQ19QRVJfVVNFQykgXFx1MDAzZVxcdTAwM2UgQ09ERUxfU0hJRlQpO1xcbiAxNTg6XFx0XFx0fVxcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRpZiAodGJbVENBX0NPREVMX0NFX1RIUkVTSE9MRF0pIHtcXG4gMTYxOlxcdFxcdFxcdHU2NCB2YWwgPSBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfQ0VfVEhSRVNIT0xEXSk7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlcGFyYW1zLmNlX3RocmVzaG9sZCxcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICh2YWwgKiBOU0VDX1BFUl9VU0VDKSBcXHUwMDNlXFx1MDAzZSBDT0RFTF9TSElGVCk7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdGlmICh0YltUQ0FfQ09ERUxfSU5URVJWQUxdKSB7XFxuIDE2ODpcXHRcXHRcXHR1MzIgaW50ZXJ2YWwgPSBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfSU5URVJWQUxdKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0XFx0V1JJVEVfT05DRShxLVxcdTAwM2VwYXJhbXMuaW50ZXJ2YWwsXFxuIDE3MTpcXHRcXHRcXHRcXHQgICAoKHU2NClpbnRlcnZhbCAqIE5TRUNfUEVSX1VTRUMpIFxcdTAwM2VcXHUwMDNlIENPREVMX1NISUZUKTtcXG4gMTcyOlxcdFxcdH1cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0aWYgKHRiW1RDQV9DT0RFTF9MSU1JVF0pXFxuIDE3NTpcXHRcXHRcXHRXUklURV9PTkNFKHNjaC1cXHUwMDNlbGltaXQsXFxuIDE3NjpcXHRcXHRcXHRcXHQgICBubGFfZ2V0X3UzMih0YltUQ0FfQ09ERUxfTElNSVRdKSk7XFxuIDE3NzpcXHRcXG4gMTc4OlxcdFxcdGlmICh0YltUQ0FfQ09ERUxfRUNOXSlcXG4gMTc5OlxcdFxcdFxcdFdSSVRFX09OQ0UocS1cXHUwMDNlcGFyYW1zLmVjbixcXG4gMTgwOlxcdFxcdFxcdFxcdCAgICEhbmxhX2dldF91MzIodGJbVENBX0NPREVMX0VDTl0pKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0d2hpbGUgKHNjaC1cXHUwMDNlcS5xbGVuIFxcdTAwM2Ugc2NoLVxcdTAwM2VsaW1pdCkge1xcbiAxODM6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjX2RlcXVldWVfaW50ZXJuYWwoc2NoLCB0cnVlKTtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0XFx0aWYgKCFza2IpXFxuIDE4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0XFx0ZHJvcHBlZF9wa3RzKys7XFxuIDE4OTpcXHRcXHRcXHRkcm9wcGVkX2J5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTtcXG4gMTkwOlxcdFxcdFxcdHJ0bmxfcWRpc2NfZHJvcChza2IsIHNjaCk7XFxuIDE5MTpcXHRcXHR9XFxuIDE5MjpcXHRcXHRxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgZHJvcHBlZF9wa3RzLCBkcm9wcGVkX2J5dGVzKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0c2NoX3RyZWVfdW5sb2NrKHNjaCk7XFxuIDE5NTpcXHRcXHRyZXR1cm4gMDtcXG4gMTk2OlxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0c3RhdGljIGludCBjb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuIDE5OTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDIwMDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI3OjU1LjgwMDgyNTk3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjk3NTA4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogYG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY2AqKlxuXG5Pa2F5LCBJJ20gc2hpZnRpbmcgZm9jdXMuIFdlJ3ZlIGNvdmVyZWQgYSBnb29kIGFtb3VudCBvZiBncm91bmQsIGJ1dCBub3cgaXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyB0aGlzIGlzIGFsbCAqYWN0dWFsbHkqIGRvbmUuIExldCdzIHB1bGwgdXAgdGhlIGBuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgY3J1Y2lhbCBhbGdvcml0aG1zIGZvciBwYWNrZXQgc2NoZWR1bGluZyBhbmQgcXVldWUgbWFuYWdlbWVudCwgYW5kIHRoZSBsb2dpYyB0aGF0IGltcGxlbWVudHMgQ29EZWwncyBhY3RpdmUgcXVldWUgbWFuYWdlbWVudC4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBmYWlyIHF1ZXVlaW5nIGFzcGVjdCDigJMgYXJlIHRoZXkgdXNpbmcgYSBoYXNoLCBzb21lIGZvcm0gb2Ygcm91bmQtcm9iaW4sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBmcSBhbmQgY29kZWwgYXNwZWN0cywgdGhhdCBpcyB0byBzYXkgdGhlIGZhaXIgcXVldWluZyBhbmQgdGhlIGNvbnRyb2xsZWQgZGVsYXkgb2YgQ29EZWwuIEknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBtYW5hZ2VtZW50IGFzIHdlbGwsIGdpdmVuIHRoZSBjb25jdXJyZW5jeSBpbnZvbHZlZCBpbiBhIG5ldHdvcmsgc2NoZWR1bGVyLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjAyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1OC4wOTgzMzc2MTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRyZXR1cm4gc2tiO1xcbiAzMjI6XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXF1ZXVlX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpXFxuIDMyNTpcXHR7XFxuIDMyNjpcXHRcXHRzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0aWYgKHEtXFx1MDAzZWNzdGF0cy5kcm9wX2NvdW50KSB7XFxuIDMyOTpcXHRcXHRcXHRxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS1cXHUwMDNlY3N0YXRzLmRyb3BfY291bnQsXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHRcXHQgIHEtXFx1MDAzZWNzdGF0cy5kcm9wX2xlbik7XFxuIDMzMTpcXHRcXHRcXHRxLVxcdTAwM2Vjc3RhdHMuZHJvcF9jb3VudCA9IDA7XFxuIDMzMjpcXHRcXHRcXHRxLVxcdTAwM2Vjc3RhdHMuZHJvcF9sZW4gPSAwO1xcbiAzMzM6XFx0XFx0fVxcbiAzMzQ6XFx0fVxcbiAzMzU6XFx0XFxuIDMzNjpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxuIDMzNzpcXHR7XFxuIDMzODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRza2IgPSAgX19mcV9jb2RlbF9kZXF1ZXVlKHNjaCk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAzNDU6XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxuIDM0ODpcXHR7XFxuIDM0OTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoXFx1MDAyNnNjaC1cXHUwMDNlZ3NvX3NrYik7XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdGlmICghc2tiKSB7XFxuIDM1MjpcXHRcXHRcXHRza2IgPSBfX2ZxX2NvZGVsX2RlcXVldWUoc2NoKTtcXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0XFx0aWYgKHNrYikge1xcbiAzNTU6XFx0XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZChcXHUwMDI2c2NoLVxcdTAwM2Vnc29fc2tiLCBza2IpO1xcbiAzNTY6XFx0XFx0XFx0XFx0LyogaXQncyBzdGlsbCBwYXJ0IG9mIHRoZSBxdWV1ZSAqL1xcbiAzNTc6XFx0XFx0XFx0XFx0cWRpc2NfcXN0YXRzX2JhY2tsb2dfaW5jKHNjaCwgc2tiKTtcXG4gMzU4OlxcdFxcdFxcdFxcdHNjaC1cXHUwMDNlcS5xbGVuKys7XFxuIDM1OTpcXHRcXHRcXHR9XFxuIDM2MDpcXHRcXG4gMzYxOlxcdFxcdFxcdGZxX2NvZGVsX2RlcXVldWVfZHJvcChzY2gpO1xcbiAzNjI6XFx0XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRcXHRyZXR1cm4gc2tiO1xcbiAzNjU6XFx0fVxcbiAzNjY6XFx0XFxuIDM2NzpcXHRzdGF0aWMgdm9pZCBmcV9jb2RlbF9mbG93X3B1cmdlKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93KVxcbiAzNjg6XFx0e1xcbiAzNjk6XFx0XFx0cnRubF9rZnJlZV9za2JzKGZsb3ctXFx1MDAzZWhlYWQsIGZsb3ctXFx1MDAzZXRhaWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyNzo1OC4wOTg0NTAyNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNTI5MTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqUGVlcmluZyBpbnRvIG1hYzgwMjExJ3MgVFggUGF0aCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIG1hYzgwMjExIHN0YWNrLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRyYW5zbWlzc2lvbi4gV2hlcmUgZG8gSSBzdGFydD8gQWgsIHJpZ2h0LCBgbmV0L21hYzgwMjExL3R4LmNgIGlzIHRoZSBsb2dpY2FsIHBsYWNlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGUgY29yZSB0cmFuc21pc3Npb24gbG9naWMsIHBhcnRpY3VsYXJseSBpbiB0aGF0IGNyaXRpY2FsIGFyZWEuIEknbGwgemVybyBpbiBvbiBsaW5lcyAxMzcwLTE0NDUuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGdvdGNoYXMgSSBjYW4gZmluZC4gSXQncyBsaWtlbHkgdGhhdCBzZWN0aW9uIHRvdWNoZXMgb24gdGhlIG1lY2hhbmljcyBvZiBob3cgdGhlIGRyaXZlciBmb3JtcyBmcmFtZXMsIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgbWF5YmUgZXZlbiBzb21lIFFvUyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgcmF0ZSBjb250cm9sIGNvbnNpZGVyYXRpb25zLiBLbm93aW5nIHRoZSBzdGF0ZSBvZiB0aGlzIGNvZGUgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgdW5kZXIgbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjAwLjEzMzc0NTQwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL3R4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3MDpcXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87XFxuMTM3MTpcXHRcXG4xMzcyOlxcdFxcdGluZm8gPSAoY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICopc2tiLVxcdTAwM2VjYjtcXG4xMzczOlxcdFxcdHJldHVybiBpbmZvLVxcdTAwM2Vjb250cm9sLmVucXVldWVfdGltZTtcXG4xMzc0OlxcdH1cXG4xMzc1OlxcdFxcbjEzNzY6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9kZXF1ZXVlX2Z1bmMoc3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzLFxcbjEzNzc6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICpjdHgpXFxuMTM3ODpcXHR7XFxuMTM3OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcXG4xMzgwOlxcdFxcdHN0cnVjdCB0eHFfaW5mbyAqdHhxaTtcXG4xMzgxOlxcdFxcdHN0cnVjdCBmcSAqZnE7XFxuMTM4MjpcXHRcXHRzdHJ1Y3QgZnFfZmxvdyAqZmxvdztcXG4xMzgzOlxcdFxcbjEzODQ6XFx0XFx0dHhxaSA9IGN0eDtcXG4xMzg1OlxcdFxcdGxvY2FsID0gdmlmX3RvX3NkYXRhKHR4cWktXFx1MDAzZXR4cS52aWYpLVxcdTAwM2Vsb2NhbDtcXG4xMzg2OlxcdFxcdGZxID0gXFx1MDAyNmxvY2FsLVxcdTAwM2VmcTtcXG4xMzg3OlxcdFxcbjEzODg6XFx0XFx0aWYgKGN2YXJzID09IFxcdTAwMjZ0eHFpLVxcdTAwM2VkZWZfY3ZhcnMpXFxuMTM4OTpcXHRcXHRcXHRmbG93ID0gXFx1MDAyNnR4cWktXFx1MDAzZXRpbi5kZWZhdWx0X2Zsb3c7XFxuMTM5MDpcXHRcXHRlbHNlXFxuMTM5MTpcXHRcXHRcXHRmbG93ID0gXFx1MDAyNmZxLVxcdTAwM2VmbG93c1tjdmFycyAtIGxvY2FsLVxcdTAwM2VjdmFyc107XFxuMTM5MjpcXHRcXG4xMzkzOlxcdFxcdHJldHVybiBmcV9mbG93X2RlcXVldWUoZnEsIGZsb3cpO1xcbjEzOTQ6XFx0fVxcbjEzOTU6XFx0XFxuMTM5NjpcXHRzdGF0aWMgdm9pZCBjb2RlbF9kcm9wX2Z1bmMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMzk3OlxcdFxcdFxcdFxcdCAgICB2b2lkICpjdHgpXFxuMTM5ODpcXHR7XFxuMTM5OTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDtcXG4xNDAwOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xcbjE0MDE6XFx0XFx0c3RydWN0IHR4cV9pbmZvICp0eHFpO1xcbjE0MDI6XFx0XFxuMTQwMzpcXHRcXHR0eHFpID0gY3R4O1xcbjE0MDQ6XFx0XFx0bG9jYWwgPSB2aWZfdG9fc2RhdGEodHhxaS1cXHUwMDNldHhxLnZpZiktXFx1MDAzZWxvY2FsO1xcbjE0MDU6XFx0XFx0aHcgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZWh3O1xcbjE0MDY6XFx0XFxuMTQwNzpcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihodywgc2tiKTtcXG4xNDA4OlxcdH1cXG4xNDA5OlxcdFxcbjE0MTA6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICpmcV90aW5fZGVxdWV1ZV9mdW5jKHN0cnVjdCBmcSAqZnEsXFxuMTQxMTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnFfdGluICp0aW4sXFxuMTQxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnFfZmxvdyAqZmxvdylcXG4xNDEzOlxcdHtcXG4xNDE0OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsO1xcbjE0MTU6XFx0XFx0c3RydWN0IHR4cV9pbmZvICp0eHFpO1xcbjE0MTY6XFx0XFx0c3RydWN0IGNvZGVsX3ZhcnMgKmN2YXJzO1xcbjE0MTc6XFx0XFx0c3RydWN0IGNvZGVsX3BhcmFtcyAqY3BhcmFtcztcXG4xNDE4OlxcdFxcdHN0cnVjdCBjb2RlbF9zdGF0cyAqY3N0YXRzO1xcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihmcSwgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgZnEpO1xcbjE0MjE6XFx0XFx0dHhxaSA9IGNvbnRhaW5lcl9vZih0aW4sIHN0cnVjdCB0eHFfaW5mbywgdGluKTtcXG4xNDIyOlxcdFxcdGNwYXJhbXMgPSBcXHUwMDI2bG9jYWwtXFx1MDAzZWNwYXJhbXM7XFxuMTQyMzpcXHRcXHRjc3RhdHMgPSBcXHUwMDI2dHhxaS1cXHUwMDNlY3N0YXRzO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHRpZiAoZmxvdyA9PSBcXHUwMDI2dGluLVxcdTAwM2VkZWZhdWx0X2Zsb3cpXFxuMTQyNjpcXHRcXHRcXHRjdmFycyA9IFxcdTAwMjZ0eHFpLVxcdTAwM2VkZWZfY3ZhcnM7XFxuMTQyNzpcXHRcXHRlbHNlXFxuMTQyODpcXHRcXHRcXHRjdmFycyA9IFxcdTAwMjZsb2NhbC1cXHUwMDNlY3ZhcnNbZmxvdyAtIGZxLVxcdTAwM2VmbG93c107XFxuMTQyOTpcXHRcXG4xNDMwOlxcdFxcdHJldHVybiBjb2RlbF9kZXF1ZXVlKHR4cWksXFxuMTQzMTpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbG93LVxcdTAwM2ViYWNrbG9nLFxcbjE0MzI6XFx0XFx0XFx0XFx0ICAgICBjcGFyYW1zLFxcbjE0MzM6XFx0XFx0XFx0XFx0ICAgICBjdmFycyxcXG4xNDM0OlxcdFxcdFxcdFxcdCAgICAgY3N0YXRzLFxcbjE0MzU6XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfbGVuX2Z1bmMsXFxuMTQzNjpcXHRcXHRcXHRcXHQgICAgIGNvZGVsX3NrYl90aW1lX2Z1bmMsXFxuMTQzNzpcXHRcXHRcXHRcXHQgICAgIGNvZGVsX2Ryb3BfZnVuYyxcXG4xNDM4OlxcdFxcdFxcdFxcdCAgICAgY29kZWxfZGVxdWV1ZV9mdW5jKTtcXG4xNDM5OlxcdH1cXG4xNDQwOlxcdFxcbjE0NDE6XFx0c3RhdGljIHZvaWQgZnFfc2tiX2ZyZWVfZnVuYyhzdHJ1Y3QgZnEgKmZxLFxcbjE0NDI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZnFfdGluICp0aW4sXFxuMTQ0MzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmcV9mbG93ICpmbG93LFxcbjE0NDQ6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODowMC4xMzQwMTAzNjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNjE3NTYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGVsL0ZRLUNvZGVsIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlczogYGluY2x1ZGUvbmV0L2NvZGVsLmhgIG5vdyBoYXMgYENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSAyNTZgLCB3aGljaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsaW1pdC4gVGhlbiwgd2l0aGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCB0aGUgYGNvZGVsX2NvbnRyb2xfbGF3YCBmdW5jdGlvbiBoYXMgYmVlbiB0d2Vha2VkIHRvIGVuc3VyZSBhIG1pbmltdW0gaW5jcmVtZW50IG9mIDEgdGljay4gVGhpcyBpcyBrZXk7IGl0IHByZXZlbnRzIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMgd2hlbiBkZWFsaW5nIHdpdGggZXh0cmVtZWx5IHNtYWxsIGludGVydmFscyBvciBsYXJnZSBjb3VudHMuIFRoYXQncyBhIGNsZXZlciBhbmQgbmVjZXNzYXJ5IGd1YXJkcmFpbCBhZ2FpbnN0IHRob3NlIGVkZ2UtY2FzZSBzY2VuYXJpb3MuXG5cblRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgY29kZWxfZGVxdWV1ZWAsIHdoZXJlIGRyb3AgbGltaXRpbmcgaGFzIGJlZW4gZXhwbGljaXRseSBhZGRlZC4gQSBgZHJvcHNgIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2l0aGluIHRoZSBkZXF1ZXVlIGxvb3AsIGFuZCBpZiBpdCBleGNlZWRzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLCB0aGUgY29kZSBub3cgc2V0cyBgZHJvcF9uZXh0YCB1c2luZyBgY29kZWxfY29udHJvbF9sYXdgIGFuZCB0aGVuIGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgbWVhbnMgdGhlIGRlcXVldWUgZnVuY3Rpb24gaXMgYmVpbmcgbWFkZSBtb3JlIHJvYnVzdCBhbmQgcHJldmVudHMgYSBzaW5nbGUgZGVxdWV1ZSBvcGVyYXRpb24gZnJvbSBnZXR0aW5nIHN0dWNrIGRyb3BwaW5nIHBhY2tldHMgaW5kZWZpbml0ZWx5LiBTbWFydC5cblxuVGhlIHNlbGZ0ZXN0cyBhcmUgYWxzbyB1cGRhdGVkLCB3aGljaCBpcyBnb29kLiBXZSBzaG91bGQgZXhwZWN0IHRob3NlIHRvIGNhdGNoIHBvdGVudGlhbCByZWdyZXNzaW9ucy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBDb2RlbCBhbmQgRlEtQ29kZWwgcWRpc2NzIGFyZSBlYXNpbHkgYXR0YWNoZWQgdG8gbmV0d29yayBpbnRlcmZhY2VzIGxpa2UgYGxvYCwgYGR1bW15YCwgYHZldGhgLCBvciBgdGFwYCB1c2luZyBgcnRuZXRsaW5rYCBmcm9tIHVzZXJzcGFjZS4gUGFja2V0IGVucXVldWUvZGVxdWV1ZSBvcGVyYXRpb25zIChgY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBmcV9jb2RlbF9kZXF1ZXVlYCwgZXRjLikgYXJlIHRyaWdnZXJlZCB0aHJvdWdoIHRoZXNlLiBBbHNvLCBpZiB0aGF0IHdhc24ndCBlbm91Z2gsIG1hYzgwMjExIGFsc28gdXNlcyBjb2RlbC4gVGhhdCdzIGEgZ29vZCBjb3ZlcmFnZSBwcm9maWxlLlxuXG5Db25zaWRlcmluZyB0aGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyAodGhlIHBhY2tldCBzY2hlZHVsaW5nIGFsZ29yaXRobSwgc3BlY2lmaWNhbGx5KSwgdGhhdCdzIGRlZmluaXRlbHkgXCJXb3J0aEZ1enppbmc9VFJVRVwiLiBUaGUgbG9naWMgaXMgbW9kaWZpZWQsIGl0J3MgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgYW5kIHdlJ3JlIGxvb2tpbmcgYXQgY29yZSBzdWJzeXN0ZW0gY2hhbmdlcywgdGhlIGtpbmQgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBvciBzZWN1cml0eSBpc3N1ZXMuIFRoZSByZWZhY3RvcmluZyBhc3BlY3QgaXMgYWxzbyBpbiBwbGF5IGhlcmUsIHNpbmNlIHRoZXJlIGlzIGEgcmVzdHJ1Y3R1cmluZyBvZiBhbGdvcml0aG0gZmxvd3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gc2VhcmNoIHRoZSBjb25maWdzIGFuZCBzeW1ib2xzIGNhcmVmdWxseSwgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NDksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoxMS4yOTU3NzA4MTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDcyNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEfGNvbmZpZyBORVRfU0NIX0NPREVMfGNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz0yNTU9Y29uZmlnIE5FVF9TQ0hfUUZRXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNjUtXFxubmV0L3NjaGVkL0tjb25maWc6MjY2OmNvbmZpZyBORVRfU0NIX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjY3LVxcdHRyaXN0YXRlIFxcXCJDb250cm9sbGVkIERlbGF5IEFRTSAoQ09ERUwpXFxcIlxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjc2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI3Nzpjb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbm5ldC9zY2hlZC9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiRmFpciBRdWV1ZSBDb250cm9sbGVkIERlbGF5IEFRTSAoRlFfQ09ERUwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoxMS4zNTc4NjEyMDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MzQ3MTQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfU0NIRURgIOKAkyB0aGUgbmV0d29yayBzY2hlZHVsZXIgaXRzZWxmLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDEgdG8gMjAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGtleSBkZXBlbmRlbmNpZXMgYXJlIG91dGxpbmVkLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gY2xhcmlmeSB0aGUgcHJlcmVxdWlzaXRlcywgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCBvciBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBgTkVUX1NDSEVEYCByZWxpZXMgdXBvbi4gVGhpcyBpbml0aWFsIHNjYW4gc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjEzLjYwMTMzNzA4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzExNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjEzLjYwMTUwOTgyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAyNzMyMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZm9yIFJlbGV2YW5jZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBwaXZvdCBhIGJpdCBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gbWFjODAyMTEuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgZGl2aW5nIGludG8gdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRoZXJlIHRoYXQgYXJlIGFsc28gcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhpcyBjdXJyZW50IGxpbmUgb2YgaW5xdWlyeS4gSXQncyBhIGtleSBjb25maWd1cmF0aW9uIGZpbGUsIHNvIGl0J3MgYSBjcml0aWNhbCBwbGFjZSB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgc29tZXRoaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG92ZXJsYXBzIGluIGZ1bmN0aW9uYWxpdHksIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBvciBhbnkgc3BlY2lmaWMgZmVhdHVyZXMgbWVudGlvbmVkIHRoYXQgY291bGQgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2JsZW0gc3BhY2UuIEdvdHRhIHN0YXkgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoxNS45MDQyNDUxMDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjQzNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjg6MTUuOTU2ODk1NjM5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTcwMzc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0YXRpYyBJbmxpbmUgRnVuY3Rpb25zIGFuZCBJZGVudGlmeWluZyBLZXkgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIENvZGVsIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZmlsZXM6IGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgLCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYCwgYW5kIHBvdGVudGlhbGx5IGBuZXQvbWFjODAyMTEvdHguY2AuIFRoZSBjb3JlIENvZGVsIGltcGxlbWVudGF0aW9uLCBgY29kZWxfY29udHJvbF9sYXdgIGFuZCBgY29kZWxfZGVxdWV1ZWAsIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdpdGhpbiBgaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oYC5cblxuTm93LCB0aGUgY2hhbGxlbmdlIHdpdGggc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIGFzIEkgcmVjYWxsLCBpcyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHRoZSB2bWxpbnV4IGltYWdlLiBUaGlzIG1lYW5zIEkgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0IHRoZW0gd2l0aCBjb3ZlcmFnZSBmaWx0ZXJzLiBUaGUga2VybmVsIGRvY3MgdGVsbCBtZSB0aGF0IGlmIG15IGNoYW5nZXMgYXJlIHByaW1hcmlseSB3aXRoaW4gdGhlc2Ugc3RhdGljIGlubGluZSBoZWxwZXJzLCBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyAqY2FsbGVyKiBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYC5jYCBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0uIEkgbmVlZCB0byBhdm9pZCBsaWZlY3ljbGUgd3JhcHBlcnMgdGhhdCBhcmUgdXNlZCBldmVyeXdoZXJlLlxuXG5UaGVyZWZvcmUsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBjYWxsZXIgZnVuY3Rpb25zIGluIGBuZXQvc2NoZWQvc2NoX2NvZGVsLmNgIGFuZCBgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jYC4gTGV0J3MgZ2V0IGEgbGlzdDogSSd2ZSBnb3QgYGNvZGVsX3FkaXNjX2RlcXVldWVgLCBgY29kZWxfcGVla2AsIGBjb2RlbF9pbml0YCwgYGNvZGVsX2NoYW5nZWAsIGBjb2RlbF9yZXNldGAsIGBjb2RlbF9kZXN0cm95YCwgYGNvZGVsX2R1bXBgLCBhbmQgYGNvZGVsX2R1bXBfc3RhdHNgIGluIGBzY2hfY29kZWwuY2AuIEkgbmVlZCB0byByZXZpZXcgYWxsIGZ1bmN0aW9ucyBpbiBib3RoIGBzY2hfY29kZWwuY2AgYW5kIGBzY2hfZnFfY29kZWwuY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGludm9rZWQuIFRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIEkgbWFrZSB0byB0aGUgQ29kZWwgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTAyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjE5LjI3MzkzODI0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3ODAzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsuKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfY29kZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2NvZGVsLmM9Mjg9c3RydWN0IGNvZGVsX3NjaGVkX2RhdGEge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTM4LSAqL1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozOTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy00MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtNTAtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjUxOnN0YXRpYyB2b2lkIGRyb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTUyLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy01OC1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NTk6c3RhdGljIHN0cnVjdCBza19idWZmICpfX2NvZGVsX3FkaXNjX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTYwLXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03Mi1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6NzM6c3RhdGljIHZvaWQgY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy03NC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtODQtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjg1OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfcWRpc2NfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtODYte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTk1LVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzo5NjpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTk3LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMTUtXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjExNjpzdGF0aWMgaW50IGNvZGVsX3FkaXNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTExNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY29kZWxfcG9saWN5W1RDQV9DT0RFTF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzctXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjEzODpzdGF0aWMgaW50IGNvZGVsX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xMzktXFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTE5Ny1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MTk4OnN0YXRpYyBpbnQgY29kZWxfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0xOTktXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTIyNi1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MjI3OnN0YXRpYyBpbnQgY29kZWxfZHVtcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjI4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYy0yNTctXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjI1ODpzdGF0aWMgaW50IGNvZGVsX2R1bXBfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBnbmV0X2R1bXAgKmQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI1OS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMjgzLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzoyODQ6c3RhdGljIHZvaWQgY29kZWxfcmVzZXQoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTI4NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM9MjkyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGNvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwNS19O1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMDY6TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcImNvZGVsXFxcIik7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwNy1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzA4OnN0YXRpYyBpbnQgX19pbml0IGNvZGVsX21vZHVsZV9pbml0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMwOS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzEyLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMTM6c3RhdGljIHZvaWQgX19leGl0IGNvZGVsX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jLTMxNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzE3LVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMTg6bW9kdWxlX2luaXQoY29kZWxfbW9kdWxlX2luaXQpXFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjMxOTptb2R1bGVfZXhpdChjb2RlbF9tb2R1bGVfZXhpdClcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmMtMzIwLVxcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjE6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb250cm9sbGVkIERlbGF5IHF1ZXVlIGRpc2NpcGxpbmVcXFwiKTtcXG5uZXQvc2NoZWQvc2NoX2NvZGVsLmM6MzIyOk1PRFVMRV9BVVRIT1IoXFxcIkRhdmUgVGFodFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfY29kZWwuYzozMjM6TU9EVUxFX0FVVEhPUihcXFwiRXJpYyBEdW1hemV0XFxcIik7XFxubmV0L3NjaGVkL3NjaF9jb2RlbC5jOjMyNDpNT0RVTEVfTElDRU5TRShcXFwiRHVhbCBCU0QvR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjE5LjMzNTcyNTY0OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIzNjk2NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc2NoX2ZxX2NvZGVsLmNgIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSBGUS1Db0RlbCBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb24uIFdlJ3ZlIGNvdmVyZWQgdGhlIGJhc2ljcywgYnV0IGl0J3MgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgc2lnbmlmaWNhbnQuIFRvIGdldCBhIHJlYWxseSBzb2xpZCBncmFzcCBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGZvY3VzIHNwZWNpZmljYWxseSBvbiB0aGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHdpdGhpbiBgc2NoX2ZxX2NvZGVsLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWUgbnVhbmNlIHRoZXJlIHRoYXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjaGVkdWxlcidzIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgbG9hZCBjb25kaXRpb25zLCBlc3BlY2lhbGx5IHRoZSBlZGdlIGNhc2VzLiBHb3R0YSBlbnN1cmUgSSdtIGdldHRpbmcgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhhdCBJJ20gZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgY29kZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwMDAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoyMS40NTk0Mjc3OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3Njg3NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsuKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NTA9c3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY5LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3MDpzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2hhc2goY29uc3Qgc3RydWN0IGZxX2NvZGVsX3NjaGVkX2RhdGEgKnEsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTcxLVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY6c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzctXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTExNS0vKiByZW1vdmUgb25lIHNrYiBmcm9tIGhlYWQgb2Ygc2xvdCBxdWV1ZSAqL1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxMTY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqZGVxdWV1ZV9oZWFkKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93KVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMTcte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTEyNS0vKiBhZGQgc2tiIHRvIGZsb3cgcXVldWUgKHRhaWwgYWRkKSAqL1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxMjY6c3RhdGljIGlubGluZSB2b2lkIGZsb3dfcXVldWVfYWRkKHN0cnVjdCBmcV9jb2RlbF9mbG93ICpmbG93LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMjctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTEzNi1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MTM3OnN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfZHJvcChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgaW50IG1heF9wYWNrZXRzLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xMzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTg0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxODU6c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xODYtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTYtICovXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjI1NzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRlcXVldWVfZnVuYyhzdHJ1Y3QgY29kZWxfdmFycyAqdmFycywgdm9pZCAqY3R4KVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0yNTgte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI3NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Mjc2OnN0YXRpYyB2b2lkIGRyb3BfZnVuYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI3Ny17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMjgzLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoyODQ6c3RhdGljIHN0cnVjdCBza19idWZmICpfX2ZxX2NvZGVsX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTI4NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzIzLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozMjQ6c3RhdGljIHZvaWQgZnFfY29kZWxfZGVxdWV1ZV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zMjUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTMzNS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MzM2OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZnFfY29kZWxfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzM3LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNDYtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM0NzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZxX2NvZGVsX3BlZWsoc3RydWN0IFFkaXNjICpzY2gpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTM0OC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzY2LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzozNjc6c3RhdGljIHZvaWQgZnFfY29kZWxfZmxvd19wdXJnZShzdHJ1Y3QgZnFfY29kZWxfZmxvdyAqZmxvdylcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzY4LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0zNzItXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjM3MzpzdGF0aWMgdm9pZCBmcV9jb2RlbF9yZXNldChzdHJ1Y3QgUWRpc2MgKnNjaClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMzc0LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0zOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZxX2NvZGVsX3BvbGljeVtUQ0FfRlFfQ09ERUxfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo0MDU6c3RhdGljIGludCBmcV9jb2RlbF9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNDA2LVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy00OTgtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjQ5OTpzdGF0aWMgdm9pZCBmcV9jb2RlbF9kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01MDAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTUwNy1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NTA4OnN0YXRpYyBpbnQgZnFfY29kZWxfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01MDktXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy01NzMtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjU3NDpzdGF0aWMgaW50IGZxX2NvZGVsX2R1bXAoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTU3NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjIwLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2MjE6c3RhdGljIGludCBmcV9jb2RlbF9kdW1wX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgZ25ldF9kdW1wICpkKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02MjIte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY0OC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjQ5OnN0YXRpYyBzdHJ1Y3QgUWRpc2MgKmZxX2NvZGVsX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTAte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY1My1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjU0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZxX2NvZGVsX2ZpbmQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NTUte1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY1OC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGZxX2NvZGVsX2JpbmQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NjAtXFx0XFx0XFx0ICAgICAgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjY0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo2NjU6c3RhdGljIHZvaWQgZnFfY29kZWxfdW5iaW5kKHN0cnVjdCBRZGlzYyAqcSwgdW5zaWduZWQgbG9uZyBjbClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjY2LXtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NjgtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY2OTpzdGF0aWMgc3RydWN0IHRjZl9ibG9jayAqZnFfY29kZWxfdGNmX2Jsb2NrKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NzAtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy02NzgtXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjY3OTpzdGF0aWMgaW50IGZxX2NvZGVsX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY4MC1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTY4NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Njg2OnN0YXRpYyBpbnQgZnFfY29kZWxfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNjg3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGduZXRfZHVtcCAqZClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03MzItXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjczMzpzdGF0aWMgdm9pZCBmcV9jb2RlbF93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTczNC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NzYyPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGZxX2NvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3Ni19O1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3Nzc6TU9EVUxFX0FMSUFTX05FVF9TQ0goXFxcImZxX2NvZGVsXFxcIik7XFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3OC1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6Nzc5OnN0YXRpYyBpbnQgX19pbml0IGZxX2NvZGVsX21vZHVsZV9pbml0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc4MC17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzgzLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3ODQ6c3RhdGljIHZvaWQgX19leGl0IGZxX2NvZGVsX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc4NS17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzg4LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3ODk6bW9kdWxlX2luaXQoZnFfY29kZWxfbW9kdWxlX2luaXQpXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jOjc5MDptb2R1bGVfZXhpdChmcV9jb2RlbF9tb2R1bGVfZXhpdClcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzkxOk1PRFVMRV9BVVRIT1IoXFxcIkVyaWMgRHVtYXpldFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3OTI6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3OTM6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJGYWlyIFF1ZXVlIENvRGVsIGRpc2NpcGxpbmVcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6Mjg6MjEuNTExMjA2MTQ2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzE3NzQ4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29EZWwgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCB0aGlzIENvRGVsIHBhdGNoIHRvdWNoZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgLCBzcGVjaWZpY2FsbHkgYGNvZGVsX2NvbnRyb2xfbGF3YCBhbmQgYGNvZGVsX2RlcXVldWVgLiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgY2FsbCBwb2ludHMuIEluIHRoZSBgc2NoX2NvZGVsLmNgIGFuZCBgc2NoX2ZxX2NvZGVsLmNgIGZpbGVzLCB0aGUgcGF0Y2ggaW1wYWN0cyBgY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9wZWVrYCwgYF9fY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBmcV9jb2RlbF9kZXF1ZXVlYCwgYGZxX2NvZGVsX3BlZWtgLCBgX19mcV9jb2RlbF9kZXF1ZXVlYCwgYGNvZGVsX2NoYW5nZWAsIGFuZCBgZnFfY29kZWxfY2hhbmdlYC4gV2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIGBmcV90aW5fZGVxdWV1ZV9mdW5jYCBpbiBgbmV0L21hYzgwMjExL3R4LmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gY3JlYXRlIGEgbGlzdCBvZiB0aGUgYEZvY3VzU3ltYm9sc2AuIEV2ZW4gaWYgYGNvZGVsX2RlcXVldWVgIGlzIGlubGluZSAod2hpY2ggaXQgdXN1YWxseSBpcyBpbiBoZWFkZXJzKSwgaXQgbWlnaHQgbm90IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgd2UgbmVlZCB0byBjb25zaWRlciBjYWxsZXJzLCBzbyBJIHNob3VsZCBsaXN0IHRoZW0gYWxsOiBgY29kZWxfcWRpc2NfZGVxdWV1ZWAsIGBjb2RlbF9wZWVrYCwgYGZxX2NvZGVsX2RlcXVldWVgLCBgZnFfY29kZWxfcGVla2AsIGBjb2RlbF9jaGFuZ2VgLCBgZnFfY29kZWxfY2hhbmdlYCwgYW5kIGBmcV90aW5fZGVxdWV1ZV9mdW5jYC5cblxuTm93IGxldCdzIGNoZWNrIHRoZSByZWxldmFudCBgRW5hYmxlQ29uZmlnc2AuIFdlJ3ZlIGdvdCBgTkVUX1NDSF9DT0RFTGAsIGBORVRfU0NIX0ZRX0NPREVMYCwgYE5FVF9TQ0hFRGAsIGFuZCBgTUFDODAyMTFgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gc2VlIGlmIGFueSBvdGhlciBLY29uZmlncyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYE5FVF9TQ0hFRGAgZW5hYmxlcyBgTkVUX1NDSF9DT0RFTGAgYW5kIGBORVRfU0NIX0ZRX0NPREVMYCwgYW5kIGBNQUM4MDIxMWAgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgLCBgTkVUREVWSUNFU2AsIGFuZCBgV0xBTmAuXG5cblNvLCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IG1vZGlmaWVzIHRoZSBDb0RlbCBBUU0gYWxnb3JpdGhtIHdoaWNoIGhhbmRsZXMgcXVldWUgbWFuYWdlbWVudC4gSXQgdGFja2xlcyBzdGFsbHMgYW5kIGluZmluaXRlIGRyb3AgbG9vcHMgYnkgbGltaXRpbmcgdGhlIGNvbnRyb2wgbGF3IHRpbWUgaW5jcmVtZW50IGFuZCBjYXBwaW5nIGNvbnNlY3V0aXZlIHBhY2tldCBkcm9wcyBpbiBgY29kZWxfZGVxdWV1ZWAgd2l0aCBgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFID0gMjU2YCBhbmQgcmVzeW5jaW5nIGBkcm9wX25leHRgIHdoZW4gaXQgaXMgZXhjZWVkZWQuIFRoaXMgY29kZSBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBRb1MgYW5kIHBhY2tldCBzY2hlZHVsaW5nLCBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYHRjL3J0bmV0bGlua2AgdXNpbmcgYGNvZGVsYCBvciBgZnFfY29kZWxgIHFkaXNjcywgb3IgYnkgdGhlIGBtYWM4MDIxMWAgdHggcXVldWVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgd2VsbC1mb3JtYXR0ZWQgYW5kIGFjY3VyYXRlLiBUaGlzIGNvdmVycyB0aGUgZnVuY3Rpb25zLCB0aGUgY29uZmlncywgYW5kIHRoZSByZWFzb25pbmcgZm9yIHdoeSB0aGlzIGlzIHdvcnRoIG91ciBhdHRlbnRpb24uIFNlZW1zIGxpa2Ugd2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NzIsIk91dHB1dFRva2VucyI6MjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjI3Ljk0Mjk4NDQ1OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjE1NTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZWxfcWRpc2NfZGVxdWV1ZVwiLFxuICAgIFwiY29kZWxfcGVla1wiLFxuICAgIFwiY29kZWxfY2hhbmdlXCIsXG4gICAgXCJmcV9jb2RlbF9kZXF1ZXVlXCIsXG4gICAgXCJmcV9jb2RlbF9wZWVrXCIsXG4gICAgXCJmcV9jb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX3Rpbl9kZXF1ZXVlX2Z1bmNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ29EZWwgQWN0aXZlIFF1ZXVlIE1hbmFnZW1lbnQgKEFRTSkgaW1wbGVtZW50YXRpb24gaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIChjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSkuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgdGltZSBzdGVwIHRvIGF0IGxlYXN0IDEgdGljayB0byBwcmV2ZW50IHN0YWxscyBvbiBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgZHJvcCBjb3VudHMsIGFuZCBpbnRyb2R1Y2VzIGEgY2FwIG9uIGNvbnNlY3V0aXZlIGRyb3BzIHBlciBkZXF1ZXVlIChDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUUpIHRvIHByZXZlbnQgZXhjZXNzaXZlIGRyb3AgbG9vcHMgd2hlbiBmYWxsaW5nIGJlaGluZCBzY2hlZHVsZS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgc2NoZWR1bGluZyBsb2dpYyBhbmQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0cmFmZmljIGNvbnRyb2wgKHNjaF9jb2RlbCwgc2NoX2ZxX2NvZGVsKSBhbmQgbWFjODAyMTEgd2lyZWxlc3MgcXVldWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb2RlbF9xZGlzY19kZXF1ZXVlXCIsXG4gICAgXCJjb2RlbF9wZWVrXCIsXG4gICAgXCJjb2RlbF9jaGFuZ2VcIixcbiAgICBcImZxX2NvZGVsX2RlcXVldWVcIixcbiAgICBcImZxX2NvZGVsX3BlZWtcIixcbiAgICBcImZxX2NvZGVsX2NoYW5nZVwiLFxuICAgIFwiZnFfdGluX2RlcXVldWVfZnVuY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBBY3RpdmUgUXVldWUgTWFuYWdlbWVudCAoQVFNKSBpbXBsZW1lbnRhdGlvbiBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmggKGNvZGVsX2NvbnRyb2xfbGF3IGFuZCBjb2RlbF9kZXF1ZXVlKS4gSXQgY2xhbXBzIHRoZSBjb250cm9sIGxhdyB0aW1lIHN0ZXAgdG8gYXQgbGVhc3QgMSB0aWNrIHRvIHByZXZlbnQgc3RhbGxzIG9uIHNtYWxsIGludGVydmFscyBvciBsYXJnZSBkcm9wIGNvdW50cywgYW5kIGludHJvZHVjZXMgYSBjYXAgb24gY29uc2VjdXRpdmUgZHJvcHMgcGVyIGRlcXVldWUgKENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRSkgdG8gcHJldmVudCBleGNlc3NpdmUgZHJvcCBsb29wcyB3aGVuIGZhbGxpbmcgYmVoaW5kIHNjaGVkdWxlLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBzY2hlZHVsaW5nIGxvZ2ljIGFuZCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRyYWZmaWMgY29udHJvbCAoc2NoX2NvZGVsLCBzY2hfZnFfY29kZWwpIGFuZCBtYWM4MDIxMSB3aXJlbGVzcyBxdWV1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjI4LjAzNTYxMTQzMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTUxNDM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODoyOC4wMzYzMDQ1MTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTYxNDQ0NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxcblxcblRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIChgZHJvcHNgKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aCBjb21wdXRhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU0NmFmYzI2MmJkYjI0Y2Q1OWYyZGE4ZGUzOTAzMDQ1ZGFhYzYwZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjI3OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWwuaCBiL2luY2x1ZGUvbmV0L2NvZGVsLmhcbmluZGV4IGFhODBmNzQ0ODI2Y2QuLjE4M2Q0M2MyYmQ0MzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jb2RlbC5oXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbC5oXG5AQCAtMTQwLDYgKzE0MCwxMSBAQCBzdHJ1Y3QgY29kZWxfdmFycyB7XG4gLyogbmVlZGVkIHNoaWZ0IHRvIGdldCBhIFEwLjMyIG51bWJlciBmcm9tIHJlY19pbnZfc3FydCAqL1xuICNkZWZpbmUgUkVDX0lOVl9TUVJUX1NISUZUICgzMiAtIFJFQ19JTlZfU1FSVF9CSVRTKVxuIFxuKy8qIENhcCBvbiBkcm9wcyBwZXIgY29kZWxfZGVxdWV1ZSgpIGNhbGw6IHRoZSBsb29wJ3Mgd29yayBkZXBlbmRzIG9uIHRoZVxuKyAqIGlkbGUgZ2FwIGFuZCBiYWNrbG9nLCBib3RoIG91dHNpZGUgb3VyIGNvbnRyb2w7IHJlc3luYyB3aGVuIGV4Y2VlZGVkLlxuKyAqL1xuKyNkZWZpbmUgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFIDI1NlxuK1xuIC8qKlxuICAqIHN0cnVjdCBjb2RlbF9zdGF0cyAtIGNvbnRhaW5zIGNvZGVsIHNoYXJlZCB2YXJpYWJsZXMgYW5kIHN0YXRzXG4gICogQG1heHBhY2tldDpcdGxhcmdlc3QgcGFja2V0IHdlJ3ZlIHNlZW4gc28gZmFyXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oIGIvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG5pbmRleCAyYzFmMGVjMzA5ZTlmLi45ZTc3OWNkNGQ2ZGViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXG4rKysgYi9pbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhcbkBAIC05MywxMiArOTMsMTcgQEAgc3RhdGljIHZvaWQgY29kZWxfTmV3dG9uX3N0ZXAoc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMpXG4gICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCArIGludGVydmFsL3NxcnQoY291bnQpXG4gICogV2UgbWFpbnRhaW4gaW4gcmVjX2ludl9zcXJ0IHRoZSByZWNpcHJvY2FsIHZhbHVlIG9mIHNxcnQoY291bnQpIHRvIGF2b2lkXG4gICogYm90aCBzcXJ0KCkgYW5kIGRpdmlkZSBvcGVyYXRpb24uXG4rICpcbisgKiBDbGFtcCB0aGUgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljazogYSB2ZXJ5IHNtYWxsIGludGVydmFsIChvciBhXG4rICogbGFyZ2UgY291bnQpIGNhbiB0cnVuY2F0ZSBpdCB0byB6ZXJvLCBzdGFsbGluZyB0aGUgZHJvcHBpbmcgbG9vcC5cbiAgKi9cbiBzdGF0aWMgY29kZWxfdGltZV90IGNvZGVsX2NvbnRyb2xfbGF3KGNvZGVsX3RpbWVfdCB0LFxuIFx0XHRcdFx0ICAgICAgY29kZWxfdGltZV90IGludGVydmFsLFxuIFx0XHRcdFx0ICAgICAgdTMyIHJlY19pbnZfc3FydClcbiB7XG4tXHRyZXR1cm4gdCArIHJlY2lwcm9jYWxfc2NhbGUoaW50ZXJ2YWwsIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKTtcbitcdHJldHVybiB0ICsgbWF4X3QodTMyLCAxLFxuK1x0XHRcdCByZWNpcHJvY2FsX3NjYWxlKGludGVydmFsLFxuK1x0XHRcdFx0XHQgIHJlY19pbnZfc3FydCBcdTAwM2NcdTAwM2MgUkVDX0lOVl9TUVJUX1NISUZUKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGNvZGVsX3Nob3VsZF9kcm9wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU2LDYgKzE2MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XG4gXHRjb2RlbF90aW1lX3Qgbm93O1xuIFx0Ym9vbCBkcm9wO1xuK1x0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcbiBcbiBcdGlmICghc2tiKSB7XG4gXHRcdHZhcnMtXHUwMDNlZmlyc3RfYWJvdmVfdGltZSA9IDA7XG5AQCAtMTgwLDYgKzE4NiwxNCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNvZGVsX2RlcXVldWUodm9pZCAqY3R4LFxuIFx0XHRcdCAqL1xuIFx0XHRcdHdoaWxlICh2YXJzLVx1MDAzZWRyb3BwaW5nIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cdTAwM2Vkcm9wX25leHQpKSB7XG4rXHRcdFx0XHRpZiAoKytkcm9wcyBcdTAwM2UgQ09ERUxfTUFYX0RST1BTX1BFUl9ERVFVRVVFKSB7XG4rXHRcdFx0XHRcdC8qIGZlbGwgZmFyIGJlaGluZCB0aGUgc2NoZWR1bGUgKi9cbitcdFx0XHRcdFx0V1JJVEVfT05DRSh2YXJzLVx1MDAzZWRyb3BfbmV4dCxcbitcdFx0XHRcdFx0XHQgICBjb2RlbF9jb250cm9sX2xhdyhub3csXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZWludGVydmFsLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgIHZhcnMtXHUwMDNlcmVjX2ludl9zcXJ0KSk7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0LyogZG9udCBjYXJlIG9mIHBvc3NpYmxlIHdyYXBcbiBcdFx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIG1vcmUgZGl2aWRlLlxuIFx0XHRcdFx0ICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2NvZGVsLmpzb25cbmluZGV4IDZkNTE1ZDBlNWVkNjkuLmE4OTRlNmYwZTI2NzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9jb2RlbC5qc29uXG5AQCAtMjEzLDUgKzIxMyw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxMDBtc1wiLFxuICAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiNmU0NFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIENPREVMIHdpdGggMXVzIGludGVydmFsLCBhY2NlcHRlZCAoc3ViLXRpY2ssIHVBUEkgbG9ja2VkKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgY29kZWwgaW50ZXJ2YWwgMXVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGNvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDAwcCB0YXJnZXQgNW1zIGludGVydmFsIDB1c1wiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE4YzNcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBDT0RFTCB3aXRoIDN1cyBpbnRlcnZhbCwgYWNjZXB0ZWQgKHR3byB0aWNrcylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDN1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAydXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJhNjk1XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxMDI0dXMgaW50ZXJ2YWwgYm91bmRhcnkgYWNjZXB0ZWRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIGludGVydmFsIDEwMjR1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBjb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAwMHAgdGFyZ2V0IDVtcyBpbnRlcnZhbCAxLjAybXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI5NzkzXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgQ09ERUwgd2l0aCAxdXMgdGFyZ2V0LCBhY2NlcHRlZCAodGFyZ2V0IG5vdCBpbiBjb250cm9sIGxhdylcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImNvZGVsXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIHFkaXNjIGFkZCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290IGNvZGVsIHRhcmdldCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMDBwIHRhcmdldCAwdXMgaW50ZXJ2YWwgMTAwbXNcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1wiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJdXG4gICAgIH1cbiBdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvZnFfY29kZWwuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2ZxX2NvZGVsLmpzb25cbmluZGV4IDRjZTYyYjg1N2ZkN2EuLmRlNmExYjhkOTU0YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9mcV9jb2RlbC5qc29uXG5AQCAtMzE2LDUgKzMxNiw3NyBAQFxuICAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMXAgZmxvd3MgMTAyNCBxdWFudHVtLip0YXJnZXQgNW1zIGludGVydmFsIDEwMG1zIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4gICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGhhbmRsZSAxOiByb290XCJdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIxYjRkXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJDcmVhdGUgRlFfQ09ERUwgd2l0aCAxdXMgaW50ZXJ2YWwsIGFjY2VwdGVkIChzdWItdGljaywgdUFQSSBsb2NrZWQpXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcInFkaXNjXCIsXG4rICAgICAgICAgICAgXCJmcV9jb2RlbFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW10sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBxZGlzYyBhZGQgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCBmcV9jb2RlbCBpbnRlcnZhbCAxdXNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBxZGlzYyBzaG93IGRldiAkRFVNTVlcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwicWRpc2MgZnFfY29kZWwgMTogcm9vdCByZWZjbnQgWzAtOV0rIGxpbWl0IDEwMjQwcCBmbG93cyAxMDI0IHF1YW50dW0gWzAtOV0rIHRhcmdldCA1bXMgaW50ZXJ2YWwgMHVzIG1lbW9yeV9saW1pdCAzMk1iIGVjbiBkcm9wX2JhdGNoIDY0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiMzU0MFwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiQ3JlYXRlIEZRX0NPREVMIHdpdGggM3VzIGludGVydmFsLCBhY2NlcHRlZCAodHdvIHRpY2tzKVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgM3VzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDJ1cyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjQ5YzVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDEwMjR1cyBpbnRlcnZhbCBib3VuZGFyeSBhY2NlcHRlZFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgaW50ZXJ2YWwgMTAyNHVzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgcWRpc2Mgc2hvdyBkZXYgJERVTU1ZXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInFkaXNjIGZxX2NvZGVsIDE6IHJvb3QgcmVmY250IFswLTldKyBsaW1pdCAxMDI0MHAgZmxvd3MgMTAyNCBxdWFudHVtIFswLTldKyB0YXJnZXQgNW1zIGludGVydmFsIDEuMDJtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjNlMGZcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkNyZWF0ZSBGUV9DT0RFTCB3aXRoIDF1cyB0YXJnZXQsIGFjY2VwdGVkICh0YXJnZXQgbm90IGluIGNvbnRyb2wgbGF3KVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiZnFfY29kZWxcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgcWRpc2MgYWRkIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3QgZnFfY29kZWwgdGFyZ2V0IDF1c1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIHFkaXNjIHNob3cgZGV2ICREVU1NWVwiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJxZGlzYyBmcV9jb2RlbCAxOiByb290IHJlZmNudCBbMC05XSsgbGltaXQgMTAyNDBwIGZsb3dzIDEwMjQgcXVhbnR1bSBbMC05XSsgdGFyZ2V0IDB1cyBpbnRlcnZhbCAxMDBtcyBtZW1vcnlfbGltaXQgMzJNYiBlY24gZHJvcF9iYXRjaCA2NFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXCIkVEMgcWRpc2MgZGVsIGRldiAkRFVNTVkgaGFuZGxlIDE6IHJvb3RcIl1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjI4LjAzNjMwNTQ5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI1NjU2OTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENPREVMIFBhdGNoIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHJlcXVpcmluZyBLTVNBTiBmdXp6aW5nLiBJJ2xsIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2VzIHByaW1hcmlseSByZXZvbHZlIGFyb3VuZCB0aGUgQ09ERUwgcXVldWluZyBkaXNjaXBsaW5lLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBpbmNsdWRlL25ldC9jb2RlbC5oYCBhbmQgYGluY2x1ZGUvbmV0L2NvZGVsX2ltcGwuaGAuIExpbmUgMSBkZWZpbmVzIGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgIGFzIDI1Niwgc28gbm90aGluZyB0byBzZWUgdGhlcmUuXG5cbk1vdmluZyBpbnRvIGBjb2RlbF9pbXBsLmhgLCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXRzIHN0YXJ0IHRvIGFwcGVhci4gSW4gYGNvZGVsX2NvbnRyb2xfbGF3YCwgdGhlIGNsYW1wIG9uIHRoZSBpbmNyZW1lbnQgbG9va3MgZmluZSDigJMgaXQncyBleHBsaWNpdGx5IGVuc3VyaW5nIHRoZSByZXR1cm4gdmFsdWUgaXMgd2l0aGluIGFjY2VwdGFibGUgYm91bmRzLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBpbiBgY29kZWxfZGVxdWV1ZWAuIEkgbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgdW5zaWduZWQgaW50IGRyb3BzID0gMDtgLiBBaCwgaXQncyAqaW5pdGlhbGl6ZWQqISBUaGF0J3MgZXhjZWxsZW50OyB0aGlzIGlzIGdvb2QgcHJhY3RpY2UgYW5kIGxpa2VseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gVGhlIGBkcm9wc2AgdmFyaWFibGUgaXMgaW5jcmVtZW50ZWQgaW4gYSB3aGlsZSBsb29wIGFuZCB0aGVuIGNoZWNrZWQgYWdhaW5zdCB0aGF0IGBDT0RFTF9NQVhfRFJPUFNfUEVSX0RFUVVFVUVgLiBJZiBpdCBleGNlZWRzIHRoZSBtYXhpbXVtLCB0aGUgY29udHJvbCBsYXcgaXMgYXBwbGllZCBhbmQgYGJyZWFrO2AgaXMgaW52b2tlZC4gSXQgbG9va3MgbGlrZSBpdCdzIHByb3Blcmx5IHByZXZlbnRpbmcgYW4gaW5maW5pdGUgbG9vcCBhbmQgbGltaXRpbmcgdGhlIG51bWJlciBvZiBkcm9wcy5cblxuVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBhcmVhcyBhcm91bmQgbGluZXMgOTAtMjAwIG9mIGBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmhgIHdoZXJlIGBjb2RlbF9kZXF1ZXVlYCBhbmQgYGNvZGVsX2NvbnRyb2xfbGF3YCBhcmUgbGlrZWx5IGRlZmluZWQgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucyBhbmQgaG93IHRoZSB2YXJpYWJsZXMgYXJlIHVzZWQuIFRoZSBzZWxmLXRlc3QgdXBkYXRlcyBhcmUgcHJvYmFibHkganVzdCBhZGRlZCBmb3IgdGhlIHNha2Ugb2YgY29tcGxldGVuZXNzLlxuXG5PbiBpbml0aWFsIGdsYW5jZSwgSSdtIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSwgZ2xhcmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoaXMgbG9va3MgcHJldHR5IHNvbGlkLiBIb3dldmVyLCBJIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZnVsbCBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODozOS4yOTI4ODA3MjRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXG4gIDg2OlxcdFxcdHZhbCBcXHUwMDNlXFx1MDAzZT0gMjsgLyogYXZvaWQgb3ZlcmZsb3cgaW4gZm9sbG93aW5nIG11bHRpcGx5ICovXFxuICA4NzpcXHRcXHR2YWwgPSAodmFsICogaW52c3FydCkgXFx1MDAzZVxcdTAwM2UgKDMyIC0gMiArIDEpO1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHR2YXJzLVxcdTAwM2VyZWNfaW52X3NxcnQgPSB2YWwgXFx1MDAzZVxcdTAwM2UgUkVDX0lOVl9TUVJUX1NISUZUO1xcbiAgOTA6XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHQvKlxcbiAgOTM6XFx0ICogQ29EZWwgY29udHJvbF9sYXcgaXMgdCArIGludGVydmFsL3NxcnQoY291bnQpXFxuICA5NDpcXHQgKiBXZSBtYWludGFpbiBpbiByZWNfaW52X3NxcnQgdGhlIHJlY2lwcm9jYWwgdmFsdWUgb2Ygc3FydChjb3VudCkgdG8gYXZvaWRcXG4gIDk1OlxcdCAqIGJvdGggc3FydCgpIGFuZCBkaXZpZGUgb3BlcmF0aW9uLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIENsYW1wIHRoZSBpbmNyZW1lbnQgdG8gYXQgbGVhc3QgMSB0aWNrOiBhIHZlcnkgc21hbGwgaW50ZXJ2YWwgKG9yIGFcXG4gIDk4OlxcdCAqIGxhcmdlIGNvdW50KSBjYW4gdHJ1bmNhdGUgaXQgdG8gemVybywgc3RhbGxpbmcgdGhlIGRyb3BwaW5nIGxvb3AuXFxuICA5OTpcXHQgKi9cXG4gMTAwOlxcdHN0YXRpYyBjb2RlbF90aW1lX3QgY29kZWxfY29udHJvbF9sYXcoY29kZWxfdGltZV90IHQsXFxuIDEwMTpcXHRcXHRcXHRcXHRcXHQgICAgICBjb2RlbF90aW1lX3QgaW50ZXJ2YWwsXFxuIDEwMjpcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgcmVjX2ludl9zcXJ0KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0cmV0dXJuIHQgKyBtYXhfdCh1MzIsIDEsXFxuIDEwNTpcXHRcXHRcXHRcXHQgcmVjaXByb2NhbF9zY2FsZShpbnRlcnZhbCxcXG4gMTA2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcmVjX2ludl9zcXJ0IFxcdTAwM2NcXHUwMDNjIFJFQ19JTlZfU1FSVF9TSElGVCkpO1xcbiAxMDc6XFx0fVxcbiAxMDg6XFx0XFxuIDEwOTpcXHRzdGF0aWMgYm9vbCBjb2RlbF9zaG91bGRfZHJvcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxMTA6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqY3R4LFxcbiAxMTE6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGNvZGVsX3ZhcnMgKnZhcnMsXFxuIDExMjpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY29kZWxfcGFyYW1zICpwYXJhbXMsXFxuIDExMzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgY29kZWxfc3RhdHMgKnN0YXRzLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgICAgY29kZWxfc2tiX2xlbl90IHNrYl9sZW5fZnVuYyxcXG4gMTE1OlxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3NrYl90aW1lX3Qgc2tiX3RpbWVfZnVuYyxcXG4gMTE2OlxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYmFja2xvZyxcXG4gMTE3OlxcdFxcdFxcdFxcdCAgICAgIGNvZGVsX3RpbWVfdCBub3cpXFxuIDExODpcXHR7XFxuIDExOTpcXHRcXHRib29sIG9rX3RvX2Ryb3A7XFxuIDEyMDpcXHRcXHR1MzIgc2tiX2xlbjtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0aWYgKCFza2IpIHtcXG4gMTIzOlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xcbiAxMjQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMjU6XFx0XFx0fVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRza2JfbGVuID0gc2tiX2xlbl9mdW5jKHNrYik7XFxuIDEyODpcXHRcXHRXUklURV9PTkNFKHZhcnMtXFx1MDAzZWxkZWxheSwgbm93IC0gc2tiX3RpbWVfZnVuYyhza2IpKTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9sZW4gXFx1MDAzZSBzdGF0cy1cXHUwMDNlbWF4cGFja2V0KSlcXG4gMTMxOlxcdFxcdFxcdFdSSVRFX09OQ0Uoc3RhdHMtXFx1MDAzZW1heHBhY2tldCwgc2tiX2xlbik7XFxuIDEzMjpcXHRcXG4gMTMzOlxcdFxcdGlmIChjb2RlbF90aW1lX2JlZm9yZSh2YXJzLVxcdTAwM2VsZGVsYXksIHBhcmFtcy1cXHUwMDNldGFyZ2V0KSB8fFxcbiAxMzQ6XFx0XFx0ICAgICpiYWNrbG9nIFxcdTAwM2M9IHBhcmFtcy1cXHUwMDNlbXR1KSB7XFxuIDEzNTpcXHRcXHRcXHQvKiB3ZW50IGJlbG93IC0gc3RheSBiZWxvdyBmb3IgYXQgbGVhc3QgaW50ZXJ2YWwgKi9cXG4gMTM2OlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xcbiAxMzc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMzg6XFx0XFx0fVxcbiAxMzk6XFx0XFx0b2tfdG9fZHJvcCA9IGZhbHNlO1xcbiAxNDA6XFx0XFx0aWYgKHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPT0gMCkge1xcbiAxNDE6XFx0XFx0XFx0LyoganVzdCB3ZW50IGFib3ZlIGZyb20gYmVsb3cuIElmIHdlIHN0YXkgYWJvdmVcXG4gMTQyOlxcdFxcdFxcdCAqIGZvciBhdCBsZWFzdCBpbnRlcnZhbCB3ZSdsbCBzYXkgaXQncyBvayB0byBkcm9wXFxuIDE0MzpcXHRcXHRcXHQgKi9cXG4gMTQ0OlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSBub3cgKyBwYXJhbXMtXFx1MDAzZWludGVydmFsO1xcbiAxNDU6XFx0XFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyKG5vdywgdmFycy1cXHUwMDNlZmlyc3RfYWJvdmVfdGltZSkpIHtcXG4gMTQ2OlxcdFxcdFxcdG9rX3RvX2Ryb3AgPSB0cnVlO1xcbiAxNDc6XFx0XFx0fVxcbiAxNDg6XFx0XFx0cmV0dXJuIG9rX3RvX2Ryb3A7XFxuIDE0OTpcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY29kZWxfZGVxdWV1ZSh2b2lkICpjdHgsXFxuIDE1MjpcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiAqYmFja2xvZyxcXG4gMTUzOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3BhcmFtcyAqcGFyYW1zLFxcbiAxNTQ6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY29kZWxfdmFycyAqdmFycyxcXG4gMTU1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvZGVsX3N0YXRzICpzdGF0cyxcXG4gMTU2OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2xlbl90IHNrYl9sZW5fZnVuYyxcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX3RpbWVfdCBza2JfdGltZV9mdW5jLFxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0ICAgICBjb2RlbF9za2JfZHJvcF90IGRyb3BfZnVuYyxcXG4gMTU5OlxcdFxcdFxcdFxcdFxcdCAgICAgY29kZWxfc2tiX2RlcXVldWVfdCBkZXF1ZXVlX2Z1bmMpXFxuIDE2MDpcXHR7XFxuIDE2MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGVxdWV1ZV9mdW5jKHZhcnMsIGN0eCk7XFxuIDE2MjpcXHRcXHRjb2RlbF90aW1lX3Qgbm93O1xcbiAxNjM6XFx0XFx0Ym9vbCBkcm9wO1xcbiAxNjQ6XFx0XFx0dW5zaWduZWQgaW50IGRyb3BzID0gMDtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0aWYgKCFza2IpIHtcXG4gMTY3OlxcdFxcdFxcdHZhcnMtXFx1MDAzZWZpcnN0X2Fib3ZlX3RpbWUgPSAwO1xcbiAxNjg6XFx0XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xcbiAxNjk6XFx0XFx0XFx0cmV0dXJuIHNrYjtcXG4gMTcwOlxcdFxcdH1cXG4gMTcxOlxcdFxcdG5vdyA9IGNvZGVsX2dldF90aW1lKCk7XFxuIDE3MjpcXHRcXHRkcm9wID0gY29kZWxfc2hvdWxkX2Ryb3Aoc2tiLCBjdHgsIHZhcnMsIHBhcmFtcywgc3RhdHMsXFxuIDE3MzpcXHRcXHRcXHRcXHRcXHQgc2tiX2xlbl9mdW5jLCBza2JfdGltZV9mdW5jLCBiYWNrbG9nLCBub3cpO1xcbiAxNzQ6XFx0XFx0aWYgKHZhcnMtXFx1MDAzZWRyb3BwaW5nKSB7XFxuIDE3NTpcXHRcXHRcXHRpZiAoIWRyb3ApIHtcXG4gMTc2OlxcdFxcdFxcdFxcdC8qIHNvam91cm4gdGltZSBiZWxvdyB0YXJnZXQgLSBsZWF2ZSBkcm9wcGluZyBzdGF0ZSAqL1xcbiAxNzc6XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2YXJzLVxcdTAwM2Vkcm9wcGluZywgZmFsc2UpO1xcbiAxNzg6XFx0XFx0XFx0fSBlbHNlIGlmIChjb2RlbF90aW1lX2FmdGVyX2VxKG5vdywgdmFycy1cXHUwMDNlZHJvcF9uZXh0KSkge1xcbiAxNzk6XFx0XFx0XFx0XFx0LyogSXQncyB0aW1lIGZvciB0aGUgbmV4dCBkcm9wLiBEcm9wIHRoZSBjdXJyZW50XFxuIDE4MDpcXHRcXHRcXHRcXHQgKiBwYWNrZXQgYW5kIGRlcXVldWUgdGhlIG5leHQuIFRoZSBkZXF1ZXVlIG1pZ2h0XFxuIDE4MTpcXHRcXHRcXHRcXHQgKiB0YWtlIHVzIG91dCBvZiBkcm9wcGluZyBzdGF0ZS5cXG4gMTgyOlxcdFxcdFxcdFxcdCAqIElmIG5vdCwgc2NoZWR1bGUgdGhlIG5leHQgZHJvcC5cXG4gMTgzOlxcdFxcdFxcdFxcdCAqIEEgbGFyZ2UgYmFja2xvZyBtaWdodCByZXN1bHQgaW4gZHJvcCByYXRlcyBzbyBoaWdoXFxuIDE4NDpcXHRcXHRcXHRcXHQgKiB0aGF0IHRoZSBuZXh0IGRyb3Agc2hvdWxkIGhhcHBlbiBub3csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjI4OjM5LjI5Mjk3NjMyNFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzU3NzQ2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29EZWwgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBleGFtaW5pbmcgdGhlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpbXBsaWNhdGlvbnMuIFRoZSBgY29kZWxfY29udHJvbF9sYXdgIGZ1bmN0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBqdXN0IGludGVnZXIgbWF0aCB3aXRoIGNsYW1waW5nLCBub3RoaW5nIGluaGVyZW50bHkgZGFuZ2Vyb3VzIHRoZXJlLiBUaGUgYGNvZGVsX2RlcXVldWVgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJ3JlIGluaXRpYWxpemluZyBgZHJvcHNgIHRvIHplcm8gYW5kIHRoZW4gaW5jcmVtZW50aW5nIGl0IHdpdGhpbiBhIGB3aGlsZWAgbG9vcC4gVGhlIGtleSBpcyB0aGF0IHdlJ3JlIGFkZGluZyBhIHNhZmV0eSBjaGVjazogYCsrZHJvcHMgXHUwMDNlIENPREVMX01BWF9EUk9QU19QRVJfREVRVUVVRWAuIElmIHRoYXQgbGltaXQgaXMgZXhjZWVkZWQsIHdlIGNhbGN1bGF0ZSBgdmFycy1cdTAwM2Vkcm9wX25leHRgIHVzaW5nIGBjb2RlbF9jb250cm9sX2xhd2AgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgbmV3IEtNU0FOIGlzc3Vlcz8gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhLCBtZW50YWxseSB0aWNraW5nIG9mZiBlYWNoIHBvaW50LlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm9wZSwgZG9lc24ndCBzZWVtIGxpa2Ugd2UncmUgdG91Y2hpbmcgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IFRoZSBsb2dpYyBpcyBub3cgYmFzZWQgb24gYSBgZHJvcHNgIGNvdW50ZXIsIHdoaWNoIGlzIGluaXRpYWxpemVkIGFuZCB1cGRhdGVkLiBObyByZWxpYW5jZSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgdG8gYmUgcmVhZD8gTm8gbmV3IGFsbG9jYXRpb25zIHRoYXQgSSBjYW4gc2VlLiBXZSdyZSBtb2RpZnlpbmcgZXhpc3RpbmcgcXVldWUgbWFuYWdlbWVudC5cbjQuICBCb3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IFRoZSBjaGFuZ2UgaXMgYSBsb29wIGl0ZXJhdGlvbiBjYXAsIHdoaWNoIGFkZHJlc3NlcyB2ZXJ5IHNtYWxsIGludGVydmFscy4gVGhpcyBhdm9pZHMgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBhIHNhZmV0eSBtZWNoYW5pc206IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc29mdCBsb2NrdXAgaXNzdWUgaW4gQ29EZWwgY2F1c2VkIGJ5IGV4dHJlbWUgYmFja2xvZyBvciBzbWFsbCBpbnRlcnZhbHMuIEl0IG1vZGlmaWVzIHRoZSBzY2hlZHVsaW5nL2Ryb3BwaW5nIGxvZ2ljIGJ5IGNhcHBpbmcgaXRlcmF0aW9ucyBpbiB0aGUgQ29EZWwgbG9vcC4gVGhlcmVmb3JlLCBnaXZlbiB0aGUgYWJzZW5jZSBvZiBhbnkgb2YgdGhlIEtNU0FOLXRyaWdnZXJpbmcgY29uZGl0aW9ucyBJIGFtIGZhbWlsaWFyIHdpdGgsIEkgYW0gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGltZSB0byBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4OCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNToyODo0My42NTA3Mjc1M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENvRGVsIHF1ZXVlIGRpc2NpcGxpbmUgaW1wbGVtZW50YXRpb24gKHNwZWNpZmljYWxseSBjb2RlbF9jb250cm9sX2xhdyBhbmQgY29kZWxfZGVxdWV1ZSBpbiBpbmNsdWRlL25ldC9jb2RlbF9pbXBsLmgpIHRvIHByZXZlbnQgaW5maW5pdGUgZHJvcHBpbmcgbG9vcHMvc29mdCBsb2NrdXBzIGNhdXNlZCBieSBzbWFsbCBpbnRlcnZhbHMgb3IgbGFyZ2UgYmFja2xvZ3MuIEl0IGNsYW1wcyB0aGUgY29udHJvbCBsYXcgaW5jcmVtZW50IHRvIGF0IGxlYXN0IDEgdGljayBhbmQgY2FwcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHJvcHMgcGVyIGRlcXVldWUgaXRlcmF0aW9uLlxcblxcblRoZSBvbmx5IG5ldyBsb2NhbCB2YXJpYWJsZSBpbnRyb2R1Y2VkIChgZHJvcHNgKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aCBjb21wdXRhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDb0RlbCBxdWV1ZSBkaXNjaXBsaW5lIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2FsbHkgY29kZWxfY29udHJvbF9sYXcgYW5kIGNvZGVsX2RlcXVldWUgaW4gaW5jbHVkZS9uZXQvY29kZWxfaW1wbC5oKSB0byBwcmV2ZW50IGluZmluaXRlIGRyb3BwaW5nIGxvb3BzL3NvZnQgbG9ja3VwcyBjYXVzZWQgYnkgc21hbGwgaW50ZXJ2YWxzIG9yIGxhcmdlIGJhY2tsb2dzLiBJdCBjbGFtcHMgdGhlIGNvbnRyb2wgbGF3IGluY3JlbWVudCB0byBhdCBsZWFzdCAxIHRpY2sgYW5kIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRyb3BzIHBlciBkZXF1ZXVlIGl0ZXJhdGlvbi5cXG5cXG5UaGUgb25seSBuZXcgbG9jYWwgdmFyaWFibGUgaW50cm9kdWNlZCAoYGRyb3BzYCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGggY29tcHV0YXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[1] Phase: Succeeded StartedAt: 2026-09-05 05:29:12 +0000 UTC FinishedAt: 2026-09-05 05:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 05:29:12 +0000 UTC FinishedAt: 2026-09-05 05:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2] Phase: Succeeded StartedAt: 2026-09-05 05:29:12 +0000 UTC FinishedAt: 2026-09-05 09:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 05:29:12 +0000 UTC FinishedAt: 2026-09-05 09:12:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 05:29:12 +0000 UTC FinishedAt: 2026-09-05 05:29:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 05:29:12 +0000 UTC FinishedAt: 2026-09-05 05:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlk2sp/series-workflowlk2sp-convert-artifact-380912235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 05:29:22 +0000 UTC FinishedAt: 2026-09-05 05:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 05:29:22 +0000 UTC FinishedAt: 2026-09-05 05:47:34 +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:*d544e52d-dcc2-4e68-b6a6-26b292789f3b,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-workflowlk2sp/series-workflowlk2sp-convert-artifact-380912235/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": "94e6a498-e13e-49fe-a78e-3391d191b797", "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-workflowlk2sp/series-workflowlk2sp-build-action-3721836137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:29:22 +0000 UTC FinishedAt: 2026-09-05 05:47:24 +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:*d544e52d-dcc2-4e68-b6a6-26b292789f3b,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-workflowlk2sp/series-workflowlk2sp-convert-artifact-380912235/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": "94e6a498-e13e-49fe-a78e-3391d191b797", "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-workflowlk2sp/series-workflowlk2sp-build-action-3721836137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 05:47:34 +0000 UTC FinishedAt: 2026-09-05 05:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 05:47:34 +0000 UTC FinishedAt: 2026-09-05 05:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 05:47:34 +0000 UTC FinishedAt: 2026-09-05 05:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 05:47:34 +0000 UTC FinishedAt: 2026-09-05 05:47:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlk2sp/series-workflowlk2sp-convert-artifact-2870105666/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 05:47:44 +0000 UTC FinishedAt: 2026-09-05 05:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 05:47:44 +0000 UTC FinishedAt: 2026-09-05 05:49:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*94e6a498-e13e-49fe-a78e-3391d191b797,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-workflowlk2sp/series-workflowlk2sp-build-action-3721836137/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-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 05:49:36 +0000 UTC FinishedAt: 2026-09-05 05:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 05:49:36 +0000 UTC FinishedAt: 2026-09-05 05:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 05:49:36 +0000 UTC FinishedAt: 2026-09-05 06:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 05:49:36 +0000 UTC FinishedAt: 2026-09-05 06:08:22 +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:*d544e52d-dcc2-4e68-b6a6-26b292789f3b,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-workflowlk2sp/series-workflowlk2sp-convert-artifact-2870105666/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": "e7a4467b-f580-47e1-ada7-25561b6b4e1d", "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-workflowlk2sp/series-workflowlk2sp-build-action-3725658262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:49:36 +0000 UTC FinishedAt: 2026-09-05 06:08:12 +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:*d544e52d-dcc2-4e68-b6a6-26b292789f3b,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-workflowlk2sp/series-workflowlk2sp-convert-artifact-2870105666/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": "e7a4467b-f580-47e1-ada7-25561b6b4e1d", "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-workflowlk2sp/series-workflowlk2sp-build-action-3725658262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 06:08:22 +0000 UTC FinishedAt: 2026-09-05 06:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 06:08:22 +0000 UTC FinishedAt: 2026-09-05 06:08:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 06:08:22 +0000 UTC FinishedAt: 2026-09-05 06:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 06:08:22 +0000 UTC FinishedAt: 2026-09-05 06:10:08 +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:*e7a4467b-f580-47e1-ada7-25561b6b4e1d,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-workflowlk2sp/series-workflowlk2sp-build-action-3725658262/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-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 09:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 09:12:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"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:*94e6a498-e13e-49fe-a78e-3391d191b797,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7a4467b-f580-47e1-ada7-25561b6b4e1d,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-workflowlk2sp/series-workflowlk2sp-build-action-3721836137/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-workflowlk2sp/series-workflowlk2sp-build-action-3725658262/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 06:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 06:10:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"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-workflowlk2sp/series-workflowlk2sp-convert-artifact-4198934647/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 06:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 06:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 06:10:18 +0000 UTC FinishedAt: 2026-09-05 06:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 06:10:29 +0000 UTC FinishedAt: 2026-09-05 09:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk2sp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["codel_qdisc_dequeue","codel_peek","codel_change","fq_codel_dequeue","fq_codel_peek","fq_codel_change","fq_tin_dequeue_func"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6262acad9db197b5ed12e3b245d2e6d0c80fb960","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_CODEL","NET_SCH_FQ_CODEL","MAC80211"],"series_id":"87ed9fd2-65f2-401a-a24d-e18fb558f771","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 06:10:29 +0000 UTC FinishedAt: 2026-09-05 09:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*94e6a498-e13e-49fe-a78e-3391d191b797,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7a4467b-f580-47e1-ada7-25561b6b4e1d,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-workflowlk2sp/series-workflowlk2sp-build-action-3721836137/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-workflowlk2sp/series-workflowlk2sp-build-action-3725658262/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-workflowlk2sp/series-workflowlk2sp-convert-artifact-4198934647/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,}