Name: series-workflow8bbvn Phase: Succeeded StartedAt: 2026-09-04 06:08:39 +0000 UTC FinishedAt: 2026-09-04 10:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[0] Phase: Succeeded StartedAt: 2026-09-04 06:08:39 +0000 UTC FinishedAt: 2026-09-04 06:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 06:08:39 +0000 UTC FinishedAt: 2026-09-04 06:57:24 +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": "adf50c47a47f0f0f0b79dd58ffade9919cddebea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "adf50c47a47f0f0f0b79dd58ffade9919cddebea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "1e5d5627-46aa-4f45-8e0f-1dc0f3abde20" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "reqsk_timer_handler", "tcp_fastopen_synack_timer", "do_tcp_setsockopt", "tcp_check_req" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFza190aW1lcl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXImIzM0OywKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2NoZWNrX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiBhbmQgdGltZW91dCBoYW5kbGluZyB0byBtYXRjaCB0aGUgNy1iaXQgcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBmaWVsZC4gSXQgY2FwcyBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IGluIHJlcXNrX3RpbWVyX2hhbmRsZXIgYW5kIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIsIHJlZmFjdG9ycyB0aGUgYml0ZmllbGQgbGF5b3V0IGluIHN0cnVjdCByZXF1ZXN0X3NvY2ssIGFuZCB1cGRhdGVzIHRjcF9yZXFza190aW1lb3V0X3NrIC8gdGNwX3JlcXNrX3RpbWVvdXQgY2FsY3VsYXRpb25zIHRvIHByZXZlbnQgc2hpZnQgb3ZlcmZsb3dzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIFRDUCBzb2NrZXQgY29ubmVjdGlvbnMgYW5kIHNldHNvY2tvcHQvc3lzY3RsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MDgxZTdjMzViYTZhNDA4MDA1YmZhNzQ2OTAyOTcyZTVlMjc4Yjg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNjo1NTo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtOTU0LDcgJiM0Mzs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTlxuIFxuIHRjcF9zeW5hY2tfcmV0cmllcyAtIElOVEVHRVJcbiBcdE51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsXG4tXHRiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZVxuJiM0MztcdGJlIHJldHJhbnNtaXR0ZWQuIFRoZSBzeXNjdGwgYWNjZXB0cyAwLTI1NS4gVmFsdWVzIGFib3ZlIDEyNyBhcmVcbiYjNDM7XHRzaWxlbnRseSBjYXBwZWQgYnkgdGhlIFNZTi1BQ0sgdGltZXJzLCBtYXRjaGluZyB0aGUgNy1iaXRcbiYjNDM7XHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXG4gXHRpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byAzMXNlY29uZHMgdGlsbCB0aGUgbGFzdCByZXRyYW5zbWlzc2lvblxuIFx0d2l0aCB0aGUgY3VycmVudCBpbml0aWFsIFJUTyBvZiAxc2Vjb25kLiBXaXRoIHRoaXMgdGhlIGZpbmFsIHRpbWVvdXRcbiBcdGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbmluZGV4IDVhOWM4MjZhNzA5MmQuLmE5NzgxZmFiNzc0YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbkBAIC01OCwxMiAmIzQzOzU4LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xuIFx0c3RydWN0IHJlcXVlc3Rfc29ja1x0XHQqZGxfbmV4dDtcbiBcdHUxNlx0XHRcdFx0bXNzO1xuIFx0dThcdFx0XHRcdG51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi9cbi1cdHU4XHRcdFx0XHRzeW5jb29raWU6MTsgLyogVHJ1ZSBpZlxuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU4XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG4gXHRcdFx0XHRcdFx0ICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW5cbiBcdFx0XHRcdFx0XHQgICAgICAqICAgIFRTIG9mIFNZTiYjNDM7QUNLXG4gXHRcdFx0XHRcdFx0ICAgICAgKiAyKSBBQ0sgaXMgdmFsaWRhdGVkIGJ5IEJQRiBrZnVuYy5cbiBcdFx0XHRcdFx0XHQgICAgICAqL1xuLVx0dThcdFx0XHRcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xuJiM0MztcdFx0XHR1OFx0XHRudW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi9cbiYjNDM7XHRcdH07XG4mIzQzO1x0XHR1OFx0XHRudW1fdGltZW91dF9zeW5jb29raWU7XG4mIzQzO1x0fTtcbiBcdHUzMlx0XHRcdFx0dHNfcmVjZW50O1xuIFx0c3RydWN0IHRpbWVyX2xpc3RcdFx0cnNrX3RpbWVyO1xuIFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHNcdCpyc2tfb3BzO1xuQEAgLTc0LDYgJiM0Mzs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHtcbiBcdHUzMlx0XHRcdFx0dGltZW91dDtcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuJiM0MztcbiYjNDM7I2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxuJiM0MztcdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gbnVtX3RpbWVvdXQgXHUwMDI2IDB4N2Y7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0cmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNDM2NDk1ZmYyMjcxZC4uYTFjMjAzNTJhODY2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTE4Myw2ICYjNDM7MTgzLDggQEAgc3RhdGljX2Fzc2VydCgoMSBcdTAwM2NcdTAwM2MgQVRPX0JJVFMpIFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XG4gI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTFx0MzI3NjdcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUENOVFx0XHQxMjdcbiAjZGVmaW5lIE1BWF9UQ1BfU1lOQ05UXHRcdDEyN1xuJiM0MzsvKiByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGlzIGEgNy1iaXQgZmllbGQuICovXG4mIzQzOyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1x0MTI3XG4gXG4gLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHNcbiAgKiB0byBhdm9pZCBvdmVyZmxvd3MuIFRoaXMgYXNzdW1lcyBhIGNsb2NrIHNtYWxsZXIgdGhhbiAxIE1oei5cbkBAIC04ODEsMTIgJiM0Mzs4ODMsMjMgQEAgc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxuIFx0cmV0dXJuIHVzZWNzX3RvX2ppZmZpZXMoKHRwLVx1MDAzZXNydHRfdXMgXHUwMDNlXHUwMDNlIDMpICYjNDM7IHRwLVx1MDAzZXJ0dHZhcl91cyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4ge1xuLVx0dTY0IHRpbWVvdXQgPSAodTY0KXJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQ7XG4mIzQzO1x0dTY0IHRpbWVvdXQgPSBSRUFEX09OQ0UocmVxLVx1MDAzZXRpbWVvdXQpO1xuJiM0MztcdHUzMiBydG9fbWF4ID0gdGNwX3J0b19tYXgoc2spO1xuJiM0MztcdHU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90aW1lb3V0IFx1MDAzZT0gQklUU19QRVJfVFlQRSh0aW1lb3V0KSB8fFxuJiM0MztcdCAgICB0aW1lb3V0IFx1MDAzZSBVNjRfTUFYIFx1MDAzZVx1MDAzZSBudW1fdGltZW91dClcbiYjNDM7XHRcdHJldHVybiBydG9fbWF4O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0IFx1MDAzY1x1MDAzYyBudW1fdGltZW91dCwgcnRvX21heCk7XG4mIzQzO31cbiBcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsXG4tXHRcdFx0XHQgICAgdGNwX3J0b19tYXgocmVxLVx1MDAzZXJza19saXN0ZW5lcikpO1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRjcF9yZXFza190aW1lb3V0X3NrKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG4gfVxuIFxuIHUzMiB0Y3BfZGVsYWNrX21heChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5pbmRleCA2MjU3NDU5YmNlZTI0Li4yMWY5NmE1MGMxMGZlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuQEAgLTEwNjgsNiAmIzQzOzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0bmV0ID0gc29ja19uZXQoc2tfbGlzdGVuZXIpO1xuIFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XG4mIzQzO1x0bWF4X3N5bl9hY2tfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3N5bl9hY2tfcmV0cmllcyxcbiYjNDM7XHRcdFx0XHQgICAgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7XG4gXHQvKiBOb3JtYWxseSBhbGwgdGhlIG9wZW5yZXFzIGFyZSB5b3VuZyBhbmQgYmVjb21lIG1hdHVyZVxuIFx0ICogKGkuZS4gY29udmVydGVkIHRvIGVzdGFibGlzaGVkIHNvY2tldCkgZm9yIGZpcnN0IHRpbWVvdXQuXG4gXHQgKiBJZiBzeW5hY2sgd2FzIG5vdCBhY2tub3dsZWRnZWQgZm9yIDEgc2Vjb25kLCBpdCBtZWFuc1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDFjODY3YTMwMjQ0NDYuLmU1NTFlNmFkYzgwMDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0zNTcsNyAmIzQzOzM1Nyw3IEBAIHN0YXRpYyB1OCBzZWNzX3RvX3JldHJhbnMoaW50IHNlY29uZHMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heClcbiBcdFx0aW50IHBlcmlvZCA9IHRpbWVvdXQ7XG4gXG4gXHRcdHJlcyA9IDE7XG4tXHRcdHdoaWxlIChzZWNvbmRzIFx1MDAzZSBwZXJpb2QgXHUwMDI2XHUwMDI2IHJlcyBcdTAwM2MgMjU1KSB7XG4mIzQzO1x0XHR3aGlsZSAoc2Vjb25kcyBcdTAwM2UgcGVyaW9kIFx1MDAyNlx1MDAyNiByZXMgXHUwMDNjIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHtcbiBcdFx0XHRyZXMmIzQzOyYjNDM7O1xuIFx0XHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSAxO1xuIFx0XHRcdGlmICh0aW1lb3V0IFx1MDAzZSBydG9fbWF4KVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbmluZGV4IGU1NmVhZTRiYzM0MWUuLjJkMmRlYzFlOTE1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbkBAIC00NjQsMTEgJiM0Mzs0NjQsMTMgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdHRjcF9zeW5fYWNrX3RpbWVvdXQocmVxKTtcbiBcbi1cdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4uXG4mIzQzO1x0LyogQWRkIG9uZSBtb3JlIHJldHJ5IGZvciBmYXN0b3BlbiB3aGVuIHRoZSB0aW1lb3V0IGNvdW50ZXIgY2FuXG4mIzQzO1x0ICogcmVwcmVzZW50IGl0LlxuIFx0ICogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKVxuIFx0ICovXG4gXHRtYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcykgJiM0MzsgMTtcbiYjNDM7XHRtYXhfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3JldHJpZXMsIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpO1xuIFxuIFx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IG1heF9yZXRyaWVzKSB7XG4gXHRcdHRjcF93cml0ZV9lcnIoc2spO1xuQEAgLTQ5MCw3ICYjNDM7NDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdGlmICghdHAtXHUwMDNlcmV0cmFuc19zdGFtcClcbiBcdFx0dHAtXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcbiBcdHRjcF9yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUyxcbi1cdFx0XHQgIHJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB0Y3BfcnR4X3Byb2JlMF90aW1lZF9vdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFza190aW1lcl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXImIzM0OywKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2NoZWNrX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODFlN2MzNWJhNmE0MDgwMDViZmE3NDY5MDI5NzJlNWUyNzhiODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtOTU0LDcgJiM0Mzs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTgogCiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIFNZTkFDS3MgZm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwKLQliZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQomIzQzOwliZSByZXRyYW5zbWl0dGVkLiBUaGUgc3lzY3RsIGFjY2VwdHMgMC0yNTUuIFZhbHVlcyBhYm92ZSAxMjcgYXJlCiYjNDM7CXNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdAomIzQzOwlyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlCiAJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb24KIAl3aXRoIHRoZSBjdXJyZW50IGluaXRpYWwgUlRPIG9mIDFzZWNvbmQuIFdpdGggdGhpcyB0aGUgZmluYWwgdGltZW91dAogCWZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmggYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAppbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaApAQCAtNTgsMTIgJiM0Mzs1OCwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrCQkqZGxfbmV4dDsKIAl1MTYJCQkJbXNzOwogCXU4CQkJCW51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi8KLQl1OAkJCQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU4CQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgogCQkJCQkJICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW4KIAkJCQkJCSAgICAgICogICAgVFMgb2YgU1lOJiM0MztBQ0sKIAkJCQkJCSAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuCiAJCQkJCQkgICAgICAqLwotCXU4CQkJCW51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqLwomIzQzOwkJCXU4CQludW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi8KJiM0MzsJCX07CiYjNDM7CQl1OAkJbnVtX3RpbWVvdXRfc3luY29va2llOwomIzQzOwl9OwogCXUzMgkJCQl0c19yZWNlbnQ7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXJza190aW1lcjsKIAljb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcwkqcnNrX29wczsKQEAgLTc0LDYgJiM0Mzs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAl1MzIJCQkJdGltZW91dDsKIH07CiAKJiM0MztzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS0mZ3Q7bnVtX3RpbWVvdXRfc3luY29va2llKTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmZ3Q7Jmd0OyAxOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmYW1wOyAweDdmOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0xODMsNiAmIzQzOzE4Myw4IEBAIHN0YXRpY19hc3NlcnQoKDEgJmx0OyZsdDsgQVRPX0JJVFMpICZndDsgVENQX0RFTEFDS19NQVgpOwogI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTAkzMjc2NwogI2RlZmluZSBNQVhfVENQX0tFRVBDTlQJCTEyNwogI2RlZmluZSBNQVhfVENQX1NZTkNOVAkJMTI3CiYjNDM7LyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqLwomIzQzOyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUwkxMjcKIAogLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHMKICAqIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhpcyBhc3N1bWVzIGEgY2xvY2sgc21hbGxlciB0aGFuIDEgTWh6LgpAQCAtODgxLDEyICYjNDM7ODgzLDIzIEBAIHN0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKIAlyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtJmd0O3NydHRfdXMgJmd0OyZndDsgMykgJiM0MzsgdHAtJmd0O3J0dHZhcl91cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXU2NCB0aW1lb3V0ID0gKHU2NClyZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dDsKJiM0MzsJdTY0IHRpbWVvdXQgPSBSRUFEX09OQ0UocmVxLSZndDt0aW1lb3V0KTsKJiM0MzsJdTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTsKJiM0MzsKJiM0MzsJaWYgKG51bV90aW1lb3V0ICZndDs9IEJJVFNfUEVSX1RZUEUodGltZW91dCkgfHwKJiM0MzsJICAgIHRpbWVvdXQgJmd0OyBVNjRfTUFYICZndDsmZ3Q7IG51bV90aW1lb3V0KQomIzQzOwkJcmV0dXJuIHJ0b19tYXg7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQgJmx0OyZsdDsgbnVtX3RpbWVvdXQsIHJ0b19tYXgpOwomIzQzO30KIAotCXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsCi0JCQkJICAgIHRjcF9ydG9fbWF4KHJlcS0mZ3Q7cnNrX2xpc3RlbmVyKSk7CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtJmd0O3Jza19saXN0ZW5lciwgcmVxKTsKIH0KIAogdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li4yMWY5NmE1MGMxMGZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTEwNjgsNiAmIzQzOzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCW5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTsKIAltYXhfc3luX2Fja19yZXRyaWVzID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfc3luX3JldHJpZXMpID8gOgogCQlSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpOwomIzQzOwltYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLAomIzQzOwkJCQkgICAgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7CiAJLyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmUKIAkgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC4KIAkgKiBJZiBzeW5hY2sgd2FzIG5vdCBhY2tub3dsZWRnZWQgZm9yIDEgc2Vjb25kLCBpdCBtZWFucwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMzU3LDcgJiM0MzszNTcsNyBAQCBzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpCiAJCWludCBwZXJpb2QgPSB0aW1lb3V0OwogCiAJCXJlcyA9IDE7Ci0JCXdoaWxlIChzZWNvbmRzICZndDsgcGVyaW9kICZhbXA7JmFtcDsgcmVzICZsdDsgMjU1KSB7CiYjNDM7CQl3aGlsZSAoc2Vjb25kcyAmZ3Q7IHBlcmlvZCAmYW1wOyZhbXA7IHJlcyAmbHQ7IE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHsKIAkJCXJlcyYjNDM7JiM0Mzs7CiAJCQl0aW1lb3V0ICZsdDsmbHQ7PSAxOwogCQkJaWYgKHRpbWVvdXQgJmd0OyBydG9fbWF4KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBlNTZlYWU0YmMzNDFlLi4yZDJkZWMxZTkxNTY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtNDY0LDExICYjNDM7NDY0LDEzIEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAKIAl0Y3Bfc3luX2Fja190aW1lb3V0KHJlcSk7CiAKLQkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLgomIzQzOwkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW4KJiM0MzsJICogcmVwcmVzZW50IGl0LgogCSAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KCkKIAkgKi8KIAltYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3N5bl9yZXRyaWVzKSA/IDoKIAkJUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzKSAmIzQzOyAxOwomIzQzOwltYXhfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3JldHJpZXMsIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpOwogCiAJaWYgKHJlcS0mZ3Q7bnVtX3RpbWVvdXQgJmd0Oz0gbWF4X3JldHJpZXMpIHsKIAkJdGNwX3dyaXRlX2Vycihzayk7CkBAIC00OTAsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJaWYgKCF0cC0mZ3Q7cmV0cmFuc19zdGFtcCkKIAkJdHAtJmd0O3JldHJhbnNfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcF90cyh0cCk7CiAJdGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLAotCQkJICByZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dCwgZmFsc2UpOwomIzQzOwkJCSAgICAgdGNwX3JlcXNrX3RpbWVvdXRfc2soc2ssIHJlcSksIGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgdGNwX3J0eF9wcm9iZTBfdGltZWRfb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogU1lOIENvb2tpZSAmYW1wOyBSZXRyYW5zbWlzc2lvbiBSZWZpbmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21lIHJlZmluZW1lbnRzIGFyb3VuZCBUQ1AgU1lOIGNvb2tpZXMgYW5kIHJldHJhbnNtaXNzaW9uIHN0cmF0ZWdpZXMuIFRoZSBjaGFuZ2VzIHNlZW0gdGFyZ2V0ZWQgYXQgdGhlIHJlcXVlc3Qgc29ja2V0IChgcmVxdWVzdF9zb2NrYCkgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBob3cgU1lOLUFDSyByZXRyaWVzIGFyZSBtYW5hZ2VkLgoKRmlyc3QsIEkgc2VlIGRvY3VtZW50YXRpb24gdXBkYXRlcyB0byBgaXAtc3lzY3RsLnJzdGAg4oCTIHRoYXQmIzM5O3MgZ29vZCwgZG9jdW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIHVwZGF0ZWQgd2l0aCBjb2RlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHdvcmsgcmVzaWRlcyB3aXRoaW4gYGluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oYC4gVGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCBjaGFuZ2UgaXMgaW50ZXJlc3Rpbmc7IHRoZSB1bmlvbiBhcm91bmQgYHN5bmNvb2tpZToxYCwgYG51bV90aW1lb3V0OjdgLCBhbmQgYHU4IG51bV90aW1lb3V0X3N5bmNvb2tpZWAgc3VnZ2VzdHMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gc3RvcmUgZWl0aGVyIHRoZSBTWU4gY29va2llIGZsYWcgb3IgdGhlIHRpbWVvdXQvcmV0cnkgaW5mb3JtYXRpb24uIFRoZSBhZGRpdGlvbiBvZiB0aGUgYHJlcXNrX251bV90aW1lb3V0KClgIGhlbHBlciBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgdGhpcyBuZXcgYXBwcm9hY2guCgpNb3ZpbmcgaW50byBgaW5jbHVkZS9uZXQvdGNwLmhgLCB0aGUgZGVmaW5pdGlvbiBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGlzIGxpa2VseSBwcm92aWRlcyBhIGhhcmQgdXBwZXIgbGltaXQgZm9yIFNZTi1BQ0sgcmV0cmllcywgd2hpY2ggSSYjMzk7bSBjdXJpb3VzIGFib3V0LiBBbHNvLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgdGNwX3JlcXNrX3RpbWVvdXQoKWAgYW5kIHRoZSBhZGRpdGlvbiBvZiBgdGNwX3JlcXNrX3RpbWVvdXRfc2soKWAgdXNpbmcgYHJlcXNrX251bV90aW1lb3V0KClgIGNvbmZpcm0gdGhlIGludGVncmF0aW9uIG9mIHRoZSBgcmVxdWVzdF9zb2NrYCBjaGFuZ2VzIHdpdGhpbiB0aGUgVENQIGxheWVyLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHVuYm91bmRlZCByZXRyaWVzIChvciBhdCBsZWFzdCwgdmVyeSBoaWdoIGxpbWl0cykgdG8gYSBtb3JlIGNvbnN0cmFpbmVkIGFuZCBsaWtlbHkgbW9yZSBwcmVkaWN0YWJsZSBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgb3ZlcmZsb3cgY29uZGl0aW9uLgoKTm93IHdlJiMzOTtyZSBzZWVpbmcgdGhpcyBpbXBsZW1lbnRlZCBpbiB0aGUgYWN0dWFsIGNvZGUuIFRoZSBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AgY2hhbmdlIHRvIGByZXFza190aW1lcl9oYW5kbGVyYCBieSBjYXBwaW5nIGBtYXhfc3luX2Fja19yZXRyaWVzYCB3aXRoIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYCBzb2xpZGlmaWVzIHRoZSB1cHBlciBib3VuZCB3ZSBleHBlY3RlZC4gVGhlIHNhbWUgaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hlcmUgYHNlY3NfdG9fcmV0cmFuc2AgdXNlcyB0aGUgbWFjcm8gYE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVNgIGluc3RlYWQgb2YgYSBoYXJkY29kZWQgdmFsdWUgKDI1NT8pIHJlaW5mb3JjZXMgdGhpcy4gVGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24uCgpGaW5hbGx5LCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgIHNob3dzIHRoZSBiaWdnZXN0IGNoYW5nZTogYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIGlzIGFsc28gaW1wbGVtZW50aW5nIHRoZSB1cHBlciBib3VuZHMgYW5kIHVzaW5nIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBpbnN0ZWFkIG9mIHRoZSBiaXQtc2hpZnQgb3BlcmF0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgYSBtb3JlIHJvYnVzdCB0aW1lb3V0IGNhbGN1bGF0aW9uLgoKU28sIG92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGdvb2QgbW92ZSB0b3dhcmQgc2FmZXIsIG1vcmUgY29udHJvbGxlZCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLiBUaGUgYml0ZmllbGQvdW5pb24gYXBwcm9hY2ggZm9yIHN0b3JpbmcgdGltZW91dC9zeW5jb29raWUgaW5mb3JtYXRpb24gaXMgYSBuZWF0IG9wdGltaXphdGlvbiwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVNgIHByb3ZpZGVzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQuIEkmIzM5O2xsIHVzZSBncmVwL3JlYWQtZmlsZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGltcGxpY2F0aW9ucyBvZiBzZXR0aW5nIHRoZSBsaW1pdCBhbmQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgYmFja3dhcmRzIGNvbXBhdGlibGUgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBwZXJmb3JtYW5jZSBpbXBhY3RzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBzcGVjaWZpYyB2YWx1ZSBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYWxzbyB3b3J0aCBpbnZlc3RpZ2F0aW5nIOKAkyB3aGF04oCZcyB0aGUgcmF0aW9uYWxlIGZvciB0aGF0IHBhcnRpY3VsYXIgdmFsdWU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVxc2tfdGltZXJfaGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMjc9dm9pZCBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wX2FuZF9wdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDMyLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMDMzOnN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwMzQte1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1OS1cdFx0cmVmY291bnRfc2V0KFx1MDAyNm5yZXEtXHUwMDNlcnNrX3JlZmNudCwgMiAmIzQzOyAxKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA2MDpcdFx0dGltZXJfc2V0dXAoXHUwMDI2bnJlcS1cdTAwM2Vyc2tfdGltZXIsIHJlcXNrX3RpbWVyX2hhbmRsZXIsIFRJTUVSX1BJTk5FRCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwNjEtXHRcdHJlcXNrX3F1ZXVlX21pZ3JhdGVkKFx1MDAyNmluZXRfY3NrKG5zayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMTUyPXN0YXRpYyBib29sIHJlcXNrX3F1ZXVlX2hhc2hfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExNjAtXHRyZXEtXHUwMDNldGltZW91dCA9IHRjcF90aW1lb3V0X2luaXQoKHN0cnVjdCBzb2NrICopcmVxKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTE2MTpcdHRpbWVyX3NldHVwKFx1MDAyNnJlcS1cdTAwM2Vyc2tfdGltZXIsIHJlcXNrX3RpbWVyX2hhbmRsZXIsIFRJTUVSX1BJTk5FRCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExNjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB0aGlua2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIGBzZWNzX3RvX3JldHJhbnNgIGFuZCBpdHMgQ2FsbGVycyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBzZWNzX3RvX3JldHJhbnNgLiBUaGUgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21ldGhpbmcgcmVsYXRlZCB0byByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cywgbGlrZWx5IHdpdGhpbiB0aGUgVENQIHByb3RvY29sLCB3aGljaCBtZWFucyBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIHdpdGhpbiB0aGUgTGludXgga2VybmVsJiMzOTtzIFRDUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgbmV0d29yayBwcm90b2NvbCBpbnRlcm5hbHMsIGFuZCB3aGVyZSB0aGVzZSBjYWxjdWxhdGlvbnMgbGl2ZS4KCk15IGluc3RpbmN0IHRlbGxzIG1lIHRvIHN0YXJ0IGluIGBuZXQvaXB2NC90Y3AuY2AsIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgdXN1YWwgaG9tZSBmb3IgSVB2NC1zcGVjaWZpYyBUQ1AgY29kZS4gQnV0IEkmIzM5O2xsIGtlZXAgYW4gb3BlbiBtaW5kOyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGRlZmluZWQgaW4gYSBtb3JlIGdlbmVyaWMgbG9jYXRpb24sIGVzcGVjaWFsbHkgaWYgaXQmIzM5O3MgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IElQIHZlcnNpb25zLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2l0aGluIHRoYXQgZmlsZSAoYW5kIHBvdGVudGlhbGx5IG90aGVycyB3aXRoaW4gdGhlIGBuZXRgIGRpcmVjdG9yeSwgbWF5YmUgZXZlbiBmdXJ0aGVyIHVwIHRoZSB0cmVlKSB0byBzZWUgd2hlcmUgYHNlY3NfdG9fcmV0cmFuc2AgaXMgZGVmaW5lZCBhbmQgdXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYm90aCB0aGUgZGVjbGFyYXRpb24gYW5kIGFueSBkaXJlY3QgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uLgoKSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byB0YWtlIGVpdGhlciBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHJldHJhbnNtaXNzaW9uIGRlbGF5cywgb3IgYSB2YWx1ZSBhbmQgY29tcHV0ZSBhIHRpbWUuIExpa2VseSBpdCByZXR1cm5zIGEgZHVyYXRpb24gaW4gc2Vjb25kcywgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyB0byBjb3JyZWN0bHkgZ3Jhc3AgdGhlIG91dHB1dC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgd2hpY2ggdXNlIGBzZWNzX3RvX3JldHJhbnNgLCB0byBkZWR1Y2Ugd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKiB3aXRoIHRob3NlIGlucHV0cy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcmV0cmFuc21pc3Npb24gdGltZW91dCBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Vjc190b19yZXRyYW5zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTMzOT12b2lkIHRjcF9sZWF2ZV9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTM1MS0vKiBDb252ZXJ0IHNlY29uZHMgdG8gcmV0cmFuc21pdHMgYmFzZWQgb24gaW5pdGlhbCBhbmQgbWF4IHRpbWVvdXQgKi9cbm5ldC9pcHY0L3RjcC5jOjM1MjpzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpXG5uZXQvaXB2NC90Y3AuYy0zNTMte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zOTM1LVx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQsXG5uZXQvaXB2NC90Y3AuYzozOTM2Olx0XHRcdCAgIHNlY3NfdG9fcmV0cmFucyh2YWwsIFRDUF9USU1FT1VUX0lOSVQgLyBIWixcbm5ldC9pcHY0L3RjcC5jLTM5MzctXHRcdFx0XHRcdCAgIFRDUF9SVE9fTUFYIC8gSFopKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVENQIEZhc3QgT3BlbiBTWU4tQUNLIFRpbWVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGhvbmUgaW4gb24gYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBoYXBwZW5pbmcgaGVyZSB3aXRoIHRoZSBGYXN0IE9wZW4gaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlIFNZTi1BQ0sgdGltZXIgaW50ZXJhY3RzIHdpdGggdGhhdCBtZWNoYW5pc20uIEkgd2FudCB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gRmFzdCBPcGVuLCBlc3BlY2lhbGx5IHBvdGVudGlhbCByZXRyYW5zbWlzc2lvbnMgb3IgdGltZW91dHMgcmVsYXRlZCB0byB0aGUgaW5pdGlhbCBkYXRhIHRyYW5zZmVyLiBXaGF0IGFyZSB0aGUga2V5IHZhcmlhYmxlcyBiZWluZyBjaGVja2VkLCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgdGltZXIgZmlyZXMsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gaXQgZXhwaXJlcz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIHdpbGwgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGFueSBvZGRpdGllcyBJJiMzOTt2ZSBvYnNlcnZlZCBpbiByZWxhdGVkIG5ldHdvcmsgdHJhY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jPTcxMDM9c3RhdGljIHZvaWQgdGNwX3Jjdl9zeW5yZWN2X3N0YXRlX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MTE1LVx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19yZXRyYW5zbWl0cywgMCk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MTE2Olx0LyogSW4gdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcigpIG9uIHRoZSBmaXJzdCBTWU5BQ0sgUlRPIHdlIHNldFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzExNy1cdCAqIHJldHJhbnNfc3RhbXAgYnV0IGRvbiYjMzk7dCBlbnRlciBDQV9Mb3NzLCBzbyBpbiBjYXNlIHRoYXQgaGFwcGVuZWQgd2Vcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NDI9c3RhdGljIHZvaWQgdGNwX3VwZGF0ZV9ydG9fc3RhdHMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ1OC0gKi9cbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ1OTpzdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDYwLXtcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz01Mzk9dm9pZCB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNTUxLVx0XHRcdCAgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0ZJTl9XQUlUMSk7XG5uZXQvaXB2NC90Y3BfdGltZXIuYzo1NTI6XHRcdHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc2ssIHJlcSk7XG5uZXQvaXB2NC90Y3BfdGltZXIuYy01NTMtXHRcdC8qIEJlZm9yZSB3ZSByZWNlaXZlIEFDSyB0byBvdXIgU1lOLUFDSyBkb24mIzM5O3QgcmV0cmFuc21pdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgVENQIFN0YWNrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggY2hhbmdlcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0LiBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGNvZGU/IEJhc2VkIG9uIHRoZSBmaWxlIHBhdGhzLCB0aGlzIGlzIGRlZmluaXRlbHkgaW4gdGhlIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IHRoZSBUQ1Agc3RhY2suIEFscmlnaHQsIHRoYXQmIzM5O3MgY3J1Y2lhbC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3M6CgoqICAgYGluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oYDogTG9va3MgbGlrZSBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIGByZXF1ZXN0X3NvY2tgIGJpdGZpZWxkIGlzIHJlcHJlc2VudGVkLCBhbmQgdGhlIGByZXFza19udW1fdGltZW91dCgpYCBmdW5jdGlvbi4gSW1wb3J0YW50IGZvciBjb25uZWN0aW9uIHNldHVwLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiBob3cgaXQgYWZmZWN0cyB0aGUgdGltZW91dCBjYWxjdWxhdGlvbnMuCiogICBgaW5jbHVkZS9uZXQvdGNwLmhgOiBNb2RpZmljYXRpb25zIHRvIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBhbmQgYHRjcF9yZXFza190aW1lb3V0KClgLiBUaGVzZSBhcmUgY2xlYXJseSByZWxhdGVkIHRvIHRpbWVvdXQgaGFuZGxpbmcgZHVyaW5nIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcGhhc2UuCiogICBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6IFRoZSBgcmVxc2tfdGltZXJfaGFuZGxlcigpYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC4gVGhpcyBzdWdnZXN0cyBhbiBhbHRlcmF0aW9uIGluIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoZXNlIGNvbm5lY3Rpb24gcmVxdWVzdCB0aW1lb3V0cywgd2hpY2ggaXMgYW5vdGhlciBhcmVhIHRvIHdhdGNoIGNsb3NlbHkuCiogICBgbmV0L2lwdjQvdGNwLmNgOiBgc2Vjc190b19yZXRyYW5zKClgIHdpdGhpbiBgZG9fdGNwX3NldHNvY2tvcHRgIChzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBUQ1BfREVGRVJfQUNDRVBUKS4gVGhpcyBjb3VsZCBpbXBhY3QgaG93IHJldHJhbnNtaXNzaW9ucyBhcmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgZGVmZXJyYWwgb2YgdGhlIGFjY2VwdCBjYWxsLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCiogICBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgOiBUaGVyZSYjMzk7cyBhIGNoYW5nZSByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKClgLiBTaW5jZSB0aGlzIHJlbGF0ZXMgdG8gRmFzdCBPcGVuLCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIGNvbm5lY3Rpb25zLgoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3QgY2FsbGVycyB0byB0aGUgYHRjcF9yZXFza190aW1lb3V0YCBmdW5jdGlvbiwganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucyBhY3Jvc3MgdGhlIGtlcm5lbC4gQSBjb21wcmVoZW5zaXZlIGNhbGwgZ3JhcGggd291bGQgcmVhbGx5IGhlbHAgbWUgdmlzdWFsaXplIHRoZSBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmVxc2tfdGltZW91dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD04ODE9c3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTg4NS1cbmluY2x1ZGUvbmV0L3RjcC5oOjg4NjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXRfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9uZXQvdGNwLmgtODg3LVx0XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtODk5LVxuaW5jbHVkZS9uZXQvdGNwLmg6OTAwOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC90Y3AuaC05MDEte1xuaW5jbHVkZS9uZXQvdGNwLmg6OTAyOlx0cmV0dXJuIHRjcF9yZXFza190aW1lb3V0X3NrKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG5pbmNsdWRlL25ldC90Y3AuaC05MDMtfVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTExNC1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTExNTpcdFx0bW9kX3RpbWVyKFx1MDAyNnJlcS1cdTAwM2Vyc2tfdGltZXIsIGppZmZpZXMgJiM0MzsgdGNwX3JlcXNrX3RpbWVvdXQocmVxKSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTYtXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTcxOC1cdFx0XHR0bXBfb3B0LnRzX3JlY2VudF9zdGFtcCA9IGt0aW1lX2dldF9zZWNvbmRzKCkgLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjcxOTpcdFx0XHRcdHRjcF9yZXFza190aW1lb3V0KHJlcSkgLyBIWjtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03MjAtXHRcdFx0cGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoXHUwMDI2dG1wX29wdCwgdGgtXHUwMDNlcnN0KTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNzY3LVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc2ODpcdFx0XHRcdGV4cGlyZXMgJiM0Mzs9IHRjcF9yZXFza190aW1lb3V0KHJlcSk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNzY5LVx0XHRcdFx0aWYgKCFmYXN0b3Blbilcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NTk9c3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00OTQtXHR0Y3BfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsXG5uZXQvaXB2NC90Y3BfdGltZXIuYzo0OTU6XHRcdFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDk2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgVGltZW91dCBWYXJpYWJsZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBhcmUgd2UgYWN0dWFsbHkgdXNpbmcgdGhlc2UgdGltZW91dCB2YXJpYWJsZXMsIHNwZWNpZmljYWxseSBgcmVxc2tfbnVtX3RpbWVvdXRgIGFuZCBgbnVtX3RpbWVvdXRgPyYjMzQ7IEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ga25vdyB0aGV5ICpleGlzdCo7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSYjMzk7cmUgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhleSBsaW1pdGVkIHRvIGEgcGFydGljdWxhciBtb2R1bGUsIG9yIGFyZSB0aGV5IGJlaW5nIHBhc3NlZCBhcm91bmQgYW5kIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIHRvIHVuZGVyc3RhbmQgaG93IGFueSBjaGFuZ2UgSSBtYWtlIHRvIG9uZSBwbGFjZSBhZmZlY3RzIHRoZSByZXN0LiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2VyIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gZWZmb3J0LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBtYXAgb2YgdGhlaXIgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O251bV90aW1lb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0PTk1NT10Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtOTU4LVx0c2lsZW50bHkgY2FwcGVkIGJ5IHRoZSBTWU4tQUNLIHRpbWVycywgbWF0Y2hpbmcgdGhlIDctYml0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdDo5NTk6XHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC05NjAtXHRpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byAzMXNlY29uZHMgdGlsbCB0aGUgbGFzdCByZXRyYW5zbWlzc2lvblxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYz01MDEzPXN0YXRpYyBpbnQgbWx4NV9pYl9zdGFnZV9kZWxheV9kcm9wX2luaXQoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jLTUwMzMtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmM6NTAzNDpcdGRlYnVnZnNfY3JlYXRlX2F0b21pY190KFwmIzM0O251bV90aW1lb3V0X2V2ZW50c1wmIzM0OywgMDQwMCwgcm9vdCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYy01MDM1LVx0XHRcdFx0XHUwMDI2ZGV2LVx1MDAzZWRlbGF5X2Ryb3AuZXZlbnRzX2NudCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9MzQ2PXN0cnVjdCByeHRpZF9zdGF0cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtMzUyLVx0dTMyIG51bV9kZWxpdmVyZWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDozNTM6XHR1MzIgbnVtX3RpbWVvdXRzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtMzU0LVx0dTMyIG51bV9ob2xlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTE2MjQ9c3RhdGljIHZvaWQgYWdncl90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE2MzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNjM5Olx0XHRzdGF0cy1cdTAwM2VudW1fdGltZW91dHMmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTY0MC1cdFx0YXRoNmtsX2RiZyhBVEg2S0xfREJHX0FHR1IsXG4tLVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg9NTA9c3RydWN0IHJlcXVlc3Rfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNjctXHRcdFx0XHRcdFx0ICAgICAgKi9cbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oOjY4Olx0XHRcdHU4XHRcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNjktXHRcdH07XG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo3MDpcdFx0dThcdFx0bnVtX3RpbWVvdXRfc3luY29va2llO1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNzEtXHR9O1xuLS1cbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTgxLVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6ODI6c3RhdGljIGlubGluZSB1OCByZXFza19udW1fdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC04My17XG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4NDpcdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtODUtXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC04Ni0jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4NzpcdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTg4LSNlbHNlXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4OTpcdHJldHVybiBudW1fdGltZW91dCBcdTAwMjYgMHg3ZjtcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTkwLSNlbmRpZlxuLS1cbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oPTIzMz1zdGF0aWMgaW5saW5lIHZvaWQgcmVxc2tfcXVldWVfcmVtb3ZlZChzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSxcbi0tXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC0yMzUte1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6MjM2Olx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCA9PSAwKVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtMjM3LVx0XHRhdG9taWNfZGVjKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xNTE9c3RhdGljX2Fzc2VydCgoMSBcdTAwM2NcdTAwM2MgQVRPX0JJVFMpIFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTg1LSNkZWZpbmUgTUFYX1RDUF9TWU5DTlRcdFx0MTI3XG5pbmNsdWRlL25ldC90Y3AuaDoxODY6LyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqL1xuaW5jbHVkZS9uZXQvdGNwLmgtMTg3LSNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1x0MTI3XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9ODg2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtODkwLVx0dTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7XG5pbmNsdWRlL25ldC90Y3AuaDo4OTE6XHR1OCBudW1fdGltZW91dCA9IHJlcXNrX251bV90aW1lb3V0KHJlcSk7XG5pbmNsdWRlL25ldC90Y3AuaC04OTItXG5pbmNsdWRlL25ldC90Y3AuaDo4OTM6XHRpZiAobnVtX3RpbWVvdXQgXHUwMDNlPSBCSVRTX1BFUl9UWVBFKHRpbWVvdXQpIHx8XG5pbmNsdWRlL25ldC90Y3AuaDo4OTQ6XHQgICAgdGltZW91dCBcdTAwM2UgVTY0X01BWCBcdTAwM2VcdTAwM2UgbnVtX3RpbWVvdXQpXG5pbmNsdWRlL25ldC90Y3AuaC04OTUtXHRcdHJldHVybiBydG9fbWF4O1xuaW5jbHVkZS9uZXQvdGNwLmgtODk2LVxuaW5jbHVkZS9uZXQvdGNwLmg6ODk3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKW1pbl90KHU2NCwgdGltZW91dCBcdTAwM2NcdTAwM2MgbnVtX3RpbWVvdXQsIHJ0b19tYXgpO1xuaW5jbHVkZS9uZXQvdGNwLmgtODk4LX1cbi0tXG5pbmNsdWRlL25ldC90Y3BfZWNuLmg9NjQ1PXRjcF9lY25fbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3QgdGNwaGRyICp0aCxcbi0tXG5pbmNsdWRlL25ldC90Y3BfZWNuLmgtNjUwLVx0ICovXG5pbmNsdWRlL25ldC90Y3BfZWNuLmg6NjUxOlx0aWYgKCFyZXEtXHUwMDNlbnVtX3RpbWVvdXQgfHwgc3luYWNrX3R5cGUgIT0gVENQX1NZTkFDS19SRVRSQU5TKSB7XG5pbmNsdWRlL25ldC90Y3BfZWNuLmgtNjUyLVx0XHRpZiAodGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9vaylcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTgyOT1zdGF0aWMgdm9pZCBzeW5fYWNrX3JlY2FsYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzQtXHRpZiAoIXJza3FfZGVmZXJfYWNjZXB0KSB7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgzNTpcdFx0KmV4cGlyZSA9IHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IG1heF9zeW5fYWNrX3JldHJpZXM7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzNi1cdFx0KnJlc2VuZCA9IDE7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzgtXHR9XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgzOTpcdCpleHBpcmUgPSByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSBtYXhfc3luX2Fja19yZXRyaWVzIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDA6XHRcdCAgKCFpbmV0X3JzayhyZXEpLVx1MDAzZWFja2VkIHx8IHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODQxLVx0LyogRG8gbm90IHJlc2VuZCB3aGlsZSB3YWl0aW5nIGZvciBkYXRhIGFmdGVyIEFDSyxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0NS1cdCpyZXNlbmQgPSAhaW5ldF9yc2socmVxKS1cdTAwM2VhY2tlZCB8fFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDY6XHRcdCAgcmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gcnNrcV9kZWZlcl9hY2NlcHQgLSAxO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDctfVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODUwPXJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzEtXHRyZXEtXHUwMDNlc3luY29va2llID0gMDtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODcyOlx0cmVxLVx1MDAzZW51bV90aW1lb3V0ID0gMDtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODczLVx0cmVxLVx1MDAzZW51bV9yZXRyYW5zID0gMDtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTk2Nz1zdGF0aWMgdm9pZCByZXFza19xdWV1ZV9taWdyYXRlZChzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2OS17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjk3MDpcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTcxLVx0XHRhdG9taWNfaW5jKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMzM9c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTItXHRcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTEzOlx0XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0JiM0MzsmIzQzOyA9PSAwKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTE0LVx0XHRcdGF0b21pY19kZWMoXHUwMDI2cXVldWUtXHUwMDNleW91bmcpO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTEzNS1cdC8qIEV2ZW4gaWYgd2UgY2FuIGNsb25lIHRoZSByZXEsIHdlIG1heSBuZWVkIG5vdCByZXRyYW5zbWl0IGFueSBtb3JlXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExMzY6XHQgKiBTWU4mIzQzO0FDS3MgKG5yZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlIG1heF9zeW5fYWNrX3JldHJpZXMsIGV0YyksIG9yIGFub3RoZXJcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTEzNy1cdCAqIENQVSBtYXkgd2luIHRoZSBcJiMzNDtvd25fcmVxXCYjMzQ7IHJhY2Ugc28gdGhhdCBpbmV0X2VoYXNoX2luc2VydCgpIGZhaWxzLlxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9Mjc0ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2MC1cdFx0amlmZmllc19kZWx0YV90b19jbG9ja190KGRlbHRhKSxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjc2MTpcdFx0cmVxLVx1MDAzZW51bV90aW1lb3V0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzYyLVx0XHRmcm9tX2t1aWRfbXVuZ2VkKHNlcV91c2VyX25zKGYpLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01NDY9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyNS1cdH1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo2MjY6XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0KSB7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjI3Olx0XHRuZXd0cC1cdTAwM2V0b3RhbF9ydG8gPSByZXEtXHUwMDNlbnVtX3RpbWVvdXQ7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNjI4LVx0XHRuZXd0cC1cdTAwM2V1bmRvX21hcmtlciA9IHRyZXEtXHUwMDNlc250X2lzbjtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIwLVx0LyogV2hpbGUgVENQX0RFRkVSX0FDQ0VQVCBpcyBhY3RpdmUsIGRyb3AgYmFyZSBBQ0suICovXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTIxOlx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2MgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIyLVx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxID09IHRjcF9yc2socmVxKS1cdTAwM2VyY3ZfaXNuICYjNDM7IDEpIHtcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NTk9c3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NzQtXG5uZXQvaXB2NC90Y3BfdGltZXIuYzo0NzU6XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gbWF4X3JldHJpZXMpIHtcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ3Ni1cdFx0dGNwX3dyaXRlX2Vycihzayk7XG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDg5LVx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWNjZWNuX2ZhaWxfbW9kZSB8PSBUQ1BfQUNDRUNOX0FDRV9GQUlMX1NFTkQ7XG5uZXQvaXB2NC90Y3BfdGltZXIuYzo0OTA6XHRyZXEtXHUwMDNlbnVtX3RpbWVvdXQmIzQzOyYjNDM7O1xubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDkxLVx0dGNwX3VwZGF0ZV9ydG9fc3RhdHMoc2spO1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjA5ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTYoc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMTE3LVx0XHQgICBqaWZmaWVzX3RvX2Nsb2NrX3QodHRkKSxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjExODpcdFx0ICAgcmVxLVx1MDAzZW51bV90aW1lb3V0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMTE5LVx0XHQgICBmcm9tX2t1aWRfbXVuZ2VkKHNlcV91c2VyX25zKHNlcSksXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDQuYz0xNzI9c3RhdGljIGludCBkdW1wX3JlcV9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jLTE4OS1cdFx0ICAgICAgIFRDUF9TWU5fUkVDViwgMCwgMCwgMSwgamlmZmllc190b19jbG9ja190KHR0ZCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jOjE5MDpcdFx0ICAgICAgIHJlcS1cdTAwM2VudW1fdGltZW91dCwgdWlkLCAwLCAwLCAwLCByZXEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDQuYy0xOTEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYz0xODE9c3RhdGljIGludCBkdW1wX3JlcV9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNi5jLTIwNS1cdFx0ICAgICAgIFRDUF9TWU5fUkVDViwgMCwgMCwgMSwgamlmZmllc190b19jbG9ja190KHR0ZCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNi5jOjIwNjpcdFx0ICAgICAgIHJlcS1cdTAwM2VudW1fdGltZW91dCwgdWlkLCAwLCAwLCAwLCByZXEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYy0yMDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTAxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgVENQL0lQIFN0YWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgYHJlcXNrX3RpbWVyX2hhbmRsZXJgIHdpdGhpbiBgaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGdldCBhIGdyYXNwIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBob21lIGluIG9uIGxpbmVzIDEwNjAgdG8gMTA4MC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCByYW5nZSB0byBzdGFydCB3aXRoIGZvciBjb3JlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBhbmQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSB0aW1lciYjMzk7cyBiZWhhdmlvciwgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdGltZW91dHMgb3IgcmV0cmFuc21pc3Npb25zLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdFx0dGltZXJfc2V0dXAoXHUwMDI2bnJlcS1cdTAwM2Vyc2tfdGltZXIsIHJlcXNrX3RpbWVyX2hhbmRsZXIsIFRJTUVSX1BJTk5FRCk7XG4xMDYxOlx0XHRcdHJlcXNrX3F1ZXVlX21pZ3JhdGVkKFx1MDAyNmluZXRfY3NrKG5zayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4xMDYyOlx0XG4xMDYzOlx0XHRcdHJlcSA9IG5yZXE7XG4xMDY0Olx0XHRcdHNrX2xpc3RlbmVyID0gbnNrO1xuMTA2NTpcdFx0fVxuMTA2NjpcdFxuMTA2NzpcdFx0aWNzayA9IGluZXRfY3NrKHNrX2xpc3RlbmVyKTtcbjEwNjg6XHRcdG5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTtcbjEwNjk6XHRcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbjEwNzA6XHRcdFx0UkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpO1xuMTA3MTpcdFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3N5bl9hY2tfcmV0cmllcyxcbjEwNzI6XHRcdFx0XHRcdCAgICBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcbjEwNzM6XHRcdC8qIE5vcm1hbGx5IGFsbCB0aGUgb3BlbnJlcXMgYXJlIHlvdW5nIGFuZCBiZWNvbWUgbWF0dXJlXG4xMDc0Olx0XHQgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC5cbjEwNzU6XHRcdCAqIElmIHN5bmFjayB3YXMgbm90IGFja25vd2xlZGdlZCBmb3IgMSBzZWNvbmQsIGl0IG1lYW5zXG4xMDc2Olx0XHQgKiBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aGluZ3M6IHN5bmFjayB3YXMgbG9zdCwgYWNrIHdhcyBsb3N0LFxuMTA3NzpcdFx0ICogcnR0IGlzIGhpZ2ggb3Igbm9ib2R5IHBsYW5uZWQgdG8gYWNrIChpLmUuIHN5bmZsb29kKS5cbjEwNzg6XHRcdCAqIFdoZW4gc2VydmVyIGlzIGEgYml0IGxvYWRlZCwgcXVldWUgaXMgcG9wdWxhdGVkIHdpdGggb2xkXG4xMDc5Olx0XHQgKiBvcGVuIHJlcXVlc3RzLCByZWR1Y2luZyBlZmZlY3RpdmUgc2l6ZSBvZiBxdWV1ZS5cbjEwODA6XHRcdCAqIFdoZW4gc2VydmVyIGlzIHdlbGwgbG9hZGVkLCBxdWV1ZSBzaXplIHJlZHVjZXMgdG8gemVyb1xuMTA4MTpcdFx0ICogYWZ0ZXIgc2V2ZXJhbCBtaW51dGVzIG9mIHdvcmsuIEl0IGlzIG5vdCBzeW5mbG9vZCxcbjEwODI6XHRcdCAqIGl0IGlzIG5vcm1hbCBvcGVyYXRpb24uIFRoZSBzb2x1dGlvbiBpcyBwcnVuaW5nXG4xMDgzOlx0XHQgKiB0b28gb2xkIGVudHJpZXMgb3ZlcnJpZGluZyBub3JtYWwgdGltZW91dCwgd2hlblxuMTA4NDpcdFx0ICogc2l0dWF0aW9uIGJlY29tZXMgZGFuZ2Vyb3VzLlxuMTA4NTpcdFx0ICpcbjEwODY6XHRcdCAqIEVzc2VudGlhbGx5LCB3ZSByZXNlcnZlIGhhbGYgb2Ygcm9vbSBmb3IgeW91bmdcbjEwODc6XHRcdCAqIGVtYnJpb25zOyBhbmQgYWJvcnQgb2xkIG9uZXMgd2l0aG91dCBwaXR5LCBpZiBvbGRcbjEwODg6XHRcdCAqIG9uZXMgYXJlIGFib3V0IHRvIGNsb2cgb3VyIHRhYmxlLlxuMTA4OTpcdFx0ICovXG4xMDkwOlx0XHRxdWV1ZSA9IFx1MDAyNmljc2stXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XG4xMDkxOlx0XHRxbGVuID0gcmVxc2tfcXVldWVfbGVuKHF1ZXVlKTtcbjEwOTI6XHRcdGlmICgocWxlbiBcdTAwM2NcdTAwM2MgMSkgXHUwMDNlIG1heCg4VSwgUkVBRF9PTkNFKHNrX2xpc3RlbmVyLVx1MDAzZXNrX21heF9hY2tfYmFja2xvZykpKSB7XG4xMDkzOlx0XHRcdGludCB5b3VuZyA9IHJlcXNrX3F1ZXVlX2xlbl95b3VuZyhxdWV1ZSkgXHUwMDNjXHUwMDNjIDE7XG4xMDk0Olx0XG4xMDk1Olx0XHRcdHdoaWxlIChtYXhfc3luX2Fja19yZXRyaWVzIFx1MDAzZSAyKSB7XG4xMDk2Olx0XHRcdFx0aWYgKHFsZW4gXHUwMDNjIHlvdW5nKVxuMTA5NzpcdFx0XHRcdFx0YnJlYWs7XG4xMDk4Olx0XHRcdFx0bWF4X3N5bl9hY2tfcmV0cmllcy0tO1xuMTA5OTpcdFx0XHRcdHlvdW5nIFx1MDAzY1x1MDAzYz0gMTtcbjExMDA6XHRcdFx0fVxuMTEwMTpcdFx0fVxuMTEwMjpcdFxuMTEwMzpcdFx0c3luX2Fja19yZWNhbGMocmVxLCBtYXhfc3luX2Fja19yZXRyaWVzLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlcnNrcV9kZWZlcl9hY2NlcHQpLFxuMTEwNDpcdFx0XHQgICAgICAgXHUwMDI2ZXhwaXJlLCBcdTAwMjZyZXNlbmQpO1xuMTEwNTpcdFx0dGNwX3N5bl9hY2tfdGltZW91dChyZXEpO1xuMTEwNjpcdFxuMTEwNzpcdFx0aWYgKCFleHBpcmUgXHUwMDI2XHUwMDI2XG4xMTA4Olx0XHQgICAgKCFyZXNlbmQgfHxcbjExMDk6XHRcdCAgICAgIXRjcF9ydHhfc3luYWNrKHNrX2xpc3RlbmVyLCByZXEpIHx8XG4xMTEwOlx0XHQgICAgIGluZXRfcnNrKHJlcSktXHUwMDNlYWNrZWQpKSB7XG4xMTExOlx0XHRcdGlmIChyZXEtXHUwMDNlbnVtX3JldHJhbnMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHRjcF9yc2socmVxKS1cdTAwM2VhY2NlY25fb2spXG4xMTEyOlx0XHRcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xuMTExMzpcdFx0XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0JiM0MzsmIzQzOyA9PSAwKVxuMTExNDpcdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2cXVldWUtXHUwMDNleW91bmcpO1xuMTExNTpcdFx0XHRtb2RfdGltZXIoXHUwMDI2cmVxLVx1MDAzZXJza190aW1lciwgamlmZmllcyAmIzQzOyB0Y3BfcmVxc2tfdGltZW91dChyZXEpKTtcbjExMTY6XHRcbjExMTc6XHRcdFx0aWYgKCFucmVxKVxuMTExODpcdFx0XHRcdHJldHVybjtcbjExMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgZm9yIEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgaXQgaXMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBXb3J0aEZ1enppbmdgLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIFRDUCBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AsIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCB0aGUgcmVsZXZhbnQgaGVhZGVycy4gVGhlIG1vZGlmaWNhdGlvbnMgaW5jbHVkZSB0aW1lb3V0IGNhbGN1bGF0aW9ucywgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIGJpdGZpZWxkIGNoYW5nZXMsIGFuZCBjYXBzIG9uIHJldHJhbnNtaXNzaW9ucy9yZXRyaWVzIHdpdGhpbiB0aW1lcnMuIFRoZXJlJiMzOTtzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyBhcm91bmQgaGFuZGxpbmcgc2hpZnRzIGFuZCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AsIGFuZCBob3cgYHJlcXNrX251bV90aW1lb3V0YCBhY2Nlc3NlcyBgcmVxLSZndDtudW1fdGltZW91dF9zeW5jb29raWVgLiBUaGUgYmVzdCBwYXJ0IGlzIGl0JiMzOTtzIHJlYWRpbHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zOyBsaXN0ZW5pbmcgc29ja2V0cywgU1lOIGhhbmRsaW5nLCBUQ1AgdGltZXIgZXhwaXJhdGlvbnMsIHN5c2N0bHMsIGFuZCBgc2V0c29ja29wdGAgY2FsbHMgZm9yIGBUQ1BfREVGRVJfQUNDRVBUYCBhbmQgYFRDUF9TWU5DTlRgIGFyZSBhbGwgcHJlc2VudC4gWWVwLCBzb3VuZHMgbGlrZSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYXJyb3cgZG93biB0aGUgZm9jdXMgdG8gZmluZCB0aGUgYmVzdCBzeW1ib2xzIHRvIHRhcmdldC4gVGhhdCYjMzk7cyBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG1vZGlmaWVkIGRpcmVjdGx5IG9yIHRoYXQgY2FsbCB0aGUgY2hhbmdlZCBsb2dpYy4gVGhlIGtleSBmdW5jdGlvbnMgSSBzZWUgYXJlOiBgcmVxc2tfdGltZXJfaGFuZGxlcmAgKGluIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCksIHdoZXJlIHdlJiMzOTtyZSBjYXBwaW5nIHJldHJpZXMgYW5kIGNhbGxpbmcgYHRjcF9yZXFza190aW1lb3V0YDsgYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIChpbiBgdGNwX3RpbWVyLmNgKSwgd2l0aCB0aGUgc2FtZSByZXRyeS1jYXBwaW5nIGFuZCBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgIGNhbGw7IGBzZWNzX3RvX3JldHJhbnNgIChpbiBgdGNwLmNgKSwgd2hpY2ggaXMgdXNlZCB3aXRoaW4gYGRvX3RjcF9zZXRzb2Nrb3B0YCBmb3IgYFRDUF9ERUZFUl9BQ0NFUFRgOyBhbmQgYHRjcF9jaGVja19yZXFgIChpbiBgdGNwX21pbmlzb2Nrcy5jYCksIHdoaWNoIGNhbGxzIGB0Y3BfcmVxc2tfdGltZW91dGAuCgpOb3csIGFib3V0IGB0Y3BfcmVxc2tfdGltZW91dF9za2AgYW5kIGByZXFza19udW1fdGltZW91dGAgLSB0aGV5JiMzOTtyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgdGhleSBjYW4mIzM5O3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgdmlhIHN5bWJvbCBjb3ZlcmFnZS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGNhbGxlciBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSAqdXNlKiB0aGVtLiBUaGUgb25lcyBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYXJlIHRoZSBiZXN0OiBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYCwgYHNlY3NfdG9fcmV0cmFuc2AgKG9yIHJhdGhlciBgZG9fdGNwX3NldHNvY2tvcHRgIHdoaWNoIGNhbGxzIGl0KSwgYW5kIGB0Y3BfY2hlY2tfcmVxYC4KClF1aWNrIGNoZWNrIG9uIGBzZWNzX3RvX3JldHJhbnNgLiBZZXAsIGBzZWNzX3RvX3JldHJhbnNgIGlzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IGBkb190Y3Bfc2V0c29ja29wdGAuIGBkb190Y3Bfc2V0c29ja29wdGAgaXRzZWxmIGJlY29tZXMgdGhlIHNldHNvY2tvcHQgZW50cnlwb2ludCwgd2hpY2ggaXMgZ29vZC4KClNvLCBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYCwgYHRjcF9jaGVja19yZXFgLCBhbmQgYGRvX3RjcF9zZXRzb2Nrb3B0YCBhcmUgdGhlIHJlYWwgc3RhcnMuCgpGaW5hbGx5LCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjaGFuZ2VzIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCwgYG5ldC9pcHY0L3RjcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9pcHY0L01ha2VmaWxlYCBvciBgbmV0L2lwdjQvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY29ubmVjdGlvbl9zb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MDkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOC1cdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6OTpcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTAtXHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTEwMC0jaW5jbHVkZSBcdTAwM2NuZXQvaXBfZmliLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDE6I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDItI2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTYxPXN0YXRpYyBpbnQgYnBmX3RjcF9jYV9idGZfc3RydWN0X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy04MC1cdFx0YnJlYWs7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODE6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrLCBpY3NrX2NhX3ByaXYpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjgyOlx0XHRlbmQgPSBvZmZzZXRvZmVuZChzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssIGljc2tfY2FfcHJpdik7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtODMtXHRcdGJyZWFrO1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjg0Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssIGljc2tfYWNrLnBlbmRpbmcpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjg1Olx0XHRlbmQgPSBvZmZzZXRvZmVuZChzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtODYtXHRcdFx0XHQgIGljc2tfYWNrLnBlbmRpbmcpO1xuLS1cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYz0xODQ5PWludCBjaXBzb192NF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xODU5LVx0c3RydWN0IGluZXRfc29jayAqc2tfaW5ldDtcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoxODYwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uO1xubmV0L2lwdjQvY2lwc29faXB2NC5jLTE4NjEtXG4tLVxubmV0L2lwdjQvY2lwc29faXB2NC5jPTIwNTM9dm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0yMDYxLVx0aWYgKGluZXRfdGVzdF9iaXQoSVNfSUNTSywgc2spIFx1MDAyNlx1MDAyNiBoZHJfZGVsdGEgXHUwMDNlIDApIHtcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoyMDYyOlx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9jaXBzb19pcHY0LmMtMjA2My1cdFx0c2tfY29ubi1cdTAwM2VpY3NrX2V4dF9oZHJfbGVuIC09IGhkcl9kZWx0YTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0LVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNTojaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaFx1MDAzZVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9oYXNodGFibGVzLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTYwMT1zdGF0aWMgaW50IGluZXRfY3NrX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02MDIte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo2MDM6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTYwNC1cdERFRklORV9XQUlUKHdhaXQpO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NjQ5PXN0cnVjdCBzb2NrICppbmV0X2Nza19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02NTAte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo2NTE6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTY1Mi1cdHN0cnVjdCByZXF1ZXN0X3NvY2tfcXVldWUgKnF1ZXVlID0gXHUwMDI2aWNzay1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTcxOD12b2lkIGluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzIyLXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6NzIzOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03MjQtXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03MzE9dm9pZCBpbmV0X2Nza19jbGVhcl94bWl0X3RpbWVycyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTczMi17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjczMzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzM0LVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzQzPXZvaWQgaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcnNfc3luYyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc0NC17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc0NTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzQ2LVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzNy1cdHN0cnVjdCBzb2NrICpza19saXN0ZW5lciA9IHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXI7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwMzg6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwMzktXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTExODc9c3RhdGljIHZvaWQgaW5ldF9jbG9uZV91bHAoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3Qgc29jayAqbmV3c2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTg5LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTE5MDpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKG5ld3NrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5MS1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEyMDY9c3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lX2xvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIxMC1cdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2Nsb25lX2xvY2soc2ssIHByaW9yaXR5KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIxMTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIxMi1cdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMTY9c3RhdGljIGludCBpbmV0X3VscF9jYW5fbGlzdGVuKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMxNy17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzMTg6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMTktXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMzM1PWludCBpbmV0X2Nza19saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzM2LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTMzNzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMzOC1cdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTE0Njg9dm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0Njkte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDcwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDcxLVx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcdTAwMjZpY3NrLVx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlO1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxLSNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXHUwMDNlXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaFx1MDAzZVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xOTk9c3RhdGljIGludCBpbmV0X2RpYWdfZ2V0X3Byb3RvY29sKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjA4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MjA5OmludCBpbmV0X3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxMC1cdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTIxLSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaFx1MDAzZVxubmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfaGFzaHRhYmxlcy5oXHUwMDNlXG4tLVxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM9MTAzPXZvaWQgaW5ldF90d3NrX2hhc2hkYW5jZV9zY2hlZHVsZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyxcbi0tXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYy0xMDgtXHRjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoxMDk6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYy0xMTAtXHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgc2stXHUwMDNlc2tfaGFzaCk7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTA5Mi1cdFx0aWYgKGluZXRfdGVzdF9iaXQoSVNfSUNTSywgc2spKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEwOTM6XHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDk0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMDAte1xubmV0L2lwdjQvc3luY29va2llcy5jOjIwMTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMDItXHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XG4tLVxubmV0L2lwdjQvdGNwLmM9NDIwPXZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3AuYy00MjEte1xubmV0L2lwdjQvdGNwLmM6NDIyOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtNDIzLVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MTU1Mj12b2lkIF9fdGNwX2NsZWFudXBfcmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCBjb3BpZWQpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTU1Ny1cdGlmIChpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKSkge1xubmV0L2lwdjQvdGNwLmM6MTU1ODpcdFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtMTU1OS1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zMzYxPWludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3AuYy0zMzYzLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xubmV0L2lwdjQvdGNwLmM6MzM2NDpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTMzNjUtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0zODM3PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtMzg0MC1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xubmV0L2lwdjQvdGNwLmM6Mzg0MTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTM4NDItXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4tLVxubmV0L2lwdjQvdGNwLmM9NDE3Mj1pbnQgdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQxNzQte1xubmV0L2lwdjQvdGNwLmM6NDE3NTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTQxNzYtXG4tLVxubmV0L2lwdjQvdGNwLmM9NDIxMD12b2lkIHRjcF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC90Y3AuYy00MjEyLVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7IC8qIGlmZiBza190eXBlID09IFNPQ0tfU1RSRUFNICovXG5uZXQvaXB2NC90Y3AuYzo0MjEzOlx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtNDIxNC1cdGNvbnN0IHU4IGVjdDFfaWR4ID0gSU5FVF9FQ05fRUNUXzEgLSAxO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ0ODMte1xubmV0L2lwdjQvdGNwLmM6NDQ4NDpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTQ0ODUtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz00ODY3PWludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDg2OS17XG5uZXQvaXB2NC90Y3AuYzo0ODcwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtNDg3MS1cbi0tXG5uZXQvaXB2NC90Y3BfYmljLmM9MTkwPXN0YXRpYyB2b2lkIGJpY3RjcF9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpXG5uZXQvaXB2NC90Y3BfYmljLmMtMTkxLXtcbm5ldC9pcHY0L3RjcF9iaWMuYzoxOTI6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfYmljLmMtMTkzLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9Mzg9dm9pZCB0Y3Bfc2V0X2NhX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTggY2Ffc3RhdGUpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM5LXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6NDA6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE4LVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyMTk6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTIyMC1cdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjM2PXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjM3LXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjM4Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0yMzktXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNTA9c3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjUyLXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUzOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTQtXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNzA9dm9pZCB0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNzEte1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyNzI6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTI3My1cbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTQxMj1pbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGxvYWQsXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy00MTQte1xubmV0L2lwdjQvdGNwX2NvbmcuYzo0MTU6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxNi1cdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM9MTE1PXN0YXRpYyBpbnQgdGNwX2RpYWdfZ2V0X2F1eChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluLFxuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmMtMTE3LXtcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTE4Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2RpYWcuYy0xMTktXHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz0xNDY9c3RhdGljIHNpemVfdCB0Y3BfZGlhZ19nZXRfYXV4X3NpemUoc3RydWN0IHNvY2sgKnNrLCBib29sIG5ldF9hZG1pbilcbm5ldC9pcHY0L3RjcF9kaWFnLmMtMTQ3LXtcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTQ4Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2RpYWcuYy0xNDktXHRzaXplX3Qgc2l6ZSA9IDA7XG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MTQ1PWludCB0Y3BfZmFzdG9wZW5fcmVzZXRfY2lwaGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTE4MS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjE4MjppbnQgdGNwX2Zhc3RvcGVuX2dldF9jaXBoZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0xODMtXHRcdFx0ICAgIHU2NCAqa2V5KVxuLS1cbm5ldC9pcHY0L3RjcF9odGNwLmM9ODI9c3RhdGljIGlubGluZSB2b2lkIG1lYXN1cmVfcnR0KHN0cnVjdCBzb2NrICpzaywgdTMyIHNydHQpXG5uZXQvaXB2NC90Y3BfaHRjcC5jLTgzLXtcbm5ldC9pcHY0L3RjcF9odGNwLmM6ODQ6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaHRjcC5jLTg1LVx0c3RydWN0IGh0Y3AgKmNhID0gaW5ldF9jc2tfY2Eoc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9odGNwLmM9MTAxPXN0YXRpYyB2b2lkIG1lYXN1cmVfYWNoaWV2ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2h0Y3AuYy0xMDMte1xubmV0L2lwdjQvdGNwX2h0Y3AuYzoxMDQ6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaHRjcC5jLTEwNS1cdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyOC17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyMjk6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yMzAtXHRjb25zdCB1bnNpZ25lZCBpbnQgbHNzID0gaWNzay1cdTAwM2VpY3NrX2Fjay5sYXN0X3NlZ19zaXplO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMxMT1zdGF0aWMgdm9pZCB0Y3BfaW5jcl9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtYXhfcXVpY2thY2tzKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzEyLXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMxMzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMxNC1cdHVuc2lnbmVkIGludCBxdWlja2Fja3MgPSB0Y3Bfc2soc2spLVx1MDAzZXJjdl93bmQgLyAoMiAqIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzIzPXN0YXRpYyB2b2lkIHRjcF9lbnRlcl9xdWlja2Fja19tb2RlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1heF9xdWlja2Fja3MpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMjQte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzI1Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzI2LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMzNj1zdGF0aWMgYm9vbCB0Y3BfaW5fcXVpY2thY2tfbW9kZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzcte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzM4Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzM5LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc3OD1zdGF0aWMgdm9pZCB0Y3BfY2xhbXBfd2luZG93KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03ODAtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc4MTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc4Mi1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz05OTU9c3RhdGljIHZvaWQgdGNwX3NhdmVfbHJjdl9mbG93bGFiZWwoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTk5Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjk5ODpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTk5OS1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDE1PXN0YXRpYyB2b2lkIHRjcF9ldmVudF9kYXRhX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTEwMTctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjEwMTg6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE5LVx0dTMyIG5vdztcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yNTU0PXZvaWQgdGNwX2VudGVyX2xvc3Moc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjU1NS17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNTU2Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMjU1Ny1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTI4NDM9c3RhdGljIHZvaWQgdGNwX3VuZG9fY3duZF9yZWR1Y3Rpb24oc3RydWN0IHNvY2sgKnNrLCBib29sIHVubWFya19sb3NzKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTctXHRpZiAodHAtXHUwMDNlcHJpb3Jfc3N0aHJlc2gpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI4NTg6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTktXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzA3ND1zdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9mYWlsZWQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3NS17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMDc2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3Ny1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMDgzPXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMwODUtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMwODY6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMDg3LVx0dTY0IHZhbDtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMTE2PXN0YXRpYyB2b2lkIHRjcF9ub25fY29uZ2VzdGlvbl9sb3NzX3JldHJhbnNtaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExNy17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMTE4Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExOS1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMzMjg9c3RhdGljIHZvaWQgdGNwX2Zhc3RyZXRyYW5zX2FsZXJ0KHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTMyIHByaW9yX3NuZF91bmEsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzMzMC17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMzMxOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzMzMi1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM1MTM9c3RhdGljIHZvaWQgdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE0LXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM1MTU6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE2LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM1MjQ9dm9pZCB0Y3BfcmVhcm1fcnRvKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjUte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzUyNjpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zNjAyPXN0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICphY2tfc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM2MDUte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzYwNjpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM2MDctXHR1NjQgZmlyc3RfYWNrdCwgbGFzdF9hY2t0O1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM4MDc9c3RhdGljIHZvaWQgdGNwX2Fja19wcm9iZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODA4LXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM4MDk6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODEwLVx0c3RydWN0IHNrX2J1ZmYgKmhlYWQgPSB0Y3Bfc2VuZF9oZWFkKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zODU4PXN0YXRpYyB2b2lkIHRjcF9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWRfc2Fja2VkLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM4NjAte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Mzg2MTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM4NjItXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDE3Mj1zdGF0aWMgdm9pZCB0Y3BfaW5fYWNrX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MTczLXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQxNzQ6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MTc1LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQyNzY9c3RhdGljIGludCB0Y3BfYWNrKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWcpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00Mjc3LXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQyNzg6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00Mjc5LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjcwNT12b2lkIHRjcF9pbml0X3RyYW5zZmVyKHN0cnVjdCBzb2NrICpzaywgaW50IGJwZl9vcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDYte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjcwNzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDgtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NzMzPXZvaWQgdGNwX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NzM1LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NzM2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNjczNy1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02ODUyPXN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY4NTQte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Njg1NTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY4NTYtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTUyPXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzE1NC1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzE1NTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxNTYtXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTQzOD12b2lkIHRjcF9sZF9SVE9fcmV2ZXJ0KHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcSlcbm5ldC9pcHY0L3RjcF9pcHY0LmMtNDM5LXtcbm5ldC9pcHY0L3RjcF9pcHY0LmM6NDQwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lwdjQuYy00NDEtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNDg9dm9pZCBpbmV0X3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM1Ny1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM1ODpjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNTktXHQucXVldWVfeG1pdFx0ICAgPSBpcF9xdWV1ZV94bWl0LFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM5Nj1zdGF0aWMgaW50IHRjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzk3LXtcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM5ODpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM5OS1cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI3NzA9c3RhdGljIHZvaWQgZ2V0X3RjcDRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzZXFfZmlsZSAqZiwgaW50IGkpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzc0LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjI3NzU6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI3NzYtXHRjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0xMy1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmhcdTAwM2Vcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MzQwPXZvaWQgdGNwX3VwZGF0ZV9tZXRyaWNzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzQxLXtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MzQyOlx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0zNDMtXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz0zMjY9dm9pZCB0Y3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMzI3LXtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzozMjg6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMzI5LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQ5Nz12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDk5Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTUwMC1cdHUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01NTItXHRzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSA9IHRjcF9yc2socmVxKTtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo1NTM6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKm5ld2ljc2s7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTU0LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cDtcbi0tXG5uZXQvaXB2NC90Y3BfbnYuYz0yMzk9c3RhdGljIHZvaWQgdGNwbnZfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxubmV0L2lwdjQvdGNwX252LmMtMjQwLXtcbm5ldC9pcHY0L3RjcF9udi5jOjI0MTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9udi5jLTI0Mi1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04Mz1zdGF0aWMgdm9pZCB0Y3BfZXZlbnRfbmV3X2RhdGFfc2VudChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODQte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjg1Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTg2LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE3OT1zdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9zZW50KHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE4MS17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTgyOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTE4My1cdGNvbnN0IHUzMiBub3cgPSB0Y3BfamlmZmllczMyO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTUzOC17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTUzOTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQwLVx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTk5Nj1zdGF0aWMgaW5saW5lIGludCBfX3RjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE5OTgtXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxOTk5Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDAtXHRpbnQgbXNzX25vdztcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjAyOT1pbnQgdGNwX21zc190b19tdHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbXNzKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDMxLVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjAzMjpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDMzLVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMDQyPXZvaWQgdGNwX210dXBfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwNDQtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMDQ1Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwNDYtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIwNzk9dW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDgxLVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjA4MjpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDgzLVx0aW50IG1zc19ub3c7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI0NTI9c3RhdGljIGJvb2wgdGNwX3Rzb19zaG91bGRfZGVmZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNDU2LXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyNDU3Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTI0NTgtXHR1MzIgc2VuZF93aW4sIGNvbmdfd2luLCBsaW1pdCwgaW5fZmxpZ2h0LCB0aHJlc2hvbGQ7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI1NjU9c3RhdGljIGlubGluZSB2b2lkIHRjcF9tdHVfY2hlY2tfcmVwcm9iZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjU2Ni17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjU2NzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNTY4LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI2ODQ9c3RhdGljIGludCB0Y3BfbXR1X3Byb2JlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNjg1LXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyNjg2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTI2ODctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzA5OT1ib29sIHRjcF9zY2hlZHVsZV9sb3NzX3Byb2JlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZHZhbmNpbmdfcnRvKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMxMDAte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjMxMDE6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzEwMi1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zMzE0PXUzMiBfX3RjcF9zZWxlY3Rfd2luZG93KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zMzE1LXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMzE2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTMzMTctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzU1MD1pbnQgX190Y3BfcmV0cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2Vncylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNTUxLXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozNTUyOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTM1NTMtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzcyNT12b2lkIHRjcF94bWl0X3JldHJhbnNtaXRfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3MjYte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjM3Mjc6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzcyOC1cdHN0cnVjdCBza19idWZmICpza2IsICpydHhfaGVhZCwgKmhvbGUgPSBOVUxMO1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAyNAoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBJTkVUYCBpcyBlbmFibGVkLCBzbyBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGJ5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIHByb2JhYmx5IGBuZXQvaXB2NC9LY29uZmlnYCBvciBgbmV0L0tjb25maWdgLiBgSU5FVGAgaXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgSVB2NCBhbmQgVENQIG5ldHdvcmtpbmcsIHNvIHRoYXQmIzM5O3MgYSBrZXkgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIEkgYWdyZWUuIFRoaXMgdG91Y2hlcyBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBUQ1Agc3RhY2s6IGNvbm5lY3Rpb24gaGFuZGxpbmcsIHJldHJhbnNtaXNzaW9uIHRpbWVycywgYHJlcXVlc3Rfc29ja2AgYml0ZmllbGQgcGFja2luZywgYW5kIHRpbWVvdXQgY2FsY3VsYXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLgoKTmV4dCwgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJpZ2h0IHN5bWJvbHMgYXJlIGJlaW5nIHRhcmdldGVkLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgYEZvY3VzU3ltYm9sc2A6CiogICBgcmVxc2tfdGltZXJfaGFuZGxlcmAgLSBIYW5kbGVzIHJldHJhbnNtaXNzaW9uIHRpbWVycywgdmVyeSBpbXBvcnRhbnQuCiogICBgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcmAgLSBSZWxhdGVkIHRvIEZhc3QgT3BlbiwgYW5vdGhlciBjcml0aWNhbCBwaWVjZSBvZiBUQ1AuCiogICBgZG9fdGNwX3NldHNvY2tvcHRgIC0gVGhpcyBoYW5kbGVzIHNvY2tldCBvcHRpb25zLCBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCiogICBgdGNwX2NoZWNrX3JlcWAgLSBVc2VkIGR1cmluZyBTWU4tQUNLIGhhbmRsaW5nLCBpdCYjMzk7cyBhbHNvIGEgZ3JlYXQgdGFyZ2V0LgoKVGhlIGBFbmFibGVDb25maWdzYCBsaXN0IG9ubHkgaW5jbHVkZXMgYElORVRgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LgoKVGhlIHJlYXNvbmluZyBzZWVtcyBzb3VuZCwgd2hpY2ggY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24uIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIDctYml0IG92ZXJmbG93IGlzc3VlIGluIGByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0YCBieSBjYXBwaW5nIFNZTi1BQ0sgcmV0cmllcyBhdCAxMjcgaW4gYm90aCBgcmVxc2tfdGltZXJfaGFuZGxlcmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYC4gSXQgYWxzbyBtb2RpZmllcyBiaXRmaWVsZCBkZWZpbml0aW9ucyBpbiBgc3RydWN0IHJlcXVlc3Rfc29ja2AsIGFuZCB1cGRhdGVzIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuIFRoZSBwYXRocyBpbnZvbHZlZCBhcmUgYWxsIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBzb2NrZXQgb3B0aW9ucy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNyaXRpY2FsIGFyZWEgdGhhdCBuZWVkcyBjbG9zZSBleGFtaW5hdGlvbi4KCkZpbmFsbHksIEkmIzM5O2xsIGdpdmUgdGhlIHNldC1yZXN1bHRzIGNhbGwgYSBmaW5hbCBvbmNlLW92ZXIuIFllcCwgZXZlcnl0aGluZyBsb29rcyBjb21wbGV0ZSBhbmQgY29oZXJlbnQuIFRoaXMgYXBwZWFycyB0byBiZSBhIHNvbGlkIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVxc2tfdGltZXJfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyJiMzNDssCiAgICAmIzM0O2RvX3RjcF9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9jaGVja19yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiBhbmQgdGltZW91dCBoYW5kbGluZyB0byBtYXRjaCB0aGUgNy1iaXQgcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBmaWVsZC4gSXQgY2FwcyBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IGluIHJlcXNrX3RpbWVyX2hhbmRsZXIgYW5kIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIsIHJlZmFjdG9ycyB0aGUgYml0ZmllbGQgbGF5b3V0IGluIHN0cnVjdCByZXF1ZXN0X3NvY2ssIGFuZCB1cGRhdGVzIHRjcF9yZXFza190aW1lb3V0X3NrIC8gdGNwX3JlcXNrX3RpbWVvdXQgY2FsY3VsYXRpb25zIHRvIHByZXZlbnQgc2hpZnQgb3ZlcmZsb3dzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIFRDUCBzb2NrZXQgY29ubmVjdGlvbnMgYW5kIHNldHNvY2tvcHQvc3lzY3RsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFza190aW1lcl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXImIzM0OywKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2NoZWNrX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODFlN2MzNWJhNmE0MDgwMDViZmE3NDY5MDI5NzJlNWUyNzhiODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtOTU0LDcgJiM0Mzs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTgogCiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIFNZTkFDS3MgZm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwKLQliZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQomIzQzOwliZSByZXRyYW5zbWl0dGVkLiBUaGUgc3lzY3RsIGFjY2VwdHMgMC0yNTUuIFZhbHVlcyBhYm92ZSAxMjcgYXJlCiYjNDM7CXNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdAomIzQzOwlyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlCiAJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb24KIAl3aXRoIHRoZSBjdXJyZW50IGluaXRpYWwgUlRPIG9mIDFzZWNvbmQuIFdpdGggdGhpcyB0aGUgZmluYWwgdGltZW91dAogCWZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmggYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAppbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaApAQCAtNTgsMTIgJiM0Mzs1OCwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrCQkqZGxfbmV4dDsKIAl1MTYJCQkJbXNzOwogCXU4CQkJCW51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi8KLQl1OAkJCQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU4CQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgogCQkJCQkJICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW4KIAkJCQkJCSAgICAgICogICAgVFMgb2YgU1lOJiM0MztBQ0sKIAkJCQkJCSAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuCiAJCQkJCQkgICAgICAqLwotCXU4CQkJCW51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqLwomIzQzOwkJCXU4CQludW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi8KJiM0MzsJCX07CiYjNDM7CQl1OAkJbnVtX3RpbWVvdXRfc3luY29va2llOwomIzQzOwl9OwogCXUzMgkJCQl0c19yZWNlbnQ7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXJza190aW1lcjsKIAljb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcwkqcnNrX29wczsKQEAgLTc0LDYgJiM0Mzs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAl1MzIJCQkJdGltZW91dDsKIH07CiAKJiM0MztzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS0mZ3Q7bnVtX3RpbWVvdXRfc3luY29va2llKTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmZ3Q7Jmd0OyAxOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmYW1wOyAweDdmOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0xODMsNiAmIzQzOzE4Myw4IEBAIHN0YXRpY19hc3NlcnQoKDEgJmx0OyZsdDsgQVRPX0JJVFMpICZndDsgVENQX0RFTEFDS19NQVgpOwogI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTAkzMjc2NwogI2RlZmluZSBNQVhfVENQX0tFRVBDTlQJCTEyNwogI2RlZmluZSBNQVhfVENQX1NZTkNOVAkJMTI3CiYjNDM7LyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqLwomIzQzOyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUwkxMjcKIAogLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHMKICAqIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhpcyBhc3N1bWVzIGEgY2xvY2sgc21hbGxlciB0aGFuIDEgTWh6LgpAQCAtODgxLDEyICYjNDM7ODgzLDIzIEBAIHN0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKIAlyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtJmd0O3NydHRfdXMgJmd0OyZndDsgMykgJiM0MzsgdHAtJmd0O3J0dHZhcl91cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXU2NCB0aW1lb3V0ID0gKHU2NClyZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dDsKJiM0MzsJdTY0IHRpbWVvdXQgPSBSRUFEX09OQ0UocmVxLSZndDt0aW1lb3V0KTsKJiM0MzsJdTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTsKJiM0MzsKJiM0MzsJaWYgKG51bV90aW1lb3V0ICZndDs9IEJJVFNfUEVSX1RZUEUodGltZW91dCkgfHwKJiM0MzsJICAgIHRpbWVvdXQgJmd0OyBVNjRfTUFYICZndDsmZ3Q7IG51bV90aW1lb3V0KQomIzQzOwkJcmV0dXJuIHJ0b19tYXg7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQgJmx0OyZsdDsgbnVtX3RpbWVvdXQsIHJ0b19tYXgpOwomIzQzO30KIAotCXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsCi0JCQkJICAgIHRjcF9ydG9fbWF4KHJlcS0mZ3Q7cnNrX2xpc3RlbmVyKSk7CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtJmd0O3Jza19saXN0ZW5lciwgcmVxKTsKIH0KIAogdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li4yMWY5NmE1MGMxMGZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTEwNjgsNiAmIzQzOzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCW5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTsKIAltYXhfc3luX2Fja19yZXRyaWVzID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfc3luX3JldHJpZXMpID8gOgogCQlSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpOwomIzQzOwltYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLAomIzQzOwkJCQkgICAgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7CiAJLyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmUKIAkgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC4KIAkgKiBJZiBzeW5hY2sgd2FzIG5vdCBhY2tub3dsZWRnZWQgZm9yIDEgc2Vjb25kLCBpdCBtZWFucwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMzU3LDcgJiM0MzszNTcsNyBAQCBzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpCiAJCWludCBwZXJpb2QgPSB0aW1lb3V0OwogCiAJCXJlcyA9IDE7Ci0JCXdoaWxlIChzZWNvbmRzICZndDsgcGVyaW9kICZhbXA7JmFtcDsgcmVzICZsdDsgMjU1KSB7CiYjNDM7CQl3aGlsZSAoc2Vjb25kcyAmZ3Q7IHBlcmlvZCAmYW1wOyZhbXA7IHJlcyAmbHQ7IE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHsKIAkJCXJlcyYjNDM7JiM0Mzs7CiAJCQl0aW1lb3V0ICZsdDsmbHQ7PSAxOwogCQkJaWYgKHRpbWVvdXQgJmd0OyBydG9fbWF4KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBlNTZlYWU0YmMzNDFlLi4yZDJkZWMxZTkxNTY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtNDY0LDExICYjNDM7NDY0LDEzIEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAKIAl0Y3Bfc3luX2Fja190aW1lb3V0KHJlcSk7CiAKLQkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLgomIzQzOwkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW4KJiM0MzsJICogcmVwcmVzZW50IGl0LgogCSAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KCkKIAkgKi8KIAltYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3N5bl9yZXRyaWVzKSA/IDoKIAkJUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzKSAmIzQzOyAxOwomIzQzOwltYXhfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3JldHJpZXMsIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpOwogCiAJaWYgKHJlcS0mZ3Q7bnVtX3RpbWVvdXQgJmd0Oz0gbWF4X3JldHJpZXMpIHsKIAkJdGNwX3dyaXRlX2Vycihzayk7CkBAIC00OTAsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJaWYgKCF0cC0mZ3Q7cmV0cmFuc19zdGFtcCkKIAkJdHAtJmd0O3JldHJhbnNfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcF90cyh0cCk7CiAJdGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLAotCQkJICByZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dCwgZmFsc2UpOwomIzQzOwkJCSAgICAgdGNwX3JlcXNrX3RpbWVvdXRfc2soc2ssIHJlcSksIGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgdGNwX3J0eF9wcm9iZTBfdGltZWRfb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIHJ1bnMgd2UmIzM5O3JlIGFscmVhZHkgZG9pbmcuICBUaGUgZm9jdXMgaGVyZSBpcyByZWFsbHkgb24gZGV0ZXJtaW5pbmcgaWYgdGhlcmUmIzM5O3MgZW5vdWdoICpuZXcqIGNvZGUgc3VyZmFjZSBvciBzdWZmaWNpZW50bHkgaW50ZXJlc3RpbmcgbG9naWMgaW50cm9kdWNlZCB0byBtYWtlIGEgZm9jdXNlZCBLTVNBTiBzZXNzaW9uIHdvcnRod2hpbGUuCgpGaXJzdCwgbGV0JiMzOTtzIHdhbGsgdGhyb3VnaCB0aGUgZGlmZi4gIEl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBkb2N1bWVudGF0aW9uIGFuZCB2YXJpb3VzIG5ldHdvcmstcmVsYXRlZCBmaWxlcy4gU3BlY2lmaWNhbGx5OgoKKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBVcGRhdGVzIHRoZSBgdGNwX3N5bmFja19yZXRyaWVzYCBkb2N1bWVudGF0aW9uLiBEb2VzbiYjMzk7dCBzZWVtIHJlbGV2YW50IGZvciBLTVNBTiBkaXJlY3RseSwgYnV0IGdvb2QgdG8ga25vdyBpdCYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZC4KKiAgICoqYGluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oYDoqKiAgQSBiaXRmaWVsZCBpbiB0aGUgYHJlcXVlc3Rfc29ja2Agc3RydWN0IGlzIGJlaW5nIHJld29ya2VkLiBUaGUgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgZmllbGRzIGFyZSBiZWluZyByZWZhY3RvcmVkLCBhbmQgYSBoZWxwZXIgZnVuY3Rpb24gYHJlcXNrX251bV90aW1lb3V0YCBpcyBhZGRlZC4gVGhlIGJpdGZpZWxkIG1hbmlwdWxhdGlvbiBtaWdodCBiZSBhbiBhcmVhIG9mIGludGVyZXN0LiBBbnkgY2hhbmdlcyB0byBob3cgd2UgYXJlIGNhbGN1bGF0aW5nIGFuZCBtYW5hZ2luZyByZXRyaWVzIGFuZCB0aW1lb3V0cywgZXNwZWNpYWxseSBpbnZvbHZpbmcgYml0ZmllbGRzLCBjYW4gbGVhZCB0byBpbnRlcmVzdGluZyBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXRpZXMuCiogICAqKmBpbmNsdWRlL25ldC90Y3AuaGA6KiogRGVmaW5lcyBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AuIFRoaXMgaW50cm9kdWNlcyBhIG5ldyB1cHBlciBib3VuZCBmb3IgcmV0cmllcy4gIFRoZSBjYWxjdWxhdGlvbiBvZiB0aW1lb3V0IHVzZXMgYSBzaGlmdCBvcGVyYXRpb24gd2l0aCBhIHByb3RlY3Rpb24gYWdhaW5zdCBvdmVyZmxvdyBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgLCB3aGljaCB3YXJyYW50cyBzY3J1dGlueS4gIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IHNvIGZhciwgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBvdmVyZmxvdyBidWdzLgoqICAgKipgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6KiogIENhcHBpbmcgYG1heF9zeW5fYWNrX3JldHJpZXNgLiAgQW5vdGhlciBsaW1pdC4KKiAgICoqYG5ldC9pcHY0L3RjcC5jYDoqKiAgTGltaXRzIHRoZSByZXRyaWVzIGluIHRoZSBgc2Vjc190b19yZXRyYW5zYCBmdW5jdGlvbi4KKiAgICoqYG5ldC9pcHY0L3RjcF90aW1lci5jYDoqKiBDYXBzIGBtYXhfcmV0cmllc2AgYW5kIHJlcGxhY2VzIHNvbWUgY2FsY3VsYXRpb25zIHdpdGggdGhlIGB0Y3BfcmVxc2tfdGltZW91dF9za2AgaGVscGVyLiBUaGUgY29tYmluYXRpb24gb2YgY2FwcGluZyBhbmQgdGhlIGhlbHBlciBmdW5jdGlvbiBoZXJlIGlzIGludGVyZXN0aW5nLgoKVGhlIHBhdHRlcm4gZW1lcmdpbmcgaXMgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgdGhlIHJldHJ5L3RpbWVvdXQgbG9naWMgZm9yIFRDUCBTWU4tQUNLcywgYWRkaW5nIGxpbWl0cyBhbmQgcmUtZG9pbmcgdGhlIGNhbGN1bGF0aW9ucyB0byBtYWtlIHRoZW0gc2FmZXIuIEJpdGZpZWxkIGNoYW5nZXMgcGx1cyBuZXcgdGltZW91dCBjYWxjdWxhdGlvbiBhbmQgb3ZlcmZsb3cgcHJvdGVjdGlvbiBtZWFucyB0aGVyZSBtaWdodCBiZSBtb3JlIGNoYW5jZXMgb2Ygc29tZXRoaW5nIGdvaW5nIHdyb25nLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBkbyBpcyBsb29rIGNsb3NlbHkgYXQgaG93IGByZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgbXkgcHJlZmVycmVkIHRvb2wgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3Igd2hlcmUgYW5kIGhvdyBgcmVxdWVzdF9zb2NrYCBzdHJ1Y3R1cmVzIGFyZSB1c2VkLiBUaGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgd2hlcmUgdGhlc2Uga2luZCBvZiBidWdzIHR5cGljYWxseSBvcmlnaW5hdGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIGhvdyB0aGUgYml0ZmllbGRzIGFuZCB0aGUgdGltZW91dCB2YWx1ZSBhcmUgYmVpbmcgc2V0LiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmaWVsZHMgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kLgoKQmFzZWQgb24gdGhlIGluaXRpYWwgaW5zcGVjdGlvbiwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIG1pZ2h0IHdhcnJhbnQgYSAqZm9jdXNlZCogS01TQU4gZnV6emluZyBzZXNzaW9uLCBidXQgSSB3b3VsZCBuZWVkIHRvIGFuYWx5emUgdGhlIGByZXF1ZXN0X3NvY2tgIGFsbG9jYXRpb24gYW5kIHVzYWdlIG1vcmUgdG8gYmUgY2VydGFpbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueXRoaW5nIHRoYXQgaW52b2x2ZXMgdGhlIGJpdGZpZWxkcyAoYHN5bmNvb2tpZWAsIGBudW1fdGltZW91dGApLCB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiAoZXNwZWNpYWxseSB0aGUgc2hpZnQgb3BlcmF0aW9uKSwgYW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgbGltaXRzIHRoYXQgd2VyZSBhZGRlZCwgdG8gZmlndXJlIG91dCBpZiB3ZSBoYXZlIGludGVyZXN0aW5nIG1lbW9yeSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXFza19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI1MDU9X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU2OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTcwOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3MS1cdGlmICghcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODQ5PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODUwOnJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg1MS1cdFx0ICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzgtfVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Nzk6I2RlZmluZSByZXFza19hbGxvYyguLi4pXHRhbGxvY19ob29rcyhyZXFza19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODAtXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4MTpzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4NC17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4NTpcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Ni1cdFx0XHRcdFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE3LVxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMjctXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMyODpcdFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI5LVx0ZWxzZVxubmV0L2lwdjQvc3luY29va2llcy5jOjMzMDpcdFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzMxLVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0zNTg9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM5NC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTU6XHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTYtXHRcdFx0XHQgICAgICBcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjYxOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjItXHRpZiAoIXJlcSlcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjctXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTY4Olx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2OS1cdFx0XHRcdCAgICAgIFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzI4PXN0YXRpYyB2b2lkIHN1YmZsb3dfdjZfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzM0LVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MzU6c3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzYtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDUtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0NjpcdHJldHVybiBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsIGF0dGFjaF9saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Ny19XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0ODpFWFBPUlRfU1lNQk9MKG1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MpO1xubmV0L21wdGNwL3N1YmZsb3cuYy03NDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgcmVxc2tfYWxsb2Nfbm9wcm9mYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHJlcXNrX2FsbG9jX25vcHJvZmAgd2l0aGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiB0aGUgYWxsb2NhdGlvbiBvZiByZXF1ZXN0IHNvY2tldHMsIGxpa2VseSBmb3IgY29ubmVjdGlvbiBhdHRlbXB0cywgd2l0aG91dCB0aGUgb3ZlcmhlYWQgb2YgcHJvZmlsaW5nIGRhdGEuIFRoYXQgJiMzNDtub3Byb2YmIzM0OyBzdWZmaXggaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIEl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBjcml0aWNhbCBhbmQgZGV0YWlsZWQgcHJvZmlsaW5nIGlzbiYjMzk7dCBuZWNlc3NhcnksIG1heWJlIGR1cmluZyBoaWdoLXZvbHVtZSBjb25uZWN0aW9uIHN0b3JtcyBvciBzaW1pbGFyLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lICp3aGVuKiB0aGlzIG9wdGltaXphdGlvbiBpcyB1c2VkIGFuZCB3aHkgYSBwcm9maWxlLWZyZWUgYWxsb2NhdGlvbiBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBoZXJlLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgc3BlY2lhbCBtZW1vcnkgcG9vbHMgb3IgY2FjaGluZyBzdHJhdGVnaWVzIHRvIHNwZWVkIHRoaW5ncyB1cC4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBjYWxscyB0byBga3phbGxvY2AsIGBrbWFsbG9jYCBvciBzaW1pbGFyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdHJhZGUtb2ZmcyBiZWluZyBtYWRlIGhlcmUg4oCTIG1lbW9yeSB1c2FnZSB2ZXJzdXMgcHJvZmlsaW5nIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBvciBpdHMgY2FsbGVycy9jYWxsZWVzLiBUaGlzIG9uZSBzaG91bGQgYmUgaW50ZXJlc3RpbmcsIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQ1Olx0XHQqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktXHUwMDNlYWNrZWQgfHxcbiA4NDY6XHRcdFx0ICByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCAtIDE7XG4gODQ3Olx0fVxuIDg0ODpcdFxuIDg0OTpcdHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcbiA4NTA6XHRyZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuIDg1MTpcdFx0XHQgICBib29sIGF0dGFjaF9saXN0ZW5lcilcbiA4NTI6XHR7XG4gODUzOlx0XHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gODU0Olx0XG4gODU1Olx0XHRyZXEgPSBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZihvcHMtXHUwMDNlc2xhYiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gODU2Olx0XHRpZiAoIXJlcSlcbiA4NTc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODU4Olx0XHRyZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gTlVMTDtcbiA4NTk6XHRcdGlmIChhdHRhY2hfbGlzdGVuZXIpIHtcbiA4NjA6XHRcdFx0aWYgKHVubGlrZWx5KCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2tfbGlzdGVuZXItXHUwMDNlc2tfcmVmY250KSkpIHtcbiA4NjE6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUob3BzLVx1MDAzZXNsYWIsIHJlcSk7XG4gODYyOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gODYzOlx0XHRcdH1cbiA4NjQ6XHRcdFx0cmVxLVx1MDAzZXJza19saXN0ZW5lciA9IHNrX2xpc3RlbmVyO1xuIDg2NTpcdFx0fVxuIDg2NjpcdFx0cmVxLVx1MDAzZXJza19vcHMgPSBvcHM7XG4gODY3Olx0XHRyZXFfdG9fc2socmVxKS1cdTAwM2Vza19wcm90ID0gc2tfbGlzdGVuZXItXHUwMDNlc2tfcHJvdDtcbiA4Njg6XHRcdHNrX25vZGVfaW5pdChcdTAwMjZyZXFfdG9fc2socmVxKS1cdTAwM2Vza19ub2RlKTtcbiA4Njk6XHRcdHNrX3R4X3F1ZXVlX2NsZWFyKHJlcV90b19zayhyZXEpKTtcbiA4NzA6XHRcdHJlcS1cdTAwM2VzYXZlZF9zeW4gPSBOVUxMO1xuIDg3MTpcdFx0cmVxLVx1MDAzZXN5bmNvb2tpZSA9IDA7XG4gODcyOlx0XHRyZXEtXHUwMDNlbnVtX3RpbWVvdXQgPSAwO1xuIDg3MzpcdFx0cmVxLVx1MDAzZW51bV9yZXRyYW5zID0gMDtcbiA4NzQ6XHRcdHJlcS1cdTAwM2VzayA9IE5VTEw7XG4gODc1Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cmVxLVx1MDAzZXJza19yZWZjbnQsIDApO1xuIDg3NjpcdFxuIDg3NzpcdFx0cmV0dXJuIHJlcTtcbiA4Nzg6XHR9XG4gODc5Olx0I2RlZmluZSByZXFza19hbGxvYyguLi4pXHRhbGxvY19ob29rcyhyZXFza19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuIDg4MDpcdFxuIDg4MTpcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiA4ODI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiA4ODM6XHRcdFx0XHRcdCAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxuIDg4NDpcdHtcbiA4ODU6XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXG4gODg2Olx0XHRcdFx0XHRcdCAgICAgICBhdHRhY2hfbGlzdGVuZXIpO1xuIDg4NzpcdFxuIDg4ODpcdFx0aWYgKHJlcSkge1xuIDg4OTpcdFx0XHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBhbmQgUmVsYXRlZCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBmdW5jdGlvbi4gSSBzZWUgcmlnaHQgYXdheSB0aGF0IGByZXEtJmd0O3N5bmNvb2tpZSA9IDA7YCBhbmQgYHJlcS0mZ3Q7bnVtX3RpbWVvdXQgPSAwO2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZSwgZW5zdXJpbmcgYSBrbm93biBzdGFydGluZyBzdGF0ZS4KCk5vdywgSSYjMzk7bSBjdXJpb3VzIGFib3V0IGhvdyBgcmVxc2tfbnVtX3RpbWVvdXRgIHdvcmtzLCBzbyBsZXQmIzM5O3MgcGVlayBhdCB0aGF0OgoKYGBgYwpzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKewoJdTggbnVtX3RpbWVvdXQgPSBSRUFEX09OQ0UocmVxLSZndDtudW1fdGltZW91dF9zeW5jb29raWUpOwoKI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQoJcmV0dXJuIG51bV90aW1lb3V0ICZndDsmZ3Q7IDE7CiNlbHNlCglyZXR1cm4gbnVtX3RpbWVvdXQgJmFtcDsgMHg3ZjsKI2VuZGlmCn0KYGBgCgpXYWl0IGEgc2Vjb25k4oCmICBJdCBsb29rcyBsaWtlIGByZXEtJmd0O251bV90aW1lb3V0YCBpcyBhIGJpdGZpZWxkIHdpdGhpbiBgbnVtX3RpbWVvdXRfc3luY29va2llYCEgIExldCBtZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24gdG8gY29uZmlybSBteSBzdXNwaWNpb25zOgoKYGBgYwoJdW5pb24gewoJCXN0cnVjdCB7CgkJCXU4CQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgoJCQkJCQkgICAgICAqIDEpIHRjcG9wdHMgbmVlZHMgdG8gYmUgZW5jb2RlZCBpbgoJCQkJCQkgICAgICAqICAgIFRTIG9mIFNZTiYjNDM7QUNLCgkJCQkJCSAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuCgkJCQkJCSAgICAgICovCgkJCXU4CQludW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi8KCQl9OwoJCXU4CQludW1fdGltZW91dF9zeW5jb29raWU7Cgl9OwpgYGAKClllcywgaXQmIzM5O3MgYSB1bmlvbi4gIGBzeW5jb29raWVgIGlzIGEgc2luZ2xlIGJpdCwgYW5kIGBudW1fdGltZW91dGAgdXNlcyB0aGUgb3RoZXIgNyBiaXRzIG9mIHRoZSBieXRlLiAgVGhlcmVmb3JlLCB3aGVuIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGFyZSBib3RoIGFzc2lnbmVkIHRvIDAsIGFsbCA4IGJpdHMgb2YgYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgYXJlIGJlaW5nIHNldCwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIGJ5dGUgaXMgaW5pdGlhbGl6ZWQsIGV2ZW4gd2hlbiB1c2luZyBga21lbV9jYWNoZV9hbGxvY2AuIEV4Y2VsbGVudCwgdGhhdCBzZWVtcyBjbGVhci4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBJJiMzOTtsbCBxdWlja2x5IGRvIGEgZ3JlcCBhY3Jvc3MgdGhlIHRyZWUgZm9yIGBzeW5jb29raWVgIG9yIGBudW1fdGltZW91dGAgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgb3Igd2hlcmUgYG51bV90aW1lb3V0X3N5bmNvb2tpZWAsIGBudW1fdGltZW91dGAgb3IgYHN5bmNvb2tpZWAgYXJlIG1vZGlmaWVkLiBUaGlzIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHBvdGVudGlhbGx5IHRvdWNoaW5nIHRoaXMgbWVtb3J5IHNwYWNlIGluIGEgd2F5IHRoYXQgSSYjMzk7bSBub3QgZXhwZWN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1fdGltZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04Mjk9c3RhdGljIHZvaWQgc3luX2Fja19yZWNhbGMoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODM0LVx0aWYgKCFyc2txX2RlZmVyX2FjY2VwdCkge1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4MzU6XHRcdCpleHBpcmUgPSByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSBtYXhfc3luX2Fja19yZXRyaWVzO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzYtXHRcdCpyZXNlbmQgPSAxO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODM4LVx0fVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Mzk6XHQqZXhwaXJlID0gcmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gbWF4X3N5bl9hY2tfcmV0cmllcyBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQwOlx0XHQgICghaW5ldF9yc2socmVxKS1cdTAwM2VhY2tlZCB8fCByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0MS1cdC8qIERvIG5vdCByZXNlbmQgd2hpbGUgd2FpdGluZyBmb3IgZGF0YSBhZnRlciBBQ0ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDUtXHQqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktXHUwMDNlYWNrZWQgfHxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQ2Olx0XHQgIHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0IC0gMTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODQ3LX1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTg1MD1yZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODcxLVx0cmVxLVx1MDAzZXN5bmNvb2tpZSA9IDA7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg3MjpcdHJlcS1cdTAwM2VudW1fdGltZW91dCA9IDA7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg3My1cdHJlcS1cdTAwM2VudW1fcmV0cmFucyA9IDA7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05Njc9c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05Njkte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5NzA6XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0ID09IDApXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk3MS1cdFx0YXRvbWljX2luYyhcdTAwMjZxdWV1ZS1cdTAwM2V5b3VuZyk7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMDMzPXN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTEyLVx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2VhY2NlY25fZmFpbF9tb2RlIHw9IFRDUF9BQ0NFQ05fQUNFX0ZBSUxfU0VORDtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTExMzpcdFx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCYjNDM7JiM0MzsgPT0gMClcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTExNC1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMzUtXHQvKiBFdmVuIGlmIHdlIGNhbiBjbG9uZSB0aGUgcmVxLCB3ZSBtYXkgbmVlZCBub3QgcmV0cmFuc21pdCBhbnkgbW9yZVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTM2Olx0ICogU1lOJiM0MztBQ0tzIChucmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZSBtYXhfc3luX2Fja19yZXRyaWVzLCBldGMpLCBvciBhbm90aGVyXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMzctXHQgKiBDUFUgbWF5IHdpbiB0aGUgXCYjMzQ7b3duX3JlcVwmIzM0OyByYWNlIHNvIHRoYXQgaW5ldF9laGFzaF9pbnNlcnQoKSBmYWlscy5cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI3NDQ9c3RhdGljIHZvaWQgZ2V0X29wZW5yZXE0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI3NjAtXHRcdGppZmZpZXNfZGVsdGFfdG9fY2xvY2tfdChkZWx0YSksXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjI3NjE6XHRcdHJlcS1cdTAwM2VudW1fdGltZW91dCxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2Mi1cdFx0ZnJvbV9rdWlkX211bmdlZChzZXFfdXNlcl9ucyhmKSxcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02MjUtXHR9XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjI2Olx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjYyNzpcdFx0bmV3dHAtXHUwMDNldG90YWxfcnRvID0gcmVxLVx1MDAzZW51bV90aW1lb3V0O1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyOC1cdFx0bmV3dHAtXHUwMDNldW5kb19tYXJrZXIgPSB0cmVxLVx1MDAzZXNudF9pc247XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMC1cdC8qIFdoaWxlIFRDUF9ERUZFUl9BQ0NFUFQgaXMgYWN0aXZlLCBkcm9wIGJhcmUgQUNLLiAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjkyMTpcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNjIFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQpIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMi1cdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSA9PSB0Y3BfcnNrKHJlcSktXHUwMDNlcmN2X2lzbiAmIzQzOyAxKSB7XG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NDU5PXN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDc0LVxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDc1Olx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IG1heF9yZXRyaWVzKSB7XG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NzYtXHRcdHRjcF93cml0ZV9lcnIoc2spO1xuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ4OS1cdFx0dGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDkwOlx0cmVxLVx1MDAzZW51bV90aW1lb3V0JiM0MzsmIzQzOztcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ5MS1cdHRjcF91cGRhdGVfcnRvX3N0YXRzKHNrKTtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIwOTQ9c3RhdGljIHZvaWQgZ2V0X29wZW5yZXE2KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjExNy1cdFx0ICAgamlmZmllc190b19jbG9ja190KHR0ZCksXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIxMTg6XHRcdCAgIHJlcS1cdTAwM2VudW1fdGltZW91dCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjExOS1cdFx0ICAgZnJvbV9rdWlkX211bmdlZChzZXFfdXNlcl9ucyhzZXEpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgb3V0IGxvdWQ6CgoqKlByb2JpbmcgQ29va2llIEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgcGFyYW1ldGVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBjb29raWUgY3JlYXRpb24gcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0aG9yb3VnaGx5IGV4YW1pbmluZyB0aGUgYGNvb2tpZV9icGZfY2hlY2tgIGZ1bmN0aW9uLCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTtsbCBleHRlbmQgbXkgc2VhcmNoIHRvIGFueSBvdGhlciBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gY3JhZnRpbmcgdGhlc2UgY29va2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0aGF0IHRoZXNlIGNyaXRpY2FsIHZhcmlhYmxlcyBoYXZlIHNlbnNpYmxlLCBkZWZhdWx0IHZhbHVlcyAob3IgYXJlIGR5bmFtaWNhbGx5IHNldCBhcyBuZWVkZWQpIGFzIHNvb24gYXMgdGhlIGNvb2tpZSBpcyBnZW5lcmF0ZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBiZWluZyBleHBsaWNpdGx5IGFkZHJlc3NlZCBhbmQgY29uZmlndXJlZCwgcmF0aGVyIHRoYW4gYmVpbmcgbGVmdCB0byBzb21lIHVuZGVmaW5lZCBzdGF0ZSBvciBpbXBsaWVkIGZyb20gZWxzZXdoZXJlLCBiZWNhdXNlIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2Ugdml0YWwgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBjb25zaXN0ZW50bHkgYW5kIHByZWRpY3RhYmx5IGFjcm9zcyBhbGwgcmVsZXZhbnQgY29va2llIGNyZWF0aW9uIHJvdXRpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb29raWVfdGNwX3JlcXNrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9zeW5jb29raWVzLmM9MzAyPXN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTctXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzE4OnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTktXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzk0LVxubmV0L2lwdjQvc3luY29va2llcy5jOjM5NTpcdHJldHVybiBjb29raWVfdGNwX3JlcXNrX2FsbG9jKFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5Ni1cdFx0XHRcdCAgICAgIFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xMzE9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE2Ny1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxNjg6XHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTY5LVx0XHRcdFx0ICAgICAgXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb29raWUgQWxsb2NhdG9yKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY29va2llX3RjcF9yZXFza19hbGxvY2Agd2l0aGluIGBuZXQvaXB2NC9zeW5jb29raWVzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIHdvcmtzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgdGhlIGByZXFza2Agc3RydWN0dXJlcyB3aGVuIFRDUCBzeW5jb29raWVzIGFyZSBlbmFibGVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgZHVyaW5nIHRpbWVzIG9mIFNZTiBmbG9vZCBhdHRhY2tzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1dGlsaXplZCBhbmQgaG93IHRoZXkgYXJlIGluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbnkgcm9idXN0IFRDUCBpbXBsZW1lbnRhdGlvbiBhbmQgYSB0aG9yb3VnaCBncmFzcCBvZiBpdCBpcyBlc3NlbnRpYWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE4Olx0c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxuIDMxOTpcdFx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDMyMDpcdFx0XHRcdFx0XHQgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICp0Y3Bfb3B0LFxuIDMyMTpcdFx0XHRcdFx0XHQgICAgaW50IG1zcywgdTMyIHRzb2ZmKVxuIDMyMjpcdHtcbiAzMjM6XHRcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTtcbiAzMjQ6XHRcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxO1xuIDMyNTpcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xuIDMyNjpcdFxuIDMyNzpcdFx0aWYgKHNrX2lzX21wdGNwKHNrKSlcbiAzMjg6XHRcdFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG4gMzI5Olx0XHRlbHNlXG4gMzMwOlx0XHRcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xuIDMzMTpcdFxuIDMzMjpcdFx0aWYgKCFyZXEpXG4gMzMzOlx0XHRcdHJldHVybiBOVUxMO1xuIDMzNDpcdFxuIDMzNTpcdFx0aWYgKGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzaywgc2tiLCByZXEpKSB7XG4gMzM2Olx0XHRcdHJlcXNrX2ZyZWUocmVxKTtcbiAzMzc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzM4Olx0XHR9XG4gMzM5Olx0XG4gMzQwOlx0XHRpcmVxID0gaW5ldF9yc2socmVxKTtcbiAzNDE6XHRcdHRyZXEgPSB0Y3BfcnNrKHJlcSk7XG4gMzQyOlx0XG4gMzQzOlx0XHRyZXEtXHUwMDNlbXNzID0gbXNzO1xuIDM0NDpcdFx0cmVxLVx1MDAzZXRzX3JlY2VudCA9IHRjcF9vcHQtXHUwMDNlc2F3X3RzdGFtcCA/IHRjcF9vcHQtXHUwMDNlcmN2X3RzdmFsIDogMDtcbiAzNDU6XHRcbiAzNDY6XHRcdGlyZXEtXHUwMDNlc25kX3dzY2FsZSA9IHRjcF9vcHQtXHUwMDNlc25kX3dzY2FsZTtcbiAzNDc6XHRcdGlyZXEtXHUwMDNldHN0YW1wX29rID0gdGNwX29wdC1cdTAwM2VzYXdfdHN0YW1wO1xuIDM0ODpcdFx0aXJlcS1cdTAwM2VzYWNrX29rID0gdGNwX29wdC1cdTAwM2VzYWNrX29rO1xuIDM0OTpcdFx0aXJlcS1cdTAwM2V3c2NhbGVfb2sgPSB0Y3Bfb3B0LVx1MDAzZXdzY2FsZV9vaztcbiAzNTA6XHRcdGlyZXEtXHUwMDNlZWNuX29rID0gISEodGNwX29wdC1cdTAwM2VyY3ZfdHNlY3IgXHUwMDI2IFRTX09QVF9FQ04pO1xuIDM1MTpcdFxuIDM1MjpcdFx0dHJlcS1cdTAwM2VyZXFfdXNlY190cyA9IGZhbHNlO1xuIDM1MzpcdFx0dHJlcS1cdTAwM2V0c19vZmYgPSB0c29mZjtcbiAzNTQ6XHRcbiAzNTU6XHRcdHJldHVybiByZXE7XG4gMzU2Olx0fVxuIDM1NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNQoJCQkJCQkJb3V0cHV0OiAyNDIKCQkJCQkJCXRob3VnaHRzOiAxMDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3luY2hyb25pemF0aW9uIGFuZCBJbml0aWFsaXphdGlvbiBvZiBgc3luY29va2llYCBhbmQgYG51bV90aW1lb3V0YCBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhlIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGJpdGZpZWxkcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSSBzZWUgdGhhdCB0aGV5JiMzOTtyZSBwYWNrZWQgaW50byBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAuIFRoZSBrZXkgaXMgdXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIGF0b21pYyBhY2Nlc3MgdG8gYG51bV90aW1lb3V0X3N5bmNvb2tpZWAuIFRoaXMgc2lkZXN0ZXBzIHBvdGVudGlhbCBkYXRhIHJhY2VzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBub24tYXRvbWljIHJlYWRzIG9mIGluZGl2aWR1YWwgYml0ZmllbGRzLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBpbiBgcmVxc2tfYWxsb2Nfbm9wcm9mKClgLCBgcmVxLSZndDtzeW5jb29raWVgIGFuZCBgcmVxLSZndDtudW1fdGltZW91dGAgYXJlIGV4cGxpY2l0bHkgemVyb2VkLiBUaGlzIG1lYW5zIHRoZSBlbnRpcmUgYnl0ZSAoYG51bV90aW1lb3V0X3N5bmNvb2tpZWApIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBUaGlzIGluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwuCgpOb3csIGxldCYjMzk7cyBjb25uZWN0IHRoaXMgdG8gdGhlIHBvdGVudGlhbCBLTVNBTiBhbmQgS0FTQU4gaXNzdWVzLiBUaGUgY3JpdGVyaWEgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZToKMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UgaW4gdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYzoqKiBUaGUgY29kZSAqZG9lcyogcmVseSBvbiBgcmVxLSZndDtzeW5jb29raWVgIGFuZCBgcmVxLSZndDtudW1fdGltZW91dGAsIGJ1dCB0aGV5IGFyZSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHJpc2suCjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb246KiogVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuCjQuICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIGFjY2VzczoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBjaGVja3Mgd2l0aGluIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCB0byBwcmV2ZW50IHNoaWZ0IG92ZXJmbG93IGFuZCBjYXAgdGltZW91dCB2YWx1ZXMgYmFzZWQgb24gYG51bV90aW1lb3V0YC4gVGhpcyBpcyBwcmVjaXNlbHkgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmlza3MgaW4gYXJpdGhtZXRpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIGJ5dGUgd291bGQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4KClNvLCBkaWdnaW5nIGRlZXBlciwgSSBzZWUgdGhlIHBhdGNoIGRvZXMgc2V2ZXJhbCBnb29kIHRoaW5ncyB0byBtYWtlIHRoaXMgcm9idXN0OgoqICAgVXBkYXRlcyB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGltcG9ydGFudC4KKiAgIFVzZXMgdGhlIGFub255bW91cyBzdHJ1Y3QgaW5zaWRlIHRoZSB1bmlvbiBmb3Igc2FmZSBhY2Nlc3MgdG8gdGhlIGJpdGZpZWxkcy4KKiAgIEludHJvZHVjZXMgdGhlIGByZXFza19udW1fdGltZW91dCgpYCBmdW5jdGlvbiB1c2luZyBgUkVBRF9PTkNFYCB0byBnZXQgdGhlIHZhbHVlLgoqICAgQm91bmRzIHRoZSByZXRyeSBjb3VudCB3aXRoIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIGhhdmUgb25seSA3IGJpdHMuCiogICBUaGUgYHRjcF9yZXFza190aW1lb3V0X3NrKClgIGluY2x1ZGVzIGV4cGxpY2l0IGJvdW5kcyBjaGVja3MuCgpHaXZlbiBhbGwgb2YgdGhpcywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbmQgdGhlIGJvdW5kcyBhcmUgY2hlY2tlZCBpbiB0aGUgaW1wb3J0YW50IHBsYWNlcy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gTm93LCB0aW1lIHRvIGxvZyB0aGF0IGluIHRoZSBzeXN0ZW0gd2l0aCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZSByZWxldmFudCByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NDQuMzc3OTA1MzQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5OTU5OTU3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcXNrX3RpbWVyX2hhbmRsZXJcIixcbiAgICBcInRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJcIixcbiAgICBcImRvX3RjcF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfY2hlY2tfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYml0ZmllbGQgZGF0YSByYWNlIHNhZmV0eSBhbmQgaW50ZWdlci9zaGlmdCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGZvciBgc3RydWN0IHJlcXVlc3Rfc29ja2AuIEl0IGFkZHMgYSB1bmlvbiB3aXRoIGBudW1fdGltZW91dF9zeW5jb29raWVgIHRvIGFsbG93IGxvY2tsZXNzIHNpbmdsZS1ieXRlIGBSRUFEX09OQ0VgIHJlYWRzIG9mIHRoZSA3LWJpdCBgbnVtX3RpbWVvdXRgIGZpZWxkLCBjYXBzIG1heGltdW0gU1lOLUFDSyByZXRyaWVzIHRvIDEyNyAobWF0Y2hpbmcgdGhlIDctYml0IGZpZWxkIHdpZHRoKSwgYW5kIHByZXZlbnRzIHVuZGVmaW5lZCBzaGlmdCBiZWhhdmlvciBpbiBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgLlxcblxcbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NDQuMzc3OTExMjI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MTAxMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTA4MWU3YzM1YmE2YTQwODAwNWJmYTc0NjkwMjk3MmU1ZTI3OGI4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXG5pbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXG5AQCAtOTU0LDcgKzk1NCw5IEBAIHRjcF9zdGR1cmcgLSBCT09MRUFOXFxuIFxcbiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSXFxuIFxcdE51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsXFxuLVxcdGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlXFxuK1xcdGJlIHJldHJhbnNtaXR0ZWQuIFRoZSBzeXNjdGwgYWNjZXB0cyAwLTI1NS4gVmFsdWVzIGFib3ZlIDEyNyBhcmVcXG4rXFx0c2lsZW50bHkgY2FwcGVkIGJ5IHRoZSBTWU4tQUNLIHRpbWVycywgbWF0Y2hpbmcgdGhlIDctYml0XFxuK1xcdHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgZmllbGQuIERlZmF1bHQgdmFsdWVcXG4gXFx0aXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb25cXG4gXFx0d2l0aCB0aGUgY3VycmVudCBpbml0aWFsIFJUTyBvZiAxc2Vjb25kLiBXaXRoIHRoaXMgdGhlIGZpbmFsIHRpbWVvdXRcXG4gXFx0Zm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiB3aWxsIGhhcHBlbiBhZnRlciA2M3NlY29uZHMuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcXG5pbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcXG5AQCAtNTgsMTIgKzU4LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xcbiBcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrXFx0XFx0KmRsX25leHQ7XFxuIFxcdHUxNlxcdFxcdFxcdFxcdG1zcztcXG4gXFx0dThcXHRcXHRcXHRcXHRudW1fcmV0cmFuczsgLyogbnVtYmVyIG9mIHJldHJhbnNtaXRzICovXFxuLVxcdHU4XFx0XFx0XFx0XFx0c3luY29va2llOjE7IC8qIFRydWUgaWZcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1OFxcdFxcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICogMSkgdGNwb3B0cyBuZWVkcyB0byBiZSBlbmNvZGVkIGluXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICogICAgVFMgb2YgU1lOK0FDS1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAqIDIpIEFDSyBpcyB2YWxpZGF0ZWQgYnkgQlBGIGtmdW5jLlxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAqL1xcbi1cXHR1OFxcdFxcdFxcdFxcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xcbitcXHRcXHRcXHR1OFxcdFxcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xcbitcXHRcXHR9O1xcbitcXHRcXHR1OFxcdFxcdG51bV90aW1lb3V0X3N5bmNvb2tpZTtcXG4rXFx0fTtcXG4gXFx0dTMyXFx0XFx0XFx0XFx0dHNfcmVjZW50O1xcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdFxcdFxcdHJza190aW1lcjtcXG4gXFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHNcXHQqcnNrX29wcztcXG5AQCAtNzQsNiArNzksMTcgQEAgc3RydWN0IHJlcXVlc3Rfc29jayB7XFxuIFxcdHUzMlxcdFxcdFxcdFxcdHRpbWVvdXQ7XFxuIH07XFxuIFxcbitzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4re1xcbitcXHR1OCBudW1fdGltZW91dCA9IFJFQURfT05DRShyZXEtXFx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZSk7XFxuK1xcbisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXFxuK1xcdHJldHVybiBudW1fdGltZW91dCBcXHUwMDNlXFx1MDAzZSAxO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gbnVtX3RpbWVvdXQgXFx1MDAyNiAweDdmO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRyZXR1cm4gKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilzaztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxcbmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxcbkBAIC0xODMsNiArMTgzLDggQEAgc3RhdGljX2Fzc2VydCgoMSBcXHUwMDNjXFx1MDAzYyBBVE9fQklUUykgXFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XFxuICNkZWZpbmUgTUFYX1RDUF9LRUVQSU5UVkxcXHQzMjc2N1xcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUENOVFxcdFxcdDEyN1xcbiAjZGVmaW5lIE1BWF9UQ1BfU1lOQ05UXFx0XFx0MTI3XFxuKy8qIHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgaXMgYSA3LWJpdCBmaWVsZC4gKi9cXG4rI2RlZmluZSBNQVhfVENQX1NZTkFDS19SRVRSSUVTXFx0MTI3XFxuIFxcbiAvKiBFbnN1cmUgdGhhdCBUQ1AgUEFXUyBjaGVja3MgYXJlIHJlbGF4ZWQgYWZ0ZXIgfjIxNDcgc2Vjb25kc1xcbiAgKiB0byBhdm9pZCBvdmVyZmxvd3MuIFRoaXMgYXNzdW1lcyBhIGNsb2NrIHNtYWxsZXIgdGhhbiAxIE1oei5cXG5AQCAtODgxLDEyICs4ODMsMjMgQEAgc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxcbiBcXHRyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtXFx1MDAzZXNydHRfdXMgXFx1MDAzZVxcdTAwM2UgMykgKyB0cC1cXHUwMDNlcnR0dmFyX3VzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4ge1xcbi1cXHR1NjQgdGltZW91dCA9ICh1NjQpcmVxLVxcdTAwM2V0aW1lb3V0IFxcdTAwM2NcXHUwMDNjIHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQ7XFxuK1xcdHU2NCB0aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cXHUwMDNldGltZW91dCk7XFxuK1xcdHUzMiBydG9fbWF4ID0gdGNwX3J0b19tYXgoc2spO1xcbitcXHR1OCBudW1fdGltZW91dCA9IHJlcXNrX251bV90aW1lb3V0KHJlcSk7XFxuK1xcbitcXHRpZiAobnVtX3RpbWVvdXQgXFx1MDAzZT0gQklUU19QRVJfVFlQRSh0aW1lb3V0KSB8fFxcbitcXHQgICAgdGltZW91dCBcXHUwMDNlIFU2NF9NQVggXFx1MDAzZVxcdTAwM2UgbnVtX3RpbWVvdXQpXFxuK1xcdFxcdHJldHVybiBydG9fbWF4O1xcbitcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKW1pbl90KHU2NCwgdGltZW91dCBcXHUwMDNjXFx1MDAzYyBudW1fdGltZW91dCwgcnRvX21heCk7XFxuK31cXG4gXFxuLVxcdHJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsXFxuLVxcdFxcdFxcdFxcdCAgICB0Y3BfcnRvX21heChyZXEtXFx1MDAzZXJza19saXN0ZW5lcikpO1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbit7XFxuK1xcdHJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG4gfVxcbiBcXG4gdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuaW5kZXggNjI1NzQ1OWJjZWUyNC4uMjFmOTZhNTBjMTBmZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xcbkBAIC0xMDY4LDYgKzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRuZXQgPSBzb2NrX25ldChza19saXN0ZW5lcik7XFxuIFxcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cXHUwMDNlaWNza19zeW5fcmV0cmllcykgPyA6XFxuIFxcdFxcdFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XFxuK1xcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBtaW5fdChpbnQsIG1heF9zeW5fYWNrX3JldHJpZXMsXFxuK1xcdFxcdFxcdFxcdCAgICBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcXG4gXFx0LyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmVcXG4gXFx0ICogKGkuZS4gY29udmVydGVkIHRvIGVzdGFibGlzaGVkIHNvY2tldCkgZm9yIGZpcnN0IHRpbWVvdXQuXFxuIFxcdCAqIElmIHN5bmFjayB3YXMgbm90IGFja25vd2xlZGdlZCBmb3IgMSBzZWNvbmQsIGl0IG1lYW5zXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB1OCBzZWNzX3RvX3JldHJhbnMoaW50IHNlY29uZHMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heClcXG4gXFx0XFx0aW50IHBlcmlvZCA9IHRpbWVvdXQ7XFxuIFxcbiBcXHRcXHRyZXMgPSAxO1xcbi1cXHRcXHR3aGlsZSAoc2Vjb25kcyBcXHUwMDNlIHBlcmlvZCBcXHUwMDI2XFx1MDAyNiByZXMgXFx1MDAzYyAyNTUpIHtcXG4rXFx0XFx0d2hpbGUgKHNlY29uZHMgXFx1MDAzZSBwZXJpb2QgXFx1MDAyNlxcdTAwMjYgcmVzIFxcdTAwM2MgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUykge1xcbiBcXHRcXHRcXHRyZXMrKztcXG4gXFx0XFx0XFx0dGltZW91dCBcXHUwMDNjXFx1MDAzYz0gMTtcXG4gXFx0XFx0XFx0aWYgKHRpbWVvdXQgXFx1MDAzZSBydG9fbWF4KVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jXFxuaW5kZXggZTU2ZWFlNGJjMzQxZS4uMmQyZGVjMWU5MTU2NSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xcbisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jXFxuQEAgLTQ2NCwxMSArNDY0LDEzIEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcbiBcXHR0Y3Bfc3luX2Fja190aW1lb3V0KHJlcSk7XFxuIFxcbi1cXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLlxcbitcXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW5cXG4rXFx0ICogcmVwcmVzZW50IGl0LlxcbiBcXHQgKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gdGNwX3NvY2tfc2V0X3N5bmNudCgpXFxuIFxcdCAqL1xcbiBcXHRtYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcXG4gXFx0XFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzKSArIDE7XFxuK1xcdG1heF9yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfcmV0cmllcywgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7XFxuIFxcbiBcXHRpZiAocmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSBtYXhfcmV0cmllcykge1xcbiBcXHRcXHR0Y3Bfd3JpdGVfZXJyKHNrKTtcXG5AQCAtNDkwLDcgKzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdGlmICghdHAtXFx1MDAzZXJldHJhbnNfc3RhbXApXFxuIFxcdFxcdHRwLVxcdTAwM2VyZXRyYW5zX3N0YW1wID0gdGNwX3RpbWVfc3RhbXBfdHModHApO1xcbiBcXHR0Y3BfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsXFxuLVxcdFxcdFxcdCAgcmVxLVxcdTAwM2V0aW1lb3V0IFxcdTAwM2NcXHUwMDNjIHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCB0Y3BfcnR4X3Byb2JlMF90aW1lZF9vdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo0NS45ODQ2ODc2MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5MDM5NzIwODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXFza190aW1lcl9oYW5kbGVyXCIsXG4gICAgXCJ0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyXCIsXG4gICAgXCJkb190Y3Bfc2V0c29ja29wdFwiLFxuICAgIFwidGNwX2NoZWNrX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gYW5kIHRpbWVvdXQgaGFuZGxpbmcgdG8gbWF0Y2ggdGhlIDctYml0IHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgZmllbGQuIEl0IGNhcHMgU1lOLUFDSyByZXRyaWVzIHRvIDEyNyBpbiByZXFza190aW1lcl9oYW5kbGVyIGFuZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyLCByZWZhY3RvcnMgdGhlIGJpdGZpZWxkIGxheW91dCBpbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrLCBhbmQgdXBkYXRlcyB0Y3BfcmVxc2tfdGltZW91dF9zayAvIHRjcF9yZXFza190aW1lb3V0IGNhbGN1bGF0aW9ucyB0byBwcmV2ZW50IHNoaWZ0IG92ZXJmbG93cy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBUQ1Agc29ja2V0IGNvbm5lY3Rpb25zIGFuZCBzZXRzb2Nrb3B0L3N5c2N0bCBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkwODFlN2MzNWJhNmE0MDgwMDViZmE3NDY5MDI5NzJlNWUyNzhiODZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uNGEyZWQ5NjRkY2VhYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTk1NCw3ICs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTlxuIFxuIHRjcF9zeW5hY2tfcmV0cmllcyAtIElOVEVHRVJcbiBcdE51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsXG4tXHRiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZVxuK1x0YmUgcmV0cmFuc21pdHRlZC4gVGhlIHN5c2N0bCBhY2NlcHRzIDAtMjU1LiBWYWx1ZXMgYWJvdmUgMTI3IGFyZVxuK1x0c2lsZW50bHkgY2FwcGVkIGJ5IHRoZSBTWU4tQUNLIHRpbWVycywgbWF0Y2hpbmcgdGhlIDctYml0XG4rXHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXG4gXHRpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byAzMXNlY29uZHMgdGlsbCB0aGUgbGFzdCByZXRyYW5zbWlzc2lvblxuIFx0d2l0aCB0aGUgY3VycmVudCBpbml0aWFsIFJUTyBvZiAxc2Vjb25kLiBXaXRoIHRoaXMgdGhlIGZpbmFsIHRpbWVvdXRcbiBcdGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbmluZGV4IDVhOWM4MjZhNzA5MmQuLmE5NzgxZmFiNzc0YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbkBAIC01OCwxMiArNTgsMTcgQEAgc3RydWN0IHJlcXVlc3Rfc29jayB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrXHRcdCpkbF9uZXh0O1xuIFx0dTE2XHRcdFx0XHRtc3M7XG4gXHR1OFx0XHRcdFx0bnVtX3JldHJhbnM7IC8qIG51bWJlciBvZiByZXRyYW5zbWl0cyAqL1xuLVx0dThcdFx0XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dThcdFx0c3luY29va2llOjE7IC8qIFRydWUgaWZcbiBcdFx0XHRcdFx0XHQgICAgICAqIDEpIHRjcG9wdHMgbmVlZHMgdG8gYmUgZW5jb2RlZCBpblxuIFx0XHRcdFx0XHRcdCAgICAgICogICAgVFMgb2YgU1lOK0FDS1xuIFx0XHRcdFx0XHRcdCAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuXG4gXHRcdFx0XHRcdFx0ICAgICAgKi9cbi1cdHU4XHRcdFx0XHRudW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi9cbitcdFx0XHR1OFx0XHRudW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi9cbitcdFx0fTtcbitcdFx0dThcdFx0bnVtX3RpbWVvdXRfc3luY29va2llO1xuK1x0fTtcbiBcdHUzMlx0XHRcdFx0dHNfcmVjZW50O1xuIFx0c3RydWN0IHRpbWVyX2xpc3RcdFx0cnNrX3RpbWVyO1xuIFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHNcdCpyc2tfb3BzO1xuQEAgLTc0LDYgKzc5LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xuIFx0dTMyXHRcdFx0XHR0aW1lb3V0O1xuIH07XG4gXG4rc3RhdGljIGlubGluZSB1OCByZXFza19udW1fdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4re1xuK1x0dTggbnVtX3RpbWVvdXQgPSBSRUFEX09OQ0UocmVxLVx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZSk7XG4rXG4rI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxuK1x0cmV0dXJuIG51bV90aW1lb3V0IFx1MDAzZVx1MDAzZSAxO1xuKyNlbHNlXG4rXHRyZXR1cm4gbnVtX3RpbWVvdXQgXHUwMDI2IDB4N2Y7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0cmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNDM2NDk1ZmYyMjcxZC4uYTFjMjAzNTJhODY2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTE4Myw2ICsxODMsOCBAQCBzdGF0aWNfYXNzZXJ0KCgxIFx1MDAzY1x1MDAzYyBBVE9fQklUUykgXHUwMDNlIFRDUF9ERUxBQ0tfTUFYKTtcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUElOVFZMXHQzMjc2N1xuICNkZWZpbmUgTUFYX1RDUF9LRUVQQ05UXHRcdDEyN1xuICNkZWZpbmUgTUFYX1RDUF9TWU5DTlRcdFx0MTI3XG4rLyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqL1xuKyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1x0MTI3XG4gXG4gLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHNcbiAgKiB0byBhdm9pZCBvdmVyZmxvd3MuIFRoaXMgYXNzdW1lcyBhIGNsb2NrIHNtYWxsZXIgdGhhbiAxIE1oei5cbkBAIC04ODEsMTIgKzg4MywyMyBAQCBzdGF0aWMgaW5saW5lIHUzMiBfX3RjcF9zZXRfcnRvKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApXG4gXHRyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtXHUwMDNlc3J0dF91cyBcdTAwM2VcdTAwM2UgMykgKyB0cC1cdTAwM2VydHR2YXJfdXMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiB7XG4tXHR1NjQgdGltZW91dCA9ICh1NjQpcmVxLVx1MDAzZXRpbWVvdXQgXHUwMDNjXHUwMDNjIHJlcS1cdTAwM2VudW1fdGltZW91dDtcbitcdHU2NCB0aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2V0aW1lb3V0KTtcbitcdHUzMiBydG9fbWF4ID0gdGNwX3J0b19tYXgoc2spO1xuK1x0dTggbnVtX3RpbWVvdXQgPSByZXFza19udW1fdGltZW91dChyZXEpO1xuK1xuK1x0aWYgKG51bV90aW1lb3V0IFx1MDAzZT0gQklUU19QRVJfVFlQRSh0aW1lb3V0KSB8fFxuK1x0ICAgIHRpbWVvdXQgXHUwMDNlIFU2NF9NQVggXHUwMDNlXHUwMDNlIG51bV90aW1lb3V0KVxuK1x0XHRyZXR1cm4gcnRvX21heDtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQgXHUwMDNjXHUwMDNjIG51bV90aW1lb3V0LCBydG9fbWF4KTtcbit9XG4gXG4tXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0LFxuLVx0XHRcdFx0ICAgIHRjcF9ydG9fbWF4KHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIpKTtcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuK3tcbitcdHJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuIH1cbiBcbiB1MzIgdGNwX2RlbGFja19tYXgoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuaW5kZXggNjI1NzQ1OWJjZWUyNC4uMjFmOTZhNTBjMTBmZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbkBAIC0xMDY4LDYgKzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0bmV0ID0gc29ja19uZXQoc2tfbGlzdGVuZXIpO1xuIFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XG4rXHRtYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLFxuK1x0XHRcdFx0ICAgIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpO1xuIFx0LyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmVcbiBcdCAqIChpLmUuIGNvbnZlcnRlZCB0byBlc3RhYmxpc2hlZCBzb2NrZXQpIGZvciBmaXJzdCB0aW1lb3V0LlxuIFx0ICogSWYgc3luYWNrIHdhcyBub3QgYWNrbm93bGVkZ2VkIGZvciAxIHNlY29uZCwgaXQgbWVhbnNcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB1OCBzZWNzX3RvX3JldHJhbnMoaW50IHNlY29uZHMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heClcbiBcdFx0aW50IHBlcmlvZCA9IHRpbWVvdXQ7XG4gXG4gXHRcdHJlcyA9IDE7XG4tXHRcdHdoaWxlIChzZWNvbmRzIFx1MDAzZSBwZXJpb2QgXHUwMDI2XHUwMDI2IHJlcyBcdTAwM2MgMjU1KSB7XG4rXHRcdHdoaWxlIChzZWNvbmRzIFx1MDAzZSBwZXJpb2QgXHUwMDI2XHUwMDI2IHJlcyBcdTAwM2MgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUykge1xuIFx0XHRcdHJlcysrO1xuIFx0XHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSAxO1xuIFx0XHRcdGlmICh0aW1lb3V0IFx1MDAzZSBydG9fbWF4KVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbmluZGV4IGU1NmVhZTRiYzM0MWUuLjJkMmRlYzFlOTE1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xuKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbkBAIC00NjQsMTEgKzQ2NCwxMyBAQCBzdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFxuIFx0dGNwX3N5bl9hY2tfdGltZW91dChyZXEpO1xuIFxuLVx0LyogQWRkIG9uZSBtb3JlIHJldHJ5IGZvciBmYXN0b3Blbi5cbitcdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4gd2hlbiB0aGUgdGltZW91dCBjb3VudGVyIGNhblxuK1x0ICogcmVwcmVzZW50IGl0LlxuIFx0ICogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKVxuIFx0ICovXG4gXHRtYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcykgKyAxO1xuK1x0bWF4X3JldHJpZXMgPSBtaW5fdChpbnQsIG1heF9yZXRyaWVzLCBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcbiBcbiBcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSBtYXhfcmV0cmllcykge1xuIFx0XHR0Y3Bfd3JpdGVfZXJyKHNrKTtcbkBAIC00OTAsNyArNDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdGlmICghdHAtXHUwMDNlcmV0cmFuc19zdGFtcClcbiBcdFx0dHAtXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcbiBcdHRjcF9yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUyxcbi1cdFx0XHQgIHJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQsIGZhbHNlKTtcbitcdFx0XHQgICAgIHRjcF9yZXFza190aW1lb3V0X3NrKHNrLCByZXEpLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHRjcF9ydHhfcHJvYmUwX3RpbWVkX291dChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo0NS45ODQ2ODg5MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzgyNzI2MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBTWU4gQ29va2llIFx1MDAyNiBSZXRyYW5zbWlzc2lvbiBSZWZpbmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIHJlZmluZW1lbnRzIGFyb3VuZCBUQ1AgU1lOIGNvb2tpZXMgYW5kIHJldHJhbnNtaXNzaW9uIHN0cmF0ZWdpZXMuIFRoZSBjaGFuZ2VzIHNlZW0gdGFyZ2V0ZWQgYXQgdGhlIHJlcXVlc3Qgc29ja2V0IChgcmVxdWVzdF9zb2NrYCkgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBob3cgU1lOLUFDSyByZXRyaWVzIGFyZSBtYW5hZ2VkLlxuXG5GaXJzdCwgSSBzZWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIHRvIGBpcC1zeXNjdGwucnN0YCDigJMgdGhhdCdzIGdvb2QsIGRvY3VtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBiZSB1cGRhdGVkIHdpdGggY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSB3b3JrIHJlc2lkZXMgd2l0aGluIGBpbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaGAuIFRoZSBgc3RydWN0IHJlcXVlc3Rfc29ja2AgY2hhbmdlIGlzIGludGVyZXN0aW5nOyB0aGUgdW5pb24gYXJvdW5kIGBzeW5jb29raWU6MWAsIGBudW1fdGltZW91dDo3YCwgYW5kIGB1OCBudW1fdGltZW91dF9zeW5jb29raWVgIHN1Z2dlc3RzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHN0b3JlIGVpdGhlciB0aGUgU1lOIGNvb2tpZSBmbGFnIG9yIHRoZSB0aW1lb3V0L3JldHJ5IGluZm9ybWF0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGByZXFza19udW1fdGltZW91dCgpYCBoZWxwZXIgaXMgYSBjbGVhciBpbmRpY2F0aW9uIG9mIHRoaXMgbmV3IGFwcHJvYWNoLlxuXG5Nb3ZpbmcgaW50byBgaW5jbHVkZS9uZXQvdGNwLmhgLCB0aGUgZGVmaW5pdGlvbiBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGlzIGxpa2VseSBwcm92aWRlcyBhIGhhcmQgdXBwZXIgbGltaXQgZm9yIFNZTi1BQ0sgcmV0cmllcywgd2hpY2ggSSdtIGN1cmlvdXMgYWJvdXQuIEFsc28sIHRoZSBtb2RpZmljYXRpb25zIHRvIGB0Y3BfcmVxc2tfdGltZW91dCgpYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCB1c2luZyBgcmVxc2tfbnVtX3RpbWVvdXQoKWAgY29uZmlybSB0aGUgaW50ZWdyYXRpb24gb2YgdGhlIGByZXF1ZXN0X3NvY2tgIGNoYW5nZXMgd2l0aGluIHRoZSBUQ1AgbGF5ZXIuIEl0IGxvb2tzIGxpa2Ugd2UncmUgbW92aW5nIGF3YXkgZnJvbSB1bmJvdW5kZWQgcmV0cmllcyAob3IgYXQgbGVhc3QsIHZlcnkgaGlnaCBsaW1pdHMpIHRvIGEgbW9yZSBjb25zdHJhaW5lZCBhbmQgbGlrZWx5IG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgb3ZlcmZsb3cgY29uZGl0aW9uLlxuXG5Ob3cgd2UncmUgc2VlaW5nIHRoaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGFjdHVhbCBjb2RlLiBUaGUgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgIGNoYW5nZSB0byBgcmVxc2tfdGltZXJfaGFuZGxlcmAgYnkgY2FwcGluZyBgbWF4X3N5bl9hY2tfcmV0cmllc2Agd2l0aCBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2Agc29saWRpZmllcyB0aGUgdXBwZXIgYm91bmQgd2UgZXhwZWN0ZWQuIFRoZSBzYW1lIGluIGBuZXQvaXB2NC90Y3AuY2AsIHdoZXJlIGBzZWNzX3RvX3JldHJhbnNgIHVzZXMgdGhlIG1hY3JvIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYCBpbnN0ZWFkIG9mIGEgaGFyZGNvZGVkIHZhbHVlICgyNTU/KSByZWluZm9yY2VzIHRoaXMuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBidWdzIGluIHRoZSB0aW1lb3V0IGNhbGN1bGF0aW9uLlxuXG5GaW5hbGx5LCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgIHNob3dzIHRoZSBiaWdnZXN0IGNoYW5nZTogYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIGlzIGFsc28gaW1wbGVtZW50aW5nIHRoZSB1cHBlciBib3VuZHMgYW5kIHVzaW5nIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBpbnN0ZWFkIG9mIHRoZSBiaXQtc2hpZnQgb3BlcmF0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgYSBtb3JlIHJvYnVzdCB0aW1lb3V0IGNhbGN1bGF0aW9uLlxuXG5Tbywgb3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIHRvd2FyZCBzYWZlciwgbW9yZSBjb250cm9sbGVkIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gYmVoYXZpb3IuIFRoZSBiaXRmaWVsZC91bmlvbiBhcHByb2FjaCBmb3Igc3RvcmluZyB0aW1lb3V0L3N5bmNvb2tpZSBpbmZvcm1hdGlvbiBpcyBhIG5lYXQgb3B0aW1pemF0aW9uLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgcHJvdmlkZXMgYSBjcnVjaWFsIHNhZmVndWFyZC4gSSdsbCB1c2UgZ3JlcC9yZWFkLWZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBpbXBsaWNhdGlvbnMgb2Ygc2V0dGluZyB0aGUgbGltaXQgYW5kIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIGJhY2t3YXJkcyBjb21wYXRpYmxlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBwZXJmb3JtYW5jZSBpbXBhY3RzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBzcGVjaWZpYyB2YWx1ZSBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYWxzbyB3b3J0aCBpbnZlc3RpZ2F0aW5nIOKAkyB3aGF04oCZcyB0aGUgcmF0aW9uYWxlIGZvciB0aGF0IHBhcnRpY3VsYXIgdmFsdWU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo1Mi4zNjc0MTc2MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTQ0Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXNrX3RpbWVyX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAyNz12b2lkIGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3BfYW5kX3B1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzMi1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwMzM6c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwMzQte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDU5LVxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2bnJlcS1cXHUwMDNlcnNrX3JlZmNudCwgMiArIDEpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA2MDpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2bnJlcS1cXHUwMDNlcnNrX3RpbWVyLCByZXFza190aW1lcl9oYW5kbGVyLCBUSU1FUl9QSU5ORUQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA2MS1cXHRcXHRyZXFza19xdWV1ZV9taWdyYXRlZChcXHUwMDI2aW5ldF9jc2sobnNrKS1cXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTExNTI9c3RhdGljIGJvb2wgcmVxc2tfcXVldWVfaGFzaF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTYwLVxcdHJlcS1cXHUwMDNldGltZW91dCA9IHRjcF90aW1lb3V0X2luaXQoKHN0cnVjdCBzb2NrICopcmVxKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExNjE6XFx0dGltZXJfc2V0dXAoXFx1MDAyNnJlcS1cXHUwMDNlcnNrX3RpbWVyLCByZXFza190aW1lcl9oYW5kbGVyLCBUSU1FUl9QSU5ORUQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NTIuNDgzNTY3MTI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwMzk3MDA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBzZWNzX3RvX3JldHJhbnNgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHNlY3NfdG9fcmV0cmFuc2AuIFRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzLCBsaWtlbHkgd2l0aGluIHRoZSBUQ1AgcHJvdG9jb2wsIHdoaWNoIG1lYW5zIG15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwncyBUQ1AgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgbmV0d29yayBwcm90b2NvbCBpbnRlcm5hbHMsIGFuZCB3aGVyZSB0aGVzZSBjYWxjdWxhdGlvbnMgbGl2ZS5cblxuTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gc3RhcnQgaW4gYG5ldC9pcHY0L3RjcC5jYCwgYmVjYXVzZSB0aGF0J3MgdGhlIHVzdWFsIGhvbWUgZm9yIElQdjQtc3BlY2lmaWMgVENQIGNvZGUuIEJ1dCBJJ2xsIGtlZXAgYW4gb3BlbiBtaW5kOyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGRlZmluZWQgaW4gYSBtb3JlIGdlbmVyaWMgbG9jYXRpb24sIGVzcGVjaWFsbHkgaWYgaXQncyB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgSVAgdmVyc2lvbnMuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdpdGhpbiB0aGF0IGZpbGUgKGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnksIG1heWJlIGV2ZW4gZnVydGhlciB1cCB0aGUgdHJlZSkgdG8gc2VlIHdoZXJlIGBzZWNzX3RvX3JldHJhbnNgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgYmUgbG9va2luZyBmb3IgYm90aCB0aGUgZGVjbGFyYXRpb24gYW5kIGFueSBkaXJlY3QgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uLlxuXG5JIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UuIEknbSBleHBlY3RpbmcgdGhpcyB0byB0YWtlIGVpdGhlciBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHJldHJhbnNtaXNzaW9uIGRlbGF5cywgb3IgYSB2YWx1ZSBhbmQgY29tcHV0ZSBhIHRpbWUuIExpa2VseSBpdCByZXR1cm5zIGEgZHVyYXRpb24gaW4gc2Vjb25kcywgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBuYW1lLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXRzIHRvIGNvcnJlY3RseSBncmFzcCB0aGUgb3V0cHV0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIHVzZSBgc2Vjc190b19yZXRyYW5zYCwgdG8gZGVkdWNlIHdoYXQgdGhpcyBmdW5jdGlvbiAqZG9lcyogd2l0aCB0aG9zZSBpbnB1dHMuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgbWVjaGFuaXNtIGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NTUuMTg3NTM5MzE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDIxNjgwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Vjc190b19yZXRyYW5zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTMzOT12b2lkIHRjcF9sZWF2ZV9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzUxLS8qIENvbnZlcnQgc2Vjb25kcyB0byByZXRyYW5zbWl0cyBiYXNlZCBvbiBpbml0aWFsIGFuZCBtYXggdGltZW91dCAqL1xcbm5ldC9pcHY0L3RjcC5jOjM1MjpzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpXFxubmV0L2lwdjQvdGNwLmMtMzUzLXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM5MzUtXFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCxcXG5uZXQvaXB2NC90Y3AuYzozOTM2OlxcdFxcdFxcdCAgIHNlY3NfdG9fcmV0cmFucyh2YWwsIFRDUF9USU1FT1VUX0lOSVQgLyBIWixcXG5uZXQvaXB2NC90Y3AuYy0zOTM3LVxcdFxcdFxcdFxcdFxcdCAgIFRDUF9SVE9fTUFYIC8gSFopKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NTcuNTg5NzExNTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NzMzNzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIEZhc3QgT3BlbiBTWU4tQUNLIFRpbWVyKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBob25lIGluIG9uIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgaGFwcGVuaW5nIGhlcmUgd2l0aCB0aGUgRmFzdCBPcGVuIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBTWU4tQUNLIHRpbWVyIGludGVyYWN0cyB3aXRoIHRoYXQgbWVjaGFuaXNtLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIEZhc3QgT3BlbiwgZXNwZWNpYWxseSBwb3RlbnRpYWwgcmV0cmFuc21pc3Npb25zIG9yIHRpbWVvdXRzIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgZGF0YSB0cmFuc2Zlci4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXMgYmVpbmcgY2hlY2tlZCwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHRpbWVyIGZpcmVzLCBhbmQgd2hhdCBhY3Rpb25zIGFyZSB0YWtlbiB3aGVuIGl0IGV4cGlyZXM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIHdpbGwgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGFueSBvZGRpdGllcyBJJ3ZlIG9ic2VydmVkIGluIHJlbGF0ZWQgbmV0d29yayB0cmFjZXMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo1OS42NzcwNTA5ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNDg4MDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxMDM9c3RhdGljIHZvaWQgdGNwX3Jjdl9zeW5yZWN2X3N0YXRlX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxMTUtXFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfcmV0cmFuc21pdHMsIDApO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcxMTY6XFx0LyogSW4gdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcigpIG9uIHRoZSBmaXJzdCBTWU5BQ0sgUlRPIHdlIHNldFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxMTctXFx0ICogcmV0cmFuc19zdGFtcCBidXQgZG9uJ3QgZW50ZXIgQ0FfTG9zcywgc28gaW4gY2FzZSB0aGF0IGhhcHBlbmVkIHdlXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NDI9c3RhdGljIHZvaWQgdGNwX3VwZGF0ZV9ydG9fc3RhdHMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDU4LSAqL1xcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ1OTpzdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ2MC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYz01Mzk9dm9pZCB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy01NTEtXFx0XFx0XFx0ICAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0ZJTl9XQUlUMSk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NTUyOlxcdFxcdHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc2ssIHJlcSk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNTUzLVxcdFxcdC8qIEJlZm9yZSB3ZSByZWNlaXZlIEFDSyB0byBvdXIgU1lOLUFDSyBkb24ndCByZXRyYW5zbWl0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjAxLjgwMTkzNzQ0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMTk5NDM3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgVENQIFN0YWNrIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gSXMgdGhpcyBldmVuIHJlYWNoYWJsZSBjb2RlPyBCYXNlZCBvbiB0aGUgZmlsZSBwYXRocywgdGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSB0aGUgVENQIHN0YWNrLiBBbHJpZ2h0LCB0aGF0J3MgY3J1Y2lhbC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3M6XG5cbiogICBgaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhgOiBMb29rcyBsaWtlIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgYHJlcXVlc3Rfc29ja2AgYml0ZmllbGQgaXMgcmVwcmVzZW50ZWQsIGFuZCB0aGUgYHJlcXNrX251bV90aW1lb3V0KClgIGZ1bmN0aW9uLiBJbXBvcnRhbnQgZm9yIGNvbm5lY3Rpb24gc2V0dXAsIHNvIEknbGwga2VlcCBhbiBleWUgb24gaG93IGl0IGFmZmVjdHMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb25zLlxuKiAgIGBpbmNsdWRlL25ldC90Y3AuaGA6IE1vZGlmaWNhdGlvbnMgdG8gYHRjcF9yZXFza190aW1lb3V0X3NrKClgIGFuZCBgdGNwX3JlcXNrX3RpbWVvdXQoKWAuIFRoZXNlIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gdGltZW91dCBoYW5kbGluZyBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwaGFzZS5cbiogICBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6IFRoZSBgcmVxc2tfdGltZXJfaGFuZGxlcigpYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC4gVGhpcyBzdWdnZXN0cyBhbiBhbHRlcmF0aW9uIGluIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoZXNlIGNvbm5lY3Rpb24gcmVxdWVzdCB0aW1lb3V0cywgd2hpY2ggaXMgYW5vdGhlciBhcmVhIHRvIHdhdGNoIGNsb3NlbHkuXG4qICAgYG5ldC9pcHY0L3RjcC5jYDogYHNlY3NfdG9fcmV0cmFucygpYCB3aXRoaW4gYGRvX3RjcF9zZXRzb2Nrb3B0YCAoc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gVENQX0RFRkVSX0FDQ0VQVCkuIFRoaXMgY291bGQgaW1wYWN0IGhvdyByZXRyYW5zbWlzc2lvbnMgYXJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGRlZmVycmFsIG9mIHRoZSBhY2NlcHQgY2FsbC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuXG4qICAgYG5ldC9pcHY0L3RjcF90aW1lci5jYDogVGhlcmUncyBhIGNoYW5nZSByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKClgLiBTaW5jZSB0aGlzIHJlbGF0ZXMgdG8gRmFzdCBPcGVuLCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIGNvbm5lY3Rpb25zLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBjYWxsZXJzIHRvIHRoZSBgdGNwX3JlcXNrX3RpbWVvdXRgIGZ1bmN0aW9uLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGFjcm9zcyB0aGUga2VybmVsLiBBIGNvbXByZWhlbnNpdmUgY2FsbCBncmFwaCB3b3VsZCByZWFsbHkgaGVscCBtZSB2aXN1YWxpemUgdGhlIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MDUuOTIxODg1NjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU1NDU4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3JlcXNrX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9ODgxPXN0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cClcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTg4NS1cXG5pbmNsdWRlL25ldC90Y3AuaDo4ODY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL25ldC90Y3AuaC04ODctXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTg5OS1cXG5pbmNsdWRlL25ldC90Y3AuaDo5MDA6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC90Y3AuaC05MDEte1xcbmluY2x1ZGUvbmV0L3RjcC5oOjkwMjpcXHRyZXR1cm4gdGNwX3JlcXNrX3RpbWVvdXRfc2socmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtOTAzLX1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTE0LVxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnF1ZXVlLVxcdTAwM2V5b3VuZyk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTE1OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2cmVxLVxcdTAwM2Vyc2tfdGltZXIsIGppZmZpZXMgKyB0Y3BfcmVxc2tfdGltZW91dChyZXEpKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTYtXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03MTgtXFx0XFx0XFx0dG1wX29wdC50c19yZWNlbnRfc3RhbXAgPSBrdGltZV9nZXRfc2Vjb25kcygpIC1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NzE5OlxcdFxcdFxcdFxcdHRjcF9yZXFza190aW1lb3V0KHJlcSkgLyBIWjtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNzIwLVxcdFxcdFxcdHBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KFxcdTAwMjZ0bXBfb3B0LCB0aC1cXHUwMDNlcnN0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NjctXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc2ODpcXHRcXHRcXHRcXHRleHBpcmVzICs9IHRjcF9yZXFza190aW1lb3V0KHJlcSk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTc2OS1cXHRcXHRcXHRcXHRpZiAoIWZhc3RvcGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NDU5PXN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00OTQtXFx0dGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLFxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ5NTpcXHRcXHRcXHQgICAgIHRjcF9yZXFza190aW1lb3V0X3NrKHNrLCByZXEpLCBmYWxzZSk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDk2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MDguMDg3NDM4MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU5NTQwMjIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBUaW1lb3V0IFZhcmlhYmxlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXaGVyZSBhcmUgd2UgYWN0dWFsbHkgdXNpbmcgdGhlc2UgdGltZW91dCB2YXJpYWJsZXMsIHNwZWNpZmljYWxseSBgcmVxc2tfbnVtX3RpbWVvdXRgIGFuZCBgbnVtX3RpbWVvdXRgP1wiIEl0J3Mgbm90IGVub3VnaCB0byBrbm93IHRoZXkgKmV4aXN0KjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIGxldmVyYWdlZCB3aXRoaW4gdGhlIHN5c3RlbS4gQXJlIHRoZXkgbGltaXRlZCB0byBhIHBhcnRpY3VsYXIgbW9kdWxlLCBvciBhcmUgdGhleSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCB1c2VkIGluIG11bHRpcGxlIHBsYWNlcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIGltcGFjdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSB0byB1bmRlcnN0YW5kIGhvdyBhbnkgY2hhbmdlIEkgbWFrZSB0byBvbmUgcGxhY2UgYWZmZWN0cyB0aGUgcmVzdC4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMganVzdCB0aGUgZmlyc3Qgc3RlcCBpbiBhIGxhcmdlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydCwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBtYXAgb2YgdGhlaXIgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NjowOS42ODI4NDI1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NzM4MzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudW1fdGltZW91dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdD05NTU9dGNwX3N5bmFja19yZXRyaWVzIC0gSU5URUdFUlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtOTU4LVxcdHNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0Ojk1OTpcXHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtOTYwLVxcdGlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIDMxc2Vjb25kcyB0aWxsIHRoZSBsYXN0IHJldHJhbnNtaXNzaW9uXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmM9NTAxMz1zdGF0aWMgaW50IG1seDVfaWJfc3RhZ2VfZGVsYXlfZHJvcF9pbml0KHN0cnVjdCBtbHg1X2liX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jLTUwMzMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jOjUwMzQ6XFx0ZGVidWdmc19jcmVhdGVfYXRvbWljX3QoXFxcIm51bV90aW1lb3V0X2V2ZW50c1xcXCIsIDA0MDAsIHJvb3QsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jLTUwMzUtXFx0XFx0XFx0XFx0XFx1MDAyNmRldi1cXHUwMDNlZGVsYXlfZHJvcC5ldmVudHNfY250KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oPTM0Nj1zdHJ1Y3Qgcnh0aWRfc3RhdHMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtMzUyLVxcdHUzMiBudW1fZGVsaXZlcmVkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjM1MzpcXHR1MzIgbnVtX3RpbWVvdXRzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTM1NC1cXHR1MzIgbnVtX2hvbGU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0xNjI0PXN0YXRpYyB2b2lkIGFnZ3JfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE2MzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTYzOTpcXHRcXHRzdGF0cy1cXHUwMDNlbnVtX3RpbWVvdXRzKys7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTY0MC1cXHRcXHRhdGg2a2xfZGJnKEFUSDZLTF9EQkdfQUdHUixcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oPTUwPXN0cnVjdCByZXF1ZXN0X3NvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgKi9cXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo2ODpcXHRcXHRcXHR1OFxcdFxcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTY5LVxcdFxcdH07XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6NzA6XFx0XFx0dThcXHRcXHRudW1fdGltZW91dF9zeW5jb29raWU7XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNzEtXFx0fTtcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTgxLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oOjgyOnN0YXRpYyBpbmxpbmUgdTggcmVxc2tfbnVtX3RpbWVvdXQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTgzLXtcXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4NDpcXHR1OCBudW1fdGltZW91dCA9IFJFQURfT05DRShyZXEtXFx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZSk7XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtODUtXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtODYtI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oOjg3OlxcdHJldHVybiBudW1fdGltZW91dCBcXHUwMDNlXFx1MDAzZSAxO1xcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTg4LSNlbHNlXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6ODk6XFx0cmV0dXJuIG51bV90aW1lb3V0IFxcdTAwMjYgMHg3ZjtcXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC05MC0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oPTIzMz1zdGF0aWMgaW5saW5lIHZvaWQgcmVxc2tfcXVldWVfcmVtb3ZlZChzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSxcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTIzNS17XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6MjM2OlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0ID09IDApXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtMjM3LVxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnF1ZXVlLVxcdTAwM2V5b3VuZyk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0xNTE9c3RhdGljX2Fzc2VydCgoMSBcXHUwMDNjXFx1MDAzYyBBVE9fQklUUykgXFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0xODUtI2RlZmluZSBNQVhfVENQX1NZTkNOVFxcdFxcdDEyN1xcbmluY2x1ZGUvbmV0L3RjcC5oOjE4NjovKiByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGlzIGEgNy1iaXQgZmllbGQuICovXFxuaW5jbHVkZS9uZXQvdGNwLmgtMTg3LSNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1xcdDEyN1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9ODg2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC04OTAtXFx0dTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6ODkxOlxcdHU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTtcXG5pbmNsdWRlL25ldC90Y3AuaC04OTItXFxuaW5jbHVkZS9uZXQvdGNwLmg6ODkzOlxcdGlmIChudW1fdGltZW91dCBcXHUwMDNlPSBCSVRTX1BFUl9UWVBFKHRpbWVvdXQpIHx8XFxuaW5jbHVkZS9uZXQvdGNwLmg6ODk0OlxcdCAgICB0aW1lb3V0IFxcdTAwM2UgVTY0X01BWCBcXHUwMDNlXFx1MDAzZSBudW1fdGltZW91dClcXG5pbmNsdWRlL25ldC90Y3AuaC04OTUtXFx0XFx0cmV0dXJuIHJ0b19tYXg7XFxuaW5jbHVkZS9uZXQvdGNwLmgtODk2LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjg5NzpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0IFxcdTAwM2NcXHUwMDNjIG51bV90aW1lb3V0LCBydG9fbWF4KTtcXG5pbmNsdWRlL25ldC90Y3AuaC04OTgtfVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2Vjbi5oPTY0NT10Y3BfZWNuX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHRjcGhkciAqdGgsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3BfZWNuLmgtNjUwLVxcdCAqL1xcbmluY2x1ZGUvbmV0L3RjcF9lY24uaDo2NTE6XFx0aWYgKCFyZXEtXFx1MDAzZW51bV90aW1lb3V0IHx8IHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUykge1xcbmluY2x1ZGUvbmV0L3RjcF9lY24uaC02NTItXFx0XFx0aWYgKHRjcF9yc2socmVxKS1cXHUwMDNlYWNjZWNuX29rKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04Mjk9c3RhdGljIHZvaWQgc3luX2Fja19yZWNhbGMoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzQtXFx0aWYgKCFyc2txX2RlZmVyX2FjY2VwdCkge1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODM1OlxcdFxcdCpleHBpcmUgPSByZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IG1heF9zeW5fYWNrX3JldHJpZXM7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzYtXFx0XFx0KnJlc2VuZCA9IDE7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzOC1cXHR9XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Mzk6XFx0KmV4cGlyZSA9IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZT0gbWF4X3N5bl9hY2tfcmV0cmllcyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQwOlxcdFxcdCAgKCFpbmV0X3JzayhyZXEpLVxcdTAwM2VhY2tlZCB8fCByZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0KTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0MS1cXHQvKiBEbyBub3QgcmVzZW5kIHdoaWxlIHdhaXRpbmcgZm9yIGRhdGEgYWZ0ZXIgQUNLLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDUtXFx0KnJlc2VuZCA9ICFpbmV0X3JzayhyZXEpLVxcdTAwM2VhY2tlZCB8fFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQ2OlxcdFxcdCAgcmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCAtIDE7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDctfVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04NTA9cmVxc2tfYWxsb2Nfbm9wcm9mKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODcxLVxcdHJlcS1cXHUwMDNlc3luY29va2llID0gMDtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg3MjpcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0ID0gMDtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg3My1cXHRyZXEtXFx1MDAzZW51bV9yZXRyYW5zID0gMDtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTY3PXN0YXRpYyB2b2lkIHJlcXNrX3F1ZXVlX21pZ3JhdGVkKHN0cnVjdCByZXF1ZXN0X3NvY2tfcXVldWUgKnF1ZXVlLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05Njkte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6OTcwOlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0ID09IDApXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05NzEtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2cXVldWUtXFx1MDAzZXlvdW5nKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTEyLVxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlYWNjZWNuX2ZhaWxfbW9kZSB8PSBUQ1BfQUNDRUNOX0FDRV9GQUlMX1NFTkQ7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTEzOlxcdFxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0KysgPT0gMClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTQtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2cXVldWUtXFx1MDAzZXlvdW5nKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTEzNS1cXHQvKiBFdmVuIGlmIHdlIGNhbiBjbG9uZSB0aGUgcmVxLCB3ZSBtYXkgbmVlZCBub3QgcmV0cmFuc21pdCBhbnkgbW9yZVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTEzNjpcXHQgKiBTWU4rQUNLcyAobnJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZSBtYXhfc3luX2Fja19yZXRyaWVzLCBldGMpLCBvciBhbm90aGVyXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTM3LVxcdCAqIENQVSBtYXkgd2luIHRoZSBcXFwib3duX3JlcVxcXCIgcmFjZSBzbyB0aGF0IGluZXRfZWhhc2hfaW5zZXJ0KCkgZmFpbHMuXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI3NDQ9c3RhdGljIHZvaWQgZ2V0X29wZW5yZXE0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2MC1cXHRcXHRqaWZmaWVzX2RlbHRhX3RvX2Nsb2NrX3QoZGVsdGEpLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjc2MTpcXHRcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2Mi1cXHRcXHRmcm9tX2t1aWRfbXVuZ2VkKHNlcV91c2VyX25zKGYpLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTU0Nj1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02MjUtXFx0fVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo2MjY6XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQpIHtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjI3OlxcdFxcdG5ld3RwLVxcdTAwM2V0b3RhbF9ydG8gPSByZXEtXFx1MDAzZW51bV90aW1lb3V0O1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02MjgtXFx0XFx0bmV3dHAtXFx1MDAzZXVuZG9fbWFya2VyID0gdHJlcS1cXHUwMDNlc250X2lzbjtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMC1cXHQvKiBXaGlsZSBUQ1BfREVGRVJfQUNDRVBUIGlzIGFjdGl2ZSwgZHJvcCBiYXJlIEFDSy4gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTIxOlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2MgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMi1cXHQgICAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxID09IHRjcF9yc2socmVxKS1cXHUwMDNlcmN2X2lzbiArIDEpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF90aW1lci5jPTQ1OT1zdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDc0LVxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ3NTpcXHRpZiAocmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSBtYXhfcmV0cmllcykge1xcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ3Ni1cXHRcXHR0Y3Bfd3JpdGVfZXJyKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ4OS1cXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ5MDpcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0Kys7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDkxLVxcdHRjcF91cGRhdGVfcnRvX3N0YXRzKHNrKTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjA5ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTYoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIxMTctXFx0XFx0ICAgamlmZmllc190b19jbG9ja190KHR0ZCksXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMTE4OlxcdFxcdCAgIHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQsXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMTE5LVxcdFxcdCAgIGZyb21fa3VpZF9tdW5nZWQoc2VxX3VzZXJfbnMoc2VxKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A0LmM9MTcyPXN0YXRpYyBpbnQgZHVtcF9yZXFfc29jayhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jLTE4OS1cXHRcXHQgICAgICAgVENQX1NZTl9SRUNWLCAwLCAwLCAxLCBqaWZmaWVzX3RvX2Nsb2NrX3QodHRkKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jOjE5MDpcXHRcXHQgICAgICAgcmVxLVxcdTAwM2VudW1fdGltZW91dCwgdWlkLCAwLCAwLCAwLCByZXEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A0LmMtMTkxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYz0xODE9c3RhdGljIGludCBkdW1wX3JlcV9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A2LmMtMjA1LVxcdFxcdCAgICAgICBUQ1BfU1lOX1JFQ1YsIDAsIDAsIDEsIGppZmZpZXNfdG9fY2xvY2tfdCh0dGQpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A2LmM6MjA2OlxcdFxcdCAgICAgICByZXEtXFx1MDAzZW51bV90aW1lb3V0LCB1aWQsIDAsIDAsIDAsIHJlcSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYy0yMDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjExLjgzMDIzMDgwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzIzMTgwNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AvSVAgU3RhY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGByZXFza190aW1lcl9oYW5kbGVyYCB3aXRoaW4gYGluZXRfY29ubmVjdGlvbl9zb2NrLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBnZXQgYSBncmFzcCBvZiBpdHMgaW1wbGVtZW50YXRpb24sIHNvIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBob21lIGluIG9uIGxpbmVzIDEwNjAgdG8gMTA4MC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHJhbmdlIHRvIHN0YXJ0IHdpdGggZm9yIGNvcmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGFuZCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgdGltZXIncyBiZWhhdmlvciwgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdGltZW91dHMgb3IgcmV0cmFuc21pc3Npb25zLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTAxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MTQuMTUzNDE0NzQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNm5yZXEtXFx1MDAzZXJza190aW1lciwgcmVxc2tfdGltZXJfaGFuZGxlciwgVElNRVJfUElOTkVEKTtcXG4xMDYxOlxcdFxcdFxcdHJlcXNrX3F1ZXVlX21pZ3JhdGVkKFxcdTAwMjZpbmV0X2Nzayhuc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0XFx0XFx0cmVxID0gbnJlcTtcXG4xMDY0OlxcdFxcdFxcdHNrX2xpc3RlbmVyID0gbnNrO1xcbjEwNjU6XFx0XFx0fVxcbjEwNjY6XFx0XFxuMTA2NzpcXHRcXHRpY3NrID0gaW5ldF9jc2soc2tfbGlzdGVuZXIpO1xcbjEwNjg6XFx0XFx0bmV0ID0gc29ja19uZXQoc2tfbGlzdGVuZXIpO1xcbjEwNjk6XFx0XFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcXG4xMDcwOlxcdFxcdFxcdFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XFxuMTA3MTpcXHRcXHRtYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLFxcbjEwNzI6XFx0XFx0XFx0XFx0XFx0ICAgIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpO1xcbjEwNzM6XFx0XFx0LyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmVcXG4xMDc0OlxcdFxcdCAqIChpLmUuIGNvbnZlcnRlZCB0byBlc3RhYmxpc2hlZCBzb2NrZXQpIGZvciBmaXJzdCB0aW1lb3V0LlxcbjEwNzU6XFx0XFx0ICogSWYgc3luYWNrIHdhcyBub3QgYWNrbm93bGVkZ2VkIGZvciAxIHNlY29uZCwgaXQgbWVhbnNcXG4xMDc2OlxcdFxcdCAqIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRoaW5nczogc3luYWNrIHdhcyBsb3N0LCBhY2sgd2FzIGxvc3QsXFxuMTA3NzpcXHRcXHQgKiBydHQgaXMgaGlnaCBvciBub2JvZHkgcGxhbm5lZCB0byBhY2sgKGkuZS4gc3luZmxvb2QpLlxcbjEwNzg6XFx0XFx0ICogV2hlbiBzZXJ2ZXIgaXMgYSBiaXQgbG9hZGVkLCBxdWV1ZSBpcyBwb3B1bGF0ZWQgd2l0aCBvbGRcXG4xMDc5OlxcdFxcdCAqIG9wZW4gcmVxdWVzdHMsIHJlZHVjaW5nIGVmZmVjdGl2ZSBzaXplIG9mIHF1ZXVlLlxcbjEwODA6XFx0XFx0ICogV2hlbiBzZXJ2ZXIgaXMgd2VsbCBsb2FkZWQsIHF1ZXVlIHNpemUgcmVkdWNlcyB0byB6ZXJvXFxuMTA4MTpcXHRcXHQgKiBhZnRlciBzZXZlcmFsIG1pbnV0ZXMgb2Ygd29yay4gSXQgaXMgbm90IHN5bmZsb29kLFxcbjEwODI6XFx0XFx0ICogaXQgaXMgbm9ybWFsIG9wZXJhdGlvbi4gVGhlIHNvbHV0aW9uIGlzIHBydW5pbmdcXG4xMDgzOlxcdFxcdCAqIHRvbyBvbGQgZW50cmllcyBvdmVycmlkaW5nIG5vcm1hbCB0aW1lb3V0LCB3aGVuXFxuMTA4NDpcXHRcXHQgKiBzaXR1YXRpb24gYmVjb21lcyBkYW5nZXJvdXMuXFxuMTA4NTpcXHRcXHQgKlxcbjEwODY6XFx0XFx0ICogRXNzZW50aWFsbHksIHdlIHJlc2VydmUgaGFsZiBvZiByb29tIGZvciB5b3VuZ1xcbjEwODc6XFx0XFx0ICogZW1icmlvbnM7IGFuZCBhYm9ydCBvbGQgb25lcyB3aXRob3V0IHBpdHksIGlmIG9sZFxcbjEwODg6XFx0XFx0ICogb25lcyBhcmUgYWJvdXQgdG8gY2xvZyBvdXIgdGFibGUuXFxuMTA4OTpcXHRcXHQgKi9cXG4xMDkwOlxcdFxcdHF1ZXVlID0gXFx1MDAyNmljc2stXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlO1xcbjEwOTE6XFx0XFx0cWxlbiA9IHJlcXNrX3F1ZXVlX2xlbihxdWV1ZSk7XFxuMTA5MjpcXHRcXHRpZiAoKHFsZW4gXFx1MDAzY1xcdTAwM2MgMSkgXFx1MDAzZSBtYXgoOFUsIFJFQURfT05DRShza19saXN0ZW5lci1cXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nKSkpIHtcXG4xMDkzOlxcdFxcdFxcdGludCB5b3VuZyA9IHJlcXNrX3F1ZXVlX2xlbl95b3VuZyhxdWV1ZSkgXFx1MDAzY1xcdTAwM2MgMTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0XFx0d2hpbGUgKG1heF9zeW5fYWNrX3JldHJpZXMgXFx1MDAzZSAyKSB7XFxuMTA5NjpcXHRcXHRcXHRcXHRpZiAocWxlbiBcXHUwMDNjIHlvdW5nKVxcbjEwOTc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA5ODpcXHRcXHRcXHRcXHRtYXhfc3luX2Fja19yZXRyaWVzLS07XFxuMTA5OTpcXHRcXHRcXHRcXHR5b3VuZyBcXHUwMDNjXFx1MDAzYz0gMTtcXG4xMTAwOlxcdFxcdFxcdH1cXG4xMTAxOlxcdFxcdH1cXG4xMTAyOlxcdFxcbjExMDM6XFx0XFx0c3luX2Fja19yZWNhbGMocmVxLCBtYXhfc3luX2Fja19yZXRyaWVzLCBSRUFEX09OQ0UocXVldWUtXFx1MDAzZXJza3FfZGVmZXJfYWNjZXB0KSxcXG4xMTA0OlxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZXhwaXJlLCBcXHUwMDI2cmVzZW5kKTtcXG4xMTA1OlxcdFxcdHRjcF9zeW5fYWNrX3RpbWVvdXQocmVxKTtcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKCFleHBpcmUgXFx1MDAyNlxcdTAwMjZcXG4xMTA4OlxcdFxcdCAgICAoIXJlc2VuZCB8fFxcbjExMDk6XFx0XFx0ICAgICAhdGNwX3J0eF9zeW5hY2soc2tfbGlzdGVuZXIsIHJlcSkgfHxcXG4xMTEwOlxcdFxcdCAgICAgaW5ldF9yc2socmVxKS1cXHUwMDNlYWNrZWQpKSB7XFxuMTExMTpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VudW1fcmV0cmFucyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgdGNwX3JzayhyZXEpLVxcdTAwM2VhY2NlY25fb2spXFxuMTExMjpcXHRcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xcbjExMTM6XFx0XFx0XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQrKyA9PSAwKVxcbjExMTQ6XFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2cXVldWUtXFx1MDAzZXlvdW5nKTtcXG4xMTE1OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2cmVxLVxcdTAwM2Vyc2tfdGltZXIsIGppZmZpZXMgKyB0Y3BfcmVxc2tfdGltZW91dChyZXEpKTtcXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0XFx0aWYgKCFucmVxKVxcbjExMTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjE0LjE1MzYzNTk5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU0Mzc2MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU2VlbXMgbGlrZSBpdCBpcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgV29ydGhGdXp6aW5nYC4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBUQ1AgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgLCBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgdGhlIHJlbGV2YW50IGhlYWRlcnMuIFRoZSBtb2RpZmljYXRpb25zIGluY2x1ZGUgdGltZW91dCBjYWxjdWxhdGlvbnMsIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCBiaXRmaWVsZCBjaGFuZ2VzLCBhbmQgY2FwcyBvbiByZXRyYW5zbWlzc2lvbnMvcmV0cmllcyB3aXRoaW4gdGltZXJzLiBUaGVyZSdzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyBhcm91bmQgaGFuZGxpbmcgc2hpZnRzIGFuZCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AsIGFuZCBob3cgYHJlcXNrX251bV90aW1lb3V0YCBhY2Nlc3NlcyBgcmVxLVx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZWAuIFRoZSBiZXN0IHBhcnQgaXMgaXQncyByZWFkaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9uczsgbGlzdGVuaW5nIHNvY2tldHMsIFNZTiBoYW5kbGluZywgVENQIHRpbWVyIGV4cGlyYXRpb25zLCBzeXNjdGxzLCBhbmQgYHNldHNvY2tvcHRgIGNhbGxzIGZvciBgVENQX0RFRkVSX0FDQ0VQVGAgYW5kIGBUQ1BfU1lOQ05UYCBhcmUgYWxsIHByZXNlbnQuIFllcCwgc291bmRzIGxpa2UgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIGxldCdzIG5hcnJvdyBkb3duIHRoZSBmb2N1cyB0byBmaW5kIHRoZSBiZXN0IHN5bWJvbHMgdG8gdGFyZ2V0LiBUaGF0J3MgYEZvY3VzU3ltYm9sc2AuIExldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG1vZGlmaWVkIGRpcmVjdGx5IG9yIHRoYXQgY2FsbCB0aGUgY2hhbmdlZCBsb2dpYy4gVGhlIGtleSBmdW5jdGlvbnMgSSBzZWUgYXJlOiBgcmVxc2tfdGltZXJfaGFuZGxlcmAgKGluIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCksIHdoZXJlIHdlJ3JlIGNhcHBpbmcgcmV0cmllcyBhbmQgY2FsbGluZyBgdGNwX3JlcXNrX3RpbWVvdXRgOyBgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcmAgKGluIGB0Y3BfdGltZXIuY2ApLCB3aXRoIHRoZSBzYW1lIHJldHJ5LWNhcHBpbmcgYW5kIGB0Y3BfcmVxc2tfdGltZW91dF9za2AgY2FsbDsgYHNlY3NfdG9fcmV0cmFuc2AgKGluIGB0Y3AuY2ApLCB3aGljaCBpcyB1c2VkIHdpdGhpbiBgZG9fdGNwX3NldHNvY2tvcHRgIGZvciBgVENQX0RFRkVSX0FDQ0VQVGA7IGFuZCBgdGNwX2NoZWNrX3JlcWAgKGluIGB0Y3BfbWluaXNvY2tzLmNgKSwgd2hpY2ggY2FsbHMgYHRjcF9yZXFza190aW1lb3V0YC5cblxuTm93LCBhYm91dCBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgIGFuZCBgcmVxc2tfbnVtX3RpbWVvdXRgIC0gdGhleSdyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgdGhleSBjYW4ndCBiZSB0YXJnZXRlZCBkaXJlY3RseSB2aWEgc3ltYm9sIGNvdmVyYWdlLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICp1c2UqIHRoZW0uIFRoZSBvbmVzIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGFyZSB0aGUgYmVzdDogYHJlcXNrX3RpbWVyX2hhbmRsZXJgLCBgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcmAsIGBzZWNzX3RvX3JldHJhbnNgIChvciByYXRoZXIgYGRvX3RjcF9zZXRzb2Nrb3B0YCB3aGljaCBjYWxscyBpdCksIGFuZCBgdGNwX2NoZWNrX3JlcWAuXG5cblF1aWNrIGNoZWNrIG9uIGBzZWNzX3RvX3JldHJhbnNgLiBZZXAsIGBzZWNzX3RvX3JldHJhbnNgIGlzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IGBkb190Y3Bfc2V0c29ja29wdGAuIGBkb190Y3Bfc2V0c29ja29wdGAgaXRzZWxmIGJlY29tZXMgdGhlIHNldHNvY2tvcHQgZW50cnlwb2ludCwgd2hpY2ggaXMgZ29vZC5cblxuU28sIGByZXFza190aW1lcl9oYW5kbGVyYCwgYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgLCBgdGNwX2NoZWNrX3JlcWAsIGFuZCBgZG9fdGNwX3NldHNvY2tvcHRgIGFyZSB0aGUgcmVhbCBzdGFycy5cblxuRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBhY3R1YWxseSBleGVyY2lzZSB0aGUgY2hhbmdlcyBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC9NYWtlZmlsZWAgb3IgYG5ldC9pcHY0L0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIyMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjIwLjIwODAxNTE0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjI4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9jb25uZWN0aW9uX3NvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjA5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS04LVxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6OTpcXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTEwLVxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwMC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwX2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDE6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDItI2luY2x1ZGUgXFx1MDAzY25ldC9ncm8uaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz02MT1zdGF0aWMgaW50IGJwZl90Y3BfY2FfYnRmX3N0cnVjdF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy04MC1cXHRcXHRicmVhaztcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODE6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jaywgaWNza19jYV9wcml2KTpcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODI6XFx0XFx0ZW5kID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrLCBpY3NrX2NhX3ByaXYpO1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy04My1cXHRcXHRicmVhaztcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssIGljc2tfYWNrLnBlbmRpbmcpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzo4NTpcXHRcXHRlbmQgPSBvZmZzZXRvZmVuZChzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTg2LVxcdFxcdFxcdFxcdCAgaWNza19hY2sucGVuZGluZyk7XFxuLS1cXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM9MTg0OT1pbnQgY2lwc29fdjRfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xODU5LVxcdHN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7XFxubmV0L2lwdjQvY2lwc29faXB2NC5jOjE4NjA6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uO1xcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xODYxLVxcbi0tXFxubmV0L2lwdjQvY2lwc29faXB2NC5jPTIwNTM9dm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTIwNjEtXFx0aWYgKGluZXRfdGVzdF9iaXQoSVNfSUNTSywgc2spIFxcdTAwMjZcXHUwMDI2IGhkcl9kZWx0YSBcXHUwMDNlIDApIHtcXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MjA2MjpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTIwNjMtXFx0XFx0c2tfY29ubi1cXHUwMDNlaWNza19leHRfaGRyX2xlbiAtPSBoZHJfZGVsdGE7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0LVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTU6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2hhc2h0YWJsZXMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NjAxPXN0YXRpYyBpbnQgaW5ldF9jc2tfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8pXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02MDIte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6NjAzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTYwNC1cXHRERUZJTkVfV0FJVCh3YWl0KTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NjQ5PXN0cnVjdCBzb2NrICppbmV0X2Nza19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNjUwLXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjY1MTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02NTItXFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcXHUwMDI2aWNzay1cXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTcxOD12b2lkIGluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03MjIte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6NzIzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTcyNC1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzMxPXZvaWQgaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzMyLXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjczMzpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03MzQtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTc0Mz12b2lkIGluZXRfY3NrX2NsZWFyX3htaXRfdGltZXJzX3N5bmMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzQ0LXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc0NTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NDYtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMzM9c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzNy1cXHRzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIgPSByZXEtXFx1MDAzZXJza19saXN0ZW5lcjtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwMzg6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzOS1cXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTE4Nz1zdGF0aWMgdm9pZCBpbmV0X2Nsb25lX3VscChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHN0cnVjdCBzb2NrICpuZXdzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE4OS17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTkwOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKG5ld3NrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExOTEtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEyMDY9c3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lX2xvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjEwLVxcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2Nsb25lX2xvY2soc2ssIHByaW9yaXR5KTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyMTE6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIxMi1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMTY9c3RhdGljIGludCBpbmV0X3VscF9jYW5fbGlzdGVuKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMTcte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTMxODpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzE5LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMzM1PWludCBpbmV0X2Nza19saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMzNi17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzM3OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMzgtXFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDY4PXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ2OS17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDcwOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0NzEtXFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcXHUwMDI2aWNzay1cXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcXHUwMDNlXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvYnBmX3NrX3N0b3JhZ2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTE5OT1zdGF0aWMgaW50IGluZXRfZGlhZ19nZXRfcHJvdG9jb2woY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIwOC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMDk6aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxMC1cXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L2FkZHJjb25mLmhcXHUwMDNlXFxubmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9oYXNodGFibGVzLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYz0xMDM9dm9pZCBpbmV0X3R3c2tfaGFzaGRhbmNlX3NjaGVkdWxlKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LFxcbi0tXFxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMTA4LVxcdGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoxMDk6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTExMC1cXHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgc2stXFx1MDAzZXNrX2hhc2gpO1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDkyLVxcdFxcdGlmIChpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSkge1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTA5MzpcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDk0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjAwLXtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjAxOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjAyLVxcdHN0cnVjdCBzb2NrICpjaGlsZDtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQyMD12b2lkIHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcC5jLTQyMS17XFxubmV0L2lwdjQvdGNwLmM6NDIyOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYy00MjMtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xNTUyPXZvaWQgX190Y3BfY2xlYW51cF9yYnVmKHN0cnVjdCBzb2NrICpzaywgaW50IGNvcGllZClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE1NTctXFx0aWYgKGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7XFxubmV0L2lwdjQvdGNwLmM6MTU1ODpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtMTU1OS1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMzNjE9aW50IHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzM2My1cXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxubmV0L2lwdjQvdGNwLmM6MzM2NDpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtMzM2NS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM4NDAtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwLmM6Mzg0MTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtMzg0Mi1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00MTcyPWludCB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00MTc0LXtcXG5uZXQvaXB2NC90Y3AuYzo0MTc1OlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYy00MTc2LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDIxMD12b2lkIHRjcF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQyMTItXFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7IC8qIGlmZiBza190eXBlID09IFNPQ0tfU1RSRUFNICovXFxubmV0L2lwdjQvdGNwLmM6NDIxMzpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtNDIxNC1cXHRjb25zdCB1OCBlY3QxX2lkeCA9IElORVRfRUNOX0VDVF8xIC0gMTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDQ4My17XFxubmV0L2lwdjQvdGNwLmM6NDQ4NDpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtNDQ4NS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ4Njc9aW50IHRjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4Njkte1xcbm5ldC9pcHY0L3RjcC5jOjQ4NzA6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcC5jLTQ4NzEtXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmljLmM9MTkwPXN0YXRpYyB2b2lkIGJpY3RjcF9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpXFxubmV0L2lwdjQvdGNwX2JpYy5jLTE5MS17XFxubmV0L2lwdjQvdGNwX2JpYy5jOjE5MjpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2JpYy5jLTE5My1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9Mzg9dm9pZCB0Y3Bfc2V0X2NhX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTggY2Ffc3RhdGUpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zOS17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzo0MDpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy00MS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMTgtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjE5OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIyMC1cXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjM2PXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIzNy17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyMzg6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjM5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNTA9c3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTIte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTI1NC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjcwPXZvaWQgdGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTI3MS17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyNzI6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjczLVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz00MTI9aW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBsb2FkLFxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy00MTQte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6NDE1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxNi1cXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9MTE1PXN0YXRpYyBpbnQgdGNwX2RpYWdfZ2V0X2F1eChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluLFxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xMTcte1xcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTE4OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTExOS1cXHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTE0Nj1zdGF0aWMgc2l6ZV90IHRjcF9kaWFnX2dldF9hdXhfc2l6ZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluKVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtMTQ3LXtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjE0ODpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNDktXFx0c2l6ZV90IHNpemUgPSAwO1xcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MTQ1PWludCB0Y3BfZmFzdG9wZW5fcmVzZXRfY2lwaGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMTgxLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjE4MjppbnQgdGNwX2Zhc3RvcGVuX2dldF9jaXBoZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMTgzLVxcdFxcdFxcdCAgICB1NjQgKmtleSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9odGNwLmM9ODI9c3RhdGljIGlubGluZSB2b2lkIG1lYXN1cmVfcnR0KHN0cnVjdCBzb2NrICpzaywgdTMyIHNydHQpXFxubmV0L2lwdjQvdGNwX2h0Y3AuYy04My17XFxubmV0L2lwdjQvdGNwX2h0Y3AuYzo4NDpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2h0Y3AuYy04NS1cXHRzdHJ1Y3QgaHRjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaHRjcC5jPTEwMT1zdGF0aWMgdm9pZCBtZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2h0Y3AuYy0xMDMte1xcbm5ldC9pcHY0L3RjcF9odGNwLmM6MTA0OlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaHRjcC5jLTEwNS1cXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yMjgte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjIyOTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjMwLVxcdGNvbnN0IHVuc2lnbmVkIGludCBsc3MgPSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5sYXN0X3NlZ19zaXplO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzExPXN0YXRpYyB2b2lkIHRjcF9pbmNyX3F1aWNrYWNrKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1heF9xdWlja2Fja3MpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzEyLXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMTM6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMxNC1cXHR1bnNpZ25lZCBpbnQgcXVpY2thY2tzID0gdGNwX3NrKHNrKS1cXHUwMDNlcmN2X3duZCAvICgyICogaWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMjM9c3RhdGljIHZvaWQgdGNwX2VudGVyX3F1aWNrYWNrX21vZGUoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbWF4X3F1aWNrYWNrcylcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMjQte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMyNTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzI2LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzM2PXN0YXRpYyBib29sIHRjcF9pbl9xdWlja2Fja19tb2RlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzcte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMzODpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzM5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9Nzc4PXN0YXRpYyB2b2lkIHRjcF9jbGFtcF93aW5kb3coc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzgwLVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc4MTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzgyLVxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTk5NT1zdGF0aWMgdm9pZCB0Y3Bfc2F2ZV9scmN2X2Zsb3dsYWJlbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy05OTctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6OTk4OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy05OTktXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDE1PXN0YXRpYyB2b2lkIHRjcF9ldmVudF9kYXRhX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTAxNy1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMDE4OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE5LVxcdHUzMiBub3c7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yNTU0PXZvaWQgdGNwX2VudGVyX2xvc3Moc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI1NTUte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI1NTY6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI1NTctXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yODQzPXN0YXRpYyB2b2lkIHRjcF91bmRvX2N3bmRfcmVkdWN0aW9uKHN0cnVjdCBzb2NrICpzaywgYm9vbCB1bm1hcmtfbG9zcylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTctXFx0aWYgKHRwLVxcdTAwM2Vwcmlvcl9zc3RocmVzaCkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI4NTg6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTktXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMDc0PXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX2ZhaWxlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3NS17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MzA3NjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3Ny1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMwODM9c3RhdGljIHZvaWQgdGNwX210dXBfcHJvYmVfc3VjY2VzcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMDg1LVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMwODY6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMwODctXFx0dTY0IHZhbDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMxMTY9c3RhdGljIHZvaWQgdGNwX25vbl9jb25nZXN0aW9uX2xvc3NfcmV0cmFuc21pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExNy17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MzExODpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExOS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMzMjg9c3RhdGljIHZvaWQgdGNwX2Zhc3RyZXRyYW5zX2FsZXJ0KHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTMyIHByaW9yX3NuZF91bmEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzMwLXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMzMxOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzMyLVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzUxMz1zdGF0aWMgdm9pZCB0Y3BfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZClcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE0LXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozNTE1OlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE2LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzUyND12b2lkIHRjcF9yZWFybV9ydG8oc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjUte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM1MjY6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjctXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zNjAyPXN0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICphY2tfc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzYwNS17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MzYwNjpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzYwNy1cXHR1NjQgZmlyc3RfYWNrdCwgbGFzdF9hY2t0O1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzgwNz1zdGF0aWMgdm9pZCB0Y3BfYWNrX3Byb2JlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODA4LXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozODA5OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODEwLVxcdHN0cnVjdCBza19idWZmICpoZWFkID0gdGNwX3NlbmRfaGVhZChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zODU4PXN0YXRpYyB2b2lkIHRjcF9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWRfc2Fja2VkLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzg2MC17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Mzg2MTpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzg2Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQxNzI9c3RhdGljIHZvaWQgdGNwX2luX2Fja19ldmVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQxNzMte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQxNzQ6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQxNzUtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00Mjc2PXN0YXRpYyBpbnQgdGNwX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFnKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQyNzcte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQyNzg6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQyNzktXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NzA1PXZvaWQgdGNwX2luaXRfdHJhbnNmZXIoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnBmX29wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDYte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjY3MDc6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDgtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NzMzPXZvaWQgdGNwX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MzUtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjczNjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjczNy1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY4NTI9c3RhdGljIGludCB0Y3BfcmN2X3N5bnNlbnRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02ODU0LXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2ODU1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02ODU2LVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzE1NC1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MTU1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MTU2LVxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz00Mzg9dm9pZCB0Y3BfbGRfUlRPX3JldmVydChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy00Mzkte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6NDQwOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTQ0MS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM0OD12b2lkIGluZXRfc2tfcnhfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNTctXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzU4OmNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYyA9IHtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNTktXFx0LnF1ZXVlX3htaXRcXHQgICA9IGlwX3F1ZXVlX3htaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzOTY9c3RhdGljIGludCB0Y3BfdjRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzOTcte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM5ODpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzk5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yNzcwPXN0YXRpYyB2b2lkIGdldF90Y3A0X3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGludCBpKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzc0LVxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjc3NTpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzc2LVxcdGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTMtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmhcXHUwMDNlXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MzQwPXZvaWQgdGNwX3VwZGF0ZV9tZXRyaWNzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTM0MS17XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzozNDI6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzQzLVxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9MzI2PXZvaWQgdGNwX3RpbWVfd2FpdChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHRpbWVvKVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0zMjcte1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzozMjg6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0zMjktXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NDk3PXZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ5OTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTUwMC1cXHR1MzIgY2Ffa2V5ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQ0NfQUxHTyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTU1Mi1cXHRzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSA9IHRjcF9yc2socmVxKTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NTUzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTU0LVxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqb2xkdHA7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbnYuYz0yMzk9c3RhdGljIHZvaWQgdGNwbnZfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxcbm5ldC9pcHY0L3RjcF9udi5jLTI0MC17XFxubmV0L2lwdjQvdGNwX252LmM6MjQxOlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfbnYuYy0yNDItXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODM9c3RhdGljIHZvaWQgdGNwX2V2ZW50X25ld19kYXRhX3NlbnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NC17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODYtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTc5PXN0YXRpYyB2b2lkIHRjcF9ldmVudF9kYXRhX3NlbnQoc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xODEte1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxODI6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xODMtXFx0Y29uc3QgdTMyIG5vdyA9IHRjcF9qaWZmaWVzMzI7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTUzOC17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1Mzk6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQwLVxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTk5Nj1zdGF0aWMgaW5saW5lIGludCBfX3RjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTk5OC1cXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTk5OTpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDAtXFx0aW50IG1zc19ub3c7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjAyOT1pbnQgdGNwX21zc190b19tdHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbXNzKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMzEtXFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwMzI6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDMzLVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIwNDI9dm9pZCB0Y3BfbXR1cF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDQ0LVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMDQ1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA0Ni1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjA3OT11bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA4MS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjA4MjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwODMtXFx0aW50IG1zc19ub3c7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjQ1Mj1zdGF0aWMgYm9vbCB0Y3BfdHNvX3Nob3VsZF9kZWZlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjQ1Ni17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjI0NTc6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNDU4LVxcdHUzMiBzZW5kX3dpbiwgY29uZ193aW4sIGxpbWl0LCBpbl9mbGlnaHQsIHRocmVzaG9sZDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yNTY1PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfbXR1X2NoZWNrX3JlcHJvYmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNTY2LXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjU2NzpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTI1NjgtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjY4ND1zdGF0aWMgaW50IHRjcF9tdHVfcHJvYmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNjg1LXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjY4NjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTI2ODctXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzA5OT1ib29sIHRjcF9zY2hlZHVsZV9sb3NzX3Byb2JlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZHZhbmNpbmdfcnRvKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zMTAwLXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzEwMTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMxMDItXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzMxND11MzIgX190Y3Bfc2VsZWN0X3dpbmRvdyhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMzMTUte1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMzE2OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzMxNy1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNTUwPWludCBfX3RjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWdzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNTUxLXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzU1MjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM1NTMtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzcyNT12b2lkIHRjcF94bWl0X3JldHJhbnNtaXRfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNzI2LXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzcyNzpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3MjgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJ0eF9oZWFkLCAqaG9sZSA9IE5VTEw7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjAuMjg3MzgyMjI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDQ4MTkzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSU5FVGAgaXMgZW5hYmxlZCwgc28gSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGJ5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIHByb2JhYmx5IGBuZXQvaXB2NC9LY29uZmlnYCBvciBgbmV0L0tjb25maWdgLiBgSU5FVGAgaXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgSVB2NCBhbmQgVENQIG5ldHdvcmtpbmcsIHNvIHRoYXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLCBhbmQgSSBhZ3JlZS4gVGhpcyB0b3VjaGVzIHNvbWUgY3JpdGljYWwgcGFydHMgb2YgdGhlIFRDUCBzdGFjazogY29ubmVjdGlvbiBoYW5kbGluZywgcmV0cmFuc21pc3Npb24gdGltZXJzLCBgcmVxdWVzdF9zb2NrYCBiaXRmaWVsZCBwYWNraW5nLCBhbmQgdGltZW91dCBjYWxjdWxhdGlvbnMuIFRoYXQncyBhIGdvb2Qgc2lnbi5cblxuTmV4dCwgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJpZ2h0IHN5bWJvbHMgYXJlIGJlaW5nIHRhcmdldGVkLCBsZXQncyBjb25maXJtIHRoZSBgRm9jdXNTeW1ib2xzYDpcbiogICBgcmVxc2tfdGltZXJfaGFuZGxlcmAgLSBIYW5kbGVzIHJldHJhbnNtaXNzaW9uIHRpbWVycywgdmVyeSBpbXBvcnRhbnQuXG4qICAgYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIC0gUmVsYXRlZCB0byBGYXN0IE9wZW4sIGFub3RoZXIgY3JpdGljYWwgcGllY2Ugb2YgVENQLlxuKiAgIGBkb190Y3Bfc2V0c29ja29wdGAgLSBUaGlzIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMsIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvci5cbiogICBgdGNwX2NoZWNrX3JlcWAgLSBVc2VkIGR1cmluZyBTWU4tQUNLIGhhbmRsaW5nLCBpdCdzIGFsc28gYSBncmVhdCB0YXJnZXQuXG5cblRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBvbmx5IGluY2x1ZGVzIGBJTkVUYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC5cblxuVGhlIHJlYXNvbmluZyBzZWVtcyBzb3VuZCwgd2hpY2ggY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24uIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIDctYml0IG92ZXJmbG93IGlzc3VlIGluIGByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0YCBieSBjYXBwaW5nIFNZTi1BQ0sgcmV0cmllcyBhdCAxMjcgaW4gYm90aCBgcmVxc2tfdGltZXJfaGFuZGxlcmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYC4gSXQgYWxzbyBtb2RpZmllcyBiaXRmaWVsZCBkZWZpbml0aW9ucyBpbiBgc3RydWN0IHJlcXVlc3Rfc29ja2AsIGFuZCB1cGRhdGVzIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuIFRoZSBwYXRocyBpbnZvbHZlZCBhcmUgYWxsIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBzb2NrZXQgb3B0aW9ucy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNyaXRpY2FsIGFyZWEgdGhhdCBuZWVkcyBjbG9zZSBleGFtaW5hdGlvbi5cblxuRmluYWxseSwgSSdsbCBnaXZlIHRoZSBzZXQtcmVzdWx0cyBjYWxsIGEgZmluYWwgb25jZS1vdmVyLiBZZXAsIGV2ZXJ5dGhpbmcgbG9va3MgY29tcGxldGUgYW5kIGNvaGVyZW50LiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBzb2xpZCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAyNCwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjQuODkyMjA0MzcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTk5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxc2tfdGltZXJfaGFuZGxlclwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX3N5bmFja190aW1lclwiLFxuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcInRjcF9jaGVja19yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxc2tfdGltZXJfaGFuZGxlclwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX3N5bmFja190aW1lclwiLFxuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcInRjcF9jaGVja19yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjUuMDI0NDE1MDY4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM0OTQ3NTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjI1LjAyNTIxMDk2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4MzQ4Njc2MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYml0ZmllbGQgZGF0YSByYWNlIHNhZmV0eSBhbmQgaW50ZWdlci9zaGlmdCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGZvciBgc3RydWN0IHJlcXVlc3Rfc29ja2AuIEl0IGFkZHMgYSB1bmlvbiB3aXRoIGBudW1fdGltZW91dF9zeW5jb29raWVgIHRvIGFsbG93IGxvY2tsZXNzIHNpbmdsZS1ieXRlIGBSRUFEX09OQ0VgIHJlYWRzIG9mIHRoZSA3LWJpdCBgbnVtX3RpbWVvdXRgIGZpZWxkLCBjYXBzIG1heGltdW0gU1lOLUFDSyByZXRyaWVzIHRvIDEyNyAobWF0Y2hpbmcgdGhlIDctYml0IGZpZWxkIHdpZHRoKSwgYW5kIHByZXZlbnRzIHVuZGVmaW5lZCBzaGlmdCBiZWhhdmlvciBpbiBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgLlxcblxcbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MDgxZTdjMzViYTZhNDA4MDA1YmZhNzQ2OTAyOTcyZTVlMjc4Yjg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNjo1NTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbmluZGV4IDIwOGY0Njk2N2VlNTkuLjRhMmVkOTY0ZGNlYWIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbkBAIC05NTQsNyArOTU0LDkgQEAgdGNwX3N0ZHVyZyAtIEJPT0xFQU5cbiBcbiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSXG4gXHROdW1iZXIgb2YgdGltZXMgU1lOQUNLcyBmb3IgYSBwYXNzaXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQgd2lsbFxuLVx0YmUgcmV0cmFuc21pdHRlZC4gU2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAyNTUuIERlZmF1bHQgdmFsdWVcbitcdGJlIHJldHJhbnNtaXR0ZWQuIFRoZSBzeXNjdGwgYWNjZXB0cyAwLTI1NS4gVmFsdWVzIGFib3ZlIDEyNyBhcmVcbitcdHNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdFxuK1x0cmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBmaWVsZC4gRGVmYXVsdCB2YWx1ZVxuIFx0aXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb25cbiBcdHdpdGggdGhlIGN1cnJlbnQgaW5pdGlhbCBSVE8gb2YgMXNlY29uZC4gV2l0aCB0aGlzIHRoZSBmaW5hbCB0aW1lb3V0XG4gXHRmb3IgYSBwYXNzaXZlIFRDUCBjb25uZWN0aW9uIHdpbGwgaGFwcGVuIGFmdGVyIDYzc2Vjb25kcy5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaCBiL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oXG5pbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oXG5AQCAtNTgsMTIgKzU4LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xuIFx0c3RydWN0IHJlcXVlc3Rfc29ja1x0XHQqZGxfbmV4dDtcbiBcdHUxNlx0XHRcdFx0bXNzO1xuIFx0dThcdFx0XHRcdG51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi9cbi1cdHU4XHRcdFx0XHRzeW5jb29raWU6MTsgLyogVHJ1ZSBpZlxuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHU4XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG4gXHRcdFx0XHRcdFx0ICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW5cbiBcdFx0XHRcdFx0XHQgICAgICAqICAgIFRTIG9mIFNZTitBQ0tcbiBcdFx0XHRcdFx0XHQgICAgICAqIDIpIEFDSyBpcyB2YWxpZGF0ZWQgYnkgQlBGIGtmdW5jLlxuIFx0XHRcdFx0XHRcdCAgICAgICovXG4tXHR1OFx0XHRcdFx0bnVtX3RpbWVvdXQ6NzsgLyogbnVtYmVyIG9mIHRpbWVvdXRzICovXG4rXHRcdFx0dThcdFx0bnVtX3RpbWVvdXQ6NzsgLyogbnVtYmVyIG9mIHRpbWVvdXRzICovXG4rXHRcdH07XG4rXHRcdHU4XHRcdG51bV90aW1lb3V0X3N5bmNvb2tpZTtcbitcdH07XG4gXHR1MzJcdFx0XHRcdHRzX3JlY2VudDtcbiBcdHN0cnVjdCB0aW1lcl9saXN0XHRcdHJza190aW1lcjtcbiBcdGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzXHQqcnNrX29wcztcbkBAIC03NCw2ICs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHtcbiBcdHUzMlx0XHRcdFx0dGltZW91dDtcbiB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdTggcmVxc2tfbnVtX3RpbWVvdXQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuK3tcbitcdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuK1xuKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRClcbitcdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbisjZWxzZVxuK1x0cmV0dXJuIG51bV90aW1lb3V0IFx1MDAyNiAweDdmO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHJldHVybiAoc3RydWN0IHJlcXVlc3Rfc29jayAqKXNrO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC0xODMsNiArMTgzLDggQEAgc3RhdGljX2Fzc2VydCgoMSBcdTAwM2NcdTAwM2MgQVRPX0JJVFMpIFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XG4gI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTFx0MzI3NjdcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUENOVFx0XHQxMjdcbiAjZGVmaW5lIE1BWF9UQ1BfU1lOQ05UXHRcdDEyN1xuKy8qIHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgaXMgYSA3LWJpdCBmaWVsZC4gKi9cbisjZGVmaW5lIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVNcdDEyN1xuIFxuIC8qIEVuc3VyZSB0aGF0IFRDUCBQQVdTIGNoZWNrcyBhcmUgcmVsYXhlZCBhZnRlciB+MjE0NyBzZWNvbmRzXG4gICogdG8gYXZvaWQgb3ZlcmZsb3dzLiBUaGlzIGFzc3VtZXMgYSBjbG9jayBzbWFsbGVyIHRoYW4gMSBNaHouXG5AQCAtODgxLDEyICs4ODMsMjMgQEAgc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxuIFx0cmV0dXJuIHVzZWNzX3RvX2ppZmZpZXMoKHRwLVx1MDAzZXNydHRfdXMgXHUwMDNlXHUwMDNlIDMpICsgdHAtXHUwMDNlcnR0dmFyX3VzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXRfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4ge1xuLVx0dTY0IHRpbWVvdXQgPSAodTY0KXJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQ7XG4rXHR1NjQgdGltZW91dCA9IFJFQURfT05DRShyZXEtXHUwMDNldGltZW91dCk7XG4rXHR1MzIgcnRvX21heCA9IHRjcF9ydG9fbWF4KHNrKTtcbitcdHU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTtcbitcbitcdGlmIChudW1fdGltZW91dCBcdTAwM2U9IEJJVFNfUEVSX1RZUEUodGltZW91dCkgfHxcbitcdCAgICB0aW1lb3V0IFx1MDAzZSBVNjRfTUFYIFx1MDAzZVx1MDAzZSBudW1fdGltZW91dClcbitcdFx0cmV0dXJuIHJ0b19tYXg7XG4rXG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0IFx1MDAzY1x1MDAzYyBudW1fdGltZW91dCwgcnRvX21heCk7XG4rfVxuIFxuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKW1pbl90KHU2NCwgdGltZW91dCxcbi1cdFx0XHRcdCAgICB0Y3BfcnRvX21heChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyKSk7XG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbit7XG4rXHRyZXR1cm4gdGNwX3JlcXNrX3RpbWVvdXRfc2socmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbiB9XG4gXG4gdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjIxZjk2YTUwYzEwZmUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMTA2OCw2ICsxMDY4LDggQEAgc3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdG5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTtcbiBcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbiBcdFx0UkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpO1xuK1x0bWF4X3N5bl9hY2tfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3N5bl9hY2tfcmV0cmllcyxcbitcdFx0XHRcdCAgICBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcbiBcdC8qIE5vcm1hbGx5IGFsbCB0aGUgb3BlbnJlcXMgYXJlIHlvdW5nIGFuZCBiZWNvbWUgbWF0dXJlXG4gXHQgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC5cbiBcdCAqIElmIHN5bmFjayB3YXMgbm90IGFja25vd2xlZGdlZCBmb3IgMSBzZWNvbmQsIGl0IG1lYW5zXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uZTU1MWU2YWRjODAwNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpXG4gXHRcdGludCBwZXJpb2QgPSB0aW1lb3V0O1xuIFxuIFx0XHRyZXMgPSAxO1xuLVx0XHR3aGlsZSAoc2Vjb25kcyBcdTAwM2UgcGVyaW9kIFx1MDAyNlx1MDAyNiByZXMgXHUwMDNjIDI1NSkge1xuK1x0XHR3aGlsZSAoc2Vjb25kcyBcdTAwM2UgcGVyaW9kIFx1MDAyNlx1MDAyNiByZXMgXHUwMDNjIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHtcbiBcdFx0XHRyZXMrKztcbiBcdFx0XHR0aW1lb3V0IFx1MDAzY1x1MDAzYz0gMTtcbiBcdFx0XHRpZiAodGltZW91dCBcdTAwM2UgcnRvX21heClcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5pbmRleCBlNTZlYWU0YmMzNDFlLi4yZDJkZWMxZTkxNTY1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5AQCAtNDY0LDExICs0NjQsMTMgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdHRjcF9zeW5fYWNrX3RpbWVvdXQocmVxKTtcbiBcbi1cdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4uXG4rXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW5cbitcdCAqIHJlcHJlc2VudCBpdC5cbiBcdCAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KClcbiBcdCAqL1xuIFx0bWF4X3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbiBcdFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpICsgMTtcbitcdG1heF9yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfcmV0cmllcywgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7XG4gXG4gXHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gbWF4X3JldHJpZXMpIHtcbiBcdFx0dGNwX3dyaXRlX2Vycihzayk7XG5AQCAtNDkwLDcgKzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRpZiAoIXRwLVx1MDAzZXJldHJhbnNfc3RhbXApXG4gXHRcdHRwLVx1MDAzZXJldHJhbnNfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcF90cyh0cCk7XG4gXHR0Y3BfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsXG4tXHRcdFx0ICByZXEtXHUwMDNldGltZW91dCBcdTAwM2NcdTAwM2MgcmVxLVx1MDAzZW51bV90aW1lb3V0LCBmYWxzZSk7XG4rXHRcdFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB0Y3BfcnR4X3Byb2JlMF90aW1lZF9vdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjUuMDI1MjEyMjI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTI5NDMwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJleW9uZCB0aGUgc3RhbmRhcmQgS0FTQU4gcnVucyB3ZSdyZSBhbHJlYWR5IGRvaW5nLiAgVGhlIGZvY3VzIGhlcmUgaXMgcmVhbGx5IG9uIGRldGVybWluaW5nIGlmIHRoZXJlJ3MgZW5vdWdoICpuZXcqIGNvZGUgc3VyZmFjZSBvciBzdWZmaWNpZW50bHkgaW50ZXJlc3RpbmcgbG9naWMgaW50cm9kdWNlZCB0byBtYWtlIGEgZm9jdXNlZCBLTVNBTiBzZXNzaW9uIHdvcnRod2hpbGUuXG5cbkZpcnN0LCBsZXQncyB3YWxrIHRocm91Z2ggdGhlIGRpZmYuICBJdCBzZWVtcyB0aGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdmFyaW91cyBuZXR3b3JrLXJlbGF0ZWQgZmlsZXMuIFNwZWNpZmljYWxseTpcblxuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBVcGRhdGVzIHRoZSBgdGNwX3N5bmFja19yZXRyaWVzYCBkb2N1bWVudGF0aW9uLiBEb2Vzbid0IHNlZW0gcmVsZXZhbnQgZm9yIEtNU0FOIGRpcmVjdGx5LCBidXQgZ29vZCB0byBrbm93IGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgYmVpbmcgdHdlYWtlZC5cbiogICAqKmBpbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaGA6KiogIEEgYml0ZmllbGQgaW4gdGhlIGByZXF1ZXN0X3NvY2tgIHN0cnVjdCBpcyBiZWluZyByZXdvcmtlZC4gVGhlIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGZpZWxkcyBhcmUgYmVpbmcgcmVmYWN0b3JlZCwgYW5kIGEgaGVscGVyIGZ1bmN0aW9uIGByZXFza19udW1fdGltZW91dGAgaXMgYWRkZWQuIFRoZSBiaXRmaWVsZCBtYW5pcHVsYXRpb24gbWlnaHQgYmUgYW4gYXJlYSBvZiBpbnRlcmVzdC4gQW55IGNoYW5nZXMgdG8gaG93IHdlIGFyZSBjYWxjdWxhdGluZyBhbmQgbWFuYWdpbmcgcmV0cmllcyBhbmQgdGltZW91dHMsIGVzcGVjaWFsbHkgaW52b2x2aW5nIGJpdGZpZWxkcywgY2FuIGxlYWQgdG8gaW50ZXJlc3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLlxuKiAgICoqYGluY2x1ZGUvbmV0L3RjcC5oYDoqKiBEZWZpbmVzIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYC4gVGhpcyBpbnRyb2R1Y2VzIGEgbmV3IHVwcGVyIGJvdW5kIGZvciByZXRyaWVzLiAgVGhlIGNhbGN1bGF0aW9uIG9mIHRpbWVvdXQgdXNlcyBhIHNoaWZ0IG9wZXJhdGlvbiB3aXRoIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IG92ZXJmbG93IGB0Y3BfcmVxc2tfdGltZW91dF9za2AsIHdoaWNoIHdhcnJhbnRzIHNjcnV0aW55LiAgVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgc28gZmFyLCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIG92ZXJmbG93IGJ1Z3MuXG4qICAgKipgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6KiogIENhcHBpbmcgYG1heF9zeW5fYWNrX3JldHJpZXNgLiAgQW5vdGhlciBsaW1pdC5cbiogICAqKmBuZXQvaXB2NC90Y3AuY2A6KiogIExpbWl0cyB0aGUgcmV0cmllcyBpbiB0aGUgYHNlY3NfdG9fcmV0cmFuc2AgZnVuY3Rpb24uXG4qICAgKipgbmV0L2lwdjQvdGNwX3RpbWVyLmNgOioqIENhcHMgYG1heF9yZXRyaWVzYCBhbmQgcmVwbGFjZXMgc29tZSBjYWxjdWxhdGlvbnMgd2l0aCB0aGUgYHRjcF9yZXFza190aW1lb3V0X3NrYCBoZWxwZXIuIFRoZSBjb21iaW5hdGlvbiBvZiBjYXBwaW5nIGFuZCB0aGUgaGVscGVyIGZ1bmN0aW9uIGhlcmUgaXMgaW50ZXJlc3RpbmcuXG5cblRoZSBwYXR0ZXJuIGVtZXJnaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmluaW5nIHRoZSByZXRyeS90aW1lb3V0IGxvZ2ljIGZvciBUQ1AgU1lOLUFDS3MsIGFkZGluZyBsaW1pdHMgYW5kIHJlLWRvaW5nIHRoZSBjYWxjdWxhdGlvbnMgdG8gbWFrZSB0aGVtIHNhZmVyLiBCaXRmaWVsZCBjaGFuZ2VzIHBsdXMgbmV3IHRpbWVvdXQgY2FsY3VsYXRpb24gYW5kIG92ZXJmbG93IHByb3RlY3Rpb24gbWVhbnMgdGhlcmUgbWlnaHQgYmUgbW9yZSBjaGFuY2VzIG9mIHNvbWV0aGluZyBnb2luZyB3cm9uZy5cblxuVGhlIG5leHQgdGhpbmcgSSdkIGRvIGlzIGxvb2sgY2xvc2VseSBhdCBob3cgYHJlcXVlc3Rfc29ja2Agc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIG15IHByZWZlcnJlZCB0b29sIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHdoZXJlIGFuZCBob3cgYHJlcXVlc3Rfc29ja2Agc3RydWN0dXJlcyBhcmUgdXNlZC4gVGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGlzIHdoZXJlIHRoZXNlIGtpbmQgb2YgYnVncyB0eXBpY2FsbHkgb3JpZ2luYXRlLCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIGhvdyB0aGUgYml0ZmllbGRzIGFuZCB0aGUgdGltZW91dCB2YWx1ZSBhcmUgYmVpbmcgc2V0LiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmaWVsZHMgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kLlxuXG5CYXNlZCBvbiB0aGUgaW5pdGlhbCBpbnNwZWN0aW9uLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgbWlnaHQgd2FycmFudCBhICpmb2N1c2VkKiBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJ1dCBJIHdvdWxkIG5lZWQgdG8gYW5hbHl6ZSB0aGUgYHJlcXVlc3Rfc29ja2AgYWxsb2NhdGlvbiBhbmQgdXNhZ2UgbW9yZSB0byBiZSBjZXJ0YWluLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnl0aGluZyB0aGF0IGludm9sdmVzIHRoZSBiaXRmaWVsZHMgKGBzeW5jb29raWVgLCBgbnVtX3RpbWVvdXRgKSwgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gKGVzcGVjaWFsbHkgdGhlIHNoaWZ0IG9wZXJhdGlvbiksIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGxpbWl0cyB0aGF0IHdlcmUgYWRkZWQsIHRvIGZpZ3VyZSBvdXQgaWYgd2UgaGF2ZSBpbnRlcmVzdGluZyBtZW1vcnkgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjUzLjU1NDY0NTE0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDQxMTExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXFza19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyNTA1PV9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU2OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU3MDpcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3MS1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODQ5PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg1MDpyZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODUxLVxcdFxcdCAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzgtfVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODc5OiNkZWZpbmUgcmVxc2tfYWxsb2MoLi4uKVxcdGFsbG9jX2hvb2tzKHJlcXNrX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODAtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4ODE6c3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODgyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODg0LXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4NTpcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSByZXFza19hbGxvYyhvcHMsIHNrX2xpc3RlbmVyLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODg2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBhdHRhY2hfbGlzdGVuZXIpO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTctXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMyNy1cXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMjg6XFx0XFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTMyOS1cXHRlbHNlXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMzMDpcXHRcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzMxLVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTQtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM5NTpcXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5Ni1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY2MC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjYxOlxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2MocnNrX29wcywgc2ssICF3YW50X2Nvb2tpZSk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY2Mi1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xMzE9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTY3LVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxNjg6XFx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTY5LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NzI4PXN0YXRpYyB2b2lkIHN1YmZsb3dfdjZfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzQtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo3MzU6c3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzM2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0NS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0NjpcXHRyZXR1cm4gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrX2xpc3RlbmVyLCBhdHRhY2hfbGlzdGVuZXIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ3LX1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0ODpFWFBPUlRfU1lNQk9MKG1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Njo1NS4wODkwNjIyNjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyODM4NDc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgcmVxc2tfYWxsb2Nfbm9wcm9mYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgcmVxc2tfYWxsb2Nfbm9wcm9mYCB3aXRoaW4gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGFsbG9jYXRpb24gb2YgcmVxdWVzdCBzb2NrZXRzLCBsaWtlbHkgZm9yIGNvbm5lY3Rpb24gYXR0ZW1wdHMsIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIHByb2ZpbGluZyBkYXRhLiBUaGF0IFwibm9wcm9mXCIgc3VmZml4IGlzIGEgcHJldHR5IHN0cm9uZyBoaW50LiBJdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBjcml0aWNhbCBhbmQgZGV0YWlsZWQgcHJvZmlsaW5nIGlzbid0IG5lY2Vzc2FyeSwgbWF5YmUgZHVyaW5nIGhpZ2gtdm9sdW1lIGNvbm5lY3Rpb24gc3Rvcm1zIG9yIHNpbWlsYXIuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqd2hlbiogdGhpcyBvcHRpbWl6YXRpb24gaXMgdXNlZCBhbmQgd2h5IGEgcHJvZmlsZS1mcmVlIGFsbG9jYXRpb24gaXMgdGhlIHByZWZlcnJlZCBtZXRob2QgaGVyZS4gSSdtIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgc3BlY2lhbCBtZW1vcnkgcG9vbHMgb3IgY2FjaGluZyBzdHJhdGVnaWVzIHRvIHNwZWVkIHRoaW5ncyB1cC4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGNhbGxzIHRvIGBremFsbG9jYCwgYGttYWxsb2NgIG9yIHNpbWlsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSB0cmFkZS1vZmZzIGJlaW5nIG1hZGUgaGVyZSDigJMgbWVtb3J5IHVzYWdlIHZlcnN1cyBwcm9maWxpbmcgaW5mb3JtYXRpb24uIEknbGwgYWxzbyBiZSB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgd2l0aGluIHRoaXMgZnVuY3Rpb24gb3IgaXRzIGNhbGxlcnMvY2FsbGVlcy4gVGhpcyBvbmUgc2hvdWxkIGJlIGludGVyZXN0aW5nLCBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Njo1Ny42MTc0NTI2MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQ1OlxcdFxcdCpyZXNlbmQgPSAhaW5ldF9yc2socmVxKS1cXHUwMDNlYWNrZWQgfHxcXG4gODQ2OlxcdFxcdFxcdCAgcmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCAtIDE7XFxuIDg0NzpcXHR9XFxuIDg0ODpcXHRcXG4gODQ5OlxcdHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcXG4gODUwOlxcdHJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuIDg1MTpcXHRcXHRcXHQgICBib29sIGF0dGFjaF9saXN0ZW5lcilcXG4gODUyOlxcdHtcXG4gODUzOlxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0cmVxID0ga21lbV9jYWNoZV9hbGxvY19ub3Byb2Yob3BzLVxcdTAwM2VzbGFiLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gODU2OlxcdFxcdGlmICghcmVxKVxcbiA4NTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg1ODpcXHRcXHRyZXEtXFx1MDAzZXJza19saXN0ZW5lciA9IE5VTEw7XFxuIDg1OTpcXHRcXHRpZiAoYXR0YWNoX2xpc3RlbmVyKSB7XFxuIDg2MDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2c2tfbGlzdGVuZXItXFx1MDAzZXNrX3JlZmNudCkpKSB7XFxuIDg2MTpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUob3BzLVxcdTAwM2VzbGFiLCByZXEpO1xcbiA4NjI6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg2MzpcXHRcXHRcXHR9XFxuIDg2NDpcXHRcXHRcXHRyZXEtXFx1MDAzZXJza19saXN0ZW5lciA9IHNrX2xpc3RlbmVyO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFx0cmVxLVxcdTAwM2Vyc2tfb3BzID0gb3BzO1xcbiA4Njc6XFx0XFx0cmVxX3RvX3NrKHJlcSktXFx1MDAzZXNrX3Byb3QgPSBza19saXN0ZW5lci1cXHUwMDNlc2tfcHJvdDtcXG4gODY4OlxcdFxcdHNrX25vZGVfaW5pdChcXHUwMDI2cmVxX3RvX3NrKHJlcSktXFx1MDAzZXNrX25vZGUpO1xcbiA4Njk6XFx0XFx0c2tfdHhfcXVldWVfY2xlYXIocmVxX3RvX3NrKHJlcSkpO1xcbiA4NzA6XFx0XFx0cmVxLVxcdTAwM2VzYXZlZF9zeW4gPSBOVUxMO1xcbiA4NzE6XFx0XFx0cmVxLVxcdTAwM2VzeW5jb29raWUgPSAwO1xcbiA4NzI6XFx0XFx0cmVxLVxcdTAwM2VudW1fdGltZW91dCA9IDA7XFxuIDg3MzpcXHRcXHRyZXEtXFx1MDAzZW51bV9yZXRyYW5zID0gMDtcXG4gODc0OlxcdFxcdHJlcS1cXHUwMDNlc2sgPSBOVUxMO1xcbiA4NzU6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZyZXEtXFx1MDAzZXJza19yZWZjbnQsIDApO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRyZXR1cm4gcmVxO1xcbiA4Nzg6XFx0fVxcbiA4Nzk6XFx0I2RlZmluZSByZXFza19hbGxvYyguLi4pXFx0YWxsb2NfaG9va3MocmVxc2tfYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4gODgwOlxcdFxcbiA4ODE6XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxcbiA4ODI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbiA4ODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXFxuIDg4NDpcXHR7XFxuIDg4NTpcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSByZXFza19hbGxvYyhvcHMsIHNrX2xpc3RlbmVyLFxcbiA4ODY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdGlmIChyZXEpIHtcXG4gODg5OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjU3LjYxNzY2NjA1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ2OTYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBhbmQgUmVsYXRlZCBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHJlcXNrX2FsbG9jX25vcHJvZmAgZnVuY3Rpb24uIEkgc2VlIHJpZ2h0IGF3YXkgdGhhdCBgcmVxLVx1MDAzZXN5bmNvb2tpZSA9IDA7YCBhbmQgYHJlcS1cdTAwM2VudW1fdGltZW91dCA9IDA7YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UsIGVuc3VyaW5nIGEga25vd24gc3RhcnRpbmcgc3RhdGUuXG5cbk5vdywgSSdtIGN1cmlvdXMgYWJvdXQgaG93IGByZXFza19udW1fdGltZW91dGAgd29ya3MsIHNvIGxldCdzIHBlZWsgYXQgdGhhdDpcblxuYGBgY1xuc3RhdGljIGlubGluZSB1OCByZXFza19udW1fdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG57XG5cdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuXG4jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG5cdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbiNlbHNlXG5cdHJldHVybiBudW1fdGltZW91dCBcdTAwMjYgMHg3ZjtcbiNlbmRpZlxufVxuYGBgXG5cbldhaXQgYSBzZWNvbmTigKYgIEl0IGxvb2tzIGxpa2UgYHJlcS1cdTAwM2VudW1fdGltZW91dGAgaXMgYSBiaXRmaWVsZCB3aXRoaW4gYG51bV90aW1lb3V0X3N5bmNvb2tpZWAhICBMZXQgbWUgY2hlY2sgdGhlIHN0cnVjdCBkZWZpbml0aW9uIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uczpcblxuYGBgY1xuXHR1bmlvbiB7XG5cdFx0c3RydWN0IHtcblx0XHRcdHU4XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG5cdFx0XHRcdFx0XHQgICAgICAqIDEpIHRjcG9wdHMgbmVlZHMgdG8gYmUgZW5jb2RlZCBpblxuXHRcdFx0XHRcdFx0ICAgICAgKiAgICBUUyBvZiBTWU4rQUNLXG5cdFx0XHRcdFx0XHQgICAgICAqIDIpIEFDSyBpcyB2YWxpZGF0ZWQgYnkgQlBGIGtmdW5jLlxuXHRcdFx0XHRcdFx0ICAgICAgKi9cblx0XHRcdHU4XHRcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xuXHRcdH07XG5cdFx0dThcdFx0bnVtX3RpbWVvdXRfc3luY29va2llO1xuXHR9O1xuYGBgXG5cblllcywgaXQncyBhIHVuaW9uLiAgYHN5bmNvb2tpZWAgaXMgYSBzaW5nbGUgYml0LCBhbmQgYG51bV90aW1lb3V0YCB1c2VzIHRoZSBvdGhlciA3IGJpdHMgb2YgdGhlIGJ5dGUuICBUaGVyZWZvcmUsIHdoZW4gYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgYXJlIGJvdGggYXNzaWduZWQgdG8gMCwgYWxsIDggYml0cyBvZiBgbnVtX3RpbWVvdXRfc3luY29va2llYCBhcmUgYmVpbmcgc2V0LCB3aGljaCBtZWFucyB0aGUgd2hvbGUgYnl0ZSBpcyBpbml0aWFsaXplZCwgZXZlbiB3aGVuIHVzaW5nIGBrbWVtX2NhY2hlX2FsbG9jYC4gRXhjZWxsZW50LCB0aGF0IHNlZW1zIGNsZWFyLlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBJJ2xsIHF1aWNrbHkgZG8gYSBncmVwIGFjcm9zcyB0aGUgdHJlZSBmb3IgYHN5bmNvb2tpZWAgb3IgYG51bV90aW1lb3V0YCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIG9yIHdoZXJlIGBudW1fdGltZW91dF9zeW5jb29raWVgLCBgbnVtX3RpbWVvdXRgIG9yIGBzeW5jb29raWVgIGFyZSBtb2RpZmllZC4gVGhpcyBoZWxwcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFyZSBwb3RlbnRpYWxseSB0b3VjaGluZyB0aGlzIG1lbW9yeSBzcGFjZSBpbiBhIHdheSB0aGF0IEknbSBub3QgZXhwZWN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTc6MDIuNDY0NjM0NjU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ1NzE1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnVtX3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTgyOT1zdGF0aWMgdm9pZCBzeW5fYWNrX3JlY2FsYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzNC1cXHRpZiAoIXJza3FfZGVmZXJfYWNjZXB0KSB7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4MzU6XFx0XFx0KmV4cGlyZSA9IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZT0gbWF4X3N5bl9hY2tfcmV0cmllcztcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzNi1cXHRcXHQqcmVzZW5kID0gMTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODM4LVxcdH1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgzOTpcXHQqZXhwaXJlID0gcmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSBtYXhfc3luX2Fja19yZXRyaWVzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDA6XFx0XFx0ICAoIWluZXRfcnNrKHJlcSktXFx1MDAzZWFja2VkIHx8IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZT0gcnNrcV9kZWZlcl9hY2NlcHQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODQxLVxcdC8qIERvIG5vdCByZXNlbmQgd2hpbGUgd2FpdGluZyBmb3IgZGF0YSBhZnRlciBBQ0ssXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0NS1cXHQqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktXFx1MDAzZWFja2VkIHx8XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDY6XFx0XFx0ICByZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0IC0gMTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0Ny19XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTg1MD1yZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzEtXFx0cmVxLVxcdTAwM2VzeW5jb29raWUgPSAwO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODcyOlxcdHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgPSAwO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODczLVxcdHJlcS1cXHUwMDNlbnVtX3JldHJhbnMgPSAwO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05Njc9c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2OS17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5NzA6XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk3MS1cXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZxdWV1ZS1cXHUwMDNleW91bmcpO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMDMzPXN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTItXFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VhY2NlY25fZmFpbF9tb2RlIHw9IFRDUF9BQ0NFQ05fQUNFX0ZBSUxfU0VORDtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExMTM6XFx0XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQrKyA9PSAwKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTExNC1cXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZxdWV1ZS1cXHUwMDNleW91bmcpO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTM1LVxcdC8qIEV2ZW4gaWYgd2UgY2FuIGNsb25lIHRoZSByZXEsIHdlIG1heSBuZWVkIG5vdCByZXRyYW5zbWl0IGFueSBtb3JlXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTM2OlxcdCAqIFNZTitBQ0tzIChucmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlIG1heF9zeW5fYWNrX3JldHJpZXMsIGV0YyksIG9yIGFub3RoZXJcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMzctXFx0ICogQ1BVIG1heSB3aW4gdGhlIFxcXCJvd25fcmVxXFxcIiByYWNlIHNvIHRoYXQgaW5ldF9laGFzaF9pbnNlcnQoKSBmYWlscy5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9Mjc0ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzYwLVxcdFxcdGppZmZpZXNfZGVsdGFfdG9fY2xvY2tfdChkZWx0YSksXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyNzYxOlxcdFxcdHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzYyLVxcdFxcdGZyb21fa3VpZF9tdW5nZWQoc2VxX3VzZXJfbnMoZiksXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyNS1cXHR9XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjYyNjpcXHRpZiAocmVxLVxcdTAwM2VudW1fdGltZW91dCkge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo2Mjc6XFx0XFx0bmV3dHAtXFx1MDAzZXRvdGFsX3J0byA9IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQ7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyOC1cXHRcXHRuZXd0cC1cXHUwMDNldW5kb19tYXJrZXIgPSB0cmVxLVxcdTAwM2VzbnRfaXNuO1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIwLVxcdC8qIFdoaWxlIFRDUF9ERUZFUl9BQ0NFUFQgaXMgYWN0aXZlLCBkcm9wIGJhcmUgQUNLLiAqL1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5MjE6XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzYyBSRUFEX09OQ0UoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIyLVxcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgPT0gdGNwX3JzayhyZXEpLVxcdTAwM2VyY3ZfaXNuICsgMSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NDU5PXN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NzQtXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDc1OlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IG1heF9yZXRyaWVzKSB7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDc2LVxcdFxcdHRjcF93cml0ZV9lcnIoc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDg5LVxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlYWNjZWNuX2ZhaWxfbW9kZSB8PSBUQ1BfQUNDRUNOX0FDRV9GQUlMX1NFTkQ7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDkwOlxcdHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQrKztcXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00OTEtXFx0dGNwX3VwZGF0ZV9ydG9fc3RhdHMoc2spO1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDk0PXN0YXRpYyB2b2lkIGdldF9vcGVucmVxNihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjExNy1cXHRcXHQgICBqaWZmaWVzX3RvX2Nsb2NrX3QodHRkKSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIxMTg6XFx0XFx0ICAgcmVxLVxcdTAwM2VudW1fdGltZW91dCxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIxMTktXFx0XFx0ICAgZnJvbV9rdWlkX211bmdlZChzZXFfdXNlcl9ucyhzZXEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NzowMi42NDkyMTE2NDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3ODAyOTcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIG91dCBsb3VkOlxuXG4qKlByb2JpbmcgQ29va2llIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSBgc3luY29va2llYCBhbmQgYG51bV90aW1lb3V0YCBwYXJhbWV0ZXJzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGNvb2tpZSBjcmVhdGlvbiBwcm9jZXNzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGhvcm91Z2hseSBleGFtaW5pbmcgdGhlIGBjb29raWVfYnBmX2NoZWNrYCBmdW5jdGlvbiwgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJ2xsIGV4dGVuZCBteSBzZWFyY2ggdG8gYW55IG90aGVyIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBjcmFmdGluZyB0aGVzZSBjb29raWVzLiBJdCdzIGNydWNpYWwgdGhhdCB0aGVzZSBjcml0aWNhbCB2YXJpYWJsZXMgaGF2ZSBzZW5zaWJsZSwgZGVmYXVsdCB2YWx1ZXMgKG9yIGFyZSBkeW5hbWljYWxseSBzZXQgYXMgbmVlZGVkKSBhcyBzb29uIGFzIHRoZSBjb29raWUgaXMgZ2VuZXJhdGVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgYmVpbmcgZXhwbGljaXRseSBhZGRyZXNzZWQgYW5kIGNvbmZpZ3VyZWQsIHJhdGhlciB0aGFuIGJlaW5nIGxlZnQgdG8gc29tZSB1bmRlZmluZWQgc3RhdGUgb3IgaW1wbGllZCBmcm9tIGVsc2V3aGVyZSwgYmVjYXVzZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBhbmQgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZpdGFsIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgY29uc2lzdGVudGx5IGFuZCBwcmVkaWN0YWJseSBhY3Jvc3MgYWxsIHJlbGV2YW50IGNvb2tpZSBjcmVhdGlvbiByb3V0aW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NzowNC42MjcyNDUzMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk1NDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb29raWVfdGNwX3JlcXNrX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTctXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTQtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM5NTpcXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5Ni1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2Ny1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTY4OlxcdHJldHVybiBjb29raWVfdGNwX3JlcXNrX2FsbG9jKFxcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2OS1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU3OjA0Ljc1ODIwNjkwN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI1MDA5ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIENvb2tpZSBBbGxvY2F0b3IqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY29va2llX3RjcF9yZXFza19hbGxvY2Agd2l0aGluIGBuZXQvaXB2NC9zeW5jb29raWVzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIHdvcmtzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGZvciB0aGUgYHJlcXNrYCBzdHJ1Y3R1cmVzIHdoZW4gVENQIHN5bmNvb2tpZXMgYXJlIGVuYWJsZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkdXJpbmcgdGltZXMgb2YgU1lOIGZsb29kIGF0dGFja3MuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHV0aWxpemVkIGFuZCBob3cgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGFueSByb2J1c3QgVENQIGltcGxlbWVudGF0aW9uIGFuZCBhIHRob3JvdWdoIGdyYXNwIG9mIGl0IGlzIGVzc2VudGlhbC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU3OjA2Ljg4MzIxODU0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE4OlxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICp0Y3Bfb3B0LFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBtc3MsIHUzMiB0c29mZilcXG4gMzIyOlxcdHtcXG4gMzIzOlxcdFxcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTtcXG4gMzI0OlxcdFxcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxO1xcbiAzMjU6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxcbiAzMjg6XFx0XFx0XFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XFxuIDMyOTpcXHRcXHRlbHNlXFxuIDMzMDpcXHRcXHRcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKCFyZXEpXFxuIDMzMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0aWYgKGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzaywgc2tiLCByZXEpKSB7XFxuIDMzNjpcXHRcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuIDMzNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzM4OlxcdFxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0aXJlcSA9IGluZXRfcnNrKHJlcSk7XFxuIDM0MTpcXHRcXHR0cmVxID0gdGNwX3JzayhyZXEpO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRyZXEtXFx1MDAzZW1zcyA9IG1zcztcXG4gMzQ0OlxcdFxcdHJlcS1cXHUwMDNldHNfcmVjZW50ID0gdGNwX29wdC1cXHUwMDNlc2F3X3RzdGFtcCA/IHRjcF9vcHQtXFx1MDAzZXJjdl90c3ZhbCA6IDA7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdGlyZXEtXFx1MDAzZXNuZF93c2NhbGUgPSB0Y3Bfb3B0LVxcdTAwM2VzbmRfd3NjYWxlO1xcbiAzNDc6XFx0XFx0aXJlcS1cXHUwMDNldHN0YW1wX29rID0gdGNwX29wdC1cXHUwMDNlc2F3X3RzdGFtcDtcXG4gMzQ4OlxcdFxcdGlyZXEtXFx1MDAzZXNhY2tfb2sgPSB0Y3Bfb3B0LVxcdTAwM2VzYWNrX29rO1xcbiAzNDk6XFx0XFx0aXJlcS1cXHUwMDNld3NjYWxlX29rID0gdGNwX29wdC1cXHUwMDNld3NjYWxlX29rO1xcbiAzNTA6XFx0XFx0aXJlcS1cXHUwMDNlZWNuX29rID0gISEodGNwX29wdC1cXHUwMDNlcmN2X3RzZWNyIFxcdTAwMjYgVFNfT1BUX0VDTik7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdHRyZXEtXFx1MDAzZXJlcV91c2VjX3RzID0gZmFsc2U7XFxuIDM1MzpcXHRcXHR0cmVxLVxcdTAwM2V0c19vZmYgPSB0c29mZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0cmV0dXJuIHJlcTtcXG4gMzU2OlxcdH1cXG4gMzU3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NzowNi44ODMyOTIwMDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ5MDU3NjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5bmNocm9uaXphdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24gb2YgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24uIEknbSBmb2N1c2luZyBvbiBob3cgdGhlIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGJpdGZpZWxkcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSSBzZWUgdGhhdCB0aGV5J3JlIHBhY2tlZCBpbnRvIGEgdW5pb24gd2l0aCBgbnVtX3RpbWVvdXRfc3luY29va2llYC4gVGhlIGtleSBpcyB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYXRvbWljIGFjY2VzcyB0byBgbnVtX3RpbWVvdXRfc3luY29va2llYC4gVGhpcyBzaWRlc3RlcHMgcG90ZW50aWFsIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIG5vbi1hdG9taWMgcmVhZHMgb2YgaW5kaXZpZHVhbCBiaXRmaWVsZHMsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBpbiBgcmVxc2tfYWxsb2Nfbm9wcm9mKClgLCBgcmVxLVx1MDAzZXN5bmNvb2tpZWAgYW5kIGByZXEtXHUwMDNlbnVtX3RpbWVvdXRgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhpcyBtZWFucyB0aGUgZW50aXJlIGJ5dGUgKGBudW1fdGltZW91dF9zeW5jb29raWVgKSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCByaWdodCBmcm9tIHRoZSBzdGFydC4gVGhpcyBpbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLlxuXG5Ob3csIGxldCdzIGNvbm5lY3QgdGhpcyB0byB0aGUgcG90ZW50aWFsIEtNU0FOIGFuZCBLQVNBTiBpc3N1ZXMuIFRoZSBjcml0ZXJpYSBJIG5lZWQgdG8gY29uc2lkZXIgYXJlOlxuMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UgaW4gdGhpcyBwYXRjaC4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYzoqKiBUaGUgY29kZSAqZG9lcyogcmVseSBvbiBgcmVxLVx1MDAzZXN5bmNvb2tpZWAgYW5kIGByZXEtXHUwMDNlbnVtX3RpbWVvdXRgLCBidXQgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSByaXNrLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbjoqKiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIGludHJvZHVjZWQuIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbjQuICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIGFjY2VzczoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBjaGVja3Mgd2l0aGluIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCB0byBwcmV2ZW50IHNoaWZ0IG92ZXJmbG93IGFuZCBjYXAgdGltZW91dCB2YWx1ZXMgYmFzZWQgb24gYG51bV90aW1lb3V0YC4gVGhpcyBpcyBwcmVjaXNlbHkgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmlza3MgaW4gYXJpdGhtZXRpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIGJ5dGUgd291bGQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU28sIGRpZ2dpbmcgZGVlcGVyLCBJIHNlZSB0aGUgcGF0Y2ggZG9lcyBzZXZlcmFsIGdvb2QgdGhpbmdzIHRvIG1ha2UgdGhpcyByb2J1c3Q6XG4qICAgVXBkYXRlcyB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGltcG9ydGFudC5cbiogICBVc2VzIHRoZSBhbm9ueW1vdXMgc3RydWN0IGluc2lkZSB0aGUgdW5pb24gZm9yIHNhZmUgYWNjZXNzIHRvIHRoZSBiaXRmaWVsZHMuXG4qICAgSW50cm9kdWNlcyB0aGUgYHJlcXNrX251bV90aW1lb3V0KClgIGZ1bmN0aW9uIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGdldCB0aGUgdmFsdWUuXG4qICAgQm91bmRzIHRoZSByZXRyeSBjb3VudCB3aXRoIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIGhhdmUgb25seSA3IGJpdHMuXG4qICAgVGhlIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBpbmNsdWRlcyBleHBsaWNpdCBib3VuZHMgY2hlY2tzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlcmUncyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGFuZCB0aGUgYm91bmRzIGFyZSBjaGVja2VkIGluIHRoZSBpbXBvcnRhbnQgcGxhY2VzLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBOb3csIHRpbWUgdG8gbG9nIHRoYXQgaW4gdGhlIHN5c3RlbSB3aXRoIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgdGhlIHJlbGV2YW50IHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzUsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU3OjEzLjM3Mzg3MDgxOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJpdGZpZWxkIGRhdGEgcmFjZSBzYWZldHkgYW5kIGludGVnZXIvc2hpZnQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBmb3IgYHN0cnVjdCByZXF1ZXN0X3NvY2tgLiBJdCBhZGRzIGEgdW5pb24gd2l0aCBgbnVtX3RpbWVvdXRfc3luY29va2llYCB0byBhbGxvdyBsb2NrbGVzcyBzaW5nbGUtYnl0ZSBgUkVBRF9PTkNFYCByZWFkcyBvZiB0aGUgNy1iaXQgYG51bV90aW1lb3V0YCBmaWVsZCwgY2FwcyBtYXhpbXVtIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgKG1hdGNoaW5nIHRoZSA3LWJpdCBmaWVsZCB3aWR0aCksIGFuZCBwcmV2ZW50cyB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IgaW4gYHRjcF9yZXFza190aW1lb3V0X3NrYC5cXG5cXG5BbGwgZmllbGRzIG9mIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCAoaW5jbHVkaW5nIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGByZXFza19hbGxvY19ub3Byb2YoKWAuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgbWVtb3J5IGlzIGludHJvZHVjZWQsIG5vIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBhcml0aG1ldGljLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBhdG9taWMgcmVhZCBoZWxwZXJzLCBub25lIG9mIHdoaWNoIHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0ZWQgYnkgS01TQU4uIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJpdGZpZWxkIGRhdGEgcmFjZSBzYWZldHkgYW5kIGludGVnZXIvc2hpZnQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBmb3IgYHN0cnVjdCByZXF1ZXN0X3NvY2tgLiBJdCBhZGRzIGEgdW5pb24gd2l0aCBgbnVtX3RpbWVvdXRfc3luY29va2llYCB0byBhbGxvdyBsb2NrbGVzcyBzaW5nbGUtYnl0ZSBgUkVBRF9PTkNFYCByZWFkcyBvZiB0aGUgNy1iaXQgYG51bV90aW1lb3V0YCBmaWVsZCwgY2FwcyBtYXhpbXVtIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgKG1hdGNoaW5nIHRoZSA3LWJpdCBmaWVsZCB3aWR0aCksIGFuZCBwcmV2ZW50cyB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IgaW4gYHRjcF9yZXFza190aW1lb3V0X3NrYC5cXG5cXG5BbGwgZmllbGRzIG9mIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCAoaW5jbHVkaW5nIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGByZXFza19hbGxvY19ub3Byb2YoKWAuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgbWVtb3J5IGlzIGludHJvZHVjZWQsIG5vIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBhcml0aG1ldGljLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBhdG9taWMgcmVhZCBoZWxwZXJzLCBub25lIG9mIHdoaWNoIHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0ZWQgYnkgS01TQU4uIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 06:08:39 +0000 UTC FinishedAt: 2026-09-04 06:57:14 +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": "adf50c47a47f0f0f0b79dd58ffade9919cddebea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "adf50c47a47f0f0f0b79dd58ffade9919cddebea", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "1e5d5627-46aa-4f45-8e0f-1dc0f3abde20" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "reqsk_timer_handler", "tcp_fastopen_synack_timer", "do_tcp_setsockopt", "tcp_check_req" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFza190aW1lcl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXImIzM0OywKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2NoZWNrX3JlcSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiBhbmQgdGltZW91dCBoYW5kbGluZyB0byBtYXRjaCB0aGUgNy1iaXQgcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBmaWVsZC4gSXQgY2FwcyBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IGluIHJlcXNrX3RpbWVyX2hhbmRsZXIgYW5kIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIsIHJlZmFjdG9ycyB0aGUgYml0ZmllbGQgbGF5b3V0IGluIHN0cnVjdCByZXF1ZXN0X3NvY2ssIGFuZCB1cGRhdGVzIHRjcF9yZXFza190aW1lb3V0X3NrIC8gdGNwX3JlcXNrX3RpbWVvdXQgY2FsY3VsYXRpb25zIHRvIHByZXZlbnQgc2hpZnQgb3ZlcmZsb3dzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIFRDUCBzb2NrZXQgY29ubmVjdGlvbnMgYW5kIHNldHNvY2tvcHQvc3lzY3RsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5MDgxZTdjMzViYTZhNDA4MDA1YmZhNzQ2OTAyOTcyZTVlMjc4Yjg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNjo1NTo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtOTU0LDcgJiM0Mzs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTlxuIFxuIHRjcF9zeW5hY2tfcmV0cmllcyAtIElOVEVHRVJcbiBcdE51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsXG4tXHRiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZVxuJiM0MztcdGJlIHJldHJhbnNtaXR0ZWQuIFRoZSBzeXNjdGwgYWNjZXB0cyAwLTI1NS4gVmFsdWVzIGFib3ZlIDEyNyBhcmVcbiYjNDM7XHRzaWxlbnRseSBjYXBwZWQgYnkgdGhlIFNZTi1BQ0sgdGltZXJzLCBtYXRjaGluZyB0aGUgNy1iaXRcbiYjNDM7XHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXG4gXHRpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byAzMXNlY29uZHMgdGlsbCB0aGUgbGFzdCByZXRyYW5zbWlzc2lvblxuIFx0d2l0aCB0aGUgY3VycmVudCBpbml0aWFsIFJUTyBvZiAxc2Vjb25kLiBXaXRoIHRoaXMgdGhlIGZpbmFsIHRpbWVvdXRcbiBcdGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbmluZGV4IDVhOWM4MjZhNzA5MmQuLmE5NzgxZmFiNzc0YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbkBAIC01OCwxMiAmIzQzOzU4LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xuIFx0c3RydWN0IHJlcXVlc3Rfc29ja1x0XHQqZGxfbmV4dDtcbiBcdHUxNlx0XHRcdFx0bXNzO1xuIFx0dThcdFx0XHRcdG51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi9cbi1cdHU4XHRcdFx0XHRzeW5jb29raWU6MTsgLyogVHJ1ZSBpZlxuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU4XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG4gXHRcdFx0XHRcdFx0ICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW5cbiBcdFx0XHRcdFx0XHQgICAgICAqICAgIFRTIG9mIFNZTiYjNDM7QUNLXG4gXHRcdFx0XHRcdFx0ICAgICAgKiAyKSBBQ0sgaXMgdmFsaWRhdGVkIGJ5IEJQRiBrZnVuYy5cbiBcdFx0XHRcdFx0XHQgICAgICAqL1xuLVx0dThcdFx0XHRcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xuJiM0MztcdFx0XHR1OFx0XHRudW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi9cbiYjNDM7XHRcdH07XG4mIzQzO1x0XHR1OFx0XHRudW1fdGltZW91dF9zeW5jb29raWU7XG4mIzQzO1x0fTtcbiBcdHUzMlx0XHRcdFx0dHNfcmVjZW50O1xuIFx0c3RydWN0IHRpbWVyX2xpc3RcdFx0cnNrX3RpbWVyO1xuIFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHNcdCpyc2tfb3BzO1xuQEAgLTc0LDYgJiM0Mzs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHtcbiBcdHUzMlx0XHRcdFx0dGltZW91dDtcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuJiM0MztcbiYjNDM7I2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxuJiM0MztcdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gbnVtX3RpbWVvdXQgXHUwMDI2IDB4N2Y7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0cmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNDM2NDk1ZmYyMjcxZC4uYTFjMjAzNTJhODY2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTE4Myw2ICYjNDM7MTgzLDggQEAgc3RhdGljX2Fzc2VydCgoMSBcdTAwM2NcdTAwM2MgQVRPX0JJVFMpIFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XG4gI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTFx0MzI3NjdcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUENOVFx0XHQxMjdcbiAjZGVmaW5lIE1BWF9UQ1BfU1lOQ05UXHRcdDEyN1xuJiM0MzsvKiByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGlzIGEgNy1iaXQgZmllbGQuICovXG4mIzQzOyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1x0MTI3XG4gXG4gLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHNcbiAgKiB0byBhdm9pZCBvdmVyZmxvd3MuIFRoaXMgYXNzdW1lcyBhIGNsb2NrIHNtYWxsZXIgdGhhbiAxIE1oei5cbkBAIC04ODEsMTIgJiM0Mzs4ODMsMjMgQEAgc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxuIFx0cmV0dXJuIHVzZWNzX3RvX2ppZmZpZXMoKHRwLVx1MDAzZXNydHRfdXMgXHUwMDNlXHUwMDNlIDMpICYjNDM7IHRwLVx1MDAzZXJ0dHZhcl91cyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4ge1xuLVx0dTY0IHRpbWVvdXQgPSAodTY0KXJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQ7XG4mIzQzO1x0dTY0IHRpbWVvdXQgPSBSRUFEX09OQ0UocmVxLVx1MDAzZXRpbWVvdXQpO1xuJiM0MztcdHUzMiBydG9fbWF4ID0gdGNwX3J0b19tYXgoc2spO1xuJiM0MztcdHU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90aW1lb3V0IFx1MDAzZT0gQklUU19QRVJfVFlQRSh0aW1lb3V0KSB8fFxuJiM0MztcdCAgICB0aW1lb3V0IFx1MDAzZSBVNjRfTUFYIFx1MDAzZVx1MDAzZSBudW1fdGltZW91dClcbiYjNDM7XHRcdHJldHVybiBydG9fbWF4O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0IFx1MDAzY1x1MDAzYyBudW1fdGltZW91dCwgcnRvX21heCk7XG4mIzQzO31cbiBcbi1cdHJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsXG4tXHRcdFx0XHQgICAgdGNwX3J0b19tYXgocmVxLVx1MDAzZXJza19saXN0ZW5lcikpO1xuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRjcF9yZXFza190aW1lb3V0X3NrKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG4gfVxuIFxuIHUzMiB0Y3BfZGVsYWNrX21heChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5pbmRleCA2MjU3NDU5YmNlZTI0Li4yMWY5NmE1MGMxMGZlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuQEAgLTEwNjgsNiAmIzQzOzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0bmV0ID0gc29ja19uZXQoc2tfbGlzdGVuZXIpO1xuIFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XG4mIzQzO1x0bWF4X3N5bl9hY2tfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3N5bl9hY2tfcmV0cmllcyxcbiYjNDM7XHRcdFx0XHQgICAgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7XG4gXHQvKiBOb3JtYWxseSBhbGwgdGhlIG9wZW5yZXFzIGFyZSB5b3VuZyBhbmQgYmVjb21lIG1hdHVyZVxuIFx0ICogKGkuZS4gY29udmVydGVkIHRvIGVzdGFibGlzaGVkIHNvY2tldCkgZm9yIGZpcnN0IHRpbWVvdXQuXG4gXHQgKiBJZiBzeW5hY2sgd2FzIG5vdCBhY2tub3dsZWRnZWQgZm9yIDEgc2Vjb25kLCBpdCBtZWFuc1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IDFjODY3YTMwMjQ0NDYuLmU1NTFlNmFkYzgwMDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0zNTcsNyAmIzQzOzM1Nyw3IEBAIHN0YXRpYyB1OCBzZWNzX3RvX3JldHJhbnMoaW50IHNlY29uZHMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heClcbiBcdFx0aW50IHBlcmlvZCA9IHRpbWVvdXQ7XG4gXG4gXHRcdHJlcyA9IDE7XG4tXHRcdHdoaWxlIChzZWNvbmRzIFx1MDAzZSBwZXJpb2QgXHUwMDI2XHUwMDI2IHJlcyBcdTAwM2MgMjU1KSB7XG4mIzQzO1x0XHR3aGlsZSAoc2Vjb25kcyBcdTAwM2UgcGVyaW9kIFx1MDAyNlx1MDAyNiByZXMgXHUwMDNjIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHtcbiBcdFx0XHRyZXMmIzQzOyYjNDM7O1xuIFx0XHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSAxO1xuIFx0XHRcdGlmICh0aW1lb3V0IFx1MDAzZSBydG9fbWF4KVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbmluZGV4IGU1NmVhZTRiYzM0MWUuLjJkMmRlYzFlOTE1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbkBAIC00NjQsMTEgJiM0Mzs0NjQsMTMgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdHRjcF9zeW5fYWNrX3RpbWVvdXQocmVxKTtcbiBcbi1cdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4uXG4mIzQzO1x0LyogQWRkIG9uZSBtb3JlIHJldHJ5IGZvciBmYXN0b3BlbiB3aGVuIHRoZSB0aW1lb3V0IGNvdW50ZXIgY2FuXG4mIzQzO1x0ICogcmVwcmVzZW50IGl0LlxuIFx0ICogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKVxuIFx0ICovXG4gXHRtYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcykgJiM0MzsgMTtcbiYjNDM7XHRtYXhfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3JldHJpZXMsIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpO1xuIFxuIFx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IG1heF9yZXRyaWVzKSB7XG4gXHRcdHRjcF93cml0ZV9lcnIoc2spO1xuQEAgLTQ5MCw3ICYjNDM7NDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdGlmICghdHAtXHUwMDNlcmV0cmFuc19zdGFtcClcbiBcdFx0dHAtXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcbiBcdHRjcF9yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUyxcbi1cdFx0XHQgIHJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQsIGZhbHNlKTtcbiYjNDM7XHRcdFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB0Y3BfcnR4X3Byb2JlMF90aW1lZF9vdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFza190aW1lcl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXImIzM0OywKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2NoZWNrX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODFlN2MzNWJhNmE0MDgwMDViZmE3NDY5MDI5NzJlNWUyNzhiODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtOTU0LDcgJiM0Mzs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTgogCiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIFNZTkFDS3MgZm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwKLQliZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQomIzQzOwliZSByZXRyYW5zbWl0dGVkLiBUaGUgc3lzY3RsIGFjY2VwdHMgMC0yNTUuIFZhbHVlcyBhYm92ZSAxMjcgYXJlCiYjNDM7CXNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdAomIzQzOwlyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlCiAJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb24KIAl3aXRoIHRoZSBjdXJyZW50IGluaXRpYWwgUlRPIG9mIDFzZWNvbmQuIFdpdGggdGhpcyB0aGUgZmluYWwgdGltZW91dAogCWZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmggYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAppbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaApAQCAtNTgsMTIgJiM0Mzs1OCwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrCQkqZGxfbmV4dDsKIAl1MTYJCQkJbXNzOwogCXU4CQkJCW51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi8KLQl1OAkJCQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU4CQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgogCQkJCQkJICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW4KIAkJCQkJCSAgICAgICogICAgVFMgb2YgU1lOJiM0MztBQ0sKIAkJCQkJCSAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuCiAJCQkJCQkgICAgICAqLwotCXU4CQkJCW51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqLwomIzQzOwkJCXU4CQludW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi8KJiM0MzsJCX07CiYjNDM7CQl1OAkJbnVtX3RpbWVvdXRfc3luY29va2llOwomIzQzOwl9OwogCXUzMgkJCQl0c19yZWNlbnQ7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXJza190aW1lcjsKIAljb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcwkqcnNrX29wczsKQEAgLTc0LDYgJiM0Mzs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAl1MzIJCQkJdGltZW91dDsKIH07CiAKJiM0MztzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS0mZ3Q7bnVtX3RpbWVvdXRfc3luY29va2llKTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmZ3Q7Jmd0OyAxOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmYW1wOyAweDdmOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0xODMsNiAmIzQzOzE4Myw4IEBAIHN0YXRpY19hc3NlcnQoKDEgJmx0OyZsdDsgQVRPX0JJVFMpICZndDsgVENQX0RFTEFDS19NQVgpOwogI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTAkzMjc2NwogI2RlZmluZSBNQVhfVENQX0tFRVBDTlQJCTEyNwogI2RlZmluZSBNQVhfVENQX1NZTkNOVAkJMTI3CiYjNDM7LyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqLwomIzQzOyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUwkxMjcKIAogLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHMKICAqIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhpcyBhc3N1bWVzIGEgY2xvY2sgc21hbGxlciB0aGFuIDEgTWh6LgpAQCAtODgxLDEyICYjNDM7ODgzLDIzIEBAIHN0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKIAlyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtJmd0O3NydHRfdXMgJmd0OyZndDsgMykgJiM0MzsgdHAtJmd0O3J0dHZhcl91cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXU2NCB0aW1lb3V0ID0gKHU2NClyZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dDsKJiM0MzsJdTY0IHRpbWVvdXQgPSBSRUFEX09OQ0UocmVxLSZndDt0aW1lb3V0KTsKJiM0MzsJdTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTsKJiM0MzsKJiM0MzsJaWYgKG51bV90aW1lb3V0ICZndDs9IEJJVFNfUEVSX1RZUEUodGltZW91dCkgfHwKJiM0MzsJICAgIHRpbWVvdXQgJmd0OyBVNjRfTUFYICZndDsmZ3Q7IG51bV90aW1lb3V0KQomIzQzOwkJcmV0dXJuIHJ0b19tYXg7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQgJmx0OyZsdDsgbnVtX3RpbWVvdXQsIHJ0b19tYXgpOwomIzQzO30KIAotCXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsCi0JCQkJICAgIHRjcF9ydG9fbWF4KHJlcS0mZ3Q7cnNrX2xpc3RlbmVyKSk7CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtJmd0O3Jza19saXN0ZW5lciwgcmVxKTsKIH0KIAogdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li4yMWY5NmE1MGMxMGZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTEwNjgsNiAmIzQzOzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCW5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTsKIAltYXhfc3luX2Fja19yZXRyaWVzID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfc3luX3JldHJpZXMpID8gOgogCQlSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpOwomIzQzOwltYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLAomIzQzOwkJCQkgICAgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7CiAJLyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmUKIAkgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC4KIAkgKiBJZiBzeW5hY2sgd2FzIG5vdCBhY2tub3dsZWRnZWQgZm9yIDEgc2Vjb25kLCBpdCBtZWFucwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMzU3LDcgJiM0MzszNTcsNyBAQCBzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpCiAJCWludCBwZXJpb2QgPSB0aW1lb3V0OwogCiAJCXJlcyA9IDE7Ci0JCXdoaWxlIChzZWNvbmRzICZndDsgcGVyaW9kICZhbXA7JmFtcDsgcmVzICZsdDsgMjU1KSB7CiYjNDM7CQl3aGlsZSAoc2Vjb25kcyAmZ3Q7IHBlcmlvZCAmYW1wOyZhbXA7IHJlcyAmbHQ7IE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHsKIAkJCXJlcyYjNDM7JiM0Mzs7CiAJCQl0aW1lb3V0ICZsdDsmbHQ7PSAxOwogCQkJaWYgKHRpbWVvdXQgJmd0OyBydG9fbWF4KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBlNTZlYWU0YmMzNDFlLi4yZDJkZWMxZTkxNTY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtNDY0LDExICYjNDM7NDY0LDEzIEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAKIAl0Y3Bfc3luX2Fja190aW1lb3V0KHJlcSk7CiAKLQkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLgomIzQzOwkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW4KJiM0MzsJICogcmVwcmVzZW50IGl0LgogCSAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KCkKIAkgKi8KIAltYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3N5bl9yZXRyaWVzKSA/IDoKIAkJUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzKSAmIzQzOyAxOwomIzQzOwltYXhfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3JldHJpZXMsIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpOwogCiAJaWYgKHJlcS0mZ3Q7bnVtX3RpbWVvdXQgJmd0Oz0gbWF4X3JldHJpZXMpIHsKIAkJdGNwX3dyaXRlX2Vycihzayk7CkBAIC00OTAsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJaWYgKCF0cC0mZ3Q7cmV0cmFuc19zdGFtcCkKIAkJdHAtJmd0O3JldHJhbnNfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcF90cyh0cCk7CiAJdGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLAotCQkJICByZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dCwgZmFsc2UpOwomIzQzOwkJCSAgICAgdGNwX3JlcXNrX3RpbWVvdXRfc2soc2ssIHJlcSksIGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgdGNwX3J0eF9wcm9iZTBfdGltZWRfb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogU1lOIENvb2tpZSAmYW1wOyBSZXRyYW5zbWlzc2lvbiBSZWZpbmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21lIHJlZmluZW1lbnRzIGFyb3VuZCBUQ1AgU1lOIGNvb2tpZXMgYW5kIHJldHJhbnNtaXNzaW9uIHN0cmF0ZWdpZXMuIFRoZSBjaGFuZ2VzIHNlZW0gdGFyZ2V0ZWQgYXQgdGhlIHJlcXVlc3Qgc29ja2V0IChgcmVxdWVzdF9zb2NrYCkgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBob3cgU1lOLUFDSyByZXRyaWVzIGFyZSBtYW5hZ2VkLgoKRmlyc3QsIEkgc2VlIGRvY3VtZW50YXRpb24gdXBkYXRlcyB0byBgaXAtc3lzY3RsLnJzdGAg4oCTIHRoYXQmIzM5O3MgZ29vZCwgZG9jdW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIHVwZGF0ZWQgd2l0aCBjb2RlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIHdvcmsgcmVzaWRlcyB3aXRoaW4gYGluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oYC4gVGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCBjaGFuZ2UgaXMgaW50ZXJlc3Rpbmc7IHRoZSB1bmlvbiBhcm91bmQgYHN5bmNvb2tpZToxYCwgYG51bV90aW1lb3V0OjdgLCBhbmQgYHU4IG51bV90aW1lb3V0X3N5bmNvb2tpZWAgc3VnZ2VzdHMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gc3RvcmUgZWl0aGVyIHRoZSBTWU4gY29va2llIGZsYWcgb3IgdGhlIHRpbWVvdXQvcmV0cnkgaW5mb3JtYXRpb24uIFRoZSBhZGRpdGlvbiBvZiB0aGUgYHJlcXNrX251bV90aW1lb3V0KClgIGhlbHBlciBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgdGhpcyBuZXcgYXBwcm9hY2guCgpNb3ZpbmcgaW50byBgaW5jbHVkZS9uZXQvdGNwLmhgLCB0aGUgZGVmaW5pdGlvbiBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGlzIGxpa2VseSBwcm92aWRlcyBhIGhhcmQgdXBwZXIgbGltaXQgZm9yIFNZTi1BQ0sgcmV0cmllcywgd2hpY2ggSSYjMzk7bSBjdXJpb3VzIGFib3V0LiBBbHNvLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgdGNwX3JlcXNrX3RpbWVvdXQoKWAgYW5kIHRoZSBhZGRpdGlvbiBvZiBgdGNwX3JlcXNrX3RpbWVvdXRfc2soKWAgdXNpbmcgYHJlcXNrX251bV90aW1lb3V0KClgIGNvbmZpcm0gdGhlIGludGVncmF0aW9uIG9mIHRoZSBgcmVxdWVzdF9zb2NrYCBjaGFuZ2VzIHdpdGhpbiB0aGUgVENQIGxheWVyLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHVuYm91bmRlZCByZXRyaWVzIChvciBhdCBsZWFzdCwgdmVyeSBoaWdoIGxpbWl0cykgdG8gYSBtb3JlIGNvbnN0cmFpbmVkIGFuZCBsaWtlbHkgbW9yZSBwcmVkaWN0YWJsZSBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgb3ZlcmZsb3cgY29uZGl0aW9uLgoKTm93IHdlJiMzOTtyZSBzZWVpbmcgdGhpcyBpbXBsZW1lbnRlZCBpbiB0aGUgYWN0dWFsIGNvZGUuIFRoZSBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AgY2hhbmdlIHRvIGByZXFza190aW1lcl9oYW5kbGVyYCBieSBjYXBwaW5nIGBtYXhfc3luX2Fja19yZXRyaWVzYCB3aXRoIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYCBzb2xpZGlmaWVzIHRoZSB1cHBlciBib3VuZCB3ZSBleHBlY3RlZC4gVGhlIHNhbWUgaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hlcmUgYHNlY3NfdG9fcmV0cmFuc2AgdXNlcyB0aGUgbWFjcm8gYE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVNgIGluc3RlYWQgb2YgYSBoYXJkY29kZWQgdmFsdWUgKDI1NT8pIHJlaW5mb3JjZXMgdGhpcy4gVGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24uCgpGaW5hbGx5LCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgIHNob3dzIHRoZSBiaWdnZXN0IGNoYW5nZTogYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIGlzIGFsc28gaW1wbGVtZW50aW5nIHRoZSB1cHBlciBib3VuZHMgYW5kIHVzaW5nIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBpbnN0ZWFkIG9mIHRoZSBiaXQtc2hpZnQgb3BlcmF0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgYSBtb3JlIHJvYnVzdCB0aW1lb3V0IGNhbGN1bGF0aW9uLgoKU28sIG92ZXJhbGwsIHRoaXMgcGF0Y2ggc2VlbXMgbGlrZSBhIGdvb2QgbW92ZSB0b3dhcmQgc2FmZXIsIG1vcmUgY29udHJvbGxlZCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLiBUaGUgYml0ZmllbGQvdW5pb24gYXBwcm9hY2ggZm9yIHN0b3JpbmcgdGltZW91dC9zeW5jb29raWUgaW5mb3JtYXRpb24gaXMgYSBuZWF0IG9wdGltaXphdGlvbiwgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVNgIHByb3ZpZGVzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQuIEkmIzM5O2xsIHVzZSBncmVwL3JlYWQtZmlsZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGltcGxpY2F0aW9ucyBvZiBzZXR0aW5nIHRoZSBsaW1pdCBhbmQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgYmFja3dhcmRzIGNvbXBhdGlibGUgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBwZXJmb3JtYW5jZSBpbXBhY3RzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBzcGVjaWZpYyB2YWx1ZSBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYWxzbyB3b3J0aCBpbnZlc3RpZ2F0aW5nIOKAkyB3aGF04oCZcyB0aGUgcmF0aW9uYWxlIGZvciB0aGF0IHBhcnRpY3VsYXIgdmFsdWU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVxc2tfdGltZXJfaGFuZGxlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMjc9dm9pZCBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wX2FuZF9wdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDMyLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMDMzOnN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwMzQte1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1OS1cdFx0cmVmY291bnRfc2V0KFx1MDAyNm5yZXEtXHUwMDNlcnNrX3JlZmNudCwgMiAmIzQzOyAxKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA2MDpcdFx0dGltZXJfc2V0dXAoXHUwMDI2bnJlcS1cdTAwM2Vyc2tfdGltZXIsIHJlcXNrX3RpbWVyX2hhbmRsZXIsIFRJTUVSX1BJTk5FRCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwNjEtXHRcdHJlcXNrX3F1ZXVlX21pZ3JhdGVkKFx1MDAyNmluZXRfY3NrKG5zayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMTUyPXN0YXRpYyBib29sIHJlcXNrX3F1ZXVlX2hhc2hfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExNjAtXHRyZXEtXHUwMDNldGltZW91dCA9IHRjcF90aW1lb3V0X2luaXQoKHN0cnVjdCBzb2NrICopcmVxKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTE2MTpcdHRpbWVyX3NldHVwKFx1MDAyNnJlcS1cdTAwM2Vyc2tfdGltZXIsIHJlcXNrX3RpbWVyX2hhbmRsZXIsIFRJTUVSX1BJTk5FRCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExNjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB0aGlua2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIGBzZWNzX3RvX3JldHJhbnNgIGFuZCBpdHMgQ2FsbGVycyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBzZWNzX3RvX3JldHJhbnNgLiBUaGUgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21ldGhpbmcgcmVsYXRlZCB0byByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cywgbGlrZWx5IHdpdGhpbiB0aGUgVENQIHByb3RvY29sLCB3aGljaCBtZWFucyBteSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIHdpdGhpbiB0aGUgTGludXgga2VybmVsJiMzOTtzIFRDUCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgbmV0d29yayBwcm90b2NvbCBpbnRlcm5hbHMsIGFuZCB3aGVyZSB0aGVzZSBjYWxjdWxhdGlvbnMgbGl2ZS4KCk15IGluc3RpbmN0IHRlbGxzIG1lIHRvIHN0YXJ0IGluIGBuZXQvaXB2NC90Y3AuY2AsIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgdXN1YWwgaG9tZSBmb3IgSVB2NC1zcGVjaWZpYyBUQ1AgY29kZS4gQnV0IEkmIzM5O2xsIGtlZXAgYW4gb3BlbiBtaW5kOyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGRlZmluZWQgaW4gYSBtb3JlIGdlbmVyaWMgbG9jYXRpb24sIGVzcGVjaWFsbHkgaWYgaXQmIzM5O3MgdXNlZCBhY3Jvc3MgZGlmZmVyZW50IElQIHZlcnNpb25zLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2l0aGluIHRoYXQgZmlsZSAoYW5kIHBvdGVudGlhbGx5IG90aGVycyB3aXRoaW4gdGhlIGBuZXRgIGRpcmVjdG9yeSwgbWF5YmUgZXZlbiBmdXJ0aGVyIHVwIHRoZSB0cmVlKSB0byBzZWUgd2hlcmUgYHNlY3NfdG9fcmV0cmFuc2AgaXMgZGVmaW5lZCBhbmQgdXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYm90aCB0aGUgZGVjbGFyYXRpb24gYW5kIGFueSBkaXJlY3QgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uLgoKSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byB0YWtlIGVpdGhlciBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHJldHJhbnNtaXNzaW9uIGRlbGF5cywgb3IgYSB2YWx1ZSBhbmQgY29tcHV0ZSBhIHRpbWUuIExpa2VseSBpdCByZXR1cm5zIGEgZHVyYXRpb24gaW4gc2Vjb25kcywgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGlucHV0cyB0byBjb3JyZWN0bHkgZ3Jhc3AgdGhlIG91dHB1dC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgd2hpY2ggdXNlIGBzZWNzX3RvX3JldHJhbnNgLCB0byBkZWR1Y2Ugd2hhdCB0aGlzIGZ1bmN0aW9uICpkb2VzKiB3aXRoIHRob3NlIGlucHV0cy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcmV0cmFuc21pc3Npb24gdGltZW91dCBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Vjc190b19yZXRyYW5zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTMzOT12b2lkIHRjcF9sZWF2ZV9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTM1MS0vKiBDb252ZXJ0IHNlY29uZHMgdG8gcmV0cmFuc21pdHMgYmFzZWQgb24gaW5pdGlhbCBhbmQgbWF4IHRpbWVvdXQgKi9cbm5ldC9pcHY0L3RjcC5jOjM1MjpzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpXG5uZXQvaXB2NC90Y3AuYy0zNTMte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zOTM1LVx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQsXG5uZXQvaXB2NC90Y3AuYzozOTM2Olx0XHRcdCAgIHNlY3NfdG9fcmV0cmFucyh2YWwsIFRDUF9USU1FT1VUX0lOSVQgLyBIWixcbm5ldC9pcHY0L3RjcC5jLTM5MzctXHRcdFx0XHRcdCAgIFRDUF9SVE9fTUFYIC8gSFopKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVENQIEZhc3QgT3BlbiBTWU4tQUNLIFRpbWVyKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGhvbmUgaW4gb24gYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHNvbWV0aGluZyBpbnRlcmVzdGluZyBpcyBoYXBwZW5pbmcgaGVyZSB3aXRoIHRoZSBGYXN0IE9wZW4gaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlIFNZTi1BQ0sgdGltZXIgaW50ZXJhY3RzIHdpdGggdGhhdCBtZWNoYW5pc20uIEkgd2FudCB0byBzZWUgaG93IGl0IG1hbmFnZXMgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gRmFzdCBPcGVuLCBlc3BlY2lhbGx5IHBvdGVudGlhbCByZXRyYW5zbWlzc2lvbnMgb3IgdGltZW91dHMgcmVsYXRlZCB0byB0aGUgaW5pdGlhbCBkYXRhIHRyYW5zZmVyLiBXaGF0IGFyZSB0aGUga2V5IHZhcmlhYmxlcyBiZWluZyBjaGVja2VkLCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgdGltZXIgZmlyZXMsIGFuZCB3aGF0IGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gaXQgZXhwaXJlcz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIHdpbGwgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGFueSBvZGRpdGllcyBJJiMzOTt2ZSBvYnNlcnZlZCBpbiByZWxhdGVkIG5ldHdvcmsgdHJhY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jPTcxMDM9c3RhdGljIHZvaWQgdGNwX3Jjdl9zeW5yZWN2X3N0YXRlX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MTE1LVx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19yZXRyYW5zbWl0cywgMCk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MTE2Olx0LyogSW4gdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcigpIG9uIHRoZSBmaXJzdCBTWU5BQ0sgUlRPIHdlIHNldFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzExNy1cdCAqIHJldHJhbnNfc3RhbXAgYnV0IGRvbiYjMzk7dCBlbnRlciBDQV9Mb3NzLCBzbyBpbiBjYXNlIHRoYXQgaGFwcGVuZWQgd2Vcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NDI9c3RhdGljIHZvaWQgdGNwX3VwZGF0ZV9ydG9fc3RhdHMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ1OC0gKi9cbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ1OTpzdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDYwLXtcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz01Mzk9dm9pZCB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNTUxLVx0XHRcdCAgICAgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0ZJTl9XQUlUMSk7XG5uZXQvaXB2NC90Y3BfdGltZXIuYzo1NTI6XHRcdHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc2ssIHJlcSk7XG5uZXQvaXB2NC90Y3BfdGltZXIuYy01NTMtXHRcdC8qIEJlZm9yZSB3ZSByZWNlaXZlIEFDSyB0byBvdXIgU1lOLUFDSyBkb24mIzM5O3QgcmV0cmFuc21pdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgVENQIFN0YWNrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgcGF0Y2ggY2hhbmdlcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0LiBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGNvZGU/IEJhc2VkIG9uIHRoZSBmaWxlIHBhdGhzLCB0aGlzIGlzIGRlZmluaXRlbHkgaW4gdGhlIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IHRoZSBUQ1Agc3RhY2suIEFscmlnaHQsIHRoYXQmIzM5O3MgY3J1Y2lhbC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3M6CgoqICAgYGluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oYDogTG9va3MgbGlrZSBhIG1vZGlmaWNhdGlvbiB0byBob3cgdGhlIGByZXF1ZXN0X3NvY2tgIGJpdGZpZWxkIGlzIHJlcHJlc2VudGVkLCBhbmQgdGhlIGByZXFza19udW1fdGltZW91dCgpYCBmdW5jdGlvbi4gSW1wb3J0YW50IGZvciBjb25uZWN0aW9uIHNldHVwLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiBob3cgaXQgYWZmZWN0cyB0aGUgdGltZW91dCBjYWxjdWxhdGlvbnMuCiogICBgaW5jbHVkZS9uZXQvdGNwLmhgOiBNb2RpZmljYXRpb25zIHRvIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBhbmQgYHRjcF9yZXFza190aW1lb3V0KClgLiBUaGVzZSBhcmUgY2xlYXJseSByZWxhdGVkIHRvIHRpbWVvdXQgaGFuZGxpbmcgZHVyaW5nIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcGhhc2UuCiogICBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6IFRoZSBgcmVxc2tfdGltZXJfaGFuZGxlcigpYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC4gVGhpcyBzdWdnZXN0cyBhbiBhbHRlcmF0aW9uIGluIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoZXNlIGNvbm5lY3Rpb24gcmVxdWVzdCB0aW1lb3V0cywgd2hpY2ggaXMgYW5vdGhlciBhcmVhIHRvIHdhdGNoIGNsb3NlbHkuCiogICBgbmV0L2lwdjQvdGNwLmNgOiBgc2Vjc190b19yZXRyYW5zKClgIHdpdGhpbiBgZG9fdGNwX3NldHNvY2tvcHRgIChzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBUQ1BfREVGRVJfQUNDRVBUKS4gVGhpcyBjb3VsZCBpbXBhY3QgaG93IHJldHJhbnNtaXNzaW9ucyBhcmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgZGVmZXJyYWwgb2YgdGhlIGFjY2VwdCBjYWxsLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCiogICBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgOiBUaGVyZSYjMzk7cyBhIGNoYW5nZSByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKClgLiBTaW5jZSB0aGlzIHJlbGF0ZXMgdG8gRmFzdCBPcGVuLCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIGNvbm5lY3Rpb25zLgoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3QgY2FsbGVycyB0byB0aGUgYHRjcF9yZXFza190aW1lb3V0YCBmdW5jdGlvbiwganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgcG90ZW50aWFsIGludGVyYWN0aW9ucyBhY3Jvc3MgdGhlIGtlcm5lbC4gQSBjb21wcmVoZW5zaXZlIGNhbGwgZ3JhcGggd291bGQgcmVhbGx5IGhlbHAgbWUgdmlzdWFsaXplIHRoZSBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmVxc2tfdGltZW91dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD04ODE9c3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTg4NS1cbmluY2x1ZGUvbmV0L3RjcC5oOjg4NjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXRfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9uZXQvdGNwLmgtODg3LVx0XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtODk5LVxuaW5jbHVkZS9uZXQvdGNwLmg6OTAwOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC90Y3AuaC05MDEte1xuaW5jbHVkZS9uZXQvdGNwLmg6OTAyOlx0cmV0dXJuIHRjcF9yZXFza190aW1lb3V0X3NrKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG5pbmNsdWRlL25ldC90Y3AuaC05MDMtfVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTExNC1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTExNTpcdFx0bW9kX3RpbWVyKFx1MDAyNnJlcS1cdTAwM2Vyc2tfdGltZXIsIGppZmZpZXMgJiM0MzsgdGNwX3JlcXNrX3RpbWVvdXQocmVxKSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTYtXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTcxOC1cdFx0XHR0bXBfb3B0LnRzX3JlY2VudF9zdGFtcCA9IGt0aW1lX2dldF9zZWNvbmRzKCkgLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjcxOTpcdFx0XHRcdHRjcF9yZXFza190aW1lb3V0KHJlcSkgLyBIWjtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03MjAtXHRcdFx0cGF3c19yZWplY3QgPSB0Y3BfcGF3c19yZWplY3QoXHUwMDI2dG1wX29wdCwgdGgtXHUwMDNlcnN0KTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNzY3LVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc2ODpcdFx0XHRcdGV4cGlyZXMgJiM0Mzs9IHRjcF9yZXFza190aW1lb3V0KHJlcSk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNzY5LVx0XHRcdFx0aWYgKCFmYXN0b3Blbilcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NTk9c3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00OTQtXHR0Y3BfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsXG5uZXQvaXB2NC90Y3BfdGltZXIuYzo0OTU6XHRcdFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDk2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgVGltZW91dCBWYXJpYWJsZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBhcmUgd2UgYWN0dWFsbHkgdXNpbmcgdGhlc2UgdGltZW91dCB2YXJpYWJsZXMsIHNwZWNpZmljYWxseSBgcmVxc2tfbnVtX3RpbWVvdXRgIGFuZCBgbnVtX3RpbWVvdXRgPyYjMzQ7IEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ga25vdyB0aGV5ICpleGlzdCo7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSYjMzk7cmUgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhleSBsaW1pdGVkIHRvIGEgcGFydGljdWxhciBtb2R1bGUsIG9yIGFyZSB0aGV5IGJlaW5nIHBhc3NlZCBhcm91bmQgYW5kIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgaW1wYWN0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIHRvIHVuZGVyc3RhbmQgaG93IGFueSBjaGFuZ2UgSSBtYWtlIHRvIG9uZSBwbGFjZSBhZmZlY3RzIHRoZSByZXN0LiBUaW1lIHRvIGRpZyBpbiBhbmQgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2VyIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gZWZmb3J0LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBtYXAgb2YgdGhlaXIgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O251bV90aW1lb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0PTk1NT10Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtOTU4LVx0c2lsZW50bHkgY2FwcGVkIGJ5IHRoZSBTWU4tQUNLIHRpbWVycywgbWF0Y2hpbmcgdGhlIDctYml0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdDo5NTk6XHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdC05NjAtXHRpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byAzMXNlY29uZHMgdGlsbCB0aGUgbGFzdCByZXRyYW5zbWlzc2lvblxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYz01MDEzPXN0YXRpYyBpbnQgbWx4NV9pYl9zdGFnZV9kZWxheV9kcm9wX2luaXQoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jLTUwMzMtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmM6NTAzNDpcdGRlYnVnZnNfY3JlYXRlX2F0b21pY190KFwmIzM0O251bV90aW1lb3V0X2V2ZW50c1wmIzM0OywgMDQwMCwgcm9vdCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYy01MDM1LVx0XHRcdFx0XHUwMDI2ZGV2LVx1MDAzZWRlbGF5X2Ryb3AuZXZlbnRzX2NudCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmg9MzQ2PXN0cnVjdCByeHRpZF9zdGF0cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtMzUyLVx0dTMyIG51bV9kZWxpdmVyZWQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NvcmUuaDozNTM6XHR1MzIgbnVtX3RpbWVvdXRzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtMzU0LVx0dTMyIG51bV9ob2xlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jPTE2MjQ9c3RhdGljIHZvaWQgYWdncl90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE2MzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYzoxNjM5Olx0XHRzdGF0cy1cdTAwM2VudW1fdGltZW91dHMmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTY0MC1cdFx0YXRoNmtsX2RiZyhBVEg2S0xfREJHX0FHR1IsXG4tLVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg9NTA9c3RydWN0IHJlcXVlc3Rfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNjctXHRcdFx0XHRcdFx0ICAgICAgKi9cbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oOjY4Olx0XHRcdHU4XHRcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNjktXHRcdH07XG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo3MDpcdFx0dThcdFx0bnVtX3RpbWVvdXRfc3luY29va2llO1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNzEtXHR9O1xuLS1cbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTgxLVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6ODI6c3RhdGljIGlubGluZSB1OCByZXFza19udW1fdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC04My17XG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4NDpcdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtODUtXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC04Ni0jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4NzpcdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTg4LSNlbHNlXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4OTpcdHJldHVybiBudW1fdGltZW91dCBcdTAwMjYgMHg3ZjtcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTkwLSNlbmRpZlxuLS1cbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oPTIzMz1zdGF0aWMgaW5saW5lIHZvaWQgcmVxc2tfcXVldWVfcmVtb3ZlZChzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSxcbi0tXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC0yMzUte1xuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6MjM2Olx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCA9PSAwKVxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtMjM3LVx0XHRhdG9taWNfZGVjKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0xNTE9c3RhdGljX2Fzc2VydCgoMSBcdTAwM2NcdTAwM2MgQVRPX0JJVFMpIFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMTg1LSNkZWZpbmUgTUFYX1RDUF9TWU5DTlRcdFx0MTI3XG5pbmNsdWRlL25ldC90Y3AuaDoxODY6LyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqL1xuaW5jbHVkZS9uZXQvdGNwLmgtMTg3LSNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1x0MTI3XG4tLVxuaW5jbHVkZS9uZXQvdGNwLmg9ODg2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtODkwLVx0dTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7XG5pbmNsdWRlL25ldC90Y3AuaDo4OTE6XHR1OCBudW1fdGltZW91dCA9IHJlcXNrX251bV90aW1lb3V0KHJlcSk7XG5pbmNsdWRlL25ldC90Y3AuaC04OTItXG5pbmNsdWRlL25ldC90Y3AuaDo4OTM6XHRpZiAobnVtX3RpbWVvdXQgXHUwMDNlPSBCSVRTX1BFUl9UWVBFKHRpbWVvdXQpIHx8XG5pbmNsdWRlL25ldC90Y3AuaDo4OTQ6XHQgICAgdGltZW91dCBcdTAwM2UgVTY0X01BWCBcdTAwM2VcdTAwM2UgbnVtX3RpbWVvdXQpXG5pbmNsdWRlL25ldC90Y3AuaC04OTUtXHRcdHJldHVybiBydG9fbWF4O1xuaW5jbHVkZS9uZXQvdGNwLmgtODk2LVxuaW5jbHVkZS9uZXQvdGNwLmg6ODk3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKW1pbl90KHU2NCwgdGltZW91dCBcdTAwM2NcdTAwM2MgbnVtX3RpbWVvdXQsIHJ0b19tYXgpO1xuaW5jbHVkZS9uZXQvdGNwLmgtODk4LX1cbi0tXG5pbmNsdWRlL25ldC90Y3BfZWNuLmg9NjQ1PXRjcF9lY25fbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3QgdGNwaGRyICp0aCxcbi0tXG5pbmNsdWRlL25ldC90Y3BfZWNuLmgtNjUwLVx0ICovXG5pbmNsdWRlL25ldC90Y3BfZWNuLmg6NjUxOlx0aWYgKCFyZXEtXHUwMDNlbnVtX3RpbWVvdXQgfHwgc3luYWNrX3R5cGUgIT0gVENQX1NZTkFDS19SRVRSQU5TKSB7XG5pbmNsdWRlL25ldC90Y3BfZWNuLmgtNjUyLVx0XHRpZiAodGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9vaylcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTgyOT1zdGF0aWMgdm9pZCBzeW5fYWNrX3JlY2FsYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzQtXHRpZiAoIXJza3FfZGVmZXJfYWNjZXB0KSB7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgzNTpcdFx0KmV4cGlyZSA9IHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IG1heF9zeW5fYWNrX3JldHJpZXM7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzNi1cdFx0KnJlc2VuZCA9IDE7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzgtXHR9XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgzOTpcdCpleHBpcmUgPSByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSBtYXhfc3luX2Fja19yZXRyaWVzIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDA6XHRcdCAgKCFpbmV0X3JzayhyZXEpLVx1MDAzZWFja2VkIHx8IHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODQxLVx0LyogRG8gbm90IHJlc2VuZCB3aGlsZSB3YWl0aW5nIGZvciBkYXRhIGFmdGVyIEFDSyxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0NS1cdCpyZXNlbmQgPSAhaW5ldF9yc2socmVxKS1cdTAwM2VhY2tlZCB8fFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDY6XHRcdCAgcmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gcnNrcV9kZWZlcl9hY2NlcHQgLSAxO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDctfVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODUwPXJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzEtXHRyZXEtXHUwMDNlc3luY29va2llID0gMDtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODcyOlx0cmVxLVx1MDAzZW51bV90aW1lb3V0ID0gMDtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODczLVx0cmVxLVx1MDAzZW51bV9yZXRyYW5zID0gMDtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTk2Nz1zdGF0aWMgdm9pZCByZXFza19xdWV1ZV9taWdyYXRlZChzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSxcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2OS17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjk3MDpcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTcxLVx0XHRhdG9taWNfaW5jKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMzM9c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTItXHRcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTEzOlx0XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0JiM0MzsmIzQzOyA9PSAwKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTE0LVx0XHRcdGF0b21pY19kZWMoXHUwMDI2cXVldWUtXHUwMDNleW91bmcpO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTEzNS1cdC8qIEV2ZW4gaWYgd2UgY2FuIGNsb25lIHRoZSByZXEsIHdlIG1heSBuZWVkIG5vdCByZXRyYW5zbWl0IGFueSBtb3JlXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExMzY6XHQgKiBTWU4mIzQzO0FDS3MgKG5yZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlIG1heF9zeW5fYWNrX3JldHJpZXMsIGV0YyksIG9yIGFub3RoZXJcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTEzNy1cdCAqIENQVSBtYXkgd2luIHRoZSBcJiMzNDtvd25fcmVxXCYjMzQ7IHJhY2Ugc28gdGhhdCBpbmV0X2VoYXNoX2luc2VydCgpIGZhaWxzLlxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9Mjc0ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2MC1cdFx0amlmZmllc19kZWx0YV90b19jbG9ja190KGRlbHRhKSxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjc2MTpcdFx0cmVxLVx1MDAzZW51bV90aW1lb3V0LFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzYyLVx0XHRmcm9tX2t1aWRfbXVuZ2VkKHNlcV91c2VyX25zKGYpLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01NDY9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyNS1cdH1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo2MjY6XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0KSB7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjI3Olx0XHRuZXd0cC1cdTAwM2V0b3RhbF9ydG8gPSByZXEtXHUwMDNlbnVtX3RpbWVvdXQ7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNjI4LVx0XHRuZXd0cC1cdTAwM2V1bmRvX21hcmtlciA9IHRyZXEtXHUwMDNlc250X2lzbjtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIwLVx0LyogV2hpbGUgVENQX0RFRkVSX0FDQ0VQVCBpcyBhY3RpdmUsIGRyb3AgYmFyZSBBQ0suICovXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTIxOlx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2MgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIyLVx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxID09IHRjcF9yc2socmVxKS1cdTAwM2VyY3ZfaXNuICYjNDM7IDEpIHtcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NTk9c3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NzQtXG5uZXQvaXB2NC90Y3BfdGltZXIuYzo0NzU6XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gbWF4X3JldHJpZXMpIHtcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ3Ni1cdFx0dGNwX3dyaXRlX2Vycihzayk7XG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDg5LVx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWNjZWNuX2ZhaWxfbW9kZSB8PSBUQ1BfQUNDRUNOX0FDRV9GQUlMX1NFTkQ7XG5uZXQvaXB2NC90Y3BfdGltZXIuYzo0OTA6XHRyZXEtXHUwMDNlbnVtX3RpbWVvdXQmIzQzOyYjNDM7O1xubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDkxLVx0dGNwX3VwZGF0ZV9ydG9fc3RhdHMoc2spO1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjA5ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTYoc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMTE3LVx0XHQgICBqaWZmaWVzX3RvX2Nsb2NrX3QodHRkKSxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjExODpcdFx0ICAgcmVxLVx1MDAzZW51bV90aW1lb3V0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMTE5LVx0XHQgICBmcm9tX2t1aWRfbXVuZ2VkKHNlcV91c2VyX25zKHNlcSksXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDQuYz0xNzI9c3RhdGljIGludCBkdW1wX3JlcV9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jLTE4OS1cdFx0ICAgICAgIFRDUF9TWU5fUkVDViwgMCwgMCwgMSwgamlmZmllc190b19jbG9ja190KHR0ZCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jOjE5MDpcdFx0ICAgICAgIHJlcS1cdTAwM2VudW1fdGltZW91dCwgdWlkLCAwLCAwLCAwLCByZXEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDQuYy0xOTEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYz0xODE9c3RhdGljIGludCBkdW1wX3JlcV9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNi5jLTIwNS1cdFx0ICAgICAgIFRDUF9TWU5fUkVDViwgMCwgMCwgMSwgamlmZmllc190b19jbG9ja190KHR0ZCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNi5jOjIwNjpcdFx0ICAgICAgIHJlcS1cdTAwM2VudW1fdGltZW91dCwgdWlkLCAwLCAwLCAwLCByZXEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYy0yMDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTAxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgVENQL0lQIFN0YWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgYHJlcXNrX3RpbWVyX2hhbmRsZXJgIHdpdGhpbiBgaW5ldF9jb25uZWN0aW9uX3NvY2suY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGdldCBhIGdyYXNwIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBob21lIGluIG9uIGxpbmVzIDEwNjAgdG8gMTA4MC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCByYW5nZSB0byBzdGFydCB3aXRoIGZvciBjb3JlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBhbmQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSB0aW1lciYjMzk7cyBiZWhhdmlvciwgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdGltZW91dHMgb3IgcmV0cmFuc21pc3Npb25zLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdFx0dGltZXJfc2V0dXAoXHUwMDI2bnJlcS1cdTAwM2Vyc2tfdGltZXIsIHJlcXNrX3RpbWVyX2hhbmRsZXIsIFRJTUVSX1BJTk5FRCk7XG4xMDYxOlx0XHRcdHJlcXNrX3F1ZXVlX21pZ3JhdGVkKFx1MDAyNmluZXRfY3NrKG5zayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4xMDYyOlx0XG4xMDYzOlx0XHRcdHJlcSA9IG5yZXE7XG4xMDY0Olx0XHRcdHNrX2xpc3RlbmVyID0gbnNrO1xuMTA2NTpcdFx0fVxuMTA2NjpcdFxuMTA2NzpcdFx0aWNzayA9IGluZXRfY3NrKHNrX2xpc3RlbmVyKTtcbjEwNjg6XHRcdG5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTtcbjEwNjk6XHRcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbjEwNzA6XHRcdFx0UkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpO1xuMTA3MTpcdFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3N5bl9hY2tfcmV0cmllcyxcbjEwNzI6XHRcdFx0XHRcdCAgICBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcbjEwNzM6XHRcdC8qIE5vcm1hbGx5IGFsbCB0aGUgb3BlbnJlcXMgYXJlIHlvdW5nIGFuZCBiZWNvbWUgbWF0dXJlXG4xMDc0Olx0XHQgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC5cbjEwNzU6XHRcdCAqIElmIHN5bmFjayB3YXMgbm90IGFja25vd2xlZGdlZCBmb3IgMSBzZWNvbmQsIGl0IG1lYW5zXG4xMDc2Olx0XHQgKiBvbmUgb2YgdGhlIGZvbGxvd2luZyB0aGluZ3M6IHN5bmFjayB3YXMgbG9zdCwgYWNrIHdhcyBsb3N0LFxuMTA3NzpcdFx0ICogcnR0IGlzIGhpZ2ggb3Igbm9ib2R5IHBsYW5uZWQgdG8gYWNrIChpLmUuIHN5bmZsb29kKS5cbjEwNzg6XHRcdCAqIFdoZW4gc2VydmVyIGlzIGEgYml0IGxvYWRlZCwgcXVldWUgaXMgcG9wdWxhdGVkIHdpdGggb2xkXG4xMDc5Olx0XHQgKiBvcGVuIHJlcXVlc3RzLCByZWR1Y2luZyBlZmZlY3RpdmUgc2l6ZSBvZiBxdWV1ZS5cbjEwODA6XHRcdCAqIFdoZW4gc2VydmVyIGlzIHdlbGwgbG9hZGVkLCBxdWV1ZSBzaXplIHJlZHVjZXMgdG8gemVyb1xuMTA4MTpcdFx0ICogYWZ0ZXIgc2V2ZXJhbCBtaW51dGVzIG9mIHdvcmsuIEl0IGlzIG5vdCBzeW5mbG9vZCxcbjEwODI6XHRcdCAqIGl0IGlzIG5vcm1hbCBvcGVyYXRpb24uIFRoZSBzb2x1dGlvbiBpcyBwcnVuaW5nXG4xMDgzOlx0XHQgKiB0b28gb2xkIGVudHJpZXMgb3ZlcnJpZGluZyBub3JtYWwgdGltZW91dCwgd2hlblxuMTA4NDpcdFx0ICogc2l0dWF0aW9uIGJlY29tZXMgZGFuZ2Vyb3VzLlxuMTA4NTpcdFx0ICpcbjEwODY6XHRcdCAqIEVzc2VudGlhbGx5LCB3ZSByZXNlcnZlIGhhbGYgb2Ygcm9vbSBmb3IgeW91bmdcbjEwODc6XHRcdCAqIGVtYnJpb25zOyBhbmQgYWJvcnQgb2xkIG9uZXMgd2l0aG91dCBwaXR5LCBpZiBvbGRcbjEwODg6XHRcdCAqIG9uZXMgYXJlIGFib3V0IHRvIGNsb2cgb3VyIHRhYmxlLlxuMTA4OTpcdFx0ICovXG4xMDkwOlx0XHRxdWV1ZSA9IFx1MDAyNmljc2stXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XG4xMDkxOlx0XHRxbGVuID0gcmVxc2tfcXVldWVfbGVuKHF1ZXVlKTtcbjEwOTI6XHRcdGlmICgocWxlbiBcdTAwM2NcdTAwM2MgMSkgXHUwMDNlIG1heCg4VSwgUkVBRF9PTkNFKHNrX2xpc3RlbmVyLVx1MDAzZXNrX21heF9hY2tfYmFja2xvZykpKSB7XG4xMDkzOlx0XHRcdGludCB5b3VuZyA9IHJlcXNrX3F1ZXVlX2xlbl95b3VuZyhxdWV1ZSkgXHUwMDNjXHUwMDNjIDE7XG4xMDk0Olx0XG4xMDk1Olx0XHRcdHdoaWxlIChtYXhfc3luX2Fja19yZXRyaWVzIFx1MDAzZSAyKSB7XG4xMDk2Olx0XHRcdFx0aWYgKHFsZW4gXHUwMDNjIHlvdW5nKVxuMTA5NzpcdFx0XHRcdFx0YnJlYWs7XG4xMDk4Olx0XHRcdFx0bWF4X3N5bl9hY2tfcmV0cmllcy0tO1xuMTA5OTpcdFx0XHRcdHlvdW5nIFx1MDAzY1x1MDAzYz0gMTtcbjExMDA6XHRcdFx0fVxuMTEwMTpcdFx0fVxuMTEwMjpcdFxuMTEwMzpcdFx0c3luX2Fja19yZWNhbGMocmVxLCBtYXhfc3luX2Fja19yZXRyaWVzLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlcnNrcV9kZWZlcl9hY2NlcHQpLFxuMTEwNDpcdFx0XHQgICAgICAgXHUwMDI2ZXhwaXJlLCBcdTAwMjZyZXNlbmQpO1xuMTEwNTpcdFx0dGNwX3N5bl9hY2tfdGltZW91dChyZXEpO1xuMTEwNjpcdFxuMTEwNzpcdFx0aWYgKCFleHBpcmUgXHUwMDI2XHUwMDI2XG4xMTA4Olx0XHQgICAgKCFyZXNlbmQgfHxcbjExMDk6XHRcdCAgICAgIXRjcF9ydHhfc3luYWNrKHNrX2xpc3RlbmVyLCByZXEpIHx8XG4xMTEwOlx0XHQgICAgIGluZXRfcnNrKHJlcSktXHUwMDNlYWNrZWQpKSB7XG4xMTExOlx0XHRcdGlmIChyZXEtXHUwMDNlbnVtX3JldHJhbnMgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHRjcF9yc2socmVxKS1cdTAwM2VhY2NlY25fb2spXG4xMTEyOlx0XHRcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xuMTExMzpcdFx0XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0JiM0MzsmIzQzOyA9PSAwKVxuMTExNDpcdFx0XHRcdGF0b21pY19kZWMoXHUwMDI2cXVldWUtXHUwMDNleW91bmcpO1xuMTExNTpcdFx0XHRtb2RfdGltZXIoXHUwMDI2cmVxLVx1MDAzZXJza190aW1lciwgamlmZmllcyAmIzQzOyB0Y3BfcmVxc2tfdGltZW91dChyZXEpKTtcbjExMTY6XHRcbjExMTc6XHRcdFx0aWYgKCFucmVxKVxuMTExODpcdFx0XHRcdHJldHVybjtcbjExMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgZm9yIEZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgaXQgaXMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBXb3J0aEZ1enppbmdgLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIFRDUCBuZXR3b3JraW5nIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AsIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCB0aGUgcmVsZXZhbnQgaGVhZGVycy4gVGhlIG1vZGlmaWNhdGlvbnMgaW5jbHVkZSB0aW1lb3V0IGNhbGN1bGF0aW9ucywgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIGJpdGZpZWxkIGNoYW5nZXMsIGFuZCBjYXBzIG9uIHJldHJhbnNtaXNzaW9ucy9yZXRyaWVzIHdpdGhpbiB0aW1lcnMuIFRoZXJlJiMzOTtzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyBhcm91bmQgaGFuZGxpbmcgc2hpZnRzIGFuZCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AsIGFuZCBob3cgYHJlcXNrX251bV90aW1lb3V0YCBhY2Nlc3NlcyBgcmVxLSZndDtudW1fdGltZW91dF9zeW5jb29raWVgLiBUaGUgYmVzdCBwYXJ0IGlzIGl0JiMzOTtzIHJlYWRpbHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zOyBsaXN0ZW5pbmcgc29ja2V0cywgU1lOIGhhbmRsaW5nLCBUQ1AgdGltZXIgZXhwaXJhdGlvbnMsIHN5c2N0bHMsIGFuZCBgc2V0c29ja29wdGAgY2FsbHMgZm9yIGBUQ1BfREVGRVJfQUNDRVBUYCBhbmQgYFRDUF9TWU5DTlRgIGFyZSBhbGwgcHJlc2VudC4gWWVwLCBzb3VuZHMgbGlrZSBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBuYXJyb3cgZG93biB0aGUgZm9jdXMgdG8gZmluZCB0aGUgYmVzdCBzeW1ib2xzIHRvIHRhcmdldC4gVGhhdCYjMzk7cyBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG1vZGlmaWVkIGRpcmVjdGx5IG9yIHRoYXQgY2FsbCB0aGUgY2hhbmdlZCBsb2dpYy4gVGhlIGtleSBmdW5jdGlvbnMgSSBzZWUgYXJlOiBgcmVxc2tfdGltZXJfaGFuZGxlcmAgKGluIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCksIHdoZXJlIHdlJiMzOTtyZSBjYXBwaW5nIHJldHJpZXMgYW5kIGNhbGxpbmcgYHRjcF9yZXFza190aW1lb3V0YDsgYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIChpbiBgdGNwX3RpbWVyLmNgKSwgd2l0aCB0aGUgc2FtZSByZXRyeS1jYXBwaW5nIGFuZCBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgIGNhbGw7IGBzZWNzX3RvX3JldHJhbnNgIChpbiBgdGNwLmNgKSwgd2hpY2ggaXMgdXNlZCB3aXRoaW4gYGRvX3RjcF9zZXRzb2Nrb3B0YCBmb3IgYFRDUF9ERUZFUl9BQ0NFUFRgOyBhbmQgYHRjcF9jaGVja19yZXFgIChpbiBgdGNwX21pbmlzb2Nrcy5jYCksIHdoaWNoIGNhbGxzIGB0Y3BfcmVxc2tfdGltZW91dGAuCgpOb3csIGFib3V0IGB0Y3BfcmVxc2tfdGltZW91dF9za2AgYW5kIGByZXFza19udW1fdGltZW91dGAgLSB0aGV5JiMzOTtyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgdGhleSBjYW4mIzM5O3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgdmlhIHN5bWJvbCBjb3ZlcmFnZS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGNhbGxlciBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSAqdXNlKiB0aGVtLiBUaGUgb25lcyBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgYXJlIHRoZSBiZXN0OiBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYCwgYHNlY3NfdG9fcmV0cmFuc2AgKG9yIHJhdGhlciBgZG9fdGNwX3NldHNvY2tvcHRgIHdoaWNoIGNhbGxzIGl0KSwgYW5kIGB0Y3BfY2hlY2tfcmVxYC4KClF1aWNrIGNoZWNrIG9uIGBzZWNzX3RvX3JldHJhbnNgLiBZZXAsIGBzZWNzX3RvX3JldHJhbnNgIGlzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IGBkb190Y3Bfc2V0c29ja29wdGAuIGBkb190Y3Bfc2V0c29ja29wdGAgaXRzZWxmIGJlY29tZXMgdGhlIHNldHNvY2tvcHQgZW50cnlwb2ludCwgd2hpY2ggaXMgZ29vZC4KClNvLCBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYCwgYHRjcF9jaGVja19yZXFgLCBhbmQgYGRvX3RjcF9zZXRzb2Nrb3B0YCBhcmUgdGhlIHJlYWwgc3RhcnMuCgpGaW5hbGx5LCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBjaGFuZ2VzIGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYCwgYG5ldC9pcHY0L3RjcC5jYCwgYW5kIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9pcHY0L01ha2VmaWxlYCBvciBgbmV0L2lwdjQvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY29ubmVjdGlvbl9zb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2MDkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOC1cdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6OTpcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTAtXHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTEwMC0jaW5jbHVkZSBcdTAwM2NuZXQvaXBfZmliLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDE6I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDItI2luY2x1ZGUgXHUwMDNjbmV0L2dyby5oXHUwMDNlXG4tLVxubmV0L2lwdjQvYnBmX3RjcF9jYS5jPTYxPXN0YXRpYyBpbnQgYnBmX3RjcF9jYV9idGZfc3RydWN0X2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy04MC1cdFx0YnJlYWs7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODE6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrLCBpY3NrX2NhX3ByaXYpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjgyOlx0XHRlbmQgPSBvZmZzZXRvZmVuZChzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssIGljc2tfY2FfcHJpdik7XG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtODMtXHRcdGJyZWFrO1xubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjg0Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssIGljc2tfYWNrLnBlbmRpbmcpOlxubmV0L2lwdjQvYnBmX3RjcF9jYS5jOjg1Olx0XHRlbmQgPSBvZmZzZXRvZmVuZChzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssXG5uZXQvaXB2NC9icGZfdGNwX2NhLmMtODYtXHRcdFx0XHQgIGljc2tfYWNrLnBlbmRpbmcpO1xuLS1cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYz0xODQ5PWludCBjaXBzb192NF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xODU5LVx0c3RydWN0IGluZXRfc29jayAqc2tfaW5ldDtcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoxODYwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uO1xubmV0L2lwdjQvY2lwc29faXB2NC5jLTE4NjEtXG4tLVxubmV0L2lwdjQvY2lwc29faXB2NC5jPTIwNTM9dm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0yMDYxLVx0aWYgKGluZXRfdGVzdF9iaXQoSVNfSUNTSywgc2spIFx1MDAyNlx1MDAyNiBoZHJfZGVsdGEgXHUwMDNlIDApIHtcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYzoyMDYyOlx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9jaXBzb19pcHY0LmMtMjA2My1cdFx0c2tfY29ubi1cdTAwM2VpY3NrX2V4dF9oZHJfbGVuIC09IGhkcl9kZWx0YTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0LVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNTojaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaFx1MDAzZVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNi0jaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9oYXNodGFibGVzLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTYwMT1zdGF0aWMgaW50IGluZXRfY3NrX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02MDIte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo2MDM6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTYwNC1cdERFRklORV9XQUlUKHdhaXQpO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NjQ5PXN0cnVjdCBzb2NrICppbmV0X2Nza19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02NTAte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo2NTE6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTY1Mi1cdHN0cnVjdCByZXF1ZXN0X3NvY2tfcXVldWUgKnF1ZXVlID0gXHUwMDI2aWNzay1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTcxOD12b2lkIGluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzIyLXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6NzIzOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03MjQtXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03MzE9dm9pZCBpbmV0X2Nza19jbGVhcl94bWl0X3RpbWVycyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTczMi17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjczMzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzM0LVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzQzPXZvaWQgaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcnNfc3luYyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc0NC17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc0NTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzQ2LVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzNy1cdHN0cnVjdCBzb2NrICpza19saXN0ZW5lciA9IHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXI7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwMzg6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwMzktXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTExODc9c3RhdGljIHZvaWQgaW5ldF9jbG9uZV91bHAoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3Qgc29jayAqbmV3c2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTg5LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTE5MDpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKG5ld3NrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5MS1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEyMDY9c3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lX2xvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIxMC1cdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2Nsb25lX2xvY2soc2ssIHByaW9yaXR5KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIxMTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIxMi1cdGNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMTY9c3RhdGljIGludCBpbmV0X3VscF9jYW5fbGlzdGVuKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMxNy17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzMTg6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMTktXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMzM1PWludCBpbmV0X2Nza19saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzM2LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTMzNzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMzOC1cdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTE0Njg9dm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0Njkte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDcwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDcxLVx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcdTAwMjZpY3NrLVx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlO1xuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxLSNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXHUwMDNlXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaFx1MDAzZVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2JwZl9za19zdG9yYWdlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pbmV0X2RpYWcuYz0xOTk9c3RhdGljIGludCBpbmV0X2RpYWdfZ2V0X3Byb3RvY29sKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtMjA4LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MjA5OmludCBpbmV0X3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxMC1cdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTIxLSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYzoyMjojaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaFx1MDAzZVxubmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMtMjMtI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfaGFzaHRhYmxlcy5oXHUwMDNlXG4tLVxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM9MTAzPXZvaWQgaW5ldF90d3NrX2hhc2hkYW5jZV9zY2hlZHVsZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyxcbi0tXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYy0xMDgtXHRjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoxMDk6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYy0xMTAtXHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgc2stXHUwMDNlc2tfaGFzaCk7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTA5Mi1cdFx0aWYgKGluZXRfdGVzdF9iaXQoSVNfSUNTSywgc2spKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEwOTM6XHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDk0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMDAte1xubmV0L2lwdjQvc3luY29va2llcy5jOjIwMTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMDItXHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XG4tLVxubmV0L2lwdjQvdGNwLmM9NDIwPXZvaWQgdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3AuYy00MjEte1xubmV0L2lwdjQvdGNwLmM6NDIyOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtNDIzLVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwLmM9MTU1Mj12b2lkIF9fdGNwX2NsZWFudXBfcmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCBjb3BpZWQpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTU1Ny1cdGlmIChpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKSkge1xubmV0L2lwdjQvdGNwLmM6MTU1ODpcdFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtMTU1OS1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zMzYxPWludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3AuYy0zMzYzLVx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xubmV0L2lwdjQvdGNwLmM6MzM2NDpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTMzNjUtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0zODM3PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtMzg0MC1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xubmV0L2lwdjQvdGNwLmM6Mzg0MTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTM4NDItXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4tLVxubmV0L2lwdjQvdGNwLmM9NDE3Mj1pbnQgdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQxNzQte1xubmV0L2lwdjQvdGNwLmM6NDE3NTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTQxNzYtXG4tLVxubmV0L2lwdjQvdGNwLmM9NDIxMD12b2lkIHRjcF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfaW5mbyAqaW5mbylcbi0tXG5uZXQvaXB2NC90Y3AuYy00MjEyLVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7IC8qIGlmZiBza190eXBlID09IFNPQ0tfU1RSRUFNICovXG5uZXQvaXB2NC90Y3AuYzo0MjEzOlx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtNDIxNC1cdGNvbnN0IHU4IGVjdDFfaWR4ID0gSU5FVF9FQ05fRUNUXzEgLSAxO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ0ODMte1xubmV0L2lwdjQvdGNwLmM6NDQ4NDpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcC5jLTQ0ODUtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz00ODY3PWludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDg2OS17XG5uZXQvaXB2NC90Y3AuYzo0ODcwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwLmMtNDg3MS1cbi0tXG5uZXQvaXB2NC90Y3BfYmljLmM9MTkwPXN0YXRpYyB2b2lkIGJpY3RjcF9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpXG5uZXQvaXB2NC90Y3BfYmljLmMtMTkxLXtcbm5ldC9pcHY0L3RjcF9iaWMuYzoxOTI6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfYmljLmMtMTkzLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9Mzg9dm9pZCB0Y3Bfc2V0X2NhX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTggY2Ffc3RhdGUpXG5uZXQvaXB2NC90Y3BfY29uZy5jLTM5LXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6NDA6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxLVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjE4LVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyMTk6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTIyMC1cdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmM9MjM2PXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjM3LXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjM4Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0yMzktXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNTA9c3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9jb25nLmMtMjUyLXtcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUzOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTQtXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNzA9dm9pZCB0Y3BfY2xlYW51cF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNzEte1xubmV0L2lwdjQvdGNwX2NvbmcuYzoyNzI6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTI3My1cbi0tXG5uZXQvaXB2NC90Y3BfY29uZy5jPTQxMj1pbnQgdGNwX3NldF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGxvYWQsXG4tLVxubmV0L2lwdjQvdGNwX2NvbmcuYy00MTQte1xubmV0L2lwdjQvdGNwX2NvbmcuYzo0MTU6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxNi1cdGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhO1xuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM9MTE1PXN0YXRpYyBpbnQgdGNwX2RpYWdfZ2V0X2F1eChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluLFxuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmMtMTE3LXtcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTE4Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2RpYWcuYy0xMTktXHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz0xNDY9c3RhdGljIHNpemVfdCB0Y3BfZGlhZ19nZXRfYXV4X3NpemUoc3RydWN0IHNvY2sgKnNrLCBib29sIG5ldF9hZG1pbilcbm5ldC9pcHY0L3RjcF9kaWFnLmMtMTQ3LXtcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTQ4Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2RpYWcuYy0xNDktXHRzaXplX3Qgc2l6ZSA9IDA7XG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MTQ1PWludCB0Y3BfZmFzdG9wZW5fcmVzZXRfY2lwaGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTE4MS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjE4MjppbnQgdGNwX2Zhc3RvcGVuX2dldF9jaXBoZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0xODMtXHRcdFx0ICAgIHU2NCAqa2V5KVxuLS1cbm5ldC9pcHY0L3RjcF9odGNwLmM9ODI9c3RhdGljIGlubGluZSB2b2lkIG1lYXN1cmVfcnR0KHN0cnVjdCBzb2NrICpzaywgdTMyIHNydHQpXG5uZXQvaXB2NC90Y3BfaHRjcC5jLTgzLXtcbm5ldC9pcHY0L3RjcF9odGNwLmM6ODQ6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaHRjcC5jLTg1LVx0c3RydWN0IGh0Y3AgKmNhID0gaW5ldF9jc2tfY2Eoc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9odGNwLmM9MTAxPXN0YXRpYyB2b2lkIG1lYXN1cmVfYWNoaWV2ZWRfdGhyb3VnaHB1dChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2h0Y3AuYy0xMDMte1xubmV0L2lwdjQvdGNwX2h0Y3AuYzoxMDQ6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaHRjcC5jLTEwNS1cdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyOC17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyMjk6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yMzAtXHRjb25zdCB1bnNpZ25lZCBpbnQgbHNzID0gaWNzay1cdTAwM2VpY3NrX2Fjay5sYXN0X3NlZ19zaXplO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMxMT1zdGF0aWMgdm9pZCB0Y3BfaW5jcl9xdWlja2FjayhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBtYXhfcXVpY2thY2tzKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzEyLXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMxMzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMxNC1cdHVuc2lnbmVkIGludCBxdWlja2Fja3MgPSB0Y3Bfc2soc2spLVx1MDAzZXJjdl93bmQgLyAoMiAqIGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzIzPXN0YXRpYyB2b2lkIHRjcF9lbnRlcl9xdWlja2Fja19tb2RlKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1heF9xdWlja2Fja3MpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMjQte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzI1Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzI2LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMzNj1zdGF0aWMgYm9vbCB0Y3BfaW5fcXVpY2thY2tfbW9kZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzcte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzM4Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzM5LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc3OD1zdGF0aWMgdm9pZCB0Y3BfY2xhbXBfd2luZG93KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03ODAtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc4MTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc4Mi1cdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz05OTU9c3RhdGljIHZvaWQgdGNwX3NhdmVfbHJjdl9mbG93bGFiZWwoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTk5Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjk5ODpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTk5OS1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDE1PXN0YXRpYyB2b2lkIHRjcF9ldmVudF9kYXRhX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTEwMTctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjEwMTg6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE5LVx0dTMyIG5vdztcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yNTU0PXZvaWQgdGNwX2VudGVyX2xvc3Moc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjU1NS17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyNTU2Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMjU1Ny1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTI4NDM9c3RhdGljIHZvaWQgdGNwX3VuZG9fY3duZF9yZWR1Y3Rpb24oc3RydWN0IHNvY2sgKnNrLCBib29sIHVubWFya19sb3NzKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTctXHRpZiAodHAtXHUwMDNlcHJpb3Jfc3N0aHJlc2gpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI4NTg6XHRcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTktXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzA3ND1zdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9mYWlsZWQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3NS17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMDc2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3Ny1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMDgzPXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMwODUtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMwODY6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMDg3LVx0dTY0IHZhbDtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMTE2PXN0YXRpYyB2b2lkIHRjcF9ub25fY29uZ2VzdGlvbl9sb3NzX3JldHJhbnNtaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExNy17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMTE4Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExOS1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMzMjg9c3RhdGljIHZvaWQgdGNwX2Zhc3RyZXRyYW5zX2FsZXJ0KHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTMyIHByaW9yX3NuZF91bmEsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzMzMC17XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMzMxOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMzMzMi1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM1MTM9c3RhdGljIHZvaWQgdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE0LXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM1MTU6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE2LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM1MjQ9dm9pZCB0Y3BfcmVhcm1fcnRvKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjUte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzUyNjpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zNjAyPXN0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICphY2tfc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM2MDUte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MzYwNjpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM2MDctXHR1NjQgZmlyc3RfYWNrdCwgbGFzdF9hY2t0O1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM4MDc9c3RhdGljIHZvaWQgdGNwX2Fja19wcm9iZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODA4LXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM4MDk6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODEwLVx0c3RydWN0IHNrX2J1ZmYgKmhlYWQgPSB0Y3Bfc2VuZF9oZWFkKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zODU4PXN0YXRpYyB2b2lkIHRjcF9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWRfc2Fja2VkLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM4NjAte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Mzg2MTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM4NjItXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDE3Mj1zdGF0aWMgdm9pZCB0Y3BfaW5fYWNrX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MTczLXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQxNzQ6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MTc1LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQyNzY9c3RhdGljIGludCB0Y3BfYWNrKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWcpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00Mjc3LXtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQyNzg6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00Mjc5LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjcwNT12b2lkIHRjcF9pbml0X3RyYW5zZmVyKHN0cnVjdCBzb2NrICpzaywgaW50IGJwZl9vcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDYte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjcwNzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDgtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NzMzPXZvaWQgdGNwX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NzM1LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NzM2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNjczNy1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02ODUyPXN0YXRpYyBpbnQgdGNwX3Jjdl9zeW5zZW50X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY4NTQte1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Njg1NTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY4NTYtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTUyPXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzE1NC1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzE1NTpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxNTYtXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTQzOD12b2lkIHRjcF9sZF9SVE9fcmV2ZXJ0KHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcSlcbm5ldC9pcHY0L3RjcF9pcHY0LmMtNDM5LXtcbm5ldC9pcHY0L3RjcF9pcHY0LmM6NDQwOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX2lwdjQuYy00NDEtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzNDg9dm9pZCBpbmV0X3NrX3J4X2RzdF9zZXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM1Ny1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM1ODpjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNTktXHQucXVldWVfeG1pdFx0ICAgPSBpcF9xdWV1ZV94bWl0LFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM5Nj1zdGF0aWMgaW50IHRjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzk3LXtcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM5ODpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM5OS1cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI3NzA9c3RhdGljIHZvaWQgZ2V0X3RjcDRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzZXFfZmlsZSAqZiwgaW50IGkpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzc0LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjI3NzU6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI3NzYtXHRjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0xMy1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmhcdTAwM2Vcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuLS1cbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MzQwPXZvaWQgdGNwX3VwZGF0ZV9tZXRyaWNzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzQxLXtcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM6MzQyOlx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0zNDMtXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz0zMjY9dm9pZCB0Y3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMzI3LXtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzozMjg6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMzI5LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQ5Nz12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDk5Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTUwMC1cdHUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01NTItXHRzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSA9IHRjcF9yc2socmVxKTtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo1NTM6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKm5ld2ljc2s7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTU0LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICpvbGR0cDtcbi0tXG5uZXQvaXB2NC90Y3BfbnYuYz0yMzk9c3RhdGljIHZvaWQgdGNwbnZfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxubmV0L2lwdjQvdGNwX252LmMtMjQwLXtcbm5ldC9pcHY0L3RjcF9udi5jOjI0MTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9udi5jLTI0Mi1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz04Mz1zdGF0aWMgdm9pZCB0Y3BfZXZlbnRfbmV3X2RhdGFfc2VudChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODQte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjg1Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTg2LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE3OT1zdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9zZW50KHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE4MS17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTgyOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTE4My1cdGNvbnN0IHUzMiBub3cgPSB0Y3BfamlmZmllczMyO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xNTM2PXN0YXRpYyBpbnQgX190Y3BfdHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTUzOC17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTUzOTpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQwLVx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTk5Nj1zdGF0aWMgaW5saW5lIGludCBfX3RjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE5OTgtXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxOTk5Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDAtXHRpbnQgbXNzX25vdztcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjAyOT1pbnQgdGNwX21zc190b19tdHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbXNzKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDMxLVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjAzMjpcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDMzLVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yMDQyPXZvaWQgdGNwX210dXBfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwNDQtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMDQ1Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwNDYtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIwNzk9dW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDgxLVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjA4MjpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDgzLVx0aW50IG1zc19ub3c7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI0NTI9c3RhdGljIGJvb2wgdGNwX3Rzb19zaG91bGRfZGVmZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNDU2LXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyNDU3Olx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTI0NTgtXHR1MzIgc2VuZF93aW4sIGNvbmdfd2luLCBsaW1pdCwgaW5fZmxpZ2h0LCB0aHJlc2hvbGQ7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI1NjU9c3RhdGljIGlubGluZSB2b2lkIHRjcF9tdHVfY2hlY2tfcmVwcm9iZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjU2Ni17XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjU2NzpcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNTY4LVx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTI2ODQ9c3RhdGljIGludCB0Y3BfbXR1X3Byb2JlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNjg1LXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyNjg2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTI2ODctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzA5OT1ib29sIHRjcF9zY2hlZHVsZV9sb3NzX3Byb2JlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZHZhbmNpbmdfcnRvKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMxMDAte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjMxMDE6XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzEwMi1cdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zMzE0PXUzMiBfX3RjcF9zZWxlY3Rfd2luZG93KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zMzE1LXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMzE2Olx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTMzMTctXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzU1MD1pbnQgX190Y3BfcmV0cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2Vncylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNTUxLXtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozNTUyOlx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTM1NTMtXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzcyNT12b2lkIHRjcF94bWl0X3JldHJhbnNtaXRfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3MjYte1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjM3Mjc6XHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzcyOC1cdHN0cnVjdCBza19idWZmICpza2IsICpydHhfaGVhZCwgKmhvbGUgPSBOVUxMO1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAyNAoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBJTkVUYCBpcyBlbmFibGVkLCBzbyBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGJ5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIHByb2JhYmx5IGBuZXQvaXB2NC9LY29uZmlnYCBvciBgbmV0L0tjb25maWdgLiBgSU5FVGAgaXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgSVB2NCBhbmQgVENQIG5ldHdvcmtpbmcsIHNvIHRoYXQmIzM5O3MgYSBrZXkgcmVxdWlyZW1lbnQuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3Mgd29ydGggZnV6emluZy4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIEkgYWdyZWUuIFRoaXMgdG91Y2hlcyBzb21lIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSBUQ1Agc3RhY2s6IGNvbm5lY3Rpb24gaGFuZGxpbmcsIHJldHJhbnNtaXNzaW9uIHRpbWVycywgYHJlcXVlc3Rfc29ja2AgYml0ZmllbGQgcGFja2luZywgYW5kIHRpbWVvdXQgY2FsY3VsYXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLgoKTmV4dCwgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJpZ2h0IHN5bWJvbHMgYXJlIGJlaW5nIHRhcmdldGVkLCBsZXQmIzM5O3MgY29uZmlybSB0aGUgYEZvY3VzU3ltYm9sc2A6CiogICBgcmVxc2tfdGltZXJfaGFuZGxlcmAgLSBIYW5kbGVzIHJldHJhbnNtaXNzaW9uIHRpbWVycywgdmVyeSBpbXBvcnRhbnQuCiogICBgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcmAgLSBSZWxhdGVkIHRvIEZhc3QgT3BlbiwgYW5vdGhlciBjcml0aWNhbCBwaWVjZSBvZiBUQ1AuCiogICBgZG9fdGNwX3NldHNvY2tvcHRgIC0gVGhpcyBoYW5kbGVzIHNvY2tldCBvcHRpb25zLCBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCiogICBgdGNwX2NoZWNrX3JlcWAgLSBVc2VkIGR1cmluZyBTWU4tQUNLIGhhbmRsaW5nLCBpdCYjMzk7cyBhbHNvIGEgZ3JlYXQgdGFyZ2V0LgoKVGhlIGBFbmFibGVDb25maWdzYCBsaXN0IG9ubHkgaW5jbHVkZXMgYElORVRgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LgoKVGhlIHJlYXNvbmluZyBzZWVtcyBzb3VuZCwgd2hpY2ggY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24uIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIDctYml0IG92ZXJmbG93IGlzc3VlIGluIGByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0YCBieSBjYXBwaW5nIFNZTi1BQ0sgcmV0cmllcyBhdCAxMjcgaW4gYm90aCBgcmVxc2tfdGltZXJfaGFuZGxlcmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYC4gSXQgYWxzbyBtb2RpZmllcyBiaXRmaWVsZCBkZWZpbml0aW9ucyBpbiBgc3RydWN0IHJlcXVlc3Rfc29ja2AsIGFuZCB1cGRhdGVzIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuIFRoZSBwYXRocyBpbnZvbHZlZCBhcmUgYWxsIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBzb2NrZXQgb3B0aW9ucy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNyaXRpY2FsIGFyZWEgdGhhdCBuZWVkcyBjbG9zZSBleGFtaW5hdGlvbi4KCkZpbmFsbHksIEkmIzM5O2xsIGdpdmUgdGhlIHNldC1yZXN1bHRzIGNhbGwgYSBmaW5hbCBvbmNlLW92ZXIuIFllcCwgZXZlcnl0aGluZyBsb29rcyBjb21wbGV0ZSBhbmQgY29oZXJlbnQuIFRoaXMgYXBwZWFycyB0byBiZSBhIHNvbGlkIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVxc2tfdGltZXJfaGFuZGxlciYjMzQ7LAogICAgJiMzNDt0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyJiMzNDssCiAgICAmIzM0O2RvX3RjcF9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3RjcF9jaGVja19yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiBhbmQgdGltZW91dCBoYW5kbGluZyB0byBtYXRjaCB0aGUgNy1iaXQgcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBmaWVsZC4gSXQgY2FwcyBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IGluIHJlcXNrX3RpbWVyX2hhbmRsZXIgYW5kIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIsIHJlZmFjdG9ycyB0aGUgYml0ZmllbGQgbGF5b3V0IGluIHN0cnVjdCByZXF1ZXN0X3NvY2ssIGFuZCB1cGRhdGVzIHRjcF9yZXFza190aW1lb3V0X3NrIC8gdGNwX3JlcXNrX3RpbWVvdXQgY2FsY3VsYXRpb25zIHRvIHByZXZlbnQgc2hpZnQgb3ZlcmZsb3dzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIFRDUCBzb2NrZXQgY29ubmVjdGlvbnMgYW5kIHNldHNvY2tvcHQvc3lzY3RsIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFza190aW1lcl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXImIzM0OywKICAgICYjMzQ7ZG9fdGNwX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGNwX2NoZWNrX3JlcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwODFlN2MzNWJhNmE0MDgwMDViZmE3NDY5MDI5NzJlNWUyNzhiODYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtOTU0LDcgJiM0Mzs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTgogCiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIFNZTkFDS3MgZm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwKLQliZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQomIzQzOwliZSByZXRyYW5zbWl0dGVkLiBUaGUgc3lzY3RsIGFjY2VwdHMgMC0yNTUuIFZhbHVlcyBhYm92ZSAxMjcgYXJlCiYjNDM7CXNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdAomIzQzOwlyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlCiAJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb24KIAl3aXRoIHRoZSBjdXJyZW50IGluaXRpYWwgUlRPIG9mIDFzZWNvbmQuIFdpdGggdGhpcyB0aGUgZmluYWwgdGltZW91dAogCWZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmggYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAppbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaApAQCAtNTgsMTIgJiM0Mzs1OCwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrCQkqZGxfbmV4dDsKIAl1MTYJCQkJbXNzOwogCXU4CQkJCW51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi8KLQl1OAkJCQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU4CQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgogCQkJCQkJICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW4KIAkJCQkJCSAgICAgICogICAgVFMgb2YgU1lOJiM0MztBQ0sKIAkJCQkJCSAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuCiAJCQkJCQkgICAgICAqLwotCXU4CQkJCW51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqLwomIzQzOwkJCXU4CQludW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi8KJiM0MzsJCX07CiYjNDM7CQl1OAkJbnVtX3RpbWVvdXRfc3luY29va2llOwomIzQzOwl9OwogCXUzMgkJCQl0c19yZWNlbnQ7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXJza190aW1lcjsKIAljb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcwkqcnNrX29wczsKQEAgLTc0LDYgJiM0Mzs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHsKIAl1MzIJCQkJdGltZW91dDsKIH07CiAKJiM0MztzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS0mZ3Q7bnVtX3RpbWVvdXRfc3luY29va2llKTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmZ3Q7Jmd0OyAxOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBudW1fdGltZW91dCAmYW1wOyAweDdmOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0xODMsNiAmIzQzOzE4Myw4IEBAIHN0YXRpY19hc3NlcnQoKDEgJmx0OyZsdDsgQVRPX0JJVFMpICZndDsgVENQX0RFTEFDS19NQVgpOwogI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTAkzMjc2NwogI2RlZmluZSBNQVhfVENQX0tFRVBDTlQJCTEyNwogI2RlZmluZSBNQVhfVENQX1NZTkNOVAkJMTI3CiYjNDM7LyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqLwomIzQzOyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUwkxMjcKIAogLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHMKICAqIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhpcyBhc3N1bWVzIGEgY2xvY2sgc21hbGxlciB0aGFuIDEgTWh6LgpAQCAtODgxLDEyICYjNDM7ODgzLDIzIEBAIHN0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKIAlyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtJmd0O3NydHRfdXMgJmd0OyZndDsgMykgJiM0MzsgdHAtJmd0O3J0dHZhcl91cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXU2NCB0aW1lb3V0ID0gKHU2NClyZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dDsKJiM0MzsJdTY0IHRpbWVvdXQgPSBSRUFEX09OQ0UocmVxLSZndDt0aW1lb3V0KTsKJiM0MzsJdTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7CiYjNDM7CXU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTsKJiM0MzsKJiM0MzsJaWYgKG51bV90aW1lb3V0ICZndDs9IEJJVFNfUEVSX1RZUEUodGltZW91dCkgfHwKJiM0MzsJICAgIHRpbWVvdXQgJmd0OyBVNjRfTUFYICZndDsmZ3Q7IG51bV90aW1lb3V0KQomIzQzOwkJcmV0dXJuIHJ0b19tYXg7CiYjNDM7CiYjNDM7CXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQgJmx0OyZsdDsgbnVtX3RpbWVvdXQsIHJ0b19tYXgpOwomIzQzO30KIAotCXJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsCi0JCQkJICAgIHRjcF9ydG9fbWF4KHJlcS0mZ3Q7cnNrX2xpc3RlbmVyKSk7CiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtJmd0O3Jza19saXN0ZW5lciwgcmVxKTsKIH0KIAogdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li4yMWY5NmE1MGMxMGZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTEwNjgsNiAmIzQzOzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCW5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTsKIAltYXhfc3luX2Fja19yZXRyaWVzID0gUkVBRF9PTkNFKGljc2stJmd0O2ljc2tfc3luX3JldHJpZXMpID8gOgogCQlSRUFEX09OQ0UobmV0LSZndDtpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpOwomIzQzOwltYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLAomIzQzOwkJCQkgICAgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7CiAJLyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmUKIAkgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC4KIAkgKiBJZiBzeW5hY2sgd2FzIG5vdCBhY2tub3dsZWRnZWQgZm9yIDEgc2Vjb25kLCBpdCBtZWFucwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMzU3LDcgJiM0MzszNTcsNyBAQCBzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpCiAJCWludCBwZXJpb2QgPSB0aW1lb3V0OwogCiAJCXJlcyA9IDE7Ci0JCXdoaWxlIChzZWNvbmRzICZndDsgcGVyaW9kICZhbXA7JmFtcDsgcmVzICZsdDsgMjU1KSB7CiYjNDM7CQl3aGlsZSAoc2Vjb25kcyAmZ3Q7IHBlcmlvZCAmYW1wOyZhbXA7IHJlcyAmbHQ7IE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHsKIAkJCXJlcyYjNDM7JiM0Mzs7CiAJCQl0aW1lb3V0ICZsdDsmbHQ7PSAxOwogCQkJaWYgKHRpbWVvdXQgJmd0OyBydG9fbWF4KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBlNTZlYWU0YmMzNDFlLi4yZDJkZWMxZTkxNTY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtNDY0LDExICYjNDM7NDY0LDEzIEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAKIAl0Y3Bfc3luX2Fja190aW1lb3V0KHJlcSk7CiAKLQkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLgomIzQzOwkvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW4KJiM0MzsJICogcmVwcmVzZW50IGl0LgogCSAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KCkKIAkgKi8KIAltYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLSZndDtpY3NrX3N5bl9yZXRyaWVzKSA/IDoKIAkJUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS0mZ3Q7aXB2NC5zeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzKSAmIzQzOyAxOwomIzQzOwltYXhfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3JldHJpZXMsIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpOwogCiAJaWYgKHJlcS0mZ3Q7bnVtX3RpbWVvdXQgJmd0Oz0gbWF4X3JldHJpZXMpIHsKIAkJdGNwX3dyaXRlX2Vycihzayk7CkBAIC00OTAsNyAmIzQzOzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJaWYgKCF0cC0mZ3Q7cmV0cmFuc19zdGFtcCkKIAkJdHAtJmd0O3JldHJhbnNfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcF90cyh0cCk7CiAJdGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLAotCQkJICByZXEtJmd0O3RpbWVvdXQgJmx0OyZsdDsgcmVxLSZndDtudW1fdGltZW91dCwgZmFsc2UpOwomIzQzOwkJCSAgICAgdGNwX3JlcXNrX3RpbWVvdXRfc2soc2ssIHJlcSksIGZhbHNlKTsKIH0KIAogc3RhdGljIGJvb2wgdGNwX3J0eF9wcm9iZTBfdGltZWRfb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIHJ1bnMgd2UmIzM5O3JlIGFscmVhZHkgZG9pbmcuICBUaGUgZm9jdXMgaGVyZSBpcyByZWFsbHkgb24gZGV0ZXJtaW5pbmcgaWYgdGhlcmUmIzM5O3MgZW5vdWdoICpuZXcqIGNvZGUgc3VyZmFjZSBvciBzdWZmaWNpZW50bHkgaW50ZXJlc3RpbmcgbG9naWMgaW50cm9kdWNlZCB0byBtYWtlIGEgZm9jdXNlZCBLTVNBTiBzZXNzaW9uIHdvcnRod2hpbGUuCgpGaXJzdCwgbGV0JiMzOTtzIHdhbGsgdGhyb3VnaCB0aGUgZGlmZi4gIEl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSB0b3VjaGluZyBkb2N1bWVudGF0aW9uIGFuZCB2YXJpb3VzIG5ldHdvcmstcmVsYXRlZCBmaWxlcy4gU3BlY2lmaWNhbGx5OgoKKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBVcGRhdGVzIHRoZSBgdGNwX3N5bmFja19yZXRyaWVzYCBkb2N1bWVudGF0aW9uLiBEb2VzbiYjMzk7dCBzZWVtIHJlbGV2YW50IGZvciBLTVNBTiBkaXJlY3RseSwgYnV0IGdvb2QgdG8ga25vdyBpdCYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZC4KKiAgICoqYGluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oYDoqKiAgQSBiaXRmaWVsZCBpbiB0aGUgYHJlcXVlc3Rfc29ja2Agc3RydWN0IGlzIGJlaW5nIHJld29ya2VkLiBUaGUgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgZmllbGRzIGFyZSBiZWluZyByZWZhY3RvcmVkLCBhbmQgYSBoZWxwZXIgZnVuY3Rpb24gYHJlcXNrX251bV90aW1lb3V0YCBpcyBhZGRlZC4gVGhlIGJpdGZpZWxkIG1hbmlwdWxhdGlvbiBtaWdodCBiZSBhbiBhcmVhIG9mIGludGVyZXN0LiBBbnkgY2hhbmdlcyB0byBob3cgd2UgYXJlIGNhbGN1bGF0aW5nIGFuZCBtYW5hZ2luZyByZXRyaWVzIGFuZCB0aW1lb3V0cywgZXNwZWNpYWxseSBpbnZvbHZpbmcgYml0ZmllbGRzLCBjYW4gbGVhZCB0byBpbnRlcmVzdGluZyBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXRpZXMuCiogICAqKmBpbmNsdWRlL25ldC90Y3AuaGA6KiogRGVmaW5lcyBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AuIFRoaXMgaW50cm9kdWNlcyBhIG5ldyB1cHBlciBib3VuZCBmb3IgcmV0cmllcy4gIFRoZSBjYWxjdWxhdGlvbiBvZiB0aW1lb3V0IHVzZXMgYSBzaGlmdCBvcGVyYXRpb24gd2l0aCBhIHByb3RlY3Rpb24gYWdhaW5zdCBvdmVyZmxvdyBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgLCB3aGljaCB3YXJyYW50cyBzY3J1dGlueS4gIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IHNvIGZhciwgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBvdmVyZmxvdyBidWdzLgoqICAgKipgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6KiogIENhcHBpbmcgYG1heF9zeW5fYWNrX3JldHJpZXNgLiAgQW5vdGhlciBsaW1pdC4KKiAgICoqYG5ldC9pcHY0L3RjcC5jYDoqKiAgTGltaXRzIHRoZSByZXRyaWVzIGluIHRoZSBgc2Vjc190b19yZXRyYW5zYCBmdW5jdGlvbi4KKiAgICoqYG5ldC9pcHY0L3RjcF90aW1lci5jYDoqKiBDYXBzIGBtYXhfcmV0cmllc2AgYW5kIHJlcGxhY2VzIHNvbWUgY2FsY3VsYXRpb25zIHdpdGggdGhlIGB0Y3BfcmVxc2tfdGltZW91dF9za2AgaGVscGVyLiBUaGUgY29tYmluYXRpb24gb2YgY2FwcGluZyBhbmQgdGhlIGhlbHBlciBmdW5jdGlvbiBoZXJlIGlzIGludGVyZXN0aW5nLgoKVGhlIHBhdHRlcm4gZW1lcmdpbmcgaXMgdGhhdCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgdGhlIHJldHJ5L3RpbWVvdXQgbG9naWMgZm9yIFRDUCBTWU4tQUNLcywgYWRkaW5nIGxpbWl0cyBhbmQgcmUtZG9pbmcgdGhlIGNhbGN1bGF0aW9ucyB0byBtYWtlIHRoZW0gc2FmZXIuIEJpdGZpZWxkIGNoYW5nZXMgcGx1cyBuZXcgdGltZW91dCBjYWxjdWxhdGlvbiBhbmQgb3ZlcmZsb3cgcHJvdGVjdGlvbiBtZWFucyB0aGVyZSBtaWdodCBiZSBtb3JlIGNoYW5jZXMgb2Ygc29tZXRoaW5nIGdvaW5nIHdyb25nLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7ZCBkbyBpcyBsb29rIGNsb3NlbHkgYXQgaG93IGByZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgbXkgcHJlZmVycmVkIHRvb2wgdG8gc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3Igd2hlcmUgYW5kIGhvdyBgcmVxdWVzdF9zb2NrYCBzdHJ1Y3R1cmVzIGFyZSB1c2VkLiBUaGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgd2hlcmUgdGhlc2Uga2luZCBvZiBidWdzIHR5cGljYWxseSBvcmlnaW5hdGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIGhvdyB0aGUgYml0ZmllbGRzIGFuZCB0aGUgdGltZW91dCB2YWx1ZSBhcmUgYmVpbmcgc2V0LiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmaWVsZHMgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kLgoKQmFzZWQgb24gdGhlIGluaXRpYWwgaW5zcGVjdGlvbiwgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIG1pZ2h0IHdhcnJhbnQgYSAqZm9jdXNlZCogS01TQU4gZnV6emluZyBzZXNzaW9uLCBidXQgSSB3b3VsZCBuZWVkIHRvIGFuYWx5emUgdGhlIGByZXF1ZXN0X3NvY2tgIGFsbG9jYXRpb24gYW5kIHVzYWdlIG1vcmUgdG8gYmUgY2VydGFpbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueXRoaW5nIHRoYXQgaW52b2x2ZXMgdGhlIGJpdGZpZWxkcyAoYHN5bmNvb2tpZWAsIGBudW1fdGltZW91dGApLCB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiAoZXNwZWNpYWxseSB0aGUgc2hpZnQgb3BlcmF0aW9uKSwgYW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgbGltaXRzIHRoYXQgd2VyZSBhZGRlZCwgdG8gZmlndXJlIG91dCBpZiB3ZSBoYXZlIGludGVyZXN0aW5nIG1lbW9yeSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXFza19hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MTI1MDU9X19icGZfa2Z1bmMgaW50IGJwZl9za19hc3NpZ25fdGNwX3JlcXNrKHN0cnVjdCBfX3NrX2J1ZmYgKnMsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU2OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTcwOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3MS1cdGlmICghcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODQ5PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODUwOnJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg1MS1cdFx0ICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzgtfVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Nzk6I2RlZmluZSByZXFza19hbGxvYyguLi4pXHRhbGxvY19ob29rcyhyZXFza19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODAtXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4MTpzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4NC17XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4NTpcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg4Ni1cdFx0XHRcdFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE3LVxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMjctXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxubmV0L2lwdjQvc3luY29va2llcy5jOjMyODpcdFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzI5LVx0ZWxzZVxubmV0L2lwdjQvc3luY29va2llcy5jOjMzMDpcdFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzMxLVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0zNTg9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM5NC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTU6XHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTYtXHRcdFx0XHQgICAgICBcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjYxOlx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NjItXHRpZiAoIXJlcSlcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0xNjctXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTY4Olx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2OS1cdFx0XHRcdCAgICAgIFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzI4PXN0YXRpYyB2b2lkIHN1YmZsb3dfdjZfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzM0LVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MzU6c3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzYtXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDUtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0NjpcdHJldHVybiBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsIGF0dGFjaF9saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Ny19XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0ODpFWFBPUlRfU1lNQk9MKG1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MpO1xubmV0L21wdGNwL3N1YmZsb3cuYy03NDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgcmVxc2tfYWxsb2Nfbm9wcm9mYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHJlcXNrX2FsbG9jX25vcHJvZmAgd2l0aGluIGBuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiB0aGUgYWxsb2NhdGlvbiBvZiByZXF1ZXN0IHNvY2tldHMsIGxpa2VseSBmb3IgY29ubmVjdGlvbiBhdHRlbXB0cywgd2l0aG91dCB0aGUgb3ZlcmhlYWQgb2YgcHJvZmlsaW5nIGRhdGEuIFRoYXQgJiMzNDtub3Byb2YmIzM0OyBzdWZmaXggaXMgYSBwcmV0dHkgc3Ryb25nIGhpbnQuIEl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBjcml0aWNhbCBhbmQgZGV0YWlsZWQgcHJvZmlsaW5nIGlzbiYjMzk7dCBuZWNlc3NhcnksIG1heWJlIGR1cmluZyBoaWdoLXZvbHVtZSBjb25uZWN0aW9uIHN0b3JtcyBvciBzaW1pbGFyLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lICp3aGVuKiB0aGlzIG9wdGltaXphdGlvbiBpcyB1c2VkIGFuZCB3aHkgYSBwcm9maWxlLWZyZWUgYWxsb2NhdGlvbiBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBoZXJlLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgc3BlY2lhbCBtZW1vcnkgcG9vbHMgb3IgY2FjaGluZyBzdHJhdGVnaWVzIHRvIHNwZWVkIHRoaW5ncyB1cC4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSBjYWxscyB0byBga3phbGxvY2AsIGBrbWFsbG9jYCBvciBzaW1pbGFyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdHJhZGUtb2ZmcyBiZWluZyBtYWRlIGhlcmUg4oCTIG1lbW9yeSB1c2FnZSB2ZXJzdXMgcHJvZmlsaW5nIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvY2tpbmcgc3RyYXRlZ2llcyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBvciBpdHMgY2FsbGVycy9jYWxsZWVzLiBUaGlzIG9uZSBzaG91bGQgYmUgaW50ZXJlc3RpbmcsIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQ1Olx0XHQqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktXHUwMDNlYWNrZWQgfHxcbiA4NDY6XHRcdFx0ICByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCAtIDE7XG4gODQ3Olx0fVxuIDg0ODpcdFxuIDg0OTpcdHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcbiA4NTA6XHRyZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuIDg1MTpcdFx0XHQgICBib29sIGF0dGFjaF9saXN0ZW5lcilcbiA4NTI6XHR7XG4gODUzOlx0XHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gODU0Olx0XG4gODU1Olx0XHRyZXEgPSBrbWVtX2NhY2hlX2FsbG9jX25vcHJvZihvcHMtXHUwMDNlc2xhYiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gODU2Olx0XHRpZiAoIXJlcSlcbiA4NTc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gODU4Olx0XHRyZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gTlVMTDtcbiA4NTk6XHRcdGlmIChhdHRhY2hfbGlzdGVuZXIpIHtcbiA4NjA6XHRcdFx0aWYgKHVubGlrZWx5KCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2tfbGlzdGVuZXItXHUwMDNlc2tfcmVmY250KSkpIHtcbiA4NjE6XHRcdFx0XHRrbWVtX2NhY2hlX2ZyZWUob3BzLVx1MDAzZXNsYWIsIHJlcSk7XG4gODYyOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gODYzOlx0XHRcdH1cbiA4NjQ6XHRcdFx0cmVxLVx1MDAzZXJza19saXN0ZW5lciA9IHNrX2xpc3RlbmVyO1xuIDg2NTpcdFx0fVxuIDg2NjpcdFx0cmVxLVx1MDAzZXJza19vcHMgPSBvcHM7XG4gODY3Olx0XHRyZXFfdG9fc2socmVxKS1cdTAwM2Vza19wcm90ID0gc2tfbGlzdGVuZXItXHUwMDNlc2tfcHJvdDtcbiA4Njg6XHRcdHNrX25vZGVfaW5pdChcdTAwMjZyZXFfdG9fc2socmVxKS1cdTAwM2Vza19ub2RlKTtcbiA4Njk6XHRcdHNrX3R4X3F1ZXVlX2NsZWFyKHJlcV90b19zayhyZXEpKTtcbiA4NzA6XHRcdHJlcS1cdTAwM2VzYXZlZF9zeW4gPSBOVUxMO1xuIDg3MTpcdFx0cmVxLVx1MDAzZXN5bmNvb2tpZSA9IDA7XG4gODcyOlx0XHRyZXEtXHUwMDNlbnVtX3RpbWVvdXQgPSAwO1xuIDg3MzpcdFx0cmVxLVx1MDAzZW51bV9yZXRyYW5zID0gMDtcbiA4NzQ6XHRcdHJlcS1cdTAwM2VzayA9IE5VTEw7XG4gODc1Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cmVxLVx1MDAzZXJza19yZWZjbnQsIDApO1xuIDg3NjpcdFxuIDg3NzpcdFx0cmV0dXJuIHJlcTtcbiA4Nzg6XHR9XG4gODc5Olx0I2RlZmluZSByZXFza19hbGxvYyguLi4pXHRhbGxvY19ob29rcyhyZXFza19hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuIDg4MDpcdFxuIDg4MTpcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiA4ODI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiA4ODM6XHRcdFx0XHRcdCAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxuIDg4NDpcdHtcbiA4ODU6XHRcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IHJlcXNrX2FsbG9jKG9wcywgc2tfbGlzdGVuZXIsXG4gODg2Olx0XHRcdFx0XHRcdCAgICAgICBhdHRhY2hfbGlzdGVuZXIpO1xuIDg4NzpcdFxuIDg4ODpcdFx0aWYgKHJlcSkge1xuIDg4OTpcdFx0XHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBhbmQgUmVsYXRlZCBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBmdW5jdGlvbi4gSSBzZWUgcmlnaHQgYXdheSB0aGF0IGByZXEtJmd0O3N5bmNvb2tpZSA9IDA7YCBhbmQgYHJlcS0mZ3Q7bnVtX3RpbWVvdXQgPSAwO2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIFRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZSwgZW5zdXJpbmcgYSBrbm93biBzdGFydGluZyBzdGF0ZS4KCk5vdywgSSYjMzk7bSBjdXJpb3VzIGFib3V0IGhvdyBgcmVxc2tfbnVtX3RpbWVvdXRgIHdvcmtzLCBzbyBsZXQmIzM5O3MgcGVlayBhdCB0aGF0OgoKYGBgYwpzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKewoJdTggbnVtX3RpbWVvdXQgPSBSRUFEX09OQ0UocmVxLSZndDtudW1fdGltZW91dF9zeW5jb29raWUpOwoKI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQoJcmV0dXJuIG51bV90aW1lb3V0ICZndDsmZ3Q7IDE7CiNlbHNlCglyZXR1cm4gbnVtX3RpbWVvdXQgJmFtcDsgMHg3ZjsKI2VuZGlmCn0KYGBgCgpXYWl0IGEgc2Vjb25k4oCmICBJdCBsb29rcyBsaWtlIGByZXEtJmd0O251bV90aW1lb3V0YCBpcyBhIGJpdGZpZWxkIHdpdGhpbiBgbnVtX3RpbWVvdXRfc3luY29va2llYCEgIExldCBtZSBjaGVjayB0aGUgc3RydWN0IGRlZmluaXRpb24gdG8gY29uZmlybSBteSBzdXNwaWNpb25zOgoKYGBgYwoJdW5pb24gewoJCXN0cnVjdCB7CgkJCXU4CQlzeW5jb29raWU6MTsgLyogVHJ1ZSBpZgoJCQkJCQkgICAgICAqIDEpIHRjcG9wdHMgbmVlZHMgdG8gYmUgZW5jb2RlZCBpbgoJCQkJCQkgICAgICAqICAgIFRTIG9mIFNZTiYjNDM7QUNLCgkJCQkJCSAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuCgkJCQkJCSAgICAgICovCgkJCXU4CQludW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi8KCQl9OwoJCXU4CQludW1fdGltZW91dF9zeW5jb29raWU7Cgl9OwpgYGAKClllcywgaXQmIzM5O3MgYSB1bmlvbi4gIGBzeW5jb29raWVgIGlzIGEgc2luZ2xlIGJpdCwgYW5kIGBudW1fdGltZW91dGAgdXNlcyB0aGUgb3RoZXIgNyBiaXRzIG9mIHRoZSBieXRlLiAgVGhlcmVmb3JlLCB3aGVuIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGFyZSBib3RoIGFzc2lnbmVkIHRvIDAsIGFsbCA4IGJpdHMgb2YgYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgYXJlIGJlaW5nIHNldCwgd2hpY2ggbWVhbnMgdGhlIHdob2xlIGJ5dGUgaXMgaW5pdGlhbGl6ZWQsIGV2ZW4gd2hlbiB1c2luZyBga21lbV9jYWNoZV9hbGxvY2AuIEV4Y2VsbGVudCwgdGhhdCBzZWVtcyBjbGVhci4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBJJiMzOTtsbCBxdWlja2x5IGRvIGEgZ3JlcCBhY3Jvc3MgdGhlIHRyZWUgZm9yIGBzeW5jb29raWVgIG9yIGBudW1fdGltZW91dGAgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHBsYWNlcyB3aGVyZSB0aGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgb3Igd2hlcmUgYG51bV90aW1lb3V0X3N5bmNvb2tpZWAsIGBudW1fdGltZW91dGAgb3IgYHN5bmNvb2tpZWAgYXJlIG1vZGlmaWVkLiBUaGlzIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHBvdGVudGlhbGx5IHRvdWNoaW5nIHRoaXMgbWVtb3J5IHNwYWNlIGluIGEgd2F5IHRoYXQgSSYjMzk7bSBub3QgZXhwZWN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1fdGltZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04Mjk9c3RhdGljIHZvaWQgc3luX2Fja19yZWNhbGMoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODM0LVx0aWYgKCFyc2txX2RlZmVyX2FjY2VwdCkge1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4MzU6XHRcdCpleHBpcmUgPSByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSBtYXhfc3luX2Fja19yZXRyaWVzO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzYtXHRcdCpyZXNlbmQgPSAxO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODM4LVx0fVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Mzk6XHQqZXhwaXJlID0gcmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gbWF4X3N5bl9hY2tfcmV0cmllcyBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQwOlx0XHQgICghaW5ldF9yc2socmVxKS1cdTAwM2VhY2tlZCB8fCByZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0MS1cdC8qIERvIG5vdCByZXNlbmQgd2hpbGUgd2FpdGluZyBmb3IgZGF0YSBhZnRlciBBQ0ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDUtXHQqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktXHUwMDNlYWNrZWQgfHxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQ2Olx0XHQgIHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0IC0gMTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODQ3LX1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTg1MD1yZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODcxLVx0cmVxLVx1MDAzZXN5bmNvb2tpZSA9IDA7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg3MjpcdHJlcS1cdTAwM2VudW1fdGltZW91dCA9IDA7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg3My1cdHJlcS1cdTAwM2VudW1fcmV0cmFucyA9IDA7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05Njc9c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05Njkte1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5NzA6XHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0ID09IDApXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk3MS1cdFx0YXRvbWljX2luYyhcdTAwMjZxdWV1ZS1cdTAwM2V5b3VuZyk7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMDMzPXN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTEyLVx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2VhY2NlY25fZmFpbF9tb2RlIHw9IFRDUF9BQ0NFQ05fQUNFX0ZBSUxfU0VORDtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTExMzpcdFx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCYjNDM7JiM0MzsgPT0gMClcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTExNC1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNnF1ZXVlLVx1MDAzZXlvdW5nKTtcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMzUtXHQvKiBFdmVuIGlmIHdlIGNhbiBjbG9uZSB0aGUgcmVxLCB3ZSBtYXkgbmVlZCBub3QgcmV0cmFuc21pdCBhbnkgbW9yZVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTM2Olx0ICogU1lOJiM0MztBQ0tzIChucmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZSBtYXhfc3luX2Fja19yZXRyaWVzLCBldGMpLCBvciBhbm90aGVyXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMzctXHQgKiBDUFUgbWF5IHdpbiB0aGUgXCYjMzQ7b3duX3JlcVwmIzM0OyByYWNlIHNvIHRoYXQgaW5ldF9laGFzaF9pbnNlcnQoKSBmYWlscy5cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI3NDQ9c3RhdGljIHZvaWQgZ2V0X29wZW5yZXE0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTI3NjAtXHRcdGppZmZpZXNfZGVsdGFfdG9fY2xvY2tfdChkZWx0YSksXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjI3NjE6XHRcdHJlcS1cdTAwM2VudW1fdGltZW91dCxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2Mi1cdFx0ZnJvbV9rdWlkX211bmdlZChzZXFfdXNlcl9ucyhmKSxcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02MjUtXHR9XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjI2Olx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjYyNzpcdFx0bmV3dHAtXHUwMDNldG90YWxfcnRvID0gcmVxLVx1MDAzZW51bV90aW1lb3V0O1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyOC1cdFx0bmV3dHAtXHUwMDNldW5kb19tYXJrZXIgPSB0cmVxLVx1MDAzZXNudF9pc247XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMC1cdC8qIFdoaWxlIFRDUF9ERUZFUl9BQ0NFUFQgaXMgYWN0aXZlLCBkcm9wIGJhcmUgQUNLLiAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjkyMTpcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNjIFJFQURfT05DRShpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQpIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMi1cdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSA9PSB0Y3BfcnNrKHJlcSktXHUwMDNlcmN2X2lzbiAmIzQzOyAxKSB7XG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NDU5PXN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDc0LVxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDc1Olx0aWYgKHJlcS1cdTAwM2VudW1fdGltZW91dCBcdTAwM2U9IG1heF9yZXRyaWVzKSB7XG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NzYtXHRcdHRjcF93cml0ZV9lcnIoc2spO1xuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ4OS1cdFx0dGNwX3JzayhyZXEpLVx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDkwOlx0cmVxLVx1MDAzZW51bV90aW1lb3V0JiM0MzsmIzQzOztcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ5MS1cdHRjcF91cGRhdGVfcnRvX3N0YXRzKHNrKTtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTIwOTQ9c3RhdGljIHZvaWQgZ2V0X29wZW5yZXE2KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjExNy1cdFx0ICAgamlmZmllc190b19jbG9ja190KHR0ZCksXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIxMTg6XHRcdCAgIHJlcS1cdTAwM2VudW1fdGltZW91dCxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjExOS1cdFx0ICAgZnJvbV9rdWlkX211bmdlZChzZXFfdXNlcl9ucyhzZXEpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcywgdGhpbmtpbmcgb3V0IGxvdWQ6CgoqKlByb2JpbmcgQ29va2llIEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgcGFyYW1ldGVycyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBjb29raWUgY3JlYXRpb24gcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0aG9yb3VnaGx5IGV4YW1pbmluZyB0aGUgYGNvb2tpZV9icGZfY2hlY2tgIGZ1bmN0aW9uLCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTtsbCBleHRlbmQgbXkgc2VhcmNoIHRvIGFueSBvdGhlciBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gY3JhZnRpbmcgdGhlc2UgY29va2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0aGF0IHRoZXNlIGNyaXRpY2FsIHZhcmlhYmxlcyBoYXZlIHNlbnNpYmxlLCBkZWZhdWx0IHZhbHVlcyAob3IgYXJlIGR5bmFtaWNhbGx5IHNldCBhcyBuZWVkZWQpIGFzIHNvb24gYXMgdGhlIGNvb2tpZSBpcyBnZW5lcmF0ZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBiZWluZyBleHBsaWNpdGx5IGFkZHJlc3NlZCBhbmQgY29uZmlndXJlZCwgcmF0aGVyIHRoYW4gYmVpbmcgbGVmdCB0byBzb21lIHVuZGVmaW5lZCBzdGF0ZSBvciBpbXBsaWVkIGZyb20gZWxzZXdoZXJlLCBiZWNhdXNlIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2Ugdml0YWwgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBjb25zaXN0ZW50bHkgYW5kIHByZWRpY3RhYmx5IGFjcm9zcyBhbGwgcmVsZXZhbnQgY29va2llIGNyZWF0aW9uIHJvdXRpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb29raWVfdGNwX3JlcXNrX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9zeW5jb29raWVzLmM9MzAyPXN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV9icGZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTctXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzE4OnN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTktXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzk0LVxubmV0L2lwdjQvc3luY29va2llcy5jOjM5NTpcdHJldHVybiBjb29raWVfdGNwX3JlcXNrX2FsbG9jKFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5Ni1cdFx0XHRcdCAgICAgIFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xMzE9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTE2Ny1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxNjg6XHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTY5LVx0XHRcdFx0ICAgICAgXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb29raWUgQWxsb2NhdG9yKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY29va2llX3RjcF9yZXFza19hbGxvY2Agd2l0aGluIGBuZXQvaXB2NC9zeW5jb29raWVzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIHdvcmtzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBmb3IgdGhlIGByZXFza2Agc3RydWN0dXJlcyB3aGVuIFRDUCBzeW5jb29raWVzIGFyZSBlbmFibGVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgZHVyaW5nIHRpbWVzIG9mIFNZTiBmbG9vZCBhdHRhY2tzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1dGlsaXplZCBhbmQgaG93IHRoZXkgYXJlIGluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbnkgcm9idXN0IFRDUCBpbXBsZW1lbnRhdGlvbiBhbmQgYSB0aG9yb3VnaCBncmFzcCBvZiBpdCBpcyBlc3NlbnRpYWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3N5bmNvb2tpZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE4Olx0c3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxuIDMxOTpcdFx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDMyMDpcdFx0XHRcdFx0XHQgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICp0Y3Bfb3B0LFxuIDMyMTpcdFx0XHRcdFx0XHQgICAgaW50IG1zcywgdTMyIHRzb2ZmKVxuIDMyMjpcdHtcbiAzMjM6XHRcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTtcbiAzMjQ6XHRcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxO1xuIDMyNTpcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xuIDMyNjpcdFxuIDMyNzpcdFx0aWYgKHNrX2lzX21wdGNwKHNrKSlcbiAzMjg6XHRcdFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XG4gMzI5Olx0XHRlbHNlXG4gMzMwOlx0XHRcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2Mob3BzLCBzaywgZmFsc2UpO1xuIDMzMTpcdFxuIDMzMjpcdFx0aWYgKCFyZXEpXG4gMzMzOlx0XHRcdHJldHVybiBOVUxMO1xuIDMzNDpcdFxuIDMzNTpcdFx0aWYgKGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzaywgc2tiLCByZXEpKSB7XG4gMzM2Olx0XHRcdHJlcXNrX2ZyZWUocmVxKTtcbiAzMzc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzM4Olx0XHR9XG4gMzM5Olx0XG4gMzQwOlx0XHRpcmVxID0gaW5ldF9yc2socmVxKTtcbiAzNDE6XHRcdHRyZXEgPSB0Y3BfcnNrKHJlcSk7XG4gMzQyOlx0XG4gMzQzOlx0XHRyZXEtXHUwMDNlbXNzID0gbXNzO1xuIDM0NDpcdFx0cmVxLVx1MDAzZXRzX3JlY2VudCA9IHRjcF9vcHQtXHUwMDNlc2F3X3RzdGFtcCA/IHRjcF9vcHQtXHUwMDNlcmN2X3RzdmFsIDogMDtcbiAzNDU6XHRcbiAzNDY6XHRcdGlyZXEtXHUwMDNlc25kX3dzY2FsZSA9IHRjcF9vcHQtXHUwMDNlc25kX3dzY2FsZTtcbiAzNDc6XHRcdGlyZXEtXHUwMDNldHN0YW1wX29rID0gdGNwX29wdC1cdTAwM2VzYXdfdHN0YW1wO1xuIDM0ODpcdFx0aXJlcS1cdTAwM2VzYWNrX29rID0gdGNwX29wdC1cdTAwM2VzYWNrX29rO1xuIDM0OTpcdFx0aXJlcS1cdTAwM2V3c2NhbGVfb2sgPSB0Y3Bfb3B0LVx1MDAzZXdzY2FsZV9vaztcbiAzNTA6XHRcdGlyZXEtXHUwMDNlZWNuX29rID0gISEodGNwX29wdC1cdTAwM2VyY3ZfdHNlY3IgXHUwMDI2IFRTX09QVF9FQ04pO1xuIDM1MTpcdFxuIDM1MjpcdFx0dHJlcS1cdTAwM2VyZXFfdXNlY190cyA9IGZhbHNlO1xuIDM1MzpcdFx0dHJlcS1cdTAwM2V0c19vZmYgPSB0c29mZjtcbiAzNTQ6XHRcbiAzNTU6XHRcdHJldHVybiByZXE7XG4gMzU2Olx0fVxuIDM1NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNQoJCQkJCQkJb3V0cHV0OiAyNDIKCQkJCQkJCXRob3VnaHRzOiAxMDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3luY2hyb25pemF0aW9uIGFuZCBJbml0aWFsaXphdGlvbiBvZiBgc3luY29va2llYCBhbmQgYG51bV90aW1lb3V0YCBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhlIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGJpdGZpZWxkcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSSBzZWUgdGhhdCB0aGV5JiMzOTtyZSBwYWNrZWQgaW50byBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAuIFRoZSBrZXkgaXMgdXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIGF0b21pYyBhY2Nlc3MgdG8gYG51bV90aW1lb3V0X3N5bmNvb2tpZWAuIFRoaXMgc2lkZXN0ZXBzIHBvdGVudGlhbCBkYXRhIHJhY2VzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBub24tYXRvbWljIHJlYWRzIG9mIGluZGl2aWR1YWwgYml0ZmllbGRzLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBpbiBgcmVxc2tfYWxsb2Nfbm9wcm9mKClgLCBgcmVxLSZndDtzeW5jb29raWVgIGFuZCBgcmVxLSZndDtudW1fdGltZW91dGAgYXJlIGV4cGxpY2l0bHkgemVyb2VkLiBUaGlzIG1lYW5zIHRoZSBlbnRpcmUgYnl0ZSAoYG51bV90aW1lb3V0X3N5bmNvb2tpZWApIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBUaGlzIGluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwuCgpOb3csIGxldCYjMzk7cyBjb25uZWN0IHRoaXMgdG8gdGhlIHBvdGVudGlhbCBLTVNBTiBhbmQgS0FTQU4gaXNzdWVzLiBUaGUgY3JpdGVyaWEgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZToKMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UgaW4gdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYzoqKiBUaGUgY29kZSAqZG9lcyogcmVseSBvbiBgcmVxLSZndDtzeW5jb29raWVgIGFuZCBgcmVxLSZndDtudW1fdGltZW91dGAsIGJ1dCB0aGV5IGFyZSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhIHJpc2suCjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb246KiogVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuCjQuICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIGFjY2VzczoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBjaGVja3Mgd2l0aGluIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCB0byBwcmV2ZW50IHNoaWZ0IG92ZXJmbG93IGFuZCBjYXAgdGltZW91dCB2YWx1ZXMgYmFzZWQgb24gYG51bV90aW1lb3V0YC4gVGhpcyBpcyBwcmVjaXNlbHkgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmlza3MgaW4gYXJpdGhtZXRpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIGJ5dGUgd291bGQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4KClNvLCBkaWdnaW5nIGRlZXBlciwgSSBzZWUgdGhlIHBhdGNoIGRvZXMgc2V2ZXJhbCBnb29kIHRoaW5ncyB0byBtYWtlIHRoaXMgcm9idXN0OgoqICAgVXBkYXRlcyB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGltcG9ydGFudC4KKiAgIFVzZXMgdGhlIGFub255bW91cyBzdHJ1Y3QgaW5zaWRlIHRoZSB1bmlvbiBmb3Igc2FmZSBhY2Nlc3MgdG8gdGhlIGJpdGZpZWxkcy4KKiAgIEludHJvZHVjZXMgdGhlIGByZXFza19udW1fdGltZW91dCgpYCBmdW5jdGlvbiB1c2luZyBgUkVBRF9PTkNFYCB0byBnZXQgdGhlIHZhbHVlLgoqICAgQm91bmRzIHRoZSByZXRyeSBjb3VudCB3aXRoIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIGhhdmUgb25seSA3IGJpdHMuCiogICBUaGUgYHRjcF9yZXFza190aW1lb3V0X3NrKClgIGluY2x1ZGVzIGV4cGxpY2l0IGJvdW5kcyBjaGVja3MuCgpHaXZlbiBhbGwgb2YgdGhpcywgdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbmQgdGhlIGJvdW5kcyBhcmUgY2hlY2tlZCBpbiB0aGUgaW1wb3J0YW50IHBsYWNlcy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gTm93LCB0aW1lIHRvIGxvZyB0aGF0IGluIHRoZSBzeXN0ZW0gd2l0aCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZSByZWxldmFudCByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBiaXRmaWVsZCBkYXRhIHJhY2Ugc2FmZXR5IGFuZCBpbnRlZ2VyL3NoaWZ0IG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gdGltZW91dHMgZm9yIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSXQgYWRkcyBhIHVuaW9uIHdpdGggYG51bV90aW1lb3V0X3N5bmNvb2tpZWAgdG8gYWxsb3cgbG9ja2xlc3Mgc2luZ2xlLWJ5dGUgYFJFQURfT05DRWAgcmVhZHMgb2YgdGhlIDctYml0IGBudW1fdGltZW91dGAgZmllbGQsIGNhcHMgbWF4aW11bSBTWU4tQUNLIHJldHJpZXMgdG8gMTI3IChtYXRjaGluZyB0aGUgNy1iaXQgZmllbGQgd2lkdGgpLCBhbmQgcHJldmVudHMgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuXG5cbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NDQuMzc3OTA1MzQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5OTU5OTU3MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcXNrX3RpbWVyX2hhbmRsZXJcIixcbiAgICBcInRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJcIixcbiAgICBcImRvX3RjcF9zZXRzb2Nrb3B0XCIsXG4gICAgXCJ0Y3BfY2hlY2tfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYml0ZmllbGQgZGF0YSByYWNlIHNhZmV0eSBhbmQgaW50ZWdlci9zaGlmdCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGZvciBgc3RydWN0IHJlcXVlc3Rfc29ja2AuIEl0IGFkZHMgYSB1bmlvbiB3aXRoIGBudW1fdGltZW91dF9zeW5jb29raWVgIHRvIGFsbG93IGxvY2tsZXNzIHNpbmdsZS1ieXRlIGBSRUFEX09OQ0VgIHJlYWRzIG9mIHRoZSA3LWJpdCBgbnVtX3RpbWVvdXRgIGZpZWxkLCBjYXBzIG1heGltdW0gU1lOLUFDSyByZXRyaWVzIHRvIDEyNyAobWF0Y2hpbmcgdGhlIDctYml0IGZpZWxkIHdpZHRoKSwgYW5kIHByZXZlbnRzIHVuZGVmaW5lZCBzaGlmdCBiZWhhdmlvciBpbiBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgLlxcblxcbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NDQuMzc3OTExMjI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MTAxMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTA4MWU3YzM1YmE2YTQwODAwNWJmYTc0NjkwMjk3MmU1ZTI3OGI4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXG5pbmRleCAyMDhmNDY5NjdlZTU5Li40YTJlZDk2NGRjZWFiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXG5AQCAtOTU0LDcgKzk1NCw5IEBAIHRjcF9zdGR1cmcgLSBCT09MRUFOXFxuIFxcbiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSXFxuIFxcdE51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsXFxuLVxcdGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlXFxuK1xcdGJlIHJldHJhbnNtaXR0ZWQuIFRoZSBzeXNjdGwgYWNjZXB0cyAwLTI1NS4gVmFsdWVzIGFib3ZlIDEyNyBhcmVcXG4rXFx0c2lsZW50bHkgY2FwcGVkIGJ5IHRoZSBTWU4tQUNLIHRpbWVycywgbWF0Y2hpbmcgdGhlIDctYml0XFxuK1xcdHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgZmllbGQuIERlZmF1bHQgdmFsdWVcXG4gXFx0aXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb25cXG4gXFx0d2l0aCB0aGUgY3VycmVudCBpbml0aWFsIFJUTyBvZiAxc2Vjb25kLiBXaXRoIHRoaXMgdGhlIGZpbmFsIHRpbWVvdXRcXG4gXFx0Zm9yIGEgcGFzc2l2ZSBUQ1AgY29ubmVjdGlvbiB3aWxsIGhhcHBlbiBhZnRlciA2M3NlY29uZHMuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcXG5pbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcXG5AQCAtNTgsMTIgKzU4LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xcbiBcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrXFx0XFx0KmRsX25leHQ7XFxuIFxcdHUxNlxcdFxcdFxcdFxcdG1zcztcXG4gXFx0dThcXHRcXHRcXHRcXHRudW1fcmV0cmFuczsgLyogbnVtYmVyIG9mIHJldHJhbnNtaXRzICovXFxuLVxcdHU4XFx0XFx0XFx0XFx0c3luY29va2llOjE7IC8qIFRydWUgaWZcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1OFxcdFxcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICogMSkgdGNwb3B0cyBuZWVkcyB0byBiZSBlbmNvZGVkIGluXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICogICAgVFMgb2YgU1lOK0FDS1xcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAqIDIpIEFDSyBpcyB2YWxpZGF0ZWQgYnkgQlBGIGtmdW5jLlxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAqL1xcbi1cXHR1OFxcdFxcdFxcdFxcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xcbitcXHRcXHRcXHR1OFxcdFxcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xcbitcXHRcXHR9O1xcbitcXHRcXHR1OFxcdFxcdG51bV90aW1lb3V0X3N5bmNvb2tpZTtcXG4rXFx0fTtcXG4gXFx0dTMyXFx0XFx0XFx0XFx0dHNfcmVjZW50O1xcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdFxcdFxcdHJza190aW1lcjtcXG4gXFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHNcXHQqcnNrX29wcztcXG5AQCAtNzQsNiArNzksMTcgQEAgc3RydWN0IHJlcXVlc3Rfc29jayB7XFxuIFxcdHUzMlxcdFxcdFxcdFxcdHRpbWVvdXQ7XFxuIH07XFxuIFxcbitzdGF0aWMgaW5saW5lIHU4IHJlcXNrX251bV90aW1lb3V0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4re1xcbitcXHR1OCBudW1fdGltZW91dCA9IFJFQURfT05DRShyZXEtXFx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZSk7XFxuK1xcbisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXFxuK1xcdHJldHVybiBudW1fdGltZW91dCBcXHUwMDNlXFx1MDAzZSAxO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gbnVtX3RpbWVvdXQgXFx1MDAyNiAweDdmO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRyZXR1cm4gKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilzaztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxcbmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxcbkBAIC0xODMsNiArMTgzLDggQEAgc3RhdGljX2Fzc2VydCgoMSBcXHUwMDNjXFx1MDAzYyBBVE9fQklUUykgXFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XFxuICNkZWZpbmUgTUFYX1RDUF9LRUVQSU5UVkxcXHQzMjc2N1xcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUENOVFxcdFxcdDEyN1xcbiAjZGVmaW5lIE1BWF9UQ1BfU1lOQ05UXFx0XFx0MTI3XFxuKy8qIHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgaXMgYSA3LWJpdCBmaWVsZC4gKi9cXG4rI2RlZmluZSBNQVhfVENQX1NZTkFDS19SRVRSSUVTXFx0MTI3XFxuIFxcbiAvKiBFbnN1cmUgdGhhdCBUQ1AgUEFXUyBjaGVja3MgYXJlIHJlbGF4ZWQgYWZ0ZXIgfjIxNDcgc2Vjb25kc1xcbiAgKiB0byBhdm9pZCBvdmVyZmxvd3MuIFRoaXMgYXNzdW1lcyBhIGNsb2NrIHNtYWxsZXIgdGhhbiAxIE1oei5cXG5AQCAtODgxLDEyICs4ODMsMjMgQEAgc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxcbiBcXHRyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtXFx1MDAzZXNydHRfdXMgXFx1MDAzZVxcdTAwM2UgMykgKyB0cC1cXHUwMDNlcnR0dmFyX3VzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4ge1xcbi1cXHR1NjQgdGltZW91dCA9ICh1NjQpcmVxLVxcdTAwM2V0aW1lb3V0IFxcdTAwM2NcXHUwMDNjIHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQ7XFxuK1xcdHU2NCB0aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cXHUwMDNldGltZW91dCk7XFxuK1xcdHUzMiBydG9fbWF4ID0gdGNwX3J0b19tYXgoc2spO1xcbitcXHR1OCBudW1fdGltZW91dCA9IHJlcXNrX251bV90aW1lb3V0KHJlcSk7XFxuK1xcbitcXHRpZiAobnVtX3RpbWVvdXQgXFx1MDAzZT0gQklUU19QRVJfVFlQRSh0aW1lb3V0KSB8fFxcbitcXHQgICAgdGltZW91dCBcXHUwMDNlIFU2NF9NQVggXFx1MDAzZVxcdTAwM2UgbnVtX3RpbWVvdXQpXFxuK1xcdFxcdHJldHVybiBydG9fbWF4O1xcbitcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKW1pbl90KHU2NCwgdGltZW91dCBcXHUwMDNjXFx1MDAzYyBudW1fdGltZW91dCwgcnRvX21heCk7XFxuK31cXG4gXFxuLVxcdHJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQsXFxuLVxcdFxcdFxcdFxcdCAgICB0Y3BfcnRvX21heChyZXEtXFx1MDAzZXJza19saXN0ZW5lcikpO1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbit7XFxuK1xcdHJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG4gfVxcbiBcXG4gdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuaW5kZXggNjI1NzQ1OWJjZWUyNC4uMjFmOTZhNTBjMTBmZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xcbkBAIC0xMDY4LDYgKzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRuZXQgPSBzb2NrX25ldChza19saXN0ZW5lcik7XFxuIFxcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cXHUwMDNlaWNza19zeW5fcmV0cmllcykgPyA6XFxuIFxcdFxcdFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XFxuK1xcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBtaW5fdChpbnQsIG1heF9zeW5fYWNrX3JldHJpZXMsXFxuK1xcdFxcdFxcdFxcdCAgICBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcXG4gXFx0LyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmVcXG4gXFx0ICogKGkuZS4gY29udmVydGVkIHRvIGVzdGFibGlzaGVkIHNvY2tldCkgZm9yIGZpcnN0IHRpbWVvdXQuXFxuIFxcdCAqIElmIHN5bmFjayB3YXMgbm90IGFja25vd2xlZGdlZCBmb3IgMSBzZWNvbmQsIGl0IG1lYW5zXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwLmNcXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB1OCBzZWNzX3RvX3JldHJhbnMoaW50IHNlY29uZHMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heClcXG4gXFx0XFx0aW50IHBlcmlvZCA9IHRpbWVvdXQ7XFxuIFxcbiBcXHRcXHRyZXMgPSAxO1xcbi1cXHRcXHR3aGlsZSAoc2Vjb25kcyBcXHUwMDNlIHBlcmlvZCBcXHUwMDI2XFx1MDAyNiByZXMgXFx1MDAzYyAyNTUpIHtcXG4rXFx0XFx0d2hpbGUgKHNlY29uZHMgXFx1MDAzZSBwZXJpb2QgXFx1MDAyNlxcdTAwMjYgcmVzIFxcdTAwM2MgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUykge1xcbiBcXHRcXHRcXHRyZXMrKztcXG4gXFx0XFx0XFx0dGltZW91dCBcXHUwMDNjXFx1MDAzYz0gMTtcXG4gXFx0XFx0XFx0aWYgKHRpbWVvdXQgXFx1MDAzZSBydG9fbWF4KVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jXFxuaW5kZXggZTU2ZWFlNGJjMzQxZS4uMmQyZGVjMWU5MTU2NSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xcbisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jXFxuQEAgLTQ2NCwxMSArNDY0LDEzIEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcbiBcXHR0Y3Bfc3luX2Fja190aW1lb3V0KHJlcSk7XFxuIFxcbi1cXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuLlxcbitcXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW5cXG4rXFx0ICogcmVwcmVzZW50IGl0LlxcbiBcXHQgKiBQYWlyZWQgd2l0aCBXUklURV9PTkNFKCkgaW4gdGNwX3NvY2tfc2V0X3N5bmNudCgpXFxuIFxcdCAqL1xcbiBcXHRtYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcXG4gXFx0XFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3N5bmFja19yZXRyaWVzKSArIDE7XFxuK1xcdG1heF9yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfcmV0cmllcywgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7XFxuIFxcbiBcXHRpZiAocmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSBtYXhfcmV0cmllcykge1xcbiBcXHRcXHR0Y3Bfd3JpdGVfZXJyKHNrKTtcXG5AQCAtNDkwLDcgKzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdGlmICghdHAtXFx1MDAzZXJldHJhbnNfc3RhbXApXFxuIFxcdFxcdHRwLVxcdTAwM2VyZXRyYW5zX3N0YW1wID0gdGNwX3RpbWVfc3RhbXBfdHModHApO1xcbiBcXHR0Y3BfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsXFxuLVxcdFxcdFxcdCAgcmVxLVxcdTAwM2V0aW1lb3V0IFxcdTAwM2NcXHUwMDNjIHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCB0Y3BfcnR4X3Byb2JlMF90aW1lZF9vdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo0NS45ODQ2ODc2MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5MDM5NzIwODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXFza190aW1lcl9oYW5kbGVyXCIsXG4gICAgXCJ0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyXCIsXG4gICAgXCJkb190Y3Bfc2V0c29ja29wdFwiLFxuICAgIFwidGNwX2NoZWNrX3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gYW5kIHRpbWVvdXQgaGFuZGxpbmcgdG8gbWF0Y2ggdGhlIDctYml0IHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgZmllbGQuIEl0IGNhcHMgU1lOLUFDSyByZXRyaWVzIHRvIDEyNyBpbiByZXFza190aW1lcl9oYW5kbGVyIGFuZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyLCByZWZhY3RvcnMgdGhlIGJpdGZpZWxkIGxheW91dCBpbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrLCBhbmQgdXBkYXRlcyB0Y3BfcmVxc2tfdGltZW91dF9zayAvIHRjcF9yZXFza190aW1lb3V0IGNhbGN1bGF0aW9ucyB0byBwcmV2ZW50IHNoaWZ0IG92ZXJmbG93cy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBUQ1Agc29ja2V0IGNvbm5lY3Rpb25zIGFuZCBzZXRzb2Nrb3B0L3N5c2N0bCBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkwODFlN2MzNWJhNmE0MDgwMDViZmE3NDY5MDI5NzJlNWUyNzhiODZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA2OjU1OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uNGEyZWQ5NjRkY2VhYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTk1NCw3ICs5NTQsOSBAQCB0Y3Bfc3RkdXJnIC0gQk9PTEVBTlxuIFxuIHRjcF9zeW5hY2tfcmV0cmllcyAtIElOVEVHRVJcbiBcdE51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsXG4tXHRiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZVxuK1x0YmUgcmV0cmFuc21pdHRlZC4gVGhlIHN5c2N0bCBhY2NlcHRzIDAtMjU1LiBWYWx1ZXMgYWJvdmUgMTI3IGFyZVxuK1x0c2lsZW50bHkgY2FwcGVkIGJ5IHRoZSBTWU4tQUNLIHRpbWVycywgbWF0Y2hpbmcgdGhlIDctYml0XG4rXHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXG4gXHRpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byAzMXNlY29uZHMgdGlsbCB0aGUgbGFzdCByZXRyYW5zbWlzc2lvblxuIFx0d2l0aCB0aGUgY3VycmVudCBpbml0aWFsIFJUTyBvZiAxc2Vjb25kLiBXaXRoIHRoaXMgdGhlIGZpbmFsIHRpbWVvdXRcbiBcdGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgNjNzZWNvbmRzLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbmluZGV4IDVhOWM4MjZhNzA5MmQuLmE5NzgxZmFiNzc0YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbkBAIC01OCwxMiArNTgsMTcgQEAgc3RydWN0IHJlcXVlc3Rfc29jayB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrXHRcdCpkbF9uZXh0O1xuIFx0dTE2XHRcdFx0XHRtc3M7XG4gXHR1OFx0XHRcdFx0bnVtX3JldHJhbnM7IC8qIG51bWJlciBvZiByZXRyYW5zbWl0cyAqL1xuLVx0dThcdFx0XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dThcdFx0c3luY29va2llOjE7IC8qIFRydWUgaWZcbiBcdFx0XHRcdFx0XHQgICAgICAqIDEpIHRjcG9wdHMgbmVlZHMgdG8gYmUgZW5jb2RlZCBpblxuIFx0XHRcdFx0XHRcdCAgICAgICogICAgVFMgb2YgU1lOK0FDS1xuIFx0XHRcdFx0XHRcdCAgICAgICogMikgQUNLIGlzIHZhbGlkYXRlZCBieSBCUEYga2Z1bmMuXG4gXHRcdFx0XHRcdFx0ICAgICAgKi9cbi1cdHU4XHRcdFx0XHRudW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi9cbitcdFx0XHR1OFx0XHRudW1fdGltZW91dDo3OyAvKiBudW1iZXIgb2YgdGltZW91dHMgKi9cbitcdFx0fTtcbitcdFx0dThcdFx0bnVtX3RpbWVvdXRfc3luY29va2llO1xuK1x0fTtcbiBcdHUzMlx0XHRcdFx0dHNfcmVjZW50O1xuIFx0c3RydWN0IHRpbWVyX2xpc3RcdFx0cnNrX3RpbWVyO1xuIFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHNcdCpyc2tfb3BzO1xuQEAgLTc0LDYgKzc5LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xuIFx0dTMyXHRcdFx0XHR0aW1lb3V0O1xuIH07XG4gXG4rc3RhdGljIGlubGluZSB1OCByZXFza19udW1fdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4re1xuK1x0dTggbnVtX3RpbWVvdXQgPSBSRUFEX09OQ0UocmVxLVx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZSk7XG4rXG4rI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxuK1x0cmV0dXJuIG51bV90aW1lb3V0IFx1MDAzZVx1MDAzZSAxO1xuKyNlbHNlXG4rXHRyZXR1cm4gbnVtX3RpbWVvdXQgXHUwMDI2IDB4N2Y7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0cmV0dXJuIChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2s7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNDM2NDk1ZmYyMjcxZC4uYTFjMjAzNTJhODY2NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTE4Myw2ICsxODMsOCBAQCBzdGF0aWNfYXNzZXJ0KCgxIFx1MDAzY1x1MDAzYyBBVE9fQklUUykgXHUwMDNlIFRDUF9ERUxBQ0tfTUFYKTtcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUElOVFZMXHQzMjc2N1xuICNkZWZpbmUgTUFYX1RDUF9LRUVQQ05UXHRcdDEyN1xuICNkZWZpbmUgTUFYX1RDUF9TWU5DTlRcdFx0MTI3XG4rLyogcmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBpcyBhIDctYml0IGZpZWxkLiAqL1xuKyNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1x0MTI3XG4gXG4gLyogRW5zdXJlIHRoYXQgVENQIFBBV1MgY2hlY2tzIGFyZSByZWxheGVkIGFmdGVyIH4yMTQ3IHNlY29uZHNcbiAgKiB0byBhdm9pZCBvdmVyZmxvd3MuIFRoaXMgYXNzdW1lcyBhIGNsb2NrIHNtYWxsZXIgdGhhbiAxIE1oei5cbkBAIC04ODEsMTIgKzg4MywyMyBAQCBzdGF0aWMgaW5saW5lIHUzMiBfX3RjcF9zZXRfcnRvKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHApXG4gXHRyZXR1cm4gdXNlY3NfdG9famlmZmllcygodHAtXHUwMDNlc3J0dF91cyBcdTAwM2VcdTAwM2UgMykgKyB0cC1cdTAwM2VydHR2YXJfdXMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiB7XG4tXHR1NjQgdGltZW91dCA9ICh1NjQpcmVxLVx1MDAzZXRpbWVvdXQgXHUwMDNjXHUwMDNjIHJlcS1cdTAwM2VudW1fdGltZW91dDtcbitcdHU2NCB0aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2V0aW1lb3V0KTtcbitcdHUzMiBydG9fbWF4ID0gdGNwX3J0b19tYXgoc2spO1xuK1x0dTggbnVtX3RpbWVvdXQgPSByZXFza19udW1fdGltZW91dChyZXEpO1xuK1xuK1x0aWYgKG51bV90aW1lb3V0IFx1MDAzZT0gQklUU19QRVJfVFlQRSh0aW1lb3V0KSB8fFxuK1x0ICAgIHRpbWVvdXQgXHUwMDNlIFU2NF9NQVggXHUwMDNlXHUwMDNlIG51bV90aW1lb3V0KVxuK1x0XHRyZXR1cm4gcnRvX21heDtcbitcbitcdHJldHVybiAodW5zaWduZWQgbG9uZyltaW5fdCh1NjQsIHRpbWVvdXQgXHUwMDNjXHUwMDNjIG51bV90aW1lb3V0LCBydG9fbWF4KTtcbit9XG4gXG4tXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0LFxuLVx0XHRcdFx0ICAgIHRjcF9ydG9fbWF4KHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIpKTtcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuK3tcbitcdHJldHVybiB0Y3BfcmVxc2tfdGltZW91dF9zayhyZXEtXHUwMDNlcnNrX2xpc3RlbmVyLCByZXEpO1xuIH1cbiBcbiB1MzIgdGNwX2RlbGFja19tYXgoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuaW5kZXggNjI1NzQ1OWJjZWUyNC4uMjFmOTZhNTBjMTBmZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbkBAIC0xMDY4LDYgKzEwNjgsOCBAQCBzdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0bmV0ID0gc29ja19uZXQoc2tfbGlzdGVuZXIpO1xuIFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XG4rXHRtYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLFxuK1x0XHRcdFx0ICAgIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpO1xuIFx0LyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmVcbiBcdCAqIChpLmUuIGNvbnZlcnRlZCB0byBlc3RhYmxpc2hlZCBzb2NrZXQpIGZvciBmaXJzdCB0aW1lb3V0LlxuIFx0ICogSWYgc3luYWNrIHdhcyBub3QgYWNrbm93bGVkZ2VkIGZvciAxIHNlY29uZCwgaXQgbWVhbnNcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCAxYzg2N2EzMDI0NDQ2Li5lNTUxZTZhZGM4MDA1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB1OCBzZWNzX3RvX3JldHJhbnMoaW50IHNlY29uZHMsIGludCB0aW1lb3V0LCBpbnQgcnRvX21heClcbiBcdFx0aW50IHBlcmlvZCA9IHRpbWVvdXQ7XG4gXG4gXHRcdHJlcyA9IDE7XG4tXHRcdHdoaWxlIChzZWNvbmRzIFx1MDAzZSBwZXJpb2QgXHUwMDI2XHUwMDI2IHJlcyBcdTAwM2MgMjU1KSB7XG4rXHRcdHdoaWxlIChzZWNvbmRzIFx1MDAzZSBwZXJpb2QgXHUwMDI2XHUwMDI2IHJlcyBcdTAwM2MgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUykge1xuIFx0XHRcdHJlcysrO1xuIFx0XHRcdHRpbWVvdXQgXHUwMDNjXHUwMDNjPSAxO1xuIFx0XHRcdGlmICh0aW1lb3V0IFx1MDAzZSBydG9fbWF4KVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbmluZGV4IGU1NmVhZTRiYzM0MWUuLjJkMmRlYzFlOTE1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xuKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbkBAIC00NjQsMTEgKzQ2NCwxMyBAQCBzdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFxuIFx0dGNwX3N5bl9hY2tfdGltZW91dChyZXEpO1xuIFxuLVx0LyogQWRkIG9uZSBtb3JlIHJldHJ5IGZvciBmYXN0b3Blbi5cbitcdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4gd2hlbiB0aGUgdGltZW91dCBjb3VudGVyIGNhblxuK1x0ICogcmVwcmVzZW50IGl0LlxuIFx0ICogUGFpcmVkIHdpdGggV1JJVEVfT05DRSgpIGluIHRjcF9zb2NrX3NldF9zeW5jbnQoKVxuIFx0ICovXG4gXHRtYXhfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVx1MDAzZWljc2tfc3luX3JldHJpZXMpID8gOlxuIFx0XHRSRUFEX09OQ0Uoc29ja19uZXQoc2spLVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcykgKyAxO1xuK1x0bWF4X3JldHJpZXMgPSBtaW5fdChpbnQsIG1heF9yZXRyaWVzLCBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcbiBcbiBcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgXHUwMDNlPSBtYXhfcmV0cmllcykge1xuIFx0XHR0Y3Bfd3JpdGVfZXJyKHNrKTtcbkBAIC00OTAsNyArNDkyLDcgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdGlmICghdHAtXHUwMDNlcmV0cmFuc19zdGFtcClcbiBcdFx0dHAtXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcbiBcdHRjcF9yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUyxcbi1cdFx0XHQgIHJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQsIGZhbHNlKTtcbitcdFx0XHQgICAgIHRjcF9yZXFza190aW1lb3V0X3NrKHNrLCByZXEpLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIHRjcF9ydHhfcHJvYmUwX3RpbWVkX291dChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo0NS45ODQ2ODg5MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzgyNzI2MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBTWU4gQ29va2llIFx1MDAyNiBSZXRyYW5zbWlzc2lvbiBSZWZpbmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIHJlZmluZW1lbnRzIGFyb3VuZCBUQ1AgU1lOIGNvb2tpZXMgYW5kIHJldHJhbnNtaXNzaW9uIHN0cmF0ZWdpZXMuIFRoZSBjaGFuZ2VzIHNlZW0gdGFyZ2V0ZWQgYXQgdGhlIHJlcXVlc3Qgc29ja2V0IChgcmVxdWVzdF9zb2NrYCkgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBob3cgU1lOLUFDSyByZXRyaWVzIGFyZSBtYW5hZ2VkLlxuXG5GaXJzdCwgSSBzZWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIHRvIGBpcC1zeXNjdGwucnN0YCDigJMgdGhhdCdzIGdvb2QsIGRvY3VtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBiZSB1cGRhdGVkIHdpdGggY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSB3b3JrIHJlc2lkZXMgd2l0aGluIGBpbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaGAuIFRoZSBgc3RydWN0IHJlcXVlc3Rfc29ja2AgY2hhbmdlIGlzIGludGVyZXN0aW5nOyB0aGUgdW5pb24gYXJvdW5kIGBzeW5jb29raWU6MWAsIGBudW1fdGltZW91dDo3YCwgYW5kIGB1OCBudW1fdGltZW91dF9zeW5jb29raWVgIHN1Z2dlc3RzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIHN0b3JlIGVpdGhlciB0aGUgU1lOIGNvb2tpZSBmbGFnIG9yIHRoZSB0aW1lb3V0L3JldHJ5IGluZm9ybWF0aW9uLiBUaGUgYWRkaXRpb24gb2YgdGhlIGByZXFza19udW1fdGltZW91dCgpYCBoZWxwZXIgaXMgYSBjbGVhciBpbmRpY2F0aW9uIG9mIHRoaXMgbmV3IGFwcHJvYWNoLlxuXG5Nb3ZpbmcgaW50byBgaW5jbHVkZS9uZXQvdGNwLmhgLCB0aGUgZGVmaW5pdGlvbiBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYSBrZXkgaW5kaWNhdG9yLiBUaGlzIGxpa2VseSBwcm92aWRlcyBhIGhhcmQgdXBwZXIgbGltaXQgZm9yIFNZTi1BQ0sgcmV0cmllcywgd2hpY2ggSSdtIGN1cmlvdXMgYWJvdXQuIEFsc28sIHRoZSBtb2RpZmljYXRpb25zIHRvIGB0Y3BfcmVxc2tfdGltZW91dCgpYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCB1c2luZyBgcmVxc2tfbnVtX3RpbWVvdXQoKWAgY29uZmlybSB0aGUgaW50ZWdyYXRpb24gb2YgdGhlIGByZXF1ZXN0X3NvY2tgIGNoYW5nZXMgd2l0aGluIHRoZSBUQ1AgbGF5ZXIuIEl0IGxvb2tzIGxpa2Ugd2UncmUgbW92aW5nIGF3YXkgZnJvbSB1bmJvdW5kZWQgcmV0cmllcyAob3IgYXQgbGVhc3QsIHZlcnkgaGlnaCBsaW1pdHMpIHRvIGEgbW9yZSBjb25zdHJhaW5lZCBhbmQgbGlrZWx5IG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgb3ZlcmZsb3cgY29uZGl0aW9uLlxuXG5Ob3cgd2UncmUgc2VlaW5nIHRoaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGFjdHVhbCBjb2RlLiBUaGUgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgIGNoYW5nZSB0byBgcmVxc2tfdGltZXJfaGFuZGxlcmAgYnkgY2FwcGluZyBgbWF4X3N5bl9hY2tfcmV0cmllc2Agd2l0aCBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2Agc29saWRpZmllcyB0aGUgdXBwZXIgYm91bmQgd2UgZXhwZWN0ZWQuIFRoZSBzYW1lIGluIGBuZXQvaXB2NC90Y3AuY2AsIHdoZXJlIGBzZWNzX3RvX3JldHJhbnNgIHVzZXMgdGhlIG1hY3JvIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYCBpbnN0ZWFkIG9mIGEgaGFyZGNvZGVkIHZhbHVlICgyNTU/KSByZWluZm9yY2VzIHRoaXMuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBidWdzIGluIHRoZSB0aW1lb3V0IGNhbGN1bGF0aW9uLlxuXG5GaW5hbGx5LCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgIHNob3dzIHRoZSBiaWdnZXN0IGNoYW5nZTogYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIGlzIGFsc28gaW1wbGVtZW50aW5nIHRoZSB1cHBlciBib3VuZHMgYW5kIHVzaW5nIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBpbnN0ZWFkIG9mIHRoZSBiaXQtc2hpZnQgb3BlcmF0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgYSBtb3JlIHJvYnVzdCB0aW1lb3V0IGNhbGN1bGF0aW9uLlxuXG5Tbywgb3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIHRvd2FyZCBzYWZlciwgbW9yZSBjb250cm9sbGVkIFNZTi1BQ0sgcmV0cmFuc21pc3Npb24gYmVoYXZpb3IuIFRoZSBiaXRmaWVsZC91bmlvbiBhcHByb2FjaCBmb3Igc3RvcmluZyB0aW1lb3V0L3N5bmNvb2tpZSBpbmZvcm1hdGlvbiBpcyBhIG5lYXQgb3B0aW1pemF0aW9uLCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgcHJvdmlkZXMgYSBjcnVjaWFsIHNhZmVndWFyZC4gSSdsbCB1c2UgZ3JlcC9yZWFkLWZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBpbXBsaWNhdGlvbnMgb2Ygc2V0dGluZyB0aGUgbGltaXQgYW5kIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIGJhY2t3YXJkcyBjb21wYXRpYmxlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBwZXJmb3JtYW5jZSBpbXBhY3RzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBzcGVjaWZpYyB2YWx1ZSBvZiBgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU2AgaXMgYWxzbyB3b3J0aCBpbnZlc3RpZ2F0aW5nIOKAkyB3aGF04oCZcyB0aGUgcmF0aW9uYWxlIGZvciB0aGF0IHBhcnRpY3VsYXIgdmFsdWU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo1Mi4zNjc0MTc2MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTQ0Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXNrX3RpbWVyX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAyNz12b2lkIGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3BfYW5kX3B1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzMi1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwMzM6c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEwMzQte1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDU5LVxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2bnJlcS1cXHUwMDNlcnNrX3JlZmNudCwgMiArIDEpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA2MDpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2bnJlcS1cXHUwMDNlcnNrX3RpbWVyLCByZXFza190aW1lcl9oYW5kbGVyLCBUSU1FUl9QSU5ORUQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA2MS1cXHRcXHRyZXFza19xdWV1ZV9taWdyYXRlZChcXHUwMDI2aW5ldF9jc2sobnNrKS1cXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTExNTI9c3RhdGljIGJvb2wgcmVxc2tfcXVldWVfaGFzaF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTYwLVxcdHJlcS1cXHUwMDNldGltZW91dCA9IHRjcF90aW1lb3V0X2luaXQoKHN0cnVjdCBzb2NrICopcmVxKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExNjE6XFx0dGltZXJfc2V0dXAoXFx1MDAyNnJlcS1cXHUwMDNlcnNrX3RpbWVyLCByZXFza190aW1lcl9oYW5kbGVyLCBUSU1FUl9QSU5ORUQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NTIuNDgzNTY3MTI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwMzk3MDA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgdGhpbmtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBzZWNzX3RvX3JldHJhbnNgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHNlY3NfdG9fcmV0cmFuc2AuIFRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzLCBsaWtlbHkgd2l0aGluIHRoZSBUQ1AgcHJvdG9jb2wsIHdoaWNoIG1lYW5zIG15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwncyBUQ1AgaW1wbGVtZW50YXRpb24uIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgbmV0d29yayBwcm90b2NvbCBpbnRlcm5hbHMsIGFuZCB3aGVyZSB0aGVzZSBjYWxjdWxhdGlvbnMgbGl2ZS5cblxuTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gc3RhcnQgaW4gYG5ldC9pcHY0L3RjcC5jYCwgYmVjYXVzZSB0aGF0J3MgdGhlIHVzdWFsIGhvbWUgZm9yIElQdjQtc3BlY2lmaWMgVENQIGNvZGUuIEJ1dCBJJ2xsIGtlZXAgYW4gb3BlbiBtaW5kOyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGRlZmluZWQgaW4gYSBtb3JlIGdlbmVyaWMgbG9jYXRpb24sIGVzcGVjaWFsbHkgaWYgaXQncyB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgSVAgdmVyc2lvbnMuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdpdGhpbiB0aGF0IGZpbGUgKGFuZCBwb3RlbnRpYWxseSBvdGhlcnMgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnksIG1heWJlIGV2ZW4gZnVydGhlciB1cCB0aGUgdHJlZSkgdG8gc2VlIHdoZXJlIGBzZWNzX3RvX3JldHJhbnNgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgYmUgbG9va2luZyBmb3IgYm90aCB0aGUgZGVjbGFyYXRpb24gYW5kIGFueSBkaXJlY3QgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uLlxuXG5JIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIHB1cnBvc2UuIEknbSBleHBlY3RpbmcgdGhpcyB0byB0YWtlIGVpdGhlciBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHJldHJhbnNtaXNzaW9uIGRlbGF5cywgb3IgYSB2YWx1ZSBhbmQgY29tcHV0ZSBhIHRpbWUuIExpa2VseSBpdCByZXR1cm5zIGEgZHVyYXRpb24gaW4gc2Vjb25kcywgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBuYW1lLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5wdXRzIHRvIGNvcnJlY3RseSBncmFzcCB0aGUgb3V0cHV0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIHVzZSBgc2Vjc190b19yZXRyYW5zYCwgdG8gZGVkdWNlIHdoYXQgdGhpcyBmdW5jdGlvbiAqZG9lcyogd2l0aCB0aG9zZSBpbnB1dHMuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgbWVjaGFuaXNtIGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NTUuMTg3NTM5MzE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDIxNjgwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Vjc190b19yZXRyYW5zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTMzOT12b2lkIHRjcF9sZWF2ZV9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzUxLS8qIENvbnZlcnQgc2Vjb25kcyB0byByZXRyYW5zbWl0cyBiYXNlZCBvbiBpbml0aWFsIGFuZCBtYXggdGltZW91dCAqL1xcbm5ldC9pcHY0L3RjcC5jOjM1MjpzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpXFxubmV0L2lwdjQvdGNwLmMtMzUzLXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM5MzUtXFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCxcXG5uZXQvaXB2NC90Y3AuYzozOTM2OlxcdFxcdFxcdCAgIHNlY3NfdG9fcmV0cmFucyh2YWwsIFRDUF9USU1FT1VUX0lOSVQgLyBIWixcXG5uZXQvaXB2NC90Y3AuYy0zOTM3LVxcdFxcdFxcdFxcdFxcdCAgIFRDUF9SVE9fTUFYIC8gSFopKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTU6NTcuNTg5NzExNTczWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA4NzMzNzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIEZhc3QgT3BlbiBTWU4tQUNLIFRpbWVyKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBob25lIGluIG9uIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgaGFwcGVuaW5nIGhlcmUgd2l0aCB0aGUgRmFzdCBPcGVuIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBTWU4tQUNLIHRpbWVyIGludGVyYWN0cyB3aXRoIHRoYXQgbWVjaGFuaXNtLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBtYW5hZ2VzIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIEZhc3QgT3BlbiwgZXNwZWNpYWxseSBwb3RlbnRpYWwgcmV0cmFuc21pc3Npb25zIG9yIHRpbWVvdXRzIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgZGF0YSB0cmFuc2Zlci4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXMgYmVpbmcgY2hlY2tlZCwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHRpbWVyIGZpcmVzLCBhbmQgd2hhdCBhY3Rpb25zIGFyZSB0YWtlbiB3aGVuIGl0IGV4cGlyZXM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIHdpbGwgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGFueSBvZGRpdGllcyBJJ3ZlIG9ic2VydmVkIGluIHJlbGF0ZWQgbmV0d29yayB0cmFjZXMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NTo1OS42NzcwNTA5ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNDg4MDQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxMDM9c3RhdGljIHZvaWQgdGNwX3Jjdl9zeW5yZWN2X3N0YXRlX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxMTUtXFx0V1JJVEVfT05DRShpbmV0X2NzayhzayktXFx1MDAzZWljc2tfcmV0cmFuc21pdHMsIDApO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcxMTY6XFx0LyogSW4gdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcigpIG9uIHRoZSBmaXJzdCBTWU5BQ0sgUlRPIHdlIHNldFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcxMTctXFx0ICogcmV0cmFuc19zdGFtcCBidXQgZG9uJ3QgZW50ZXIgQ0FfTG9zcywgc28gaW4gY2FzZSB0aGF0IGhhcHBlbmVkIHdlXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYz00NDI9c3RhdGljIHZvaWQgdGNwX3VwZGF0ZV9ydG9fc3RhdHMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDU4LSAqL1xcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ1OTpzdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ2MC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYz01Mzk9dm9pZCB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy01NTEtXFx0XFx0XFx0ICAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0ZJTl9XQUlUMSk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NTUyOlxcdFxcdHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc2ssIHJlcSk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNTUzLVxcdFxcdC8qIEJlZm9yZSB3ZSByZWNlaXZlIEFDSyB0byBvdXIgU1lOLUFDSyBkb24ndCByZXRyYW5zbWl0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjAxLjgwMTkzNzQ0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMTk5NDM3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgVENQIFN0YWNrIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdC4gSXMgdGhpcyBldmVuIHJlYWNoYWJsZSBjb2RlPyBCYXNlZCBvbiB0aGUgZmlsZSBwYXRocywgdGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSB0aGUgVENQIHN0YWNrLiBBbHJpZ2h0LCB0aGF0J3MgY3J1Y2lhbC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3M6XG5cbiogICBgaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhgOiBMb29rcyBsaWtlIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgYHJlcXVlc3Rfc29ja2AgYml0ZmllbGQgaXMgcmVwcmVzZW50ZWQsIGFuZCB0aGUgYHJlcXNrX251bV90aW1lb3V0KClgIGZ1bmN0aW9uLiBJbXBvcnRhbnQgZm9yIGNvbm5lY3Rpb24gc2V0dXAsIHNvIEknbGwga2VlcCBhbiBleWUgb24gaG93IGl0IGFmZmVjdHMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb25zLlxuKiAgIGBpbmNsdWRlL25ldC90Y3AuaGA6IE1vZGlmaWNhdGlvbnMgdG8gYHRjcF9yZXFza190aW1lb3V0X3NrKClgIGFuZCBgdGNwX3JlcXNrX3RpbWVvdXQoKWAuIFRoZXNlIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gdGltZW91dCBoYW5kbGluZyBkdXJpbmcgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwaGFzZS5cbiogICBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6IFRoZSBgcmVxc2tfdGltZXJfaGFuZGxlcigpYCBmdW5jdGlvbiBpcyBiZWluZyBtb2RpZmllZC4gVGhpcyBzdWdnZXN0cyBhbiBhbHRlcmF0aW9uIGluIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoZXNlIGNvbm5lY3Rpb24gcmVxdWVzdCB0aW1lb3V0cywgd2hpY2ggaXMgYW5vdGhlciBhcmVhIHRvIHdhdGNoIGNsb3NlbHkuXG4qICAgYG5ldC9pcHY0L3RjcC5jYDogYHNlY3NfdG9fcmV0cmFucygpYCB3aXRoaW4gYGRvX3RjcF9zZXRzb2Nrb3B0YCAoc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gVENQX0RFRkVSX0FDQ0VQVCkuIFRoaXMgY291bGQgaW1wYWN0IGhvdyByZXRyYW5zbWlzc2lvbnMgYXJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGRlZmVycmFsIG9mIHRoZSBhY2NlcHQgY2FsbC4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuXG4qICAgYG5ldC9pcHY0L3RjcF90aW1lci5jYDogVGhlcmUncyBhIGNoYW5nZSByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKClgLiBTaW5jZSB0aGlzIHJlbGF0ZXMgdG8gRmFzdCBPcGVuLCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIGNvbm5lY3Rpb25zLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBjYWxsZXJzIHRvIHRoZSBgdGNwX3JlcXNrX3RpbWVvdXRgIGZ1bmN0aW9uLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGFjcm9zcyB0aGUga2VybmVsLiBBIGNvbXByZWhlbnNpdmUgY2FsbCBncmFwaCB3b3VsZCByZWFsbHkgaGVscCBtZSB2aXN1YWxpemUgdGhlIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MDUuOTIxODg1NjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU1NDU4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3JlcXNrX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9ODgxPXN0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cClcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTg4NS1cXG5pbmNsdWRlL25ldC90Y3AuaDo4ODY6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL25ldC90Y3AuaC04ODctXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTg5OS1cXG5pbmNsdWRlL25ldC90Y3AuaDo5MDA6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC90Y3AuaC05MDEte1xcbmluY2x1ZGUvbmV0L3RjcC5oOjkwMjpcXHRyZXR1cm4gdGNwX3JlcXNrX3RpbWVvdXRfc2socmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtOTAzLX1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTE0LVxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnF1ZXVlLVxcdTAwM2V5b3VuZyk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTE1OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2cmVxLVxcdTAwM2Vyc2tfdGltZXIsIGppZmZpZXMgKyB0Y3BfcmVxc2tfdGltZW91dChyZXEpKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTYtXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03MTgtXFx0XFx0XFx0dG1wX29wdC50c19yZWNlbnRfc3RhbXAgPSBrdGltZV9nZXRfc2Vjb25kcygpIC1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NzE5OlxcdFxcdFxcdFxcdHRjcF9yZXFza190aW1lb3V0KHJlcSkgLyBIWjtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNzIwLVxcdFxcdFxcdHBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KFxcdTAwMjZ0bXBfb3B0LCB0aC1cXHUwMDNlcnN0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NjctXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc2ODpcXHRcXHRcXHRcXHRleHBpcmVzICs9IHRjcF9yZXFza190aW1lb3V0KHJlcSk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTc2OS1cXHRcXHRcXHRcXHRpZiAoIWZhc3RvcGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NDU5PXN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00OTQtXFx0dGNwX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLFxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ5NTpcXHRcXHRcXHQgICAgIHRjcF9yZXFza190aW1lb3V0X3NrKHNrLCByZXEpLCBmYWxzZSk7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDk2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MDguMDg3NDM4MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU5NTQwMjIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBUaW1lb3V0IFZhcmlhYmxlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJXaGVyZSBhcmUgd2UgYWN0dWFsbHkgdXNpbmcgdGhlc2UgdGltZW91dCB2YXJpYWJsZXMsIHNwZWNpZmljYWxseSBgcmVxc2tfbnVtX3RpbWVvdXRgIGFuZCBgbnVtX3RpbWVvdXRgP1wiIEl0J3Mgbm90IGVub3VnaCB0byBrbm93IHRoZXkgKmV4aXN0KjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIGxldmVyYWdlZCB3aXRoaW4gdGhlIHN5c3RlbS4gQXJlIHRoZXkgbGltaXRlZCB0byBhIHBhcnRpY3VsYXIgbW9kdWxlLCBvciBhcmUgdGhleSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCB1c2VkIGluIG11bHRpcGxlIHBsYWNlcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIGltcGFjdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSB0byB1bmRlcnN0YW5kIGhvdyBhbnkgY2hhbmdlIEkgbWFrZSB0byBvbmUgcGxhY2UgYWZmZWN0cyB0aGUgcmVzdC4gVGltZSB0byBkaWcgaW4gYW5kIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMganVzdCB0aGUgZmlyc3Qgc3RlcCBpbiBhIGxhcmdlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydCwgc28gSSdtIHRyeWluZyB0byBnZXQgYSBtYXAgb2YgdGhlaXIgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NjowOS42ODI4NDI1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NzM4MzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudW1fdGltZW91dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdD05NTU9dGNwX3N5bmFja19yZXRyaWVzIC0gSU5URUdFUlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtOTU4LVxcdHNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0Ojk1OTpcXHRyZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBEZWZhdWx0IHZhbHVlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QtOTYwLVxcdGlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIDMxc2Vjb25kcyB0aWxsIHRoZSBsYXN0IHJldHJhbnNtaXNzaW9uXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmM9NTAxMz1zdGF0aWMgaW50IG1seDVfaWJfc3RhZ2VfZGVsYXlfZHJvcF9pbml0KHN0cnVjdCBtbHg1X2liX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jLTUwMzMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jOjUwMzQ6XFx0ZGVidWdmc19jcmVhdGVfYXRvbWljX3QoXFxcIm51bV90aW1lb3V0X2V2ZW50c1xcXCIsIDA0MDAsIHJvb3QsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jLTUwMzUtXFx0XFx0XFx0XFx0XFx1MDAyNmRldi1cXHUwMDNlZGVsYXlfZHJvcC5ldmVudHNfY250KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oPTM0Nj1zdHJ1Y3Qgcnh0aWRfc3RhdHMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jb3JlLmgtMzUyLVxcdHUzMiBudW1fZGVsaXZlcmVkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oOjM1MzpcXHR1MzIgbnVtX3RpbWVvdXRzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY29yZS5oLTM1NC1cXHR1MzIgbnVtX2hvbGU7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL3R4cnguYz0xNjI0PXN0YXRpYyB2b2lkIGFnZ3JfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvdHhyeC5jLTE2MzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmM6MTYzOTpcXHRcXHRzdGF0cy1cXHUwMDNlbnVtX3RpbWVvdXRzKys7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC90eHJ4LmMtMTY0MC1cXHRcXHRhdGg2a2xfZGJnKEFUSDZLTF9EQkdfQUdHUixcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oPTUwPXN0cnVjdCByZXF1ZXN0X3NvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgKi9cXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo2ODpcXHRcXHRcXHR1OFxcdFxcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTY5LVxcdFxcdH07XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6NzA6XFx0XFx0dThcXHRcXHRudW1fdGltZW91dF9zeW5jb29raWU7XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtNzEtXFx0fTtcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTgxLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oOjgyOnN0YXRpYyBpbmxpbmUgdTggcmVxc2tfbnVtX3RpbWVvdXQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTgzLXtcXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaDo4NDpcXHR1OCBudW1fdGltZW91dCA9IFJFQURfT05DRShyZXEtXFx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZSk7XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtODUtXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtODYtI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oOjg3OlxcdHJldHVybiBudW1fdGltZW91dCBcXHUwMDNlXFx1MDAzZSAxO1xcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTg4LSNlbHNlXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6ODk6XFx0cmV0dXJuIG51bV90aW1lb3V0IFxcdTAwMjYgMHg3ZjtcXG5pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaC05MC0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oPTIzMz1zdGF0aWMgaW5saW5lIHZvaWQgcmVxc2tfcXVldWVfcmVtb3ZlZChzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSxcXG4tLVxcbmluY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oLTIzNS17XFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmg6MjM2OlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0ID09IDApXFxuaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgtMjM3LVxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnF1ZXVlLVxcdTAwM2V5b3VuZyk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaD0xNTE9c3RhdGljX2Fzc2VydCgoMSBcXHUwMDNjXFx1MDAzYyBBVE9fQklUUykgXFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0xODUtI2RlZmluZSBNQVhfVENQX1NZTkNOVFxcdFxcdDEyN1xcbmluY2x1ZGUvbmV0L3RjcC5oOjE4NjovKiByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGlzIGEgNy1iaXQgZmllbGQuICovXFxuaW5jbHVkZS9uZXQvdGNwLmgtMTg3LSNkZWZpbmUgTUFYX1RDUF9TWU5BQ0tfUkVUUklFU1xcdDEyN1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9ODg2PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y3BfcmVxc2tfdGltZW91dF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC04OTAtXFx0dTMyIHJ0b19tYXggPSB0Y3BfcnRvX21heChzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6ODkxOlxcdHU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTtcXG5pbmNsdWRlL25ldC90Y3AuaC04OTItXFxuaW5jbHVkZS9uZXQvdGNwLmg6ODkzOlxcdGlmIChudW1fdGltZW91dCBcXHUwMDNlPSBCSVRTX1BFUl9UWVBFKHRpbWVvdXQpIHx8XFxuaW5jbHVkZS9uZXQvdGNwLmg6ODk0OlxcdCAgICB0aW1lb3V0IFxcdTAwM2UgVTY0X01BWCBcXHUwMDNlXFx1MDAzZSBudW1fdGltZW91dClcXG5pbmNsdWRlL25ldC90Y3AuaC04OTUtXFx0XFx0cmV0dXJuIHJ0b19tYXg7XFxuaW5jbHVkZS9uZXQvdGNwLmgtODk2LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjg5NzpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0IFxcdTAwM2NcXHUwMDNjIG51bV90aW1lb3V0LCBydG9fbWF4KTtcXG5pbmNsdWRlL25ldC90Y3AuaC04OTgtfVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2Vjbi5oPTY0NT10Y3BfZWNuX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHRjcGhkciAqdGgsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3BfZWNuLmgtNjUwLVxcdCAqL1xcbmluY2x1ZGUvbmV0L3RjcF9lY24uaDo2NTE6XFx0aWYgKCFyZXEtXFx1MDAzZW51bV90aW1lb3V0IHx8IHN5bmFja190eXBlICE9IFRDUF9TWU5BQ0tfUkVUUkFOUykge1xcbmluY2x1ZGUvbmV0L3RjcF9lY24uaC02NTItXFx0XFx0aWYgKHRjcF9yc2socmVxKS1cXHUwMDNlYWNjZWNuX29rKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04Mjk9c3RhdGljIHZvaWQgc3luX2Fja19yZWNhbGMoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzQtXFx0aWYgKCFyc2txX2RlZmVyX2FjY2VwdCkge1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODM1OlxcdFxcdCpleHBpcmUgPSByZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IG1heF9zeW5fYWNrX3JldHJpZXM7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MzYtXFx0XFx0KnJlc2VuZCA9IDE7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzOC1cXHR9XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4Mzk6XFx0KmV4cGlyZSA9IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZT0gbWF4X3N5bl9hY2tfcmV0cmllcyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQwOlxcdFxcdCAgKCFpbmV0X3JzayhyZXEpLVxcdTAwM2VhY2tlZCB8fCByZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0KTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0MS1cXHQvKiBEbyBub3QgcmVzZW5kIHdoaWxlIHdhaXRpbmcgZm9yIGRhdGEgYWZ0ZXIgQUNLLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDUtXFx0KnJlc2VuZCA9ICFpbmV0X3JzayhyZXEpLVxcdTAwM2VhY2tlZCB8fFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODQ2OlxcdFxcdCAgcmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCAtIDE7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NDctfVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz04NTA9cmVxc2tfYWxsb2Nfbm9wcm9mKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODcxLVxcdHJlcS1cXHUwMDNlc3luY29va2llID0gMDtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg3MjpcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0ID0gMDtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg3My1cXHRyZXEtXFx1MDAzZW51bV9yZXRyYW5zID0gMDtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTY3PXN0YXRpYyB2b2lkIHJlcXNrX3F1ZXVlX21pZ3JhdGVkKHN0cnVjdCByZXF1ZXN0X3NvY2tfcXVldWUgKnF1ZXVlLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05Njkte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6OTcwOlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0ID09IDApXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05NzEtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2cXVldWUtXFx1MDAzZXlvdW5nKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTEyLVxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlYWNjZWNuX2ZhaWxfbW9kZSB8PSBUQ1BfQUNDRUNOX0FDRV9GQUlMX1NFTkQ7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTEzOlxcdFxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0KysgPT0gMClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTQtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2cXVldWUtXFx1MDAzZXlvdW5nKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTEzNS1cXHQvKiBFdmVuIGlmIHdlIGNhbiBjbG9uZSB0aGUgcmVxLCB3ZSBtYXkgbmVlZCBub3QgcmV0cmFuc21pdCBhbnkgbW9yZVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTEzNjpcXHQgKiBTWU4rQUNLcyAobnJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZSBtYXhfc3luX2Fja19yZXRyaWVzLCBldGMpLCBvciBhbm90aGVyXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTM3LVxcdCAqIENQVSBtYXkgd2luIHRoZSBcXFwib3duX3JlcVxcXCIgcmFjZSBzbyB0aGF0IGluZXRfZWhhc2hfaW5zZXJ0KCkgZmFpbHMuXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTI3NDQ9c3RhdGljIHZvaWQgZ2V0X29wZW5yZXE0KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2MC1cXHRcXHRqaWZmaWVzX2RlbHRhX3RvX2Nsb2NrX3QoZGVsdGEpLFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjc2MTpcXHRcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjc2Mi1cXHRcXHRmcm9tX2t1aWRfbXVuZ2VkKHNlcV91c2VyX25zKGYpLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTU0Nj1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02MjUtXFx0fVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo2MjY6XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQpIHtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjI3OlxcdFxcdG5ld3RwLVxcdTAwM2V0b3RhbF9ydG8gPSByZXEtXFx1MDAzZW51bV90aW1lb3V0O1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02MjgtXFx0XFx0bmV3dHAtXFx1MDAzZXVuZG9fbWFya2VyID0gdHJlcS1cXHUwMDNlc250X2lzbjtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMC1cXHQvKiBXaGlsZSBUQ1BfREVGRVJfQUNDRVBUIGlzIGFjdGl2ZSwgZHJvcCBiYXJlIEFDSy4gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTIxOlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2MgUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19hY2NlcHRfcXVldWUucnNrcV9kZWZlcl9hY2NlcHQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTkyMi1cXHQgICAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxID09IHRjcF9yc2socmVxKS1cXHUwMDNlcmN2X2lzbiArIDEpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF90aW1lci5jPTQ1OT1zdGF0aWMgdm9pZCB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDc0LVxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ3NTpcXHRpZiAocmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSBtYXhfcmV0cmllcykge1xcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ3Ni1cXHRcXHR0Y3Bfd3JpdGVfZXJyKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF90aW1lci5jLTQ4OS1cXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xcbm5ldC9pcHY0L3RjcF90aW1lci5jOjQ5MDpcXHRyZXEtXFx1MDAzZW51bV90aW1lb3V0Kys7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDkxLVxcdHRjcF91cGRhdGVfcnRvX3N0YXRzKHNrKTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjA5ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTYoc3RydWN0IHNlcV9maWxlICpzZXEsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIxMTctXFx0XFx0ICAgamlmZmllc190b19jbG9ja190KHR0ZCksXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoyMTE4OlxcdFxcdCAgIHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQsXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMTE5LVxcdFxcdCAgIGZyb21fa3VpZF9tdW5nZWQoc2VxX3VzZXJfbnMoc2VxKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A0LmM9MTcyPXN0YXRpYyBpbnQgZHVtcF9yZXFfc29jayhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRyZXEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jLTE4OS1cXHRcXHQgICAgICAgVENQX1NZTl9SRUNWLCAwLCAwLCAxLCBqaWZmaWVzX3RvX2Nsb2NrX3QodHRkKSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfdGNwNC5jOjE5MDpcXHRcXHQgICAgICAgcmVxLVxcdTAwM2VudW1fdGltZW91dCwgdWlkLCAwLCAwLCAwLCByZXEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A0LmMtMTkxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYz0xODE9c3RhdGljIGludCBkdW1wX3JlcV9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A2LmMtMjA1LVxcdFxcdCAgICAgICBUQ1BfU1lOX1JFQ1YsIDAsIDAsIDEsIGppZmZpZXNfdG9fY2xvY2tfdCh0dGQpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl90Y3A2LmM6MjA2OlxcdFxcdCAgICAgICByZXEtXFx1MDAzZW51bV90aW1lb3V0LCB1aWQsIDAsIDAsIDAsIHJlcSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX3RjcDYuYy0yMDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjExLjgzMDIzMDgwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzIzMTgwNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AvSVAgU3RhY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGByZXFza190aW1lcl9oYW5kbGVyYCB3aXRoaW4gYGluZXRfY29ubmVjdGlvbl9zb2NrLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBnZXQgYSBncmFzcCBvZiBpdHMgaW1wbGVtZW50YXRpb24sIHNvIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBob21lIGluIG9uIGxpbmVzIDEwNjAgdG8gMTA4MC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHJhbmdlIHRvIHN0YXJ0IHdpdGggZm9yIGNvcmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGFuZCBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgdGltZXIncyBiZWhhdmlvciwgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdGltZW91dHMgb3IgcmV0cmFuc21pc3Npb25zLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTAxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MTQuMTUzNDE0NzQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNm5yZXEtXFx1MDAzZXJza190aW1lciwgcmVxc2tfdGltZXJfaGFuZGxlciwgVElNRVJfUElOTkVEKTtcXG4xMDYxOlxcdFxcdFxcdHJlcXNrX3F1ZXVlX21pZ3JhdGVkKFxcdTAwMjZpbmV0X2Nzayhuc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0XFx0XFx0cmVxID0gbnJlcTtcXG4xMDY0OlxcdFxcdFxcdHNrX2xpc3RlbmVyID0gbnNrO1xcbjEwNjU6XFx0XFx0fVxcbjEwNjY6XFx0XFxuMTA2NzpcXHRcXHRpY3NrID0gaW5ldF9jc2soc2tfbGlzdGVuZXIpO1xcbjEwNjg6XFx0XFx0bmV0ID0gc29ja19uZXQoc2tfbGlzdGVuZXIpO1xcbjEwNjk6XFx0XFx0bWF4X3N5bl9hY2tfcmV0cmllcyA9IFJFQURfT05DRShpY3NrLVxcdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcXG4xMDcwOlxcdFxcdFxcdFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9zeW5hY2tfcmV0cmllcyk7XFxuMTA3MTpcXHRcXHRtYXhfc3luX2Fja19yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfc3luX2Fja19yZXRyaWVzLFxcbjEwNzI6XFx0XFx0XFx0XFx0XFx0ICAgIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpO1xcbjEwNzM6XFx0XFx0LyogTm9ybWFsbHkgYWxsIHRoZSBvcGVucmVxcyBhcmUgeW91bmcgYW5kIGJlY29tZSBtYXR1cmVcXG4xMDc0OlxcdFxcdCAqIChpLmUuIGNvbnZlcnRlZCB0byBlc3RhYmxpc2hlZCBzb2NrZXQpIGZvciBmaXJzdCB0aW1lb3V0LlxcbjEwNzU6XFx0XFx0ICogSWYgc3luYWNrIHdhcyBub3QgYWNrbm93bGVkZ2VkIGZvciAxIHNlY29uZCwgaXQgbWVhbnNcXG4xMDc2OlxcdFxcdCAqIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRoaW5nczogc3luYWNrIHdhcyBsb3N0LCBhY2sgd2FzIGxvc3QsXFxuMTA3NzpcXHRcXHQgKiBydHQgaXMgaGlnaCBvciBub2JvZHkgcGxhbm5lZCB0byBhY2sgKGkuZS4gc3luZmxvb2QpLlxcbjEwNzg6XFx0XFx0ICogV2hlbiBzZXJ2ZXIgaXMgYSBiaXQgbG9hZGVkLCBxdWV1ZSBpcyBwb3B1bGF0ZWQgd2l0aCBvbGRcXG4xMDc5OlxcdFxcdCAqIG9wZW4gcmVxdWVzdHMsIHJlZHVjaW5nIGVmZmVjdGl2ZSBzaXplIG9mIHF1ZXVlLlxcbjEwODA6XFx0XFx0ICogV2hlbiBzZXJ2ZXIgaXMgd2VsbCBsb2FkZWQsIHF1ZXVlIHNpemUgcmVkdWNlcyB0byB6ZXJvXFxuMTA4MTpcXHRcXHQgKiBhZnRlciBzZXZlcmFsIG1pbnV0ZXMgb2Ygd29yay4gSXQgaXMgbm90IHN5bmZsb29kLFxcbjEwODI6XFx0XFx0ICogaXQgaXMgbm9ybWFsIG9wZXJhdGlvbi4gVGhlIHNvbHV0aW9uIGlzIHBydW5pbmdcXG4xMDgzOlxcdFxcdCAqIHRvbyBvbGQgZW50cmllcyBvdmVycmlkaW5nIG5vcm1hbCB0aW1lb3V0LCB3aGVuXFxuMTA4NDpcXHRcXHQgKiBzaXR1YXRpb24gYmVjb21lcyBkYW5nZXJvdXMuXFxuMTA4NTpcXHRcXHQgKlxcbjEwODY6XFx0XFx0ICogRXNzZW50aWFsbHksIHdlIHJlc2VydmUgaGFsZiBvZiByb29tIGZvciB5b3VuZ1xcbjEwODc6XFx0XFx0ICogZW1icmlvbnM7IGFuZCBhYm9ydCBvbGQgb25lcyB3aXRob3V0IHBpdHksIGlmIG9sZFxcbjEwODg6XFx0XFx0ICogb25lcyBhcmUgYWJvdXQgdG8gY2xvZyBvdXIgdGFibGUuXFxuMTA4OTpcXHRcXHQgKi9cXG4xMDkwOlxcdFxcdHF1ZXVlID0gXFx1MDAyNmljc2stXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlO1xcbjEwOTE6XFx0XFx0cWxlbiA9IHJlcXNrX3F1ZXVlX2xlbihxdWV1ZSk7XFxuMTA5MjpcXHRcXHRpZiAoKHFsZW4gXFx1MDAzY1xcdTAwM2MgMSkgXFx1MDAzZSBtYXgoOFUsIFJFQURfT05DRShza19saXN0ZW5lci1cXHUwMDNlc2tfbWF4X2Fja19iYWNrbG9nKSkpIHtcXG4xMDkzOlxcdFxcdFxcdGludCB5b3VuZyA9IHJlcXNrX3F1ZXVlX2xlbl95b3VuZyhxdWV1ZSkgXFx1MDAzY1xcdTAwM2MgMTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0XFx0d2hpbGUgKG1heF9zeW5fYWNrX3JldHJpZXMgXFx1MDAzZSAyKSB7XFxuMTA5NjpcXHRcXHRcXHRcXHRpZiAocWxlbiBcXHUwMDNjIHlvdW5nKVxcbjEwOTc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTA5ODpcXHRcXHRcXHRcXHRtYXhfc3luX2Fja19yZXRyaWVzLS07XFxuMTA5OTpcXHRcXHRcXHRcXHR5b3VuZyBcXHUwMDNjXFx1MDAzYz0gMTtcXG4xMTAwOlxcdFxcdFxcdH1cXG4xMTAxOlxcdFxcdH1cXG4xMTAyOlxcdFxcbjExMDM6XFx0XFx0c3luX2Fja19yZWNhbGMocmVxLCBtYXhfc3luX2Fja19yZXRyaWVzLCBSRUFEX09OQ0UocXVldWUtXFx1MDAzZXJza3FfZGVmZXJfYWNjZXB0KSxcXG4xMTA0OlxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZXhwaXJlLCBcXHUwMDI2cmVzZW5kKTtcXG4xMTA1OlxcdFxcdHRjcF9zeW5fYWNrX3RpbWVvdXQocmVxKTtcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKCFleHBpcmUgXFx1MDAyNlxcdTAwMjZcXG4xMTA4OlxcdFxcdCAgICAoIXJlc2VuZCB8fFxcbjExMDk6XFx0XFx0ICAgICAhdGNwX3J0eF9zeW5hY2soc2tfbGlzdGVuZXIsIHJlcSkgfHxcXG4xMTEwOlxcdFxcdCAgICAgaW5ldF9yc2socmVxKS1cXHUwMDNlYWNrZWQpKSB7XFxuMTExMTpcXHRcXHRcXHRpZiAocmVxLVxcdTAwM2VudW1fcmV0cmFucyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgdGNwX3JzayhyZXEpLVxcdTAwM2VhY2NlY25fb2spXFxuMTExMjpcXHRcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWFjY2Vjbl9mYWlsX21vZGUgfD0gVENQX0FDQ0VDTl9BQ0VfRkFJTF9TRU5EO1xcbjExMTM6XFx0XFx0XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQrKyA9PSAwKVxcbjExMTQ6XFx0XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2cXVldWUtXFx1MDAzZXlvdW5nKTtcXG4xMTE1OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2cmVxLVxcdTAwM2Vyc2tfdGltZXIsIGppZmZpZXMgKyB0Y3BfcmVxc2tfdGltZW91dChyZXEpKTtcXG4xMTE2OlxcdFxcbjExMTc6XFx0XFx0XFx0aWYgKCFucmVxKVxcbjExMTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjE0LjE1MzYzNTk5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU0Mzc2MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU2VlbXMgbGlrZSBpdCBpcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgV29ydGhGdXp6aW5nYC4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBUQ1AgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgLCBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgdGhlIHJlbGV2YW50IGhlYWRlcnMuIFRoZSBtb2RpZmljYXRpb25zIGluY2x1ZGUgdGltZW91dCBjYWxjdWxhdGlvbnMsIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCBiaXRmaWVsZCBjaGFuZ2VzLCBhbmQgY2FwcyBvbiByZXRyYW5zbWlzc2lvbnMvcmV0cmllcyB3aXRoaW4gdGltZXJzLiBUaGVyZSdzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyBhcm91bmQgaGFuZGxpbmcgc2hpZnRzIGFuZCBwb3RlbnRpYWwgb3ZlcmZsb3dzIGluIGB0Y3BfcmVxc2tfdGltZW91dF9za2AsIGFuZCBob3cgYHJlcXNrX251bV90aW1lb3V0YCBhY2Nlc3NlcyBgcmVxLVx1MDAzZW51bV90aW1lb3V0X3N5bmNvb2tpZWAuIFRoZSBiZXN0IHBhcnQgaXMgaXQncyByZWFkaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9uczsgbGlzdGVuaW5nIHNvY2tldHMsIFNZTiBoYW5kbGluZywgVENQIHRpbWVyIGV4cGlyYXRpb25zLCBzeXNjdGxzLCBhbmQgYHNldHNvY2tvcHRgIGNhbGxzIGZvciBgVENQX0RFRkVSX0FDQ0VQVGAgYW5kIGBUQ1BfU1lOQ05UYCBhcmUgYWxsIHByZXNlbnQuIFllcCwgc291bmRzIGxpa2UgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIGxldCdzIG5hcnJvdyBkb3duIHRoZSBmb2N1cyB0byBmaW5kIHRoZSBiZXN0IHN5bWJvbHMgdG8gdGFyZ2V0LiBUaGF0J3MgYEZvY3VzU3ltYm9sc2AuIExldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG1vZGlmaWVkIGRpcmVjdGx5IG9yIHRoYXQgY2FsbCB0aGUgY2hhbmdlZCBsb2dpYy4gVGhlIGtleSBmdW5jdGlvbnMgSSBzZWUgYXJlOiBgcmVxc2tfdGltZXJfaGFuZGxlcmAgKGluIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCksIHdoZXJlIHdlJ3JlIGNhcHBpbmcgcmV0cmllcyBhbmQgY2FsbGluZyBgdGNwX3JlcXNrX3RpbWVvdXRgOyBgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcmAgKGluIGB0Y3BfdGltZXIuY2ApLCB3aXRoIHRoZSBzYW1lIHJldHJ5LWNhcHBpbmcgYW5kIGB0Y3BfcmVxc2tfdGltZW91dF9za2AgY2FsbDsgYHNlY3NfdG9fcmV0cmFuc2AgKGluIGB0Y3AuY2ApLCB3aGljaCBpcyB1c2VkIHdpdGhpbiBgZG9fdGNwX3NldHNvY2tvcHRgIGZvciBgVENQX0RFRkVSX0FDQ0VQVGA7IGFuZCBgdGNwX2NoZWNrX3JlcWAgKGluIGB0Y3BfbWluaXNvY2tzLmNgKSwgd2hpY2ggY2FsbHMgYHRjcF9yZXFza190aW1lb3V0YC5cblxuTm93LCBhYm91dCBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgIGFuZCBgcmVxc2tfbnVtX3RpbWVvdXRgIC0gdGhleSdyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgdGhleSBjYW4ndCBiZSB0YXJnZXRlZCBkaXJlY3RseSB2aWEgc3ltYm9sIGNvdmVyYWdlLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICp1c2UqIHRoZW0uIFRoZSBvbmVzIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIGFyZSB0aGUgYmVzdDogYHJlcXNrX3RpbWVyX2hhbmRsZXJgLCBgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcmAsIGBzZWNzX3RvX3JldHJhbnNgIChvciByYXRoZXIgYGRvX3RjcF9zZXRzb2Nrb3B0YCB3aGljaCBjYWxscyBpdCksIGFuZCBgdGNwX2NoZWNrX3JlcWAuXG5cblF1aWNrIGNoZWNrIG9uIGBzZWNzX3RvX3JldHJhbnNgLiBZZXAsIGBzZWNzX3RvX3JldHJhbnNgIGlzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbiB0aGF0IGlzIG9ubHkgY2FsbGVkIGJ5IGBkb190Y3Bfc2V0c29ja29wdGAuIGBkb190Y3Bfc2V0c29ja29wdGAgaXRzZWxmIGJlY29tZXMgdGhlIHNldHNvY2tvcHQgZW50cnlwb2ludCwgd2hpY2ggaXMgZ29vZC5cblxuU28sIGByZXFza190aW1lcl9oYW5kbGVyYCwgYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgLCBgdGNwX2NoZWNrX3JlcWAsIGFuZCBgZG9fdGNwX3NldHNvY2tvcHRgIGFyZSB0aGUgcmVhbCBzdGFycy5cblxuRmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCB0byBhY3R1YWxseSBleGVyY2lzZSB0aGUgY2hhbmdlcyBpbiBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGBuZXQvaXB2NC90Y3AuY2AsIGFuZCBgbmV0L2lwdjQvdGNwX3RpbWVyLmNgLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC9NYWtlZmlsZWAgb3IgYG5ldC9pcHY0L0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDIyMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjIwLjIwODAxNTE0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjI4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9jb25uZWN0aW9uX3NvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjA5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS04LVxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6OTpcXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTEwLVxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwMC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwX2ZpYi5oXFx1MDAzZVxcbm5ldC9pcHY0L2FmX2luZXQuYzoxMDE6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMDItI2luY2x1ZGUgXFx1MDAzY25ldC9ncm8uaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYz02MT1zdGF0aWMgaW50IGJwZl90Y3BfY2FfYnRmX3N0cnVjdF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy04MC1cXHRcXHRicmVhaztcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODE6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jaywgaWNza19jYV9wcml2KTpcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODI6XFx0XFx0ZW5kID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrLCBpY3NrX2NhX3ByaXYpO1xcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYy04My1cXHRcXHRicmVhaztcXG5uZXQvaXB2NC9icGZfdGNwX2NhLmM6ODQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssIGljc2tfYWNrLnBlbmRpbmcpOlxcbm5ldC9pcHY0L2JwZl90Y3BfY2EuYzo4NTpcXHRcXHRlbmQgPSBvZmZzZXRvZmVuZChzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2ssXFxubmV0L2lwdjQvYnBmX3RjcF9jYS5jLTg2LVxcdFxcdFxcdFxcdCAgaWNza19hY2sucGVuZGluZyk7XFxuLS1cXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM9MTg0OT1pbnQgY2lwc29fdjRfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xODU5LVxcdHN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7XFxubmV0L2lwdjQvY2lwc29faXB2NC5jOjE4NjA6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uO1xcbm5ldC9pcHY0L2NpcHNvX2lwdjQuYy0xODYxLVxcbi0tXFxubmV0L2lwdjQvY2lwc29faXB2NC5jPTIwNTM9dm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTIwNjEtXFx0aWYgKGluZXRfdGVzdF9iaXQoSVNfSUNTSywgc2spIFxcdTAwMjZcXHUwMDI2IGhkcl9kZWx0YSBcXHUwMDNlIDApIHtcXG5uZXQvaXB2NC9jaXBzb19pcHY0LmM6MjA2MjpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvY2lwc29faXB2NC5jLTIwNjMtXFx0XFx0c2tfY29ubi1cXHUwMDNlaWNza19leHRfaGRyX2xlbiAtPSBoZHJfZGVsdGE7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0LVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTU6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2hhc2h0YWJsZXMuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NjAxPXN0YXRpYyBpbnQgaW5ldF9jc2tfd2FpdF9mb3JfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW8pXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02MDIte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6NjAzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTYwNC1cXHRERUZJTkVfV0FJVCh3YWl0KTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NjQ5PXN0cnVjdCBzb2NrICppbmV0X2Nza19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNjUwLXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjY1MTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy02NTItXFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcXHUwMDI2aWNzay1cXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTcxOD12b2lkIGluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03MjIte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6NzIzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTcyNC1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzMxPXZvaWQgaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzMyLXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjczMzpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03MzQtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTc0Mz12b2lkIGluZXRfY3NrX2NsZWFyX3htaXRfdGltZXJzX3N5bmMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzQ0LXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc0NTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NDYtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMzM9c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzNy1cXHRzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIgPSByZXEtXFx1MDAzZXJza19saXN0ZW5lcjtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwMzg6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTAzOS1cXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTE4Nz1zdGF0aWMgdm9pZCBpbmV0X2Nsb25lX3VscChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHN0cnVjdCBzb2NrICpuZXdzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE4OS17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTkwOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKG5ld3NrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExOTEtXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEyMDY9c3RydWN0IHNvY2sgKmluZXRfY3NrX2Nsb25lX2xvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjEwLVxcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2Nsb25lX2xvY2soc2ssIHByaW9yaXR5KTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyMTE6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpuZXdpY3NrO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIxMi1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMTY9c3RhdGljIGludCBpbmV0X3VscF9jYW5fbGlzdGVuKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMTcte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTMxODpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzE5LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMzM1PWludCBpbmV0X2Nza19saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTMzNi17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzM3OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzMzgtXFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDY4PXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ2OS17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDcwOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0NzEtXFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcXHUwMDI2aWNzay1cXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L2luZXRfY29tbW9uLmhcXHUwMDNlXFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvYnBmX3NrX3N0b3JhZ2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTE5OT1zdGF0aWMgaW50IGluZXRfZGlhZ19nZXRfcHJvdG9jb2woY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIwOC1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzoyMDk6aW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTIxMC1cXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbmV0L2FkZHJjb25mLmhcXHUwMDNlXFxubmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmM6MjI6I2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oXFx1MDAzZVxcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9oYXNodGFibGVzLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYz0xMDM9dm9pZCBpbmV0X3R3c2tfaGFzaGRhbmNlX3NjaGVkdWxlKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LFxcbi0tXFxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMTA4LVxcdGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoxMDk6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTExMC1cXHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgc2stXFx1MDAzZXNrX2hhc2gpO1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDkyLVxcdFxcdGlmIChpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSkge1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTA5MzpcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDk0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjAwLXtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjAxOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjAyLVxcdHN0cnVjdCBzb2NrICpjaGlsZDtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQyMD12b2lkIHRjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcC5jLTQyMS17XFxubmV0L2lwdjQvdGNwLmM6NDIyOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYy00MjMtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xNTUyPXZvaWQgX190Y3BfY2xlYW51cF9yYnVmKHN0cnVjdCBzb2NrICpzaywgaW50IGNvcGllZClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTE1NTctXFx0aWYgKGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7XFxubmV0L2lwdjQvdGNwLmM6MTU1ODpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtMTU1OS1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMzNjE9aW50IHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzM2My1cXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxubmV0L2lwdjQvdGNwLmM6MzM2NDpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtMzM2NS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4Mzc9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM4NDAtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwLmM6Mzg0MTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtMzg0Mi1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00MTcyPWludCB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy00MTc0LXtcXG5uZXQvaXB2NC90Y3AuYzo0MTc1OlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYy00MTc2LVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDIxMD12b2lkIHRjcF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQyMTItXFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7IC8qIGlmZiBza190eXBlID09IFNPQ0tfU1RSRUFNICovXFxubmV0L2lwdjQvdGNwLmM6NDIxMzpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtNDIxNC1cXHRjb25zdCB1OCBlY3QxX2lkeCA9IElORVRfRUNOX0VDVF8xIC0gMTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDQ4My17XFxubmV0L2lwdjQvdGNwLmM6NDQ4NDpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwLmMtNDQ4NS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ4Njc9aW50IHRjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ4Njkte1xcbm5ldC9pcHY0L3RjcC5jOjQ4NzA6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcC5jLTQ4NzEtXFxuLS1cXG5uZXQvaXB2NC90Y3BfYmljLmM9MTkwPXN0YXRpYyB2b2lkIGJpY3RjcF9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBhY2tfc2FtcGxlICpzYW1wbGUpXFxubmV0L2lwdjQvdGNwX2JpYy5jLTE5MS17XFxubmV0L2lwdjQvdGNwX2JpYy5jOjE5MjpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2JpYy5jLTE5My1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9Mzg9dm9pZCB0Y3Bfc2V0X2NhX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTggY2Ffc3RhdGUpXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0zOS17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzo0MDpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2NvbmcuYy00MS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjE2PXZvaWQgdGNwX2Fzc2lnbl9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yMTgtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjE5OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIyMC1cXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjM2PXZvaWQgdGNwX2luaXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTIzNy17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyMzg6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjM5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz0yNTA9c3RhdGljIHZvaWQgdGNwX3JlaW5pdF9jb25nZXN0aW9uX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy0yNTIte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6MjUzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTI1NC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9jb25nLmM9MjcwPXZvaWQgdGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTI3MS17XFxubmV0L2lwdjQvdGNwX2NvbmcuYzoyNzI6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9jb25nLmMtMjczLVxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYz00MTI9aW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBsb2FkLFxcbi0tXFxubmV0L2lwdjQvdGNwX2NvbmcuYy00MTQte1xcbm5ldC9pcHY0L3RjcF9jb25nLmM6NDE1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfY29uZy5jLTQxNi1cXHRjb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9MTE1PXN0YXRpYyBpbnQgdGNwX2RpYWdfZ2V0X2F1eChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluLFxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xMTcte1xcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTE4OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTExOS1cXHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTE0Nj1zdGF0aWMgc2l6ZV90IHRjcF9kaWFnX2dldF9hdXhfc2l6ZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluKVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtMTQ3LXtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjE0ODpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNDktXFx0c2l6ZV90IHNpemUgPSAwO1xcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MTQ1PWludCB0Y3BfZmFzdG9wZW5fcmVzZXRfY2lwaGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMTgxLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjE4MjppbnQgdGNwX2Zhc3RvcGVuX2dldF9jaXBoZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMTgzLVxcdFxcdFxcdCAgICB1NjQgKmtleSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9odGNwLmM9ODI9c3RhdGljIGlubGluZSB2b2lkIG1lYXN1cmVfcnR0KHN0cnVjdCBzb2NrICpzaywgdTMyIHNydHQpXFxubmV0L2lwdjQvdGNwX2h0Y3AuYy04My17XFxubmV0L2lwdjQvdGNwX2h0Y3AuYzo4NDpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2h0Y3AuYy04NS1cXHRzdHJ1Y3QgaHRjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaHRjcC5jPTEwMT1zdGF0aWMgdm9pZCBtZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2h0Y3AuYy0xMDMte1xcbm5ldC9pcHY0L3RjcF9odGNwLmM6MTA0OlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaHRjcC5jLTEwNS1cXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTIyNz1zdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0yMjgte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjIyOTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjMwLVxcdGNvbnN0IHVuc2lnbmVkIGludCBsc3MgPSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5sYXN0X3NlZ19zaXplO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzExPXN0YXRpYyB2b2lkIHRjcF9pbmNyX3F1aWNrYWNrKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG1heF9xdWlja2Fja3MpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzEyLXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMTM6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMxNC1cXHR1bnNpZ25lZCBpbnQgcXVpY2thY2tzID0gdGNwX3NrKHNrKS1cXHUwMDNlcmN2X3duZCAvICgyICogaWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMjM9c3RhdGljIHZvaWQgdGNwX2VudGVyX3F1aWNrYWNrX21vZGUoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbWF4X3F1aWNrYWNrcylcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMjQte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMyNTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzI2LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzM2PXN0YXRpYyBib29sIHRjcF9pbl9xdWlja2Fja19tb2RlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzcte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMzODpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzM5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9Nzc4PXN0YXRpYyB2b2lkIHRjcF9jbGFtcF93aW5kb3coc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzgwLVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc4MTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzgyLVxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTk5NT1zdGF0aWMgdm9pZCB0Y3Bfc2F2ZV9scmN2X2Zsb3dsYWJlbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy05OTctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6OTk4OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy05OTktXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDE1PXN0YXRpYyB2b2lkIHRjcF9ldmVudF9kYXRhX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTAxNy1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMDE4OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE5LVxcdHUzMiBub3c7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yNTU0PXZvaWQgdGNwX2VudGVyX2xvc3Moc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI1NTUte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI1NTY6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI1NTctXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yODQzPXN0YXRpYyB2b2lkIHRjcF91bmRvX2N3bmRfcmVkdWN0aW9uKHN0cnVjdCBzb2NrICpzaywgYm9vbCB1bm1hcmtfbG9zcylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTctXFx0aWYgKHRwLVxcdTAwM2Vwcmlvcl9zc3RocmVzaCkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjI4NTg6XFx0XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTI4NTktXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zMDc0PXN0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX2ZhaWxlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3NS17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MzA3NjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzA3Ny1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMwODM9c3RhdGljIHZvaWQgdGNwX210dXBfcHJvYmVfc3VjY2VzcyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMDg1LVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjMwODY6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTMwODctXFx0dTY0IHZhbDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMxMTY9c3RhdGljIHZvaWQgdGNwX25vbl9jb25nZXN0aW9uX2xvc3NfcmV0cmFuc21pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExNy17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MzExODpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzExOS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTMzMjg9c3RhdGljIHZvaWQgdGNwX2Zhc3RyZXRyYW5zX2FsZXJ0KHN0cnVjdCBzb2NrICpzaywgY29uc3QgdTMyIHByaW9yX3NuZF91bmEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzMwLXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozMzMxOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zMzMyLVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzUxMz1zdGF0aWMgdm9pZCB0Y3BfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBhY2tlZClcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE0LXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozNTE1OlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zNTE2LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzUyND12b2lkIHRjcF9yZWFybV9ydG8oc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjUte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM1MjY6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM1MjctXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zNjAyPXN0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICphY2tfc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzYwNS17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MzYwNjpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzYwNy1cXHR1NjQgZmlyc3RfYWNrdCwgbGFzdF9hY2t0O1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MzgwNz1zdGF0aWMgdm9pZCB0Y3BfYWNrX3Byb2JlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODA4LXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozODA5OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zODEwLVxcdHN0cnVjdCBza19idWZmICpoZWFkID0gdGNwX3NlbmRfaGVhZChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0zODU4PXN0YXRpYyB2b2lkIHRjcF9jb25nX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWRfc2Fja2VkLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzg2MC17XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Mzg2MTpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzg2Mi1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQxNzI9c3RhdGljIHZvaWQgdGNwX2luX2Fja19ldmVudChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQxNzMte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQxNzQ6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQxNzUtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00Mjc2PXN0YXRpYyBpbnQgdGNwX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFnKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQyNzcte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQyNzg6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQyNzktXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NzA1PXZvaWQgdGNwX2luaXRfdHJhbnNmZXIoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnBmX29wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDYte1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjY3MDc6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MDgtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NzMzPXZvaWQgdGNwX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3MzUtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjczNjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjczNy1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY4NTI9c3RhdGljIGludCB0Y3BfcmN2X3N5bnNlbnRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02ODU0LXtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2ODU1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02ODU2LVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzE1NC1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MTU1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MTU2LVxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz00Mzg9dm9pZCB0Y3BfbGRfUlRPX3JldmVydChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy00Mzkte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6NDQwOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTQ0MS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM0OD12b2lkIGluZXRfc2tfcnhfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNTctXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzU4OmNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYyA9IHtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNTktXFx0LnF1ZXVlX3htaXRcXHQgICA9IGlwX3F1ZXVlX3htaXQsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIzOTY9c3RhdGljIGludCB0Y3BfdjRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzOTcte1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM5ODpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzk5LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yNzcwPXN0YXRpYyB2b2lkIGdldF90Y3A0X3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGludCBpKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzc0LVxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6Mjc3NTpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzc2LVxcdGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMTMtXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmhcXHUwMDNlXFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYy0xNS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmM9MzQwPXZvaWQgdGNwX3VwZGF0ZV9tZXRyaWNzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfbWV0cmljcy5jLTM0MS17XFxubmV0L2lwdjQvdGNwX21ldHJpY3MuYzozNDI6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9tZXRyaWNzLmMtMzQzLVxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9MzI2PXZvaWQgdGNwX3RpbWVfd2FpdChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSwgaW50IHRpbWVvKVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0zMjcte1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzozMjg6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0zMjktXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NDk3PXZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQ5OC17XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ5OTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTUwMC1cXHR1MzIgY2Ffa2V5ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQ0NfQUxHTyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTU1Mi1cXHRzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdHJlcSA9IHRjcF9yc2socmVxKTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NTUzOlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTU0LVxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqb2xkdHA7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbnYuYz0yMzk9c3RhdGljIHZvaWQgdGNwbnZfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgYWNrX3NhbXBsZSAqc2FtcGxlKVxcbm5ldC9pcHY0L3RjcF9udi5jLTI0MC17XFxubmV0L2lwdjQvdGNwX252LmM6MjQxOlxcdGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfbnYuYy0yNDItXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODM9c3RhdGljIHZvaWQgdGNwX2V2ZW50X25ld19kYXRhX3NlbnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NC17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODYtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTc5PXN0YXRpYyB2b2lkIHRjcF9ldmVudF9kYXRhX3NlbnQoc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xODEte1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxODI6XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xODMtXFx0Y29uc3QgdTMyIG5vdyA9IHRjcF9qaWZmaWVzMzI7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTUzOC17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1Mzk6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQwLVxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTk5Nj1zdGF0aWMgaW5saW5lIGludCBfX3RjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTk5OC1cXHRjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTk5OTpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDAtXFx0aW50IG1zc19ub3c7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjAyOT1pbnQgdGNwX21zc190b19tdHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbXNzKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMzEtXFx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwMzI6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDMzLVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIwNDI9dm9pZCB0Y3BfbXR1cF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDQ0LVxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoyMDQ1OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA0Ni1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjA3OT11bnNpZ25lZCBpbnQgdGNwX3N5bmNfbXNzKHN0cnVjdCBzb2NrICpzaywgdTMyIHBtdHUpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA4MS1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjA4MjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwODMtXFx0aW50IG1zc19ub3c7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjQ1Mj1zdGF0aWMgYm9vbCB0Y3BfdHNvX3Nob3VsZF9kZWZlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjQ1Ni17XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjI0NTc6XFx0Y29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNDU4LVxcdHUzMiBzZW5kX3dpbiwgY29uZ193aW4sIGxpbWl0LCBpbl9mbGlnaHQsIHRocmVzaG9sZDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0yNTY1PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfbXR1X2NoZWNrX3JlcHJvYmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNTY2LXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjU2NzpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTI1NjgtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjY4ND1zdGF0aWMgaW50IHRjcF9tdHVfcHJvYmUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yNjg1LXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjY4NjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTI2ODctXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzA5OT1ib29sIHRjcF9zY2hlZHVsZV9sb3NzX3Byb2JlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBhZHZhbmNpbmdfcnRvKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zMTAwLXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzEwMTpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMxMDItXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzMxND11MzIgX190Y3Bfc2VsZWN0X3dpbmRvdyhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTMzMTUte1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozMzE2OlxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzMxNy1cXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zNTUwPWludCBfX3RjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWdzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNTUxLXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzU1MjpcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM1NTMtXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzcyNT12b2lkIHRjcF94bWl0X3JldHJhbnNtaXRfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zNzI2LXtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzcyNzpcXHRjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM3MjgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJ0eF9oZWFkLCAqaG9sZSA9IE5VTEw7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjAuMjg3MzgyMjI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDQ4MTkzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSU5FVGAgaXMgZW5hYmxlZCwgc28gSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGJ5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIHByb2JhYmx5IGBuZXQvaXB2NC9LY29uZmlnYCBvciBgbmV0L0tjb25maWdgLiBgSU5FVGAgaXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgSVB2NCBhbmQgVENQIG5ldHdvcmtpbmcsIHNvIHRoYXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLCBhbmQgSSBhZ3JlZS4gVGhpcyB0b3VjaGVzIHNvbWUgY3JpdGljYWwgcGFydHMgb2YgdGhlIFRDUCBzdGFjazogY29ubmVjdGlvbiBoYW5kbGluZywgcmV0cmFuc21pc3Npb24gdGltZXJzLCBgcmVxdWVzdF9zb2NrYCBiaXRmaWVsZCBwYWNraW5nLCBhbmQgdGltZW91dCBjYWxjdWxhdGlvbnMuIFRoYXQncyBhIGdvb2Qgc2lnbi5cblxuTmV4dCwgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJpZ2h0IHN5bWJvbHMgYXJlIGJlaW5nIHRhcmdldGVkLCBsZXQncyBjb25maXJtIHRoZSBgRm9jdXNTeW1ib2xzYDpcbiogICBgcmVxc2tfdGltZXJfaGFuZGxlcmAgLSBIYW5kbGVzIHJldHJhbnNtaXNzaW9uIHRpbWVycywgdmVyeSBpbXBvcnRhbnQuXG4qICAgYHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXJgIC0gUmVsYXRlZCB0byBGYXN0IE9wZW4sIGFub3RoZXIgY3JpdGljYWwgcGllY2Ugb2YgVENQLlxuKiAgIGBkb190Y3Bfc2V0c29ja29wdGAgLSBUaGlzIGhhbmRsZXMgc29ja2V0IG9wdGlvbnMsIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvci5cbiogICBgdGNwX2NoZWNrX3JlcWAgLSBVc2VkIGR1cmluZyBTWU4tQUNLIGhhbmRsaW5nLCBpdCdzIGFsc28gYSBncmVhdCB0YXJnZXQuXG5cblRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBvbmx5IGluY2x1ZGVzIGBJTkVUYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC5cblxuVGhlIHJlYXNvbmluZyBzZWVtcyBzb3VuZCwgd2hpY2ggY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24uIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIDctYml0IG92ZXJmbG93IGlzc3VlIGluIGByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0YCBieSBjYXBwaW5nIFNZTi1BQ0sgcmV0cmllcyBhdCAxMjcgaW4gYm90aCBgcmVxc2tfdGltZXJfaGFuZGxlcmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3RpbWVyYC4gSXQgYWxzbyBtb2RpZmllcyBiaXRmaWVsZCBkZWZpbml0aW9ucyBpbiBgc3RydWN0IHJlcXVlc3Rfc29ja2AsIGFuZCB1cGRhdGVzIGB0Y3BfcmVxc2tfdGltZW91dF9za2AuIFRoZSBwYXRocyBpbnZvbHZlZCBhcmUgYWxsIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBzb2NrZXQgb3B0aW9ucy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGNyaXRpY2FsIGFyZWEgdGhhdCBuZWVkcyBjbG9zZSBleGFtaW5hdGlvbi5cblxuRmluYWxseSwgSSdsbCBnaXZlIHRoZSBzZXQtcmVzdWx0cyBjYWxsIGEgZmluYWwgb25jZS1vdmVyLiBZZXAsIGV2ZXJ5dGhpbmcgbG9va3MgY29tcGxldGUgYW5kIGNvaGVyZW50LiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBzb2xpZCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAyNCwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjQuODkyMjA0MzcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMTk5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxc2tfdGltZXJfaGFuZGxlclwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX3N5bmFja190aW1lclwiLFxuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcInRjcF9jaGVja19yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxc2tfdGltZXJfaGFuZGxlclwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX3N5bmFja190aW1lclwiLFxuICAgIFwiZG9fdGNwX3NldHNvY2tvcHRcIixcbiAgICBcInRjcF9jaGVja19yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIGFuZCB0aW1lb3V0IGhhbmRsaW5nIHRvIG1hdGNoIHRoZSA3LWJpdCByZXF1ZXN0X3NvY2s6Om51bV90aW1lb3V0IGZpZWxkLiBJdCBjYXBzIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgaW4gcmVxc2tfdGltZXJfaGFuZGxlciBhbmQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lciwgcmVmYWN0b3JzIHRoZSBiaXRmaWVsZCBsYXlvdXQgaW4gc3RydWN0IHJlcXVlc3Rfc29jaywgYW5kIHVwZGF0ZXMgdGNwX3JlcXNrX3RpbWVvdXRfc2sgLyB0Y3BfcmVxc2tfdGltZW91dCBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBzaGlmdCBvdmVyZmxvd3MuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldCBjb25uZWN0aW9ucyBhbmQgc2V0c29ja29wdC9zeXNjdGwgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjUuMDI0NDE1MDY4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM0OTQ3NTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjI1LjAyNTIxMDk2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4MzQ4Njc2MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYml0ZmllbGQgZGF0YSByYWNlIHNhZmV0eSBhbmQgaW50ZWdlci9zaGlmdCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIFRDUCBTWU4tQUNLIHJldHJhbnNtaXNzaW9uIHRpbWVvdXRzIGZvciBgc3RydWN0IHJlcXVlc3Rfc29ja2AuIEl0IGFkZHMgYSB1bmlvbiB3aXRoIGBudW1fdGltZW91dF9zeW5jb29raWVgIHRvIGFsbG93IGxvY2tsZXNzIHNpbmdsZS1ieXRlIGBSRUFEX09OQ0VgIHJlYWRzIG9mIHRoZSA3LWJpdCBgbnVtX3RpbWVvdXRgIGZpZWxkLCBjYXBzIG1heGltdW0gU1lOLUFDSyByZXRyaWVzIHRvIDEyNyAobWF0Y2hpbmcgdGhlIDctYml0IGZpZWxkIHdpZHRoKSwgYW5kIHByZXZlbnRzIHVuZGVmaW5lZCBzaGlmdCBiZWhhdmlvciBpbiBgdGNwX3JlcXNrX3RpbWVvdXRfc2tgLlxcblxcbkFsbCBmaWVsZHMgb2YgYHN0cnVjdCByZXF1ZXN0X3NvY2tgIChpbmNsdWRpbmcgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYHJlcXNrX2FsbG9jX25vcHJvZigpYC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBtZW1vcnkgaXMgaW50cm9kdWNlZCwgbm8gYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGFyaXRobWV0aWMsIGJvdW5kcyBjaGVja2luZywgYW5kIGF0b21pYyByZWFkIGhlbHBlcnMsIG5vbmUgb2Ygd2hpY2ggcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RlZCBieSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MDgxZTdjMzViYTZhNDA4MDA1YmZhNzQ2OTAyOTcyZTVlMjc4Yjg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNjo1NTo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbmluZGV4IDIwOGY0Njk2N2VlNTkuLjRhMmVkOTY0ZGNlYWIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbkBAIC05NTQsNyArOTU0LDkgQEAgdGNwX3N0ZHVyZyAtIEJPT0xFQU5cbiBcbiB0Y3Bfc3luYWNrX3JldHJpZXMgLSBJTlRFR0VSXG4gXHROdW1iZXIgb2YgdGltZXMgU1lOQUNLcyBmb3IgYSBwYXNzaXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQgd2lsbFxuLVx0YmUgcmV0cmFuc21pdHRlZC4gU2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAyNTUuIERlZmF1bHQgdmFsdWVcbitcdGJlIHJldHJhbnNtaXR0ZWQuIFRoZSBzeXNjdGwgYWNjZXB0cyAwLTI1NS4gVmFsdWVzIGFib3ZlIDEyNyBhcmVcbitcdHNpbGVudGx5IGNhcHBlZCBieSB0aGUgU1lOLUFDSyB0aW1lcnMsIG1hdGNoaW5nIHRoZSA3LWJpdFxuK1x0cmVxdWVzdF9zb2NrOjpudW1fdGltZW91dCBmaWVsZC4gRGVmYXVsdCB2YWx1ZVxuIFx0aXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gMzFzZWNvbmRzIHRpbGwgdGhlIGxhc3QgcmV0cmFuc21pc3Npb25cbiBcdHdpdGggdGhlIGN1cnJlbnQgaW5pdGlhbCBSVE8gb2YgMXNlY29uZC4gV2l0aCB0aGlzIHRoZSBmaW5hbCB0aW1lb3V0XG4gXHRmb3IgYSBwYXNzaXZlIFRDUCBjb25uZWN0aW9uIHdpbGwgaGFwcGVuIGFmdGVyIDYzc2Vjb25kcy5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaCBiL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oXG5pbmRleCA1YTljODI2YTcwOTJkLi5hOTc4MWZhYjc3NGFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oXG5AQCAtNTgsMTIgKzU4LDE3IEBAIHN0cnVjdCByZXF1ZXN0X3NvY2sge1xuIFx0c3RydWN0IHJlcXVlc3Rfc29ja1x0XHQqZGxfbmV4dDtcbiBcdHUxNlx0XHRcdFx0bXNzO1xuIFx0dThcdFx0XHRcdG51bV9yZXRyYW5zOyAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHMgKi9cbi1cdHU4XHRcdFx0XHRzeW5jb29raWU6MTsgLyogVHJ1ZSBpZlxuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdHU4XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG4gXHRcdFx0XHRcdFx0ICAgICAgKiAxKSB0Y3BvcHRzIG5lZWRzIHRvIGJlIGVuY29kZWQgaW5cbiBcdFx0XHRcdFx0XHQgICAgICAqICAgIFRTIG9mIFNZTitBQ0tcbiBcdFx0XHRcdFx0XHQgICAgICAqIDIpIEFDSyBpcyB2YWxpZGF0ZWQgYnkgQlBGIGtmdW5jLlxuIFx0XHRcdFx0XHRcdCAgICAgICovXG4tXHR1OFx0XHRcdFx0bnVtX3RpbWVvdXQ6NzsgLyogbnVtYmVyIG9mIHRpbWVvdXRzICovXG4rXHRcdFx0dThcdFx0bnVtX3RpbWVvdXQ6NzsgLyogbnVtYmVyIG9mIHRpbWVvdXRzICovXG4rXHRcdH07XG4rXHRcdHU4XHRcdG51bV90aW1lb3V0X3N5bmNvb2tpZTtcbitcdH07XG4gXHR1MzJcdFx0XHRcdHRzX3JlY2VudDtcbiBcdHN0cnVjdCB0aW1lcl9saXN0XHRcdHJza190aW1lcjtcbiBcdGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzXHQqcnNrX29wcztcbkBAIC03NCw2ICs3OSwxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9zb2NrIHtcbiBcdHUzMlx0XHRcdFx0dGltZW91dDtcbiB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdTggcmVxc2tfbnVtX3RpbWVvdXQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuK3tcbitcdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuK1xuKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRClcbitcdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbisjZWxzZVxuK1x0cmV0dXJuIG51bV90aW1lb3V0IFx1MDAyNiAweDdmO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHJldHVybiAoc3RydWN0IHJlcXVlc3Rfc29jayAqKXNrO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDQzNjQ5NWZmMjI3MWQuLmExYzIwMzUyYTg2NjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC0xODMsNiArMTgzLDggQEAgc3RhdGljX2Fzc2VydCgoMSBcdTAwM2NcdTAwM2MgQVRPX0JJVFMpIFx1MDAzZSBUQ1BfREVMQUNLX01BWCk7XG4gI2RlZmluZSBNQVhfVENQX0tFRVBJTlRWTFx0MzI3NjdcbiAjZGVmaW5lIE1BWF9UQ1BfS0VFUENOVFx0XHQxMjdcbiAjZGVmaW5lIE1BWF9UQ1BfU1lOQ05UXHRcdDEyN1xuKy8qIHJlcXVlc3Rfc29jazo6bnVtX3RpbWVvdXQgaXMgYSA3LWJpdCBmaWVsZC4gKi9cbisjZGVmaW5lIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVNcdDEyN1xuIFxuIC8qIEVuc3VyZSB0aGF0IFRDUCBQQVdTIGNoZWNrcyBhcmUgcmVsYXhlZCBhZnRlciB+MjE0NyBzZWNvbmRzXG4gICogdG8gYXZvaWQgb3ZlcmZsb3dzLiBUaGlzIGFzc3VtZXMgYSBjbG9jayBzbWFsbGVyIHRoYW4gMSBNaHouXG5AQCAtODgxLDEyICs4ODMsMjMgQEAgc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKVxuIFx0cmV0dXJuIHVzZWNzX3RvX2ppZmZpZXMoKHRwLVx1MDAzZXNydHRfdXMgXHUwMDNlXHUwMDNlIDMpICsgdHAtXHUwMDNlcnR0dmFyX3VzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNwX3JlcXNrX3RpbWVvdXRfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4ge1xuLVx0dTY0IHRpbWVvdXQgPSAodTY0KXJlcS1cdTAwM2V0aW1lb3V0IFx1MDAzY1x1MDAzYyByZXEtXHUwMDNlbnVtX3RpbWVvdXQ7XG4rXHR1NjQgdGltZW91dCA9IFJFQURfT05DRShyZXEtXHUwMDNldGltZW91dCk7XG4rXHR1MzIgcnRvX21heCA9IHRjcF9ydG9fbWF4KHNrKTtcbitcdHU4IG51bV90aW1lb3V0ID0gcmVxc2tfbnVtX3RpbWVvdXQocmVxKTtcbitcbitcdGlmIChudW1fdGltZW91dCBcdTAwM2U9IEJJVFNfUEVSX1RZUEUodGltZW91dCkgfHxcbitcdCAgICB0aW1lb3V0IFx1MDAzZSBVNjRfTUFYIFx1MDAzZVx1MDAzZSBudW1fdGltZW91dClcbitcdFx0cmV0dXJuIHJ0b19tYXg7XG4rXG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbWluX3QodTY0LCB0aW1lb3V0IFx1MDAzY1x1MDAzYyBudW1fdGltZW91dCwgcnRvX21heCk7XG4rfVxuIFxuLVx0cmV0dXJuICh1bnNpZ25lZCBsb25nKW1pbl90KHU2NCwgdGltZW91dCxcbi1cdFx0XHRcdCAgICB0Y3BfcnRvX21heChyZXEtXHUwMDNlcnNrX2xpc3RlbmVyKSk7XG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjcF9yZXFza190aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbit7XG4rXHRyZXR1cm4gdGNwX3JlcXNrX3RpbWVvdXRfc2socmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbiB9XG4gXG4gdTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjIxZjk2YTUwYzEwZmUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMTA2OCw2ICsxMDY4LDggQEAgc3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdG5ldCA9IHNvY2tfbmV0KHNrX2xpc3RlbmVyKTtcbiBcdG1heF9zeW5fYWNrX3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbiBcdFx0UkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpO1xuK1x0bWF4X3N5bl9hY2tfcmV0cmllcyA9IG1pbl90KGludCwgbWF4X3N5bl9hY2tfcmV0cmllcyxcbitcdFx0XHRcdCAgICBNQVhfVENQX1NZTkFDS19SRVRSSUVTKTtcbiBcdC8qIE5vcm1hbGx5IGFsbCB0aGUgb3BlbnJlcXMgYXJlIHlvdW5nIGFuZCBiZWNvbWUgbWF0dXJlXG4gXHQgKiAoaS5lLiBjb252ZXJ0ZWQgdG8gZXN0YWJsaXNoZWQgc29ja2V0KSBmb3IgZmlyc3QgdGltZW91dC5cbiBcdCAqIElmIHN5bmFjayB3YXMgbm90IGFja25vd2xlZGdlZCBmb3IgMSBzZWNvbmQsIGl0IG1lYW5zXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggMWM4NjdhMzAyNDQ0Ni4uZTU1MWU2YWRjODAwNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgdTggc2Vjc190b19yZXRyYW5zKGludCBzZWNvbmRzLCBpbnQgdGltZW91dCwgaW50IHJ0b19tYXgpXG4gXHRcdGludCBwZXJpb2QgPSB0aW1lb3V0O1xuIFxuIFx0XHRyZXMgPSAxO1xuLVx0XHR3aGlsZSAoc2Vjb25kcyBcdTAwM2UgcGVyaW9kIFx1MDAyNlx1MDAyNiByZXMgXHUwMDNjIDI1NSkge1xuK1x0XHR3aGlsZSAoc2Vjb25kcyBcdTAwM2UgcGVyaW9kIFx1MDAyNlx1MDAyNiByZXMgXHUwMDNjIE1BWF9UQ1BfU1lOQUNLX1JFVFJJRVMpIHtcbiBcdFx0XHRyZXMrKztcbiBcdFx0XHR0aW1lb3V0IFx1MDAzY1x1MDAzYz0gMTtcbiBcdFx0XHRpZiAodGltZW91dCBcdTAwM2UgcnRvX21heClcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5pbmRleCBlNTZlYWU0YmMzNDFlLi4yZDJkZWMxZTkxNTY1IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5AQCAtNDY0LDExICs0NjQsMTMgQEAgc3RhdGljIHZvaWQgdGNwX2Zhc3RvcGVuX3N5bmFja190aW1lcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcbiBcdHRjcF9zeW5fYWNrX3RpbWVvdXQocmVxKTtcbiBcbi1cdC8qIEFkZCBvbmUgbW9yZSByZXRyeSBmb3IgZmFzdG9wZW4uXG4rXHQvKiBBZGQgb25lIG1vcmUgcmV0cnkgZm9yIGZhc3RvcGVuIHdoZW4gdGhlIHRpbWVvdXQgY291bnRlciBjYW5cbitcdCAqIHJlcHJlc2VudCBpdC5cbiBcdCAqIFBhaXJlZCB3aXRoIFdSSVRFX09OQ0UoKSBpbiB0Y3Bfc29ja19zZXRfc3luY250KClcbiBcdCAqL1xuIFx0bWF4X3JldHJpZXMgPSBSRUFEX09OQ0UoaWNzay1cdTAwM2VpY3NrX3N5bl9yZXRyaWVzKSA/IDpcbiBcdFx0UkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXMpICsgMTtcbitcdG1heF9yZXRyaWVzID0gbWluX3QoaW50LCBtYXhfcmV0cmllcywgTUFYX1RDUF9TWU5BQ0tfUkVUUklFUyk7XG4gXG4gXHRpZiAocmVxLVx1MDAzZW51bV90aW1lb3V0IFx1MDAzZT0gbWF4X3JldHJpZXMpIHtcbiBcdFx0dGNwX3dyaXRlX2Vycihzayk7XG5AQCAtNDkwLDcgKzQ5Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRpZiAoIXRwLVx1MDAzZXJldHJhbnNfc3RhbXApXG4gXHRcdHRwLVx1MDAzZXJldHJhbnNfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcF90cyh0cCk7XG4gXHR0Y3BfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsXG4tXHRcdFx0ICByZXEtXHUwMDNldGltZW91dCBcdTAwM2NcdTAwM2MgcmVxLVx1MDAzZW51bV90aW1lb3V0LCBmYWxzZSk7XG4rXHRcdFx0ICAgICB0Y3BfcmVxc2tfdGltZW91dF9zayhzaywgcmVxKSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB0Y3BfcnR4X3Byb2JlMF90aW1lZF9vdXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTY6MjUuMDI1MjEyMjI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTI5NDMwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJleW9uZCB0aGUgc3RhbmRhcmQgS0FTQU4gcnVucyB3ZSdyZSBhbHJlYWR5IGRvaW5nLiAgVGhlIGZvY3VzIGhlcmUgaXMgcmVhbGx5IG9uIGRldGVybWluaW5nIGlmIHRoZXJlJ3MgZW5vdWdoICpuZXcqIGNvZGUgc3VyZmFjZSBvciBzdWZmaWNpZW50bHkgaW50ZXJlc3RpbmcgbG9naWMgaW50cm9kdWNlZCB0byBtYWtlIGEgZm9jdXNlZCBLTVNBTiBzZXNzaW9uIHdvcnRod2hpbGUuXG5cbkZpcnN0LCBsZXQncyB3YWxrIHRocm91Z2ggdGhlIGRpZmYuICBJdCBzZWVtcyB0aGUgY2hhbmdlcyBhcmUgdG91Y2hpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdmFyaW91cyBuZXR3b3JrLXJlbGF0ZWQgZmlsZXMuIFNwZWNpZmljYWxseTpcblxuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBVcGRhdGVzIHRoZSBgdGNwX3N5bmFja19yZXRyaWVzYCBkb2N1bWVudGF0aW9uLiBEb2Vzbid0IHNlZW0gcmVsZXZhbnQgZm9yIEtNU0FOIGRpcmVjdGx5LCBidXQgZ29vZCB0byBrbm93IGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3MgYmVpbmcgdHdlYWtlZC5cbiogICAqKmBpbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaGA6KiogIEEgYml0ZmllbGQgaW4gdGhlIGByZXF1ZXN0X3NvY2tgIHN0cnVjdCBpcyBiZWluZyByZXdvcmtlZC4gVGhlIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGZpZWxkcyBhcmUgYmVpbmcgcmVmYWN0b3JlZCwgYW5kIGEgaGVscGVyIGZ1bmN0aW9uIGByZXFza19udW1fdGltZW91dGAgaXMgYWRkZWQuIFRoZSBiaXRmaWVsZCBtYW5pcHVsYXRpb24gbWlnaHQgYmUgYW4gYXJlYSBvZiBpbnRlcmVzdC4gQW55IGNoYW5nZXMgdG8gaG93IHdlIGFyZSBjYWxjdWxhdGluZyBhbmQgbWFuYWdpbmcgcmV0cmllcyBhbmQgdGltZW91dHMsIGVzcGVjaWFsbHkgaW52b2x2aW5nIGJpdGZpZWxkcywgY2FuIGxlYWQgdG8gaW50ZXJlc3RpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLlxuKiAgICoqYGluY2x1ZGUvbmV0L3RjcC5oYDoqKiBEZWZpbmVzIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYC4gVGhpcyBpbnRyb2R1Y2VzIGEgbmV3IHVwcGVyIGJvdW5kIGZvciByZXRyaWVzLiAgVGhlIGNhbGN1bGF0aW9uIG9mIHRpbWVvdXQgdXNlcyBhIHNoaWZ0IG9wZXJhdGlvbiB3aXRoIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IG92ZXJmbG93IGB0Y3BfcmVxc2tfdGltZW91dF9za2AsIHdoaWNoIHdhcnJhbnRzIHNjcnV0aW55LiAgVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgc28gZmFyLCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIG92ZXJmbG93IGJ1Z3MuXG4qICAgKipgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2A6KiogIENhcHBpbmcgYG1heF9zeW5fYWNrX3JldHJpZXNgLiAgQW5vdGhlciBsaW1pdC5cbiogICAqKmBuZXQvaXB2NC90Y3AuY2A6KiogIExpbWl0cyB0aGUgcmV0cmllcyBpbiB0aGUgYHNlY3NfdG9fcmV0cmFuc2AgZnVuY3Rpb24uXG4qICAgKipgbmV0L2lwdjQvdGNwX3RpbWVyLmNgOioqIENhcHMgYG1heF9yZXRyaWVzYCBhbmQgcmVwbGFjZXMgc29tZSBjYWxjdWxhdGlvbnMgd2l0aCB0aGUgYHRjcF9yZXFza190aW1lb3V0X3NrYCBoZWxwZXIuIFRoZSBjb21iaW5hdGlvbiBvZiBjYXBwaW5nIGFuZCB0aGUgaGVscGVyIGZ1bmN0aW9uIGhlcmUgaXMgaW50ZXJlc3RpbmcuXG5cblRoZSBwYXR0ZXJuIGVtZXJnaW5nIGlzIHRoYXQgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlZmluaW5nIHRoZSByZXRyeS90aW1lb3V0IGxvZ2ljIGZvciBUQ1AgU1lOLUFDS3MsIGFkZGluZyBsaW1pdHMgYW5kIHJlLWRvaW5nIHRoZSBjYWxjdWxhdGlvbnMgdG8gbWFrZSB0aGVtIHNhZmVyLiBCaXRmaWVsZCBjaGFuZ2VzIHBsdXMgbmV3IHRpbWVvdXQgY2FsY3VsYXRpb24gYW5kIG92ZXJmbG93IHByb3RlY3Rpb24gbWVhbnMgdGhlcmUgbWlnaHQgYmUgbW9yZSBjaGFuY2VzIG9mIHNvbWV0aGluZyBnb2luZyB3cm9uZy5cblxuVGhlIG5leHQgdGhpbmcgSSdkIGRvIGlzIGxvb2sgY2xvc2VseSBhdCBob3cgYHJlcXVlc3Rfc29ja2Agc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIG15IHByZWZlcnJlZCB0b29sIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHdoZXJlIGFuZCBob3cgYHJlcXVlc3Rfc29ja2Agc3RydWN0dXJlcyBhcmUgdXNlZC4gVGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGlzIHdoZXJlIHRoZXNlIGtpbmQgb2YgYnVncyB0eXBpY2FsbHkgb3JpZ2luYXRlLCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIGhvdyB0aGUgYml0ZmllbGRzIGFuZCB0aGUgdGltZW91dCB2YWx1ZSBhcmUgYmVpbmcgc2V0LiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBmaWVsZHMgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kLlxuXG5CYXNlZCBvbiB0aGUgaW5pdGlhbCBpbnNwZWN0aW9uLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgbWlnaHQgd2FycmFudCBhICpmb2N1c2VkKiBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIGJ1dCBJIHdvdWxkIG5lZWQgdG8gYW5hbHl6ZSB0aGUgYHJlcXVlc3Rfc29ja2AgYWxsb2NhdGlvbiBhbmQgdXNhZ2UgbW9yZSB0byBiZSBjZXJ0YWluLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnl0aGluZyB0aGF0IGludm9sdmVzIHRoZSBiaXRmaWVsZHMgKGBzeW5jb29raWVgLCBgbnVtX3RpbWVvdXRgKSwgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gKGVzcGVjaWFsbHkgdGhlIHNoaWZ0IG9wZXJhdGlvbiksIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGxpbWl0cyB0aGF0IHdlcmUgYWRkZWQsIHRvIGZpZ3VyZSBvdXQgaWYgd2UgaGF2ZSBpbnRlcmVzdGluZyBtZW1vcnkgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjUzLjU1NDY0NTE0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDQxMTExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXFza19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jPTEyNTA1PV9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU2OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjU3MDpcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjU3MS1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9ODQ5PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg1MDpyZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODUxLVxcdFxcdCAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzgtfVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODc5OiNkZWZpbmUgcmVxc2tfYWxsb2MoLi4uKVxcdGFsbG9jX2hvb2tzKHJlcXNrX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04ODAtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4ODE6c3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODgyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODg0LXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjg4NTpcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSByZXFza19hbGxvYyhvcHMsIHNrX2xpc3RlbmVyLFxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODg2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBhdHRhY2hfbGlzdGVuZXIpO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTctXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMyNy1cXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMjg6XFx0XFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTMyOS1cXHRlbHNlXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMzMDpcXHRcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzMxLVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTQtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM5NTpcXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5Ni1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY2MC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjYxOlxcdHJlcSA9IGluZXRfcmVxc2tfYWxsb2MocnNrX29wcywgc2ssICF3YW50X2Nvb2tpZSk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY2Mi1cXHRpZiAoIXJlcSlcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYz0xMzE9c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTY3LVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYzoxNjg6XFx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMTY5LVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NzI4PXN0YXRpYyB2b2lkIHN1YmZsb3dfdjZfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy03MzQtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo3MzU6c3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzM2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0NS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0NjpcXHRyZXR1cm4gaW5ldF9yZXFza19hbGxvYyhvcHMsIHNrX2xpc3RlbmVyLCBhdHRhY2hfbGlzdGVuZXIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ3LX1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjc0ODpFWFBPUlRfU1lNQk9MKG1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Njo1NS4wODkwNjIyNjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyODM4NDc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgcmVxc2tfYWxsb2Nfbm9wcm9mYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgcmVxc2tfYWxsb2Nfbm9wcm9mYCB3aXRoaW4gYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGFsbG9jYXRpb24gb2YgcmVxdWVzdCBzb2NrZXRzLCBsaWtlbHkgZm9yIGNvbm5lY3Rpb24gYXR0ZW1wdHMsIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIHByb2ZpbGluZyBkYXRhLiBUaGF0IFwibm9wcm9mXCIgc3VmZml4IGlzIGEgcHJldHR5IHN0cm9uZyBoaW50LiBJdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBjcml0aWNhbCBhbmQgZGV0YWlsZWQgcHJvZmlsaW5nIGlzbid0IG5lY2Vzc2FyeSwgbWF5YmUgZHVyaW5nIGhpZ2gtdm9sdW1lIGNvbm5lY3Rpb24gc3Rvcm1zIG9yIHNpbWlsYXIuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqd2hlbiogdGhpcyBvcHRpbWl6YXRpb24gaXMgdXNlZCBhbmQgd2h5IGEgcHJvZmlsZS1mcmVlIGFsbG9jYXRpb24gaXMgdGhlIHByZWZlcnJlZCBtZXRob2QgaGVyZS4gSSdtIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgc3BlY2lhbCBtZW1vcnkgcG9vbHMgb3IgY2FjaGluZyBzdHJhdGVnaWVzIHRvIHNwZWVkIHRoaW5ncyB1cC4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGNhbGxzIHRvIGBremFsbG9jYCwgYGttYWxsb2NgIG9yIHNpbWlsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSB0cmFkZS1vZmZzIGJlaW5nIG1hZGUgaGVyZSDigJMgbWVtb3J5IHVzYWdlIHZlcnN1cyBwcm9maWxpbmcgaW5mb3JtYXRpb24uIEknbGwgYWxzbyBiZSB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMgd2l0aGluIHRoaXMgZnVuY3Rpb24gb3IgaXRzIGNhbGxlcnMvY2FsbGVlcy4gVGhpcyBvbmUgc2hvdWxkIGJlIGludGVyZXN0aW5nLCBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1Njo1Ny42MTc0NTI2MDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQ1OlxcdFxcdCpyZXNlbmQgPSAhaW5ldF9yc2socmVxKS1cXHUwMDNlYWNrZWQgfHxcXG4gODQ2OlxcdFxcdFxcdCAgcmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSByc2txX2RlZmVyX2FjY2VwdCAtIDE7XFxuIDg0NzpcXHR9XFxuIDg0ODpcXHRcXG4gODQ5OlxcdHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpcXG4gODUwOlxcdHJlcXNrX2FsbG9jX25vcHJvZihjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuIDg1MTpcXHRcXHRcXHQgICBib29sIGF0dGFjaF9saXN0ZW5lcilcXG4gODUyOlxcdHtcXG4gODUzOlxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0cmVxID0ga21lbV9jYWNoZV9hbGxvY19ub3Byb2Yob3BzLVxcdTAwM2VzbGFiLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gODU2OlxcdFxcdGlmICghcmVxKVxcbiA4NTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg1ODpcXHRcXHRyZXEtXFx1MDAzZXJza19saXN0ZW5lciA9IE5VTEw7XFxuIDg1OTpcXHRcXHRpZiAoYXR0YWNoX2xpc3RlbmVyKSB7XFxuIDg2MDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2c2tfbGlzdGVuZXItXFx1MDAzZXNrX3JlZmNudCkpKSB7XFxuIDg2MTpcXHRcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUob3BzLVxcdTAwM2VzbGFiLCByZXEpO1xcbiA4NjI6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg2MzpcXHRcXHRcXHR9XFxuIDg2NDpcXHRcXHRcXHRyZXEtXFx1MDAzZXJza19saXN0ZW5lciA9IHNrX2xpc3RlbmVyO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFx0cmVxLVxcdTAwM2Vyc2tfb3BzID0gb3BzO1xcbiA4Njc6XFx0XFx0cmVxX3RvX3NrKHJlcSktXFx1MDAzZXNrX3Byb3QgPSBza19saXN0ZW5lci1cXHUwMDNlc2tfcHJvdDtcXG4gODY4OlxcdFxcdHNrX25vZGVfaW5pdChcXHUwMDI2cmVxX3RvX3NrKHJlcSktXFx1MDAzZXNrX25vZGUpO1xcbiA4Njk6XFx0XFx0c2tfdHhfcXVldWVfY2xlYXIocmVxX3RvX3NrKHJlcSkpO1xcbiA4NzA6XFx0XFx0cmVxLVxcdTAwM2VzYXZlZF9zeW4gPSBOVUxMO1xcbiA4NzE6XFx0XFx0cmVxLVxcdTAwM2VzeW5jb29raWUgPSAwO1xcbiA4NzI6XFx0XFx0cmVxLVxcdTAwM2VudW1fdGltZW91dCA9IDA7XFxuIDg3MzpcXHRcXHRyZXEtXFx1MDAzZW51bV9yZXRyYW5zID0gMDtcXG4gODc0OlxcdFxcdHJlcS1cXHUwMDNlc2sgPSBOVUxMO1xcbiA4NzU6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZyZXEtXFx1MDAzZXJza19yZWZjbnQsIDApO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRyZXR1cm4gcmVxO1xcbiA4Nzg6XFx0fVxcbiA4Nzk6XFx0I2RlZmluZSByZXFza19hbGxvYyguLi4pXFx0YWxsb2NfaG9va3MocmVxc2tfYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4gODgwOlxcdFxcbiA4ODE6XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxcbiA4ODI6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbiA4ODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpXFxuIDg4NDpcXHR7XFxuIDg4NTpcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEgPSByZXFza19hbGxvYyhvcHMsIHNrX2xpc3RlbmVyLFxcbiA4ODY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0dGFjaF9saXN0ZW5lcik7XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdGlmIChyZXEpIHtcXG4gODg5OlxcdFxcdFxcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU2OjU3LjYxNzY2NjA1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQ2OTYzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcmVxc2tfYWxsb2Nfbm9wcm9mYCBhbmQgUmVsYXRlZCBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHJlcXNrX2FsbG9jX25vcHJvZmAgZnVuY3Rpb24uIEkgc2VlIHJpZ2h0IGF3YXkgdGhhdCBgcmVxLVx1MDAzZXN5bmNvb2tpZSA9IDA7YCBhbmQgYHJlcS1cdTAwM2VudW1fdGltZW91dCA9IDA7YCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhhdCdzIGdvb2QgcHJhY3RpY2UsIGVuc3VyaW5nIGEga25vd24gc3RhcnRpbmcgc3RhdGUuXG5cbk5vdywgSSdtIGN1cmlvdXMgYWJvdXQgaG93IGByZXFza19udW1fdGltZW91dGAgd29ya3MsIHNvIGxldCdzIHBlZWsgYXQgdGhhdDpcblxuYGBgY1xuc3RhdGljIGlubGluZSB1OCByZXFza19udW1fdGltZW91dChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG57XG5cdHU4IG51bV90aW1lb3V0ID0gUkVBRF9PTkNFKHJlcS1cdTAwM2VudW1fdGltZW91dF9zeW5jb29raWUpO1xuXG4jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG5cdHJldHVybiBudW1fdGltZW91dCBcdTAwM2VcdTAwM2UgMTtcbiNlbHNlXG5cdHJldHVybiBudW1fdGltZW91dCBcdTAwMjYgMHg3ZjtcbiNlbmRpZlxufVxuYGBgXG5cbldhaXQgYSBzZWNvbmTigKYgIEl0IGxvb2tzIGxpa2UgYHJlcS1cdTAwM2VudW1fdGltZW91dGAgaXMgYSBiaXRmaWVsZCB3aXRoaW4gYG51bV90aW1lb3V0X3N5bmNvb2tpZWAhICBMZXQgbWUgY2hlY2sgdGhlIHN0cnVjdCBkZWZpbml0aW9uIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uczpcblxuYGBgY1xuXHR1bmlvbiB7XG5cdFx0c3RydWN0IHtcblx0XHRcdHU4XHRcdHN5bmNvb2tpZToxOyAvKiBUcnVlIGlmXG5cdFx0XHRcdFx0XHQgICAgICAqIDEpIHRjcG9wdHMgbmVlZHMgdG8gYmUgZW5jb2RlZCBpblxuXHRcdFx0XHRcdFx0ICAgICAgKiAgICBUUyBvZiBTWU4rQUNLXG5cdFx0XHRcdFx0XHQgICAgICAqIDIpIEFDSyBpcyB2YWxpZGF0ZWQgYnkgQlBGIGtmdW5jLlxuXHRcdFx0XHRcdFx0ICAgICAgKi9cblx0XHRcdHU4XHRcdG51bV90aW1lb3V0Ojc7IC8qIG51bWJlciBvZiB0aW1lb3V0cyAqL1xuXHRcdH07XG5cdFx0dThcdFx0bnVtX3RpbWVvdXRfc3luY29va2llO1xuXHR9O1xuYGBgXG5cblllcywgaXQncyBhIHVuaW9uLiAgYHN5bmNvb2tpZWAgaXMgYSBzaW5nbGUgYml0LCBhbmQgYG51bV90aW1lb3V0YCB1c2VzIHRoZSBvdGhlciA3IGJpdHMgb2YgdGhlIGJ5dGUuICBUaGVyZWZvcmUsIHdoZW4gYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgYXJlIGJvdGggYXNzaWduZWQgdG8gMCwgYWxsIDggYml0cyBvZiBgbnVtX3RpbWVvdXRfc3luY29va2llYCBhcmUgYmVpbmcgc2V0LCB3aGljaCBtZWFucyB0aGUgd2hvbGUgYnl0ZSBpcyBpbml0aWFsaXplZCwgZXZlbiB3aGVuIHVzaW5nIGBrbWVtX2NhY2hlX2FsbG9jYC4gRXhjZWxsZW50LCB0aGF0IHNlZW1zIGNsZWFyLlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBJJ2xsIHF1aWNrbHkgZG8gYSBncmVwIGFjcm9zcyB0aGUgdHJlZSBmb3IgYHN5bmNvb2tpZWAgb3IgYG51bV90aW1lb3V0YCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBwbGFjZXMgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIG9yIHdoZXJlIGBudW1fdGltZW91dF9zeW5jb29raWVgLCBgbnVtX3RpbWVvdXRgIG9yIGBzeW5jb29raWVgIGFyZSBtb2RpZmllZC4gVGhpcyBoZWxwcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFyZSBwb3RlbnRpYWxseSB0b3VjaGluZyB0aGlzIG1lbW9yeSBzcGFjZSBpbiBhIHdheSB0aGF0IEknbSBub3QgZXhwZWN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDY6NTc6MDIuNDY0NjM0NjU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ1NzE1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnVtX3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTgyOT1zdGF0aWMgdm9pZCBzeW5fYWNrX3JlY2FsYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzNC1cXHRpZiAoIXJza3FfZGVmZXJfYWNjZXB0KSB7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4MzU6XFx0XFx0KmV4cGlyZSA9IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZT0gbWF4X3N5bl9hY2tfcmV0cmllcztcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgzNi1cXHRcXHQqcmVzZW5kID0gMTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODM4LVxcdH1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgzOTpcXHQqZXhwaXJlID0gcmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlPSBtYXhfc3luX2Fja19yZXRyaWVzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDA6XFx0XFx0ICAoIWluZXRfcnNrKHJlcSktXFx1MDAzZWFja2VkIHx8IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzZT0gcnNrcV9kZWZlcl9hY2NlcHQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODQxLVxcdC8qIERvIG5vdCByZXNlbmQgd2hpbGUgd2FpdGluZyBmb3IgZGF0YSBhZnRlciBBQ0ssXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0NS1cXHQqcmVzZW5kID0gIWluZXRfcnNrKHJlcSktXFx1MDAzZWFja2VkIHx8XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo4NDY6XFx0XFx0ICByZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IHJza3FfZGVmZXJfYWNjZXB0IC0gMTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTg0Ny19XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTg1MD1yZXFza19hbGxvY19ub3Byb2YoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04NzEtXFx0cmVxLVxcdTAwM2VzeW5jb29raWUgPSAwO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODcyOlxcdHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgPSAwO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODczLVxcdHJlcS1cXHUwMDNlbnVtX3JldHJhbnMgPSAwO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05Njc9c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk2OS17XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5NzA6XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTk3MS1cXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZxdWV1ZS1cXHUwMDNleW91bmcpO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMDMzPXN0YXRpYyB2b2lkIHJlcXNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMTItXFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VhY2NlY25fZmFpbF9tb2RlIHw9IFRDUF9BQ0NFQ05fQUNFX0ZBSUxfU0VORDtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExMTM6XFx0XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQrKyA9PSAwKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTExNC1cXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZxdWV1ZS1cXHUwMDNleW91bmcpO1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMTM1LVxcdC8qIEV2ZW4gaWYgd2UgY2FuIGNsb25lIHRoZSByZXEsIHdlIG1heSBuZWVkIG5vdCByZXRyYW5zbWl0IGFueSBtb3JlXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMTM2OlxcdCAqIFNZTitBQ0tzIChucmVxLVxcdTAwM2VudW1fdGltZW91dCBcXHUwMDNlIG1heF9zeW5fYWNrX3JldHJpZXMsIGV0YyksIG9yIGFub3RoZXJcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTExMzctXFx0ICogQ1BVIG1heSB3aW4gdGhlIFxcXCJvd25fcmVxXFxcIiByYWNlIHNvIHRoYXQgaW5ldF9laGFzaF9pbnNlcnQoKSBmYWlscy5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9Mjc0ND1zdGF0aWMgdm9pZCBnZXRfb3BlbnJlcTQoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzYwLVxcdFxcdGppZmZpZXNfZGVsdGFfdG9fY2xvY2tfdChkZWx0YSksXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyNzYxOlxcdFxcdHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yNzYyLVxcdFxcdGZyb21fa3VpZF9tdW5nZWQoc2VxX3VzZXJfbnMoZiksXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyNS1cXHR9XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjYyNjpcXHRpZiAocmVxLVxcdTAwM2VudW1fdGltZW91dCkge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo2Mjc6XFx0XFx0bmV3dHAtXFx1MDAzZXRvdGFsX3J0byA9IHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQ7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTYyOC1cXHRcXHRuZXd0cC1cXHUwMDNldW5kb19tYXJrZXIgPSB0cmVxLVxcdTAwM2VzbnRfaXNuO1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIwLVxcdC8qIFdoaWxlIFRDUF9ERUZFUl9BQ0NFUFQgaXMgYWN0aXZlLCBkcm9wIGJhcmUgQUNLLiAqL1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5MjE6XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgXFx1MDAzYyBSRUFEX09OQ0UoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5yc2txX2RlZmVyX2FjY2VwdCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTIyLVxcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgPT0gdGNwX3JzayhyZXEpLVxcdTAwM2VyY3ZfaXNuICsgMSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NDU5PXN0YXRpYyB2b2lkIHRjcF9mYXN0b3Blbl9zeW5hY2tfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00NzQtXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDc1OlxcdGlmIChyZXEtXFx1MDAzZW51bV90aW1lb3V0IFxcdTAwM2U9IG1heF9yZXRyaWVzKSB7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDc2LVxcdFxcdHRjcF93cml0ZV9lcnIoc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNDg5LVxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlYWNjZWNuX2ZhaWxfbW9kZSB8PSBUQ1BfQUNDRUNOX0FDRV9GQUlMX1NFTkQ7XFxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NDkwOlxcdHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQrKztcXG5uZXQvaXB2NC90Y3BfdGltZXIuYy00OTEtXFx0dGNwX3VwZGF0ZV9ydG9fc3RhdHMoc2spO1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDk0PXN0YXRpYyB2b2lkIGdldF9vcGVucmVxNihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjExNy1cXHRcXHQgICBqaWZmaWVzX3RvX2Nsb2NrX3QodHRkKSxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIxMTg6XFx0XFx0ICAgcmVxLVxcdTAwM2VudW1fdGltZW91dCxcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIxMTktXFx0XFx0ICAgZnJvbV9rdWlkX211bmdlZChzZXFfdXNlcl9ucyhzZXEpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NzowMi42NDkyMTE2NDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3ODAyOTcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMsIHRoaW5raW5nIG91dCBsb3VkOlxuXG4qKlByb2JpbmcgQ29va2llIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZSBgc3luY29va2llYCBhbmQgYG51bV90aW1lb3V0YCBwYXJhbWV0ZXJzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGNvb2tpZSBjcmVhdGlvbiBwcm9jZXNzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGhvcm91Z2hseSBleGFtaW5pbmcgdGhlIGBjb29raWVfYnBmX2NoZWNrYCBmdW5jdGlvbiwgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJ2xsIGV4dGVuZCBteSBzZWFyY2ggdG8gYW55IG90aGVyIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBjcmFmdGluZyB0aGVzZSBjb29raWVzLiBJdCdzIGNydWNpYWwgdGhhdCB0aGVzZSBjcml0aWNhbCB2YXJpYWJsZXMgaGF2ZSBzZW5zaWJsZSwgZGVmYXVsdCB2YWx1ZXMgKG9yIGFyZSBkeW5hbWljYWxseSBzZXQgYXMgbmVlZGVkKSBhcyBzb29uIGFzIHRoZSBjb29raWUgaXMgZ2VuZXJhdGVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgYmVpbmcgZXhwbGljaXRseSBhZGRyZXNzZWQgYW5kIGNvbmZpZ3VyZWQsIHJhdGhlciB0aGFuIGJlaW5nIGxlZnQgdG8gc29tZSB1bmRlZmluZWQgc3RhdGUgb3IgaW1wbGllZCBmcm9tIGVsc2V3aGVyZSwgYmVjYXVzZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBhbmQgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZpdGFsIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgY29uc2lzdGVudGx5IGFuZCBwcmVkaWN0YWJseSBhY3Jvc3MgYWxsIHJlbGV2YW50IGNvb2tpZSBjcmVhdGlvbiByb3V0aW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NzowNC42MjcyNDUzMDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDk1NDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb29raWVfdGNwX3JlcXNrX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvc3luY29va2llcy5jPTMwMj1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfYnBmX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMTctXFxubmV0L2lwdjQvc3luY29va2llcy5jOjMxODpzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTQtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM5NTpcXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5Ni1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XFxuLS1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTMxPXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2Ny1cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MTY4OlxcdHJldHVybiBjb29raWVfdGNwX3JlcXNrX2FsbG9jKFxcdTAwMjZ0Y3A2X3JlcXVlc3Rfc29ja19vcHMsIHNrLCBza2IsXFxubmV0L2lwdjYvc3luY29va2llcy5jLTE2OS1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGNwX29wdCwgbXNzLCB0c29mZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU3OjA0Ljc1ODIwNjkwN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI1MDA5ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIENvb2tpZSBBbGxvY2F0b3IqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY29va2llX3RjcF9yZXFza19hbGxvY2Agd2l0aGluIGBuZXQvaXB2NC9zeW5jb29raWVzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIHdvcmtzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGZvciB0aGUgYHJlcXNrYCBzdHJ1Y3R1cmVzIHdoZW4gVENQIHN5bmNvb2tpZXMgYXJlIGVuYWJsZWQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkdXJpbmcgdGltZXMgb2YgU1lOIGZsb29kIGF0dGFja3MuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHV0aWxpemVkIGFuZCBob3cgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGFueSByb2J1c3QgVENQIGltcGxlbWVudGF0aW9uIGFuZCBhIHRob3JvdWdoIGdyYXNwIG9mIGl0IGlzIGVzc2VudGlhbC4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU3OjA2Ljg4MzIxODU0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9zeW5jb29raWVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE4OlxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKmNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICp0Y3Bfb3B0LFxcbiAzMjE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBtc3MsIHUzMiB0c29mZilcXG4gMzIyOlxcdHtcXG4gMzIzOlxcdFxcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcTtcXG4gMzI0OlxcdFxcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0cmVxO1xcbiAzMjU6XFx0XFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxcbiAzMjg6XFx0XFx0XFx0cmVxID0gbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhvcHMsIHNrLCBmYWxzZSk7XFxuIDMyOTpcXHRcXHRlbHNlXFxuIDMzMDpcXHRcXHRcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKG9wcywgc2ssIGZhbHNlKTtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0aWYgKCFyZXEpXFxuIDMzMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0aWYgKGNvb2tpZV90Y3BfcmVxc2tfaW5pdChzaywgc2tiLCByZXEpKSB7XFxuIDMzNjpcXHRcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuIDMzNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzM4OlxcdFxcdH1cXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0aXJlcSA9IGluZXRfcnNrKHJlcSk7XFxuIDM0MTpcXHRcXHR0cmVxID0gdGNwX3JzayhyZXEpO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRyZXEtXFx1MDAzZW1zcyA9IG1zcztcXG4gMzQ0OlxcdFxcdHJlcS1cXHUwMDNldHNfcmVjZW50ID0gdGNwX29wdC1cXHUwMDNlc2F3X3RzdGFtcCA/IHRjcF9vcHQtXFx1MDAzZXJjdl90c3ZhbCA6IDA7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdGlyZXEtXFx1MDAzZXNuZF93c2NhbGUgPSB0Y3Bfb3B0LVxcdTAwM2VzbmRfd3NjYWxlO1xcbiAzNDc6XFx0XFx0aXJlcS1cXHUwMDNldHN0YW1wX29rID0gdGNwX29wdC1cXHUwMDNlc2F3X3RzdGFtcDtcXG4gMzQ4OlxcdFxcdGlyZXEtXFx1MDAzZXNhY2tfb2sgPSB0Y3Bfb3B0LVxcdTAwM2VzYWNrX29rO1xcbiAzNDk6XFx0XFx0aXJlcS1cXHUwMDNld3NjYWxlX29rID0gdGNwX29wdC1cXHUwMDNld3NjYWxlX29rO1xcbiAzNTA6XFx0XFx0aXJlcS1cXHUwMDNlZWNuX29rID0gISEodGNwX29wdC1cXHUwMDNlcmN2X3RzZWNyIFxcdTAwMjYgVFNfT1BUX0VDTik7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdHRyZXEtXFx1MDAzZXJlcV91c2VjX3RzID0gZmFsc2U7XFxuIDM1MzpcXHRcXHR0cmVxLVxcdTAwM2V0c19vZmYgPSB0c29mZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0cmV0dXJuIHJlcTtcXG4gMzU2OlxcdH1cXG4gMzU3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNjo1NzowNi44ODMyOTIwMDhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ5MDU3NjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5bmNocm9uaXphdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24gb2YgYHN5bmNvb2tpZWAgYW5kIGBudW1fdGltZW91dGAgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24uIEknbSBmb2N1c2luZyBvbiBob3cgdGhlIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgIGJpdGZpZWxkcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYC4gSSBzZWUgdGhhdCB0aGV5J3JlIHBhY2tlZCBpbnRvIGEgdW5pb24gd2l0aCBgbnVtX3RpbWVvdXRfc3luY29va2llYC4gVGhlIGtleSBpcyB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYXRvbWljIGFjY2VzcyB0byBgbnVtX3RpbWVvdXRfc3luY29va2llYC4gVGhpcyBzaWRlc3RlcHMgcG90ZW50aWFsIGRhdGEgcmFjZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIG5vbi1hdG9taWMgcmVhZHMgb2YgaW5kaXZpZHVhbCBiaXRmaWVsZHMsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBpbiBgcmVxc2tfYWxsb2Nfbm9wcm9mKClgLCBgcmVxLVx1MDAzZXN5bmNvb2tpZWAgYW5kIGByZXEtXHUwMDNlbnVtX3RpbWVvdXRgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhpcyBtZWFucyB0aGUgZW50aXJlIGJ5dGUgKGBudW1fdGltZW91dF9zeW5jb29raWVgKSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCByaWdodCBmcm9tIHRoZSBzdGFydC4gVGhpcyBpbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLlxuXG5Ob3csIGxldCdzIGNvbm5lY3QgdGhpcyB0byB0aGUgcG90ZW50aWFsIEtNU0FOIGFuZCBLQVNBTiBpc3N1ZXMuIFRoZSBjcml0ZXJpYSBJIG5lZWQgdG8gY29uc2lkZXIgYXJlOlxuMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZToqKiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXItc3BhY2UgaW4gdGhpcyBwYXRjaC4gVGhhdCdzIGEgaHVnZSByZWxpZWYuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYzoqKiBUaGUgY29kZSAqZG9lcyogcmVseSBvbiBgcmVxLVx1MDAzZXN5bmNvb2tpZWAgYW5kIGByZXEtXHUwMDNlbnVtX3RpbWVvdXRgLCBidXQgdGhleSBhcmUgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSByaXNrLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbjoqKiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIGludHJvZHVjZWQuIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbjQuICAqKkJvdW5kcyBjaGVja3MvYnVmZmVyIGFjY2VzczoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBjaGVja3Mgd2l0aGluIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCB0byBwcmV2ZW50IHNoaWZ0IG92ZXJmbG93IGFuZCBjYXAgdGltZW91dCB2YWx1ZXMgYmFzZWQgb24gYG51bV90aW1lb3V0YC4gVGhpcyBpcyBwcmVjaXNlbHkgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmlza3MgaW4gYXJpdGhtZXRpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIGJ5dGUgd291bGQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU28sIGRpZ2dpbmcgZGVlcGVyLCBJIHNlZSB0aGUgcGF0Y2ggZG9lcyBzZXZlcmFsIGdvb2QgdGhpbmdzIHRvIG1ha2UgdGhpcyByb2J1c3Q6XG4qICAgVXBkYXRlcyB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGltcG9ydGFudC5cbiogICBVc2VzIHRoZSBhbm9ueW1vdXMgc3RydWN0IGluc2lkZSB0aGUgdW5pb24gZm9yIHNhZmUgYWNjZXNzIHRvIHRoZSBiaXRmaWVsZHMuXG4qICAgSW50cm9kdWNlcyB0aGUgYHJlcXNrX251bV90aW1lb3V0KClgIGZ1bmN0aW9uIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGdldCB0aGUgdmFsdWUuXG4qICAgQm91bmRzIHRoZSByZXRyeSBjb3VudCB3aXRoIGBNQVhfVENQX1NZTkFDS19SRVRSSUVTYC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIGhhdmUgb25seSA3IGJpdHMuXG4qICAgVGhlIGB0Y3BfcmVxc2tfdGltZW91dF9zaygpYCBpbmNsdWRlcyBleHBsaWNpdCBib3VuZHMgY2hlY2tzLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgdGhlcmUncyBubyB3YXkgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHksIGFuZCB0aGUgYm91bmRzIGFyZSBjaGVja2VkIGluIHRoZSBpbXBvcnRhbnQgcGxhY2VzLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBOb3csIHRpbWUgdG8gbG9nIHRoYXQgaW4gdGhlIHN5c3RlbSB3aXRoIGBzZXQtcmVzdWx0c2AgYW5kIHByb3ZpZGUgdGhlIHJlbGV2YW50IHJlYXNvbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzUsIk91dHB1dFRva2VucyI6MjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA2OjU3OjEzLjM3Mzg3MDgxOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJpdGZpZWxkIGRhdGEgcmFjZSBzYWZldHkgYW5kIGludGVnZXIvc2hpZnQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBmb3IgYHN0cnVjdCByZXF1ZXN0X3NvY2tgLiBJdCBhZGRzIGEgdW5pb24gd2l0aCBgbnVtX3RpbWVvdXRfc3luY29va2llYCB0byBhbGxvdyBsb2NrbGVzcyBzaW5nbGUtYnl0ZSBgUkVBRF9PTkNFYCByZWFkcyBvZiB0aGUgNy1iaXQgYG51bV90aW1lb3V0YCBmaWVsZCwgY2FwcyBtYXhpbXVtIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgKG1hdGNoaW5nIHRoZSA3LWJpdCBmaWVsZCB3aWR0aCksIGFuZCBwcmV2ZW50cyB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IgaW4gYHRjcF9yZXFza190aW1lb3V0X3NrYC5cXG5cXG5BbGwgZmllbGRzIG9mIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCAoaW5jbHVkaW5nIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGByZXFza19hbGxvY19ub3Byb2YoKWAuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgbWVtb3J5IGlzIGludHJvZHVjZWQsIG5vIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBhcml0aG1ldGljLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBhdG9taWMgcmVhZCBoZWxwZXJzLCBub25lIG9mIHdoaWNoIHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0ZWQgYnkgS01TQU4uIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGJpdGZpZWxkIGRhdGEgcmFjZSBzYWZldHkgYW5kIGludGVnZXIvc2hpZnQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBUQ1AgU1lOLUFDSyByZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBmb3IgYHN0cnVjdCByZXF1ZXN0X3NvY2tgLiBJdCBhZGRzIGEgdW5pb24gd2l0aCBgbnVtX3RpbWVvdXRfc3luY29va2llYCB0byBhbGxvdyBsb2NrbGVzcyBzaW5nbGUtYnl0ZSBgUkVBRF9PTkNFYCByZWFkcyBvZiB0aGUgNy1iaXQgYG51bV90aW1lb3V0YCBmaWVsZCwgY2FwcyBtYXhpbXVtIFNZTi1BQ0sgcmV0cmllcyB0byAxMjcgKG1hdGNoaW5nIHRoZSA3LWJpdCBmaWVsZCB3aWR0aCksIGFuZCBwcmV2ZW50cyB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IgaW4gYHRjcF9yZXFza190aW1lb3V0X3NrYC5cXG5cXG5BbGwgZmllbGRzIG9mIGBzdHJ1Y3QgcmVxdWVzdF9zb2NrYCAoaW5jbHVkaW5nIGBzeW5jb29raWVgIGFuZCBgbnVtX3RpbWVvdXRgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGByZXFza19hbGxvY19ub3Byb2YoKWAuIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgbWVtb3J5IGlzIGludHJvZHVjZWQsIG5vIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBhcml0aG1ldGljLCBib3VuZHMgY2hlY2tpbmcsIGFuZCBhdG9taWMgcmVhZCBoZWxwZXJzLCBub25lIG9mIHdoaWNoIHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0ZWQgYnkgS01TQU4uIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[1] Phase: Succeeded StartedAt: 2026-09-04 06:57:24 +0000 UTC FinishedAt: 2026-09-04 06:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 06:57:24 +0000 UTC FinishedAt: 2026-09-04 06:57:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2] Phase: Succeeded StartedAt: 2026-09-04 06:57:24 +0000 UTC FinishedAt: 2026-09-04 10:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 06:57:24 +0000 UTC FinishedAt: 2026-09-04 10:39:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 06:57:24 +0000 UTC FinishedAt: 2026-09-04 06:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 06:57:24 +0000 UTC FinishedAt: 2026-09-04 06:57:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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-workflow8bbvn/series-workflow8bbvn-convert-artifact-819828430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 06:57:34 +0000 UTC FinishedAt: 2026-09-04 07:14:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 06:57:34 +0000 UTC FinishedAt: 2026-09-04 07:14:09 +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:*d1971e69-ffa8-40f3-b266-99c1650bd000,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-workflow8bbvn/series-workflow8bbvn-convert-artifact-819828430/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": "83dc05ff-9c4f-4526-a2a2-6600e75ea040", "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-workflow8bbvn/series-workflow8bbvn-build-action-2581856052/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 06:57:34 +0000 UTC FinishedAt: 2026-09-04 07:13:59 +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:*d1971e69-ffa8-40f3-b266-99c1650bd000,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-workflow8bbvn/series-workflow8bbvn-convert-artifact-819828430/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": "83dc05ff-9c4f-4526-a2a2-6600e75ea040", "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-workflow8bbvn/series-workflow8bbvn-build-action-2581856052/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:14:09 +0000 UTC FinishedAt: 2026-09-04 07:14:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:14:09 +0000 UTC FinishedAt: 2026-09-04 07:14:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:14:09 +0000 UTC FinishedAt: 2026-09-04 07:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:14:09 +0000 UTC FinishedAt: 2026-09-04 07:14:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-workflow8bbvn/series-workflow8bbvn-convert-artifact-4260268481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:14:19 +0000 UTC FinishedAt: 2026-09-04 07:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:14:19 +0000 UTC FinishedAt: 2026-09-04 07:15:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*83dc05ff-9c4f-4526-a2a2-6600e75ea040,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-workflow8bbvn/series-workflow8bbvn-build-action-2581856052/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-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:16:08 +0000 UTC FinishedAt: 2026-09-04 07:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:16:08 +0000 UTC FinishedAt: 2026-09-04 07:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:16:08 +0000 UTC FinishedAt: 2026-09-04 07:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:16:08 +0000 UTC FinishedAt: 2026-09-04 07:32:58 +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:*d1971e69-ffa8-40f3-b266-99c1650bd000,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-workflow8bbvn/series-workflow8bbvn-convert-artifact-4260268481/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": "a3903972-bc37-474a-ba95-2d14254cc218", "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-workflow8bbvn/series-workflow8bbvn-build-action-2748359501/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:16:08 +0000 UTC FinishedAt: 2026-09-04 07:32:48 +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:*d1971e69-ffa8-40f3-b266-99c1650bd000,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-workflow8bbvn/series-workflow8bbvn-convert-artifact-4260268481/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": "a3903972-bc37-474a-ba95-2d14254cc218", "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-workflow8bbvn/series-workflow8bbvn-build-action-2748359501/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:32:58 +0000 UTC FinishedAt: 2026-09-04 07:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:32:58 +0000 UTC FinishedAt: 2026-09-04 07:32:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:32:58 +0000 UTC FinishedAt: 2026-09-04 07:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:32:58 +0000 UTC FinishedAt: 2026-09-04 07:34:43 +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:*a3903972-bc37-474a-ba95-2d14254cc218,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-workflow8bbvn/series-workflow8bbvn-build-action-2748359501/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-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 10:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 10:39:09 +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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"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:*83dc05ff-9c4f-4526-a2a2-6600e75ea040,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3903972-bc37-474a-ba95-2d14254cc218,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-workflow8bbvn/series-workflow8bbvn-build-action-2581856052/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-workflow8bbvn/series-workflow8bbvn-build-action-2748359501/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 07:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 07:34:58 +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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"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-workflow8bbvn/series-workflow8bbvn-convert-artifact-3509119062/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 07:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 07:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:34:53 +0000 UTC FinishedAt: 2026-09-04 07:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:35:03 +0000 UTC FinishedAt: 2026-09-04 10:39:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbvn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["reqsk_timer_handler","tcp_fastopen_synack_timer","do_tcp_setsockopt","tcp_check_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"adf50c47a47f0f0f0b79dd58ffade9919cddebea","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"1e5d5627-46aa-4f45-8e0f-1dc0f3abde20","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-04 07:35:03 +0000 UTC FinishedAt: 2026-09-04 10:38:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*83dc05ff-9c4f-4526-a2a2-6600e75ea040,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3903972-bc37-474a-ba95-2d14254cc218,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-workflow8bbvn/series-workflow8bbvn-build-action-2581856052/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-workflow8bbvn/series-workflow8bbvn-build-action-2748359501/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-workflow8bbvn/series-workflow8bbvn-convert-artifact-3509119062/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,}