Name: series-workflowwrdkv Phase: Succeeded StartedAt: 2026-09-03 22:04:19 +0000 UTC FinishedAt: 2026-09-04 01:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[0] Phase: Succeeded StartedAt: 2026-09-03 22:04:19 +0000 UTC FinishedAt: 2026-09-03 22:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 22:04:19 +0000 UTC FinishedAt: 2026-09-03 22:08:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "06e9cce0-22f0-42b0-a553-d105cecf4c06" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_xa_pool_max_frags", "tcp_recvmsg_dmabuf", "tcp_xa_pool_refill" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MmIzM0OywKICAgICYjMzQ7dGNwX3JlY3Ztc2dfZG1hYnVmJiMzNDssCiAgICAmIzM0O3RjcF94YV9wb29sX3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cblxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNTM2NWJkMWFiYzg5YzY5MDRjZGJmM2FhNTRmNzIyZGEwMGEzODBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjowNjozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li5jMzUyNzc0MzkzODYxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMjQ5NCw2ICYjNDM7MjQ5NCwzMiBAQCBzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcbiBcdHJldHVybiBrID8gMCA6IGVycjtcbiB9XG4gXG4mIzQzOy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvZiBAc2tiIGRlbGl2ZXJhYmxlIGZyb20gYnl0ZSBAb2Zmc2V0LCBjYXBwZWRcbiYjNDM7ICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGludCByZW1haW5pbmdfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IGVuZCA9IHN0YXJ0ICYjNDM7IHNrYl9mcmFnX3NpemUoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW2ldKTtcbiYjNDM7XHRcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb3B5IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdG1heF9mcmFncyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGlmIChjb3B5IFx1MDAzZT0gcmVtYWluaW5nX2xlbilcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN0YXJ0ID0gZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1heF9mcmFncztcbiYjNDM7fVxuJiM0MztcbiAvKiBPbiBlcnJvciwgcmV0dXJucyB0aGUgLWVycm5vLiBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZVxuICAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uXG4gICovXG5AQCAtMjUwMyw2ICYjNDM7MjUyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcbiBcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFx0aW50IGksIGNvcHksIG47XG4gXHRpbnQgc2VudCA9IDA7XG5AQCAtMjU1NCw2ICYjNDM7MjU4MSw4IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0LyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhXG4gXHRcdCAqIHNlcXVlbmNlIG9mIGNtc2dcbiBcdFx0ICovXG4mIzQzO1x0XHRtYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pO1xuJiM0MztcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4gXHRcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG5AQCAtMjU5MSw3ICYjNDM7MjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XG4gXHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xuIFx0XHRcdFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCxcbi1cdFx0XHRcdFx0XHRcdCBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgLSBpKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgbWF4X2ZyYWdzKTtcbiBcdFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRcdGdvdG8gb3V0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MmIzM0OywKICAgICYjMzQ7dGNwX3JlY3Ztc2dfZG1hYnVmJiMzNDssCiAgICAmIzM0O3RjcF94YV9wb29sX3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNTM2NWJkMWFiYzg5YzY5MDRjZGJmM2FhNTRmNzIyZGEwMGEzODBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMjowNjozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uYzM1Mjc3NDM5Mzg2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI0OTQsNiAmIzQzOzI0OTQsMzIgQEAgc3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsCiAJcmV0dXJuIGsgPyAwIDogZXJyOwogfQogCiYjNDM7LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZAomIzQzOyAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCwKJiM0MzsJCQkJCSAgaW50IHJlbWFpbmluZ19sZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfaGVhZGxlbihza2IpOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaW50IGVuZCA9IHN0YXJ0ICYjNDM7IHNrYl9mcmFnX3NpemUoJmFtcDtza2Jfc2hpbmZvKHNrYiktJmd0O2ZyYWdzW2ldKTsKJiM0MzsJCWludCBjb3B5ID0gZW5kIC0gb2Zmc2V0OwomIzQzOwomIzQzOwkJaWYgKGNvcHkgJmd0OyAwKSB7CiYjNDM7CQkJbWF4X2ZyYWdzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoY29weSAmZ3Q7PSByZW1haW5pbmdfbGVuKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXN0YXJ0ID0gZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBtYXhfZnJhZ3M7CiYjNDM7fQomIzQzOwogLyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGUKICAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uCiAgKi8KQEAgLTI1MDMsNiAmIzQzOzI1MjksNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJc3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07CiAJc3RydWN0IHRjcF94YV9wb29sIHRjcF94YV9wb29sOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzOwogCXVuc2lnbmVkIGludCBzdGFydDsKIAlpbnQgaSwgY29weSwgbjsKIAlpbnQgc2VudCA9IDA7CkBAIC0yNTU0LDYgJiM0MzsyNTgxLDggQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGEKIAkJICogc2VxdWVuY2Ugb2YgY21zZwogCQkgKi8KJiM0MzsJCW1heF9mcmFncyA9IHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbik7CiYjNDM7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewogCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZhbXA7c2tiX3NoaW5mbyhza2IpLSZndDtmcmFnc1tpXTsKIAkJCXN0cnVjdCBuZXRfaW92ICpuaW92OwpAQCAtMjU5MSw3ICYjNDM7MjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlkbWFidWZfY21zZy5mcmFnX29mZnNldCA9IGZyYWdfb2Zmc2V0OwogCQkJCWRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7CiAJCQkJZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCAmYW1wO3RjcF94YV9wb29sLAotCQkJCQkJCSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzIC0gaSk7CiYjNDM7CQkJCQkJCSBtYXhfZnJhZ3MpOwogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHBvdGVudGlhbCB3aXRoIHN5emthbGxlci4gRmlyc3QsIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLiBObyBleHBsb2l0IGdlbmVyYXRpb24gb3IgbWFsaWNpb3VzIHRhc2tzIGFyZSByZXF1ZXN0ZWQsIGp1c3QgZ29vZCBvbGQtZmFzaGlvbmVkIGRldmVsb3BlciBRQSBhbmQgdHJpYWdlLiBQZXJmZWN0LCBiZW5pZ24gcmVxdWVzdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYG5ldC9pcHY0L3RjcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpbmNsdWRlcyBhIG5ldyBmdW5jdGlvbiwgYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhZ21lbnRzIGRlbGl2ZXJhYmxlIGZyb20gYSBzcGVjaWZpYyBvZmZzZXQgd2l0aGluIGFuIGBza19idWZmYCwgY2FwcGVkIGJ5IGEgcmVtYWluaW5nIGxlbmd0aC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZnJhZ21lbnRzLCBkZXRlcm1pbmluZyBob3cgbWFueSBjb250cmlidXRlIHRvIHRoZSByZXF1ZXN0ZWQgZGF0YS4KClRoZSBpbXBvcnRhbnQgcGFydCBpcyB3aGVyZSB0aGlzIG5ldyBmdW5jdGlvbiBpcyAqdXNlZCogd2l0aGluIGB0Y3BfcmVjdm1zZ19kbWFidWZgLiBJdCYjMzk7cyByZXBsYWNpbmcgYSBkaXJlY3QgY2FsY3VsYXRpb24gaW52b2x2aW5nIGBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzIC0gaWAgd2l0aCBhIGNhbGwgdG8gYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgY2FsY3VsYXRlZCBgbWF4X2ZyYWdzYCB2YWx1ZSB0aGVuIGdldHMgcGFzc2VkIHRvIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCBmdXp6aW5nIHBvdGVudGlhbCwgSSBuZWVkIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvdGNwLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmVzIDI0ODAtMjY0MC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgaG93IGB0Y3BfeGFfcG9vbGAgaXMgdXNlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgY2hhbmdlIGhhcyBvbiBkYXRhIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhpcyBzdXJyb3VuZGluZyBjb2RlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGRlY2lkZSB0aGUgZnV6emluZyBlbGVtZW50cyBuZWVkZWQsIHN1Y2ggYXMgRm9jdXNTeW1ib2xzLCBFbmFibGVDb25maWdzLCBXb3J0aEZ1enppbmcsIGFuZCBSZWFzb25pbmcgdG8gcmV0dXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDgwOlx0XG4yNDgxOlx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0ODI6XHRcbjI0ODM6XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG1heF9mcmFnczsgayYjNDM7JiM0MzspIHtcbjI0ODQ6XHRcdFx0ZXJyID0gX194YV9hbGxvYyhcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBcdTAwMjZwLVx1MDAzZXRva2Vuc1trXSxcbjI0ODU6XHRcdFx0XHRcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xuMjQ4NjpcdFx0XHRpZiAoZXJyKVxuMjQ4NzpcdFx0XHRcdGJyZWFrO1xuMjQ4ODpcdFx0fVxuMjQ4OTpcdFxuMjQ5MDpcdFx0eGFfdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ5MTpcdFxuMjQ5MjpcdFx0cC1cdTAwM2VtYXggPSBrO1xuMjQ5MzpcdFx0cC1cdTAwM2VpZHggPSAwO1xuMjQ5NDpcdFx0cmV0dXJuIGsgPyAwIDogZXJyO1xuMjQ5NTpcdH1cbjI0OTY6XHRcbjI0OTc6XHQvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmcmFnbWVudHMgb2YgQHNrYiBkZWxpdmVyYWJsZSBmcm9tIGJ5dGUgQG9mZnNldCwgY2FwcGVkXG4yNDk4Olx0ICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cbjI0OTk6XHQgKi9cbjI1MDA6XHRzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94YV9wb29sX21heF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjUwMTpcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXG4yNTAyOlx0XHRcdFx0XHRcdCAgaW50IHJlbWFpbmluZ19sZW4pXG4yNTAzOlx0e1xuMjUwNDpcdFx0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbjI1MDU6XHRcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xuMjUwNjpcdFx0aW50IGk7XG4yNTA3Olx0XG4yNTA4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7XG4yNTA5Olx0XHRcdGludCBlbmQgPSBzdGFydCAmIzQzOyBza2JfZnJhZ19zaXplKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VmcmFnc1tpXSk7XG4yNTEwOlx0XHRcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xuMjUxMTpcdFxuMjUxMjpcdFx0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuMjUxMzpcdFx0XHRcdG1heF9mcmFncyYjNDM7JiM0Mzs7XG4yNTE0Olx0XHRcdFx0aWYgKGNvcHkgXHUwMDNlPSByZW1haW5pbmdfbGVuKVxuMjUxNTpcdFx0XHRcdFx0YnJlYWs7XG4yNTE2Olx0XHRcdH1cbjI1MTc6XHRcdFx0c3RhcnQgPSBlbmQ7XG4yNTE4Olx0XHR9XG4yNTE5Olx0XG4yNTIwOlx0XHRyZXR1cm4gbWF4X2ZyYWdzO1xuMjUyMTpcdH1cbjI1MjI6XHRcbjI1MjM6XHQvKiBPbiBlcnJvciwgcmV0dXJucyB0aGUgLWVycm5vLiBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZVxuMjUyNDpcdCAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uXG4yNTI1Olx0ICovXG4yNTI2Olx0c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjUyNzpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcbjI1Mjg6XHRcdFx0XHQgICAgICBpbnQgcmVtYWluaW5nX2xlbilcbjI1Mjk6XHR7XG4yNTMwOlx0XHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcbjI1MzE6XHRcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbjI1MzI6XHRcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3M7XG4yNTMzOlx0XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4yNTM0Olx0XHRpbnQgaSwgY29weSwgbjtcbjI1MzU6XHRcdGludCBzZW50ID0gMDtcbjI1MzY6XHRcdGludCBlcnIgPSAwO1xuMjUzNzpcdFxuMjUzODpcdFx0dGNwX3hhX3Bvb2wubWF4ID0gMDtcbjI1Mzk6XHRcdHRjcF94YV9wb29sLmlkeCA9IDA7XG4yNTQwOlx0XHRkbyB7XG4yNTQxOlx0XHRcdHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbjI1NDI6XHRcbjI1NDM6XHRcdFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSB7XG4yNTQ0Olx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI1NDU6XHRcdFx0XHRnb3RvIG91dDtcbjI1NDY6XHRcdFx0fVxuMjU0NzpcdFxuMjU0ODpcdFx0XHQvKiBDb3B5IGhlYWRlci4gKi9cbjI1NDk6XHRcdFx0Y29weSA9IHN0YXJ0IC0gb2Zmc2V0O1xuMjU1MDpcdFx0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuMjU1MTpcdFx0XHRcdGNvcHkgPSBtaW4oY29weSwgcmVtYWluaW5nX2xlbik7XG4yNTUyOlx0XG4yNTUzOlx0XHRcdFx0biA9IGNvcHlfdG9faXRlcihza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQsIGNvcHksXG4yNTU0Olx0XHRcdFx0XHRcdCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIpO1xuMjU1NTpcdFx0XHRcdGlmIChuICE9IGNvcHkpIHtcbjI1NTY6XHRcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yNTU3Olx0XHRcdFx0XHRnb3RvIG91dDtcbjI1NTg6XHRcdFx0XHR9XG4yNTU5Olx0XG4yNTYwOlx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBjb3B5O1xuMjU2MTpcdFx0XHRcdHJlbWFpbmluZ19sZW4gLT0gY29weTtcbjI1NjI6XHRcbjI1NjM6XHRcdFx0XHQvKiBGaXJzdCBhIGRtYWJ1Zl9jbXNnIGZvciAjIGJ5dGVzIGNvcGllZCB0byB1c2VyXG4yNTY0Olx0XHRcdFx0ICogYnVmZmVyLlxuMjU2NTpcdFx0XHRcdCAqL1xuMjU2NjpcdFx0XHRcdG1lbXNldChcdTAwMjZkbWFidWZfY21zZywgMCwgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSk7XG4yNTY3Olx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcbjI1Njg6XHRcdFx0XHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcbjI1Njk6XHRcdFx0XHRcdFx0ICAgICAgIFNPX0RFVk1FTV9MSU5FQVIsXG4yNTcwOlx0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoZG1hYnVmX2Ntc2cpLFxuMjU3MTpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZG1hYnVmX2Ntc2cpO1xuMjU3MjpcdFx0XHRcdGlmIChlcnIpXG4yNTczOlx0XHRcdFx0XHRnb3RvIG91dDtcbjI1NzQ6XHRcbjI1NzU6XHRcdFx0XHRzZW50ICYjNDM7PSBjb3B5O1xuMjU3NjpcdFxuMjU3NzpcdFx0XHRcdGlmIChyZW1haW5pbmdfbGVuID09IDApXG4yNTc4Olx0XHRcdFx0XHRnb3RvIG91dDtcbjI1Nzk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgYW5kIEl0cyBDb250ZXh0KioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBgdGNwX3JlY3Ztc2dfZG1hYnVmYC4gV2UmIzM5O3ZlIGlkZW50aWZpZWQgaXQgYXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgbGlrZWx5IHBsYXlpbmcgYSBrZXkgcm9sZSBpbiBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgVENQIHJlY2VpdmUgcGF0aCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIERNQSBidWZmZXJzLiBUbyB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLCB3ZSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlLiBMZXQmIzM5O3MgdHJhY2UgaXRzIHVzYWdlIOKAkyBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGltYWdpbmluZyBkaWdnaW5nIGludG8gYWxsIHRoZSBjYWxsIHNpdGVzLiBJIHdhbnQgdG8gc2VlIGhvdyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBpcyBpbnZva2VkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uPyBUaGlzIHdpbGwgZ2l2ZSB1cyB2YWx1YWJsZSBjb250ZXh0LiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlZmluZSBvdXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1ODA6XHRcbjI1ODE6XHRcdFx0LyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhXG4yNTgyOlx0XHRcdCAqIHNlcXVlbmNlIG9mIGNtc2dcbjI1ODM6XHRcdFx0ICovXG4yNTg0Olx0XHRcdG1heF9mcmFncyA9IHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbik7XG4yNTg1Olx0XG4yNTg2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSYjNDM7JiM0MzspIHtcbjI1ODc6XHRcdFx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW2ldO1xuMjU4ODpcdFx0XHRcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuMjU4OTpcdFx0XHRcdHU2NCBmcmFnX29mZnNldDtcbjI1OTA6XHRcdFx0XHRpbnQgZW5kO1xuMjU5MTpcdFxuMjU5MjpcdFx0XHRcdC8qICFza2JfZnJhZ3NfcmVhZGFibGUoKSBzaG91bGQgaW5kaWNhdGUgdGhhdCBBTEwgdGhlXG4yNTkzOlx0XHRcdFx0ICogZnJhZ3MgaW4gdGhpcyBza2IgYXJlIGRtYWJ1ZiBuZXRfaW92cy4gV2UmIzM5O3JlIGNoZWNraW5nXG4yNTk0Olx0XHRcdFx0ICogZm9yIHRoYXQgZmxhZyBhYm92ZSwgYnV0IGFsc28gY2hlY2sgaW5kaXZpZHVhbCBmcmFnc1xuMjU5NTpcdFx0XHRcdCAqIGhlcmUuIElmIHRoZSB0Y3Agc3RhY2sgaXMgbm90IHNldHRpbmdcbjI1OTY6XHRcdFx0XHQgKiBza2JfZnJhZ3NfcmVhZGFibGUoKSBjb3JyZWN0bHksIHdlIHN0aWxsIGRvbiYjMzk7dCB3YW50XG4yNTk3Olx0XHRcdFx0ICogdG8gY3Jhc2ggaGVyZS5cbjI1OTg6XHRcdFx0XHQgKi9cbjI1OTk6XHRcdFx0XHRpZiAoIXNrYl9mcmFnX25ldF9pb3YoZnJhZykpIHtcbjI2MDA6XHRcdFx0XHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7Rm91bmQgbm9uLWRtYWJ1ZiBza2Igd2l0aCBuZXRfaW92XCYjMzQ7KTtcbjI2MDE6XHRcdFx0XHRcdGVyciA9IC1FTk9ERVY7XG4yNjAyOlx0XHRcdFx0XHRnb3RvIG91dDtcbjI2MDM6XHRcdFx0XHR9XG4yNjA0Olx0XG4yNjA1Olx0XHRcdFx0bmlvdiA9IHNrYl9mcmFnX25ldF9pb3YoZnJhZyk7XG4yNjA2Olx0XHRcdFx0aWYgKCFuZXRfaXNfZGV2bWVtX2lvdihuaW92KSkge1xuMjYwNzpcdFx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI2MDg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjYwOTpcdFx0XHRcdH1cbjI2MTA6XHRcbjI2MTE6XHRcdFx0XHRlbmQgPSBzdGFydCAmIzQzOyBza2JfZnJhZ19zaXplKGZyYWcpO1xuMjYxMjpcdFx0XHRcdGNvcHkgPSBlbmQgLSBvZmZzZXQ7XG4yNjEzOlx0XG4yNjE0Olx0XHRcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbjI2MTU6XHRcdFx0XHRcdGNvcHkgPSBtaW4oY29weSwgcmVtYWluaW5nX2xlbik7XG4yNjE2Olx0XG4yNjE3Olx0XHRcdFx0XHRmcmFnX29mZnNldCA9IG5ldF9pb3ZfdmlydHVhbF9hZGRyKG5pb3YpICYjNDM7XG4yNjE4Olx0XHRcdFx0XHRcdCAgICAgIHNrYl9mcmFnX29mZihmcmFnKSAmIzQzOyBvZmZzZXQgLVxuMjYxOTpcdFx0XHRcdFx0XHQgICAgICBzdGFydDtcbjI2MjA6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XG4yNjIxOlx0XHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xuMjYyMjpcdFx0XHRcdFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCxcbjI2MjM6XHRcdFx0XHRcdFx0XHRcdCBtYXhfZnJhZ3MpO1xuMjYyNDpcdFx0XHRcdFx0aWYgKGVycilcbjI2MjU6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4yNjI2Olx0XG4yNjI3Olx0XHRcdFx0XHQvKiBXaWxsIHBlcmZvcm0gdGhlIGV4Y2hhbmdlIGxhdGVyICovXG4yNjI4Olx0XHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XG4yNjI5Olx0XHRcdFx0XHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xuMjYzMDpcdFxuMjYzMTpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBjb3B5O1xuMjYzMjpcdFx0XHRcdFx0cmVtYWluaW5nX2xlbiAtPSBjb3B5O1xuMjYzMzpcdFxuMjYzNDpcdFx0XHRcdFx0ZXJyID0gcHV0X2Ntc2dfbm90cnVuYyhtc2csIFNPTF9TT0NLRVQsXG4yNjM1Olx0XHRcdFx0XHRcdFx0ICAgICAgIFNPX0RFVk1FTV9ETUFCVUYsXG4yNjM2Olx0XHRcdFx0XHRcdFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXG4yNjM3Olx0XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRtYWJ1Zl9jbXNnKTtcbjI2Mzg6XHRcdFx0XHRcdGlmIChlcnIpXG4yNjM5Olx0XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MDpcdFxuMjY0MTpcdFx0XHRcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5pb3YtXHUwMDNlZGVzYy5wcF9yZWZfY291bnQpO1xuMjY0MjpcdFx0XHRcdFx0dGNwX3hhX3Bvb2wubmV0bWVtc1t0Y3BfeGFfcG9vbC5pZHgmIzQzOyYjNDM7XSA9IHNrYl9mcmFnX25ldG1lbShmcmFnKTtcbjI2NDM6XHRcbjI2NDQ6XHRcdFx0XHRcdHNlbnQgJiM0Mzs9IGNvcHk7XG4yNjQ1Olx0XG4yNjQ2Olx0XHRcdFx0XHRpZiAocmVtYWluaW5nX2xlbiA9PSAwKVxuMjY0NzpcdFx0XHRcdFx0XHRnb3RvIG91dDtcbjI2NDg6XHRcdFx0XHR9XG4yNjQ5Olx0XHRcdFx0c3RhcnQgPSBlbmQ7XG4yNjUwOlx0XHRcdH1cbjI2NTE6XHRcbjI2NTI6XHRcdFx0dGNwX3hhX3Bvb2xfY29tbWl0KHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCk7XG4yNjUzOlx0XHRcdGlmICghcmVtYWluaW5nX2xlbilcbjI2NTQ6XHRcdFx0XHRnb3RvIG91dDtcbjI2NTU6XHRcbjI2NTY6XHRcdFx0LyogaWYgcmVtYWluaW5nX2xlbiBpcyBub3Qgc2F0aXNmaWVkIHlldCwgd2UgbmVlZCB0byBnbyB0byB0aGVcbjI2NTc6XHRcdFx0ICogbmV4dCBmcmFnIGluIHRoZSBmcmFnX2xpc3QgdG8gc2F0aXNmeSByZW1haW5pbmdfbGVuLlxuMjY1ODpcdFx0XHQgKi9cbjI2NTk6XHRcdFx0c2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdCA/OiBza2ItXHUwMDNlbmV4dDtcbjI2NjA6XHRcbjI2NjE6XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC0gc3RhcnQ7XG4yNjYyOlx0XHR9IHdoaWxlIChza2IpO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKHJlbWFpbmluZ19sZW4pIHtcbjI2NjU6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjI2NjY6XHRcdFx0Z290byBvdXQ7XG4yNjY3Olx0XHR9XG4yNjY4Olx0XG4yNjY5Olx0b3V0OlxuMjY3MDpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0KHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCk7XG4yNjcxOlx0XHRpZiAoIXNlbnQpXG4yNjcyOlx0XHRcdHNlbnQgPSBlcnI7XG4yNjczOlx0XG4yNjc0Olx0XHRyZXR1cm4gc2VudDtcbjI2NzU6XHR9XG4yNjc2Olx0XG4yNjc3Olx0LypcbjI2Nzg6XHQgKlx0VGhpcyByb3V0aW5lIGNvcGllcyBmcm9tIGEgc29jayBzdHJ1Y3QgaW50byB0aGUgdXNlciBidWZmZXIuXG4yNjc5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjYxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFRoaXMgc3VnZ2VzdHMgZWl0aGVyIGEgYGdyZXBgIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgd2l0aGluIHRoZSBjb2RlYmFzZSwgb3IgYSBtb3JlIHRhcmdldGVkIGNoZWNrIGZvciB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgdG9vbHMgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2lsbCBxdWlja2x5IGlsbHVtaW5hdGUgaXRzIHJvbGUgaW4gdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmVjdm1zZ19kbWFidWYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9MjUwMD1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF94YV9wb29sX21heF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI1MjUtICovXG5uZXQvaXB2NC90Y3AuYzoyNTI2OnN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcC5jLTI1MjctXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTI2ODU9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjg4OC1cbm5ldC9pcHY0L3RjcC5jOjI4ODk6XHRcdFx0XHRlcnIgPSB0Y3BfcmVjdm1zZ19kbWFidWYoc2ssIHNrYiwgb2Zmc2V0LCBtc2csXG5uZXQvaXB2NC90Y3AuYy0yODkwLVx0XHRcdFx0XHRcdFx0IHVzZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGB0Y3BfcmVjdm1zZ19sb2NrZWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLiBNeSBndXQgZmVlbGluZyBzYXlzIHRoYXQgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgcHJvYmFibHkgdHJpZ2dlcmVkIHVuZGVyIHNvbWUgdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDI4ODguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdHJhY2UgdGhlIGxvZ2ljIGFuZCBpZGVudGlmeSB0aGUgcGF0aCB0aGF0IGxlYWRzIHRvIHRoaXMgcGFydGljdWxhciBjYWxsLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW4gcGxheT8gV2hhdCBjaGVja3MgYXJlIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyB0eXBlIG9mIGJ1ZmZlciwgYSBwYXJ0aWN1bGFyIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLCBvciBtYXliZSBzb21lIHJlc291cmNlIGxpbWl0YXRpb25zPyBLbm93aW5nICp3aHkqIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gaXMgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIHByZWRpY2F0ZXMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBnZXRzIGludm9rZWQgb3IgaWYgd2UgdGFrZSBhIGRpZmZlcmVudCBicmFuY2guIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODcwOlx0XHRcdFx0XHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCBvZmZzZXQsIG1zZyxcbjI4NzE6XHRcdFx0XHRcdFx0XHRcdCAgICB1c2VkKTtcbjI4NzI6XHRcdFx0XHRcdGlmIChlcnIpIHtcbjI4NzM6XHRcdFx0XHRcdFx0LyogRXhjZXB0aW9uLiBCYWlsb3V0ISAqL1xuMjg3NDpcdFx0XHRcdFx0XHRpZiAoIWNvcGllZClcbjI4NzU6XHRcdFx0XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuMjg3NjpcdFx0XHRcdFx0XHRicmVhaztcbjI4Nzc6XHRcdFx0XHRcdH1cbjI4Nzg6XHRcdFx0XHR9IGVsc2Uge1xuMjg3OTpcdFx0XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19TT0NLX0RFVk1FTSkpIHtcbjI4ODA6XHRcdFx0XHRcdFx0LyogZG1hYnVmIHNrYnMgY2FuIG9ubHkgYmUgcmVjZWl2ZWRcbjI4ODE6XHRcdFx0XHRcdFx0ICogd2l0aCB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcuXG4yODgyOlx0XHRcdFx0XHRcdCAqL1xuMjg4MzpcdFx0XHRcdFx0XHRpZiAoIWNvcGllZClcbjI4ODQ6XHRcdFx0XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuMjg4NTpcdFxuMjg4NjpcdFx0XHRcdFx0XHRicmVhaztcbjI4ODc6XHRcdFx0XHRcdH1cbjI4ODg6XHRcbjI4ODk6XHRcdFx0XHRcdGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZyxcbjI4OTA6XHRcdFx0XHRcdFx0XHRcdCB1c2VkKTtcbjI4OTE6XHRcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI4OTI6XHRcdFx0XHRcdFx0aWYgKCFjb3BpZWQpXG4yODkzOlx0XHRcdFx0XHRcdFx0Y29waWVkID0gZXJyO1xuMjg5NDpcdFxuMjg5NTpcdFx0XHRcdFx0XHRicmVhaztcbjI4OTY6XHRcdFx0XHRcdH1cbjI4OTc6XHRcdFx0XHRcdHVzZWQgPSBlcnI7XG4yODk4Olx0XHRcdFx0fVxuMjg5OTpcdFx0XHR9XG4yOTAwOlx0XG4yOTAxOlx0XHRcdGxhc3RfY29waWVkX2RtYWJ1ZiA9ICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKTtcbjI5MDI6XHRcbjI5MDM6XHRcdFx0V1JJVEVfT05DRSgqc2VxLCAqc2VxICYjNDM7IHVzZWQpO1xuMjkwNDpcdFx0XHRjb3BpZWQgJiM0Mzs9IHVzZWQ7XG4yOTA1Olx0XHRcdGxlbiAtPSB1c2VkO1xuMjkwNjpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKVxuMjkwNzpcdFx0XHRcdHNrX3BlZWtfb2Zmc2V0X2Z3ZChzaywgdXNlZCk7XG4yOTA4Olx0XHRcdGVsc2VcbjI5MDk6XHRcdFx0XHRza19wZWVrX29mZnNldF9id2Qoc2ssIHVzZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBUQ1AgUmVjZWl2ZSBQYXRoIHdpdGggRGV2bWVtL0RNQUJVRioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBhbmQgZGV2bWVtL2RtYWJ1ZiBUQ1AgcmVjZWl2ZSBvcGVyYXRpb25zLiBTaW5jZSBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBpcyBjYWxsZWQgZnJvbSBgdGNwX3JlY3Ztc2dgLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkcml2ZSB0aGUgYmVoYXZpb3Igb2YgZGV2bWVtL2RtYWJ1ZiBvbiB0aGUgcmVjZWl2ZSBwYXRoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWFyY2ggZm9yIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgY29kZSB1c2FnZS4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBmb3IgYSBmZXcga2V5IHRlcm1zOiBgU09fREVWTUVNYCwgYE1TR19TT0NLX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgTkVUX0RFVk1FTWAuIFRoYXQgc2hvdWxkIGNhc3QgYSB3aWRlIG5ldCBhY3Jvc3MgS2NvbmZpZyBmaWxlcyBhbmQgc291cmNlIGNvZGUsIGhvcGVmdWxseSByZXZlYWxpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3dpdGNoZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLiBUaGlzIHdpbGwgZ3VpZGUgbWUgdG93YXJkIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGdldHMgaGFuZGxlZCBpbiB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfREVWTUVNfERNQV9TSEFSRURfQlVGRkVSfE1TR19TT0NLX0RFVk1FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q9NjU9QW55IGV4cG9ydGVycyBvciB1c2VycyBvZiB0aGUgZG1hLWJ1ZiBidWZmZXIgc2hhcmluZyBmcmFtZXdvcmsgbXVzdCBoYXZlIGFcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdDo2NjomIzM5O3NlbGVjdCBETUFfU0hBUkVEX0JVRkZFUiYjMzk7IGluIHRoZWlyIHJlc3BlY3RpdmUgS2NvbmZpZ3MuXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3QtNjctXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTQ3PVRoZSB1c2VyIGFwcGxpY2F0aW9uIG11c3Qgc2lnbmFsIHRvIHRoZSBrZXJuZWwgdGhhdCBpdCBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZ1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTQ4OmRldm1lbSBkYXRhIGJ5IHBhc3NpbmcgdGhlIE1TR19TT0NLX0RFVk1FTSBmbGFnIHRvIHJlY3Ztc2c6OlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTQ5LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTUwOlx0cmV0ID0gcmVjdm1zZyhmZCwgXHUwMDI2bXNnLCBNU0dfU09DS19ERVZNRU0pO1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTUxLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTUyOkFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCBzcGVjaWZ5IHRoZSBNU0dfU09DS19ERVZNRU0gZmxhZyB3aWxsIHJlY2VpdmUgYW4gRUZBVUxUXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNTMtb24gZGV2bWVtIGRhdGEuXG4tLVxuZHJpdmVycy9NYWtlZmlsZT03OD1vYmoteVx0XHRcdFx0JiM0Mzs9IGRheC9cbmRyaXZlcnMvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSAmIzQzOz0gZG1hLWJ1Zi9cbmRyaXZlcnMvTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX05VQlVTKVx0XHQmIzQzOz0gbnVidXMvXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc9Nj1jb25maWcgRFJNX0FDQ0VMX0hBQkFOQUxBQlNcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZy0xMi1cdHNlbGVjdCBIV01PTlxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc6MTM6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTE0LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz00PWNvbmZpZyBTWU5DX0ZJTEVcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02LVx0ZGVmYXVsdCBuXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy04LVx0aGVscFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTMzPWNvbmZpZyBVRE1BQlVGXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzUtXHRkZWZhdWx0IG5cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjM2Olx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzctXHRkZXBlbmRzIG9uIE1FTUZEX0NSRUFURSB8fCBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz00Mz1jb25maWcgRE1BQlVGX0RFQlVHXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy00NC1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBkZWJ1ZyBjaGVja3NcJiMzNDtcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjQ1Olx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNDYtXHRkZWZhdWx0IHkgaWYgREVCVUdcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1Rcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01NC1cdGRlcGVuZHMgb24gS1VOSVRcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjU1Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01Ni1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NjA9bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1wmIzM0O1xuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6NjI6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYzLVx0aGVscFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTg9bWVudWNvbmZpZyBEUk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMy1cdHNlbGVjdCBJMkNcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnOjE0Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xNS1cdHNlbGVjdCBTWU5DX0ZJTEVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWc9Mj1jb25maWcgRFJNX1ZJUlRJT19HUFVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWctOC1cdHNlbGVjdCBEUk1fR0VNX1NITUVNX0hFTFBFUlxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnOjk6XHRzZWxlY3QgVklSVElPX0RNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xuLS1cbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXHRib29sIFwmIzM0O0VuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXCYjMzQ7XG5kcml2ZXJzL2lpby9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cdGRlcGVuZHMgb24gIUFMUEhBXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVx0c2VsZWN0IElSUV9QT0xMXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cdGRlcGVuZHMgb24gTU1VXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz01MT1jb25maWcgSU9NTVVGRF9URVNUXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTYtXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NTc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTU4LVx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5jPTQ4Mj1pbnQgaW9wdF9tYXBfZmlsZV9wYWdlcyhzdHJ1Y3QgaW9tbXVmZF9jdHggKmljdHgsIHN0cnVjdCBpb19wYWdldGFibGUgKmlvcHQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5jLTQ5Ny1cdHN0YXJ0X2J5dGUgPSBzdGFydCAtIEFMSUdOX0RPV04oc3RhcnQsIFBBR0VfU0laRSk7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmM6NDk4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuYy00OTktXHRcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmg9MjUxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb3B0X2lzX2RtYWJ1ZihzdHJ1Y3QgaW9wdF9wYWdlcyAqcGFnZXMpXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmgtMjUyLXtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuaDoyNTM6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuaC0yNTQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0xNTI3PXN0cnVjdCBpb3B0X3BhZ2VzICppb3B0X2FsbG9jX2RtYWJ1Zl9wYWdlcyhzdHJ1Y3QgaW9tbXVmZF9jdHggKmljdHgsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMTUzNi1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjE1Mzc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTE1MzgtXHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbi0tXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0zPWNvbmZpZyBWSURFT0JVRjJfQ09SRVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6NDpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctNS1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTM9Y29uZmlnIFZJREVPQlVGMl9ETUFfQ09OVElHXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTYtXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MTc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE4LVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTk9Y29uZmlnIFZJREVPQlVGMl9WTUFMTE9DXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMjItXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MjM6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTI0LVxuLS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnPTE9Y29uZmlnIFZJREVPX1RFR1JBX1ZERVxuLS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTYtXHRkZXBlbmRzIG9uIFZJREVPX0RFVlxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc6NzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWctOC1cdHNlbGVjdCBJT01NVV9JT1ZBXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWc9MjY2PWNvbmZpZyBRQ09NX0ZBU1RSUENcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0yNjktXHRkZXBlbmRzIG9uIFJQTVNHXG5kcml2ZXJzL21pc2MvS2NvbmZpZzoyNzA6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWlzYy9LY29uZmlnLTI3MS1cdHNlbGVjdCBRQ09NX1NDTVxuLS1cbmRyaXZlcnMvdGVlL0tjb25maWc9Mz1tZW51Y29uZmlnIFRFRVxuLS1cbmRyaXZlcnMvdGVlL0tjb25maWctNi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbmRyaXZlcnMvdGVlL0tjb25maWc6NzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy90ZWUvS2NvbmZpZy04LVx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MTkyPWNvbmZpZyBVU0JfRl9GU1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTkzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xOTQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz01OD1jb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTk6XHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNjAtXG4tLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xNjM9Y29uZmlnIFZJUlRJT19NTUlPX0NNRExJTkVfREVWSUNFU1xuLS1cbmRyaXZlcnMvdmlydGlvL0tjb25maWctMTczLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzoxNzQ6Y29uZmlnIFZJUlRJT19ETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xNzUtXHR0cmlzdGF0ZVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzoxNzY6XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTE3Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfVklSVElPX01FTSkgJiM0Mzs9IHZpcnRpb19tZW0ub1xuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1ZJUlRJT19ETUFfU0hBUkVEX0JVRkZFUikgJiM0Mzs9IHZpcnRpb19kbWFfYnVmLm9cbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19WSVJUSU9fREVCVUcpICYjNDM7PSB2aXJ0aW9fZGVidWcub1xuLS1cbmRyaXZlcnMveGVuL0tjb25maWc9MTQ1PWNvbmZpZyBYRU5fR05UREVWX0RNQUJVRlxuLS1cbmRyaXZlcnMveGVuL0tjb25maWctMTQ3LVx0ZGVwZW5kcyBvbiBYRU5fR05UREVWIFx1MDAyNlx1MDAyNiBYRU5fR1JBTlRfRE1BX0FMTE9DXG5kcml2ZXJzL3hlbi9LY29uZmlnOjE0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy94ZW4vS2NvbmZpZy0xNDktXHRoZWxwXG4tLVxuaW5jbHVkZS9saW51eC9zb2NrZXQuaD0xOTc9c3RydWN0IHVjcmVkIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0My1cbmluY2x1ZGUvbGludXgvc29ja2V0Lmg6MzQ0OiNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFx0LyogUmVjZWl2ZSBkZXZtZW0gc2ticyBhcyBjbXNnICovXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0NS0jZGVmaW5lIE1TR19aRVJPQ09QWVx0MHg0MDAwMDAwXHQvKiBVc2UgdXNlciBkYXRhIGluIGtlcm5lbCBwYXRoICovXG4tLVxuaW5jbHVkZS9uZXQvbmV0bWVtLmg9MzYxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuZXRtZW1fZ2V0X2RtYV9hZGRyKG5ldG1lbV9yZWYgbmV0bWVtKVxuLS1cbmluY2x1ZGUvbmV0L25ldG1lbS5oLTM2NS1cbmluY2x1ZGUvbmV0L25ldG1lbS5oOjM2NjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVk1FTSlcbmluY2x1ZGUvbmV0L25ldG1lbS5oLTM2Ny1zdGF0aWMgaW5saW5lIGJvb2wgbmV0X2lzX2Rldm1lbV9pb3YoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4tLVxuaW9fdXJpbmcvemNyeC5jPTEzMD1zdGF0aWMgdm9pZCBpb191bm1hcF9kbWFidWYoc3RydWN0IGlvX3pjcnhfbWVtICptZW0pXG5pb191cmluZy96Y3J4LmMtMTMxLXtcbmlvX3VyaW5nL3pjcnguYzoxMzI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmlvX3VyaW5nL3pjcnguYy0xMzMtXHRcdHJldHVybjtcbi0tXG5pb191cmluZy96Y3J4LmM9MTQzPXN0YXRpYyB2b2lkIGlvX3JlbGVhc2VfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxuaW9fdXJpbmcvemNyeC5jLTE0NC17XG5pb191cmluZy96Y3J4LmM6MTQ1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG5pb191cmluZy96Y3J4LmMtMTQ2LVx0XHRyZXR1cm47XG4tLVxuaW9fdXJpbmcvemNyeC5jPTE1Mj1zdGF0aWMgaW50IGlvX2ltcG9ydF9kbWFidWYoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTE2Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy96Y3J4LmM6MTY3Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG5pb191cmluZy96Y3J4LmMtMTY4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTY2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY3OmlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0Mj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk0My0jZW5kaWZcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDQ6I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk0NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXG4tLVxubmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4tLVxubmV0L0tjb25maWctNjgtXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxubmV0L0tjb25maWctNzAtXHRkZWZfYm9vbCB5XG5uZXQvS2NvbmZpZy03MS1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxubmV0L0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG5uZXQvS2NvbmZpZy03My1cdGRlcGVuZHMgb24gUEFHRV9QT09MXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qub1xubmV0L2NvcmUvTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xubmV0L2NvcmUvTWFrZWZpbGUtNTMtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgJiM0Mzs9IGxvY2tfZGVidWcub1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oLTktICovXG5uZXQvY29yZS9kZXZtZW0uaDoxMDojaWZuZGVmIF9ORVRfREVWTUVNX0hcbm5ldC9jb3JlL2Rldm1lbS5oOjExOiNkZWZpbmUgX05FVF9ERVZNRU1fSFxubmV0L2NvcmUvZGV2bWVtLmgtMTItXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTg9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oLTc4LVxubmV0L2NvcmUvZGV2bWVtLmg6Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXG5uZXQvY29yZS9kZXZtZW0uaC04MC0vKiBPd25lciBvZiB0aGUgZG1hLWJ1ZiBjaHVua3MgaW5zZXJ0ZWQgaW50byB0aGUgZ2VuIHBvb2wuIEVhY2ggc2NhdHRlcmxpc3Rcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0yNDI9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC0yNDctXG5uZXQvY29yZS9kZXZtZW0uaDoyNDg6I2VuZGlmIC8qIF9ORVRfREVWTUVNX0ggKi9cbi0tXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTItXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MTM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTQtaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNjg1PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI4NzgtXHRcdFx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcC5jOjI4Nzk6XHRcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1NPQ0tfREVWTUVNKSkge1xubmV0L2lwdjQvdGNwLmMtMjg4MC1cdFx0XHRcdFx0LyogZG1hYnVmIHNrYnMgY2FuIG9ubHkgYmUgcmVjZWl2ZWRcbm5ldC9pcHY0L3RjcC5jOjI4ODE6XHRcdFx0XHRcdCAqIHdpdGggdGhlIE1TR19TT0NLX0RFVk1FTSBmbGFnLlxubmV0L2lwdjQvdGNwLmMtMjg4Mi1cdFx0XHRcdFx0ICovXG4tLVxucnVzdC9oZWxwZXJzL2hlbHBlcnMuYy01OS0jaW5jbHVkZSBcJiMzNDtkbWEuY1wmIzM0O1xucnVzdC9oZWxwZXJzL2hlbHBlcnMuYzo2MDojaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXG5ydXN0L2hlbHBlcnMvaGVscGVycy5jLTYxLSNpbmNsdWRlIFwmIzM0O2RtYS1yZXN2LmNcJiMzNDtcbi0tXG5zYW1wbGVzL0tjb25maWc9MjMwPWNvbmZpZyBTQU1QTEVfVkZJT19NREVWX01CT0NIU1xuLS1cbnNhbXBsZXMvS2NvbmZpZy0yMzMtXHRzZWxlY3QgVkZJT19NREVWXG5zYW1wbGVzL0tjb25maWc6MjM0Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5zYW1wbGVzL0tjb25maWctMjM1LVx0aGVscFxuLS1cbnNvdW5kL3NvYy9mc2wvS2NvbmZpZz02PWNvbmZpZyBTTkRfU09DX0ZTTF9BU1JDXG4tLVxuc291bmQvc29jL2ZzbC9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIEhBU19ETUFcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZzo5Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5zb3VuZC9zb2MvZnNsL0tjb25maWctMTAtXHRzZWxlY3QgUkVHTUFQX01NSU9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oPTE5Nz1zdHJ1Y3QgdWNyZWQge1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMzQzLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaDozNDQ6I2RlZmluZSBNU0dfU09DS19ERVZNRU0gMHgyMDAwMDAwXHQvKiBSZWNlaXZlIGRldm1lbSBza2JzIGFzIGNtc2cgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMzQ1LSNkZWZpbmUgTVNHX1pFUk9DT1BZXHQweDQwMDAwMDBcdC8qIFVzZSB1c2VyIGRhdGEgaW4ga2VybmVsIHBhdGggKi9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYy0xNS0jZW5kaWZcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L21zZ19mbGFncy5jOjE2OiNpZm5kZWYgTVNHX1NPQ0tfREVWTUVNXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYzoxNzojZGVmaW5lIE1TR19TT0NLX0RFVk1FTVx0XHQgMHgyMDAwMDAwXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYy0xOC0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9jb25maWc9MTc9Q09ORklHX05FVF9DTFNfQlBGPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2NvbmZpZzoxODpDT05GSUdfTkVUX0RFVk1FTT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9jb25maWctMTktQ09ORklHX05FVF9JUEdSRT15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy04NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6ODY6I2lmbmRlZiBNU0dfU09DS19ERVZNRU1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6ODc6I2RlZmluZSBNU0dfU09DS19ERVZNRU0gMHgyMDAwMDAwXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTg4LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9ODQ3PXN0YXRpYyBpbnQgZG9fc2VydmVyKHN0cnVjdCBtZW1vcnlfYnVmZmVyICptZW0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05NjEtXHRcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2RhdGEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzo5NjI6XHRcdHJldCA9IHJlY3Ztc2coY2xpZW50X2ZkLCBcdTAwMjZtc2csIE1TR19TT0NLX0RFVk1FTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTk2My1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3JlY3Ztc2cgcmV0PSVsZFxcblwmIzM0OywgcmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBEZXZtZW0gTGFuZHNjYXBlKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXZtZW0gc2l0dWF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJhbGwgcmVhY2hhYmlsaXR5IHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBhY3RpdmVseSBiZWluZyB1c2VkPyBDYW4gaXQgYmUgdHJpZ2dlcmVkIGluIGEgd2F5IHRoYXQgYWxpZ25zIHdpdGggdGhlIGN1cnJlbnQgcHJvYmxlbSwgd2hldGhlciB0aHJvdWdoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIG9yIHRocm91Z2ggYSByZWxhdGVkIG1lY2hhbmlzbSBsaWtlIGBkbWFidWZgIG92ZXIgVENQPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuCgpTbywgSSYjMzk7bGwgaW1tZWRpYXRlbHkgc3RhcnQgc2Nhbm5pbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIGh1bnQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYE5FVF9ERVZNRU1gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgZGV2bWVtLXJlbGF0ZWQgc2tidWZmcywgaWYgdGhleSBldmVuIGV4aXN0IGluIHRoaXMgY29udGV4dCwgYXJlIGdlbmVyYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIGdyYXNwIHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGNvbnRyb2xsaW5nIGRldm1lbSYjMzk7cyBiZWhhdmlvciDigJMgaG93IGl0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBjb25maWd1cmVkLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBpcyBtYXBwZWQgYW5kIGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWJzb2x1dGVseSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdywgb3IgaWYsIGl0JiMzOTtzIGltcGFjdGluZyB0aGluZ3MuIEl0JiMzOTtzIGFsbCBhYm91dCBmb2xsb3dpbmcgdGhlIGRhdGEgZmxvdyBhbmQgZmlndXJpbmcgb3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcG9pbnRzIG9mIGludGVyZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTT19ERVZNRU1fJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDctXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMDg6QXBwbGljYXRpb25zIG1heSByZWNlaXZlIG5vIFNPX0RFVk1FTV8qIGNtc2dzLiBUaGF0IGluZGljYXRlcyBub24tZGV2bWVtLFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjA5LXJlZ3VsYXIgVENQIGRhdGEgdGhhdCBsYW5kZWQgb24gYW4gUlggcXVldWUgbm90IGJvdW5kIHRvIGEgZG1hYnVmLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTIxNj1wcm9jZXNzZXMgdGhlIGZyYWcuIFRoZSB1c2VyIG11c3QgcmV0dXJuIHRoZSBmcmFnIHRvIHRoZSBrZXJuZWwgdmlhXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMTc6U09fREVWTUVNX0RPTlRORUVEOjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIxOC1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIxOTpcdHJldCA9IHNldHNvY2tvcHQoY2xpZW50X2ZkLCBTT0xfU09DS0VULCBTT19ERVZNRU1fRE9OVE5FRUQsIFx1MDAyNnRva2VuLFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjIwLVx0XHRcdCBzaXplb2YodG9rZW4pKTtcbi0tXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQyLVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MzojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcdDc4XG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQ0OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDU6I2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXHQ3OVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0NjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQ3OiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0OC1cbi0tXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNTMtXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNTQ6I2RlZmluZSBTT19ERVZNRU1fTElORUFSXHQ3OFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU1OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE1NjojZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcdDc5XG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNTc6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU4OiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTU5LVxuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTM4LVxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTT19ERVZNRU1fTElORUFSXHQweDQwNEVcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQwOiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQxOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0MHg0MDRGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MzojZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0MHg0MDUwXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0NC1cbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTM1LVxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzNjojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVIgICAgICAgICAweDAwNTdcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzc6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUiAgICAgICAgU09fREVWTUVNX0xJTkVBUlxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUYgICAgICAgICAweDAwNThcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MDojZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRCAgICAgICAweDAwNTlcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDEtXG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTEzNy1cbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxMzg6I2RlZmluZSBTT19ERVZNRU1fTElORUFSXHQ3OFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzOTojZGVmaW5lIFNDTV9ERVZNRU1fTElORUFSXHRTT19ERVZNRU1fTElORUFSXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQwOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0NzlcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDE6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MjojZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0ODBcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDMtXG4tLVxubmV0L2NvcmUvc29jay5jPTEwMzA9c3RhdGljIGludCBzb2NrX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgaW50IGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0xMDc2LVxubmV0L2NvcmUvc29jay5jOjEwNzc6LyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRva2VucyBhbmQgZnJhZ3MgdGhhdCB0aGUgdXNlciBjYW4gU09fREVWTUVNX0RPTlRORUVEXG5uZXQvY29yZS9zb2NrLmMtMTA3OC0gKiBpbiAxIHN5c2NhbGwuIFRoZSBsaW1pdCBleGlzdHMgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhlIGtlcm5lbFxuLS1cbm5ldC9jb3JlL3NvY2suYz0xMTk0PWludCBza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMTI5Ny0jaWZkZWYgQ09ORklHX1BBR0VfUE9PTFxubmV0L2NvcmUvc29jay5jOjEyOTg6XHRjYXNlIFNPX0RFVk1FTV9ET05UTkVFRDpcbm5ldC9jb3JlL3NvY2suYy0xMjk5LVx0XHRyZXR1cm4gc29ja19kZXZtZW1fZG9udG5lZWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNTI2PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTY4LVx0XHRcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxubmV0L2lwdjQvdGNwLmM6MjU2OTpcdFx0XHRcdFx0ICAgICAgIFNPX0RFVk1FTV9MSU5FQVIsXG5uZXQvaXB2NC90Y3AuYy0yNTcwLVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNjM0LVx0XHRcdFx0ZXJyID0gcHV0X2Ntc2dfbm90cnVuYyhtc2csIFNPTF9TT0NLRVQsXG5uZXQvaXB2NC90Y3AuYzoyNjM1Olx0XHRcdFx0XHRcdCAgICAgICBTT19ERVZNRU1fRE1BQlVGLFxubmV0L2lwdjQvdGNwLmMtMjYzNi1cdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgtMTM3LVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcdDc4XG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTM5OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDA6I2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXHQ3OVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQyOiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTA0Mi1cdFx0XHRyZXQgPSBzZXRzb2Nrb3B0KGNsaWVudF9mZCwgU09MX1NPQ0tFVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTA0MzpcdFx0XHRcdFx0IFNPX0RFVk1FTV9ET05UTkVFRCwgXHUwMDI2dG9rZW4sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwNDQtXHRcdFx0XHRcdCBzaXplb2YodG9rZW4pKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTA0NS1cdFx0XHRpZiAocmV0ICE9IDEpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTA0NjpcdFx0XHRcdHByX2VycihcJiMzNDtTT19ERVZNRU1fRE9OVE5FRUQgbm90IGVub3VnaCB0b2tlbnNcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQ3LVx0XHRcdFx0Z290byBlcnJfY2xvc2VfY2xpZW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYG5ldF9kZXZtZW1gIGludGVyZmFjZSBmdW5jdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbWFwcGluZyB0aGUgb3ZlcmFsbCBsYW5kc2NhcGUg4oCTIGlzIGl0IHByaW1hcmlseSBkcml2ZW4gYnkgTmV0bGluayBjb21tYW5kcywgYXJlIHRoZXJlIGtleSBzb2NrZXQgb3B0aW9ucyBpbnZvbHZlZCwgb3IgZG9lcyBpdCBsZXZlcmFnZSBzb21ldGhpbmcgbGlrZSBgdWRtYWJ1ZmAgZm9yIGRpcmVjdCBtZW1vcnkgYWNjZXNzPyBIb3cgaXMgdGhlIHdob2xlIGBuZXRkZXYgZG1hYnVmYCBiaW5kaW5nIGhhbmRsZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2s/CgpUbyBnZXQgYSBjb25jcmV0ZSBzdGFydGluZyBwb2ludCwgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgZGV2bWVtLmNgIHdpdGhpbiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBtZW1vcnkgbWFuYWdlbWVudCBmb3IgbmV0d29yayBkZXZpY2VzLiBJdCB3aWxsIGxpa2VseSBob2xkIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaW50ZXJmYWNlLCBhbmQgdGhlbiBJIGNhbiB0cmFjZSBmcm9tIHRoZXJlIHRvIHRoZSBzdXBwb3J0aW5nIHN0cnVjdHVyZXMuIEl0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0xNTUtXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9MTg4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5jOjE4OTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG5uZXQvY29yZS9kZXZtZW0uYy0xOTAtXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTk0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjk1Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5oLTk2LVx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2Rldixcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xMDI9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmg6MTAzOmludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmgtMTA0LVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE3Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE3ODpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG5uZXQvY29yZS9kZXZtZW0uaC0xNzktXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE5OT1zdGF0aWMgaW5saW5lIGludFxubmV0L2NvcmUvZGV2bWVtLmg6MjAwOm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uaC0yMDEtXHRcdFx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEwMTM9aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTQtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwOTU6XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihuZXRkZXYsIE5VTEwsIGRtYV9kZXYsIERNQV9GUk9NX0RFVklDRSxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5Ni1cdFx0XHRcdFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTExMDMtXHRmb3JfZWFjaF9zZXRfYml0KHJ4cV9pZHgsIHJ4cV9iaXRtYXAsIG5ldGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTEwNDpcdFx0ZXJyID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShuZXRkZXYsIHJ4cV9pZHgsIGJpbmRpbmcsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTExMDUtXHRcdFx0XHRcdFx0ICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTE3MT1pbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzNi1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTIzNzpcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM4LVx0XHRcdFx0XHQgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYG5ldC9pcHY0L3RjcC5jYCBpcyBtb2RpZnlpbmcgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgYW5kIGFkZGluZyBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIGlmIGl0IG1lcml0cyBmdXp6aW5nLgoKVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIGBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzIC0gaWAgd2l0aCB0aGUgb3V0cHV0IGZyb20gdGhpcyBuZXcgYHRjcF94YV9wb29sX21heF9mcmFnc2AgZnVuY3Rpb24gYXMgdGhlIHJlZmlsbCBzaXplIGZvciB0aGUgWEEgcG9vbC4gIFNvLCB3ZSBhcmUgZ29pbmcgZnJvbSBhIHN0YXRpYyBjYWxjdWxhdGlvbiB0byBhIGR5bmFtaWMgY2FsY3VsYXRpb24uICBNYWtlcyBzZW5zZSBmb3IgbW9yZSByb2J1c3QgY29udHJvbC4KCk5vdywgbGV0JiMzOTtzIGFzc2VzcyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUQ1AgYW5kIGRtYWJ1ZiAoemVyby1jb3B5IHJlY2VpdmUpLiBTeXprYWxsZXIgY2FuLCBhbmQgKmRvZXMqLCB0YXJnZXQgc29ja2V0cywgbmV0bGluaywgYHJlY3Ztc2coLi4uLCBNU0dfU09DS19ERVZNRU0pYCwgYW5kIFRDUCBpbiBnZW5lcmFsLiBUaGUgZ3VpZGVsaW5lIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgJiMzNDtjb3JlIG5ldHdvcmtpbmcmIzM0OyBtb2RpZmljYXRpb25zIGFyZSBhIHBvc2l0aXZlIHNpZ25hbC4gQmluZ28gLSB0aGlzIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gVGhlIGNlbnRyYWwgZm9jdXMgaXMgb24gd2hhdCBpcyBhY3R1YWxseSBhZGRlZCBvciBhbHRlcmVkIGluIHRoZSBwYXRjaC4gSSYjMzk7bSBsb29raW5nIGF0OgoqICAgYHRjcF94YV9wb29sX21heF9mcmFnc2A6IFRoaXMgaXMgbmV3OyBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LgoqICAgYHRjcF9yZWN2bXNnX2RtYWJ1ZmA6IFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQ7IGl0IG11c3QgYmUgaW5jbHVkZWQuCiogICBQb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvdGNwLmNgLCBsaWtlIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLgoKTGV0JiMzOTtzIG5vdCBqdW1wIHRvIG1ha2luZyB0aGlzIHRvbyBicm9hZCBieSBpbmNsdWRpbmcgdGhlIHViaXF1aXRvdXMgYHRjcF9yZWN2bXNnYCBhcyB0aGF0IHdpbGwgZGV0cmFjdCBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4gSW5zdGVhZCwgbGV0JiMzOTtzIGlkZW50aWZ5IGZlYXR1cmVzIHNwZWNpZmljIHRvIGRtYWJ1ZiBhbmQgdGhlIHhhIHBvb2wuCgpTbywgbGV0JiMzOTtzIGtlZXAgdGhlIGZvY3VzIG9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgYW5kIHBvc3NpYmx5IHRoZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0byBrZWVwIHRoaXMgdGFyZ2V0ZWQuCgpJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaW4gdGhvc2UgY2hvaWNlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIEkgbWlnaHQgaGF2ZSBtaXNzZWQsIGJ1dCBJIGhhdmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ1MDpcdFx0XHRcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXHUwMDNlbmV0bWVtc1tpXSwgR0ZQX0tFUk5FTCk7XG4yNDUxOlx0XHQvKiBSb2xsYmFjayB3aGF0IGhhcyBiZWVuIHByZS1hbGxvY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuICovXG4yNDUyOlx0XHRmb3IgKDsgaSBcdTAwM2MgcC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KVxuMjQ1MzpcdFx0XHRfX3hhX2VyYXNlKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXHUwMDNldG9rZW5zW2ldKTtcbjI0NTQ6XHRcbjI0NTU6XHRcdHAtXHUwMDNlbWF4ID0gMDtcbjI0NTY6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0NTc6XHR9XG4yNDU4Olx0XG4yNDU5Olx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxuMjQ2MDpcdHtcbjI0NjE6XHRcdGlmICghcC1cdTAwM2VtYXgpXG4yNDYyOlx0XHRcdHJldHVybjtcbjI0NjM6XHRcbjI0NjQ6XHRcdHhhX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncyk7XG4yNDY1Olx0XG4yNDY2Olx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0Njc6XHRcbjI0Njg6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0Njk6XHR9XG4yNDcwOlx0XG4yNDcxOlx0c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXG4yNDcyOlx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG1heF9mcmFncylcbjI0NzM6XHR7XG4yNDc0Olx0XHRpbnQgZXJyLCBrO1xuMjQ3NTpcdFxuMjQ3NjpcdFx0aWYgKHAtXHUwMDNlaWR4IFx1MDAzYyBwLVx1MDAzZW1heClcbjI0Nzc6XHRcdFx0cmV0dXJuIDA7XG4yNDc4Olx0XG4yNDc5Olx0XHR4YV9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ4MDpcdFxuMjQ4MTpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XG4yNDgyOlx0XG4yNDgzOlx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBtYXhfZnJhZ3M7IGsmIzQzOyYjNDM7KSB7XG4yNDg0Olx0XHRcdGVyciA9IF9feGFfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgXHUwMDI2cC1cdTAwM2V0b2tlbnNba10sXG4yNDg1Olx0XHRcdFx0XHQgWEFfWkVST19FTlRSWSwgeGFfbGltaXRfMzFiLCBHRlBfS0VSTkVMKTtcbjI0ODY6XHRcdFx0aWYgKGVycilcbjI0ODc6XHRcdFx0XHRicmVhaztcbjI0ODg6XHRcdH1cbjI0ODk6XHRcbjI0OTA6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0OTE6XHRcbjI0OTI6XHRcdHAtXHUwMDNlbWF4ID0gaztcbjI0OTM6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0OTQ6XHRcdHJldHVybiBrID8gMCA6IGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBETUEgQnVmZmVyIFJlY2VwdGlvbiBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkZXBlbmRlbmNpZXMgYXJvdW5kIHRoZXNlIGZ1bmN0aW9uczogYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLCBhbmQgYHRjcF94YV9wb29sX3JlZmlsbGAuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGNoZWNraW5nIGlzIHdoZXRoZXIgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSB0aGVzZSwgb3IgaWYgdGhleSYjMzk7cmUgaW5kZXBlbmRlbnQgZnVuY3Rpb25zLiBJZiBpbmxpbmluZyBpcyBwb3NzaWJsZSwgdGhhdCBhZmZlY3RzIGhvdyBJIHRoaW5rIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCkZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSSYjMzk7bGwgdmVyaWZ5IGlmIGl0JiMzOTtzIHNvbGVseSBjYWxsZWQgd2l0aGluIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSwgZ2l2ZW4gdGhlIGNhbGwgaGVyZTogYGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZywgdXNlZCk7YCBBbmQsIGFzIGV4cGVjdGVkLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCB0aGVuIGNhbGxzIHRob3NlIHBvb2wgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGJlZm9yZSAtIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IHRoZSBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzIHN1YnN5c3RlbS4gVGhlIGxpc3RlZCBmdW5jdGlvbnMsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCwgYW5kIGB0Y3BfeGFfcG9vbF9yZWZpbGxgIGxvb2sgbGlrZSB0aGUgcmVsZXZhbnQgc3ltYm9scywgc28gdGhhdCBjaGVja3Mgb3V0LgoKRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgRW5hYmxlQ29uZmlncy4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gYmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkPyBJJiMzOTtsbCBjaGVjayBgbmV0L2lwdjQvdGNwLmNgIGFuZCBLY29uZmlnIHRvIGZpZ3VyZSB0aGF0IG91dC4gRmlyc3QsIGlzIGBuZXQvaXB2NC90Y3AuY2AgY29tcGlsZWQgd2l0aCBgQ09ORklHX0lORVRgPyBBbmQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBydWxlcy4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NTkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOS1cdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xMS1cdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTItXHQgICAgIHRjcF9yZWNvdmVyeS5vIHRjcF91bHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTM6XHQgICAgIHRjcF9vZmZsb2FkLm8gdGNwX3BsYi5vIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE0LVx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTUwPW9iai0kKENPTkZJR19UQ1BfQ09OR19DVUJJQykgJiM0Mzs9IHRjcF9jdWJpYy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1MTpvYmotJChDT05GSUdfVENQX0NPTkdfRENUQ1ApICYjNDM7PSB0Y3BfZGN0Y3Aub1xubmV0L2lwdjQvTWFrZWZpbGUtNTItb2JqLSQoQ09ORklHX1RDUF9DT05HX1dFU1RXT09EKSAmIzQzOz0gdGNwX3dlc3R3b29kLm9cbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfVENQX0NPTkdfSFlCTEEpICYjNDM7PSB0Y3BfaHlibGEub1xubmV0L2lwdjQvTWFrZWZpbGU6NTU6b2JqLSQoQ09ORklHX1RDUF9DT05HX0hUQ1ApICYjNDM7PSB0Y3BfaHRjcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS01Ni1vYmotJChDT05GSUdfVENQX0NPTkdfVkVHQVMpICYjNDM7PSB0Y3BfdmVnYXMub1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI3MT12b2lkIGluZXRfY3NrX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjg3LVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMjg4Olx0dGNwX29ycGhhbl9jb3VudF9kZWMoKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI4OS1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEyOTM9dm9pZCBpbmV0X2Nza19wcmVwYXJlX2Zvcl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI5Ny1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyOTg6XHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjk5LX1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzNjk9c3RhdGljIHZvaWQgaW5ldF9jaGlsZF9mb3JnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzc1LVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzc2Olx0dGNwX29ycGhhbl9jb3VudF9pbmMoKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTM3Ny1cbi0tXG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYz03NDU9Ym9vbCBpbmV0X2VoYXNoX25vbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm9zaywgYm9vbCAqZm91bmRfZHVwX3NrKVxuLS1cbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTc1MS1cdH0gZWxzZSB7XG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYzo3NTI6XHRcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYy03NTMtXHRcdGluZXRfc2tfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLS1cbm5ldC9pcHY0L3Byb2MuYz01MT1zdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L3Byb2MuYy01NS1cbm5ldC9pcHY0L3Byb2MuYzo1NjpcdG9ycGhhbnMgPSB0Y3Bfb3JwaGFuX2NvdW50X3N1bSgpO1xubmV0L2lwdjQvcHJvYy5jLTU3LVx0c29ja2V0cyA9IHByb3RvX3NvY2tldHNfYWxsb2NhdGVkX3N1bV9wb3NpdGl2ZShcdTAwMjZ0Y3BfcHJvdCk7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTQ2PXN0YXRpYyB1MzIgY29va2llX2hhc2goX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01Ni0gKiB3aGVuIHN5bmNvb2tpZXMgYXJlIGluIGVmZmVjdCBhbmQgdGNwIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQgd2UgZW5jb2RlXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NTc6ICogdGNwIG9wdGlvbnMgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlIHRpbWVzdGFtcCB2YWx1ZSB0aGF0IHdpbGwgYmVcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01OC0gKiBzZW50IGluIHRoZSBzeW4tYWNrLlxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMjgtICogd2hlbiBzeW5jb29raWVzIGFyZSBpbiBlZmZlY3QgYW5kIHRjcCB0aW1lc3RhbXBzIGFyZSBlbmFibGVkIHdlIHN0b3JlZFxubmV0L2lwdjQvc3luY29va2llcy5jOjIyOTogKiBhZGRpdGlvbmFsIHRjcCBvcHRpb25zIGluIHRoZSB0aW1lc3RhbXAuXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjMwLSAqIFRoaXMgZXh0cmFjdHMgdGhlc2Ugb3B0aW9ucyBmcm9tIHRoZSB0aW1lc3RhbXAgZWNoby5cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMzEtICpcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMzI6ICogcmV0dXJuIGZhbHNlIGlmIHdlIGRlY29kZSBhIHRjcCBvcHRpb24gdGhhdCBpcyBkaXNhYmxlZFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzMy0gKiBvbiB0aGUgaG9zdC5cbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjM1PWJvb2wgY29va2llX3RpbWVzdGFtcF9kZWNvZGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjQvc3luY29va2llcy5jOjIzNjpcdFx0XHQgICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdClcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMzcte1xubmV0L2lwdjQvc3luY29va2llcy5jLTIzOC1cdC8qIGVjaG9lZCB0aW1lc3RhbXAsIGxvd2VzdCBiaXRzIGNvbnRhaW4gb3B0aW9ucyAqL1xubmV0L2lwdjQvc3luY29va2llcy5jOjIzOTpcdHUzMiBvcHRpb25zID0gdGNwX29wdC1cdTAwM2VyY3ZfdHNlY3I7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQwLVxubmV0L2lwdjQvc3luY29va2llcy5jOjI0MTpcdGlmICghdGNwX29wdC1cdTAwM2VzYXdfdHN0YW1wKSAge1xubmV0L2lwdjQvc3luY29va2llcy5jOjI0MjpcdFx0dGNwX2NsZWFyX29wdGlvbnModGNwX29wdCk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQ4LVxubmV0L2lwdjQvc3luY29va2llcy5jOjI0OTpcdHRjcF9vcHQtXHUwMDNlc2Fja19vayA9IChvcHRpb25zIFx1MDAyNiBUU19PUFRfU0FDSykgPyBUQ1BfU0FDS19TRUVOIDogMDtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTAtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjUxOlx0aWYgKHRjcF9vcHQtXHUwMDNlc2Fja19vayBcdTAwMjZcdTAwMjYgIVJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3NhY2spKVxubmV0L2lwdjQvc3luY29va2llcy5jLTI1Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTYtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjU3Olx0dGNwX29wdC1cdTAwM2V3c2NhbGVfb2sgPSAxO1xubmV0L2lwdjQvc3luY29va2llcy5jOjI1ODpcdHRjcF9vcHQtXHUwMDNlc25kX3dzY2FsZSA9IG9wdGlvbnMgXHUwMDI2IFRTX09QVF9XU0NBTEVfTUFTSztcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTktXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTMxOD1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvc3luY29va2llcy5jOjMyMDpcdFx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdCxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMjEtXHRcdFx0XHRcdCAgICBpbnQgbXNzLCB1MzIgdHNvZmYpXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM0My1cdHJlcS1cdTAwM2Vtc3MgPSBtc3M7XG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzQ0Olx0cmVxLVx1MDAzZXRzX3JlY2VudCA9IHRjcF9vcHQtXHUwMDNlc2F3X3RzdGFtcCA/IHRjcF9vcHQtXHUwMDNlcmN2X3RzdmFsIDogMDtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNDUtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzQ2Olx0aXJlcS1cdTAwM2VzbmRfd3NjYWxlID0gdGNwX29wdC1cdTAwM2VzbmRfd3NjYWxlO1xubmV0L2lwdjQvc3luY29va2llcy5jOjM0NzpcdGlyZXEtXHUwMDNldHN0YW1wX29rID0gdGNwX29wdC1cdTAwM2VzYXdfdHN0YW1wO1xubmV0L2lwdjQvc3luY29va2llcy5jOjM0ODpcdGlyZXEtXHUwMDNlc2Fja19vayA9IHRjcF9vcHQtXHUwMDNlc2Fja19vaztcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDk6XHRpcmVxLVx1MDAzZXdzY2FsZV9vayA9IHRjcF9vcHQtXHUwMDNld3NjYWxlX29rO1xubmV0L2lwdjQvc3luY29va2llcy5jOjM1MDpcdGlyZXEtXHUwMDNlZWNuX29rID0gISEodGNwX29wdC1cdTAwM2VyY3ZfdHNlY3IgXHUwMDI2IFRTX09QVF9FQ04pO1xubmV0L2lwdjQvc3luY29va2llcy5jLTM1MS1cbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MzU4PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNjAte1xubmV0L2lwdjQvc3luY29va2llcy5jOjM2MTpcdHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCB0Y3Bfb3B0O1xubmV0L2lwdjQvc3luY29va2llcy5jLTM2Mi1cdHUzMiB0c29mZiA9IDA7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM3Ni1cdC8qIGNoZWNrIGZvciB0aW1lc3RhbXAgY29va2llIHN1cHBvcnQgKi9cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNzc6XHRtZW1zZXQoXHUwMDI2dGNwX29wdCwgMCwgc2l6ZW9mKHRjcF9vcHQpKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNzg6XHR0Y3BfcGFyc2Vfb3B0aW9ucyhuZXQsIHNrYiwgXHUwMDI2dGNwX29wdCwgMCwgTlVMTCk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzc5LVxubmV0L2lwdjQvc3luY29va2llcy5jOjM4MDpcdGlmICh0Y3Bfb3B0LnNhd190c3RhbXAgXHUwMDI2XHUwMDI2IHRjcF9vcHQucmN2X3RzZWNyKSB7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzgxLVx0XHR1bmlvbiB0Y3Bfc2VxX2FuZF90c19vZmYgc3Q7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM4OC1cdFx0dHNvZmYgPSBzdC50c19vZmY7XG5uZXQvaXB2NC9zeW5jb29raWVzLmM6Mzg5Olx0XHR0Y3Bfb3B0LnJjdl90c2VjciAtPSB0c29mZjtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTAtXHR9XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzkxLVxubmV0L2lwdjQvc3luY29va2llcy5jOjM5MjpcdGlmICghY29va2llX3RpbWVzdGFtcF9kZWNvZGUobmV0LCBcdTAwMjZ0Y3Bfb3B0KSlcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTMtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTUtXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTY6XHRcdFx0XHQgICAgICBcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTctb3V0OlxuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTEwODAtXHR7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMDgxOlx0XHQucHJvY25hbWVcdD0gXCYjMzQ7dGNwX29ycGhhbl9yZXRyaWVzXCYjMzQ7LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTA4MjpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnN5c2N0bF90Y3Bfb3JwaGFuX3JldHJpZXMsXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMDgzLVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHU4KSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zNy0gKlx0XHRcdFx0XHR1bmtub3duIHNvY2tldHMuXG5uZXQvaXB2NC90Y3AuYzozODogKlx0XHRBbGFuIENveFx0Olx0dGNwIG9wdGlvbiBwcm9jZXNzaW5nLlxubmV0L2lwdjQvdGNwLmMtMzktICpcdFx0QWxhbiBDb3hcdDpcdFJlc2V0IHR3ZWFrZWQgKHN0aWxsIG5vdCAxMDAlKSBbSGFkXG4tLVxubmV0L2lwdjQvdGNwLmM9Mjk0PWVudW0ge1xuLS1cbm5ldC9pcHY0L3RjcC5jLTI5OC1cbm5ldC9pcHY0L3RjcC5jOjI5OTpERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHRjcF9vcnBoYW5fY291bnQpO1xubmV0L2lwdjQvdGNwLmMtMzAwLVxuLS1cbm5ldC9pcHY0L3RjcC5jPTMwOTk9dm9pZCB0Y3Bfc2h1dGRvd24oc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93KVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMxMTctXG5uZXQvaXB2NC90Y3AuYzozMTE4OmludCB0Y3Bfb3JwaGFuX2NvdW50X3N1bSh2b2lkKVxubmV0L2lwdjQvdGNwLmMtMzExOS17XG4tLVxubmV0L2lwdjQvdGNwLmMtMzEyMi1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxubmV0L2lwdjQvdGNwLmM6MzEyMzpcdFx0dG90YWwgJiM0Mzs9IHBlcl9jcHUodGNwX29ycGhhbl9jb3VudCwgaSk7XG5uZXQvaXB2NC90Y3AuYy0zMTI0LVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMxMjctXG5uZXQvaXB2NC90Y3AuYzozMTI4OnN0YXRpYyBpbnQgdGNwX29ycGhhbl9jYWNoZTtcbm5ldC9pcHY0L3RjcC5jOjMxMjk6c3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHRjcF9vcnBoYW5fdGltZXI7XG5uZXQvaXB2NC90Y3AuYy0zMTMwLSNkZWZpbmUgVENQX09SUEhBTl9USU1FUl9QRVJJT0QgbXNlY3NfdG9famlmZmllcygxMDApXG5uZXQvaXB2NC90Y3AuYy0zMTMxLVxubmV0L2lwdjQvdGNwLmM6MzEzMjpzdGF0aWMgdm9pZCB0Y3Bfb3JwaGFuX3VwZGF0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxubmV0L2lwdjQvdGNwLmMtMzEzMy17XG5uZXQvaXB2NC90Y3AuYzozMTM0Olx0V1JJVEVfT05DRSh0Y3Bfb3JwaGFuX2NhY2hlLCB0Y3Bfb3JwaGFuX2NvdW50X3N1bSgpKTtcbm5ldC9pcHY0L3RjcC5jOjMxMzU6XHRtb2RfdGltZXIoXHUwMDI2dGNwX29ycGhhbl90aW1lciwgamlmZmllcyAmIzQzOyBUQ1BfT1JQSEFOX1RJTUVSX1BFUklPRCk7XG5uZXQvaXB2NC90Y3AuYy0zMTM2LX1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zMTM4PXN0YXRpYyBib29sIHRjcF90b29fbWFueV9vcnBoYW5zKGludCBzaGlmdClcbm5ldC9pcHY0L3RjcC5jLTMxMzkte1xubmV0L2lwdjQvdGNwLmM6MzE0MDpcdHJldHVybiBSRUFEX09OQ0UodGNwX29ycGhhbl9jYWNoZSkgXHUwMDNjXHUwMDNjIHNoaWZ0IFx1MDAzZVxubmV0L2lwdjQvdGNwLmMtMzE0MS1cdFx0UkVBRF9PTkNFKHN5c2N0bF90Y3BfbWF4X29ycGhhbnMpO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTMxNDMtXG5uZXQvaXB2NC90Y3AuYzozMTQ0OnN0YXRpYyBib29sIHRjcF9vdXRfb2ZfbWVtb3J5KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcC5jLTMxNDUte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTMxNTI9Ym9vbCB0Y3BfY2hlY2tfb29tKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHNoaWZ0KVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMxNTYtXHR0b29fbWFueV9vcnBoYW5zID0gdGNwX3Rvb19tYW55X29ycGhhbnMoc2hpZnQpO1xubmV0L2lwdjQvdGNwLmM6MzE1NzpcdG91dF9vZl9zb2NrZXRfbWVtb3J5ID0gdGNwX291dF9vZl9tZW1vcnkoc2spO1xubmV0L2lwdjQvdGNwLmMtMzE1OC1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zMTY2PXZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L2lwdjQvdGNwLmMtMzI2NC1cbm5ldC9pcHY0L3RjcC5jOjMyNjU6XHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xubmV0L2lwdjQvdGNwLmMtMzI2Ni1cbi0tXG5uZXQvaXB2NC90Y3AuYz00MzkzPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9nZXRfaW5mbyk7XG5uZXQvaXB2NC90Y3AuYy00Mzk0LVxubmV0L2lwdjQvdGNwLmM6NDM5NTpzdGF0aWMgc2l6ZV90IHRjcF9vcHRfc3RhdHNfZ2V0X3NpemUodm9pZClcbm5ldC9pcHY0L3RjcC5jLTQzOTYte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtNDQ0OC1cbm5ldC9pcHY0L3RjcC5jOjQ0NDk6XHRzdGF0cyA9IGFsbG9jX3NrYih0Y3Bfb3B0X3N0YXRzX2dldF9zaXplKCksIEdGUF9BVE9NSUMpO1xubmV0L2lwdjQvdGNwLmMtNDQ1MC1cdGlmICghc3RhdHMpXG4tLVxubmV0L2lwdjQvdGNwLmM9NTMxMz12b2lkIF9faW5pdCB0Y3BfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTUzMjYtXG5uZXQvaXB2NC90Y3AuYzo1MzI3Olx0dGltZXJfc2V0dXAoXHUwMDI2dGNwX29ycGhhbl90aW1lciwgdGNwX29ycGhhbl91cGRhdGUsIFRJTUVSX0RFRkVSUkFCTEUpO1xubmV0L2lwdjQvdGNwLmM6NTMyODpcdG1vZF90aW1lcihcdTAwMjZ0Y3Bfb3JwaGFuX3RpbWVyLCBqaWZmaWVzICYjNDM7IFRDUF9PUlBIQU5fVElNRVJfUEVSSU9EKTtcbm5ldC9pcHY0L3RjcC5jLTUzMjktXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTM4ND1zdGF0aWMgaW50IHRjcF9hb19wYXJzZV9jcnlwdG8oY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmNtZCxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMzg2LXtcbm5ldC9pcHY0L3RjcF9hby5jOjEzODc6XHR1bnNpZ25lZCBpbnQgc3luX3RjcF9vcHRpb25fc3BhY2U7XG5uZXQvaXB2NC90Y3BfYW8uYy0xMzg4LVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE0MTgtXHQgKi9cbm5ldC9pcHY0L3RjcF9hby5jOjE0MTk6XHRzeW5fdGNwX29wdGlvbl9zcGFjZSA9IE1BWF9UQ1BfT1BUSU9OX1NQQUNFO1xubmV0L2lwdjQvdGNwX2FvLmM6MTQyMDpcdHN5bl90Y3Bfb3B0aW9uX3NwYWNlIC09IFRDUE9MRU5fTVNTX0FMSUdORUQ7XG5uZXQvaXB2NC90Y3BfYW8uYzoxNDIxOlx0c3luX3RjcF9vcHRpb25fc3BhY2UgLT0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDtcbm5ldC9pcHY0L3RjcF9hby5jOjE0MjI6XHRzeW5fdGNwX29wdGlvbl9zcGFjZSAtPSBUQ1BPTEVOX1dTQ0FMRV9BTElHTkVEO1xubmV0L2lwdjQvdGNwX2FvLmM6MTQyMzpcdGlmICh0Y3BfYW9fbGVuX2FsaWduZWQoa2V5KSBcdTAwM2Ugc3luX3RjcF9vcHRpb25fc3BhY2UpXG5uZXQvaXB2NC90Y3BfYW8uYy0xNDI0LVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM5NTE9c3RhdGljIGludCB0Y3BfYWNrX3VwZGF0ZV93aW5kb3coc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYWNrLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM5ODgtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozOTg5OnN0YXRpYyBib29sIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgbWliX2lkeCxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM5OTAtXHRcdFx0XHQgICB1MzIgKmxhc3Rfb293X2Fja190aW1lKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMTktICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDIwOmJvb2wgdGNwX29vd19yYXRlX2xpbWl0ZWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDAyMS1cdFx0XHQgIGludCBtaWJfaWR4LCB1MzIgKmxhc3Rfb293X2Fja190aW1lKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMjctXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDI4Olx0cmV0dXJuIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQobmV0LCBtaWJfaWR4LCBsYXN0X29vd19hY2tfdGltZSk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDI5LX1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDY5PXN0YXRpYyB2b2lkIHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBib29sIGFjY2Vjbl9yZWZsZWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA3NC1cdC8qIEZpcnN0IGNoZWNrIG91ciBwZXItc29ja2V0IGR1cGFjayByYXRlIGxpbWl0LiAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA3NTpcdGlmIChfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKG5ldCxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNzYtXHRcdFx0XHQgICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRENIQUxMRU5HRSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDg3LS8qIFNlbmQgYSBjaGFsbGVuZ2UgQUNLIGZyb20gYSBTWU4tUkVDRUlWRUQgcmVxdWVzdCBzb2NrZXQuIFVzZXNcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwODg6ICogX190Y3Bfb293X3JhdGVfbGltaXRlZCgpIGRpcmVjdGx5IHNvIHRoYXQgYW4gUlNUIGNhcnJ5aW5nIHBheWxvYWRcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwODktICogY2Fubm90IGJ5cGFzcyB0aGUgcGVyLXJlcXVlc3QgcmF0ZSBsaW1pdC5cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDkxPXZvaWQgdGNwX3JlcXNrX3NlbmRfY2hhbGxlbmdlX2FjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5NS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwOTY6XHRpZiAoX190Y3Bfb293X3JhdGVfbGltaXRlZChuZXQsIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEQ0hBTExFTkdFLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5Ny1cdFx0XHRcdCAgIFx1MDAyNnRjcF9yc2socmVxKS1cdTAwM2VsYXN0X29vd19hY2tfdGltZSkpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDUwMD1zdGF0aWMgYm9vbCBzbWNfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ1MDE6XHRcdFx0ICAgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpvcHRfcngsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00NTAyLVx0XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cixcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00NTIxPXUxNiB0Y3BfcGFyc2VfbXNzX29wdGlvbihjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgdTE2IHVzZXJfbXNzKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ1NjAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0NTYxOi8qIExvb2sgZm9yIHRjcCBvcHRpb25zLiBOb3JtYWxseSBvbmx5IGNhbGxlZCBvbiBTWU4gYW5kIFNZTkFDSyBwYWNrZXRzLlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2Mi0gKiBCdXQsIHRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIG9uIHBhY2tldHMgaW4gdGhlIGVzdGFibGlzaGVkIGZsb3cgd2hlblxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ1NjU9dm9pZCB0Y3BfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00NTY2LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ1Njc6XHRcdCAgICAgICBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm9wdF9yeCwgaW50IGVzdGFiLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2OC1cdFx0ICAgICAgIHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29va2llICpmb2MpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI0ND1zdGF0aWMgYm9vbCB0Y3BfdHJ5X2NvYWxlc2NlKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Mjc4LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTI3OTpzdGF0aWMgYm9vbCB0Y3Bfb29vX3RyeV9jb2FsZXNjZShzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01MjgwLVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnRvLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTUyOTc9dGNwX2Ryb3BfcmVhc29uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzMDUtICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1MzA2OnN0YXRpYyB2b2lkIHRjcF9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTMwNy17XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTM4MT1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0MjUtXHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU0MjY6XHRpZiAodGNwX29vb190cnlfY29hbGVzY2Uoc2ssIHRwLVx1MDAzZW9vb19sYXN0X3NrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0MjctXHRcdFx0XHQgc2tiLCBcdTAwMjZmcmFnc3RvbGVuKSkge1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0ODItXHRcdFx0fVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTQ4MzpcdFx0fSBlbHNlIGlmICh0Y3Bfb29vX3RyeV9jb2FsZXNjZShzaywgc2tiMSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0ODQtXHRcdFx0XHRcdFx0c2tiLCBcdTAwMjZmcmFnc3RvbGVuKSkge1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzYtXHRcdGlmICghUkJfRU1QVFlfUk9PVChcdTAwMjZ0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Njc3Olx0XHRcdHRjcF9vZm9fcXVldWUoc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNTY3OC1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzIyPXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM1MS1cdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQpO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjM1MjpcdGlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzUzLVx0XHRcdFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFBBV1MsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM3Ni1cdFx0XHRcdFx0ICAgICAgTElOVVhfTUlCX0JFWU9ORF9XSU5ET1cpO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjM3NzpcdFx0XHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM3OC1cdFx0XHRcdFx0XHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU0VRLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY3NjQ9c3RhdGljIGJvb2wgdGNwX3Jjdl9mYXN0b3Blbl9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc3luYWNrLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3NzItXHRpZiAobXNzID09IFJFQURfT05DRSh0cC1cdTAwM2VyeF9vcHQudXNlcl9tc3MpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NzczOlx0XHRzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgb3B0O1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNjc3NC1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODgtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDg5OnN0YXRpYyB2b2lkIHRjcF9vcGVucmVxX2luaXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ5MDpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ5MS1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MjUtXHR1MzIgaXNuID0gVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF90d19pc247XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjI2Olx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjI3LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4Ni1cdHRtcF9vcHQudHN0YW1wX29rID0gdG1wX29wdC5zYXdfdHN0YW1wO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzY4NzpcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcdTAwMjZ0bXBfb3B0LCBza2IsIHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2ODgtXHRpbmV0X3JzayhyZXEpLVx1MDAzZW5vX3NyY2NoZWNrID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NTktXHR0Y3BfcnNrKHJlcSktXHUwMDNlc3luX3RvcyA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcdHRjcF9vcGVucmVxX2luaXRfcndpbihyZXEsIHNrLCBkc3QpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc2MS1cdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTEzLSAqXHRcdGxpbnV4L2lwdjQvdGNwX2lucHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTQ6ICpcdFx0bGludXgvaXB2NC90Y3Bfb3V0cHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTUtICpcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTM0Mzg9c3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NjAtXHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3JldHJpZXMyID0gVENQX1JFVFIyO1xubmV0L2lwdjQvdGNwX2lwdjQuYzozNDYxOlx0bmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllcyA9IDA7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NjItXHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Zpbl90aW1lb3V0ID0gVENQX0ZJTl9USU1FT1VUO1xuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz0zOT10Y3BfdGltZXdhaXRfY2hlY2tfb293X3JhdGVfbGltaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ0Olx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZCh0d3NrX25ldCh0dyksIHNrYiwgbWliX2lkeCxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NS1cdFx0XHRcdCAgXHUwMDI2dGNwdHctXHUwMDNldHdfbGFzdF9vb3dfYWNrX3RpbWUpKSB7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTEwMT10Y3BfdGltZXdhaXRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTA2LVx0dTMyIHJjdl9ueHQgPSBSRUFEX09OQ0UodGNwdHctXHUwMDNldHdfcmN2X254dCk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6MTA3Olx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTA4LVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcHNwX2Ryb3A7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQxMj12b2lkIHRjcF90d3NrX3B1cmdlKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9leGl0X2xpc3QpXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo0MzE6dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMi1cdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY5MS17XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjkyOlx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNjkzLVx0c3RydWN0IHNvY2sgKmNoaWxkO1xuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTAtXHRcdCAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc1MTpcdFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYixcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTItXHRcdFx0XHRcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTWU5SRUNWLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy04NTAtXHRcdGlmICghKGZsZyBcdTAwMjYgVENQX0ZMQUdfUlNUKSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo4NTE6XHRcdCAgICAhdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODUyLVx0XHRcdFx0XHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU1lOUkVDVixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDExPXN0YXRpYyB2b2lkIHNtY19vcHRpb25zX3dyaXRlKF9fYmUzMiAqcHRyLCB1MTYgKm9wdGlvbnMpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyNS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjY6c3RydWN0IHRjcF9vdXRfb3B0aW9ucyB7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI3LVx0LyogRm9sbG93aW5nIGdyb3VwIGlzIGNsZWFyZWQgaW4gX190Y3BfdHJhbnNtaXRfc2tiKCkgKi9cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQxLVx0c3RydWN0IHRjcF9mYXN0b3Blbl9jb29raWUgKmZhc3RvcGVuX2Nvb2tpZTtcdC8qIEZhc3Qgb3BlbiBjb29raWUgKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDI6XHRzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgbXB0Y3A7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQzLX07XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ0LVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0NTpzdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDYtXHRcdFx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0NzpcdFx0XHRcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ4LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDY5PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDcyLVx0XHRcdFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ3MzpcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ3NC1cdFx0XHRcdCB1MzIgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01MzM9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01MzYtXHRcdFx0XHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTM3Olx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTM4LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTc4PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTgxLVx0XHRcdFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU4MjpcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU4My1cdFx0XHRcdCB1MzIgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01ODg9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTEtXHRcdFx0XHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTkyOlx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTkzLXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTk3PXN0YXRpYyBfX2JlMzIgKnByb2Nlc3NfdGNwX2FvX29wdGlvbnMoc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdGNwcnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU5OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNjAwLVx0XHRcdFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSwgX19iZTMyICpwdHIpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTYzOD1zdGF0aWMgY29uc3QgdTMyIHN5bmFja19lY25fYnl0ZXNbM10gPSB7IDAsIDAsIDAgfTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNjUyLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjY1MzpzdGF0aWMgdm9pZCB0Y3Bfb3B0aW9uc193cml0ZShzdHJ1Y3QgdGNwaGRyICp0aCwgc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTQtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcHJzayxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo2NTU6XHRcdFx0ICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTYtXHRcdFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSlcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODI3LVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjgyODpcdG1wdGNwX29wdGlvbnNfd3JpdGUodGgsIHB0ciwgdHAsIG9wdHMpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTgyOS19XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTgzMT1zdGF0aWMgdm9pZCBzbWNfc2V0X29wdGlvbihzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjgzMjpcdFx0XHQgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTgzMy1cdFx0XHQgICB1bnNpZ25lZCBpbnQgKnJlbWFpbmluZylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODQ4PXN0YXRpYyB2b2lkIHNtY19zZXRfb3B0aW9uX2NvbmQoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NDktXHRcdFx0XHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODUwOlx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NTEtXHRcdFx0XHR1bnNpZ25lZCBpbnQgKnJlbWFpbmluZylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODY2PXN0YXRpYyB2b2lkIG1wdGNwX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODY3Olx0XHRcdFx0ICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg2OC1cdFx0XHRcdCAgdW5zaWduZWQgaW50ICpyZW1haW5pbmcpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05MDItICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTAzOnN0YXRpYyBpbnQgdGNwX29wdGlvbnNfZml0X2FjY2VjbihzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLCBpbnQgcmVxdWlyZWQsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTA0LVx0XHRcdFx0ICBpbnQgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjk2MDpcdFx0XHRcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTYxLVx0XHRcdFx0c3RydWN0IHRjcF9rZXkgKmtleSlcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA1MC1cdFx0b3B0cy1cdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTA1MTpcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDUyLVx0fVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2My1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbXNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjQ6XHRcdFx0XHQgICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDY1LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0Y3Bfa2V5ICprZXksXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExMzgtXHRcdG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMgPSAxO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjExMzk6XHRcdHJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE0MC1cdH1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTE1MT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTUyOlx0XHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTMtXHRcdFx0XHRcdHN0cnVjdCB0Y3Bfa2V5ICprZXkpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEyMzEtXHRcdFx0b3B0cy1cdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDA7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTIzMjpcdFx0XHRzaXplICYjNDM7PSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIHRwLVx1MDAzZWFjY2Vjbl9taW5sZW4sXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTIzMy1cdFx0XHRcdFx0XHQgICAgICAgTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1NDItXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1NDM6XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU0NDpcdHVuc2lnbmVkIGludCB0Y3Bfb3B0aW9uc19zaXplLCB0Y3BfaGVhZGVyX3NpemU7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU0NS1cdHN0cnVjdCBza19idWZmICpvc2tiID0gTlVMTDtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cdGlmICh1bmxpa2VseSh0Y2ItXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlx0XHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTkzLVx0fVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1OTQ6XHR0Y3BfaGVhZGVyX3NpemUgPSB0Y3Bfb3B0aW9uc19zaXplICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTk1LVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNjYyLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE2NjM6XHR0Y3Bfb3B0aW9uc193cml0ZSh0aCwgdHAsIE5VTEwsIFx1MDAyNm9wdHMsIFx1MDAyNmtleSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTY2NC1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTk5Nj1zdGF0aWMgaW5saW5lIGludCBfX3RjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDYtXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjAwNzpcdC8qIENsYW1wIGl0IChtc3NfY2xhbXAgZG9lcyBub3QgaW5jbHVkZSB0Y3Agb3B0aW9ucykgKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDA4LVx0aWYgKG1zc19ub3cgXHUwMDNlIHRwLVx1MDAzZXJ4X29wdC5tc3NfY2xhbXApXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIwNDI9dm9pZCB0Y3BfbXR1cF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA2OC0gICB0cC1cdTAwM2Vtc3NfY2FjaGUgaXMgY3VycmVudCBlZmZlY3RpdmUgc2VuZGluZyBtc3MsIGluY2x1ZGluZ1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwNjk6ICAgYWxsIHRjcCBvcHRpb25zIGV4Y2VwdCBmb3IgU0FDS3MuIEl0IGlzIGV2YWx1YXRlZCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDcwLSAgIHRha2luZyBpbnRvIGFjY291bnQgY3VycmVudCBwbXR1LCBidXQgbmV2ZXIgZXhjZWVkc1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBJbnNwZWN0aW9uOiBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzIHNpdHVhdGlvbiwgbXkgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzY2FuIG9mIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2NC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYSBmZXcga2V5IHN5bWJvbHM6IGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoZXNlIGZsYWdzIGFyZSB1c3VhbGx5IHRoZSBseW5jaHBpbnMgaW4gdW5kZXJzdGFuZGluZyBhIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIG1lbW9yeSBiZWhhdmlvci4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG5ldC9LY29uZmlnYCwgYW5kIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBsaW5lcyA2NS04MCBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIHNjcnV0aW5pemUgdGhhdCByZWdpb24gY2FyZWZ1bGx5LiBUaGlzIGluaXRpYWwgYW5hbHlzaXMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBjaG9pY2VzIHJlbGF0ZWQgdG8gdGhlc2UgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0Y29uZmlnIE5FVF9SRURJUkVDVFxuICA2MTpcdFx0Ym9vbFxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBTS0JfREVDUllQVEVEXG4gIDY0Olx0XHRib29sXG4gIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4gIDY3Olx0XHRib29sXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIE5FVF9ERVZNRU1cbiAgNzA6XHRcdGRlZl9ib29sIHlcbiAgNzE6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuICA3MjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA3MzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgTkVUX1NIQVBFUlxuICA3NjpcdFx0Ym9vbFxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBORVRfQ1JDMzJDXG4gIDc5Olx0XHRib29sXG4gIDgwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgODE6XHRcbiAgODI6XHRtZW51IFwmIzM0O05ldHdvcmtpbmcgb3B0aW9uc1wmIzM0O1xuICA4MzpcdFxuICA4NDpcdHNvdXJjZSBcJiMzNDtuZXQvcGFja2V0L0tjb25maWdcJiMzNDtcbiAgODU6XHRzb3VyY2UgXCYjMzQ7bmV0L3BzcC9LY29uZmlnXCYjMzQ7XG4gIDg2Olx0c291cmNlIFwmIzM0O25ldC91bml4L0tjb25maWdcJiMzNDtcbiAgODc6XHRzb3VyY2UgXCYjMzQ7bmV0L3Rscy9LY29uZmlnXCYjMzQ7XG4gIDg4Olx0c291cmNlIFwmIzM0O25ldC94ZnJtL0tjb25maWdcJiMzNDtcbiAgODk6XHRzb3VyY2UgXCYjMzQ7bmV0L2l1Y3YvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA0OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgQ09ORklHX05FVF9ERVZNRU1gIGZpdHMgaW4uIEl0JiMzOTtzIGRlZmluZWQgYXMgYSAmIzM0O3kmIzM0OyB3aGljaCBtZWFucyBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzOiBpdCBoaW5nZXMgb24gYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQmIzM5O3MgdGhlIGtleS4KCk5vdywgSSBrbm93IHRoYXQgYENPTkZJR19JTkVUYCBjb21waWxlcyBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgbmV0d29yayBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgdGNwLmNgIGlzIGluZGVlZCBjb21waWxlZCBjb25kaXRpb25hbGx5IG9uIGBDT05GSUdfSU5FVGAsIGp1c3QgdG8gYmUgY2VydGFpbiDigJMgeWVwLCBgbmV0L2lwdjRgIGZhbGxzIHVuZGVyIGBDT05GSUdfSU5FVGAsIGFzIGV4cGVjdGVkLiBTbyBmYXIsIHNvIGdvb2QuCgpOb3csIHJlZ2FyZGluZyBgTkVUX0RFVk1FTWAsIGl0IG5lZWRzIHRob3NlIHR3byBlbmFibGVycyBvZiBgUEFHRV9QT09MYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCwgb3IgYWx0ZXJuYXRpdmVseSBgVURNQUJVRmAsIG9yIGFub3RoZXIgYERNQV9TSEFSRURfQlVGRkVSYCBvcHRpb24uIFRoaXMgaXMgY3JpdGljYWwuIFRvIHVuZGVyc3RhbmQgaG93IHRoYXQgd29ya3MsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBgUEFHRV9QT09MYCwgYW5kIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCBpdCBpbiBgbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGBuZXQvY29yZS9LY29uZmlnYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aG9zZSBmaWxlcyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYwMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgSVB2NCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIHplcm8gaW4gb24gYGNvbmZpZyBJTkVUYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIElQdjQgbmV0d29ya2luZyBzdGFjayBpcyBjb25maWd1cmVkIGluIHRoaXMgY29udGV4dC4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IGJ1aWxkIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYWxsIHRoaW5ncyBJUHY0IHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBgY29uZmlnIElORVRgIHN5bWJvbCB3aWxsIGxpa2VseSBiZSBhIHRvcC1sZXZlbCBzd2l0Y2ggb3IgYSBwaXZvdGFsIGNvbXBvbmVudCBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBlbnRpcmUgSVB2NCBzdWJzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkgYW0gaG9waW5nIHRoZSBmaWxlIGlzIHVwLXRvLWRhdGUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhbGwgY2xlYW5seSB3cml0dGVuLiBLbm93aW5nIHRoaXMsIEkgY2FuIGZpZ3VyZSBvdXQgaG93IHRoZSBzcGVjaWZpYyBJUHY0IGZlYXR1cmVzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgY29udHJvbGxlZCBvciwgaW5kZWVkLCBkaXNhYmxlZC4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byB0cmFjZSB0aGUgY29uZmlndXJhdGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIElQdjQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaG93IGl0IGludGVycmVsYXRlcyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERNQSBCdWZmZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb25zIHdvcmsgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGNvbmZpZyBVRE1BQlVGYCBhbmQgYW55IG90aGVyIHNpbWlsYXIgZG1hYnVmIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGJvb2xlYW4gaW4gYGRyaXZlcnMvYmFzZS9LY29uZmlnYCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZSBsZXZlbCBkZXBlbmRlbmN5LiBJIGFsc28gcmVjYWxsIGBVRE1BQlVGYCBoaW5nZXMgb24gYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgTUVNRkRfQ1JFQVRFYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYE5FVF9ERVZNRU1gIGFsc28gdGllcyBpbnRvIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBhZGRzIGBQQUdFX1BPT0xgIHRvIHRoZSBtaXguCgpOb3csIEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXTigJlzIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgTkVUX0RFVk1FTWAgaXMgZW5hYmxlZCwgb3IgaWYgaXQmIzM5O3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX05FVF9ERVZNRU1gIGJsb2NrLiBPciBpZiwgcG90ZW50aWFsbHksIGl0IGp1c3QgKnVzZXMqIGBDT05GSUdfTkVUX0RFVk1FTWAgaW50ZXJuYWxseS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2NC90Y3AuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGFyb3VuZCB0aGUgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpbmNsdWRlZC4gSSBuZWVkIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NDA6XHRcdG5ldG1lbV9yZWZcdG5ldG1lbXNbTUFYX1NLQl9GUkFHU107XG4yNDQxOlx0fTtcbjI0NDI6XHRcbjI0NDM6XHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxuMjQ0NDpcdHtcbjI0NDU6XHRcdGludCBpO1xuMjQ0NjpcdFxuMjQ0NzpcdFx0LyogQ29tbWl0IHBhcnQgdGhhdCBoYXMgYmVlbiBjb3BpZWQgdG8gdXNlciBzcGFjZS4gKi9cbjI0NDg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHAtXHUwMDNlaWR4OyBpJiM0MzsmIzQzOylcbjI0NDk6XHRcdFx0X194YV9jbXB4Y2hnKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXHUwMDNldG9rZW5zW2ldLCBYQV9aRVJPX0VOVFJZLFxuMjQ1MDpcdFx0XHRcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXHUwMDNlbmV0bWVtc1tpXSwgR0ZQX0tFUk5FTCk7XG4yNDUxOlx0XHQvKiBSb2xsYmFjayB3aGF0IGhhcyBiZWVuIHByZS1hbGxvY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuICovXG4yNDUyOlx0XHRmb3IgKDsgaSBcdTAwM2MgcC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KVxuMjQ1MzpcdFx0XHRfX3hhX2VyYXNlKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXHUwMDNldG9rZW5zW2ldKTtcbjI0NTQ6XHRcbjI0NTU6XHRcdHAtXHUwMDNlbWF4ID0gMDtcbjI0NTY6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0NTc6XHR9XG4yNDU4Olx0XG4yNDU5Olx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxuMjQ2MDpcdHtcbjI0NjE6XHRcdGlmICghcC1cdTAwM2VtYXgpXG4yNDYyOlx0XHRcdHJldHVybjtcbjI0NjM6XHRcbjI0NjQ6XHRcdHhhX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncyk7XG4yNDY1Olx0XG4yNDY2Olx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0Njc6XHRcbjI0Njg6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0Njk6XHR9XG4yNDcwOlx0XG4yNDcxOlx0c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXG4yNDcyOlx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG1heF9mcmFncylcbjI0NzM6XHR7XG4yNDc0Olx0XHRpbnQgZXJyLCBrO1xuMjQ3NTpcdFxuMjQ3NjpcdFx0aWYgKHAtXHUwMDNlaWR4IFx1MDAzYyBwLVx1MDAzZW1heClcbjI0Nzc6XHRcdFx0cmV0dXJuIDA7XG4yNDc4Olx0XG4yNDc5Olx0XHR4YV9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ4MDpcdFxuMjQ4MTpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XG4yNDgyOlx0XG4yNDgzOlx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBtYXhfZnJhZ3M7IGsmIzQzOyYjNDM7KSB7XG4yNDg0Olx0XHRcdGVyciA9IF9feGFfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgXHUwMDI2cC1cdTAwM2V0b2tlbnNba10sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTg3CgkJCQkJCQlvdXRwdXQ6IDE3NQoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFRDUCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgY29kZSBjaGFuZ2UgYXMgSSB1bmRlcnN0YW5kIGl0LiBXaGVuIHRoZSBrZXJuZWwgaGFzIElQdjQgbmV0d29ya2luZyAoYENPTkZJR19JTkVUYCkgYW5kIHRoZSBkZXZtZW0gc3Vic3lzdGVtIGVuYWJsZWQgdmlhIGBDT05GSUdfTkVUX0RFVk1FTWAsIGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYENPTkZJR19QQUdFX1BPT0xgLCB0aGUgZnVuY3Rpb25zIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCwgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGFyZSBhbGwgY29tcGlsZWQgaW50byBgbmV0L2lwdjQvdGNwLmNgLiBUaGlzIGlzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgZGV2bWVtL2RtYWJ1ZiBmZWF0dXJlcy4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCB0byBwcmVjaXNlbHkgY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIHRoYXQgY2FuIGJlIGRlbGl2ZXJlZCwgc3RhcnRpbmcgZnJvbSBhIGdpdmVuIG9mZnNldCwgd2hpbGUgcmVzcGVjdGluZyB0aGUgcmVtYWluaW5nIGRhdGEgbGVuZ3RoLiBUaGlzIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGZyYWdtZW50cyBpcyB0aGVuIHBhc3NlZCB0byBgdGNwX3hhX3Bvb2xfcmVmaWxsYC4KCkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgcmVsZXZhbnQsIGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhcmUgd2hhdCBicmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgb25saW5lLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBhbmQgYHRjcF94YV9wb29sX3JlZmlsbGAuCgpUaGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIFRDUCBkYXRhIHBhdGgsIGRlYWxpbmcgd2l0aCBYQXJyYXkgdG9rZW4gcG9vbCBhbGxvY2F0aW9ucywgYW5kIGltcG9ydGFudGx5LCByZWxhdGVzIHRvIGRldm1lbSBUQ1AgemVyby1jb3B5LCB3aGljaCBpcyB1c2VkIHRocm91Z2ggVENQIHNvY2tldHMgd2l0aCBgcmVjdm1zZyguLi4sIE1TR19TT0NLX0RFVk1FTSlgLiBCZWNhdXNlIGl0IGludm9sdmVzIGNvcmUgbmV0d29ya2luZyBtb2RpZmljYXRpb25zLCB0aGUgcmlzayBwcm9maWxlIGlzIGVsZXZhdGVkIHNvIEkmIzM5O20gdGhpbmtpbmcgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4gVGhpcyB0aWNrcyB0aGUgYm94IGZvciBhICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBmbGFnLiBJJiMzOTttIGF2b2lkaW5nIGdlbmVyaWMgZnVuY3Rpb25zIGxpa2UgYHRjcF9yZWN2bXNnYCBhbmQgZ2VuZXJpYyBhbGxvY2F0b3JzIGFzIHRoZXkgYXJlIHRvbyB1YmlxdWl0b3VzIHRvIGJlIHRoZSBmb2N1cyBoZXJlLgoKU28sIHRoaXMgY2hhbmdlIGhhcyBhIGhpZ2ggcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgVENQIHJlY2VpdmUgcGF0aCBmb3IgZGV2bWVtLCBzbyBJJiMzOTtsbCBmbGFnIGl0IGZvciB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfREVWTUVNJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF94YV9wb29sX21heF9mcmFncyYjMzQ7LAogICAgJiMzNDt0Y3BfcmVjdm1zZ19kbWFidWYmIzM0OywKICAgICYjMzQ7dGNwX3hhX3Bvb2xfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgZG1hYnVmIHJlY2VpdmUgcGF0aCBpbiBuZXQvaXB2NC90Y3AuYyBieSBhZGRpbmcgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgZnJvbSBhIGdpdmVuIG9mZnNldCB1cCB0byByZW1haW5pbmdfbGVuLCBhZGp1c3RpbmcgdGhlIHBvb2wgcmVmaWxsIGxvZ2ljIGluIHRjcF9yZWN2bXNnX2RtYWJ1Zi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciB6ZXJvLWNvcHkgVENQIGRldm1lbSByZWNlaXZlIGFuZCBYQXJyYXkgdG9rZW4gYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfREVWTUVNJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF94YV9wb29sX21heF9mcmFncyYjMzQ7LAogICAgJiMzNDt0Y3BfcmVjdm1zZ19kbWFidWYmIzM0OywKICAgICYjMzQ7dGNwX3hhX3Bvb2xfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgZG1hYnVmIHJlY2VpdmUgcGF0aCBpbiBuZXQvaXB2NC90Y3AuYyBieSBhZGRpbmcgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgZnJvbSBhIGdpdmVuIG9mZnNldCB1cCB0byByZW1haW5pbmdfbGVuLCBhZGp1c3RpbmcgdGhlIHBvb2wgcmVmaWxsIGxvZ2ljIGluIHRjcF9yZWN2bXNnX2RtYWJ1Zi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciB6ZXJvLWNvcHkgVENQIGRldm1lbSByZWNlaXZlIGFuZCBYQXJyYXkgdG9rZW4gYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cblxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDUzNjViZDFhYmM4OWM2OTA0Y2RiZjNhYTU0ZjcyMmRhMDBhMzgwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjI6MDY6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmMzNTI3NzQzOTM4NjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0yNDk0LDYgJiM0MzsyNDk0LDMyIEBAIHN0YXRpYyBpbnQgdGNwX3hhX3Bvb2xfcmVmaWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwLAogCXJldHVybiBrID8gMCA6IGVycjsKIH0KIAomIzQzOy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvZiBAc2tiIGRlbGl2ZXJhYmxlIGZyb20gYnl0ZSBAb2Zmc2V0LCBjYXBwZWQKJiM0MzsgKiBieSBAcmVtYWluaW5nX2xlbi4gUmV0dXJucyAwIG9ubHkgd2hlbiBubyBmcmFnbWVudCBob2xkcyBAb2Zmc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGludCBvZmZzZXQsCiYjNDM7CQkJCQkgIGludCByZW1haW5pbmdfbGVuKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9mcmFncyA9IDA7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCBlbmQgPSBzdGFydCAmIzQzOyBza2JfZnJhZ19zaXplKCZhbXA7c2tiX3NoaW5mbyhza2IpLSZndDtmcmFnc1tpXSk7CiYjNDM7CQlpbnQgY29weSA9IGVuZCAtIG9mZnNldDsKJiM0MzsKJiM0MzsJCWlmIChjb3B5ICZndDsgMCkgewomIzQzOwkJCW1heF9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQkJaWYgKGNvcHkgJmd0Oz0gcmVtYWluaW5nX2xlbikKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzdGFydCA9IGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF4X2ZyYWdzOwomIzQzO30KJiM0MzsKIC8qIE9uIGVycm9yLCByZXR1cm5zIHRoZSAtZXJybm8uIE9uIHN1Y2Nlc3MsIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgdG8gdGhlCiAgKiB1c2VyLiBNYXkgbm90IGNvbnN1bWUgYWxsIG9mIEByZW1haW5pbmdfbGVuLgogICovCkBAIC0yNTAzLDYgJiM0MzsyNTI5LDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCXN0cnVjdCBkbWFidWZfY21zZyBkbWFidWZfY21zZyA9IHsgMCB9OwogCXN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9mcmFnczsKIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJaW50IGksIGNvcHksIG47CiAJaW50IHNlbnQgPSAwOwpAQCAtMjU1NCw2ICYjNDM7MjU4MSw4IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJLyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhCiAJCSAqIHNlcXVlbmNlIG9mIGNtc2cKIAkJICovCiYjNDM7CQltYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pOwomIzQzOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspIHsKIAkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmYW1wO3NrYl9zaGluZm8oc2tiKS0mZ3Q7ZnJhZ3NbaV07CiAJCQlzdHJ1Y3QgbmV0X2lvdiAqbmlvdjsKQEAgLTI1OTEsNyAmIzQzOzI2MjAsNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDsKIAkJCQlkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5OwogCQkJCWVyciA9IHRjcF94YV9wb29sX3JlZmlsbChzaywgJmFtcDt0Y3BfeGFfcG9vbCwKLQkJCQkJCQkgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFncyAtIGkpOwomIzQzOwkJCQkJCQkgbWF4X2ZyYWdzKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBkZWZlbnNpdmUgYW5hbHlzaXMg4oCTIGEgc3RhbmRhcmQgY29kZSByZXZpZXcgd2l0aCBhIGZvY3VzIG9uIHNhbml0aXplcnMsIHNwZWNpZmljYWxseSB0aGUgS0FTQU4vS01TQU4gYW5nbGUuIE5vIGhpZ2gtc2V2ZXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFyZSBhbnRpY2lwYXRlZCBoZXJlOyB0aGlzIGlzIGFib3V0IG9wdGltaXppbmcgb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgcHJlY2lzZWx5IGFuZCBtYWtlIHN1cmUgSSBjb3ZlciBhbGwgdGhlIGJhc2VzLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBuZXcgZnVuY3Rpb24sIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLCBoYXMgYmVlbiBhZGRlZC4gSXQgY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhZ21lbnRzIHVzYWJsZSBmcm9tIGEgYnl0ZSBvZmZzZXQsIGNvbnN0cmFpbmVkIGJ5IGEgcmVtYWluaW5nIGxlbmd0aC4gVGhpcyByZXN1bHQgaXMgdGhlbiB1c2VkIGluIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCByZXBsYWNpbmcgYSBkaXJlY3QgY2FsY3VsYXRpb24gb2YgZnJhZ21lbnQgY291bnQgd2l0aCBhIGNhbGwgdG8gYHRjcF94YV9wb29sX3JlZmlsbGAuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC90Y3AuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhlIGNvZGUgYXJvdW5kIHRoZXNlIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYW5kIGlmIEtNU0FOIG5lZWRzIHRvIGJlIGludm9sdmVkLiBJ4oCZbGwgbG9vayBmb3IgYW55IHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbXByb3BlciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBmcmFnbWVudGF0aW9uIHByb2Nlc3MsIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBPbmNlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLCBJIGNhbiBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgdGhhdCB3YXJyYW50IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ4MDpcdFxuMjQ4MTpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XG4yNDgyOlx0XG4yNDgzOlx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBtYXhfZnJhZ3M7IGsmIzQzOyYjNDM7KSB7XG4yNDg0Olx0XHRcdGVyciA9IF9feGFfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgXHUwMDI2cC1cdTAwM2V0b2tlbnNba10sXG4yNDg1Olx0XHRcdFx0XHQgWEFfWkVST19FTlRSWSwgeGFfbGltaXRfMzFiLCBHRlBfS0VSTkVMKTtcbjI0ODY6XHRcdFx0aWYgKGVycilcbjI0ODc6XHRcdFx0XHRicmVhaztcbjI0ODg6XHRcdH1cbjI0ODk6XHRcbjI0OTA6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0OTE6XHRcbjI0OTI6XHRcdHAtXHUwMDNlbWF4ID0gaztcbjI0OTM6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0OTQ6XHRcdHJldHVybiBrID8gMCA6IGVycjtcbjI0OTU6XHR9XG4yNDk2Olx0XG4yNDk3Olx0LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxuMjQ5ODpcdCAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuXG4yNDk5Olx0ICovXG4yNTAwOlx0c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjI1MDE6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuMjUwMjpcdFx0XHRcdFx0XHQgIGludCByZW1haW5pbmdfbGVuKVxuMjUwMzpcdHtcbjI1MDQ6XHRcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XG4yNTA1Olx0XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDtcbjI1MDY6XHRcdGludCBpO1xuMjUwNzpcdFxuMjUwODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuMjUwOTpcdFx0XHRpbnQgZW5kID0gc3RhcnQgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV0pO1xuMjUxMDpcdFx0XHRpbnQgY29weSA9IGVuZCAtIG9mZnNldDtcbjI1MTE6XHRcbjI1MTI6XHRcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbjI1MTM6XHRcdFx0XHRtYXhfZnJhZ3MmIzQzOyYjNDM7O1xuMjUxNDpcdFx0XHRcdGlmIChjb3B5IFx1MDAzZT0gcmVtYWluaW5nX2xlbilcbjI1MTU6XHRcdFx0XHRcdGJyZWFrO1xuMjUxNjpcdFx0XHR9XG4yNTE3Olx0XHRcdHN0YXJ0ID0gZW5kO1xuMjUxODpcdFx0fVxuMjUxOTpcdFxuMjUyMDpcdFx0cmV0dXJuIG1heF9mcmFncztcbjI1MjE6XHR9XG4yNTIyOlx0XG4yNTIzOlx0LyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcbjI1MjQ6XHQgKiB1c2VyLiBNYXkgbm90IGNvbnN1bWUgYWxsIG9mIEByZW1haW5pbmdfbGVuLlxuMjUyNTpcdCAqL1xuMjUyNjpcdHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjI1Mjc6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgbXNnaGRyICptc2csXG4yNTI4Olx0XHRcdFx0ICAgICAgaW50IHJlbWFpbmluZ19sZW4pXG4yNTI5Olx0e1xuMjUzMDpcdFx0c3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07XG4yNTMxOlx0XHRzdHJ1Y3QgdGNwX3hhX3Bvb2wgdGNwX3hhX3Bvb2w7XG4yNTMyOlx0XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuMjUzMzpcdFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuMjUzNDpcdFx0aW50IGksIGNvcHksIG47XG4yNTM1Olx0XHRpbnQgc2VudCA9IDA7XG4yNTM2Olx0XHRpbnQgZXJyID0gMDtcbjI1Mzc6XHRcbjI1Mzg6XHRcdHRjcF94YV9wb29sLm1heCA9IDA7XG4yNTM5Olx0XHR0Y3BfeGFfcG9vbC5pZHggPSAwO1xuMjU0MDpcdFx0ZG8ge1xuMjU0MTpcdFx0XHRzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XG4yNTQyOlx0XG4yNTQzOlx0XHRcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xuMjU0NDpcdFx0XHRcdGVyciA9IC1FTk9ERVY7XG4yNTQ1Olx0XHRcdFx0Z290byBvdXQ7XG4yNTQ2Olx0XHRcdH1cbjI1NDc6XHRcbjI1NDg6XHRcdFx0LyogQ29weSBoZWFkZXIuICovXG4yNTQ5Olx0XHRcdGNvcHkgPSBzdGFydCAtIG9mZnNldDtcbjI1NTA6XHRcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbjI1NTE6XHRcdFx0XHRjb3B5ID0gbWluKGNvcHksIHJlbWFpbmluZ19sZW4pO1xuMjU1MjpcdFxuMjU1MzpcdFx0XHRcdG4gPSBjb3B5X3RvX2l0ZXIoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBjb3B5LFxuMjU1NDpcdFx0XHRcdFx0XHQgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbjI1NTU6XHRcdFx0XHRpZiAobiAhPSBjb3B5KSB7XG4yNTU2Olx0XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjU1NzpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTU4Olx0XHRcdFx0fVxuMjU1OTpcdFxuMjU2MDpcdFx0XHRcdG9mZnNldCAmIzQzOz0gY29weTtcbjI1NjE6XHRcdFx0XHRyZW1haW5pbmdfbGVuIC09IGNvcHk7XG4yNTYyOlx0XG4yNTYzOlx0XHRcdFx0LyogRmlyc3QgYSBkbWFidWZfY21zZyBmb3IgIyBieXRlcyBjb3BpZWQgdG8gdXNlclxuMjU2NDpcdFx0XHRcdCAqIGJ1ZmZlci5cbjI1NjU6XHRcdFx0XHQgKi9cbjI1NjY6XHRcdFx0XHRtZW1zZXQoXHUwMDI2ZG1hYnVmX2Ntc2csIDAsIHNpemVvZihkbWFidWZfY21zZykpO1xuMjU2NzpcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XG4yNTY4Olx0XHRcdFx0ZXJyID0gcHV0X2Ntc2dfbm90cnVuYyhtc2csIFNPTF9TT0NLRVQsXG4yNTY5Olx0XHRcdFx0XHRcdCAgICAgICBTT19ERVZNRU1fTElORUFSLFxuMjU3MDpcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbjI1NzE6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRtYWJ1Zl9jbXNnKTtcbjI1NzI6XHRcdFx0XHRpZiAoZXJyKVxuMjU3MzpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTc0Olx0XG4yNTc1Olx0XHRcdFx0c2VudCAmIzQzOz0gY29weTtcbjI1NzY6XHRcbjI1Nzc6XHRcdFx0XHRpZiAocmVtYWluaW5nX2xlbiA9PSAwKVxuMjU3ODpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTc5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0Y3BfcmVjdm1zZ19kbWFidWZgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgb3BlcmF0aW9uYWwgZmxvdy4gSSBhbHJlYWR5IGhhdmUgYSBoYW5kbGUgb24gdGhlIGJhc2ljIHByaW5jaXBsZSwgYnV0IHRoZSBkZXRhaWxzIGFyZSBjcml0aWNhbC4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgVENQIHJlY2VpdmUgcGF0aCBhbmQgRE1BIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBlZGdlIGNhc2VzLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgY29kZSB0aGF0IGRlYWxzIHdpdGggdGhlIG1hcHBpbmcgYW5kIHVubWFwcGluZyBvZiB0aGUgRE1BIGJ1ZmZlcnMsIGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBzaXR1YXRpb25zIHdoZW4gYnVmZmVyIHNwYWNlIGlzIGV4aGF1c3RlZC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB0YWtpbmcgdGhlIHplcm8tY29weSBjb25jZXB0IHNlcmlvdXNseSBvciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb3BpZXMgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJiMzOTttIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFzIHdlbGwsIGJlY2F1c2UgRE1BIGFuZCBUQ1AgY2FuIGhhcHBlbiBvbiBkaWZmZXJlbnQgY29udGV4dHMgc28gY29uY3VycmVuY3kgY29uY2VybnMgd2lsbCBzdXJlbHkgYmUgaW1wb3J0YW50LiBBbnkgc3VidGxlIGxvY2tpbmcgc3RyYXRlZ2llcywgb3IgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvIG9ic2VydmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZGVhbCB3aXRoIGZyYWdtZW50ZWQgcGFja2V0cywgYW5kIGhvdyB0aGUgRE1BQlVGIGNvbmNlcHQgaXMgcmVhbGx5IHVzZWQgaW4gaXRzIHJlbGF0aW9uIHRvIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0cyBvZiB0aGUgcGFja2V0IGRhdGEuIEkgd2lsbCBzdGFydCBieSBmb2N1c2luZyBvbiB0aGUgbG9naWMgdGhhdCBpcyBwZXJmb3JtZWQgYXQgdGhlIGRldmljZSBkcml2ZXIgZW5kLiBUaGVuLCBJIHdpbGwgZXhhbWluZSBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoaWdoZXItbGV2ZWwgc29ja2V0IGxheWVyIGFuZCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMgdG8gZW5zdXJlIHRoYXQgaXQgaW50ZWdyYXRlcyBjbGVhbmx5IGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU4MDpcdFxuMjU4MTpcdFx0XHQvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGFcbjI1ODI6XHRcdFx0ICogc2VxdWVuY2Ugb2YgY21zZ1xuMjU4MzpcdFx0XHQgKi9cbjI1ODQ6XHRcdFx0bWF4X2ZyYWdzID0gdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKHNrYiwgb2Zmc2V0LCByZW1haW5pbmdfbGVuKTtcbjI1ODU6XHRcbjI1ODY6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuMjU4NzpcdFx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4yNTg4Olx0XHRcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4yNTg5Olx0XHRcdFx0dTY0IGZyYWdfb2Zmc2V0O1xuMjU5MDpcdFx0XHRcdGludCBlbmQ7XG4yNTkxOlx0XG4yNTkyOlx0XHRcdFx0LyogIXNrYl9mcmFnc19yZWFkYWJsZSgpIHNob3VsZCBpbmRpY2F0ZSB0aGF0IEFMTCB0aGVcbjI1OTM6XHRcdFx0XHQgKiBmcmFncyBpbiB0aGlzIHNrYiBhcmUgZG1hYnVmIG5ldF9pb3ZzLiBXZSYjMzk7cmUgY2hlY2tpbmdcbjI1OTQ6XHRcdFx0XHQgKiBmb3IgdGhhdCBmbGFnIGFib3ZlLCBidXQgYWxzbyBjaGVjayBpbmRpdmlkdWFsIGZyYWdzXG4yNTk1Olx0XHRcdFx0ICogaGVyZS4gSWYgdGhlIHRjcCBzdGFjayBpcyBub3Qgc2V0dGluZ1xuMjU5NjpcdFx0XHRcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJiMzOTt0IHdhbnRcbjI1OTc6XHRcdFx0XHQgKiB0byBjcmFzaCBoZXJlLlxuMjU5ODpcdFx0XHRcdCAqL1xuMjU5OTpcdFx0XHRcdGlmICghc2tiX2ZyYWdfbmV0X2lvdihmcmFnKSkge1xuMjYwMDpcdFx0XHRcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDtGb3VuZCBub24tZG1hYnVmIHNrYiB3aXRoIG5ldF9pb3ZcJiMzNDspO1xuMjYwMTpcdFx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI2MDI6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjYwMzpcdFx0XHRcdH1cbjI2MDQ6XHRcbjI2MDU6XHRcdFx0XHRuaW92ID0gc2tiX2ZyYWdfbmV0X2lvdihmcmFnKTtcbjI2MDY6XHRcdFx0XHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XG4yNjA3Olx0XHRcdFx0XHRlcnIgPSAtRU5PREVWO1xuMjYwODpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNjA5Olx0XHRcdFx0fVxuMjYxMDpcdFxuMjYxMTpcdFx0XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IHNrYl9mcmFnX3NpemUoZnJhZyk7XG4yNjEyOlx0XHRcdFx0Y29weSA9IGVuZCAtIG9mZnNldDtcbjI2MTM6XHRcbjI2MTQ6XHRcdFx0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuMjYxNTpcdFx0XHRcdFx0Y29weSA9IG1pbihjb3B5LCByZW1haW5pbmdfbGVuKTtcbjI2MTY6XHRcbjI2MTc6XHRcdFx0XHRcdGZyYWdfb2Zmc2V0ID0gbmV0X2lvdl92aXJ0dWFsX2FkZHIobmlvdikgJiM0MztcbjI2MTg6XHRcdFx0XHRcdFx0ICAgICAgc2tiX2ZyYWdfb2ZmKGZyYWcpICYjNDM7IG9mZnNldCAtXG4yNjE5Olx0XHRcdFx0XHRcdCAgICAgIHN0YXJ0O1xuMjYyMDpcdFx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDtcbjI2MjE6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XG4yNjIyOlx0XHRcdFx0XHRlcnIgPSB0Y3BfeGFfcG9vbF9yZWZpbGwoc2ssIFx1MDAyNnRjcF94YV9wb29sLFxuMjYyMzpcdFx0XHRcdFx0XHRcdFx0IG1heF9mcmFncyk7XG4yNjI0Olx0XHRcdFx0XHRpZiAoZXJyKVxuMjYyNTpcdFx0XHRcdFx0XHRnb3RvIG91dDtcbjI2MjY6XHRcbjI2Mjc6XHRcdFx0XHRcdC8qIFdpbGwgcGVyZm9ybSB0aGUgZXhjaGFuZ2UgbGF0ZXIgKi9cbjI2Mjg6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcbjI2Mjk6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XG4yNjMwOlx0XG4yNjMxOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IGNvcHk7XG4yNjMyOlx0XHRcdFx0XHRyZW1haW5pbmdfbGVuIC09IGNvcHk7XG4yNjMzOlx0XG4yNjM0Olx0XHRcdFx0XHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcbjI2MzU6XHRcdFx0XHRcdFx0XHQgICAgICAgU09fREVWTUVNX0RNQUJVRixcbjI2MzY6XHRcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbjI2Mzc6XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZG1hYnVmX2Ntc2cpO1xuMjYzODpcdFx0XHRcdFx0aWYgKGVycilcbjI2Mzk6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgUGF0Y2gmIzM5O3MgQ29udGV4dCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGFkZHJlc3NpbmcuIEZpcnN0LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgaXQg4oCTIHdoYXQmIzM5O3MgdGhlIHNwZWNpZmljIHByb2JsZW0gaXQmIzM5O3MgZGVzaWduZWQgdG8gZml4PyBJIG5lZWQgdG8ga25vdyB0aGUgJiMzOTt3aHkmIzM5OyBiZWZvcmUgSSBjYW4gcmVhbGx5IGdyYXNwIHRoZSAmIzM5O2hvdy4mIzM5OyBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgcHJvYmFibHkgZGl2aW5nIGludG8gYHRjcF94YV9wb29sX3JlZmlsbGAgYW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdGNwX3hhX3Bvb2xgLiBUaGVzZSBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHRvIGV4YW1pbmUuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgZm9yIHRoZSBmaXguIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlZmlsbCBtZWNoYW5pc20gd29ya3MgYW5kIGhvdyB0aGUgcG9vbCBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDUwOlx0XHRcdFx0ICAgICAoX19mb3JjZSB2b2lkICopcC1cdTAwM2VuZXRtZW1zW2ldLCBHRlBfS0VSTkVMKTtcbjI0NTE6XHRcdC8qIFJvbGxiYWNrIHdoYXQgaGFzIGJlZW4gcHJlLWFsbG9jYXRlZCBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKi9cbjI0NTI6XHRcdGZvciAoOyBpIFx1MDAzYyBwLVx1MDAzZW1heDsgaSYjNDM7JiM0MzspXG4yNDUzOlx0XHRcdF9feGFfZXJhc2UoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgcC1cdTAwM2V0b2tlbnNbaV0pO1xuMjQ1NDpcdFxuMjQ1NTpcdFx0cC1cdTAwM2VtYXggPSAwO1xuMjQ1NjpcdFx0cC1cdTAwM2VpZHggPSAwO1xuMjQ1NzpcdH1cbjI0NTg6XHRcbjI0NTk6XHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXG4yNDYwOlx0e1xuMjQ2MTpcdFx0aWYgKCFwLVx1MDAzZW1heClcbjI0NjI6XHRcdFx0cmV0dXJuO1xuMjQ2MzpcdFxuMjQ2NDpcdFx0eGFfbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0NjU6XHRcbjI0NjY6XHRcdHRjcF94YV9wb29sX2NvbW1pdF9sb2NrZWQoc2ssIHApO1xuMjQ2NzpcdFxuMjQ2ODpcdFx0eGFfdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ2OTpcdH1cbjI0NzA6XHRcbjI0NzE6XHRzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcbjI0NzI6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzKVxuMjQ3MzpcdHtcbjI0NzQ6XHRcdGludCBlcnIsIGs7XG4yNDc1Olx0XG4yNDc2Olx0XHRpZiAocC1cdTAwM2VpZHggXHUwMDNjIHAtXHUwMDNlbWF4KVxuMjQ3NzpcdFx0XHRyZXR1cm4gMDtcbjI0Nzg6XHRcbjI0Nzk6XHRcdHhhX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncyk7XG4yNDgwOlx0XG4yNDgxOlx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0ODI6XHRcbjI0ODM6XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG1heF9mcmFnczsgayYjNDM7JiM0MzspIHtcbjI0ODQ6XHRcdFx0ZXJyID0gX194YV9hbGxvYyhcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBcdTAwMjZwLVx1MDAzZXRva2Vuc1trXSxcbjI0ODU6XHRcdFx0XHRcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xuMjQ4NjpcdFx0XHRpZiAoZXJyKVxuMjQ4NzpcdFx0XHRcdGJyZWFrO1xuMjQ4ODpcdFx0fVxuMjQ4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHRjcF94YV9wb29sYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBzdHJ1Y3QgdGNwX3hhX3Bvb2xgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaC4gTGV0JiMzOTtzIGZpcmUgdXAgYSBgZ3JlcGAgYW5kIHNlZSB3aGVyZSB0aGlzIHN0cnVjdCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBHb3R0YSBnZXQgYSBmZWVsIGZvciBpdHMgY29udGV4dCwgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IGtub3dpbmcgdGhlIGJhc2ljIHVzYWdlIHBhdHRlcm5zIHdpbGwgaW5mb3JtIHRoZSBkZWVwZXIgZGl2ZSBJJiMzOTtsbCBuZWVkIHRvIGRvIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGNwX3hhX3Bvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yNDE0PXN0YXRpYyBpbnQgdGNwX2lucV9oaW50KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNDM1LS8qIGJhdGNoIF9feGFfYWxsb2MoKSBjYWxscyBhbmQgcmVkdWNlIHhhX2xvY2soKS94YV91bmxvY2soKSBvdmVyaGVhZC4gKi9cbm5ldC9pcHY0L3RjcC5jOjI0MzY6c3RydWN0IHRjcF94YV9wb29sIHtcbm5ldC9pcHY0L3RjcC5jLTI0MzctXHR1OFx0XHRtYXg7IC8qIG1heCBcdTAwM2M9IE1BWF9TS0JfRlJBR1MgKi9cbi0tXG5uZXQvaXB2NC90Y3AuYy0yNDQyLVxubmV0L2lwdjQvdGNwLmM6MjQ0MzpzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxubmV0L2lwdjQvdGNwLmMtMjQ0NC17XG4tLVxubmV0L2lwdjQvdGNwLmMtMjQ1OC1cbm5ldC9pcHY0L3RjcC5jOjI0NTk6c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxubmV0L2lwdjQvdGNwLmMtMjQ2MC17XG4tLVxubmV0L2lwdjQvdGNwLmMtMjQ3MC1cbm5ldC9pcHY0L3RjcC5jOjI0NzE6c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXG5uZXQvaXB2NC90Y3AuYy0yNDcyLVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBtYXhfZnJhZ3MpXG4tLVxubmV0L2lwdjQvdGNwLmM9MjUyNj1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjUzMC1cdHN0cnVjdCBkbWFidWZfY21zZyBkbWFidWZfY21zZyA9IHsgMCB9O1xubmV0L2lwdjQvdGNwLmM6MjUzMTpcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbm5ldC9pcHY0L3RjcC5jLTI1MzItXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgYXMgaWYgSSYjMzk7bSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBjb2RlIHNlY3Rpb24uCgoqKkRpdmluZyBpbnRvIGBuZXQvaXB2NC90Y3AuY2Ag4oCTIExpbmVzIDI0MzUtMjQ1MCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjQvdGNwLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjQzNSB0byAyNDUwLiBJIGtub3cgdGhpcyBhcmVhIHByZXR0eSB3ZWxsOyBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIGVpdGhlciBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGRhdGEgdHJhbnNtaXNzaW9uLCBvciBwb3RlbnRpYWxseSBjb25nZXN0aW9uIGNvbnRyb2wgLSBJJiMzOTtsbCBjb25maXJtIHRoYXQgcXVpY2tseSBieSBzY2FubmluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ3V0IHRlbGxzIG1lIHdlIGFyZSBsaWtlbHkgaW4gYSBmbG93IGNvbnRyb2wgbG9vcCBvciBzb21lIGZvcm0gb2YgY29uZ2VzdGlvbiBjb250cm9sLiBJIGFtIGdvaW5nIHRvIGtlZXAgbXkgbWVudGFsIG1vZGVsIGFjdGl2ZSBhcyBJIHNjYW4gdGhyb3VnaCB0aGlzIGNvZGUuCgpMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIG9rYXksIGl0IGNvbmZpcm1zIG15IHN1c3BpY2lvbnMsIHdlJiMzOTtyZSBsaWtlbHkgd2l0aGluIGEgc2VnbWVudCB0cmFuc21pc3Npb24gbG9vcC4gSSBiZXQgdGhpcyBzZWN0aW9uIGlzIGhhbmRsaW5nIHRoZSBzZW5kaW5nIG9mIGEgVENQIHNlZ21lbnQgYW5kIGVuc3VyaW5nIGl0IGZpdHMgd2l0aGluIGNlcnRhaW4gcGFyYW1ldGVycyDigJMgcGVyaGFwcyBjaGVja2luZyB3aW5kb3cgc2l6ZXMsIGNvbmdlc3Rpb24gd2luZG93cywgb3Igc29tZSBvdGhlciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyBiZWZvcmUgdGhlIHBhY2tldCBpcyBzZW50IHRvIHRoZSBuZXR3b3JrLiBJIHdvdWxkIGV4cGVjdCBzb21lIGNhbGxzIHRvIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNlbmRpbmcgdGhlIGRhdGEgdG8gdGhlIGludGVyZmFjZSwgcGVyaGFwcyBgc2tiX3NlbmRfc2tgLCBgdGNwX3RyYW5zbWl0X3NrYmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoaXMuIEkgd2lsbCBsb29rIGZvciBjYWxscyB0byB0aGUga2VybmVsIHRoYXQgY29uZmlybSBteSBndWVzcy4gSWYgdGhpcyBibG9jayBoYW5kbGVzIHdpbmRvdyBhZHZlcnRpc2VtZW50LCB0aGVuIHRoZXJlIHdpbGwgYmUgY2FsbHMgdG8gc3RydWN0dXJlcyBkZWFsaW5nIHdpdGggcmVjZWl2ZSB3aW5kb3cgbWFuYWdlbWVudC4gSSYjMzk7bGwgYmUgYWJsZSB0byBjb25maXJtIG15IGd1ZXNzIGJhc2VkIG9uIGFueSBjb25kaXRpb25hbHMgb3IgY29udHJvbCBzdGF0ZW1lbnRzLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGlzc2VjdCB3aGF0IHRoZXNlIGxpbmVzIGFyZSAqYWN0dWFsbHkqIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDM1Olx0LyogYmF0Y2ggX194YV9hbGxvYygpIGNhbGxzIGFuZCByZWR1Y2UgeGFfbG9jaygpL3hhX3VubG9jaygpIG92ZXJoZWFkLiAqL1xuMjQzNjpcdHN0cnVjdCB0Y3BfeGFfcG9vbCB7XG4yNDM3Olx0XHR1OFx0XHRtYXg7IC8qIG1heCBcdTAwM2M9IE1BWF9TS0JfRlJBR1MgKi9cbjI0Mzg6XHRcdHU4XHRcdGlkeDsgLyogaWR4IFx1MDAzYz0gbWF4ICovXG4yNDM5Olx0XHRfX3UzMlx0XHR0b2tlbnNbTUFYX1NLQl9GUkFHU107XG4yNDQwOlx0XHRuZXRtZW1fcmVmXHRuZXRtZW1zW01BWF9TS0JfRlJBR1NdO1xuMjQ0MTpcdH07XG4yNDQyOlx0XG4yNDQzOlx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcbjI0NDQ6XHR7XG4yNDQ1Olx0XHRpbnQgaTtcbjI0NDY6XHRcbjI0NDc6XHRcdC8qIENvbW1pdCBwYXJ0IHRoYXQgaGFzIGJlZW4gY29waWVkIHRvIHVzZXIgc3BhY2UuICovXG4yNDQ4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwLVx1MDAzZWlkeDsgaSYjNDM7JiM0MzspXG4yNDQ5Olx0XHRcdF9feGFfY21weGNoZyhcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBwLVx1MDAzZXRva2Vuc1tpXSwgWEFfWkVST19FTlRSWSxcbjI0NTA6XHRcdFx0XHQgICAgIChfX2ZvcmNlIHZvaWQgKilwLVx1MDAzZW5ldG1lbXNbaV0sIEdGUF9LRVJORUwpO1xuMjQ1MTpcdFx0LyogUm9sbGJhY2sgd2hhdCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLiAqL1xuMjQ1MjpcdFx0Zm9yICg7IGkgXHUwMDNjIHAtXHUwMDNlbWF4OyBpJiM0MzsmIzQzOylcbjI0NTM6XHRcdFx0X194YV9lcmFzZShcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBwLVx1MDAzZXRva2Vuc1tpXSk7XG4yNDU0Olx0XG4yNDU1Olx0XHRwLVx1MDAzZW1heCA9IDA7XG4yNDU2Olx0XHRwLVx1MDAzZWlkeCA9IDA7XG4yNDU3Olx0fVxuMjQ1ODpcdFxuMjQ1OTpcdHN0YXRpYyB2b2lkIHRjcF94YV9wb29sX2NvbW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzMgoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGB0Y3BfcmVjdm1zZ19kbWFidWZgIFBhdGNoIGZvciBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGlzIGZvY3VzZWQgb24gd2hldGhlciBpdCB3YXJyYW50cyB0aGUgdXNlIG9mIEtNU0FOLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGEgbW9yZSBwcmVjaXNlIGNhbGN1bGF0aW9uIG9mIHRoZSBYQXJyYXkgcHJlLWFsbG9jYXRpb24gcG9vbCBzaXplLgoKQmVmb3JlLCBpdCBsb29rcyBsaWtlIHRoZSBjb2RlIHdhcyBwb3RlbnRpYWxseSBvdmVyLWFsbG9jYXRpbmcgdG9rZW5zIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhZ21lbnRzLCBldmVuIGlmIGByZW1haW5pbmdfbGVuYCAodGhlIGFtb3VudCBvZiBkYXRhIGFjdHVhbGx5IHRvIGJlIGNvcGllZCkgaW5kaWNhdGVkIGZld2VyIHdlcmUgbmVlZGVkLiBPciwgcGVyaGFwcywgdGhlcmUgd2FzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIGNvdW50IHByb3ZpZGVkIHRyaWdnZXJlZCB0aGUgZWFybHkgcHJlYWxsb2NhdGlvbiBvZiBYQSBlbnRyaWVzLiBUaGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pYCB0byBkZXRlcm1pbmUgdGhlICpleGFjdCogbnVtYmVyIG9mIGZyYWdtZW50cyByZXF1aXJlZCwgY2FwcGVkIGJ5IGByZW1haW5pbmdfbGVuYC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMgYW5kIHJlZmluZXMgbWVtb3J5IHVzYWdlLgoKTXkgY29uY2VybiBuYXR1cmFsbHkgdHVybnMgdG8gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBMZXQmIzM5O3MgZGlnIGluLiBJIHNlZSBgZG1hYnVmX2Ntc2dgIGlzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAsIGFuZCBpdHMgZmllbGRzIGFyZSB0aGVuIHBvcHVsYXRlZCB3aXRoaW4gdGhlIGxvb3AuIEV4YW1pbmluZyB0aGUgcmVsZXZhbnQgY29kZSwgYGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW5gIGlzIGFzc2lnbmVkIGZyb20gYHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdYC4gVG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBpbml0aWFsaXphdGlvbiBpc3N1ZXMsIHRoZSByZWZpbGwgZnVuY3Rpb24gb2YgdGhlIHBvb2wgaXMgY2hlY2tlZC4gVGhlIGluZGV4IHN0YXJ0cyBhdCBgMGAuIFdoZW4gdGhlIHBvb2wgaXMgcmVmaWxsZWQsIGl0IHBvcHVsYXRlcyBgcC0mZ3Q7dG9rZW5zWzAuLmstMV1gIHVzaW5nIGBfX3hhX2FsbG9jYCwgYW5kIHRoZW4gYHAtJmd0O2lkeGAgaXMgcmVzZXQgdG8gMC4gU28gdGhlIHRva2VucyBhcmUgd3JpdHRlbiBiZWZvcmUgdGhlIHJlYWQuIFRoZSBvdGhlciBwYXJ0IGlzIHZlcmlmeWluZyB0aGUgYHRjcF94YV9wb29sX21heF9mcmFnc2AgZnVuY3Rpb24uICBJdCYjMzk7cyBwcmV0dHkgc2ltcGxlIGFuZCBvbmx5IGNvbXB1dGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFnbWVudHMsIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgY2hlY2sgZm9yIGNvbW1vbiBtZW1vcnkgc2FmZXR5IHJpc2tzOgoKMS4gICoqVW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlPyoqIE5vLCB0aGUgYGRtYWJ1Zl9jbXNnYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IHNldCBiZWZvcmUgYmVpbmcgcGFzc2VkLCBzbyB0aGF0JiMzOTtzIGNvdmVyZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdGhpcy4KMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vOyB0aGUgbG9naWMgYXBwZWFycyBzb3VuZCwgYW5kIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5Lgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLCB0aGUgZm9jdXMgaXMgb24gb3B0aW1pemluZyBhIGZyYWdtZW50IHByZS1hbGxvY2F0aW9uIGNhbGN1bGF0aW9uIHJhdGhlciB0aGFuIG1vZGlmeWluZyBidWZmZXIgYWNjZXNzLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgc2NlbmFyaW9zIHdoZXJlIEtNU0FOIHdvdWxkIGJlIHNwZWNpZmljYWxseSByZXF1aXJlZCBvciBwcm92aWRlIHNpZ25pZmljYW50IGFkZGVkIHZhbHVlIG92ZXIgS0FTQU4gYW5kIHN0YW5kYXJkIGZ1enppbmcgYW5kIGRlYnVnIGJ1aWxkcy4gVGhlIHBhdGNoIGNlbnRlcnMgYXJvdW5kIGEgbW9yZSBlZmZpY2llbnQgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3kgd2l0aGluIGEgd2VsbC1kZWZpbmVkIGFuZCBoYW5kbGVkIGNvbnRleHQuIEtBU0FOIGlzIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgaW50cm9kdWNlZCBvciB1bmNvdmVyZWQgbG9naWMgZXJyb3JzLCBib3VuZHMgaXNzdWVzLCBvciBVQUZzLiBUaGVyZSBhcmUgbm8ga25vd24gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBLQVNBTi9kZWJ1ZyBidWlsZHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgY29ycmVjdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cblxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgaGVscGVyIGZ1bmN0aW9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGJvdW5kZWQgYnkgYHJlbWFpbmluZ19sZW5gLCBhbmQgcGFzc2VzIHRoaXMgdmFsdWUgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsKClgIGluc3RlYWQgb2Ygb3Zlci1hbGxvY2F0aW5nIGJhc2VkIG9uIHJlbWFpbmluZyBgbnJfZnJhZ3NgLlxuXG5BbGwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYHRjcF94YV9wb29sX21heF9mcmFncygpYCBhbmQgYHRjcF9yZWN2bXNnX2RtYWJ1ZigpYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBkbWFidWZfY21zZ2Agc3RydWN0dXJlIHNlbnQgdG8gdXNlcnNwYWNlIGNvbnRpbnVlcyB0byBiZSB6ZXJvLWluaXRpYWxpemVkIChgZG1hYnVmX2Ntc2cgPSB7IDAgfWApLCBhbmQgYHRjcF94YV9wb29sLnRva2Vuc2AgZW50cmllcyBhcmUgd3JpdHRlbiBieSBgX194YV9hbGxvYygpYCBwcmlvciB0byBiZWluZyByZWFkIGFuZCBhc3NpZ25lZCBpbnRvIHRoZSBjbXNnLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjM2LjcxMjg4NDcyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMwMjY0NDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3hhX3Bvb2xfbWF4X2ZyYWdzXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19kbWFidWZcIixcbiAgICBcInRjcF94YV9wb29sX3JlZmlsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgaGVscGVyIGZ1bmN0aW9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGJvdW5kZWQgYnkgYHJlbWFpbmluZ19sZW5gLCBhbmQgcGFzc2VzIHRoaXMgdmFsdWUgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsKClgIGluc3RlYWQgb2Ygb3Zlci1hbGxvY2F0aW5nIGJhc2VkIG9uIHJlbWFpbmluZyBgbnJfZnJhZ3NgLlxcblxcbkFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIGFuZCBgdGNwX3JlY3Ztc2dfZG1hYnVmKClgIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGRtYWJ1Zl9jbXNnYCBzdHJ1Y3R1cmUgc2VudCB0byB1c2Vyc3BhY2UgY29udGludWVzIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQgKGBkbWFidWZfY21zZyA9IHsgMCB9YCksIGFuZCBgdGNwX3hhX3Bvb2wudG9rZW5zYCBlbnRyaWVzIGFyZSB3cml0dGVuIGJ5IGBfX3hhX2FsbG9jKClgIHByaW9yIHRvIGJlaW5nIHJlYWQgYW5kIGFzc2lnbmVkIGludG8gdGhlIGNtc2cuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgZG1hYnVmIHJlY2VpdmUgcGF0aCBpbiBuZXQvaXB2NC90Y3AuYyBieSBhZGRpbmcgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgZnJvbSBhIGdpdmVuIG9mZnNldCB1cCB0byByZW1haW5pbmdfbGVuLCBhZGp1c3RpbmcgdGhlIHBvb2wgcmVmaWxsIGxvZ2ljIGluIHRjcF9yZWN2bXNnX2RtYWJ1Zi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciB6ZXJvLWNvcHkgVENQIGRldm1lbSByZWNlaXZlIGFuZCBYQXJyYXkgdG9rZW4gYWxsb2NhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDY6MzYuNzEyODg5NzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg0NTM5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNTM2NWJkMWFiYzg5YzY5MDRjZGJmM2FhNTRmNzIyZGEwMGEzODBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMjI6MDY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmMzNTI3NzQzOTM4NjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0yNDk0LDYgKzI0OTQsMzIgQEAgc3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXFxuIFxcdHJldHVybiBrID8gMCA6IGVycjtcXG4gfVxcbiBcXG4rLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxcbisgKiBieSBAcmVtYWluaW5nX2xlbi4gUmV0dXJucyAwIG9ubHkgd2hlbiBubyBmcmFnbWVudCBob2xkcyBAb2Zmc2V0LlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCByZW1haW5pbmdfbGVuKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcXG4rXFx0XFx0aW50IGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXSk7XFxuK1xcdFxcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xcbitcXG4rXFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdG1heF9mcmFncysrO1xcbitcXHRcXHRcXHRpZiAoY29weSBcXHUwMDNlPSByZW1haW5pbmdfbGVuKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzdGFydCA9IGVuZDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG1heF9mcmFncztcXG4rfVxcbitcXG4gLyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcXG4gICogdXNlci4gTWF5IG5vdCBjb25zdW1lIGFsbCBvZiBAcmVtYWluaW5nX2xlbi5cXG4gICovXFxuQEAgLTI1MDMsNiArMjUyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4ge1xcbiBcXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcXG4gXFx0c3RydWN0IHRjcF94YV9wb29sIHRjcF94YV9wb29sO1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcdGludCBpLCBjb3B5LCBuO1xcbiBcXHRpbnQgc2VudCA9IDA7XFxuQEAgLTI1NTQsNiArMjU4MSw4IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0LyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhXFxuIFxcdFxcdCAqIHNlcXVlbmNlIG9mIGNtc2dcXG4gXFx0XFx0ICovXFxuK1xcdFxcdG1heF9mcmFncyA9IHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbik7XFxuK1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuIFxcdFxcdFxcdHNrYl9mcmFnX3QgKmZyYWcgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXTtcXG4gXFx0XFx0XFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuQEAgLTI1OTEsNyArMjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDtcXG4gXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcXHUwMDI2dGNwX3hhX3Bvb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzIC0gaSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBtYXhfZnJhZ3MpO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjM3LjMxMjA4MTcxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzQ3MTgzNjA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF94YV9wb29sX21heF9mcmFnc1wiLFxuICAgIFwidGNwX3JlY3Ztc2dfZG1hYnVmXCIsXG4gICAgXCJ0Y3BfeGFfcG9vbF9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDUzNjViZDFhYmM4OWM2OTA0Y2RiZjNhYTU0ZjcyMmRhMDBhMzgwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjI6MDY6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li5jMzUyNzc0MzkzODYxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMjQ5NCw2ICsyNDk0LDMyIEBAIHN0YXRpYyBpbnQgdGNwX3hhX3Bvb2xfcmVmaWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwLFxuIFx0cmV0dXJuIGsgPyAwIDogZXJyO1xuIH1cbiBcbisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmcmFnbWVudHMgb2YgQHNrYiBkZWxpdmVyYWJsZSBmcm9tIGJ5dGUgQG9mZnNldCwgY2FwcGVkXG4rICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94YV9wb29sX21heF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXG4rXHRcdFx0XHRcdCAgaW50IHJlbWFpbmluZ19sZW4pXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbitcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuK1x0XHRpbnQgZW5kID0gc3RhcnQgKyBza2JfZnJhZ19zaXplKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VmcmFnc1tpXSk7XG4rXHRcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xuK1xuK1x0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuK1x0XHRcdG1heF9mcmFncysrO1xuK1x0XHRcdGlmIChjb3B5IFx1MDAzZT0gcmVtYWluaW5nX2xlbilcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHN0YXJ0ID0gZW5kO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG1heF9mcmFncztcbit9XG4rXG4gLyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcbiAgKiB1c2VyLiBNYXkgbm90IGNvbnN1bWUgYWxsIG9mIEByZW1haW5pbmdfbGVuLlxuICAqL1xuQEAgLTI1MDMsNiArMjUyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcbiBcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbitcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXHRpbnQgaSwgY29weSwgbjtcbiBcdGludCBzZW50ID0gMDtcbkBAIC0yNTU0LDYgKzI1ODEsOCBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdC8qIGFmdGVyIHRoYXQsIHNlbmQgaW5mb3JtYXRpb24gb2YgZG1hYnVmIHBhZ2VzIHRocm91Z2ggYVxuIFx0XHQgKiBzZXF1ZW5jZSBvZiBjbXNnXG4gXHRcdCAqL1xuK1x0XHRtYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pO1xuK1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuIFx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4gXHRcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG5AQCAtMjU5MSw3ICsyNjIwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDtcbiBcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XG4gXHRcdFx0XHRlcnIgPSB0Y3BfeGFfcG9vbF9yZWZpbGwoc2ssIFx1MDAyNnRjcF94YV9wb29sLFxuLVx0XHRcdFx0XHRcdFx0IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyAtIGkpO1xuK1x0XHRcdFx0XHRcdFx0IG1heF9mcmFncyk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjM3LjMxMjA4NDY1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTg3NDE0NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHBvdGVudGlhbCB3aXRoIHN5emthbGxlci4gRmlyc3QsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuIE5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBvciBtYWxpY2lvdXMgdGFza3MgYXJlIHJlcXVlc3RlZCwganVzdCBnb29kIG9sZC1mYXNoaW9uZWQgZGV2ZWxvcGVyIFFBIGFuZCB0cmlhZ2UuIFBlcmZlY3QsIGJlbmlnbiByZXF1ZXN0LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYG5ldC9pcHY0L3RjcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpbmNsdWRlcyBhIG5ldyBmdW5jdGlvbiwgYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhZ21lbnRzIGRlbGl2ZXJhYmxlIGZyb20gYSBzcGVjaWZpYyBvZmZzZXQgd2l0aGluIGFuIGBza19idWZmYCwgY2FwcGVkIGJ5IGEgcmVtYWluaW5nIGxlbmd0aC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZnJhZ21lbnRzLCBkZXRlcm1pbmluZyBob3cgbWFueSBjb250cmlidXRlIHRvIHRoZSByZXF1ZXN0ZWQgZGF0YS5cblxuVGhlIGltcG9ydGFudCBwYXJ0IGlzIHdoZXJlIHRoaXMgbmV3IGZ1bmN0aW9uIGlzICp1c2VkKiB3aXRoaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAuIEl0J3MgcmVwbGFjaW5nIGEgZGlyZWN0IGNhbGN1bGF0aW9uIGludm9sdmluZyBgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzIC0gaWAgd2l0aCBhIGNhbGwgdG8gYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgY2FsY3VsYXRlZCBgbWF4X2ZyYWdzYCB2YWx1ZSB0aGVuIGdldHMgcGFzc2VkIHRvIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIGZ1enppbmcgcG90ZW50aWFsLCBJIG5lZWQgY29udGV4dC4gSSdsbCBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcC5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lcyAyNDgwLTI2NDAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGhvdyBgdGNwX3hhX3Bvb2xgIGlzIHVzZWQsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIGNoYW5nZSBoYXMgb24gZGF0YSBoYW5kbGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhpcyBzdXJyb3VuZGluZyBjb2RlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIHRoZSBmdXp6aW5nIGVsZW1lbnRzIG5lZWRlZCwgc3VjaCBhcyBGb2N1c1N5bWJvbHMsIEVuYWJsZUNvbmZpZ3MsIFdvcnRoRnV6emluZywgYW5kIFJlYXNvbmluZyB0byByZXR1cm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNjo1NS40OTk1MDE5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDcyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0ODA6XFx0XFxuMjQ4MTpcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcXG4yNDgyOlxcdFxcbjI0ODM6XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIG1heF9mcmFnczsgaysrKSB7XFxuMjQ4NDpcXHRcXHRcXHRlcnIgPSBfX3hhX2FsbG9jKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncywgXFx1MDAyNnAtXFx1MDAzZXRva2Vuc1trXSxcXG4yNDg1OlxcdFxcdFxcdFxcdFxcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xcbjI0ODY6XFx0XFx0XFx0aWYgKGVycilcXG4yNDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0ODg6XFx0XFx0fVxcbjI0ODk6XFx0XFxuMjQ5MDpcXHRcXHR4YV91bmxvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDkxOlxcdFxcbjI0OTI6XFx0XFx0cC1cXHUwMDNlbWF4ID0gaztcXG4yNDkzOlxcdFxcdHAtXFx1MDAzZWlkeCA9IDA7XFxuMjQ5NDpcXHRcXHRyZXR1cm4gayA/IDAgOiBlcnI7XFxuMjQ5NTpcXHR9XFxuMjQ5NjpcXHRcXG4yNDk3OlxcdC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvZiBAc2tiIGRlbGl2ZXJhYmxlIGZyb20gYnl0ZSBAb2Zmc2V0LCBjYXBwZWRcXG4yNDk4OlxcdCAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuXFxuMjQ5OTpcXHQgKi9cXG4yNTAwOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuMjUwMTpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuMjUwMjpcXHRcXHRcXHRcXHRcXHRcXHQgIGludCByZW1haW5pbmdfbGVuKVxcbjI1MDM6XFx0e1xcbjI1MDQ6XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcXG4yNTA1OlxcdFxcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xcbjI1MDY6XFx0XFx0aW50IGk7XFxuMjUwNzpcXHRcXG4yNTA4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcXG4yNTA5OlxcdFxcdFxcdGludCBlbmQgPSBzdGFydCArIHNrYl9mcmFnX3NpemUoXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ3NbaV0pO1xcbjI1MTA6XFx0XFx0XFx0aW50IGNvcHkgPSBlbmQgLSBvZmZzZXQ7XFxuMjUxMTpcXHRcXG4yNTEyOlxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgMCkge1xcbjI1MTM6XFx0XFx0XFx0XFx0bWF4X2ZyYWdzKys7XFxuMjUxNDpcXHRcXHRcXHRcXHRpZiAoY29weSBcXHUwMDNlPSByZW1haW5pbmdfbGVuKVxcbjI1MTU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjUxNjpcXHRcXHRcXHR9XFxuMjUxNzpcXHRcXHRcXHRzdGFydCA9IGVuZDtcXG4yNTE4OlxcdFxcdH1cXG4yNTE5OlxcdFxcbjI1MjA6XFx0XFx0cmV0dXJuIG1heF9mcmFncztcXG4yNTIxOlxcdH1cXG4yNTIyOlxcdFxcbjI1MjM6XFx0LyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcXG4yNTI0OlxcdCAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uXFxuMjUyNTpcXHQgKi9cXG4yNTI2OlxcdHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yNTI3OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4yNTI4OlxcdFxcdFxcdFxcdCAgICAgIGludCByZW1haW5pbmdfbGVuKVxcbjI1Mjk6XFx0e1xcbjI1MzA6XFx0XFx0c3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07XFxuMjUzMTpcXHRcXHRzdHJ1Y3QgdGNwX3hhX3Bvb2wgdGNwX3hhX3Bvb2w7XFxuMjUzMjpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xcbjI1MzM6XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbjI1MzQ6XFx0XFx0aW50IGksIGNvcHksIG47XFxuMjUzNTpcXHRcXHRpbnQgc2VudCA9IDA7XFxuMjUzNjpcXHRcXHRpbnQgZXJyID0gMDtcXG4yNTM3OlxcdFxcbjI1Mzg6XFx0XFx0dGNwX3hhX3Bvb2wubWF4ID0gMDtcXG4yNTM5OlxcdFxcdHRjcF94YV9wb29sLmlkeCA9IDA7XFxuMjU0MDpcXHRcXHRkbyB7XFxuMjU0MTpcXHRcXHRcXHRzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XFxuMjU0MjpcXHRcXG4yNTQzOlxcdFxcdFxcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xcbjI1NDQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4yNTQ1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1NDY6XFx0XFx0XFx0fVxcbjI1NDc6XFx0XFxuMjU0ODpcXHRcXHRcXHQvKiBDb3B5IGhlYWRlci4gKi9cXG4yNTQ5OlxcdFxcdFxcdGNvcHkgPSBzdGFydCAtIG9mZnNldDtcXG4yNTUwOlxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgMCkge1xcbjI1NTE6XFx0XFx0XFx0XFx0Y29weSA9IG1pbihjb3B5LCByZW1haW5pbmdfbGVuKTtcXG4yNTUyOlxcdFxcbjI1NTM6XFx0XFx0XFx0XFx0biA9IGNvcHlfdG9faXRlcihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQsIGNvcHksXFxuMjU1NDpcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIpO1xcbjI1NTU6XFx0XFx0XFx0XFx0aWYgKG4gIT0gY29weSkge1xcbjI1NTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yNTU3OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1NTg6XFx0XFx0XFx0XFx0fVxcbjI1NTk6XFx0XFxuMjU2MDpcXHRcXHRcXHRcXHRvZmZzZXQgKz0gY29weTtcXG4yNTYxOlxcdFxcdFxcdFxcdHJlbWFpbmluZ19sZW4gLT0gY29weTtcXG4yNTYyOlxcdFxcbjI1NjM6XFx0XFx0XFx0XFx0LyogRmlyc3QgYSBkbWFidWZfY21zZyBmb3IgIyBieXRlcyBjb3BpZWQgdG8gdXNlclxcbjI1NjQ6XFx0XFx0XFx0XFx0ICogYnVmZmVyLlxcbjI1NjU6XFx0XFx0XFx0XFx0ICovXFxuMjU2NjpcXHRcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmRtYWJ1Zl9jbXNnLCAwLCBzaXplb2YoZG1hYnVmX2Ntc2cpKTtcXG4yNTY3OlxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XFxuMjU2ODpcXHRcXHRcXHRcXHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcXG4yNTY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBTT19ERVZNRU1fTElORUFSLFxcbjI1NzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXFxuMjU3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRtYWJ1Zl9jbXNnKTtcXG4yNTcyOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMjU3MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNTc0OlxcdFxcbjI1NzU6XFx0XFx0XFx0XFx0c2VudCArPSBjb3B5O1xcbjI1NzY6XFx0XFxuMjU3NzpcXHRcXHRcXHRcXHRpZiAocmVtYWluaW5nX2xlbiA9PSAwKVxcbjI1Nzg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU3OTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjU1LjQ5OTcxMTMxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTUxNTMyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBhbmQgSXRzIENvbnRleHQqKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBgdGNwX3JlY3Ztc2dfZG1hYnVmYC4gV2UndmUgaWRlbnRpZmllZCBpdCBhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBsaWtlbHkgcGxheWluZyBhIGtleSByb2xlIGluIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggRE1BIGJ1ZmZlcnMuIFRvIHRydWx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMsIHdlIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUuIExldCdzIHRyYWNlIGl0cyB1c2FnZSDigJMgZm9sbG93IHRoZSBmdW5jdGlvbiBjYWxscy4gSSdtIGltYWdpbmluZyBkaWdnaW5nIGludG8gYWxsIHRoZSBjYWxsIHNpdGVzLiBJIHdhbnQgdG8gc2VlIGhvdyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBpcyBpbnZva2VkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uPyBUaGlzIHdpbGwgZ2l2ZSB1cyB2YWx1YWJsZSBjb250ZXh0LiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlZmluZSBvdXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjU3LjkxNDg2NzE0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXG4yNTgxOlxcdFxcdFxcdC8qIGFmdGVyIHRoYXQsIHNlbmQgaW5mb3JtYXRpb24gb2YgZG1hYnVmIHBhZ2VzIHRocm91Z2ggYVxcbjI1ODI6XFx0XFx0XFx0ICogc2VxdWVuY2Ugb2YgY21zZ1xcbjI1ODM6XFx0XFx0XFx0ICovXFxuMjU4NDpcXHRcXHRcXHRtYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pO1xcbjI1ODU6XFx0XFxuMjU4NjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuMjU4NzpcXHRcXHRcXHRcXHRza2JfZnJhZ190ICpmcmFnID0gXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ3NbaV07XFxuMjU4ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcXG4yNTg5OlxcdFxcdFxcdFxcdHU2NCBmcmFnX29mZnNldDtcXG4yNTkwOlxcdFxcdFxcdFxcdGludCBlbmQ7XFxuMjU5MTpcXHRcXG4yNTkyOlxcdFxcdFxcdFxcdC8qICFza2JfZnJhZ3NfcmVhZGFibGUoKSBzaG91bGQgaW5kaWNhdGUgdGhhdCBBTEwgdGhlXFxuMjU5MzpcXHRcXHRcXHRcXHQgKiBmcmFncyBpbiB0aGlzIHNrYiBhcmUgZG1hYnVmIG5ldF9pb3ZzLiBXZSdyZSBjaGVja2luZ1xcbjI1OTQ6XFx0XFx0XFx0XFx0ICogZm9yIHRoYXQgZmxhZyBhYm92ZSwgYnV0IGFsc28gY2hlY2sgaW5kaXZpZHVhbCBmcmFnc1xcbjI1OTU6XFx0XFx0XFx0XFx0ICogaGVyZS4gSWYgdGhlIHRjcCBzdGFjayBpcyBub3Qgc2V0dGluZ1xcbjI1OTY6XFx0XFx0XFx0XFx0ICogc2tiX2ZyYWdzX3JlYWRhYmxlKCkgY29ycmVjdGx5LCB3ZSBzdGlsbCBkb24ndCB3YW50XFxuMjU5NzpcXHRcXHRcXHRcXHQgKiB0byBjcmFzaCBoZXJlLlxcbjI1OTg6XFx0XFx0XFx0XFx0ICovXFxuMjU5OTpcXHRcXHRcXHRcXHRpZiAoIXNrYl9mcmFnX25ldF9pb3YoZnJhZykpIHtcXG4yNjAwOlxcdFxcdFxcdFxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcIkZvdW5kIG5vbi1kbWFidWYgc2tiIHdpdGggbmV0X2lvdlxcXCIpO1xcbjI2MDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4yNjAyOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2MDM6XFx0XFx0XFx0XFx0fVxcbjI2MDQ6XFx0XFxuMjYwNTpcXHRcXHRcXHRcXHRuaW92ID0gc2tiX2ZyYWdfbmV0X2lvdihmcmFnKTtcXG4yNjA2OlxcdFxcdFxcdFxcdGlmICghbmV0X2lzX2Rldm1lbV9pb3YobmlvdikpIHtcXG4yNjA3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuMjYwODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjA5OlxcdFxcdFxcdFxcdH1cXG4yNjEwOlxcdFxcbjI2MTE6XFx0XFx0XFx0XFx0ZW5kID0gc3RhcnQgKyBza2JfZnJhZ19zaXplKGZyYWcpO1xcbjI2MTI6XFx0XFx0XFx0XFx0Y29weSA9IGVuZCAtIG9mZnNldDtcXG4yNjEzOlxcdFxcbjI2MTQ6XFx0XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuMjYxNTpcXHRcXHRcXHRcXHRcXHRjb3B5ID0gbWluKGNvcHksIHJlbWFpbmluZ19sZW4pO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRcXHRcXHRmcmFnX29mZnNldCA9IG5ldF9pb3ZfdmlydHVhbF9hZGRyKG5pb3YpICtcXG4yNjE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYl9mcmFnX29mZihmcmFnKSArIG9mZnNldCAtXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGFydDtcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XFxuMjYyMTpcXHRcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xcbjI2MjI6XFx0XFx0XFx0XFx0XFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcXHUwMDI2dGNwX3hhX3Bvb2wsXFxuMjYyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbWF4X2ZyYWdzKTtcXG4yNjI0OlxcdFxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMjYyNTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjI2OlxcdFxcbjI2Mjc6XFx0XFx0XFx0XFx0XFx0LyogV2lsbCBwZXJmb3JtIHRoZSBleGNoYW5nZSBsYXRlciAqL1xcbjI2Mjg6XFx0XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ190b2tlbiA9IHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdO1xcbjI2Mjk6XFx0XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZG1hYnVmX2lkID0gbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChuaW92KTtcXG4yNjMwOlxcdFxcbjI2MzE6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IGNvcHk7XFxuMjYzMjpcXHRcXHRcXHRcXHRcXHRyZW1haW5pbmdfbGVuIC09IGNvcHk7XFxuMjYzMzpcXHRcXG4yNjM0OlxcdFxcdFxcdFxcdFxcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxcbjI2MzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFNPX0RFVk1FTV9ETUFCVUYsXFxuMjYzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZG1hYnVmX2Ntc2cpO1xcbjI2Mzg6XFx0XFx0XFx0XFx0XFx0aWYgKGVycilcXG4yNjM5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NDA6XFx0XFxuMjY0MTpcXHRcXHRcXHRcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm5pb3YtXFx1MDAzZWRlc2MucHBfcmVmX2NvdW50KTtcXG4yNjQyOlxcdFxcdFxcdFxcdFxcdHRjcF94YV9wb29sLm5ldG1lbXNbdGNwX3hhX3Bvb2wuaWR4KytdID0gc2tiX2ZyYWdfbmV0bWVtKGZyYWcpO1xcbjI2NDM6XFx0XFxuMjY0NDpcXHRcXHRcXHRcXHRcXHRzZW50ICs9IGNvcHk7XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdFxcdFxcdFxcdGlmIChyZW1haW5pbmdfbGVuID09IDApXFxuMjY0NzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQ4OlxcdFxcdFxcdFxcdH1cXG4yNjQ5OlxcdFxcdFxcdFxcdHN0YXJ0ID0gZW5kO1xcbjI2NTA6XFx0XFx0XFx0fVxcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXQoc2ssIFxcdTAwMjZ0Y3BfeGFfcG9vbCk7XFxuMjY1MzpcXHRcXHRcXHRpZiAoIXJlbWFpbmluZ19sZW4pXFxuMjY1NDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0XFx0LyogaWYgcmVtYWluaW5nX2xlbiBpcyBub3Qgc2F0aXNmaWVkIHlldCwgd2UgbmVlZCB0byBnbyB0byB0aGVcXG4yNjU3OlxcdFxcdFxcdCAqIG5leHQgZnJhZyBpbiB0aGUgZnJhZ19saXN0IHRvIHNhdGlzZnkgcmVtYWluaW5nX2xlbi5cXG4yNjU4OlxcdFxcdFxcdCAqL1xcbjI2NTk6XFx0XFx0XFx0c2tiID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnX2xpc3QgPzogc2tiLVxcdTAwM2VuZXh0O1xcbjI2NjA6XFx0XFxuMjY2MTpcXHRcXHRcXHRvZmZzZXQgPSBvZmZzZXQgLSBzdGFydDtcXG4yNjYyOlxcdFxcdH0gd2hpbGUgKHNrYik7XFxuMjY2MzpcXHRcXG4yNjY0OlxcdFxcdGlmIChyZW1haW5pbmdfbGVuKSB7XFxuMjY2NTpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjI2NjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjY2NzpcXHRcXHR9XFxuMjY2ODpcXHRcXG4yNjY5OlxcdG91dDpcXG4yNjcwOlxcdFxcdHRjcF94YV9wb29sX2NvbW1pdChzaywgXFx1MDAyNnRjcF94YV9wb29sKTtcXG4yNjcxOlxcdFxcdGlmICghc2VudClcXG4yNjcyOlxcdFxcdFxcdHNlbnQgPSBlcnI7XFxuMjY3MzpcXHRcXG4yNjc0OlxcdFxcdHJldHVybiBzZW50O1xcbjI2NzU6XFx0fVxcbjI2NzY6XFx0XFxuMjY3NzpcXHQvKlxcbjI2Nzg6XFx0ICpcXHRUaGlzIHJvdXRpbmUgY29waWVzIGZyb20gYSBzb2NrIHN0cnVjdCBpbnRvIHRoZSB1c2VyIGJ1ZmZlci5cXG4yNjc5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjU3LjkxNTA2NjkyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTMwMDQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjay4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyAqY2FsbGVkKiBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yLiBUaGlzIHN1Z2dlc3RzIGVpdGhlciBhIGBncmVwYCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHdpdGhpbiB0aGUgY29kZWJhc2UsIG9yIGEgbW9yZSB0YXJnZXRlZCBjaGVjayBmb3IgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIHRvb2xzIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdpbGwgcXVpY2tseSBpbGx1bWluYXRlIGl0cyByb2xlIGluIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NjEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjAwLjA2ODA3NTMzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3MDEzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9yZWN2bXNnX2RtYWJ1ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTI1LSAqL1xcbm5ldC9pcHY0L3RjcC5jOjI1MjY6c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcC5jLTI1MjctXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjY4NT1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI4ODgtXFxubmV0L2lwdjQvdGNwLmM6Mjg4OTpcXHRcXHRcXHRcXHRlcnIgPSB0Y3BfcmVjdm1zZ19kbWFidWYoc2ssIHNrYiwgb2Zmc2V0LCBtc2csXFxubmV0L2lwdjQvdGNwLmMtMjg5MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgdXNlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjAyLjA1NTA5NTQ2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MzY4ODYwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHRjcF9yZWN2bXNnX2xvY2tlZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLiBNeSBndXQgZmVlbGluZyBzYXlzIHRoYXQgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgcHJvYmFibHkgdHJpZ2dlcmVkIHVuZGVyIHNvbWUgdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDI4ODguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgbG9naWMgYW5kIGlkZW50aWZ5IHRoZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBwYXJ0aWN1bGFyIGNhbGwuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBwbGF5PyBXaGF0IGNoZWNrcyBhcmUgYmVpbmcgcGVyZm9ybWVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNwZWNpZmljIHR5cGUgb2YgYnVmZmVyLCBhIHBhcnRpY3VsYXIgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24sIG9yIG1heWJlIHNvbWUgcmVzb3VyY2UgbGltaXRhdGlvbnM/IEtub3dpbmcgKndoeSogdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBpcyBjYWxsZWQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBwcmVkaWNhdGVzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgZ2V0cyBpbnZva2VkIG9yIGlmIHdlIHRha2UgYSBkaWZmZXJlbnQgYnJhbmNoLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjA0Ljc5MTk4NDYyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODcwOlxcdFxcdFxcdFxcdFxcdGVyciA9IHNrYl9jb3B5X2RhdGFncmFtX21zZyhza2IsIG9mZnNldCwgbXNnLFxcbjI4NzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVzZWQpO1xcbjI4NzI6XFx0XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjI4NzM6XFx0XFx0XFx0XFx0XFx0XFx0LyogRXhjZXB0aW9uLiBCYWlsb3V0ISAqL1xcbjI4NzQ6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCFjb3BpZWQpXFxuMjg3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSAtRUZBVUxUO1xcbjI4NzY6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg3NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjg3ODpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjI4Nzk6XFx0XFx0XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfU09DS19ERVZNRU0pKSB7XFxuMjg4MDpcXHRcXHRcXHRcXHRcXHRcXHQvKiBkbWFidWYgc2ticyBjYW4gb25seSBiZSByZWNlaXZlZFxcbjI4ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICogd2l0aCB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcuXFxuMjg4MjpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4yODgzOlxcdFxcdFxcdFxcdFxcdFxcdGlmICghY29waWVkKVxcbjI4ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVGQVVMVDtcXG4yODg1OlxcdFxcbjI4ODY6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg4NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjg4ODpcXHRcXG4yODg5OlxcdFxcdFxcdFxcdFxcdGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZyxcXG4yODkwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1c2VkKTtcXG4yODkxOlxcdFxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjg5MjpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWNvcGllZClcXG4yODkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvcGllZCA9IGVycjtcXG4yODk0OlxcdFxcbjI4OTU6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg5NjpcXHRcXHRcXHRcXHRcXHR9XFxuMjg5NzpcXHRcXHRcXHRcXHRcXHR1c2VkID0gZXJyO1xcbjI4OTg6XFx0XFx0XFx0XFx0fVxcbjI4OTk6XFx0XFx0XFx0fVxcbjI5MDA6XFx0XFxuMjkwMTpcXHRcXHRcXHRsYXN0X2NvcGllZF9kbWFidWYgPSAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYik7XFxuMjkwMjpcXHRcXG4yOTAzOlxcdFxcdFxcdFdSSVRFX09OQ0UoKnNlcSwgKnNlcSArIHVzZWQpO1xcbjI5MDQ6XFx0XFx0XFx0Y29waWVkICs9IHVzZWQ7XFxuMjkwNTpcXHRcXHRcXHRsZW4gLT0gdXNlZDtcXG4yOTA2OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1TR19QRUVLKVxcbjI5MDc6XFx0XFx0XFx0XFx0c2tfcGVla19vZmZzZXRfZndkKHNrLCB1c2VkKTtcXG4yOTA4OlxcdFxcdFxcdGVsc2VcXG4yOTA5OlxcdFxcdFxcdFxcdHNrX3BlZWtfb2Zmc2V0X2J3ZChzaywgdXNlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjA0Ljc5MjIxMzk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI5NTk0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBUQ1AgUmVjZWl2ZSBQYXRoIHdpdGggRGV2bWVtL0RNQUJVRioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFuZCBkZXZtZW0vZG1hYnVmIFRDUCByZWNlaXZlIG9wZXJhdGlvbnMuIFNpbmNlIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfcmVjdm1zZ2AsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGRyaXZlIHRoZSBiZWhhdmlvciBvZiBkZXZtZW0vZG1hYnVmIG9uIHRoZSByZWNlaXZlIHBhdGguIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlYXJjaCBmb3IgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBjb2RlIHVzYWdlLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgZmV3IGtleSB0ZXJtczogYFNPX0RFVk1FTWAsIGBNU0dfU09DS19ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYE5FVF9ERVZNRU1gLiBUaGF0IHNob3VsZCBjYXN0IGEgd2lkZSBuZXQgYWNyb3NzIEtjb25maWcgZmlsZXMgYW5kIHNvdXJjZSBjb2RlLCBob3BlZnVsbHkgcmV2ZWFsaW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN3aXRjaGVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwYXRocy4gVGhpcyB3aWxsIGd1aWRlIG1lIHRvd2FyZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGF0YSBnZXRzIGhhbmRsZWQgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MDYuOTk1MTc2MTczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc1NzI3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9ERVZNRU18RE1BX1NIQVJFRF9CVUZGRVJ8TVNHX1NPQ0tfREVWTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdD02NT1BbnkgZXhwb3J0ZXJzIG9yIHVzZXJzIG9mIHRoZSBkbWEtYnVmIGJ1ZmZlciBzaGFyaW5nIGZyYW1ld29yayBtdXN0IGhhdmUgYVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdDo2Njonc2VsZWN0IERNQV9TSEFSRURfQlVGRkVSJyBpbiB0aGVpciByZXNwZWN0aXZlIEtjb25maWdzLlxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdC02Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE0Nz1UaGUgdXNlciBhcHBsaWNhdGlvbiBtdXN0IHNpZ25hbCB0byB0aGUga2VybmVsIHRoYXQgaXQgaXMgY2FwYWJsZSBvZiByZWNlaXZpbmdcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxNDg6ZGV2bWVtIGRhdGEgYnkgcGFzc2luZyB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcgdG8gcmVjdm1zZzo6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTQ5LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjE1MDpcXHRyZXQgPSByZWN2bXNnKGZkLCBcXHUwMDI2bXNnLCBNU0dfU09DS19ERVZNRU0pO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE1MS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxNTI6QXBwbGljYXRpb25zIHRoYXQgZG8gbm90IHNwZWNpZnkgdGhlIE1TR19TT0NLX0RFVk1FTSBmbGFnIHdpbGwgcmVjZWl2ZSBhbiBFRkFVTFRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNTMtb24gZGV2bWVtIGRhdGEuXFxuLS1cXG5kcml2ZXJzL01ha2VmaWxlPTc4PW9iai15XFx0XFx0XFx0XFx0Kz0gZGF4L1xcbmRyaXZlcnMvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSArPSBkbWEtYnVmL1xcbmRyaXZlcnMvTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX05VQlVTKVxcdFxcdCs9IG51YnVzL1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc9Nj1jb25maWcgRFJNX0FDQ0VMX0hBQkFOQUxBQlNcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTEyLVxcdHNlbGVjdCBIV01PTlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTE0LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQ9Y29uZmlnIFNZTkNfRklMRVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNi1cXHRkZWZhdWx0IG5cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9MzM9Y29uZmlnIFVETUFCVUZcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM1LVxcdGRlZmF1bHQgblxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNy1cXHRkZXBlbmRzIG9uIE1FTUZEX0NSRUFURSB8fCBDT01QSUxFX1RFU1RcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQzPWNvbmZpZyBETUFCVUZfREVCVUdcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy00NC1cXHRib29sIFxcXCJETUEtQlVGIGRlYnVnIGNoZWNrc1xcXCJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo0NTpcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNDYtXFx0ZGVmYXVsdCB5IGlmIERFQlVHXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1RcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTU0LVxcdGRlcGVuZHMgb24gS1VOSVRcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01Ni1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NjA9bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cXHRib29sIFxcXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1xcXCJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMy1cXHRzZWxlY3QgSTJDXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MTQ6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXFx0c2VsZWN0IFNZTkNfRklMRVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnPTI9Y29uZmlnIERSTV9WSVJUSU9fR1BVXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWctOC1cXHRzZWxlY3QgRFJNX0dFTV9TSE1FTV9IRUxQRVJcXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWc6OTpcXHRzZWxlY3QgVklSVElPX0RNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnLTEwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnPTY9Y29uZmlnIFRFR1JBX0hPU1QxWFxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cXHRkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc6OTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZy0xMC1cXHRzZWxlY3QgVEVHUkFfSE9TVDFYX0NPTlRFWFRfQlVTXFxuLS1cXG5kcml2ZXJzL2lpby9LY29uZmlnPTE1PWNvbmZpZyBJSU9fQlVGRkVSXFxuZHJpdmVycy9paW8vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgYnVmZmVyIHN1cHBvcnQgd2l0aGluIElJT1xcXCJcXG5kcml2ZXJzL2lpby9LY29uZmlnOjE3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaWlvL0tjb25maWctMTgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9Mj1tZW51Y29uZmlnIElORklOSUJBTkRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiAhQUxQSEFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTktXFx0c2VsZWN0IElSUV9QT0xMXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz00ND1jb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDctXFx0ZGVwZW5kcyBvbiBNTVVcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnPTUxPWNvbmZpZyBJT01NVUZEX1RFU1RcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTU2LVxcdGRlcGVuZHMgb24gSU9NTVVfUFRfQU1EVjE9eSB8fCBJT01NVUZEPUlPTU1VX1BUX0FNRFYxXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTgtXFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmM9NDgyPWludCBpb3B0X21hcF9maWxlX3BhZ2VzKHN0cnVjdCBpb21tdWZkX2N0eCAqaWN0eCwgc3RydWN0IGlvX3BhZ2V0YWJsZSAqaW9wdCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuYy00OTctXFx0c3RhcnRfYnl0ZSA9IHN0YXJ0IC0gQUxJR05fRE9XTihzdGFydCwgUEFHRV9TSVpFKTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmM6NDk4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5jLTQ5OS1cXHRcXHRkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmg9MjUxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb3B0X2lzX2RtYWJ1ZihzdHJ1Y3QgaW9wdF9wYWdlcyAqcGFnZXMpXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5oLTI1Mi17XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5oOjI1MzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmgtMjU0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTE1Mjc9c3RydWN0IGlvcHRfcGFnZXMgKmlvcHRfYWxsb2NfZG1hYnVmX3BhZ2VzKHN0cnVjdCBpb21tdWZkX2N0eCAqaWN0eCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTE1MzYtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MTUzNzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0xNTM4LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTM9Y29uZmlnIFZJREVPQlVGMl9DT1JFXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6NDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy01LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0xMz1jb25maWcgVklERU9CVUYyX0RNQV9DT05USUdcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVxcdHNlbGVjdCBWSURFT0JVRjJfTUVNT1BTXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTgtXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTk9Y29uZmlnIFZJREVPQlVGMl9WTUFMTE9DXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yMi1cXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTI0LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc9MT1jb25maWcgVklERU9fVEVHUkFfVkRFXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVxcdGRlcGVuZHMgb24gVklERU9fREVWXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy04LVxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0yNjY9Y29uZmlnIFFDT01fRkFTVFJQQ1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMjY5LVxcdGRlcGVuZHMgb24gUlBNU0dcXG5kcml2ZXJzL21pc2MvS2NvbmZpZzoyNzA6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9taXNjL0tjb25maWctMjcxLVxcdHNlbGVjdCBRQ09NX1NDTVxcbi0tXFxuZHJpdmVycy90ZWUvS2NvbmZpZz0zPW1lbnVjb25maWcgVEVFXFxuLS1cXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbmRyaXZlcnMvdGVlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL3RlZS9LY29uZmlnLTgtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0xOTI9Y29uZmlnIFVTQl9GX0ZTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTkzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE5NC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTU4PWNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTk6XFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNjAtXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnPTE2Mz1jb25maWcgVklSVElPX01NSU9fQ01ETElORV9ERVZJQ0VTXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjE3NDpjb25maWcgVklSVElPX0RNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjE3NjpcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xNzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1ZJUlRJT19NRU0pICs9IHZpcnRpb19tZW0ub1xcbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19WSVJUSU9fRE1BX1NIQVJFRF9CVUZGRVIpICs9IHZpcnRpb19kbWFfYnVmLm9cXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfVklSVElPX0RFQlVHKSArPSB2aXJ0aW9fZGVidWcub1xcbi0tXFxuZHJpdmVycy94ZW4vS2NvbmZpZz0xNDU9Y29uZmlnIFhFTl9HTlRERVZfRE1BQlVGXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cXHRkZXBlbmRzIG9uIFhFTl9HTlRERVYgXFx1MDAyNlxcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xcbmRyaXZlcnMveGVuL0tjb25maWc6MTQ4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVxcdGhlbHBcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ja2V0Lmg9MTk3PXN0cnVjdCB1Y3JlZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0My1cXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oOjM0NDojZGVmaW5lIE1TR19TT0NLX0RFVk1FTSAweDIwMDAwMDBcXHQvKiBSZWNlaXZlIGRldm1lbSBza2JzIGFzIGNtc2cgKi9cXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0NS0jZGVmaW5lIE1TR19aRVJPQ09QWVxcdDB4NDAwMDAwMFxcdC8qIFVzZSB1c2VyIGRhdGEgaW4ga2VybmVsIHBhdGggKi9cXG4tLVxcbmluY2x1ZGUvbmV0L25ldG1lbS5oPTM2MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0bWVtX2dldF9kbWFfYWRkcihuZXRtZW1fcmVmIG5ldG1lbSlcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG1lbS5oLTM2NS1cXG5pbmNsdWRlL25ldC9uZXRtZW0uaDozNjY6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxuaW5jbHVkZS9uZXQvbmV0bWVtLmgtMzY3LXN0YXRpYyBpbmxpbmUgYm9vbCBuZXRfaXNfZGV2bWVtX2lvdihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0xMzA9c3RhdGljIHZvaWQgaW9fdW5tYXBfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbmlvX3VyaW5nL3pjcnguYy0xMzEte1xcbmlvX3VyaW5nL3pjcnguYzoxMzI6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuaW9fdXJpbmcvemNyeC5jLTEzMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTQzPXN0YXRpYyB2b2lkIGlvX3JlbGVhc2VfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbmlvX3VyaW5nL3pjcnguYy0xNDQte1xcbmlvX3VyaW5nL3pjcnguYzoxNDU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuaW9fdXJpbmcvemNyeC5jLTE0Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTUyPXN0YXRpYyBpbnQgaW9faW1wb3J0X2RtYWJ1ZihzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xNjYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvemNyeC5jOjE2NzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG5pb191cmluZy96Y3J4LmMtMTY4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT02Nj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NzppZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0Mj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDMtI2VuZGlmXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk0NDojaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk0NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5uZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcbm5ldC9LY29uZmlnLTcxLVxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbm5ldC9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG5uZXQvS2NvbmZpZy03My1cXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX05FVF9URVNUKSArPSBuZXRfdGVzdC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICs9IGRldm1lbS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNTMtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgKz0gbG9ja19kZWJ1Zy5vXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaC05LSAqL1xcbm5ldC9jb3JlL2Rldm1lbS5oOjEwOiNpZm5kZWYgX05FVF9ERVZNRU1fSFxcbm5ldC9jb3JlL2Rldm1lbS5oOjExOiNkZWZpbmUgX05FVF9ERVZNRU1fSFxcbm5ldC9jb3JlL2Rldm1lbS5oLTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTg9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmgtNzgtXFxubmV0L2NvcmUvZGV2bWVtLmg6Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxubmV0L2NvcmUvZGV2bWVtLmgtODAtLyogT3duZXIgb2YgdGhlIGRtYS1idWYgY2h1bmtzIGluc2VydGVkIGludG8gdGhlIGdlbiBwb29sLiBFYWNoIHNjYXR0ZXJsaXN0XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yNDI9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oLTI0Ny1cXG5uZXQvY29yZS9kZXZtZW0uaDoyNDg6I2VuZGlmIC8qIF9ORVRfREVWTUVNX0ggKi9cXG4tLVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xMi1cXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MTM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTE0LWludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNjg1PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjg3OC1cXHRcXHRcXHR9IGVsc2Uge1xcbm5ldC9pcHY0L3RjcC5jOjI4Nzk6XFx0XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfU09DS19ERVZNRU0pKSB7XFxubmV0L2lwdjQvdGNwLmMtMjg4MC1cXHRcXHRcXHRcXHRcXHQvKiBkbWFidWYgc2ticyBjYW4gb25seSBiZSByZWNlaXZlZFxcbm5ldC9pcHY0L3RjcC5jOjI4ODE6XFx0XFx0XFx0XFx0XFx0ICogd2l0aCB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcuXFxubmV0L2lwdjQvdGNwLmMtMjg4Mi1cXHRcXHRcXHRcXHRcXHQgKi9cXG4tLVxcbnJ1c3QvaGVscGVycy9oZWxwZXJzLmMtNTktI2luY2x1ZGUgXFxcImRtYS5jXFxcIlxcbnJ1c3QvaGVscGVycy9oZWxwZXJzLmM6NjA6I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxcbnJ1c3QvaGVscGVycy9oZWxwZXJzLmMtNjEtI2luY2x1ZGUgXFxcImRtYS1yZXN2LmNcXFwiXFxuLS1cXG5zYW1wbGVzL0tjb25maWc9MjMwPWNvbmZpZyBTQU1QTEVfVkZJT19NREVWX01CT0NIU1xcbi0tXFxuc2FtcGxlcy9LY29uZmlnLTIzMy1cXHRzZWxlY3QgVkZJT19NREVWXFxuc2FtcGxlcy9LY29uZmlnOjIzNDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5zYW1wbGVzL0tjb25maWctMjM1LVxcdGhlbHBcXG4tLVxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZz02PWNvbmZpZyBTTkRfU09DX0ZTTF9BU1JDXFxuLS1cXG5zb3VuZC9zb2MvZnNsL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIEhBU19ETUFcXG5zb3VuZC9zb2MvZnNsL0tjb25maWc6OTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5zb3VuZC9zb2MvZnNsL0tjb25maWctMTAtXFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oPTE5Nz1zdHJ1Y3QgdWNyZWQge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zNDMtXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaDozNDQ6I2RlZmluZSBNU0dfU09DS19ERVZNRU0gMHgyMDAwMDAwXFx0LyogUmVjZWl2ZSBkZXZtZW0gc2ticyBhcyBjbXNnICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zNDUtI2RlZmluZSBNU0dfWkVST0NPUFlcXHQweDQwMDAwMDBcXHQvKiBVc2UgdXNlciBkYXRhIGluIGtlcm5lbCBwYXRoICovXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYy0xNS0jZW5kaWZcXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYzoxNjojaWZuZGVmIE1TR19TT0NLX0RFVk1FTVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L21zZ19mbGFncy5jOjE3OiNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNXFx0XFx0IDB4MjAwMDAwMFxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L21zZ19mbGFncy5jLTE4LSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvY29uZmlnPTE3PUNPTkZJR19ORVRfQ0xTX0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvY29uZmlnOjE4OkNPTkZJR19ORVRfREVWTUVNPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9jb25maWctMTktQ09ORklHX05FVF9JUEdSRT15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTg1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6ODY6I2lmbmRlZiBNU0dfU09DS19ERVZNRU1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjg3OiNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtODgtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05NjEtXFx0XFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGN0cmxfZGF0YSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzo5NjI6XFx0XFx0cmV0ID0gcmVjdm1zZyhjbGllbnRfZmQsIFxcdTAwMjZtc2csIE1TR19TT0NLX0RFVk1FTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05NjMtXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJyZWN2bXNnIHJldD0lbGRcXFxcblxcXCIsIHJldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjA5LjY3MDkwOTc1MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQyOTQ2ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBEZXZtZW0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGRldm1lbSBzaXR1YXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY29uZmlndXJhdGlvbiBhbmQgb3ZlcmFsbCByZWFjaGFiaWxpdHkgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGFjdGl2ZWx5IGJlaW5nIHVzZWQ/IENhbiBpdCBiZSB0cmlnZ2VyZWQgaW4gYSB3YXkgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBwcm9ibGVtLCB3aGV0aGVyIHRocm91Z2ggZGlyZWN0IG1lbW9yeSBhY2Nlc3Mgb3IgdGhyb3VnaCBhIHJlbGF0ZWQgbWVjaGFuaXNtIGxpa2UgYGRtYWJ1ZmAgb3ZlciBUQ1A/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLlxuXG5TbywgSSdsbCBpbW1lZGlhdGVseSBzdGFydCBzY2FubmluZyB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBnb2luZyB0byBodW50IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBORVRfREVWTUVNYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGRldm1lbS1yZWxhdGVkIHNrYnVmZnMsIGlmIHRoZXkgZXZlbiBleGlzdCBpbiB0aGlzIGNvbnRleHQsIGFyZSBnZW5lcmF0ZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byBncmFzcCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBjb250cm9sbGluZyBkZXZtZW0ncyBiZWhhdmlvciDigJMgaG93IGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGlzIG1hcHBlZCBhbmQgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBhYnNvbHV0ZWx5IGtleSB0byBmaWd1cmluZyBvdXQgaG93LCBvciBpZiwgaXQncyBpbXBhY3RpbmcgdGhpbmdzLiBJdCdzIGFsbCBhYm91dCBmb2xsb3dpbmcgdGhlIGRhdGEgZmxvdyBhbmQgZmlndXJpbmcgb3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcG9pbnRzIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ1OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjEyLjUxMzg1OTI2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MTQ2MjE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT19ERVZNRU1fXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIwNy1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMDg6QXBwbGljYXRpb25zIG1heSByZWNlaXZlIG5vIFNPX0RFVk1FTV8qIGNtc2dzLiBUaGF0IGluZGljYXRlcyBub24tZGV2bWVtLFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIwOS1yZWd1bGFyIFRDUCBkYXRhIHRoYXQgbGFuZGVkIG9uIGFuIFJYIHF1ZXVlIG5vdCBib3VuZCB0byBhIGRtYWJ1Zi5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTIxNj1wcm9jZXNzZXMgdGhlIGZyYWcuIFRoZSB1c2VyIG11c3QgcmV0dXJuIHRoZSBmcmFnIHRvIHRoZSBrZXJuZWwgdmlhXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjE3OlNPX0RFVk1FTV9ET05UTkVFRDo6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE4LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIxOTpcXHRyZXQgPSBzZXRzb2Nrb3B0KGNsaWVudF9mZCwgU09MX1NPQ0tFVCwgU09fREVWTUVNX0RPTlRORUVELCBcXHUwMDI2dG9rZW4sXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjIwLVxcdFxcdFxcdCBzaXplb2YodG9rZW4pKTtcXG4tLVxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDItXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MzojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQ3OFxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDQ6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUlxcdFNPX0RFVk1FTV9MSU5FQVJcXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQ1OiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0NjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDc6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDgtXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNTMtXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU0OiNkZWZpbmUgU09fREVWTUVNX0xJTkVBUlxcdDc4XFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU1OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcXHRTT19ERVZNRU1fTElORUFSXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU2OiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU3OiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcXHRTT19ERVZNRU1fRE1BQlVGXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU4OiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXFx0ODBcXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNTktXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTEzOC1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzOTojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQweDQwNEVcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MDojZGVmaW5lIFNDTV9ERVZNRU1fTElORUFSXFx0U09fREVWTUVNX0xJTkVBUlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQxOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDB4NDA0RlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQyOiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcXHRTT19ERVZNRU1fRE1BQlVGXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDM6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQweDQwNTBcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0NC1cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xMzUtXFxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzNjojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVIgICAgICAgICAweDAwNTdcXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTM3OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVIgICAgICAgIFNPX0RFVk1FTV9MSU5FQVJcXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTM4OiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRiAgICAgICAgIDB4MDA1OFxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDA6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRUQgICAgICAgMHgwMDU5XFxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0MS1cXG4tLVxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xMzctXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQ3OFxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUlxcdFNPX0RFVk1FTV9MSU5FQVJcXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQwOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDI6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDMtXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MTAzMD1zdGF0aWMgaW50IHNvY2tfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMTA3Ni1cXG5uZXQvY29yZS9zb2NrLmM6MTA3NzovKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgdG9rZW5zIGFuZCBmcmFncyB0aGF0IHRoZSB1c2VyIGNhbiBTT19ERVZNRU1fRE9OVE5FRURcXG5uZXQvY29yZS9zb2NrLmMtMTA3OC0gKiBpbiAxIHN5c2NhbGwuIFRoZSBsaW1pdCBleGlzdHMgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhlIGtlcm5lbFxcbi0tXFxubmV0L2NvcmUvc29jay5jPTExOTQ9aW50IHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTEyOTctI2lmZGVmIENPTkZJR19QQUdFX1BPT0xcXG5uZXQvY29yZS9zb2NrLmM6MTI5ODpcXHRjYXNlIFNPX0RFVk1FTV9ET05UTkVFRDpcXG5uZXQvY29yZS9zb2NrLmMtMTI5OS1cXHRcXHRyZXR1cm4gc29ja19kZXZtZW1fZG9udG5lZWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI1MjY9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjU2OC1cXHRcXHRcXHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcXG5uZXQvaXB2NC90Y3AuYzoyNTY5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBTT19ERVZNRU1fTElORUFSLFxcbm5ldC9pcHY0L3RjcC5jLTI1NzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNjM0LVxcdFxcdFxcdFxcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxcbm5ldC9pcHY0L3RjcC5jOjI2MzU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFNPX0RFVk1FTV9ETUFCVUYsXFxubmV0L2lwdjQvdGNwLmMtMjYzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xMzctXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQ3OFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUlxcdFNPX0RFVk1FTV9MSU5FQVJcXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQwOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDI6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQyLVxcdFxcdFxcdHJldCA9IHNldHNvY2tvcHQoY2xpZW50X2ZkLCBTT0xfU09DS0VULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTA0MzpcXHRcXHRcXHRcXHRcXHQgU09fREVWTUVNX0RPTlRORUVELCBcXHUwMDI2dG9rZW4sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQ0LVxcdFxcdFxcdFxcdFxcdCBzaXplb2YodG9rZW4pKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwNDUtXFx0XFx0XFx0aWYgKHJldCAhPSAxKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDQ2OlxcdFxcdFxcdFxcdHByX2VycihcXFwiU09fREVWTUVNX0RPTlRORUVEIG5vdCBlbm91Z2ggdG9rZW5zXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQ3LVxcdFxcdFxcdFxcdGdvdG8gZXJyX2Nsb3NlX2NsaWVudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MTQuMTk1MzI4ODY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTE4NjU0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgbmV0X2Rldm1lbWAgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IG1hcHBpbmcgdGhlIG92ZXJhbGwgbGFuZHNjYXBlIOKAkyBpcyBpdCBwcmltYXJpbHkgZHJpdmVuIGJ5IE5ldGxpbmsgY29tbWFuZHMsIGFyZSB0aGVyZSBrZXkgc29ja2V0IG9wdGlvbnMgaW52b2x2ZWQsIG9yIGRvZXMgaXQgbGV2ZXJhZ2Ugc29tZXRoaW5nIGxpa2UgYHVkbWFidWZgIGZvciBkaXJlY3QgbWVtb3J5IGFjY2Vzcz8gSG93IGlzIHRoZSB3aG9sZSBgbmV0ZGV2IGRtYWJ1ZmAgYmluZGluZyBoYW5kbGVkIGluIHRoZSBuZXR3b3JrIHN0YWNrP1xuXG5UbyBnZXQgYSBjb25jcmV0ZSBzdGFydGluZyBwb2ludCwgSSdsbCBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGBkZXZtZW0uY2Agd2l0aGluIHRoZSBgbmV0L2NvcmUvYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5ldHdvcmsgZGV2aWNlcy4gSXQgd2lsbCBsaWtlbHkgaG9sZCB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIGludGVyZmFjZSwgYW5kIHRoZW4gSSBjYW4gdHJhY2UgZnJvbSB0aGVyZSB0byB0aGUgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzLiBJdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzoxNy44ODcxOTc0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0OTIzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjE1NjppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9MTg4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uYzoxODk6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5jLTE5MC1cXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTk0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDo5NTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtOTYtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xMDI9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uaC0xMDQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE3ODpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtMTc5LVxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTk5PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L2NvcmUvZGV2bWVtLmg6MjAwOm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTQtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDk1OlxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5Ni1cXHRcXHRcXHRcXHRcXHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVxcdGZvcl9lYWNoX3NldF9iaXQocnhxX2lkeCwgcnhxX2JpdG1hcCwgbmV0ZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XFx0XFx0ZXJyID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShuZXRkZXYsIHJ4cV9pZHgsIGJpbmRpbmcsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExNzE9aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzNi1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEyMzc6XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM4LVxcdFxcdFxcdFxcdFxcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzoxNy45NjM2OTQ3MzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgwMjcxMTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgbmV0L2lwdjQvdGNwLmNgIGlzIG1vZGlmeWluZyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBhbmQgYWRkaW5nIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGNoYW5naW5nIGFuZCBpZiBpdCBtZXJpdHMgZnV6emluZy5cblxuVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIGBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgLSBpYCB3aXRoIHRoZSBvdXRwdXQgZnJvbSB0aGlzIG5ldyBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCBmdW5jdGlvbiBhcyB0aGUgcmVmaWxsIHNpemUgZm9yIHRoZSBYQSBwb29sLiAgU28sIHdlIGFyZSBnb2luZyBmcm9tIGEgc3RhdGljIGNhbGN1bGF0aW9uIHRvIGEgZHluYW1pYyBjYWxjdWxhdGlvbi4gIE1ha2VzIHNlbnNlIGZvciBtb3JlIHJvYnVzdCBjb250cm9sLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUQ1AgYW5kIGRtYWJ1ZiAoemVyby1jb3B5IHJlY2VpdmUpLiBTeXprYWxsZXIgY2FuLCBhbmQgKmRvZXMqLCB0YXJnZXQgc29ja2V0cywgbmV0bGluaywgYHJlY3Ztc2coLi4uLCBNU0dfU09DS19ERVZNRU0pYCwgYW5kIFRDUCBpbiBnZW5lcmFsLiBUaGUgZ3VpZGVsaW5lIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgXCJjb3JlIG5ldHdvcmtpbmdcIiBtb2RpZmljYXRpb25zIGFyZSBhIHBvc2l0aXZlIHNpZ25hbC4gQmluZ28gLSB0aGlzIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBcIkZvY3VzU3ltYm9sc1wiLiBUaGUgY2VudHJhbCBmb2N1cyBpcyBvbiB3aGF0IGlzIGFjdHVhbGx5IGFkZGVkIG9yIGFsdGVyZWQgaW4gdGhlIHBhdGNoLiBJJ20gbG9va2luZyBhdDpcbiogICBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYDogVGhpcyBpcyBuZXc7IGRlZmluaXRlbHkgb24gdGhlIGxpc3QuXG4qICAgYHRjcF9yZWN2bXNnX2RtYWJ1ZmA6IFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQ7IGl0IG11c3QgYmUgaW5jbHVkZWQuXG4qICAgUG90ZW50aWFsbHkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcC5jYCwgbGlrZSBgdGNwX3hhX3Bvb2xfcmVmaWxsYC5cblxuTGV0J3Mgbm90IGp1bXAgdG8gbWFraW5nIHRoaXMgdG9vIGJyb2FkIGJ5IGluY2x1ZGluZyB0aGUgdWJpcXVpdG91cyBgdGNwX3JlY3Ztc2dgIGFzIHRoYXQgd2lsbCBkZXRyYWN0IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLiBJbnN0ZWFkLCBsZXQncyBpZGVudGlmeSBmZWF0dXJlcyBzcGVjaWZpYyB0byBkbWFidWYgYW5kIHRoZSB4YSBwb29sLlxuXG5TbywgbGV0J3Mga2VlcCB0aGUgZm9jdXMgb24gYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBhbmQgcG9zc2libHkgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQncyBtYWtlIHN1cmUgdG8ga2VlcCB0aGlzIHRhcmdldGVkLlxuXG5JJ20gcHJldHR5IGNvbmZpZGVudCBpbiB0aG9zZSBjaG9pY2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC90Y3AuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBJIG1pZ2h0IGhhdmUgbWlzc2VkLCBidXQgSSBoYXZlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzoyNS43NjY0MDkzOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NTA6XFx0XFx0XFx0XFx0ICAgICAoX19mb3JjZSB2b2lkICopcC1cXHUwMDNlbmV0bWVtc1tpXSwgR0ZQX0tFUk5FTCk7XFxuMjQ1MTpcXHRcXHQvKiBSb2xsYmFjayB3aGF0IGhhcyBiZWVuIHByZS1hbGxvY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuICovXFxuMjQ1MjpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIHAtXFx1MDAzZW1heDsgaSsrKVxcbjI0NTM6XFx0XFx0XFx0X194YV9lcmFzZShcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXFx1MDAzZXRva2Vuc1tpXSk7XFxuMjQ1NDpcXHRcXG4yNDU1OlxcdFxcdHAtXFx1MDAzZW1heCA9IDA7XFxuMjQ1NjpcXHRcXHRwLVxcdTAwM2VpZHggPSAwO1xcbjI0NTc6XFx0fVxcbjI0NTg6XFx0XFxuMjQ1OTpcXHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXFxuMjQ2MDpcXHR7XFxuMjQ2MTpcXHRcXHRpZiAoIXAtXFx1MDAzZW1heClcXG4yNDYyOlxcdFxcdFxcdHJldHVybjtcXG4yNDYzOlxcdFxcbjI0NjQ6XFx0XFx0eGFfbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0NjU6XFx0XFxuMjQ2NjpcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcXG4yNDY3OlxcdFxcbjI0Njg6XFx0XFx0eGFfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncyk7XFxuMjQ2OTpcXHR9XFxuMjQ3MDpcXHRcXG4yNDcxOlxcdHN0YXRpYyBpbnQgdGNwX3hhX3Bvb2xfcmVmaWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwLFxcbjI0NzI6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heF9mcmFncylcXG4yNDczOlxcdHtcXG4yNDc0OlxcdFxcdGludCBlcnIsIGs7XFxuMjQ3NTpcXHRcXG4yNDc2OlxcdFxcdGlmIChwLVxcdTAwM2VpZHggXFx1MDAzYyBwLVxcdTAwM2VtYXgpXFxuMjQ3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNDc4OlxcdFxcbjI0Nzk6XFx0XFx0eGFfbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0ODA6XFx0XFxuMjQ4MTpcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcXG4yNDgyOlxcdFxcbjI0ODM6XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIG1heF9mcmFnczsgaysrKSB7XFxuMjQ4NDpcXHRcXHRcXHRlcnIgPSBfX3hhX2FsbG9jKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncywgXFx1MDAyNnAtXFx1MDAzZXRva2Vuc1trXSxcXG4yNDg1OlxcdFxcdFxcdFxcdFxcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xcbjI0ODY6XFx0XFx0XFx0aWYgKGVycilcXG4yNDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0ODg6XFx0XFx0fVxcbjI0ODk6XFx0XFxuMjQ5MDpcXHRcXHR4YV91bmxvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDkxOlxcdFxcbjI0OTI6XFx0XFx0cC1cXHUwMDNlbWF4ID0gaztcXG4yNDkzOlxcdFxcdHAtXFx1MDAzZWlkeCA9IDA7XFxuMjQ5NDpcXHRcXHRyZXR1cm4gayA/IDAgOiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjI1Ljc2NzIzMTYzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTA0MzQ0NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1AgRE1BIEJ1ZmZlciBSZWNlcHRpb24gQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlcGVuZGVuY2llcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYC4gVGhlIGZpcnN0IHRoaW5nIEknbSBjaGVja2luZyBpcyB3aGV0aGVyIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgdGhlc2UsIG9yIGlmIHRoZXkncmUgaW5kZXBlbmRlbnQgZnVuY3Rpb25zLiBJZiBpbmxpbmluZyBpcyBwb3NzaWJsZSwgdGhhdCBhZmZlY3RzIGhvdyBJIHRoaW5rIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy5cblxuRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJJ2xsIHZlcmlmeSBpZiBpdCdzIHNvbGVseSBjYWxsZWQgd2l0aGluIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSwgZ2l2ZW4gdGhlIGNhbGwgaGVyZTogYGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZywgdXNlZCk7YCBBbmQsIGFzIGV4cGVjdGVkLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCB0aGVuIGNhbGxzIHRob3NlIHBvb2wgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGJlZm9yZSAtIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYC5cblxuTm93LCBJJ20gZ29pbmcgdG8gY29uc3VsdCB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMuIEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhpcyBzdWJzeXN0ZW0uIFRoZSBsaXN0ZWQgZnVuY3Rpb25zLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYCBsb29rIGxpa2UgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHNvIHRoYXQgY2hlY2tzIG91dC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgRW5hYmxlQ29uZmlncy4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gYmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkPyBJJ2xsIGNoZWNrIGBuZXQvaXB2NC90Y3AuY2AgYW5kIEtjb25maWcgdG8gZmlndXJlIHRoYXQgb3V0LiBGaXJzdCwgaXMgYG5ldC9pcHY0L3RjcC5jYCBjb21waWxlZCB3aXRoIGBDT05GSUdfSU5FVGA/IEFuZCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gcnVsZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjI5LjY3MTU3OTMxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5MjgzMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU1OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEwOlxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTExLVxcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTItXFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEzOlxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICs9IHRjcF9jdWJpYy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RDUF9DT05HX0RDVENQKSArPSB0Y3BfZGN0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTUyLW9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgKz0gdGNwX3dlc3R3b29kLm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTU0PW9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgKz0gdGNwX2h5YmxhLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgKz0gdGNwX2h0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgKz0gdGNwX3ZlZ2FzLm9cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI3MT12b2lkIGluZXRfY3NrX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEyODctXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMjg4OlxcdHRjcF9vcnBoYW5fY291bnRfZGVjKCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjg5LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMjkzPXZvaWQgaW5ldF9jc2tfcHJlcGFyZV9mb3JfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI5Ny1cXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTI5ODpcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI5OS19XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzNjk9c3RhdGljIHZvaWQgaW5ldF9jaGlsZF9mb3JnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzNzUtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzc2OlxcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzc3LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmM9NzQ1PWJvb2wgaW5ldF9laGFzaF9ub2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpvc2ssIGJvb2wgKmZvdW5kX2R1cF9zaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTc1MS1cXHR9IGVsc2Uge1xcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jOjc1MjpcXHRcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTc1My1cXHRcXHRpbmV0X3NrX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG4tLVxcbm5ldC9pcHY0L3Byb2MuYz01MT1zdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjQvcHJvYy5jLTU1LVxcbm5ldC9pcHY0L3Byb2MuYzo1NjpcXHRvcnBoYW5zID0gdGNwX29ycGhhbl9jb3VudF9zdW0oKTtcXG5uZXQvaXB2NC9wcm9jLmMtNTctXFx0c29ja2V0cyA9IHByb3RvX3NvY2tldHNfYWxsb2NhdGVkX3N1bV9wb3NpdGl2ZShcXHUwMDI2dGNwX3Byb3QpO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQ2PXN0YXRpYyB1MzIgY29va2llX2hhc2goX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTU2LSAqIHdoZW4gc3luY29va2llcyBhcmUgaW4gZWZmZWN0IGFuZCB0Y3AgdGltZXN0YW1wcyBhcmUgZW5hYmxlZCB3ZSBlbmNvZGVcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NTc6ICogdGNwIG9wdGlvbnMgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlIHRpbWVzdGFtcCB2YWx1ZSB0aGF0IHdpbGwgYmVcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNTgtICogc2VudCBpbiB0aGUgc3luLWFjay5cXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIyOC0gKiB3aGVuIHN5bmNvb2tpZXMgYXJlIGluIGVmZmVjdCBhbmQgdGNwIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQgd2Ugc3RvcmVkXFxubmV0L2lwdjQvc3luY29va2llcy5jOjIyOTogKiBhZGRpdGlvbmFsIHRjcCBvcHRpb25zIGluIHRoZSB0aW1lc3RhbXAuXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzMC0gKiBUaGlzIGV4dHJhY3RzIHRoZXNlIG9wdGlvbnMgZnJvbSB0aGUgdGltZXN0YW1wIGVjaG8uXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzMS0gKlxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMzI6ICogcmV0dXJuIGZhbHNlIGlmIHdlIGRlY29kZSBhIHRjcCBvcHRpb24gdGhhdCBpcyBkaXNhYmxlZFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMzMtICogb24gdGhlIGhvc3QuXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjM1PWJvb2wgY29va2llX3RpbWVzdGFtcF9kZWNvZGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMzY6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnRjcF9vcHQpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzNy17XFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzOC1cXHQvKiBlY2hvZWQgdGltZXN0YW1wLCBsb3dlc3QgYml0cyBjb250YWluIG9wdGlvbnMgKi9cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjM5OlxcdHUzMiBvcHRpb25zID0gdGNwX29wdC1cXHUwMDNlcmN2X3RzZWNyO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNDAtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjI0MTpcXHRpZiAoIXRjcF9vcHQtXFx1MDAzZXNhd190c3RhbXApICB7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjI0MjpcXHRcXHR0Y3BfY2xlYXJfb3B0aW9ucyh0Y3Bfb3B0KTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTI0OC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjQ5OlxcdHRjcF9vcHQtXFx1MDAzZXNhY2tfb2sgPSAob3B0aW9ucyBcXHUwMDI2IFRTX09QVF9TQUNLKSA/IFRDUF9TQUNLX1NFRU4gOiAwO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTAtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjI1MTpcXHRpZiAodGNwX29wdC1cXHUwMDNlc2Fja19vayBcXHUwMDI2XFx1MDAyNiAhUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3NhY2spKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTI1Ni1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjU3OlxcdHRjcF9vcHQtXFx1MDAzZXdzY2FsZV9vayA9IDE7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjI1ODpcXHR0Y3Bfb3B0LVxcdTAwM2VzbmRfd3NjYWxlID0gb3B0aW9ucyBcXHUwMDI2IFRTX09QVF9XU0NBTEVfTUFTSztcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjU5LVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTMxOD1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMjA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdCxcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzIxLVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgbXNzLCB1MzIgdHNvZmYpXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzQzLVxcdHJlcS1cXHUwMDNlbXNzID0gbXNzO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDQ6XFx0cmVxLVxcdTAwM2V0c19yZWNlbnQgPSB0Y3Bfb3B0LVxcdTAwM2VzYXdfdHN0YW1wID8gdGNwX29wdC1cXHUwMDNlcmN2X3RzdmFsIDogMDtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzQ1LVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDY6XFx0aXJlcS1cXHUwMDNlc25kX3dzY2FsZSA9IHRjcF9vcHQtXFx1MDAzZXNuZF93c2NhbGU7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM0NzpcXHRpcmVxLVxcdTAwM2V0c3RhbXBfb2sgPSB0Y3Bfb3B0LVxcdTAwM2VzYXdfdHN0YW1wO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDg6XFx0aXJlcS1cXHUwMDNlc2Fja19vayA9IHRjcF9vcHQtXFx1MDAzZXNhY2tfb2s7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM0OTpcXHRpcmVxLVxcdTAwM2V3c2NhbGVfb2sgPSB0Y3Bfb3B0LVxcdTAwM2V3c2NhbGVfb2s7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM1MDpcXHRpcmVxLVxcdTAwM2VlY25fb2sgPSAhISh0Y3Bfb3B0LVxcdTAwM2VyY3ZfdHNlY3IgXFx1MDAyNiBUU19PUFRfRUNOKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzUxLVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNjAte1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNjE6XFx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRjcF9vcHQ7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM2Mi1cXHR1MzIgdHNvZmYgPSAwO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM3Ni1cXHQvKiBjaGVjayBmb3IgdGltZXN0YW1wIGNvb2tpZSBzdXBwb3J0ICovXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM3NzpcXHRtZW1zZXQoXFx1MDAyNnRjcF9vcHQsIDAsIHNpemVvZih0Y3Bfb3B0KSk7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM3ODpcXHR0Y3BfcGFyc2Vfb3B0aW9ucyhuZXQsIHNrYiwgXFx1MDAyNnRjcF9vcHQsIDAsIE5VTEwpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNzktXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM4MDpcXHRpZiAodGNwX29wdC5zYXdfdHN0YW1wIFxcdTAwMjZcXHUwMDI2IHRjcF9vcHQucmN2X3RzZWNyKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM4MS1cXHRcXHR1bmlvbiB0Y3Bfc2VxX2FuZF90c19vZmYgc3Q7XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzg4LVxcdFxcdHRzb2ZmID0gc3QudHNfb2ZmO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozODk6XFx0XFx0dGNwX29wdC5yY3ZfdHNlY3IgLT0gdHNvZmY7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5MC1cXHR9XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5MS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzkyOlxcdGlmICghY29va2llX3RpbWVzdGFtcF9kZWNvZGUobmV0LCBcXHUwMDI2dGNwX29wdCkpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5My1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTUtXFx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTY6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTctb3V0Olxcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMDgwLVxcdHtcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMDgxOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9vcnBoYW5fcmV0cmllc1xcXCIsXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTA4MjpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllcyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMDgzLVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zNy0gKlxcdFxcdFxcdFxcdFxcdHVua25vd24gc29ja2V0cy5cXG5uZXQvaXB2NC90Y3AuYzozODogKlxcdFxcdEFsYW4gQ294XFx0OlxcdHRjcCBvcHRpb24gcHJvY2Vzc2luZy5cXG5uZXQvaXB2NC90Y3AuYy0zOS0gKlxcdFxcdEFsYW4gQ294XFx0OlxcdFJlc2V0IHR3ZWFrZWQgKHN0aWxsIG5vdCAxMDAlKSBbSGFkXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yOTQ9ZW51bSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yOTgtXFxubmV0L2lwdjQvdGNwLmM6Mjk5OkRFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgdGNwX29ycGhhbl9jb3VudCk7XFxubmV0L2lwdjQvdGNwLmMtMzAwLVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MzA5OT12b2lkIHRjcF9zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIGludCBob3cpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zMTE3LVxcbm5ldC9pcHY0L3RjcC5jOjMxMTg6aW50IHRjcF9vcnBoYW5fY291bnRfc3VtKHZvaWQpXFxubmV0L2lwdjQvdGNwLmMtMzExOS17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zMTIyLVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxcbm5ldC9pcHY0L3RjcC5jOjMxMjM6XFx0XFx0dG90YWwgKz0gcGVyX2NwdSh0Y3Bfb3JwaGFuX2NvdW50LCBpKTtcXG5uZXQvaXB2NC90Y3AuYy0zMTI0LVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzEyNy1cXG5uZXQvaXB2NC90Y3AuYzozMTI4OnN0YXRpYyBpbnQgdGNwX29ycGhhbl9jYWNoZTtcXG5uZXQvaXB2NC90Y3AuYzozMTI5OnN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB0Y3Bfb3JwaGFuX3RpbWVyO1xcbm5ldC9pcHY0L3RjcC5jLTMxMzAtI2RlZmluZSBUQ1BfT1JQSEFOX1RJTUVSX1BFUklPRCBtc2Vjc190b19qaWZmaWVzKDEwMClcXG5uZXQvaXB2NC90Y3AuYy0zMTMxLVxcbm5ldC9pcHY0L3RjcC5jOjMxMzI6c3RhdGljIHZvaWQgdGNwX29ycGhhbl91cGRhdGUoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcXG5uZXQvaXB2NC90Y3AuYy0zMTMzLXtcXG5uZXQvaXB2NC90Y3AuYzozMTM0OlxcdFdSSVRFX09OQ0UodGNwX29ycGhhbl9jYWNoZSwgdGNwX29ycGhhbl9jb3VudF9zdW0oKSk7XFxubmV0L2lwdjQvdGNwLmM6MzEzNTpcXHRtb2RfdGltZXIoXFx1MDAyNnRjcF9vcnBoYW5fdGltZXIsIGppZmZpZXMgKyBUQ1BfT1JQSEFOX1RJTUVSX1BFUklPRCk7XFxubmV0L2lwdjQvdGNwLmMtMzEzNi19XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zMTM4PXN0YXRpYyBib29sIHRjcF90b29fbWFueV9vcnBoYW5zKGludCBzaGlmdClcXG5uZXQvaXB2NC90Y3AuYy0zMTM5LXtcXG5uZXQvaXB2NC90Y3AuYzozMTQwOlxcdHJldHVybiBSRUFEX09OQ0UodGNwX29ycGhhbl9jYWNoZSkgXFx1MDAzY1xcdTAwM2Mgc2hpZnQgXFx1MDAzZVxcbm5ldC9pcHY0L3RjcC5jLTMxNDEtXFx0XFx0UkVBRF9PTkNFKHN5c2N0bF90Y3BfbWF4X29ycGhhbnMpO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzE0My1cXG5uZXQvaXB2NC90Y3AuYzozMTQ0OnN0YXRpYyBib29sIHRjcF9vdXRfb2ZfbWVtb3J5KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3AuYy0zMTQ1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMxNTI9Ym9vbCB0Y3BfY2hlY2tfb29tKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHNoaWZ0KVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzE1Ni1cXHR0b29fbWFueV9vcnBoYW5zID0gdGNwX3Rvb19tYW55X29ycGhhbnMoc2hpZnQpO1xcbm5ldC9pcHY0L3RjcC5jOjMxNTc6XFx0b3V0X29mX3NvY2tldF9tZW1vcnkgPSB0Y3Bfb3V0X29mX21lbW9yeShzayk7XFxubmV0L2lwdjQvdGNwLmMtMzE1OC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMxNjY9dm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTMyNjQtXFxubmV0L2lwdjQvdGNwLmM6MzI2NTpcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbm5ldC9pcHY0L3RjcC5jLTMyNjYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00MzkzPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9nZXRfaW5mbyk7XFxubmV0L2lwdjQvdGNwLmMtNDM5NC1cXG5uZXQvaXB2NC90Y3AuYzo0Mzk1OnN0YXRpYyBzaXplX3QgdGNwX29wdF9zdGF0c19nZXRfc2l6ZSh2b2lkKVxcbm5ldC9pcHY0L3RjcC5jLTQzOTYte1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDQzOT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dldF90aW1lc3RhbXBpbmdfb3B0X3N0YXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ0NDgtXFxubmV0L2lwdjQvdGNwLmM6NDQ0OTpcXHRzdGF0cyA9IGFsbG9jX3NrYih0Y3Bfb3B0X3N0YXRzX2dldF9zaXplKCksIEdGUF9BVE9NSUMpO1xcbm5ldC9pcHY0L3RjcC5jLTQ0NTAtXFx0aWYgKCFzdGF0cylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTUzMTM9dm9pZCBfX2luaXQgdGNwX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUzMjYtXFxubmV0L2lwdjQvdGNwLmM6NTMyNzpcXHR0aW1lcl9zZXR1cChcXHUwMDI2dGNwX29ycGhhbl90aW1lciwgdGNwX29ycGhhbl91cGRhdGUsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbm5ldC9pcHY0L3RjcC5jOjUzMjg6XFx0bW9kX3RpbWVyKFxcdTAwMjZ0Y3Bfb3JwaGFuX3RpbWVyLCBqaWZmaWVzICsgVENQX09SUEhBTl9USU1FUl9QRVJJT0QpO1xcbm5ldC9pcHY0L3RjcC5jLTUzMjktXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xMzg0PXN0YXRpYyBpbnQgdGNwX2FvX3BhcnNlX2NyeXB0byhjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqY21kLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTM4Ni17XFxubmV0L2lwdjQvdGNwX2FvLmM6MTM4NzpcXHR1bnNpZ25lZCBpbnQgc3luX3RjcF9vcHRpb25fc3BhY2U7XFxubmV0L2lwdjQvdGNwX2FvLmMtMTM4OC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE0MTgtXFx0ICovXFxubmV0L2lwdjQvdGNwX2FvLmM6MTQxOTpcXHRzeW5fdGNwX29wdGlvbl9zcGFjZSA9IE1BWF9UQ1BfT1BUSU9OX1NQQUNFO1xcbm5ldC9pcHY0L3RjcF9hby5jOjE0MjA6XFx0c3luX3RjcF9vcHRpb25fc3BhY2UgLT0gVENQT0xFTl9NU1NfQUxJR05FRDtcXG5uZXQvaXB2NC90Y3BfYW8uYzoxNDIxOlxcdHN5bl90Y3Bfb3B0aW9uX3NwYWNlIC09IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7XFxubmV0L2lwdjQvdGNwX2FvLmM6MTQyMjpcXHRzeW5fdGNwX29wdGlvbl9zcGFjZSAtPSBUQ1BPTEVOX1dTQ0FMRV9BTElHTkVEO1xcbm5ldC9pcHY0L3RjcF9hby5jOjE0MjM6XFx0aWYgKHRjcF9hb19sZW5fYWxpZ25lZChrZXkpIFxcdTAwM2Ugc3luX3RjcF9vcHRpb25fc3BhY2UpXFxubmV0L2lwdjQvdGNwX2FvLmMtMTQyNC1cXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9Mzk1MT1zdGF0aWMgaW50IHRjcF9hY2tfdXBkYXRlX3dpbmRvdyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiBhY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zOTg4LVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM5ODk6c3RhdGljIGJvb2wgX190Y3Bfb293X3JhdGVfbGltaXRlZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBtaWJfaWR4LFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM5OTAtXFx0XFx0XFx0XFx0ICAgdTMyICpsYXN0X29vd19hY2tfdGltZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMTktICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDAyMDpib29sIHRjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDIxLVxcdFxcdFxcdCAgaW50IG1pYl9pZHgsIHUzMiAqbGFzdF9vb3dfYWNrX3RpbWUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDI3LVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwMjg6XFx0cmV0dXJuIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQobmV0LCBtaWJfaWR4LCBsYXN0X29vd19hY2tfdGltZSk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDAyOS19XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDY5PXN0YXRpYyB2b2lkIHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBib29sIGFjY2Vjbl9yZWZsZWN0b3IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDc0LVxcdC8qIEZpcnN0IGNoZWNrIG91ciBwZXItc29ja2V0IGR1cGFjayByYXRlIGxpbWl0LiAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwNzU6XFx0aWYgKF9fdGNwX29vd19yYXRlX2xpbWl0ZWQobmV0LFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNzYtXFx0XFx0XFx0XFx0ICAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDg3LS8qIFNlbmQgYSBjaGFsbGVuZ2UgQUNLIGZyb20gYSBTWU4tUkVDRUlWRUQgcmVxdWVzdCBzb2NrZXQuIFVzZXNcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDg4OiAqIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQoKSBkaXJlY3RseSBzbyB0aGF0IGFuIFJTVCBjYXJyeWluZyBwYXlsb2FkXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA4OS0gKiBjYW5ub3QgYnlwYXNzIHRoZSBwZXItcmVxdWVzdCByYXRlIGxpbWl0Llxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDA5MT12b2lkIHRjcF9yZXFza19zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5NS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDk2OlxcdGlmIChfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKG5ldCwgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5Ny1cXHRcXHRcXHRcXHQgICBcXHUwMDI2dGNwX3JzayhyZXEpLVxcdTAwM2VsYXN0X29vd19hY2tfdGltZSkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00NTAwPXN0YXRpYyBib29sIHNtY19wYXJzZV9vcHRpb25zKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ1MDE6XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpvcHRfcngsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDUwMi1cXHRcXHRcXHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00NTIxPXUxNiB0Y3BfcGFyc2VfbXNzX29wdGlvbihjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgdTE2IHVzZXJfbXNzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2MC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0NTYxOi8qIExvb2sgZm9yIHRjcCBvcHRpb25zLiBOb3JtYWxseSBvbmx5IGNhbGxlZCBvbiBTWU4gYW5kIFNZTkFDSyBwYWNrZXRzLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ1NjItICogQnV0LCB0aGlzIGNhbiBhbHNvIGJlIGNhbGxlZCBvbiBwYWNrZXRzIGluIHRoZSBlc3RhYmxpc2hlZCBmbG93IHdoZW5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ1NjU9dm9pZCB0Y3BfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2Ni1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0NTY3OlxcdFxcdCAgICAgICBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm9wdF9yeCwgaW50IGVzdGFiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ1NjgtXFx0XFx0ICAgICAgIHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29va2llICpmb2MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01MjQ0PXN0YXRpYyBib29sIHRjcF90cnlfY29hbGVzY2Uoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTI3OC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Mjc5OnN0YXRpYyBib29sIHRjcF9vb29fdHJ5X2NvYWxlc2NlKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01MjgwLVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnRvLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI5Nz10Y3BfZHJvcF9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01MzA1LSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUzMDY6c3RhdGljIHZvaWQgdGNwX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTMwNy17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01MzgxPXN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NDI1LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU0MjY6XFx0aWYgKHRjcF9vb29fdHJ5X2NvYWxlc2NlKHNrLCB0cC1cXHUwMDNlb29vX2xhc3Rfc2tiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0MjctXFx0XFx0XFx0XFx0IHNrYiwgXFx1MDAyNmZyYWdzdG9sZW4pKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NDgyLVxcdFxcdFxcdH1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1NDgzOlxcdFxcdH0gZWxzZSBpZiAodGNwX29vb190cnlfY29hbGVzY2Uoc2ssIHNrYjEsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTQ4NC1cXHRcXHRcXHRcXHRcXHRcXHRza2IsIFxcdTAwMjZmcmFnc3RvbGVuKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTYwNz1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Njc2LVxcdFxcdGlmICghUkJfRU1QVFlfUk9PVChcXHUwMDI2dHAtXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Njc3OlxcdFxcdFxcdHRjcF9vZm9fcXVldWUoc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzgtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzIyPXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzUxLVxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzNTI6XFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYixcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzUzLVxcdFxcdFxcdFxcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURQQVdTLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM3Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBMSU5VWF9NSUJfQkVZT05EX1dJTkRPVyk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjM3NzpcXHRcXHRcXHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNFUSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY3NjQ9c3RhdGljIGJvb2wgdGNwX3Jjdl9mYXN0b3Blbl9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc3luYWNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjc3Mi1cXHRpZiAobXNzID09IFJFQURfT05DRSh0cC1cXHUwMDNlcnhfb3B0LnVzZXJfbXNzKSkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjY3NzM6XFx0XFx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIG9wdDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Nzc0LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzQ1ND1zdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODgtXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ4OTpzdGF0aWMgdm9pZCB0Y3Bfb3BlbnJlcV9pbml0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDkwOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ5MS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjI1LVxcdHUzMiBpc24gPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF90d19pc247XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyNjpcXHRzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgdG1wX29wdDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjI3LVxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4Ni1cXHR0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Njg3OlxcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4OC1cXHRpbmV0X3JzayhyZXEpLVxcdTAwM2Vub19zcmNjaGVjayA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NTktXFx0dGNwX3JzayhyZXEpLVxcdTAwM2VzeW5fdG9zID0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VpcF9kc2ZpZWxkO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3NjA6XFx0dGNwX29wZW5yZXFfaW5pdF9yd2luKHJlcSwgc2ssIGRzdCk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc2MS1cXHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTEzLSAqXFx0XFx0bGludXgvaXB2NC90Y3BfaW5wdXQuY1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTQ6ICpcXHRcXHRsaW51eC9pcHY0L3RjcF9vdXRwdXQuY1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTUtICpcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYwLVxcdG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3JldHJpZXMyID0gVENQX1JFVFIyO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ2MTpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllcyA9IDA7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYyLVxcdG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Zpbl90aW1lb3V0ID0gVENQX0ZJTl9USU1FT1VUO1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTM5PXRjcF90aW1ld2FpdF9jaGVja19vb3dfcmF0ZV9saW1pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00My1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDQ6XFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZCh0d3NrX25ldCh0dyksIHNrYiwgbWliX2lkeCxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDUtXFx0XFx0XFx0XFx0ICBcXHUwMDI2dGNwdHctXFx1MDAzZXR3X2xhc3Rfb293X2Fja190aW1lKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTEwMT10Y3BfdGltZXdhaXRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0xMDYtXFx0dTMyIHJjdl9ueHQgPSBSRUFEX09OQ0UodGNwdHctXFx1MDAzZXR3X3Jjdl9ueHQpO1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMDc6XFx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEwOC1cXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBwc3BfZHJvcDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MTI9dm9pZCB0Y3BfdHdza19wdXJnZShzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDMxOnZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY5MS17XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY5MjpcXHRzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgdG1wX29wdDtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNjkzLVxcdHN0cnVjdCBzb2NrICpjaGlsZDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTAtXFx0XFx0ICovXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc1MTpcXHRcXHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTItXFx0XFx0XFx0XFx0XFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNZTlJFQ1YsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODUwLVxcdFxcdGlmICghKGZsZyBcXHUwMDI2IFRDUF9GTEFHX1JTVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6ODUxOlxcdFxcdCAgICAhdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTg1Mi1cXHRcXHRcXHRcXHRcXHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU1lOUkVDVixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MTE9c3RhdGljIHZvaWQgc21jX29wdGlvbnNfd3JpdGUoX19iZTMyICpwdHIsIHUxNiAqb3B0aW9ucylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjUtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQyNjpzdHJ1Y3QgdGNwX291dF9vcHRpb25zIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI3LVxcdC8qIEZvbGxvd2luZyBncm91cCBpcyBjbGVhcmVkIGluIF9fdGNwX3RyYW5zbWl0X3NrYigpICovXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQxLVxcdHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29va2llICpmYXN0b3Blbl9jb29raWU7XFx0LyogRmFzdCBvcGVuIGNvb2tpZSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDI6XFx0c3RydWN0IG1wdGNwX291dF9vcHRpb25zIG1wdGNwO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDMtfTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ0LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDU6c3RhdGljIHZvaWQgbXB0Y3Bfb3B0aW9uc193cml0ZShzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDc6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ4LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00Njk9c3RhdGljIHUzMiBicGZfc2tvcHNfaGRyX29wdF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ3Mi1cXHRcXHRcXHRcXHQgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ3MzpcXHRcXHRcXHRcXHQgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDc0LVxcdFxcdFxcdFxcdCB1MzIgcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTUzMz1zdGF0aWMgdm9pZCBicGZfc2tvcHNfd3JpdGVfaGRyX29wdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTM2LVxcdFxcdFxcdFxcdCAgICBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTM3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01Mzgte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTU3OD1zdGF0aWMgdTMyIGJwZl9za29wc19oZHJfb3B0X2xlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTgxLVxcdFxcdFxcdFxcdCBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTgyOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01ODMtXFx0XFx0XFx0XFx0IHUzMiByZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTg4PXN0YXRpYyB2b2lkIGJwZl9za29wc193cml0ZV9oZHJfb3B0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTEtXFx0XFx0XFx0XFx0ICAgIGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo1OTI6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU5My17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTk3PXN0YXRpYyBfX2JlMzIgKnByb2Nlc3NfdGNwX2FvX29wdGlvbnMoc3RydWN0IHRjcF9zb2NrICp0cCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTk4LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0Y3Byc2ssXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU5OTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02MDAtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSwgX19iZTMyICpwdHIpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NjM4PXN0YXRpYyBjb25zdCB1MzIgc3luYWNrX2Vjbl9ieXRlc1szXSA9IHsgMCwgMCwgMCB9O1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTY1Mi0gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NjUzOnN0YXRpYyB2b2lkIHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTQtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcHJzayxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NjU1OlxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTY1Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX2tleSAqa2V5KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTgyNy1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODI4OlxcdG1wdGNwX29wdGlvbnNfd3JpdGUodGgsIHB0ciwgdHAsIG9wdHMpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04MjktfVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTgzMT1zdGF0aWMgdm9pZCBzbWNfc2V0X29wdGlvbihzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4MzI6XFx0XFx0XFx0ICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODMzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCAqcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTg0OD1zdGF0aWMgdm9pZCBzbWNfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg0OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg1MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NTEtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50ICpyZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODY2PXN0YXRpYyB2b2lkIG1wdGNwX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg2NzpcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg2OC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCAqcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODgyOnN0YXRpYyB1MzIgdGNwX3N5bmFja19vcHRpb25zX2NvbWJpbmVfc2F2aW5nKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4My17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTAyLSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5MDM6c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTA0LVxcdFxcdFxcdFxcdCAgaW50IHJlbWFpbmluZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5NjA6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTYxLVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfa2V5ICprZXkpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA1MC1cXHRcXHRvcHRzLVxcdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNTE6XFx0XFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA1Mi1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTA2MT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2My1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG1zcywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTA2NDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2NS1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHRjcF9rZXkgKmtleSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTM4LVxcdFxcdG9wdHMtXFx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTEzOTpcXHRcXHRyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTQwLVxcdH1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMTUxPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTUyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9rZXkgKmtleSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMjMxLVxcdFxcdFxcdG9wdHMtXFx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMDtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTIzMjpcXHRcXHRcXHRzaXplICs9IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgdHAtXFx1MDAzZWFjY2Vjbl9taW5sZW4sXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEyMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BWF9UQ1BfT1BUSU9OX1NQQUNFIC0gc2l6ZSk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU0Mi1cXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTQzOlxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0cztcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU0NDpcXHR1bnNpZ25lZCBpbnQgdGNwX29wdGlvbnNfc2l6ZSwgdGNwX2hlYWRlcl9zaXplO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQ1LVxcdHN0cnVjdCBza19idWZmICpvc2tiID0gTlVMTDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTc5LVxcdGlmICh1bmxpa2VseSh0Y2ItXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9TWU4pKSB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XFx0XFx0dGNwX29wdGlvbnNfc2l6ZSA9IHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcXHUwMDI2b3B0cywgXFx1MDAyNmtleSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1ODEtXFx0fSBlbHNlIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU4MjpcXHRcXHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVxcdFxcdC8qIEZvcmNlIGEgUFNIIGZsYWcgb24gYWxsIChHU08pIHBhY2tldHMgdG8gZXhwZWRpdGUgR1JPIGZsdXNoXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU5My1cXHR9XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1OTQ6XFx0dGNwX2hlYWRlcl9zaXplID0gdGNwX29wdGlvbnNfc2l6ZSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU5NS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNjYyLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNjYzOlxcdHRjcF9vcHRpb25zX3dyaXRlKHRoLCB0cCwgTlVMTCwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNjY0LVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE5OTY9c3RhdGljIGlubGluZSBpbnQgX190Y3BfbXR1X3RvX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBwbXR1KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDYtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwMDc6XFx0LyogQ2xhbXAgaXQgKG1zc19jbGFtcCBkb2VzIG5vdCBpbmNsdWRlIHRjcCBvcHRpb25zKSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDA4LVxcdGlmIChtc3Nfbm93IFxcdTAwM2UgdHAtXFx1MDAzZXJ4X29wdC5tc3NfY2xhbXApXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjA0Mj12b2lkIHRjcF9tdHVwX2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwNjgtICAgdHAtXFx1MDAzZW1zc19jYWNoZSBpcyBjdXJyZW50IGVmZmVjdGl2ZSBzZW5kaW5nIG1zcywgaW5jbHVkaW5nXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwNjk6ICAgYWxsIHRjcCBvcHRpb25zIGV4Y2VwdCBmb3IgU0FDS3MuIEl0IGlzIGV2YWx1YXRlZCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA3MC0gICB0YWtpbmcgaW50byBhY2NvdW50IGN1cnJlbnQgcG10dSwgYnV0IG5ldmVyIGV4Y2VlZHNcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MzAuMDgwODcwMjE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDg4MjAwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBJbnNwZWN0aW9uOiBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUbyBwcm9wZXJseSBhc3Nlc3MgdGhpcyBzaXR1YXRpb24sIG15IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBJJ2xsIHN0YXJ0IHdpdGggYSBzY2FuIG9mIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2NC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBhIGZldyBrZXkgc3ltYm9sczogYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhlc2UgZmxhZ3MgYXJlIHVzdWFsbHkgdGhlIGx5bmNocGlucyBpbiB1bmRlcnN0YW5kaW5nIGEga2VybmVsJ3MgbmV0d29ya2luZyBtZW1vcnkgYmVoYXZpb3IuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG5ldC9LY29uZmlnYCwgYW5kIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBsaW5lcyA2NS04MCBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJ2xsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGF0IHJlZ2lvbiBjYXJlZnVsbHkuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMgcmVsYXRlZCB0byB0aGVzZSBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzozMi4zMjk2OTI2MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0Y29uZmlnIE5FVF9SRURJUkVDVFxcbiAgNjE6XFx0XFx0Ym9vbFxcbiAgNjI6XFx0XFxuICA2MzpcXHRjb25maWcgU0tCX0RFQ1JZUFRFRFxcbiAgNjQ6XFx0XFx0Ym9vbFxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgU0tCX0VYVEVOU0lPTlNcXG4gIDY3OlxcdFxcdGJvb2xcXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIE5FVF9ERVZNRU1cXG4gIDcwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDcxOlxcdFxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxcbiAgNzM6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIE5FVF9TSEFQRVJcXG4gIDc2OlxcdFxcdGJvb2xcXG4gIDc3OlxcdFxcbiAgNzg6XFx0Y29uZmlnIE5FVF9DUkMzMkNcXG4gIDc5OlxcdFxcdGJvb2xcXG4gIDgwOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODE6XFx0XFxuICA4MjpcXHRtZW51IFxcXCJOZXR3b3JraW5nIG9wdGlvbnNcXFwiXFxuICA4MzpcXHRcXG4gIDg0OlxcdHNvdXJjZSBcXFwibmV0L3BhY2tldC9LY29uZmlnXFxcIlxcbiAgODU6XFx0c291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxuICA4NjpcXHRzb3VyY2UgXFxcIm5ldC91bml4L0tjb25maWdcXFwiXFxuICA4NzpcXHRzb3VyY2UgXFxcIm5ldC90bHMvS2NvbmZpZ1xcXCJcXG4gIDg4OlxcdHNvdXJjZSBcXFwibmV0L3hmcm0vS2NvbmZpZ1xcXCJcXG4gIDg5OlxcdHNvdXJjZSBcXFwibmV0L2l1Y3YvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MzIuMzI5NzYxOTc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NTAzOTU4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGBDT05GSUdfTkVUX0RFVk1FTWAgZml0cyBpbi4gSXQncyBkZWZpbmVkIGFzIGEgXCJ5XCIgd2hpY2ggbWVhbnMgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzOiBpdCBoaW5nZXMgb24gYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQncyB0aGUga2V5LlxuXG5Ob3csIEkga25vdyB0aGF0IGBDT05GSUdfSU5FVGAgY29tcGlsZXMgYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gSSdsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgdGNwLmNgIGlzIGluZGVlZCBjb21waWxlZCBjb25kaXRpb25hbGx5IG9uIGBDT05GSUdfSU5FVGAsIGp1c3QgdG8gYmUgY2VydGFpbiDigJMgeWVwLCBgbmV0L2lwdjRgIGZhbGxzIHVuZGVyIGBDT05GSUdfSU5FVGAsIGFzIGV4cGVjdGVkLiBTbyBmYXIsIHNvIGdvb2QuXG5cbk5vdywgcmVnYXJkaW5nIGBORVRfREVWTUVNYCwgaXQgbmVlZHMgdGhvc2UgdHdvIGVuYWJsZXJzIG9mIGBQQUdFX1BPT0xgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBvciBhbHRlcm5hdGl2ZWx5IGBVRE1BQlVGYCwgb3IgYW5vdGhlciBgRE1BX1NIQVJFRF9CVUZGRVJgIG9wdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gVG8gdW5kZXJzdGFuZCBob3cgdGhhdCB3b3JrcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBQQUdFX1BPT0xgLCBhbmQgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGluIGBuZXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgYG5ldC9jb3JlL0tjb25maWdgLiBJJ2xsIGRlbHZlIGludG8gdGhvc2UgZmlsZXMgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNDgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzozNS43ODAxNjA0NDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTExMDYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfUE9PTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MzcuNDkxMjczMjM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MzI2MzcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHplcm8gaW4gb24gYGNvbmZpZyBJTkVUYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS5cIiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2sgaXMgY29uZmlndXJlZCBpbiB0aGlzIGNvbnRleHQuIEkga25vdyB0aGlzIGZpbGUgaG9sZHMgdGhlIGtleSBidWlsZCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0aGluZ3MgSVB2NCB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgYGNvbmZpZyBJTkVUYCBzeW1ib2wgd2lsbCBsaWtlbHkgYmUgYSB0b3AtbGV2ZWwgc3dpdGNoIG9yIGEgcGl2b3RhbCBjb21wb25lbnQgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiB0aGUgZW50aXJlIElQdjQgc3Vic3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkgYW0gaG9waW5nIHRoZSBmaWxlIGlzIHVwLXRvLWRhdGUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhbGwgY2xlYW5seSB3cml0dGVuLiBLbm93aW5nIHRoaXMsIEkgY2FuIGZpZ3VyZSBvdXQgaG93IHRoZSBzcGVjaWZpYyBJUHY0IGZlYXR1cmVzIEknbSBpbnRlcmVzdGVkIGluIGFyZSBjb250cm9sbGVkIG9yLCBpbmRlZWQsIGRpc2FibGVkLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIHRyYWNlIHRoZSBjb25maWd1cmF0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggSVB2NCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgaXQgaW50ZXJyZWxhdGVzIHdpdGggb3RoZXIgbmV0d29ya2luZyBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYwMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQxLjEyMzkxMzE1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NDg3NjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQzLjM3ODgwMjk3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA5MTU0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRE1BIEJ1ZmZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb25zIHdvcmsgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgY29uZmlnIFVETUFCVUZgIGFuZCBhbnkgb3RoZXIgc2ltaWxhciBkbWFidWYgY29uZmlndXJhdGlvbnMuIEkga25vdyBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiBpbiBgZHJpdmVycy9iYXNlL0tjb25maWdgLCBzbyB0aGF0J3MgdGhlIGJhc2UgbGV2ZWwgZGVwZW5kZW5jeS4gSSBhbHNvIHJlY2FsbCBgVURNQUJVRmAgaGluZ2VzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYE1FTUZEX0NSRUFURWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IGBORVRfREVWTUVNYCBhbHNvIHRpZXMgaW50byBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYWRkcyBgUEFHRV9QT09MYCB0byB0aGUgbWl4LlxuXG5Ob3csIEknbSByZWFsbHkgY3VyaW91cyBhYm91dCBgdGNwX3JlY3Ztc2dfZG1hYnVmYC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdOKAmXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBORVRfREVWTUVNYCBpcyBlbmFibGVkLCBvciBpZiBpdCdzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19ORVRfREVWTUVNYCBibG9jay4gT3IgaWYsIHBvdGVudGlhbGx5LCBpdCBqdXN0ICp1c2VzKiBgQ09ORklHX05FVF9ERVZNRU1gIGludGVybmFsbHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgbmV0L2lwdjQvdGNwLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhcm91bmQgdGhlIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBpbmNsdWRlZC4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQ2LjE4Nzk2MTkyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ0MDpcXHRcXHRuZXRtZW1fcmVmXFx0bmV0bWVtc1tNQVhfU0tCX0ZSQUdTXTtcXG4yNDQxOlxcdH07XFxuMjQ0MjpcXHRcXG4yNDQzOlxcdHN0YXRpYyB2b2lkIHRjcF94YV9wb29sX2NvbW1pdF9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXFxuMjQ0NDpcXHR7XFxuMjQ0NTpcXHRcXHRpbnQgaTtcXG4yNDQ2OlxcdFxcbjI0NDc6XFx0XFx0LyogQ29tbWl0IHBhcnQgdGhhdCBoYXMgYmVlbiBjb3BpZWQgdG8gdXNlciBzcGFjZS4gKi9cXG4yNDQ4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwLVxcdTAwM2VpZHg7IGkrKylcXG4yNDQ5OlxcdFxcdFxcdF9feGFfY21weGNoZyhcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXFx1MDAzZXRva2Vuc1tpXSwgWEFfWkVST19FTlRSWSxcXG4yNDUwOlxcdFxcdFxcdFxcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXFx1MDAzZW5ldG1lbXNbaV0sIEdGUF9LRVJORUwpO1xcbjI0NTE6XFx0XFx0LyogUm9sbGJhY2sgd2hhdCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLiAqL1xcbjI0NTI6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBwLVxcdTAwM2VtYXg7IGkrKylcXG4yNDUzOlxcdFxcdFxcdF9feGFfZXJhc2UoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBwLVxcdTAwM2V0b2tlbnNbaV0pO1xcbjI0NTQ6XFx0XFxuMjQ1NTpcXHRcXHRwLVxcdTAwM2VtYXggPSAwO1xcbjI0NTY6XFx0XFx0cC1cXHUwMDNlaWR4ID0gMDtcXG4yNDU3OlxcdH1cXG4yNDU4OlxcdFxcbjI0NTk6XFx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxcbjI0NjA6XFx0e1xcbjI0NjE6XFx0XFx0aWYgKCFwLVxcdTAwM2VtYXgpXFxuMjQ2MjpcXHRcXHRcXHRyZXR1cm47XFxuMjQ2MzpcXHRcXG4yNDY0OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDY1OlxcdFxcbjI0NjY6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHhhX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0Njk6XFx0fVxcbjI0NzA6XFx0XFxuMjQ3MTpcXHRzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcXG4yNDcyOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBtYXhfZnJhZ3MpXFxuMjQ3MzpcXHR7XFxuMjQ3NDpcXHRcXHRpbnQgZXJyLCBrO1xcbjI0NzU6XFx0XFxuMjQ3NjpcXHRcXHRpZiAocC1cXHUwMDNlaWR4IFxcdTAwM2MgcC1cXHUwMDNlbWF4KVxcbjI0Nzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjQ3ODpcXHRcXG4yNDc5OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDgwOlxcdFxcbjI0ODE6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBtYXhfZnJhZ3M7IGsrKykge1xcbjI0ODQ6XFx0XFx0XFx0ZXJyID0gX194YV9hbGxvYyhcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIFxcdTAwMjZwLVxcdTAwM2V0b2tlbnNba10sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQ2LjE4ODE3MzA2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY4OTE5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgVENQIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgY29kZSBjaGFuZ2UgYXMgSSB1bmRlcnN0YW5kIGl0LiBXaGVuIHRoZSBrZXJuZWwgaGFzIElQdjQgbmV0d29ya2luZyAoYENPTkZJR19JTkVUYCkgYW5kIHRoZSBkZXZtZW0gc3Vic3lzdGVtIGVuYWJsZWQgdmlhIGBDT05GSUdfTkVUX0RFVk1FTWAsIGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYENPTkZJR19QQUdFX1BPT0xgLCB0aGUgZnVuY3Rpb25zIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCwgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGFyZSBhbGwgY29tcGlsZWQgaW50byBgbmV0L2lwdjQvdGNwLmNgLiBUaGlzIGlzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFRDUCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBkZXZtZW0vZG1hYnVmIGZlYXR1cmVzLiBUaGV5J3ZlIGludHJvZHVjZWQgYHRjcF94YV9wb29sX21heF9mcmFnc2AgdG8gcHJlY2lzZWx5IGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyB0aGF0IGNhbiBiZSBkZWxpdmVyZWQsIHN0YXJ0aW5nIGZyb20gYSBnaXZlbiBvZmZzZXQsIHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJlbWFpbmluZyBkYXRhIGxlbmd0aC4gVGhpcyBjYWxjdWxhdGVkIG51bWJlciBvZiBmcmFnbWVudHMgaXMgdGhlbiBwYXNzZWQgdG8gYHRjcF94YV9wb29sX3JlZmlsbGAuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgcmVsZXZhbnQsIGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhcmUgd2hhdCBicmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgb25saW5lLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBhbmQgYHRjcF94YV9wb29sX3JlZmlsbGAuXG5cblRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgVENQIGRhdGEgcGF0aCwgZGVhbGluZyB3aXRoIFhBcnJheSB0b2tlbiBwb29sIGFsbG9jYXRpb25zLCBhbmQgaW1wb3J0YW50bHksIHJlbGF0ZXMgdG8gZGV2bWVtIFRDUCB6ZXJvLWNvcHksIHdoaWNoIGlzIHVzZWQgdGhyb3VnaCBUQ1Agc29ja2V0cyB3aXRoIGByZWN2bXNnKC4uLiwgTVNHX1NPQ0tfREVWTUVNKWAuIEJlY2F1c2UgaXQgaW52b2x2ZXMgY29yZSBuZXR3b3JraW5nIG1vZGlmaWNhdGlvbnMsIHRoZSByaXNrIHByb2ZpbGUgaXMgZWxldmF0ZWQgc28gSSdtIHRoaW5raW5nIGl0J3Mgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4gVGhpcyB0aWNrcyB0aGUgYm94IGZvciBhIFwiV29ydGhGdXp6aW5nPXRydWVcIiBmbGFnLiBJJ20gYXZvaWRpbmcgZ2VuZXJpYyBmdW5jdGlvbnMgbGlrZSBgdGNwX3JlY3Ztc2dgIGFuZCBnZW5lcmljIGFsbG9jYXRvcnMgYXMgdGhleSBhcmUgdG9vIHViaXF1aXRvdXMgdG8gYmUgdGhlIGZvY3VzIGhlcmUuXG5cblNvLCB0aGlzIGNoYW5nZSBoYXMgYSBoaWdoIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIFRDUCByZWNlaXZlIHBhdGggZm9yIGRldm1lbSwgc28gSSdsbCBmbGFnIGl0IGZvciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE4NywiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzo1MS45NTcwOTU5OTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM0MzA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF94YV9wb29sX21heF9mcmFnc1wiLFxuICAgIFwidGNwX3JlY3Ztc2dfZG1hYnVmXCIsXG4gICAgXCJ0Y3BfeGFfcG9vbF9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF94YV9wb29sX21heF9mcmFnc1wiLFxuICAgIFwidGNwX3JlY3Ztc2dfZG1hYnVmXCIsXG4gICAgXCJ0Y3BfeGFfcG9vbF9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjUyLjAzMDQ0NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTg1MDcxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6NTIuMDMwOTUwNjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzk4NDU2MjcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgaGVscGVyIGZ1bmN0aW9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGJvdW5kZWQgYnkgYHJlbWFpbmluZ19sZW5gLCBhbmQgcGFzc2VzIHRoaXMgdmFsdWUgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsKClgIGluc3RlYWQgb2Ygb3Zlci1hbGxvY2F0aW5nIGJhc2VkIG9uIHJlbWFpbmluZyBgbnJfZnJhZ3NgLlxcblxcbkFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIGFuZCBgdGNwX3JlY3Ztc2dfZG1hYnVmKClgIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGRtYWJ1Zl9jbXNnYCBzdHJ1Y3R1cmUgc2VudCB0byB1c2Vyc3BhY2UgY29udGludWVzIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQgKGBkbWFidWZfY21zZyA9IHsgMCB9YCksIGFuZCBgdGNwX3hhX3Bvb2wudG9rZW5zYCBlbnRyaWVzIGFyZSB3cml0dGVuIGJ5IGBfX3hhX2FsbG9jKClgIHByaW9yIHRvIGJlaW5nIHJlYWQgYW5kIGFzc2lnbmVkIGludG8gdGhlIGNtc2cuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1MzY1YmQxYWJjODljNjkwNGNkYmYzYWE1NGY3MjJkYTAwYTM4MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIyOjA2OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggYjQyMzdkMGU5OTRkNi4uYzM1Mjc3NDM5Mzg2MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI0OTQsNiArMjQ5NCwzMiBAQCBzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcbiBcdHJldHVybiBrID8gMCA6IGVycjtcbiB9XG4gXG4rLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxuKyAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuK1x0XHRcdFx0XHQgIGludCByZW1haW5pbmdfbGVuKVxuK3tcbitcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcbitcdFx0aW50IGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV0pO1xuK1x0XHRpbnQgY29weSA9IGVuZCAtIG9mZnNldDtcbitcbitcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbitcdFx0XHRtYXhfZnJhZ3MrKztcbitcdFx0XHRpZiAoY29weSBcdTAwM2U9IHJlbWFpbmluZ19sZW4pXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRzdGFydCA9IGVuZDtcbitcdH1cbitcbitcdHJldHVybiBtYXhfZnJhZ3M7XG4rfVxuK1xuIC8qIE9uIGVycm9yLCByZXR1cm5zIHRoZSAtZXJybm8uIE9uIHN1Y2Nlc3MsIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgdG8gdGhlXG4gICogdXNlci4gTWF5IG5vdCBjb25zdW1lIGFsbCBvZiBAcmVtYWluaW5nX2xlbi5cbiAgKi9cbkBAIC0yNTAzLDYgKzI1MjksNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4ge1xuIFx0c3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07XG4gXHRzdHJ1Y3QgdGNwX3hhX3Bvb2wgdGNwX3hhX3Bvb2w7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFx0aW50IGksIGNvcHksIG47XG4gXHRpbnQgc2VudCA9IDA7XG5AQCAtMjU1NCw2ICsyNTgxLDggQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGFcbiBcdFx0ICogc2VxdWVuY2Ugb2YgY21zZ1xuIFx0XHQgKi9cbitcdFx0bWF4X2ZyYWdzID0gdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKHNrYiwgb2Zmc2V0LCByZW1haW5pbmdfbGVuKTtcbitcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcbiBcdFx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW2ldO1xuIFx0XHRcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuQEAgLTI1OTEsNyArMjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XG4gXHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xuIFx0XHRcdFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCxcbi1cdFx0XHRcdFx0XHRcdCBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgLSBpKTtcbitcdFx0XHRcdFx0XHRcdCBtYXhfZnJhZ3MpO1xuIFx0XHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzo1Mi4wMzA5NTE4M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDAxNzgzMjk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgTGludXgga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGRlZmVuc2l2ZSBhbmFseXNpcyDigJMgYSBzdGFuZGFyZCBjb2RlIHJldmlldyB3aXRoIGEgZm9jdXMgb24gc2FuaXRpemVycywgc3BlY2lmaWNhbGx5IHRoZSBLQVNBTi9LTVNBTiBhbmdsZS4gTm8gaGlnaC1zZXZlcml0eSB2dWxuZXJhYmlsaXRpZXMgYXJlIGFudGljaXBhdGVkIGhlcmU7IHRoaXMgaXMgYWJvdXQgb3B0aW1pemluZyBvdXIgdGVzdGluZyBzdHJhdGVneS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHByZWNpc2VseSBhbmQgbWFrZSBzdXJlIEkgY292ZXIgYWxsIHRoZSBiYXNlcy5cblxuRmlyc3QsIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGNoYW5nZXMgYXJlIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBhIG5ldyBmdW5jdGlvbiwgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGhhcyBiZWVuIGFkZGVkLiBJdCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFnbWVudHMgdXNhYmxlIGZyb20gYSBieXRlIG9mZnNldCwgY29uc3RyYWluZWQgYnkgYSByZW1haW5pbmcgbGVuZ3RoLiBUaGlzIHJlc3VsdCBpcyB0aGVuIHVzZWQgaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIHJlcGxhY2luZyBhIGRpcmVjdCBjYWxjdWxhdGlvbiBvZiBmcmFnbWVudCBjb3VudCB3aXRoIGEgY2FsbCB0byBgdGNwX3hhX3Bvb2xfcmVmaWxsYC5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvdGNwLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhlIGNvZGUgYXJvdW5kIHRoZXNlIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYW5kIGlmIEtNU0FOIG5lZWRzIHRvIGJlIGludm9sdmVkLiBJ4oCZbGwgbG9vayBmb3IgYW55IHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbXByb3BlciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBmcmFnbWVudGF0aW9uIHByb2Nlc3MsIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBPbmNlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLCBJIGNhbiBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgdGhhdCB3YXJyYW50IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MDYuMDQ4Nzg3Nzc0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ4MDpcXHRcXG4yNDgxOlxcdFxcdHRjcF94YV9wb29sX2NvbW1pdF9sb2NrZWQoc2ssIHApO1xcbjI0ODI6XFx0XFxuMjQ4MzpcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2MgbWF4X2ZyYWdzOyBrKyspIHtcXG4yNDg0OlxcdFxcdFxcdGVyciA9IF9feGFfYWxsb2MoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBcXHUwMDI2cC1cXHUwMDNldG9rZW5zW2tdLFxcbjI0ODU6XFx0XFx0XFx0XFx0XFx0IFhBX1pFUk9fRU5UUlksIHhhX2xpbWl0XzMxYiwgR0ZQX0tFUk5FTCk7XFxuMjQ4NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ4ODpcXHRcXHR9XFxuMjQ4OTpcXHRcXG4yNDkwOlxcdFxcdHhhX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0OTE6XFx0XFxuMjQ5MjpcXHRcXHRwLVxcdTAwM2VtYXggPSBrO1xcbjI0OTM6XFx0XFx0cC1cXHUwMDNlaWR4ID0gMDtcXG4yNDk0OlxcdFxcdHJldHVybiBrID8gMCA6IGVycjtcXG4yNDk1OlxcdH1cXG4yNDk2OlxcdFxcbjI0OTc6XFx0LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxcbjI0OTg6XFx0ICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cXG4yNDk5OlxcdCAqL1xcbjI1MDA6XFx0c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yNTAxOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9mZnNldCxcXG4yNTAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IHJlbWFpbmluZ19sZW4pXFxuMjUwMzpcXHR7XFxuMjUwNDpcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfaGVhZGxlbihza2IpO1xcbjI1MDU6XFx0XFx0dW5zaWduZWQgaW50IG1heF9mcmFncyA9IDA7XFxuMjUwNjpcXHRcXHRpbnQgaTtcXG4yNTA3OlxcdFxcbjI1MDg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xcbjI1MDk6XFx0XFx0XFx0aW50IGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXSk7XFxuMjUxMDpcXHRcXHRcXHRpbnQgY29weSA9IGVuZCAtIG9mZnNldDtcXG4yNTExOlxcdFxcbjI1MTI6XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuMjUxMzpcXHRcXHRcXHRcXHRtYXhfZnJhZ3MrKztcXG4yNTE0OlxcdFxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2U9IHJlbWFpbmluZ19sZW4pXFxuMjUxNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTE2OlxcdFxcdFxcdH1cXG4yNTE3OlxcdFxcdFxcdHN0YXJ0ID0gZW5kO1xcbjI1MTg6XFx0XFx0fVxcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHRyZXR1cm4gbWF4X2ZyYWdzO1xcbjI1MjE6XFx0fVxcbjI1MjI6XFx0XFxuMjUyMzpcXHQvKiBPbiBlcnJvciwgcmV0dXJucyB0aGUgLWVycm5vLiBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZVxcbjI1MjQ6XFx0ICogdXNlci4gTWF5IG5vdCBjb25zdW1lIGFsbCBvZiBAcmVtYWluaW5nX2xlbi5cXG4yNTI1OlxcdCAqL1xcbjI1MjY6XFx0c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjI1Mjc6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxcbjI1Mjg6XFx0XFx0XFx0XFx0ICAgICAgaW50IHJlbWFpbmluZ19sZW4pXFxuMjUyOTpcXHR7XFxuMjUzMDpcXHRcXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcXG4yNTMxOlxcdFxcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcXG4yNTMyOlxcdFxcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3M7XFxuMjUzMzpcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuMjUzNDpcXHRcXHRpbnQgaSwgY29weSwgbjtcXG4yNTM1OlxcdFxcdGludCBzZW50ID0gMDtcXG4yNTM2OlxcdFxcdGludCBlcnIgPSAwO1xcbjI1Mzc6XFx0XFxuMjUzODpcXHRcXHR0Y3BfeGFfcG9vbC5tYXggPSAwO1xcbjI1Mzk6XFx0XFx0dGNwX3hhX3Bvb2wuaWR4ID0gMDtcXG4yNTQwOlxcdFxcdGRvIHtcXG4yNTQxOlxcdFxcdFxcdHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcXG4yNTQyOlxcdFxcbjI1NDM6XFx0XFx0XFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSB7XFxuMjU0NDpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI1NDU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU0NjpcXHRcXHRcXHR9XFxuMjU0NzpcXHRcXG4yNTQ4OlxcdFxcdFxcdC8qIENvcHkgaGVhZGVyLiAqL1xcbjI1NDk6XFx0XFx0XFx0Y29weSA9IHN0YXJ0IC0gb2Zmc2V0O1xcbjI1NTA6XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuMjU1MTpcXHRcXHRcXHRcXHRjb3B5ID0gbWluKGNvcHksIHJlbWFpbmluZ19sZW4pO1xcbjI1NTI6XFx0XFxuMjU1MzpcXHRcXHRcXHRcXHRuID0gY29weV90b19pdGVyKHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgY29weSxcXG4yNTU0OlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlcik7XFxuMjU1NTpcXHRcXHRcXHRcXHRpZiAobiAhPSBjb3B5KSB7XFxuMjU1NjpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjI1NTc6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU1ODpcXHRcXHRcXHRcXHR9XFxuMjU1OTpcXHRcXG4yNTYwOlxcdFxcdFxcdFxcdG9mZnNldCArPSBjb3B5O1xcbjI1NjE6XFx0XFx0XFx0XFx0cmVtYWluaW5nX2xlbiAtPSBjb3B5O1xcbjI1NjI6XFx0XFxuMjU2MzpcXHRcXHRcXHRcXHQvKiBGaXJzdCBhIGRtYWJ1Zl9jbXNnIGZvciAjIGJ5dGVzIGNvcGllZCB0byB1c2VyXFxuMjU2NDpcXHRcXHRcXHRcXHQgKiBidWZmZXIuXFxuMjU2NTpcXHRcXHRcXHRcXHQgKi9cXG4yNTY2OlxcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2ZG1hYnVmX2Ntc2csIDAsIHNpemVvZihkbWFidWZfY21zZykpO1xcbjI1Njc6XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcXG4yNTY4OlxcdFxcdFxcdFxcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxcbjI1Njk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFNPX0RFVk1FTV9MSU5FQVIsXFxuMjU3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcXG4yNTcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZG1hYnVmX2Ntc2cpO1xcbjI1NzI6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4yNTczOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1NzQ6XFx0XFxuMjU3NTpcXHRcXHRcXHRcXHRzZW50ICs9IGNvcHk7XFxuMjU3NjpcXHRcXG4yNTc3OlxcdFxcdFxcdFxcdGlmIChyZW1haW5pbmdfbGVuID09IDApXFxuMjU3ODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNTc5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MDYuMDQ5MDk2NTQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MDg5MjkyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGluLiBIZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgb3BlcmF0aW9uYWwgZmxvdy4gSSBhbHJlYWR5IGhhdmUgYSBoYW5kbGUgb24gdGhlIGJhc2ljIHByaW5jaXBsZSwgYnV0IHRoZSBkZXRhaWxzIGFyZSBjcml0aWNhbC4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgVENQIHJlY2VpdmUgcGF0aCBhbmQgRE1BIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBlZGdlIGNhc2VzLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgY29kZSB0aGF0IGRlYWxzIHdpdGggdGhlIG1hcHBpbmcgYW5kIHVubWFwcGluZyBvZiB0aGUgRE1BIGJ1ZmZlcnMsIGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBzaXR1YXRpb25zIHdoZW4gYnVmZmVyIHNwYWNlIGlzIGV4aGF1c3RlZC4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoZXkncmUgdGFraW5nIHRoZSB6ZXJvLWNvcHkgY29uY2VwdCBzZXJpb3VzbHkgb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29waWVzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSdtIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFzIHdlbGwsIGJlY2F1c2UgRE1BIGFuZCBUQ1AgY2FuIGhhcHBlbiBvbiBkaWZmZXJlbnQgY29udGV4dHMgc28gY29uY3VycmVuY3kgY29uY2VybnMgd2lsbCBzdXJlbHkgYmUgaW1wb3J0YW50LiBBbnkgc3VidGxlIGxvY2tpbmcgc3RyYXRlZ2llcywgb3IgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvIG9ic2VydmUuIExldCdzIHNlZSBob3cgdGhleSBkZWFsIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgaG93IHRoZSBETUFCVUYgY29uY2VwdCBpcyByZWFsbHkgdXNlZCBpbiBpdHMgcmVsYXRpb24gdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzIG9mIHRoZSBwYWNrZXQgZGF0YS4gSSB3aWxsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBsb2dpYyB0aGF0IGlzIHBlcmZvcm1lZCBhdCB0aGUgZGV2aWNlIGRyaXZlciBlbmQuIFRoZW4sIEkgd2lsbCBleGFtaW5lIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBzb2NrZXQgbGF5ZXIgYW5kIG90aGVyIG5ldHdvcmsgc3RhY2sgY29tcG9uZW50cyB0byBlbnN1cmUgdGhhdCBpdCBpbnRlZ3JhdGVzIGNsZWFubHkgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowODowOC45NTgwMjk3ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1ODA6XFx0XFxuMjU4MTpcXHRcXHRcXHQvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGFcXG4yNTgyOlxcdFxcdFxcdCAqIHNlcXVlbmNlIG9mIGNtc2dcXG4yNTgzOlxcdFxcdFxcdCAqL1xcbjI1ODQ6XFx0XFx0XFx0bWF4X2ZyYWdzID0gdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKHNrYiwgb2Zmc2V0LCByZW1haW5pbmdfbGVuKTtcXG4yNTg1OlxcdFxcbjI1ODY6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xcbjI1ODc6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZyA9IFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdzW2ldO1xcbjI1ODg6XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuMjU4OTpcXHRcXHRcXHRcXHR1NjQgZnJhZ19vZmZzZXQ7XFxuMjU5MDpcXHRcXHRcXHRcXHRpbnQgZW5kO1xcbjI1OTE6XFx0XFxuMjU5MjpcXHRcXHRcXHRcXHQvKiAhc2tiX2ZyYWdzX3JlYWRhYmxlKCkgc2hvdWxkIGluZGljYXRlIHRoYXQgQUxMIHRoZVxcbjI1OTM6XFx0XFx0XFx0XFx0ICogZnJhZ3MgaW4gdGhpcyBza2IgYXJlIGRtYWJ1ZiBuZXRfaW92cy4gV2UncmUgY2hlY2tpbmdcXG4yNTk0OlxcdFxcdFxcdFxcdCAqIGZvciB0aGF0IGZsYWcgYWJvdmUsIGJ1dCBhbHNvIGNoZWNrIGluZGl2aWR1YWwgZnJhZ3NcXG4yNTk1OlxcdFxcdFxcdFxcdCAqIGhlcmUuIElmIHRoZSB0Y3Agc3RhY2sgaXMgbm90IHNldHRpbmdcXG4yNTk2OlxcdFxcdFxcdFxcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJ3Qgd2FudFxcbjI1OTc6XFx0XFx0XFx0XFx0ICogdG8gY3Jhc2ggaGVyZS5cXG4yNTk4OlxcdFxcdFxcdFxcdCAqL1xcbjI1OTk6XFx0XFx0XFx0XFx0aWYgKCFza2JfZnJhZ19uZXRfaW92KGZyYWcpKSB7XFxuMjYwMDpcXHRcXHRcXHRcXHRcXHRuZXRfZXJyX3JhdGVsaW1pdGVkKFxcXCJGb3VuZCBub24tZG1hYnVmIHNrYiB3aXRoIG5ldF9pb3ZcXFwiKTtcXG4yNjAxOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuMjYwMjpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjAzOlxcdFxcdFxcdFxcdH1cXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0XFx0XFx0bmlvdiA9IHNrYl9mcmFnX25ldF9pb3YoZnJhZyk7XFxuMjYwNjpcXHRcXHRcXHRcXHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XFxuMjYwNzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI2MDg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjYwOTpcXHRcXHRcXHRcXHR9XFxuMjYxMDpcXHRcXG4yNjExOlxcdFxcdFxcdFxcdGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShmcmFnKTtcXG4yNjEyOlxcdFxcdFxcdFxcdGNvcHkgPSBlbmQgLSBvZmZzZXQ7XFxuMjYxMzpcXHRcXG4yNjE0OlxcdFxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgMCkge1xcbjI2MTU6XFx0XFx0XFx0XFx0XFx0Y29weSA9IG1pbihjb3B5LCByZW1haW5pbmdfbGVuKTtcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0XFx0XFx0ZnJhZ19vZmZzZXQgPSBuZXRfaW92X3ZpcnR1YWxfYWRkcihuaW92KSArXFxuMjYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBza2JfZnJhZ19vZmYoZnJhZykgKyBvZmZzZXQgLVxcbjI2MTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhcnQ7XFxuMjYyMDpcXHRcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX29mZnNldCA9IGZyYWdfb2Zmc2V0O1xcbjI2MjE6XFx0XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcXG4yNjIyOlxcdFxcdFxcdFxcdFxcdGVyciA9IHRjcF94YV9wb29sX3JlZmlsbChzaywgXFx1MDAyNnRjcF94YV9wb29sLFxcbjI2MjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG1heF9mcmFncyk7XFxuMjYyNDpcXHRcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjI2MjU6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjYyNjpcXHRcXG4yNjI3OlxcdFxcdFxcdFxcdFxcdC8qIFdpbGwgcGVyZm9ybSB0aGUgZXhjaGFuZ2UgbGF0ZXIgKi9cXG4yNjI4OlxcdFxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcXG4yNjI5OlxcdFxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XFxuMjYzMDpcXHRcXG4yNjMxOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBjb3B5O1xcbjI2MzI6XFx0XFx0XFx0XFx0XFx0cmVtYWluaW5nX2xlbiAtPSBjb3B5O1xcbjI2MzM6XFx0XFxuMjYzNDpcXHRcXHRcXHRcXHRcXHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcXG4yNjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBTT19ERVZNRU1fRE1BQlVGLFxcbjI2MzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXFxuMjYzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRtYWJ1Zl9jbXNnKTtcXG4yNjM4OlxcdFxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMjYzOTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MDguOTU4NDQzODUzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NDcyNDUyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQYXRjaCdzIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGFkZHJlc3NpbmcuIEZpcnN0LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiBpdCDigJMgd2hhdCdzIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGl0J3MgZGVzaWduZWQgdG8gZml4PyBJIG5lZWQgdG8ga25vdyB0aGUgJ3doeScgYmVmb3JlIEkgY2FuIHJlYWxseSBncmFzcCB0aGUgJ2hvdy4nIFRoZSBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBkaXZpbmcgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsYCBhbmQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0Y3BfeGFfcG9vbGAuIFRoZXNlIGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gY2FsbHMgdG8gZXhhbWluZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBmb3IgdGhlIGZpeC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWZpbGwgbWVjaGFuaXNtIHdvcmtzIGFuZCBob3cgdGhlIHBvb2wgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTAuODA1NjkzNzkzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDUwOlxcdFxcdFxcdFxcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXFx1MDAzZW5ldG1lbXNbaV0sIEdGUF9LRVJORUwpO1xcbjI0NTE6XFx0XFx0LyogUm9sbGJhY2sgd2hhdCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLiAqL1xcbjI0NTI6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBwLVxcdTAwM2VtYXg7IGkrKylcXG4yNDUzOlxcdFxcdFxcdF9feGFfZXJhc2UoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBwLVxcdTAwM2V0b2tlbnNbaV0pO1xcbjI0NTQ6XFx0XFxuMjQ1NTpcXHRcXHRwLVxcdTAwM2VtYXggPSAwO1xcbjI0NTY6XFx0XFx0cC1cXHUwMDNlaWR4ID0gMDtcXG4yNDU3OlxcdH1cXG4yNDU4OlxcdFxcbjI0NTk6XFx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxcbjI0NjA6XFx0e1xcbjI0NjE6XFx0XFx0aWYgKCFwLVxcdTAwM2VtYXgpXFxuMjQ2MjpcXHRcXHRcXHRyZXR1cm47XFxuMjQ2MzpcXHRcXG4yNDY0OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDY1OlxcdFxcbjI0NjY6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHhhX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0Njk6XFx0fVxcbjI0NzA6XFx0XFxuMjQ3MTpcXHRzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcXG4yNDcyOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBtYXhfZnJhZ3MpXFxuMjQ3MzpcXHR7XFxuMjQ3NDpcXHRcXHRpbnQgZXJyLCBrO1xcbjI0NzU6XFx0XFxuMjQ3NjpcXHRcXHRpZiAocC1cXHUwMDNlaWR4IFxcdTAwM2MgcC1cXHUwMDNlbWF4KVxcbjI0Nzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjQ3ODpcXHRcXG4yNDc5OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDgwOlxcdFxcbjI0ODE6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBtYXhfZnJhZ3M7IGsrKykge1xcbjI0ODQ6XFx0XFx0XFx0ZXJyID0gX194YV9hbGxvYyhcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIFxcdTAwMjZwLVxcdTAwM2V0b2tlbnNba10sXFxuMjQ4NTpcXHRcXHRcXHRcXHRcXHQgWEFfWkVST19FTlRSWSwgeGFfbGltaXRfMzFiLCBHRlBfS0VSTkVMKTtcXG4yNDg2OlxcdFxcdFxcdGlmIChlcnIpXFxuMjQ4NzpcXHRcXHRcXHRcXHRicmVhaztcXG4yNDg4OlxcdFxcdH1cXG4yNDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowODoxMC44MDU5MTE2MTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2MDQ3NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHRjcF94YV9wb29sYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHN0cnVjdCB0Y3BfeGFfcG9vbGAuIFRoZSBmaXJzdCB0aGluZyBJIGFsd2F5cyBkbyBpcyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoLiBMZXQncyBmaXJlIHVwIGEgYGdyZXBgIGFuZCBzZWUgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgZGVmaW5lZCBhbmQgdXNlZC4gR290dGEgZ2V0IGEgZmVlbCBmb3IgaXRzIGNvbnRleHQsIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IGtub3dpbmcgdGhlIGJhc2ljIHVzYWdlIHBhdHRlcm5zIHdpbGwgaW5mb3JtIHRoZSBkZWVwZXIgZGl2ZSBJJ2xsIG5lZWQgdG8gZG8gbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA4OjEyLjY2NjM5MjE3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2ODk2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjcF94YV9wb29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTI0MTQ9c3RhdGljIGludCB0Y3BfaW5xX2hpbnQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjQzNS0vKiBiYXRjaCBfX3hhX2FsbG9jKCkgY2FsbHMgYW5kIHJlZHVjZSB4YV9sb2NrKCkveGFfdW5sb2NrKCkgb3ZlcmhlYWQuICovXFxubmV0L2lwdjQvdGNwLmM6MjQzNjpzdHJ1Y3QgdGNwX3hhX3Bvb2wge1xcbm5ldC9pcHY0L3RjcC5jLTI0MzctXFx0dThcXHRcXHRtYXg7IC8qIG1heCBcXHUwMDNjPSBNQVhfU0tCX0ZSQUdTICovXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNDQyLVxcbm5ldC9pcHY0L3RjcC5jOjI0NDM6c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcXG5uZXQvaXB2NC90Y3AuYy0yNDQ0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI0NTgtXFxubmV0L2lwdjQvdGNwLmM6MjQ1OTpzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXFxubmV0L2lwdjQvdGNwLmMtMjQ2MC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNDcwLVxcbm5ldC9pcHY0L3RjcC5jOjI0NzE6c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXFxubmV0L2lwdjQvdGNwLmMtMjQ3Mi1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjUyNj1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTMwLVxcdHN0cnVjdCBkbWFidWZfY21zZyBkbWFidWZfY21zZyA9IHsgMCB9O1xcbm5ldC9pcHY0L3RjcC5jOjI1MzE6XFx0c3RydWN0IHRjcF94YV9wb29sIHRjcF94YV9wb29sO1xcbm5ldC9pcHY0L3RjcC5jLTI1MzItXFx0dW5zaWduZWQgaW50IG1heF9mcmFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTIuNzYyMDg3NzY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDA4NDQ1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24sIHRoaW5raW5nIGFzIGlmIEknbSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBjb2RlIHNlY3Rpb24uXG5cbioqRGl2aW5nIGludG8gYG5ldC9pcHY0L3RjcC5jYCDigJMgTGluZXMgMjQzNS0yNDUwKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjQvdGNwLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjQzNSB0byAyNDUwLiBJIGtub3cgdGhpcyBhcmVhIHByZXR0eSB3ZWxsOyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgZGF0YSB0cmFuc21pc3Npb24sIG9yIHBvdGVudGlhbGx5IGNvbmdlc3Rpb24gY29udHJvbCAtIEknbGwgY29uZmlybSB0aGF0IHF1aWNrbHkgYnkgc2Nhbm5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGd1dCB0ZWxscyBtZSB3ZSBhcmUgbGlrZWx5IGluIGEgZmxvdyBjb250cm9sIGxvb3Agb3Igc29tZSBmb3JtIG9mIGNvbmdlc3Rpb24gY29udHJvbC4gSSBhbSBnb2luZyB0byBrZWVwIG15IG1lbnRhbCBtb2RlbCBhY3RpdmUgYXMgSSBzY2FuIHRocm91Z2ggdGhpcyBjb2RlLlxuXG5MZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29udGV4dCwgb2theSwgaXQgY29uZmlybXMgbXkgc3VzcGljaW9ucywgd2UncmUgbGlrZWx5IHdpdGhpbiBhIHNlZ21lbnQgdHJhbnNtaXNzaW9uIGxvb3AuIEkgYmV0IHRoaXMgc2VjdGlvbiBpcyBoYW5kbGluZyB0aGUgc2VuZGluZyBvZiBhIFRDUCBzZWdtZW50IGFuZCBlbnN1cmluZyBpdCBmaXRzIHdpdGhpbiBjZXJ0YWluIHBhcmFtZXRlcnMg4oCTIHBlcmhhcHMgY2hlY2tpbmcgd2luZG93IHNpemVzLCBjb25nZXN0aW9uIHdpbmRvd3MsIG9yIHNvbWUgb3RoZXIgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMgYmVmb3JlIHRoZSBwYWNrZXQgaXMgc2VudCB0byB0aGUgbmV0d29yay4gSSB3b3VsZCBleHBlY3Qgc29tZSBjYWxscyB0byBmdW5jdGlvbnMgcmVsYXRlZCB0byBzZW5kaW5nIHRoZSBkYXRhIHRvIHRoZSBpbnRlcmZhY2UsIHBlcmhhcHMgYHNrYl9zZW5kX3NrYCwgYHRjcF90cmFuc21pdF9za2JgLCBvciBzb21ldGhpbmcgc2ltaWxhci5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhpcy4gSSB3aWxsIGxvb2sgZm9yIGNhbGxzIHRvIHRoZSBrZXJuZWwgdGhhdCBjb25maXJtIG15IGd1ZXNzLiBJZiB0aGlzIGJsb2NrIGhhbmRsZXMgd2luZG93IGFkdmVydGlzZW1lbnQsIHRoZW4gdGhlcmUgd2lsbCBiZSBjYWxscyB0byBzdHJ1Y3R1cmVzIGRlYWxpbmcgd2l0aCByZWNlaXZlIHdpbmRvdyBtYW5hZ2VtZW50LiBJJ2xsIGJlIGFibGUgdG8gY29uZmlybSBteSBndWVzcyBiYXNlZCBvbiBhbnkgY29uZGl0aW9uYWxzIG9yIGNvbnRyb2wgc3RhdGVtZW50cy4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGlzc2VjdCB3aGF0IHRoZXNlIGxpbmVzIGFyZSAqYWN0dWFsbHkqIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTUuODAyOTM1MTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzU6XFx0LyogYmF0Y2ggX194YV9hbGxvYygpIGNhbGxzIGFuZCByZWR1Y2UgeGFfbG9jaygpL3hhX3VubG9jaygpIG92ZXJoZWFkLiAqL1xcbjI0MzY6XFx0c3RydWN0IHRjcF94YV9wb29sIHtcXG4yNDM3OlxcdFxcdHU4XFx0XFx0bWF4OyAvKiBtYXggXFx1MDAzYz0gTUFYX1NLQl9GUkFHUyAqL1xcbjI0Mzg6XFx0XFx0dThcXHRcXHRpZHg7IC8qIGlkeCBcXHUwMDNjPSBtYXggKi9cXG4yNDM5OlxcdFxcdF9fdTMyXFx0XFx0dG9rZW5zW01BWF9TS0JfRlJBR1NdO1xcbjI0NDA6XFx0XFx0bmV0bWVtX3JlZlxcdG5ldG1lbXNbTUFYX1NLQl9GUkFHU107XFxuMjQ0MTpcXHR9O1xcbjI0NDI6XFx0XFxuMjQ0MzpcXHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxcbjI0NDQ6XFx0e1xcbjI0NDU6XFx0XFx0aW50IGk7XFxuMjQ0NjpcXHRcXG4yNDQ3OlxcdFxcdC8qIENvbW1pdCBwYXJ0IHRoYXQgaGFzIGJlZW4gY29waWVkIHRvIHVzZXIgc3BhY2UuICovXFxuMjQ0ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcC1cXHUwMDNlaWR4OyBpKyspXFxuMjQ0OTpcXHRcXHRcXHRfX3hhX2NtcHhjaGcoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBwLVxcdTAwM2V0b2tlbnNbaV0sIFhBX1pFUk9fRU5UUlksXFxuMjQ1MDpcXHRcXHRcXHRcXHQgICAgIChfX2ZvcmNlIHZvaWQgKilwLVxcdTAwM2VuZXRtZW1zW2ldLCBHRlBfS0VSTkVMKTtcXG4yNDUxOlxcdFxcdC8qIFJvbGxiYWNrIHdoYXQgaGFzIGJlZW4gcHJlLWFsbG9jYXRlZCBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKi9cXG4yNDUyOlxcdFxcdGZvciAoOyBpIFxcdTAwM2MgcC1cXHUwMDNlbWF4OyBpKyspXFxuMjQ1MzpcXHRcXHRcXHRfX3hhX2VyYXNlKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncywgcC1cXHUwMDNldG9rZW5zW2ldKTtcXG4yNDU0OlxcdFxcbjI0NTU6XFx0XFx0cC1cXHUwMDNlbWF4ID0gMDtcXG4yNDU2OlxcdFxcdHAtXFx1MDAzZWlkeCA9IDA7XFxuMjQ1NzpcXHR9XFxuMjQ1ODpcXHRcXG4yNDU5OlxcdHN0YXRpYyB2b2lkIHRjcF94YV9wb29sX2NvbW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTUuODAzMTI5MDdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMTIzNjI3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgUGF0Y2ggZm9yIEtNU0FOIE5lY2Vzc2l0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGlzIGZvY3VzZWQgb24gd2hldGhlciBpdCB3YXJyYW50cyB0aGUgdXNlIG9mIEtNU0FOLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGEgbW9yZSBwcmVjaXNlIGNhbGN1bGF0aW9uIG9mIHRoZSBYQXJyYXkgcHJlLWFsbG9jYXRpb24gcG9vbCBzaXplLlxuXG5CZWZvcmUsIGl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgd2FzIHBvdGVudGlhbGx5IG92ZXItYWxsb2NhdGluZyB0b2tlbnMgYmFzZWQgb24gdGhlIHRvdGFsIG51bWJlciBvZiBmcmFnbWVudHMsIGV2ZW4gaWYgYHJlbWFpbmluZ19sZW5gICh0aGUgYW1vdW50IG9mIGRhdGEgYWN0dWFsbHkgdG8gYmUgY29waWVkKSBpbmRpY2F0ZWQgZmV3ZXIgd2VyZSBuZWVkZWQuIE9yLCBwZXJoYXBzLCB0aGVyZSB3YXMgYSBzY2VuYXJpbyB3aGVyZSB0aGUgY291bnQgcHJvdmlkZWQgdHJpZ2dlcmVkIHRoZSBlYXJseSBwcmVhbGxvY2F0aW9uIG9mIFhBIGVudHJpZXMuIFRoaXMgbmV3IHBhdGNoIGludHJvZHVjZXMgYHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbilgIHRvIGRldGVybWluZSB0aGUgKmV4YWN0KiBudW1iZXIgb2YgZnJhZ21lbnRzIHJlcXVpcmVkLCBjYXBwZWQgYnkgYHJlbWFpbmluZ19sZW5gLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBhbmQgcmVmaW5lcyBtZW1vcnkgdXNhZ2UuXG5cbk15IGNvbmNlcm4gbmF0dXJhbGx5IHR1cm5zIHRvIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gTGV0J3MgZGlnIGluLiBJIHNlZSBgZG1hYnVmX2Ntc2dgIGlzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAsIGFuZCBpdHMgZmllbGRzIGFyZSB0aGVuIHBvcHVsYXRlZCB3aXRoaW4gdGhlIGxvb3AuIEV4YW1pbmluZyB0aGUgcmVsZXZhbnQgY29kZSwgYGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW5gIGlzIGFzc2lnbmVkIGZyb20gYHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdYC4gVG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IGluaXRpYWxpemF0aW9uIGlzc3VlcywgdGhlIHJlZmlsbCBmdW5jdGlvbiBvZiB0aGUgcG9vbCBpcyBjaGVja2VkLiBUaGUgaW5kZXggc3RhcnRzIGF0IGAwYC4gV2hlbiB0aGUgcG9vbCBpcyByZWZpbGxlZCwgaXQgcG9wdWxhdGVzIGBwLVx1MDAzZXRva2Vuc1swLi5rLTFdYCB1c2luZyBgX194YV9hbGxvY2AsIGFuZCB0aGVuIGBwLVx1MDAzZWlkeGAgaXMgcmVzZXQgdG8gMC4gU28gdGhlIHRva2VucyBhcmUgd3JpdHRlbiBiZWZvcmUgdGhlIHJlYWQuIFRoZSBvdGhlciBwYXJ0IGlzIHZlcmlmeWluZyB0aGUgYHRjcF94YV9wb29sX21heF9mcmFnc2AgZnVuY3Rpb24uICBJdCdzIHByZXR0eSBzaW1wbGUgYW5kIG9ubHkgY29tcHV0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWdtZW50cywgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3Mgc3lzdGVtYXRpY2FsbHkgY2hlY2sgZm9yIGNvbW1vbiBtZW1vcnkgc2FmZXR5IHJpc2tzOlxuXG4xLiAgKipVbmluaXRpYWxpemVkIGRhdGEgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2U/KiogTm8sIHRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgc2V0IGJlZm9yZSBiZWluZyBwYXNzZWQsIHNvIHRoYXQncyBjb3ZlcmVkLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIHNlZSBubyBldmlkZW5jZSBvZiB0aGlzLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vOyB0aGUgbG9naWMgYXBwZWFycyBzb3VuZCwgYW5kIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8qKiBObywgdGhlIGZvY3VzIGlzIG9uIG9wdGltaXppbmcgYSBmcmFnbWVudCBwcmUtYWxsb2NhdGlvbiBjYWxjdWxhdGlvbiByYXRoZXIgdGhhbiBtb2RpZnlpbmcgYnVmZmVyIGFjY2Vzcy5cblxuR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkgZG9uJ3Qgc2VlIGFueSBzY2VuYXJpb3Mgd2hlcmUgS01TQU4gd291bGQgYmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIG9yIHByb3ZpZGUgc2lnbmlmaWNhbnQgYWRkZWQgdmFsdWUgb3ZlciBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBhbmQgZGVidWcgYnVpbGRzLiBUaGUgcGF0Y2ggY2VudGVycyBhcm91bmQgYSBtb3JlIGVmZmljaWVudCBwcmUtYWxsb2NhdGlvbiBzdHJhdGVneSB3aXRoaW4gYSB3ZWxsLWRlZmluZWQgYW5kIGhhbmRsZWQgY29udGV4dC4gS0FTQU4gaXMgZnVsbHkgZXF1aXBwZWQgdG8gZGV0ZWN0IGFueSBpbnRyb2R1Y2VkIG9yIHVuY292ZXJlZCBsb2dpYyBlcnJvcnMsIGJvdW5kcyBpc3N1ZXMsIG9yIFVBRnMuIFRoZXJlIGFyZSBubyBrbm93biByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgS0FTQU4vZGVidWcgYnVpbGRzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMyLCJPdXRwdXRUb2tlbnMiOjIzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowODoyNi4wMTU0OTQ2NTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cXG5cXG5BbGwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYHRjcF94YV9wb29sX21heF9mcmFncygpYCBhbmQgYHRjcF9yZWN2bXNnX2RtYWJ1ZigpYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBkbWFidWZfY21zZ2Agc3RydWN0dXJlIHNlbnQgdG8gdXNlcnNwYWNlIGNvbnRpbnVlcyB0byBiZSB6ZXJvLWluaXRpYWxpemVkIChgZG1hYnVmX2Ntc2cgPSB7IDAgfWApLCBhbmQgYHRjcF94YV9wb29sLnRva2Vuc2AgZW50cmllcyBhcmUgd3JpdHRlbiBieSBgX194YV9hbGxvYygpYCBwcmlvciB0byBiZWluZyByZWFkIGFuZCBhc3NpZ25lZCBpbnRvIHRoZSBjbXNnLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1ZyB0b29scyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBoZWxwZXIgZnVuY3Rpb24gYHRjcF94YV9wb29sX21heF9mcmFncygpYCB0byBjYWxjdWxhdGUgdGhlIGV4YWN0IG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgYm91bmRlZCBieSBgcmVtYWluaW5nX2xlbmAsIGFuZCBwYXNzZXMgdGhpcyB2YWx1ZSBpbnRvIGB0Y3BfeGFfcG9vbF9yZWZpbGwoKWAgaW5zdGVhZCBvZiBvdmVyLWFsbG9jYXRpbmcgYmFzZWQgb24gcmVtYWluaW5nIGBucl9mcmFnc2AuXFxuXFxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwrdkv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 22:04:19 +0000 UTC FinishedAt: 2026-09-03 22:08:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "06e9cce0-22f0-42b0-a553-d105cecf4c06" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_xa_pool_max_frags", "tcp_recvmsg_dmabuf", "tcp_xa_pool_refill" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MmIzM0OywKICAgICYjMzQ7dGNwX3JlY3Ztc2dfZG1hYnVmJiMzNDssCiAgICAmIzM0O3RjcF94YV9wb29sX3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cblxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNTM2NWJkMWFiYzg5YzY5MDRjZGJmM2FhNTRmNzIyZGEwMGEzODBmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjowNjozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li5jMzUyNzc0MzkzODYxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMjQ5NCw2ICYjNDM7MjQ5NCwzMiBAQCBzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcbiBcdHJldHVybiBrID8gMCA6IGVycjtcbiB9XG4gXG4mIzQzOy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvZiBAc2tiIGRlbGl2ZXJhYmxlIGZyb20gYnl0ZSBAb2Zmc2V0LCBjYXBwZWRcbiYjNDM7ICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGludCByZW1haW5pbmdfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IGVuZCA9IHN0YXJ0ICYjNDM7IHNrYl9mcmFnX3NpemUoXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW2ldKTtcbiYjNDM7XHRcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb3B5IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdG1heF9mcmFncyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGlmIChjb3B5IFx1MDAzZT0gcmVtYWluaW5nX2xlbilcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN0YXJ0ID0gZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1heF9mcmFncztcbiYjNDM7fVxuJiM0MztcbiAvKiBPbiBlcnJvciwgcmV0dXJucyB0aGUgLWVycm5vLiBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZVxuICAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uXG4gICovXG5AQCAtMjUwMyw2ICYjNDM7MjUyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcbiBcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFx0aW50IGksIGNvcHksIG47XG4gXHRpbnQgc2VudCA9IDA7XG5AQCAtMjU1NCw2ICYjNDM7MjU4MSw4IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0LyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhXG4gXHRcdCAqIHNlcXVlbmNlIG9mIGNtc2dcbiBcdFx0ICovXG4mIzQzO1x0XHRtYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pO1xuJiM0MztcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4gXHRcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG5AQCAtMjU5MSw3ICYjNDM7MjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XG4gXHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xuIFx0XHRcdFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCxcbi1cdFx0XHRcdFx0XHRcdCBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgLSBpKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHQgbWF4X2ZyYWdzKTtcbiBcdFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRcdGdvdG8gb3V0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MmIzM0OywKICAgICYjMzQ7dGNwX3JlY3Ztc2dfZG1hYnVmJiMzNDssCiAgICAmIzM0O3RjcF94YV9wb29sX3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNTM2NWJkMWFiYzg5YzY5MDRjZGJmM2FhNTRmNzIyZGEwMGEzODBmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAyMjowNjozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uYzM1Mjc3NDM5Mzg2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI0OTQsNiAmIzQzOzI0OTQsMzIgQEAgc3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsCiAJcmV0dXJuIGsgPyAwIDogZXJyOwogfQogCiYjNDM7LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZAomIzQzOyAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCwKJiM0MzsJCQkJCSAgaW50IHJlbWFpbmluZ19sZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfaGVhZGxlbihza2IpOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaW50IGVuZCA9IHN0YXJ0ICYjNDM7IHNrYl9mcmFnX3NpemUoJmFtcDtza2Jfc2hpbmZvKHNrYiktJmd0O2ZyYWdzW2ldKTsKJiM0MzsJCWludCBjb3B5ID0gZW5kIC0gb2Zmc2V0OwomIzQzOwomIzQzOwkJaWYgKGNvcHkgJmd0OyAwKSB7CiYjNDM7CQkJbWF4X2ZyYWdzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoY29weSAmZ3Q7PSByZW1haW5pbmdfbGVuKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXN0YXJ0ID0gZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBtYXhfZnJhZ3M7CiYjNDM7fQomIzQzOwogLyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGUKICAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uCiAgKi8KQEAgLTI1MDMsNiAmIzQzOzI1MjksNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJc3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07CiAJc3RydWN0IHRjcF94YV9wb29sIHRjcF94YV9wb29sOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzOwogCXVuc2lnbmVkIGludCBzdGFydDsKIAlpbnQgaSwgY29weSwgbjsKIAlpbnQgc2VudCA9IDA7CkBAIC0yNTU0LDYgJiM0MzsyNTgxLDggQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGEKIAkJICogc2VxdWVuY2Ugb2YgY21zZwogCQkgKi8KJiM0MzsJCW1heF9mcmFncyA9IHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbik7CiYjNDM7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewogCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZhbXA7c2tiX3NoaW5mbyhza2IpLSZndDtmcmFnc1tpXTsKIAkJCXN0cnVjdCBuZXRfaW92ICpuaW92OwpAQCAtMjU5MSw3ICYjNDM7MjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlkbWFidWZfY21zZy5mcmFnX29mZnNldCA9IGZyYWdfb2Zmc2V0OwogCQkJCWRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7CiAJCQkJZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCAmYW1wO3RjcF94YV9wb29sLAotCQkJCQkJCSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzIC0gaSk7CiYjNDM7CQkJCQkJCSBtYXhfZnJhZ3MpOwogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHBvdGVudGlhbCB3aXRoIHN5emthbGxlci4gRmlyc3QsIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBpcyBzYWZlLiBObyBleHBsb2l0IGdlbmVyYXRpb24gb3IgbWFsaWNpb3VzIHRhc2tzIGFyZSByZXF1ZXN0ZWQsIGp1c3QgZ29vZCBvbGQtZmFzaGlvbmVkIGRldmVsb3BlciBRQSBhbmQgdHJpYWdlLiBQZXJmZWN0LCBiZW5pZ24gcmVxdWVzdC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYG5ldC9pcHY0L3RjcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpbmNsdWRlcyBhIG5ldyBmdW5jdGlvbiwgYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhZ21lbnRzIGRlbGl2ZXJhYmxlIGZyb20gYSBzcGVjaWZpYyBvZmZzZXQgd2l0aGluIGFuIGBza19idWZmYCwgY2FwcGVkIGJ5IGEgcmVtYWluaW5nIGxlbmd0aC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZnJhZ21lbnRzLCBkZXRlcm1pbmluZyBob3cgbWFueSBjb250cmlidXRlIHRvIHRoZSByZXF1ZXN0ZWQgZGF0YS4KClRoZSBpbXBvcnRhbnQgcGFydCBpcyB3aGVyZSB0aGlzIG5ldyBmdW5jdGlvbiBpcyAqdXNlZCogd2l0aGluIGB0Y3BfcmVjdm1zZ19kbWFidWZgLiBJdCYjMzk7cyByZXBsYWNpbmcgYSBkaXJlY3QgY2FsY3VsYXRpb24gaW52b2x2aW5nIGBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzIC0gaWAgd2l0aCBhIGNhbGwgdG8gYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgY2FsY3VsYXRlZCBgbWF4X2ZyYWdzYCB2YWx1ZSB0aGVuIGdldHMgcGFzc2VkIHRvIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCBmdXp6aW5nIHBvdGVudGlhbCwgSSBuZWVkIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvdGNwLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmVzIDI0ODAtMjY0MC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgaG93IGB0Y3BfeGFfcG9vbGAgaXMgdXNlZCwgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgY2hhbmdlIGhhcyBvbiBkYXRhIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhpcyBzdXJyb3VuZGluZyBjb2RlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGRlY2lkZSB0aGUgZnV6emluZyBlbGVtZW50cyBuZWVkZWQsIHN1Y2ggYXMgRm9jdXNTeW1ib2xzLCBFbmFibGVDb25maWdzLCBXb3J0aEZ1enppbmcsIGFuZCBSZWFzb25pbmcgdG8gcmV0dXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDgwOlx0XG4yNDgxOlx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0ODI6XHRcbjI0ODM6XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG1heF9mcmFnczsgayYjNDM7JiM0MzspIHtcbjI0ODQ6XHRcdFx0ZXJyID0gX194YV9hbGxvYyhcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBcdTAwMjZwLVx1MDAzZXRva2Vuc1trXSxcbjI0ODU6XHRcdFx0XHRcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xuMjQ4NjpcdFx0XHRpZiAoZXJyKVxuMjQ4NzpcdFx0XHRcdGJyZWFrO1xuMjQ4ODpcdFx0fVxuMjQ4OTpcdFxuMjQ5MDpcdFx0eGFfdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ5MTpcdFxuMjQ5MjpcdFx0cC1cdTAwM2VtYXggPSBrO1xuMjQ5MzpcdFx0cC1cdTAwM2VpZHggPSAwO1xuMjQ5NDpcdFx0cmV0dXJuIGsgPyAwIDogZXJyO1xuMjQ5NTpcdH1cbjI0OTY6XHRcbjI0OTc6XHQvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmcmFnbWVudHMgb2YgQHNrYiBkZWxpdmVyYWJsZSBmcm9tIGJ5dGUgQG9mZnNldCwgY2FwcGVkXG4yNDk4Olx0ICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cbjI0OTk6XHQgKi9cbjI1MDA6XHRzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94YV9wb29sX21heF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjUwMTpcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXG4yNTAyOlx0XHRcdFx0XHRcdCAgaW50IHJlbWFpbmluZ19sZW4pXG4yNTAzOlx0e1xuMjUwNDpcdFx0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbjI1MDU6XHRcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xuMjUwNjpcdFx0aW50IGk7XG4yNTA3Olx0XG4yNTA4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7XG4yNTA5Olx0XHRcdGludCBlbmQgPSBzdGFydCAmIzQzOyBza2JfZnJhZ19zaXplKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VmcmFnc1tpXSk7XG4yNTEwOlx0XHRcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xuMjUxMTpcdFxuMjUxMjpcdFx0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuMjUxMzpcdFx0XHRcdG1heF9mcmFncyYjNDM7JiM0Mzs7XG4yNTE0Olx0XHRcdFx0aWYgKGNvcHkgXHUwMDNlPSByZW1haW5pbmdfbGVuKVxuMjUxNTpcdFx0XHRcdFx0YnJlYWs7XG4yNTE2Olx0XHRcdH1cbjI1MTc6XHRcdFx0c3RhcnQgPSBlbmQ7XG4yNTE4Olx0XHR9XG4yNTE5Olx0XG4yNTIwOlx0XHRyZXR1cm4gbWF4X2ZyYWdzO1xuMjUyMTpcdH1cbjI1MjI6XHRcbjI1MjM6XHQvKiBPbiBlcnJvciwgcmV0dXJucyB0aGUgLWVycm5vLiBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZVxuMjUyNDpcdCAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uXG4yNTI1Olx0ICovXG4yNTI2Olx0c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjUyNzpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcbjI1Mjg6XHRcdFx0XHQgICAgICBpbnQgcmVtYWluaW5nX2xlbilcbjI1Mjk6XHR7XG4yNTMwOlx0XHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcbjI1MzE6XHRcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbjI1MzI6XHRcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3M7XG4yNTMzOlx0XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4yNTM0Olx0XHRpbnQgaSwgY29weSwgbjtcbjI1MzU6XHRcdGludCBzZW50ID0gMDtcbjI1MzY6XHRcdGludCBlcnIgPSAwO1xuMjUzNzpcdFxuMjUzODpcdFx0dGNwX3hhX3Bvb2wubWF4ID0gMDtcbjI1Mzk6XHRcdHRjcF94YV9wb29sLmlkeCA9IDA7XG4yNTQwOlx0XHRkbyB7XG4yNTQxOlx0XHRcdHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbjI1NDI6XHRcbjI1NDM6XHRcdFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSB7XG4yNTQ0Olx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI1NDU6XHRcdFx0XHRnb3RvIG91dDtcbjI1NDY6XHRcdFx0fVxuMjU0NzpcdFxuMjU0ODpcdFx0XHQvKiBDb3B5IGhlYWRlci4gKi9cbjI1NDk6XHRcdFx0Y29weSA9IHN0YXJ0IC0gb2Zmc2V0O1xuMjU1MDpcdFx0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuMjU1MTpcdFx0XHRcdGNvcHkgPSBtaW4oY29weSwgcmVtYWluaW5nX2xlbik7XG4yNTUyOlx0XG4yNTUzOlx0XHRcdFx0biA9IGNvcHlfdG9faXRlcihza2ItXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQsIGNvcHksXG4yNTU0Olx0XHRcdFx0XHRcdCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIpO1xuMjU1NTpcdFx0XHRcdGlmIChuICE9IGNvcHkpIHtcbjI1NTY6XHRcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yNTU3Olx0XHRcdFx0XHRnb3RvIG91dDtcbjI1NTg6XHRcdFx0XHR9XG4yNTU5Olx0XG4yNTYwOlx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBjb3B5O1xuMjU2MTpcdFx0XHRcdHJlbWFpbmluZ19sZW4gLT0gY29weTtcbjI1NjI6XHRcbjI1NjM6XHRcdFx0XHQvKiBGaXJzdCBhIGRtYWJ1Zl9jbXNnIGZvciAjIGJ5dGVzIGNvcGllZCB0byB1c2VyXG4yNTY0Olx0XHRcdFx0ICogYnVmZmVyLlxuMjU2NTpcdFx0XHRcdCAqL1xuMjU2NjpcdFx0XHRcdG1lbXNldChcdTAwMjZkbWFidWZfY21zZywgMCwgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSk7XG4yNTY3Olx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcbjI1Njg6XHRcdFx0XHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcbjI1Njk6XHRcdFx0XHRcdFx0ICAgICAgIFNPX0RFVk1FTV9MSU5FQVIsXG4yNTcwOlx0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoZG1hYnVmX2Ntc2cpLFxuMjU3MTpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZG1hYnVmX2Ntc2cpO1xuMjU3MjpcdFx0XHRcdGlmIChlcnIpXG4yNTczOlx0XHRcdFx0XHRnb3RvIG91dDtcbjI1NzQ6XHRcbjI1NzU6XHRcdFx0XHRzZW50ICYjNDM7PSBjb3B5O1xuMjU3NjpcdFxuMjU3NzpcdFx0XHRcdGlmIChyZW1haW5pbmdfbGVuID09IDApXG4yNTc4Olx0XHRcdFx0XHRnb3RvIG91dDtcbjI1Nzk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgYW5kIEl0cyBDb250ZXh0KioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBgdGNwX3JlY3Ztc2dfZG1hYnVmYC4gV2UmIzM5O3ZlIGlkZW50aWZpZWQgaXQgYXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgbGlrZWx5IHBsYXlpbmcgYSBrZXkgcm9sZSBpbiBkaXJlY3QgbWVtb3J5IGFjY2VzcyAoRE1BKSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgVENQIHJlY2VpdmUgcGF0aCwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIERNQSBidWZmZXJzLiBUbyB0cnVseSBncmFzcCBpdHMgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLCB3ZSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlLiBMZXQmIzM5O3MgdHJhY2UgaXRzIHVzYWdlIOKAkyBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIGltYWdpbmluZyBkaWdnaW5nIGludG8gYWxsIHRoZSBjYWxsIHNpdGVzLiBJIHdhbnQgdG8gc2VlIGhvdyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBpcyBpbnZva2VkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uPyBUaGlzIHdpbGwgZ2l2ZSB1cyB2YWx1YWJsZSBjb250ZXh0LiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlZmluZSBvdXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1ODA6XHRcbjI1ODE6XHRcdFx0LyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhXG4yNTgyOlx0XHRcdCAqIHNlcXVlbmNlIG9mIGNtc2dcbjI1ODM6XHRcdFx0ICovXG4yNTg0Olx0XHRcdG1heF9mcmFncyA9IHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbik7XG4yNTg1Olx0XG4yNTg2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFnczsgaSYjNDM7JiM0MzspIHtcbjI1ODc6XHRcdFx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW2ldO1xuMjU4ODpcdFx0XHRcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuMjU4OTpcdFx0XHRcdHU2NCBmcmFnX29mZnNldDtcbjI1OTA6XHRcdFx0XHRpbnQgZW5kO1xuMjU5MTpcdFxuMjU5MjpcdFx0XHRcdC8qICFza2JfZnJhZ3NfcmVhZGFibGUoKSBzaG91bGQgaW5kaWNhdGUgdGhhdCBBTEwgdGhlXG4yNTkzOlx0XHRcdFx0ICogZnJhZ3MgaW4gdGhpcyBza2IgYXJlIGRtYWJ1ZiBuZXRfaW92cy4gV2UmIzM5O3JlIGNoZWNraW5nXG4yNTk0Olx0XHRcdFx0ICogZm9yIHRoYXQgZmxhZyBhYm92ZSwgYnV0IGFsc28gY2hlY2sgaW5kaXZpZHVhbCBmcmFnc1xuMjU5NTpcdFx0XHRcdCAqIGhlcmUuIElmIHRoZSB0Y3Agc3RhY2sgaXMgbm90IHNldHRpbmdcbjI1OTY6XHRcdFx0XHQgKiBza2JfZnJhZ3NfcmVhZGFibGUoKSBjb3JyZWN0bHksIHdlIHN0aWxsIGRvbiYjMzk7dCB3YW50XG4yNTk3Olx0XHRcdFx0ICogdG8gY3Jhc2ggaGVyZS5cbjI1OTg6XHRcdFx0XHQgKi9cbjI1OTk6XHRcdFx0XHRpZiAoIXNrYl9mcmFnX25ldF9pb3YoZnJhZykpIHtcbjI2MDA6XHRcdFx0XHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7Rm91bmQgbm9uLWRtYWJ1ZiBza2Igd2l0aCBuZXRfaW92XCYjMzQ7KTtcbjI2MDE6XHRcdFx0XHRcdGVyciA9IC1FTk9ERVY7XG4yNjAyOlx0XHRcdFx0XHRnb3RvIG91dDtcbjI2MDM6XHRcdFx0XHR9XG4yNjA0Olx0XG4yNjA1Olx0XHRcdFx0bmlvdiA9IHNrYl9mcmFnX25ldF9pb3YoZnJhZyk7XG4yNjA2Olx0XHRcdFx0aWYgKCFuZXRfaXNfZGV2bWVtX2lvdihuaW92KSkge1xuMjYwNzpcdFx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI2MDg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjYwOTpcdFx0XHRcdH1cbjI2MTA6XHRcbjI2MTE6XHRcdFx0XHRlbmQgPSBzdGFydCAmIzQzOyBza2JfZnJhZ19zaXplKGZyYWcpO1xuMjYxMjpcdFx0XHRcdGNvcHkgPSBlbmQgLSBvZmZzZXQ7XG4yNjEzOlx0XG4yNjE0Olx0XHRcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbjI2MTU6XHRcdFx0XHRcdGNvcHkgPSBtaW4oY29weSwgcmVtYWluaW5nX2xlbik7XG4yNjE2Olx0XG4yNjE3Olx0XHRcdFx0XHRmcmFnX29mZnNldCA9IG5ldF9pb3ZfdmlydHVhbF9hZGRyKG5pb3YpICYjNDM7XG4yNjE4Olx0XHRcdFx0XHRcdCAgICAgIHNrYl9mcmFnX29mZihmcmFnKSAmIzQzOyBvZmZzZXQgLVxuMjYxOTpcdFx0XHRcdFx0XHQgICAgICBzdGFydDtcbjI2MjA6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XG4yNjIxOlx0XHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xuMjYyMjpcdFx0XHRcdFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCxcbjI2MjM6XHRcdFx0XHRcdFx0XHRcdCBtYXhfZnJhZ3MpO1xuMjYyNDpcdFx0XHRcdFx0aWYgKGVycilcbjI2MjU6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4yNjI2Olx0XG4yNjI3Olx0XHRcdFx0XHQvKiBXaWxsIHBlcmZvcm0gdGhlIGV4Y2hhbmdlIGxhdGVyICovXG4yNjI4Olx0XHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3Rva2VuID0gdGNwX3hhX3Bvb2wudG9rZW5zW3RjcF94YV9wb29sLmlkeF07XG4yNjI5Olx0XHRcdFx0XHRkbWFidWZfY21zZy5kbWFidWZfaWQgPSBuZXRfZGV2bWVtX2lvdl9iaW5kaW5nX2lkKG5pb3YpO1xuMjYzMDpcdFxuMjYzMTpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSBjb3B5O1xuMjYzMjpcdFx0XHRcdFx0cmVtYWluaW5nX2xlbiAtPSBjb3B5O1xuMjYzMzpcdFxuMjYzNDpcdFx0XHRcdFx0ZXJyID0gcHV0X2Ntc2dfbm90cnVuYyhtc2csIFNPTF9TT0NLRVQsXG4yNjM1Olx0XHRcdFx0XHRcdFx0ICAgICAgIFNPX0RFVk1FTV9ETUFCVUYsXG4yNjM2Olx0XHRcdFx0XHRcdFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXG4yNjM3Olx0XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRtYWJ1Zl9jbXNnKTtcbjI2Mzg6XHRcdFx0XHRcdGlmIChlcnIpXG4yNjM5Olx0XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MDpcdFxuMjY0MTpcdFx0XHRcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5pb3YtXHUwMDNlZGVzYy5wcF9yZWZfY291bnQpO1xuMjY0MjpcdFx0XHRcdFx0dGNwX3hhX3Bvb2wubmV0bWVtc1t0Y3BfeGFfcG9vbC5pZHgmIzQzOyYjNDM7XSA9IHNrYl9mcmFnX25ldG1lbShmcmFnKTtcbjI2NDM6XHRcbjI2NDQ6XHRcdFx0XHRcdHNlbnQgJiM0Mzs9IGNvcHk7XG4yNjQ1Olx0XG4yNjQ2Olx0XHRcdFx0XHRpZiAocmVtYWluaW5nX2xlbiA9PSAwKVxuMjY0NzpcdFx0XHRcdFx0XHRnb3RvIG91dDtcbjI2NDg6XHRcdFx0XHR9XG4yNjQ5Olx0XHRcdFx0c3RhcnQgPSBlbmQ7XG4yNjUwOlx0XHRcdH1cbjI2NTE6XHRcbjI2NTI6XHRcdFx0dGNwX3hhX3Bvb2xfY29tbWl0KHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCk7XG4yNjUzOlx0XHRcdGlmICghcmVtYWluaW5nX2xlbilcbjI2NTQ6XHRcdFx0XHRnb3RvIG91dDtcbjI2NTU6XHRcbjI2NTY6XHRcdFx0LyogaWYgcmVtYWluaW5nX2xlbiBpcyBub3Qgc2F0aXNmaWVkIHlldCwgd2UgbmVlZCB0byBnbyB0byB0aGVcbjI2NTc6XHRcdFx0ICogbmV4dCBmcmFnIGluIHRoZSBmcmFnX2xpc3QgdG8gc2F0aXNmeSByZW1haW5pbmdfbGVuLlxuMjY1ODpcdFx0XHQgKi9cbjI2NTk6XHRcdFx0c2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdCA/OiBza2ItXHUwMDNlbmV4dDtcbjI2NjA6XHRcbjI2NjE6XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC0gc3RhcnQ7XG4yNjYyOlx0XHR9IHdoaWxlIChza2IpO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKHJlbWFpbmluZ19sZW4pIHtcbjI2NjU6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjI2NjY6XHRcdFx0Z290byBvdXQ7XG4yNjY3Olx0XHR9XG4yNjY4Olx0XG4yNjY5Olx0b3V0OlxuMjY3MDpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0KHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCk7XG4yNjcxOlx0XHRpZiAoIXNlbnQpXG4yNjcyOlx0XHRcdHNlbnQgPSBlcnI7XG4yNjczOlx0XG4yNjc0Olx0XHRyZXR1cm4gc2VudDtcbjI2NzU6XHR9XG4yNjc2Olx0XG4yNjc3Olx0LypcbjI2Nzg6XHQgKlx0VGhpcyByb3V0aW5lIGNvcGllcyBmcm9tIGEgc29jayBzdHJ1Y3QgaW50byB0aGUgdXNlciBidWZmZXIuXG4yNjc5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjYxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFRoaXMgc3VnZ2VzdHMgZWl0aGVyIGEgYGdyZXBgIGZvciB0aGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgd2l0aGluIHRoZSBjb2RlYmFzZSwgb3IgYSBtb3JlIHRhcmdldGVkIGNoZWNrIGZvciB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgdG9vbHMgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2lsbCBxdWlja2x5IGlsbHVtaW5hdGUgaXRzIHJvbGUgaW4gdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmVjdm1zZ19kbWFidWYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9MjUwMD1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF94YV9wb29sX21heF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI1MjUtICovXG5uZXQvaXB2NC90Y3AuYzoyNTI2OnN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcC5jLTI1MjctXHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTI2ODU9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjg4OC1cbm5ldC9pcHY0L3RjcC5jOjI4ODk6XHRcdFx0XHRlcnIgPSB0Y3BfcmVjdm1zZ19kbWFidWYoc2ssIHNrYiwgb2Zmc2V0LCBtc2csXG5uZXQvaXB2NC90Y3AuYy0yODkwLVx0XHRcdFx0XHRcdFx0IHVzZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGB0Y3BfcmVjdm1zZ19sb2NrZWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLiBNeSBndXQgZmVlbGluZyBzYXlzIHRoYXQgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgcHJvYmFibHkgdHJpZ2dlcmVkIHVuZGVyIHNvbWUgdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDI4ODguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdHJhY2UgdGhlIGxvZ2ljIGFuZCBpZGVudGlmeSB0aGUgcGF0aCB0aGF0IGxlYWRzIHRvIHRoaXMgcGFydGljdWxhciBjYWxsLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW4gcGxheT8gV2hhdCBjaGVja3MgYXJlIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyB0eXBlIG9mIGJ1ZmZlciwgYSBwYXJ0aWN1bGFyIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLCBvciBtYXliZSBzb21lIHJlc291cmNlIGxpbWl0YXRpb25zPyBLbm93aW5nICp3aHkqIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gaXMgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIHByZWRpY2F0ZXMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBnZXRzIGludm9rZWQgb3IgaWYgd2UgdGFrZSBhIGRpZmZlcmVudCBicmFuY2guIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODcwOlx0XHRcdFx0XHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCBvZmZzZXQsIG1zZyxcbjI4NzE6XHRcdFx0XHRcdFx0XHRcdCAgICB1c2VkKTtcbjI4NzI6XHRcdFx0XHRcdGlmIChlcnIpIHtcbjI4NzM6XHRcdFx0XHRcdFx0LyogRXhjZXB0aW9uLiBCYWlsb3V0ISAqL1xuMjg3NDpcdFx0XHRcdFx0XHRpZiAoIWNvcGllZClcbjI4NzU6XHRcdFx0XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuMjg3NjpcdFx0XHRcdFx0XHRicmVhaztcbjI4Nzc6XHRcdFx0XHRcdH1cbjI4Nzg6XHRcdFx0XHR9IGVsc2Uge1xuMjg3OTpcdFx0XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19TT0NLX0RFVk1FTSkpIHtcbjI4ODA6XHRcdFx0XHRcdFx0LyogZG1hYnVmIHNrYnMgY2FuIG9ubHkgYmUgcmVjZWl2ZWRcbjI4ODE6XHRcdFx0XHRcdFx0ICogd2l0aCB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcuXG4yODgyOlx0XHRcdFx0XHRcdCAqL1xuMjg4MzpcdFx0XHRcdFx0XHRpZiAoIWNvcGllZClcbjI4ODQ6XHRcdFx0XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuMjg4NTpcdFxuMjg4NjpcdFx0XHRcdFx0XHRicmVhaztcbjI4ODc6XHRcdFx0XHRcdH1cbjI4ODg6XHRcbjI4ODk6XHRcdFx0XHRcdGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZyxcbjI4OTA6XHRcdFx0XHRcdFx0XHRcdCB1c2VkKTtcbjI4OTE6XHRcdFx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI4OTI6XHRcdFx0XHRcdFx0aWYgKCFjb3BpZWQpXG4yODkzOlx0XHRcdFx0XHRcdFx0Y29waWVkID0gZXJyO1xuMjg5NDpcdFxuMjg5NTpcdFx0XHRcdFx0XHRicmVhaztcbjI4OTY6XHRcdFx0XHRcdH1cbjI4OTc6XHRcdFx0XHRcdHVzZWQgPSBlcnI7XG4yODk4Olx0XHRcdFx0fVxuMjg5OTpcdFx0XHR9XG4yOTAwOlx0XG4yOTAxOlx0XHRcdGxhc3RfY29waWVkX2RtYWJ1ZiA9ICFza2JfZnJhZ3NfcmVhZGFibGUoc2tiKTtcbjI5MDI6XHRcbjI5MDM6XHRcdFx0V1JJVEVfT05DRSgqc2VxLCAqc2VxICYjNDM7IHVzZWQpO1xuMjkwNDpcdFx0XHRjb3BpZWQgJiM0Mzs9IHVzZWQ7XG4yOTA1Olx0XHRcdGxlbiAtPSB1c2VkO1xuMjkwNjpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKVxuMjkwNzpcdFx0XHRcdHNrX3BlZWtfb2Zmc2V0X2Z3ZChzaywgdXNlZCk7XG4yOTA4Olx0XHRcdGVsc2VcbjI5MDk6XHRcdFx0XHRza19wZWVrX29mZnNldF9id2Qoc2ssIHVzZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBUQ1AgUmVjZWl2ZSBQYXRoIHdpdGggRGV2bWVtL0RNQUJVRioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBhbmQgZGV2bWVtL2RtYWJ1ZiBUQ1AgcmVjZWl2ZSBvcGVyYXRpb25zLiBTaW5jZSBgdGNwX3JlY3Ztc2dfbG9ja2VkYCBpcyBjYWxsZWQgZnJvbSBgdGNwX3JlY3Ztc2dgLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkcml2ZSB0aGUgYmVoYXZpb3Igb2YgZGV2bWVtL2RtYWJ1ZiBvbiB0aGUgcmVjZWl2ZSBwYXRoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWFyY2ggZm9yIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgY29kZSB1c2FnZS4gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBmb3IgYSBmZXcga2V5IHRlcm1zOiBgU09fREVWTUVNYCwgYE1TR19TT0NLX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgTkVUX0RFVk1FTWAuIFRoYXQgc2hvdWxkIGNhc3QgYSB3aWRlIG5ldCBhY3Jvc3MgS2NvbmZpZyBmaWxlcyBhbmQgc291cmNlIGNvZGUsIGhvcGVmdWxseSByZXZlYWxpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3dpdGNoZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLiBUaGlzIHdpbGwgZ3VpZGUgbWUgdG93YXJkIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIGdldHMgaGFuZGxlZCBpbiB0aGlzIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfREVWTUVNfERNQV9TSEFSRURfQlVGRkVSfE1TR19TT0NLX0RFVk1FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3Q9NjU9QW55IGV4cG9ydGVycyBvciB1c2VycyBvZiB0aGUgZG1hLWJ1ZiBidWZmZXIgc2hhcmluZyBmcmFtZXdvcmsgbXVzdCBoYXZlIGFcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdDo2NjomIzM5O3NlbGVjdCBETUFfU0hBUkVEX0JVRkZFUiYjMzk7IGluIHRoZWlyIHJlc3BlY3RpdmUgS2NvbmZpZ3MuXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5yc3QtNjctXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q9MTQ3PVRoZSB1c2VyIGFwcGxpY2F0aW9uIG11c3Qgc2lnbmFsIHRvIHRoZSBrZXJuZWwgdGhhdCBpdCBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZ1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTQ4OmRldm1lbSBkYXRhIGJ5IHBhc3NpbmcgdGhlIE1TR19TT0NLX0RFVk1FTSBmbGFnIHRvIHJlY3Ztc2c6OlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTQ5LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTUwOlx0cmV0ID0gcmVjdm1zZyhmZCwgXHUwMDI2bXNnLCBNU0dfU09DS19ERVZNRU0pO1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTUxLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MTUyOkFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCBzcGVjaWZ5IHRoZSBNU0dfU09DS19ERVZNRU0gZmxhZyB3aWxsIHJlY2VpdmUgYW4gRUZBVUxUXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNTMtb24gZGV2bWVtIGRhdGEuXG4tLVxuZHJpdmVycy9NYWtlZmlsZT03OD1vYmoteVx0XHRcdFx0JiM0Mzs9IGRheC9cbmRyaXZlcnMvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSAmIzQzOz0gZG1hLWJ1Zi9cbmRyaXZlcnMvTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX05VQlVTKVx0XHQmIzQzOz0gbnVidXMvXG4tLVxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc9Nj1jb25maWcgRFJNX0FDQ0VMX0hBQkFOQUxBQlNcbi0tXG5kcml2ZXJzL2FjY2VsL2hhYmFuYWxhYnMvS2NvbmZpZy0xMi1cdHNlbGVjdCBIV01PTlxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc6MTM6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTE0LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz00PWNvbmZpZyBTWU5DX0ZJTEVcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02LVx0ZGVmYXVsdCBuXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy04LVx0aGVscFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTMzPWNvbmZpZyBVRE1BQlVGXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzUtXHRkZWZhdWx0IG5cbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjM2Olx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctMzctXHRkZXBlbmRzIG9uIE1FTUZEX0NSRUFURSB8fCBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz00Mz1jb25maWcgRE1BQlVGX0RFQlVHXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy00NC1cdGJvb2wgXCYjMzQ7RE1BLUJVRiBkZWJ1ZyBjaGVja3NcJiMzNDtcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjQ1Olx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNDYtXHRkZWZhdWx0IHkgaWYgREVCVUdcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1Rcbi0tXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01NC1cdGRlcGVuZHMgb24gS1VOSVRcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjU1Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01Ni1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NjA9bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYxLVx0Ym9vbCBcJiMzNDtETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1wmIzM0O1xuZHJpdmVycy9kbWEtYnVmL0tjb25maWc6NjI6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTYzLVx0aGVscFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTg9bWVudWNvbmZpZyBEUk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMy1cdHNlbGVjdCBJMkNcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnOjE0Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xNS1cdHNlbGVjdCBTWU5DX0ZJTEVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWc9Mj1jb25maWcgRFJNX1ZJUlRJT19HUFVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWctOC1cdHNlbGVjdCBEUk1fR0VNX1NITUVNX0hFTFBFUlxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnOjk6XHRzZWxlY3QgVklSVElPX0RNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc9Nj1jb25maWcgVEVHUkFfSE9TVDFYXG4tLVxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cdGRlcGVuZHMgb24gQVJDSF9URUdSQSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnOjk6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnLTEwLVx0c2VsZWN0IFRFR1JBX0hPU1QxWF9DT05URVhUX0JVU1xuLS1cbmRyaXZlcnMvaWlvL0tjb25maWc9MTU9Y29uZmlnIElJT19CVUZGRVJcbmRyaXZlcnMvaWlvL0tjb25maWctMTYtXHRib29sIFwmIzM0O0VuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPXCYjMzQ7XG5kcml2ZXJzL2lpby9LY29uZmlnOjE3Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2lpby9LY29uZmlnLTE4LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTI9bWVudWNvbmZpZyBJTkZJTklCQU5EXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNy1cdGRlcGVuZHMgb24gIUFMUEhBXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy05LVx0c2VsZWN0IElSUV9QT0xMXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00Ny1cdGRlcGVuZHMgb24gTU1VXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvS2NvbmZpZz01MT1jb25maWcgSU9NTVVGRF9URVNUXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTYtXHRkZXBlbmRzIG9uIElPTU1VX1BUX0FNRFYxPXkgfHwgSU9NTVVGRD1JT01NVV9QVF9BTURWMVxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NTc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTU4LVx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5jPTQ4Mj1pbnQgaW9wdF9tYXBfZmlsZV9wYWdlcyhzdHJ1Y3QgaW9tbXVmZF9jdHggKmljdHgsIHN0cnVjdCBpb19wYWdldGFibGUgKmlvcHQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5jLTQ5Ny1cdHN0YXJ0X2J5dGUgPSBzdGFydCAtIEFMSUdOX0RPV04oc3RhcnQsIFBBR0VfU0laRSk7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmM6NDk4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuYy00OTktXHRcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmg9MjUxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb3B0X2lzX2RtYWJ1ZihzdHJ1Y3QgaW9wdF9wYWdlcyAqcGFnZXMpXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmgtMjUyLXtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuaDoyNTM6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuaC0yNTQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYz0xNTI3PXN0cnVjdCBpb3B0X3BhZ2VzICppb3B0X2FsbG9jX2RtYWJ1Zl9wYWdlcyhzdHJ1Y3QgaW9tbXVmZF9jdHggKmljdHgsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmMtMTUzNi1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jOjE1Mzc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTE1MzgtXHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbi0tXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0zPWNvbmZpZyBWSURFT0JVRjJfQ09SRVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6NDpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctNS1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTM9Y29uZmlnIFZJREVPQlVGMl9ETUFfQ09OVElHXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTYtXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MTc6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE4LVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTk9Y29uZmlnIFZJREVPQlVGMl9WTUFMTE9DXG4tLVxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMjItXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MjM6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTI0LVxuLS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnPTE9Y29uZmlnIFZJREVPX1RFR1JBX1ZERVxuLS1cbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbnZpZGlhL3RlZ3JhLXZkZS9LY29uZmlnLTYtXHRkZXBlbmRzIG9uIFZJREVPX0RFVlxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc6NzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWctOC1cdHNlbGVjdCBJT01NVV9JT1ZBXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWc9MjY2PWNvbmZpZyBRQ09NX0ZBU1RSUENcbi0tXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0yNjktXHRkZXBlbmRzIG9uIFJQTVNHXG5kcml2ZXJzL21pc2MvS2NvbmZpZzoyNzA6XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvbWlzYy9LY29uZmlnLTI3MS1cdHNlbGVjdCBRQ09NX1NDTVxuLS1cbmRyaXZlcnMvdGVlL0tjb25maWc9Mz1tZW51Y29uZmlnIFRFRVxuLS1cbmRyaXZlcnMvdGVlL0tjb25maWctNi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbmRyaXZlcnMvdGVlL0tjb25maWc6NzpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy90ZWUvS2NvbmZpZy04LVx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9MTkyPWNvbmZpZyBVU0JfRl9GU1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTkzOlx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xOTQtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz01OD1jb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTk6XHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNjAtXG4tLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZz0xNjM9Y29uZmlnIFZJUlRJT19NTUlPX0NNRExJTkVfREVWSUNFU1xuLS1cbmRyaXZlcnMvdmlydGlvL0tjb25maWctMTczLVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzoxNzQ6Y29uZmlnIFZJUlRJT19ETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xNzUtXHR0cmlzdGF0ZVxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZzoxNzY6XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTE3Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfVklSVElPX01FTSkgJiM0Mzs9IHZpcnRpb19tZW0ub1xuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1ZJUlRJT19ETUFfU0hBUkVEX0JVRkZFUikgJiM0Mzs9IHZpcnRpb19kbWFfYnVmLm9cbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19WSVJUSU9fREVCVUcpICYjNDM7PSB2aXJ0aW9fZGVidWcub1xuLS1cbmRyaXZlcnMveGVuL0tjb25maWc9MTQ1PWNvbmZpZyBYRU5fR05UREVWX0RNQUJVRlxuLS1cbmRyaXZlcnMveGVuL0tjb25maWctMTQ3LVx0ZGVwZW5kcyBvbiBYRU5fR05UREVWIFx1MDAyNlx1MDAyNiBYRU5fR1JBTlRfRE1BX0FMTE9DXG5kcml2ZXJzL3hlbi9LY29uZmlnOjE0ODpcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuZHJpdmVycy94ZW4vS2NvbmZpZy0xNDktXHRoZWxwXG4tLVxuaW5jbHVkZS9saW51eC9zb2NrZXQuaD0xOTc9c3RydWN0IHVjcmVkIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0My1cbmluY2x1ZGUvbGludXgvc29ja2V0Lmg6MzQ0OiNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFx0LyogUmVjZWl2ZSBkZXZtZW0gc2ticyBhcyBjbXNnICovXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0NS0jZGVmaW5lIE1TR19aRVJPQ09QWVx0MHg0MDAwMDAwXHQvKiBVc2UgdXNlciBkYXRhIGluIGtlcm5lbCBwYXRoICovXG4tLVxuaW5jbHVkZS9uZXQvbmV0bWVtLmg9MzYxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuZXRtZW1fZ2V0X2RtYV9hZGRyKG5ldG1lbV9yZWYgbmV0bWVtKVxuLS1cbmluY2x1ZGUvbmV0L25ldG1lbS5oLTM2NS1cbmluY2x1ZGUvbmV0L25ldG1lbS5oOjM2NjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVk1FTSlcbmluY2x1ZGUvbmV0L25ldG1lbS5oLTM2Ny1zdGF0aWMgaW5saW5lIGJvb2wgbmV0X2lzX2Rldm1lbV9pb3YoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4tLVxuaW9fdXJpbmcvemNyeC5jPTEzMD1zdGF0aWMgdm9pZCBpb191bm1hcF9kbWFidWYoc3RydWN0IGlvX3pjcnhfbWVtICptZW0pXG5pb191cmluZy96Y3J4LmMtMTMxLXtcbmlvX3VyaW5nL3pjcnguYzoxMzI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbmlvX3VyaW5nL3pjcnguYy0xMzMtXHRcdHJldHVybjtcbi0tXG5pb191cmluZy96Y3J4LmM9MTQzPXN0YXRpYyB2b2lkIGlvX3JlbGVhc2VfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxuaW9fdXJpbmcvemNyeC5jLTE0NC17XG5pb191cmluZy96Y3J4LmM6MTQ1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG5pb191cmluZy96Y3J4LmMtMTQ2LVx0XHRyZXR1cm47XG4tLVxuaW9fdXJpbmcvemNyeC5jPTE1Mj1zdGF0aWMgaW50IGlvX2ltcG9ydF9kbWFidWYoc3RydWN0IGlvX3pjcnhfaWZxICppZnEsXG4tLVxuaW9fdXJpbmcvemNyeC5jLTE2Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG5pb191cmluZy96Y3J4LmM6MTY3Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG5pb191cmluZy96Y3J4LmMtMTY4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTY2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGttZW1fY2FjaGVfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjY3OmlmZXEgKCQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZS02OC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkbWFidWZfaXRlci5vXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0Mj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk0My0jZW5kaWZcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ5NDQ6I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk0NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXG4tLVxubmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4tLVxubmV0L0tjb25maWctNjgtXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxubmV0L0tjb25maWctNzAtXHRkZWZfYm9vbCB5XG5uZXQvS2NvbmZpZy03MS1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxubmV0L0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXG5uZXQvS2NvbmZpZy03My1cdGRlcGVuZHMgb24gUEFHRV9QT09MXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX05FVF9URVNUKSAmIzQzOz0gbmV0X3Rlc3Qub1xubmV0L2NvcmUvTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xubmV0L2NvcmUvTWFrZWZpbGUtNTMtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgJiM0Mzs9IGxvY2tfZGVidWcub1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oLTktICovXG5uZXQvY29yZS9kZXZtZW0uaDoxMDojaWZuZGVmIF9ORVRfREVWTUVNX0hcbm5ldC9jb3JlL2Rldm1lbS5oOjExOiNkZWZpbmUgX05FVF9ERVZNRU1fSFxubmV0L2NvcmUvZGV2bWVtLmgtMTItXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTg9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuLS1cbm5ldC9jb3JlL2Rldm1lbS5oLTc4LVxubmV0L2NvcmUvZGV2bWVtLmg6Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXG5uZXQvY29yZS9kZXZtZW0uaC04MC0vKiBPd25lciBvZiB0aGUgZG1hLWJ1ZiBjaHVua3MgaW5zZXJ0ZWQgaW50byB0aGUgZ2VuIHBvb2wuIEVhY2ggc2NhdHRlcmxpc3Rcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0yNDI9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbi0tXG5uZXQvY29yZS9kZXZtZW0uaC0yNDctXG5uZXQvY29yZS9kZXZtZW0uaDoyNDg6I2VuZGlmIC8qIF9ORVRfREVWTUVNX0ggKi9cbi0tXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTItXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MTM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmgtMTQtaW50IG1wX2RtYWJ1Zl9kZXZtZW1faW5pdChzdHJ1Y3QgcGFnZV9wb29sICpwb29sKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNjg1PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTI4NzgtXHRcdFx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcC5jOjI4Nzk6XHRcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1NPQ0tfREVWTUVNKSkge1xubmV0L2lwdjQvdGNwLmMtMjg4MC1cdFx0XHRcdFx0LyogZG1hYnVmIHNrYnMgY2FuIG9ubHkgYmUgcmVjZWl2ZWRcbm5ldC9pcHY0L3RjcC5jOjI4ODE6XHRcdFx0XHRcdCAqIHdpdGggdGhlIE1TR19TT0NLX0RFVk1FTSBmbGFnLlxubmV0L2lwdjQvdGNwLmMtMjg4Mi1cdFx0XHRcdFx0ICovXG4tLVxucnVzdC9oZWxwZXJzL2hlbHBlcnMuYy01OS0jaW5jbHVkZSBcJiMzNDtkbWEuY1wmIzM0O1xucnVzdC9oZWxwZXJzL2hlbHBlcnMuYzo2MDojaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXG5ydXN0L2hlbHBlcnMvaGVscGVycy5jLTYxLSNpbmNsdWRlIFwmIzM0O2RtYS1yZXN2LmNcJiMzNDtcbi0tXG5zYW1wbGVzL0tjb25maWc9MjMwPWNvbmZpZyBTQU1QTEVfVkZJT19NREVWX01CT0NIU1xuLS1cbnNhbXBsZXMvS2NvbmZpZy0yMzMtXHRzZWxlY3QgVkZJT19NREVWXG5zYW1wbGVzL0tjb25maWc6MjM0Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5zYW1wbGVzL0tjb25maWctMjM1LVx0aGVscFxuLS1cbnNvdW5kL3NvYy9mc2wvS2NvbmZpZz02PWNvbmZpZyBTTkRfU09DX0ZTTF9BU1JDXG4tLVxuc291bmQvc29jL2ZzbC9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIEhBU19ETUFcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZzo5Olx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXG5zb3VuZC9zb2MvZnNsL0tjb25maWctMTAtXHRzZWxlY3QgUkVHTUFQX01NSU9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oPTE5Nz1zdHJ1Y3QgdWNyZWQge1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMzQzLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaDozNDQ6I2RlZmluZSBNU0dfU09DS19ERVZNRU0gMHgyMDAwMDAwXHQvKiBSZWNlaXZlIGRldm1lbSBza2JzIGFzIGNtc2cgKi9cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvbGludXgvc29ja2V0LmgtMzQ1LSNkZWZpbmUgTVNHX1pFUk9DT1BZXHQweDQwMDAwMDBcdC8qIFVzZSB1c2VyIGRhdGEgaW4ga2VybmVsIHBhdGggKi9cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYy0xNS0jZW5kaWZcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L21zZ19mbGFncy5jOjE2OiNpZm5kZWYgTVNHX1NPQ0tfREVWTUVNXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYzoxNzojZGVmaW5lIE1TR19TT0NLX0RFVk1FTVx0XHQgMHgyMDAwMDAwXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYy0xOC0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9jb25maWc9MTc9Q09ORklHX05FVF9DTFNfQlBGPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2NvbmZpZzoxODpDT05GSUdfTkVUX0RFVk1FTT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9jb25maWctMTktQ09ORklHX05FVF9JUEdSRT15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy04NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6ODY6I2lmbmRlZiBNU0dfU09DS19ERVZNRU1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6ODc6I2RlZmluZSBNU0dfU09DS19ERVZNRU0gMHgyMDAwMDAwXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTg4LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM9ODQ3PXN0YXRpYyBpbnQgZG9fc2VydmVyKHN0cnVjdCBtZW1vcnlfYnVmZmVyICptZW0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05NjEtXHRcdG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjdHJsX2RhdGEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzo5NjI6XHRcdHJldCA9IHJlY3Ztc2coY2xpZW50X2ZkLCBcdTAwMjZtc2csIE1TR19TT0NLX0RFVk1FTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTk2My1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3JlY3Ztc2cgcmV0PSVsZFxcblwmIzM0OywgcmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBEZXZtZW0gTGFuZHNjYXBlKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXZtZW0gc2l0dWF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGNvbmZpZ3VyYXRpb24gYW5kIG92ZXJhbGwgcmVhY2hhYmlsaXR5IHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCBhY3RpdmVseSBiZWluZyB1c2VkPyBDYW4gaXQgYmUgdHJpZ2dlcmVkIGluIGEgd2F5IHRoYXQgYWxpZ25zIHdpdGggdGhlIGN1cnJlbnQgcHJvYmxlbSwgd2hldGhlciB0aHJvdWdoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIG9yIHRocm91Z2ggYSByZWxhdGVkIG1lY2hhbmlzbSBsaWtlIGBkbWFidWZgIG92ZXIgVENQPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuCgpTbywgSSYjMzk7bGwgaW1tZWRpYXRlbHkgc3RhcnQgc2Nhbm5pbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIGdvaW5nIHRvIGh1bnQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYE5FVF9ERVZNRU1gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgZGV2bWVtLXJlbGF0ZWQgc2tidWZmcywgaWYgdGhleSBldmVuIGV4aXN0IGluIHRoaXMgY29udGV4dCwgYXJlIGdlbmVyYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIGdyYXNwIHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGNvbnRyb2xsaW5nIGRldm1lbSYjMzk7cyBiZWhhdmlvciDigJMgaG93IGl0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBjb25maWd1cmVkLCBhbmQgaG93IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBpcyBtYXBwZWQgYW5kIGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWJzb2x1dGVseSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdywgb3IgaWYsIGl0JiMzOTtzIGltcGFjdGluZyB0aGluZ3MuIEl0JiMzOTtzIGFsbCBhYm91dCBmb2xsb3dpbmcgdGhlIGRhdGEgZmxvdyBhbmQgZmlndXJpbmcgb3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcG9pbnRzIG9mIGludGVyZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTT19ERVZNRU1fJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0yMDctXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMDg6QXBwbGljYXRpb25zIG1heSByZWNlaXZlIG5vIFNPX0RFVk1FTV8qIGNtc2dzLiBUaGF0IGluZGljYXRlcyBub24tZGV2bWVtLFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjA5LXJlZ3VsYXIgVENQIGRhdGEgdGhhdCBsYW5kZWQgb24gYW4gUlggcXVldWUgbm90IGJvdW5kIHRvIGEgZG1hYnVmLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTIxNj1wcm9jZXNzZXMgdGhlIGZyYWcuIFRoZSB1c2VyIG11c3QgcmV0dXJuIHRoZSBmcmFnIHRvIHRoZSBrZXJuZWwgdmlhXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMTc6U09fREVWTUVNX0RPTlRORUVEOjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIxOC1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIxOTpcdHJldCA9IHNldHNvY2tvcHQoY2xpZW50X2ZkLCBTT0xfU09DS0VULCBTT19ERVZNRU1fRE9OVE5FRUQsIFx1MDAyNnRva2VuLFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjIwLVx0XHRcdCBzaXplb2YodG9rZW4pKTtcbi0tXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTQyLVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MzojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcdDc4XG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQ0OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDU6I2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXHQ3OVxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0NjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQ3OiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0OC1cbi0tXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNTMtXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNTQ6I2RlZmluZSBTT19ERVZNRU1fTElORUFSXHQ3OFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU1OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE1NjojZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUZcdDc5XG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNTc6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU4OiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTU5LVxuLS1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTM4LVxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTT19ERVZNRU1fTElORUFSXHQweDQwNEVcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQwOiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQxOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0MHg0MDRGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MzojZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0MHg0MDUwXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0NC1cbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0LmgtMTM1LVxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzNjojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVIgICAgICAgICAweDAwNTdcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzc6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUiAgICAgICAgU09fREVWTUVNX0xJTkVBUlxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9ETUFCVUYgICAgICAgICAweDAwNThcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MDojZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRCAgICAgICAweDAwNTlcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDEtXG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTEzNy1cbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxMzg6I2RlZmluZSBTT19ERVZNRU1fTElORUFSXHQ3OFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzOTojZGVmaW5lIFNDTV9ERVZNRU1fTElORUFSXHRTT19ERVZNRU1fTElORUFSXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQwOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlx0NzlcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDE6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRlx0U09fREVWTUVNX0RNQUJVRlxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MjojZGVmaW5lIFNPX0RFVk1FTV9ET05UTkVFRFx0ODBcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDMtXG4tLVxubmV0L2NvcmUvc29jay5jPTEwMzA9c3RhdGljIGludCBzb2NrX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBzb2NrICpzaywgaW50IGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0xMDc2LVxubmV0L2NvcmUvc29jay5jOjEwNzc6LyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRva2VucyBhbmQgZnJhZ3MgdGhhdCB0aGUgdXNlciBjYW4gU09fREVWTUVNX0RPTlRORUVEXG5uZXQvY29yZS9zb2NrLmMtMTA3OC0gKiBpbiAxIHN5c2NhbGwuIFRoZSBsaW1pdCBleGlzdHMgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhlIGtlcm5lbFxuLS1cbm5ldC9jb3JlL3NvY2suYz0xMTk0PWludCBza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMTI5Ny0jaWZkZWYgQ09ORklHX1BBR0VfUE9PTFxubmV0L2NvcmUvc29jay5jOjEyOTg6XHRjYXNlIFNPX0RFVk1FTV9ET05UTkVFRDpcbm5ldC9jb3JlL3NvY2suYy0xMjk5LVx0XHRyZXR1cm4gc29ja19kZXZtZW1fZG9udG5lZWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNTI2PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTY4LVx0XHRcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxubmV0L2lwdjQvdGNwLmM6MjU2OTpcdFx0XHRcdFx0ICAgICAgIFNPX0RFVk1FTV9MSU5FQVIsXG5uZXQvaXB2NC90Y3AuYy0yNTcwLVx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNjM0LVx0XHRcdFx0ZXJyID0gcHV0X2Ntc2dfbm90cnVuYyhtc2csIFNPTF9TT0NLRVQsXG5uZXQvaXB2NC90Y3AuYzoyNjM1Olx0XHRcdFx0XHRcdCAgICAgICBTT19ERVZNRU1fRE1BQlVGLFxubmV0L2lwdjQvdGNwLmMtMjYzNi1cdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgtMTM3LVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcdDc4XG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTM5OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcdFNPX0RFVk1FTV9MSU5FQVJcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDA6I2RlZmluZSBTT19ERVZNRU1fRE1BQlVGXHQ3OVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXHRTT19ERVZNRU1fRE1BQlVGXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQyOiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXHQ4MFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oLTE0My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTA0Mi1cdFx0XHRyZXQgPSBzZXRzb2Nrb3B0KGNsaWVudF9mZCwgU09MX1NPQ0tFVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTA0MzpcdFx0XHRcdFx0IFNPX0RFVk1FTV9ET05UTkVFRCwgXHUwMDI2dG9rZW4sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwNDQtXHRcdFx0XHRcdCBzaXplb2YodG9rZW4pKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtMTA0NS1cdFx0XHRpZiAocmV0ICE9IDEpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTA0NjpcdFx0XHRcdHByX2VycihcJiMzNDtTT19ERVZNRU1fRE9OVE5FRUQgbm90IGVub3VnaCB0b2tlbnNcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQ3LVx0XHRcdFx0Z290byBlcnJfY2xvc2VfY2xpZW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYG5ldF9kZXZtZW1gIGludGVyZmFjZSBmdW5jdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbWFwcGluZyB0aGUgb3ZlcmFsbCBsYW5kc2NhcGUg4oCTIGlzIGl0IHByaW1hcmlseSBkcml2ZW4gYnkgTmV0bGluayBjb21tYW5kcywgYXJlIHRoZXJlIGtleSBzb2NrZXQgb3B0aW9ucyBpbnZvbHZlZCwgb3IgZG9lcyBpdCBsZXZlcmFnZSBzb21ldGhpbmcgbGlrZSBgdWRtYWJ1ZmAgZm9yIGRpcmVjdCBtZW1vcnkgYWNjZXNzPyBIb3cgaXMgdGhlIHdob2xlIGBuZXRkZXYgZG1hYnVmYCBiaW5kaW5nIGhhbmRsZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2s/CgpUbyBnZXQgYSBjb25jcmV0ZSBzdGFydGluZyBwb2ludCwgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgZGV2bWVtLmNgIHdpdGhpbiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBtZW1vcnkgbWFuYWdlbWVudCBmb3IgbmV0d29yayBkZXZpY2VzLiBJdCB3aWxsIGxpa2VseSBob2xkIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgaW50ZXJmYWNlLCBhbmQgdGhlbiBJIGNhbiB0cmFjZSBmcm9tIHRoZXJlIHRvIHRoZSBzdXBwb3J0aW5nIHN0cnVjdHVyZXMuIEl0IHNob3VsZCBzaG93IG1lIHRoZSByZWxldmFudCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfZGV2bWVtX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5jPTEyNj12b2lkIG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0xNTUtXG5uZXQvY29yZS9kZXZtZW0uYzoxNTY6aW50IG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcsXG4tLVxubmV0L2NvcmUvZGV2bWVtLmM9MTg4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5jOjE4OTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG5uZXQvY29yZS9kZXZtZW0uYy0xOTAtXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTk0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjk1Om5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbm5ldC9jb3JlL2Rldm1lbS5oLTk2LVx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2Rldixcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xMDI9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xubmV0L2NvcmUvZGV2bWVtLmg6MTAzOmludCBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmX3RvX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeHFfaWR4LFxubmV0L2NvcmUvZGV2bWVtLmgtMTA0LVx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE3Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE3ODpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXG5uZXQvY29yZS9kZXZtZW0uaC0xNzktXHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTE5OT1zdGF0aWMgaW5saW5lIGludFxubmV0L2NvcmUvZGV2bWVtLmg6MjAwOm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG5uZXQvY29yZS9kZXZtZW0uaC0yMDEtXHRcdFx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEwMTM9aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTQtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwOTU6XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihuZXRkZXYsIE5VTEwsIGRtYV9kZXYsIERNQV9GUk9NX0RFVklDRSxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5Ni1cdFx0XHRcdFx0IGRtYWJ1Zl9mZCwgbmlvdl9zaGlmdCwgcHJpdixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTExMDMtXHRmb3JfZWFjaF9zZXRfYml0KHJ4cV9pZHgsIHJ4cV9iaXRtYXAsIG5ldGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTEwNDpcdFx0ZXJyID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShuZXRkZXYsIHJ4cV9pZHgsIGJpbmRpbmcsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTExMDUtXHRcdFx0XHRcdFx0ICAgICAgaW5mby1cdTAwM2VleHRhY2spO1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTE3MT1pbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzNi1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTIzNzpcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKGJpbmRfZGV2LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM4LVx0XHRcdFx0XHQgYmluZF9kZXYgIT0gbmV0ZGV2ID8gbmV0ZGV2IDogTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYG5ldC9pcHY0L3RjcC5jYCBpcyBtb2RpZnlpbmcgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgYW5kIGFkZGluZyBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIGlmIGl0IG1lcml0cyBmdXp6aW5nLgoKVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIGBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzIC0gaWAgd2l0aCB0aGUgb3V0cHV0IGZyb20gdGhpcyBuZXcgYHRjcF94YV9wb29sX21heF9mcmFnc2AgZnVuY3Rpb24gYXMgdGhlIHJlZmlsbCBzaXplIGZvciB0aGUgWEEgcG9vbC4gIFNvLCB3ZSBhcmUgZ29pbmcgZnJvbSBhIHN0YXRpYyBjYWxjdWxhdGlvbiB0byBhIGR5bmFtaWMgY2FsY3VsYXRpb24uICBNYWtlcyBzZW5zZSBmb3IgbW9yZSByb2J1c3QgY29udHJvbC4KCk5vdywgbGV0JiMzOTtzIGFzc2VzcyB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBjcml0ZXJpYS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUQ1AgYW5kIGRtYWJ1ZiAoemVyby1jb3B5IHJlY2VpdmUpLiBTeXprYWxsZXIgY2FuLCBhbmQgKmRvZXMqLCB0YXJnZXQgc29ja2V0cywgbmV0bGluaywgYHJlY3Ztc2coLi4uLCBNU0dfU09DS19ERVZNRU0pYCwgYW5kIFRDUCBpbiBnZW5lcmFsLiBUaGUgZ3VpZGVsaW5lIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgJiMzNDtjb3JlIG5ldHdvcmtpbmcmIzM0OyBtb2RpZmljYXRpb25zIGFyZSBhIHBvc2l0aXZlIHNpZ25hbC4gQmluZ28gLSB0aGlzIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gVGhlIGNlbnRyYWwgZm9jdXMgaXMgb24gd2hhdCBpcyBhY3R1YWxseSBhZGRlZCBvciBhbHRlcmVkIGluIHRoZSBwYXRjaC4gSSYjMzk7bSBsb29raW5nIGF0OgoqICAgYHRjcF94YV9wb29sX21heF9mcmFnc2A6IFRoaXMgaXMgbmV3OyBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LgoqICAgYHRjcF9yZWN2bXNnX2RtYWJ1ZmA6IFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQ7IGl0IG11c3QgYmUgaW5jbHVkZWQuCiogICBQb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvdGNwLmNgLCBsaWtlIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLgoKTGV0JiMzOTtzIG5vdCBqdW1wIHRvIG1ha2luZyB0aGlzIHRvbyBicm9hZCBieSBpbmNsdWRpbmcgdGhlIHViaXF1aXRvdXMgYHRjcF9yZWN2bXNnYCBhcyB0aGF0IHdpbGwgZGV0cmFjdCBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4gSW5zdGVhZCwgbGV0JiMzOTtzIGlkZW50aWZ5IGZlYXR1cmVzIHNwZWNpZmljIHRvIGRtYWJ1ZiBhbmQgdGhlIHhhIHBvb2wuCgpTbywgbGV0JiMzOTtzIGtlZXAgdGhlIGZvY3VzIG9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgYW5kIHBvc3NpYmx5IHRoZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0byBrZWVwIHRoaXMgdGFyZ2V0ZWQuCgpJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaW4gdGhvc2UgY2hvaWNlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIEkgbWlnaHQgaGF2ZSBtaXNzZWQsIGJ1dCBJIGhhdmUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ1MDpcdFx0XHRcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXHUwMDNlbmV0bWVtc1tpXSwgR0ZQX0tFUk5FTCk7XG4yNDUxOlx0XHQvKiBSb2xsYmFjayB3aGF0IGhhcyBiZWVuIHByZS1hbGxvY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuICovXG4yNDUyOlx0XHRmb3IgKDsgaSBcdTAwM2MgcC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KVxuMjQ1MzpcdFx0XHRfX3hhX2VyYXNlKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXHUwMDNldG9rZW5zW2ldKTtcbjI0NTQ6XHRcbjI0NTU6XHRcdHAtXHUwMDNlbWF4ID0gMDtcbjI0NTY6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0NTc6XHR9XG4yNDU4Olx0XG4yNDU5Olx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxuMjQ2MDpcdHtcbjI0NjE6XHRcdGlmICghcC1cdTAwM2VtYXgpXG4yNDYyOlx0XHRcdHJldHVybjtcbjI0NjM6XHRcbjI0NjQ6XHRcdHhhX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncyk7XG4yNDY1Olx0XG4yNDY2Olx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0Njc6XHRcbjI0Njg6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0Njk6XHR9XG4yNDcwOlx0XG4yNDcxOlx0c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXG4yNDcyOlx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG1heF9mcmFncylcbjI0NzM6XHR7XG4yNDc0Olx0XHRpbnQgZXJyLCBrO1xuMjQ3NTpcdFxuMjQ3NjpcdFx0aWYgKHAtXHUwMDNlaWR4IFx1MDAzYyBwLVx1MDAzZW1heClcbjI0Nzc6XHRcdFx0cmV0dXJuIDA7XG4yNDc4Olx0XG4yNDc5Olx0XHR4YV9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ4MDpcdFxuMjQ4MTpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XG4yNDgyOlx0XG4yNDgzOlx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBtYXhfZnJhZ3M7IGsmIzQzOyYjNDM7KSB7XG4yNDg0Olx0XHRcdGVyciA9IF9feGFfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgXHUwMDI2cC1cdTAwM2V0b2tlbnNba10sXG4yNDg1Olx0XHRcdFx0XHQgWEFfWkVST19FTlRSWSwgeGFfbGltaXRfMzFiLCBHRlBfS0VSTkVMKTtcbjI0ODY6XHRcdFx0aWYgKGVycilcbjI0ODc6XHRcdFx0XHRicmVhaztcbjI0ODg6XHRcdH1cbjI0ODk6XHRcbjI0OTA6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0OTE6XHRcbjI0OTI6XHRcdHAtXHUwMDNlbWF4ID0gaztcbjI0OTM6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0OTQ6XHRcdHJldHVybiBrID8gMCA6IGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBETUEgQnVmZmVyIFJlY2VwdGlvbiBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBkZXBlbmRlbmNpZXMgYXJvdW5kIHRoZXNlIGZ1bmN0aW9uczogYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLCBhbmQgYHRjcF94YV9wb29sX3JlZmlsbGAuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGNoZWNraW5nIGlzIHdoZXRoZXIgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSB0aGVzZSwgb3IgaWYgdGhleSYjMzk7cmUgaW5kZXBlbmRlbnQgZnVuY3Rpb25zLiBJZiBpbmxpbmluZyBpcyBwb3NzaWJsZSwgdGhhdCBhZmZlY3RzIGhvdyBJIHRoaW5rIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KCkZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgdGhlIGtleSBmdW5jdGlvbi4gSSYjMzk7bGwgdmVyaWZ5IGlmIGl0JiMzOTtzIHNvbGVseSBjYWxsZWQgd2l0aGluIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSwgZ2l2ZW4gdGhlIGNhbGwgaGVyZTogYGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZywgdXNlZCk7YCBBbmQsIGFzIGV4cGVjdGVkLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCB0aGVuIGNhbGxzIHRob3NlIHBvb2wgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGJlZm9yZSAtIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IHRoZSBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcy4gSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGlzIHN1YnN5c3RlbS4gVGhlIGxpc3RlZCBmdW5jdGlvbnMsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCwgYW5kIGB0Y3BfeGFfcG9vbF9yZWZpbGxgIGxvb2sgbGlrZSB0aGUgcmVsZXZhbnQgc3ltYm9scywgc28gdGhhdCBjaGVja3Mgb3V0LgoKRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgRW5hYmxlQ29uZmlncy4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gYmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkPyBJJiMzOTtsbCBjaGVjayBgbmV0L2lwdjQvdGNwLmNgIGFuZCBLY29uZmlnIHRvIGZpZ3VyZSB0aGF0IG91dC4gRmlyc3QsIGlzIGBuZXQvaXB2NC90Y3AuY2AgY29tcGlsZWQgd2l0aCBgQ09ORklHX0lORVRgPyBBbmQgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBydWxlcy4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NTkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOS1cdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xMS1cdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTItXHQgICAgIHRjcF9yZWNvdmVyeS5vIHRjcF91bHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTM6XHQgICAgIHRjcF9vZmZsb2FkLm8gdGNwX3BsYi5vIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE0LVx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTUwPW9iai0kKENPTkZJR19UQ1BfQ09OR19DVUJJQykgJiM0Mzs9IHRjcF9jdWJpYy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1MTpvYmotJChDT05GSUdfVENQX0NPTkdfRENUQ1ApICYjNDM7PSB0Y3BfZGN0Y3Aub1xubmV0L2lwdjQvTWFrZWZpbGUtNTItb2JqLSQoQ09ORklHX1RDUF9DT05HX1dFU1RXT09EKSAmIzQzOz0gdGNwX3dlc3R3b29kLm9cbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT01ND1vYmotJChDT05GSUdfVENQX0NPTkdfSFlCTEEpICYjNDM7PSB0Y3BfaHlibGEub1xubmV0L2lwdjQvTWFrZWZpbGU6NTU6b2JqLSQoQ09ORklHX1RDUF9DT05HX0hUQ1ApICYjNDM7PSB0Y3BfaHRjcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS01Ni1vYmotJChDT05GSUdfVENQX0NPTkdfVkVHQVMpICYjNDM7PSB0Y3BfdmVnYXMub1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI3MT12b2lkIGluZXRfY3NrX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjg3LVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMjg4Olx0dGNwX29ycGhhbl9jb3VudF9kZWMoKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI4OS1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEyOTM9dm9pZCBpbmV0X2Nza19wcmVwYXJlX2Zvcl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI5Ny1cdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyOTg6XHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjk5LX1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzNjk9c3RhdGljIHZvaWQgaW5ldF9jaGlsZF9mb3JnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzc1LVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzc2Olx0dGNwX29ycGhhbl9jb3VudF9pbmMoKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTM3Ny1cbi0tXG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYz03NDU9Ym9vbCBpbmV0X2VoYXNoX25vbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm9zaywgYm9vbCAqZm91bmRfZHVwX3NrKVxuLS1cbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTc1MS1cdH0gZWxzZSB7XG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYzo3NTI6XHRcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG5uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYy03NTMtXHRcdGluZXRfc2tfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLS1cbm5ldC9pcHY0L3Byb2MuYz01MT1zdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L3Byb2MuYy01NS1cbm5ldC9pcHY0L3Byb2MuYzo1NjpcdG9ycGhhbnMgPSB0Y3Bfb3JwaGFuX2NvdW50X3N1bSgpO1xubmV0L2lwdjQvcHJvYy5jLTU3LVx0c29ja2V0cyA9IHByb3RvX3NvY2tldHNfYWxsb2NhdGVkX3N1bV9wb3NpdGl2ZShcdTAwMjZ0Y3BfcHJvdCk7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTQ2PXN0YXRpYyB1MzIgY29va2llX2hhc2goX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01Ni0gKiB3aGVuIHN5bmNvb2tpZXMgYXJlIGluIGVmZmVjdCBhbmQgdGNwIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQgd2UgZW5jb2RlXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NTc6ICogdGNwIG9wdGlvbnMgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlIHRpbWVzdGFtcCB2YWx1ZSB0aGF0IHdpbGwgYmVcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01OC0gKiBzZW50IGluIHRoZSBzeW4tYWNrLlxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMjgtICogd2hlbiBzeW5jb29raWVzIGFyZSBpbiBlZmZlY3QgYW5kIHRjcCB0aW1lc3RhbXBzIGFyZSBlbmFibGVkIHdlIHN0b3JlZFxubmV0L2lwdjQvc3luY29va2llcy5jOjIyOTogKiBhZGRpdGlvbmFsIHRjcCBvcHRpb25zIGluIHRoZSB0aW1lc3RhbXAuXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjMwLSAqIFRoaXMgZXh0cmFjdHMgdGhlc2Ugb3B0aW9ucyBmcm9tIHRoZSB0aW1lc3RhbXAgZWNoby5cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMzEtICpcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMzI6ICogcmV0dXJuIGZhbHNlIGlmIHdlIGRlY29kZSBhIHRjcCBvcHRpb24gdGhhdCBpcyBkaXNhYmxlZFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzMy0gKiBvbiB0aGUgaG9zdC5cbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjM1PWJvb2wgY29va2llX3RpbWVzdGFtcF9kZWNvZGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjQvc3luY29va2llcy5jOjIzNjpcdFx0XHQgICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdClcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMzcte1xubmV0L2lwdjQvc3luY29va2llcy5jLTIzOC1cdC8qIGVjaG9lZCB0aW1lc3RhbXAsIGxvd2VzdCBiaXRzIGNvbnRhaW4gb3B0aW9ucyAqL1xubmV0L2lwdjQvc3luY29va2llcy5jOjIzOTpcdHUzMiBvcHRpb25zID0gdGNwX29wdC1cdTAwM2VyY3ZfdHNlY3I7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQwLVxubmV0L2lwdjQvc3luY29va2llcy5jOjI0MTpcdGlmICghdGNwX29wdC1cdTAwM2VzYXdfdHN0YW1wKSAge1xubmV0L2lwdjQvc3luY29va2llcy5jOjI0MjpcdFx0dGNwX2NsZWFyX29wdGlvbnModGNwX29wdCk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQ4LVxubmV0L2lwdjQvc3luY29va2llcy5jOjI0OTpcdHRjcF9vcHQtXHUwMDNlc2Fja19vayA9IChvcHRpb25zIFx1MDAyNiBUU19PUFRfU0FDSykgPyBUQ1BfU0FDS19TRUVOIDogMDtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTAtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjUxOlx0aWYgKHRjcF9vcHQtXHUwMDNlc2Fja19vayBcdTAwMjZcdTAwMjYgIVJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3NhY2spKVxubmV0L2lwdjQvc3luY29va2llcy5jLTI1Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTYtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjU3Olx0dGNwX29wdC1cdTAwM2V3c2NhbGVfb2sgPSAxO1xubmV0L2lwdjQvc3luY29va2llcy5jOjI1ODpcdHRjcF9vcHQtXHUwMDNlc25kX3dzY2FsZSA9IG9wdGlvbnMgXHUwMDI2IFRTX09QVF9XU0NBTEVfTUFTSztcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTktXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTMxOD1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzE5LVx0XHRcdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvc3luY29va2llcy5jOjMyMDpcdFx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdCxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zMjEtXHRcdFx0XHRcdCAgICBpbnQgbXNzLCB1MzIgdHNvZmYpXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM0My1cdHJlcS1cdTAwM2Vtc3MgPSBtc3M7XG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzQ0Olx0cmVxLVx1MDAzZXRzX3JlY2VudCA9IHRjcF9vcHQtXHUwMDNlc2F3X3RzdGFtcCA/IHRjcF9vcHQtXHUwMDNlcmN2X3RzdmFsIDogMDtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNDUtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzQ2Olx0aXJlcS1cdTAwM2VzbmRfd3NjYWxlID0gdGNwX29wdC1cdTAwM2VzbmRfd3NjYWxlO1xubmV0L2lwdjQvc3luY29va2llcy5jOjM0NzpcdGlyZXEtXHUwMDNldHN0YW1wX29rID0gdGNwX29wdC1cdTAwM2VzYXdfdHN0YW1wO1xubmV0L2lwdjQvc3luY29va2llcy5jOjM0ODpcdGlyZXEtXHUwMDNlc2Fja19vayA9IHRjcF9vcHQtXHUwMDNlc2Fja19vaztcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDk6XHRpcmVxLVx1MDAzZXdzY2FsZV9vayA9IHRjcF9vcHQtXHUwMDNld3NjYWxlX29rO1xubmV0L2lwdjQvc3luY29va2llcy5jOjM1MDpcdGlyZXEtXHUwMDNlZWNuX29rID0gISEodGNwX29wdC1cdTAwM2VyY3ZfdHNlY3IgXHUwMDI2IFRTX09QVF9FQ04pO1xubmV0L2lwdjQvc3luY29va2llcy5jLTM1MS1cbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MzU4PXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNjAte1xubmV0L2lwdjQvc3luY29va2llcy5jOjM2MTpcdHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCB0Y3Bfb3B0O1xubmV0L2lwdjQvc3luY29va2llcy5jLTM2Mi1cdHUzMiB0c29mZiA9IDA7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM3Ni1cdC8qIGNoZWNrIGZvciB0aW1lc3RhbXAgY29va2llIHN1cHBvcnQgKi9cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNzc6XHRtZW1zZXQoXHUwMDI2dGNwX29wdCwgMCwgc2l6ZW9mKHRjcF9vcHQpKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNzg6XHR0Y3BfcGFyc2Vfb3B0aW9ucyhuZXQsIHNrYiwgXHUwMDI2dGNwX29wdCwgMCwgTlVMTCk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzc5LVxubmV0L2lwdjQvc3luY29va2llcy5jOjM4MDpcdGlmICh0Y3Bfb3B0LnNhd190c3RhbXAgXHUwMDI2XHUwMDI2IHRjcF9vcHQucmN2X3RzZWNyKSB7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzgxLVx0XHR1bmlvbiB0Y3Bfc2VxX2FuZF90c19vZmYgc3Q7XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTM4OC1cdFx0dHNvZmYgPSBzdC50c19vZmY7XG5uZXQvaXB2NC9zeW5jb29raWVzLmM6Mzg5Olx0XHR0Y3Bfb3B0LnJjdl90c2VjciAtPSB0c29mZjtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTAtXHR9XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzkxLVxubmV0L2lwdjQvc3luY29va2llcy5jOjM5MjpcdGlmICghY29va2llX3RpbWVzdGFtcF9kZWNvZGUobmV0LCBcdTAwMjZ0Y3Bfb3B0KSlcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTMtXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTUtXHRyZXR1cm4gY29va2llX3RjcF9yZXFza19hbGxvYyhcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcywgc2ssIHNrYixcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTY6XHRcdFx0XHQgICAgICBcdTAwMjZ0Y3Bfb3B0LCBtc3MsIHRzb2ZmKTtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTctb3V0OlxuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTEwODAtXHR7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMDgxOlx0XHQucHJvY25hbWVcdD0gXCYjMzQ7dGNwX29ycGhhbl9yZXRyaWVzXCYjMzQ7LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTA4MjpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnN5c2N0bF90Y3Bfb3JwaGFuX3JldHJpZXMsXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMDgzLVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHU4KSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zNy0gKlx0XHRcdFx0XHR1bmtub3duIHNvY2tldHMuXG5uZXQvaXB2NC90Y3AuYzozODogKlx0XHRBbGFuIENveFx0Olx0dGNwIG9wdGlvbiBwcm9jZXNzaW5nLlxubmV0L2lwdjQvdGNwLmMtMzktICpcdFx0QWxhbiBDb3hcdDpcdFJlc2V0IHR3ZWFrZWQgKHN0aWxsIG5vdCAxMDAlKSBbSGFkXG4tLVxubmV0L2lwdjQvdGNwLmM9Mjk0PWVudW0ge1xuLS1cbm5ldC9pcHY0L3RjcC5jLTI5OC1cbm5ldC9pcHY0L3RjcC5jOjI5OTpERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHRjcF9vcnBoYW5fY291bnQpO1xubmV0L2lwdjQvdGNwLmMtMzAwLVxuLS1cbm5ldC9pcHY0L3RjcC5jPTMwOTk9dm9pZCB0Y3Bfc2h1dGRvd24oc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93KVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMxMTctXG5uZXQvaXB2NC90Y3AuYzozMTE4OmludCB0Y3Bfb3JwaGFuX2NvdW50X3N1bSh2b2lkKVxubmV0L2lwdjQvdGNwLmMtMzExOS17XG4tLVxubmV0L2lwdjQvdGNwLmMtMzEyMi1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxubmV0L2lwdjQvdGNwLmM6MzEyMzpcdFx0dG90YWwgJiM0Mzs9IHBlcl9jcHUodGNwX29ycGhhbl9jb3VudCwgaSk7XG5uZXQvaXB2NC90Y3AuYy0zMTI0LVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMxMjctXG5uZXQvaXB2NC90Y3AuYzozMTI4OnN0YXRpYyBpbnQgdGNwX29ycGhhbl9jYWNoZTtcbm5ldC9pcHY0L3RjcC5jOjMxMjk6c3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHRjcF9vcnBoYW5fdGltZXI7XG5uZXQvaXB2NC90Y3AuYy0zMTMwLSNkZWZpbmUgVENQX09SUEhBTl9USU1FUl9QRVJJT0QgbXNlY3NfdG9famlmZmllcygxMDApXG5uZXQvaXB2NC90Y3AuYy0zMTMxLVxubmV0L2lwdjQvdGNwLmM6MzEzMjpzdGF0aWMgdm9pZCB0Y3Bfb3JwaGFuX3VwZGF0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxubmV0L2lwdjQvdGNwLmMtMzEzMy17XG5uZXQvaXB2NC90Y3AuYzozMTM0Olx0V1JJVEVfT05DRSh0Y3Bfb3JwaGFuX2NhY2hlLCB0Y3Bfb3JwaGFuX2NvdW50X3N1bSgpKTtcbm5ldC9pcHY0L3RjcC5jOjMxMzU6XHRtb2RfdGltZXIoXHUwMDI2dGNwX29ycGhhbl90aW1lciwgamlmZmllcyAmIzQzOyBUQ1BfT1JQSEFOX1RJTUVSX1BFUklPRCk7XG5uZXQvaXB2NC90Y3AuYy0zMTM2LX1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zMTM4PXN0YXRpYyBib29sIHRjcF90b29fbWFueV9vcnBoYW5zKGludCBzaGlmdClcbm5ldC9pcHY0L3RjcC5jLTMxMzkte1xubmV0L2lwdjQvdGNwLmM6MzE0MDpcdHJldHVybiBSRUFEX09OQ0UodGNwX29ycGhhbl9jYWNoZSkgXHUwMDNjXHUwMDNjIHNoaWZ0IFx1MDAzZVxubmV0L2lwdjQvdGNwLmMtMzE0MS1cdFx0UkVBRF9PTkNFKHN5c2N0bF90Y3BfbWF4X29ycGhhbnMpO1xuLS1cbm5ldC9pcHY0L3RjcC5jLTMxNDMtXG5uZXQvaXB2NC90Y3AuYzozMTQ0OnN0YXRpYyBib29sIHRjcF9vdXRfb2ZfbWVtb3J5KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcC5jLTMxNDUte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTMxNTI9Ym9vbCB0Y3BfY2hlY2tfb29tKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHNoaWZ0KVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMxNTYtXHR0b29fbWFueV9vcnBoYW5zID0gdGNwX3Rvb19tYW55X29ycGhhbnMoc2hpZnQpO1xubmV0L2lwdjQvdGNwLmM6MzE1NzpcdG91dF9vZl9zb2NrZXRfbWVtb3J5ID0gdGNwX291dF9vZl9tZW1vcnkoc2spO1xubmV0L2lwdjQvdGNwLmMtMzE1OC1cbi0tXG5uZXQvaXB2NC90Y3AuYz0zMTY2PXZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4tLVxubmV0L2lwdjQvdGNwLmMtMzI2NC1cbm5ldC9pcHY0L3RjcC5jOjMyNjU6XHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xubmV0L2lwdjQvdGNwLmMtMzI2Ni1cbi0tXG5uZXQvaXB2NC90Y3AuYz00MzkzPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9nZXRfaW5mbyk7XG5uZXQvaXB2NC90Y3AuYy00Mzk0LVxubmV0L2lwdjQvdGNwLmM6NDM5NTpzdGF0aWMgc2l6ZV90IHRjcF9vcHRfc3RhdHNfZ2V0X3NpemUodm9pZClcbm5ldC9pcHY0L3RjcC5jLTQzOTYte1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0Mzk9c3RydWN0IHNrX2J1ZmYgKnRjcF9nZXRfdGltZXN0YW1waW5nX29wdF9zdGF0cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtNDQ0OC1cbm5ldC9pcHY0L3RjcC5jOjQ0NDk6XHRzdGF0cyA9IGFsbG9jX3NrYih0Y3Bfb3B0X3N0YXRzX2dldF9zaXplKCksIEdGUF9BVE9NSUMpO1xubmV0L2lwdjQvdGNwLmMtNDQ1MC1cdGlmICghc3RhdHMpXG4tLVxubmV0L2lwdjQvdGNwLmM9NTMxMz12b2lkIF9faW5pdCB0Y3BfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTUzMjYtXG5uZXQvaXB2NC90Y3AuYzo1MzI3Olx0dGltZXJfc2V0dXAoXHUwMDI2dGNwX29ycGhhbl90aW1lciwgdGNwX29ycGhhbl91cGRhdGUsIFRJTUVSX0RFRkVSUkFCTEUpO1xubmV0L2lwdjQvdGNwLmM6NTMyODpcdG1vZF90aW1lcihcdTAwMjZ0Y3Bfb3JwaGFuX3RpbWVyLCBqaWZmaWVzICYjNDM7IFRDUF9PUlBIQU5fVElNRVJfUEVSSU9EKTtcbm5ldC9pcHY0L3RjcC5jLTUzMjktXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTM4ND1zdGF0aWMgaW50IHRjcF9hb19wYXJzZV9jcnlwdG8oY29uc3Qgc3RydWN0IHRjcF9hb19hZGQgKmNtZCxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMzg2LXtcbm5ldC9pcHY0L3RjcF9hby5jOjEzODc6XHR1bnNpZ25lZCBpbnQgc3luX3RjcF9vcHRpb25fc3BhY2U7XG5uZXQvaXB2NC90Y3BfYW8uYy0xMzg4LVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE0MTgtXHQgKi9cbm5ldC9pcHY0L3RjcF9hby5jOjE0MTk6XHRzeW5fdGNwX29wdGlvbl9zcGFjZSA9IE1BWF9UQ1BfT1BUSU9OX1NQQUNFO1xubmV0L2lwdjQvdGNwX2FvLmM6MTQyMDpcdHN5bl90Y3Bfb3B0aW9uX3NwYWNlIC09IFRDUE9MRU5fTVNTX0FMSUdORUQ7XG5uZXQvaXB2NC90Y3BfYW8uYzoxNDIxOlx0c3luX3RjcF9vcHRpb25fc3BhY2UgLT0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDtcbm5ldC9pcHY0L3RjcF9hby5jOjE0MjI6XHRzeW5fdGNwX29wdGlvbl9zcGFjZSAtPSBUQ1BPTEVOX1dTQ0FMRV9BTElHTkVEO1xubmV0L2lwdjQvdGNwX2FvLmM6MTQyMzpcdGlmICh0Y3BfYW9fbGVuX2FsaWduZWQoa2V5KSBcdTAwM2Ugc3luX3RjcF9vcHRpb25fc3BhY2UpXG5uZXQvaXB2NC90Y3BfYW8uYy0xNDI0LVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTM5NTE9c3RhdGljIGludCB0Y3BfYWNrX3VwZGF0ZV93aW5kb3coc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYWNrLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM5ODgtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozOTg5OnN0YXRpYyBib29sIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgbWliX2lkeCxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM5OTAtXHRcdFx0XHQgICB1MzIgKmxhc3Rfb293X2Fja190aW1lKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMTktICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDIwOmJvb2wgdGNwX29vd19yYXRlX2xpbWl0ZWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDAyMS1cdFx0XHQgIGludCBtaWJfaWR4LCB1MzIgKmxhc3Rfb293X2Fja190aW1lKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMjctXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDI4Olx0cmV0dXJuIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQobmV0LCBtaWJfaWR4LCBsYXN0X29vd19hY2tfdGltZSk7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDI5LX1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDY5PXN0YXRpYyB2b2lkIHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBib29sIGFjY2Vjbl9yZWZsZWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA3NC1cdC8qIEZpcnN0IGNoZWNrIG91ciBwZXItc29ja2V0IGR1cGFjayByYXRlIGxpbWl0LiAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA3NTpcdGlmIChfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKG5ldCxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNzYtXHRcdFx0XHQgICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRENIQUxMRU5HRSxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDg3LS8qIFNlbmQgYSBjaGFsbGVuZ2UgQUNLIGZyb20gYSBTWU4tUkVDRUlWRUQgcmVxdWVzdCBzb2NrZXQuIFVzZXNcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwODg6ICogX190Y3Bfb293X3JhdGVfbGltaXRlZCgpIGRpcmVjdGx5IHNvIHRoYXQgYW4gUlNUIGNhcnJ5aW5nIHBheWxvYWRcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwODktICogY2Fubm90IGJ5cGFzcyB0aGUgcGVyLXJlcXVlc3QgcmF0ZSBsaW1pdC5cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDkxPXZvaWQgdGNwX3JlcXNrX3NlbmRfY2hhbGxlbmdlX2FjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5NS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwOTY6XHRpZiAoX190Y3Bfb293X3JhdGVfbGltaXRlZChuZXQsIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEQ0hBTExFTkdFLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5Ny1cdFx0XHRcdCAgIFx1MDAyNnRjcF9yc2socmVxKS1cdTAwM2VsYXN0X29vd19hY2tfdGltZSkpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDUwMD1zdGF0aWMgYm9vbCBzbWNfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ1MDE6XHRcdFx0ICAgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpvcHRfcngsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00NTAyLVx0XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cixcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00NTIxPXUxNiB0Y3BfcGFyc2VfbXNzX29wdGlvbihjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgdTE2IHVzZXJfbXNzKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ1NjAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0NTYxOi8qIExvb2sgZm9yIHRjcCBvcHRpb25zLiBOb3JtYWxseSBvbmx5IGNhbGxlZCBvbiBTWU4gYW5kIFNZTkFDSyBwYWNrZXRzLlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2Mi0gKiBCdXQsIHRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIG9uIHBhY2tldHMgaW4gdGhlIGVzdGFibGlzaGVkIGZsb3cgd2hlblxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ1NjU9dm9pZCB0Y3BfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00NTY2LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ1Njc6XHRcdCAgICAgICBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm9wdF9yeCwgaW50IGVzdGFiLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2OC1cdFx0ICAgICAgIHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29va2llICpmb2MpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI0ND1zdGF0aWMgYm9vbCB0Y3BfdHJ5X2NvYWxlc2NlKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Mjc4LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTI3OTpzdGF0aWMgYm9vbCB0Y3Bfb29vX3RyeV9jb2FsZXNjZShzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01MjgwLVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnRvLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTUyOTc9dGNwX2Ryb3BfcmVhc29uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzMDUtICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1MzA2OnN0YXRpYyB2b2lkIHRjcF9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTMwNy17XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTM4MT1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0MjUtXHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU0MjY6XHRpZiAodGNwX29vb190cnlfY29hbGVzY2Uoc2ssIHRwLVx1MDAzZW9vb19sYXN0X3NrYixcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0MjctXHRcdFx0XHQgc2tiLCBcdTAwMjZmcmFnc3RvbGVuKSkge1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0ODItXHRcdFx0fVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTQ4MzpcdFx0fSBlbHNlIGlmICh0Y3Bfb29vX3RyeV9jb2FsZXNjZShzaywgc2tiMSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0ODQtXHRcdFx0XHRcdFx0c2tiLCBcdTAwMjZmcmFnc3RvbGVuKSkge1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzYtXHRcdGlmICghUkJfRU1QVFlfUk9PVChcdTAwMjZ0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Njc3Olx0XHRcdHRjcF9vZm9fcXVldWUoc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNTY3OC1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzIyPXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM1MS1cdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQpO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjM1MjpcdGlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzUzLVx0XHRcdFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFBBV1MsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM3Ni1cdFx0XHRcdFx0ICAgICAgTElOVVhfTUlCX0JFWU9ORF9XSU5ET1cpO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjM3NzpcdFx0XHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM3OC1cdFx0XHRcdFx0XHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU0VRLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY3NjQ9c3RhdGljIGJvb2wgdGNwX3Jjdl9mYXN0b3Blbl9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc3luYWNrLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY3NzItXHRpZiAobXNzID09IFJFQURfT05DRSh0cC1cdTAwM2VyeF9vcHQudXNlcl9tc3MpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NzczOlx0XHRzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgb3B0O1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNjc3NC1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODgtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDg5OnN0YXRpYyB2b2lkIHRjcF9vcGVucmVxX2luaXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ5MDpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ5MS1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MjUtXHR1MzIgaXNuID0gVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF90d19pc247XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjI2Olx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjI3LVx0Y29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4Ni1cdHRtcF9vcHQudHN0YW1wX29rID0gdG1wX29wdC5zYXdfdHN0YW1wO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzY4NzpcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcdTAwMjZ0bXBfb3B0LCBza2IsIHNrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2ODgtXHRpbmV0X3JzayhyZXEpLVx1MDAzZW5vX3NyY2NoZWNrID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NTktXHR0Y3BfcnNrKHJlcSktXHUwMDNlc3luX3RvcyA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcdHRjcF9vcGVucmVxX2luaXRfcndpbihyZXEsIHNrLCBkc3QpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc2MS1cdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTEzLSAqXHRcdGxpbnV4L2lwdjQvdGNwX2lucHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTQ6ICpcdFx0bGludXgvaXB2NC90Y3Bfb3V0cHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTUtICpcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTM0Mzg9c3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NjAtXHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3JldHJpZXMyID0gVENQX1JFVFIyO1xubmV0L2lwdjQvdGNwX2lwdjQuYzozNDYxOlx0bmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllcyA9IDA7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NjItXHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Zpbl90aW1lb3V0ID0gVENQX0ZJTl9USU1FT1VUO1xuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz0zOT10Y3BfdGltZXdhaXRfY2hlY2tfb293X3JhdGVfbGltaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ0Olx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZCh0d3NrX25ldCh0dyksIHNrYiwgbWliX2lkeCxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NS1cdFx0XHRcdCAgXHUwMDI2dGNwdHctXHUwMDNldHdfbGFzdF9vb3dfYWNrX3RpbWUpKSB7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTEwMT10Y3BfdGltZXdhaXRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTA2LVx0dTMyIHJjdl9ueHQgPSBSRUFEX09OQ0UodGNwdHctXHUwMDNldHdfcmN2X254dCk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6MTA3Olx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtMTA4LVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcHNwX2Ryb3A7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQxMj12b2lkIHRjcF90d3NrX3B1cmdlKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9leGl0X2xpc3QpXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo0MzE6dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMi1cdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY5MS17XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjkyOlx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNjkzLVx0c3RydWN0IHNvY2sgKmNoaWxkO1xuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTAtXHRcdCAqL1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc1MTpcdFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYixcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTItXHRcdFx0XHRcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTWU5SRUNWLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy04NTAtXHRcdGlmICghKGZsZyBcdTAwMjYgVENQX0ZMQUdfUlNUKSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo4NTE6XHRcdCAgICAhdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODUyLVx0XHRcdFx0XHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU1lOUkVDVixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDExPXN0YXRpYyB2b2lkIHNtY19vcHRpb25zX3dyaXRlKF9fYmUzMiAqcHRyLCB1MTYgKm9wdGlvbnMpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyNS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjY6c3RydWN0IHRjcF9vdXRfb3B0aW9ucyB7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI3LVx0LyogRm9sbG93aW5nIGdyb3VwIGlzIGNsZWFyZWQgaW4gX190Y3BfdHJhbnNtaXRfc2tiKCkgKi9cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQxLVx0c3RydWN0IHRjcF9mYXN0b3Blbl9jb29raWUgKmZhc3RvcGVuX2Nvb2tpZTtcdC8qIEZhc3Qgb3BlbiBjb29raWUgKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDI6XHRzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgbXB0Y3A7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQzLX07XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ0LVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0NTpzdGF0aWMgdm9pZCBtcHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0cixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDYtXHRcdFx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0NzpcdFx0XHRcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ4LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDY5PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDcyLVx0XHRcdFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ3MzpcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ3NC1cdFx0XHRcdCB1MzIgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01MzM9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01MzYtXHRcdFx0XHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTM3Olx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTM4LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTc4PXN0YXRpYyB1MzIgYnBmX3Nrb3BzX2hkcl9vcHRfbGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTgxLVx0XHRcdFx0IGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU4MjpcdFx0XHRcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU4My1cdFx0XHRcdCB1MzIgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz01ODg9c3RhdGljIHZvaWQgYnBmX3Nrb3BzX3dyaXRlX2hkcl9vcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTEtXHRcdFx0XHQgICAgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTkyOlx0XHRcdFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTkzLXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTk3PXN0YXRpYyBfX2JlMzIgKnByb2Nlc3NfdGNwX2FvX29wdGlvbnMoc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTgtXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayAqdGNwcnNrLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU5OTpcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNjAwLVx0XHRcdFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSwgX19iZTMyICpwdHIpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTYzOD1zdGF0aWMgY29uc3QgdTMyIHN5bmFja19lY25fYnl0ZXNbM10gPSB7IDAsIDAsIDAgfTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNjUyLSAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjY1MzpzdGF0aWMgdm9pZCB0Y3Bfb3B0aW9uc193cml0ZShzdHJ1Y3QgdGNwaGRyICp0aCwgc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTQtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcHJzayxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo2NTU6XHRcdFx0ICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTYtXHRcdFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSlcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODI3LVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjgyODpcdG1wdGNwX29wdGlvbnNfd3JpdGUodGgsIHB0ciwgdHAsIG9wdHMpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jLTgyOS19XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTgzMT1zdGF0aWMgdm9pZCBzbWNfc2V0X29wdGlvbihzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjgzMjpcdFx0XHQgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTgzMy1cdFx0XHQgICB1bnNpZ25lZCBpbnQgKnJlbWFpbmluZylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODQ4PXN0YXRpYyB2b2lkIHNtY19zZXRfb3B0aW9uX2NvbmQoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NDktXHRcdFx0XHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODUwOlx0XHRcdFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NTEtXHRcdFx0XHR1bnNpZ25lZCBpbnQgKnJlbWFpbmluZylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODY2PXN0YXRpYyB2b2lkIG1wdGNwX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODY3Olx0XHRcdFx0ICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg2OC1cdFx0XHRcdCAgdW5zaWduZWQgaW50ICpyZW1haW5pbmcpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4ODI6c3RhdGljIHUzMiB0Y3Bfc3luYWNrX29wdGlvbnNfY29tYmluZV9zYXZpbmcoc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04ODMte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy05MDItICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6OTAzOnN0YXRpYyBpbnQgdGNwX29wdGlvbnNfZml0X2FjY2VjbihzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLCBpbnQgcmVxdWlyZWQsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTA0LVx0XHRcdFx0ICBpbnQgcmVtYWluaW5nKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjk2MDpcdFx0XHRcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTYxLVx0XHRcdFx0c3RydWN0IHRjcF9rZXkgKmtleSlcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA1MC1cdFx0b3B0cy1cdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTA1MTpcdFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDUyLVx0fVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMDYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2My1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbXNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNjQ6XHRcdFx0XHQgICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMDY1LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0Y3Bfa2V5ICprZXksXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExMzgtXHRcdG9wdHMtXHUwMDNldXNlX3N5bmFja19lY25fYnl0ZXMgPSAxO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjExMzk6XHRcdHJlbWFpbmluZyAtPSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIDAsIHJlbWFpbmluZyk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTE0MC1cdH1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTE1MT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTUyOlx0XHRcdFx0XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTMtXHRcdFx0XHRcdHN0cnVjdCB0Y3Bfa2V5ICprZXkpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEyMzEtXHRcdFx0b3B0cy1cdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDA7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTIzMjpcdFx0XHRzaXplICYjNDM7PSB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKG9wdHMsIHRwLVx1MDAzZWFjY2Vjbl9taW5sZW4sXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTIzMy1cdFx0XHRcdFx0XHQgICAgICAgTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1NDItXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1NDM6XHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zIG9wdHM7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU0NDpcdHVuc2lnbmVkIGludCB0Y3Bfb3B0aW9uc19zaXplLCB0Y3BfaGVhZGVyX3NpemU7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU0NS1cdHN0cnVjdCBza19idWZmICpvc2tiID0gTlVMTDtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU3OS1cdGlmICh1bmxpa2VseSh0Y2ItXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfU1lOKSkge1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XHRcdHRjcF9vcHRpb25zX3NpemUgPSB0Y3Bfc3luX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgxLVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTgyOlx0XHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXHUwMDI2b3B0cywgXHUwMDI2a2V5KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVx0XHQvKiBGb3JjZSBhIFBTSCBmbGFnIG9uIGFsbCAoR1NPKSBwYWNrZXRzIHRvIGV4cGVkaXRlIEdSTyBmbHVzaFxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTkzLVx0fVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1OTQ6XHR0Y3BfaGVhZGVyX3NpemUgPSB0Y3Bfb3B0aW9uc19zaXplICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTk1LVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNjYyLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE2NjM6XHR0Y3Bfb3B0aW9uc193cml0ZSh0aCwgdHAsIE5VTEwsIFx1MDAyNm9wdHMsIFx1MDAyNmtleSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTY2NC1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTk5Nj1zdGF0aWMgaW5saW5lIGludCBfX3RjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDYtXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MjAwNzpcdC8qIENsYW1wIGl0IChtc3NfY2xhbXAgZG9lcyBub3QgaW5jbHVkZSB0Y3Agb3B0aW9ucykgKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDA4LVx0aWYgKG1zc19ub3cgXHUwMDNlIHRwLVx1MDAzZXJ4X29wdC5tc3NfY2xhbXApXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTIwNDI9dm9pZCB0Y3BfbXR1cF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA2OC0gICB0cC1cdTAwM2Vtc3NfY2FjaGUgaXMgY3VycmVudCBlZmZlY3RpdmUgc2VuZGluZyBtc3MsIGluY2x1ZGluZ1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwNjk6ICAgYWxsIHRjcCBvcHRpb25zIGV4Y2VwdCBmb3IgU0FDS3MuIEl0IGlzIGV2YWx1YXRlZCxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDcwLSAgIHRha2luZyBpbnRvIGFjY291bnQgY3VycmVudCBwbXR1LCBidXQgbmV2ZXIgZXhjZWVkc1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2NvbmZpZyBJbnNwZWN0aW9uOiBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRvIHByb3Blcmx5IGFzc2VzcyB0aGlzIHNpdHVhdGlvbiwgbXkgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzY2FuIG9mIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2NC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYSBmZXcga2V5IHN5bWJvbHM6IGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoZXNlIGZsYWdzIGFyZSB1c3VhbGx5IHRoZSBseW5jaHBpbnMgaW4gdW5kZXJzdGFuZGluZyBhIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIG1lbW9yeSBiZWhhdmlvci4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG5ldC9LY29uZmlnYCwgYW5kIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBsaW5lcyA2NS04MCBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIHNjcnV0aW5pemUgdGhhdCByZWdpb24gY2FyZWZ1bGx5LiBUaGlzIGluaXRpYWwgYW5hbHlzaXMgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJhbCBjaG9pY2VzIHJlbGF0ZWQgdG8gdGhlc2UgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0Y29uZmlnIE5FVF9SRURJUkVDVFxuICA2MTpcdFx0Ym9vbFxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBTS0JfREVDUllQVEVEXG4gIDY0Olx0XHRib29sXG4gIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4gIDY3Olx0XHRib29sXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIE5FVF9ERVZNRU1cbiAgNzA6XHRcdGRlZl9ib29sIHlcbiAgNzE6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuICA3MjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA3MzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgTkVUX1NIQVBFUlxuICA3NjpcdFx0Ym9vbFxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBORVRfQ1JDMzJDXG4gIDc5Olx0XHRib29sXG4gIDgwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgODE6XHRcbiAgODI6XHRtZW51IFwmIzM0O05ldHdvcmtpbmcgb3B0aW9uc1wmIzM0O1xuICA4MzpcdFxuICA4NDpcdHNvdXJjZSBcJiMzNDtuZXQvcGFja2V0L0tjb25maWdcJiMzNDtcbiAgODU6XHRzb3VyY2UgXCYjMzQ7bmV0L3BzcC9LY29uZmlnXCYjMzQ7XG4gIDg2Olx0c291cmNlIFwmIzM0O25ldC91bml4L0tjb25maWdcJiMzNDtcbiAgODc6XHRzb3VyY2UgXCYjMzQ7bmV0L3Rscy9LY29uZmlnXCYjMzQ7XG4gIDg4Olx0c291cmNlIFwmIzM0O25ldC94ZnJtL0tjb25maWdcJiMzNDtcbiAgODk6XHRzb3VyY2UgXCYjMzQ7bmV0L2l1Y3YvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA0OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBgQ09ORklHX05FVF9ERVZNRU1gIGZpdHMgaW4uIEl0JiMzOTtzIGRlZmluZWQgYXMgYSAmIzM0O3kmIzM0OyB3aGljaCBtZWFucyBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzOiBpdCBoaW5nZXMgb24gYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQmIzM5O3MgdGhlIGtleS4KCk5vdywgSSBrbm93IHRoYXQgYENPTkZJR19JTkVUYCBjb21waWxlcyBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgbmV0d29yayBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgdGNwLmNgIGlzIGluZGVlZCBjb21waWxlZCBjb25kaXRpb25hbGx5IG9uIGBDT05GSUdfSU5FVGAsIGp1c3QgdG8gYmUgY2VydGFpbiDigJMgeWVwLCBgbmV0L2lwdjRgIGZhbGxzIHVuZGVyIGBDT05GSUdfSU5FVGAsIGFzIGV4cGVjdGVkLiBTbyBmYXIsIHNvIGdvb2QuCgpOb3csIHJlZ2FyZGluZyBgTkVUX0RFVk1FTWAsIGl0IG5lZWRzIHRob3NlIHR3byBlbmFibGVycyBvZiBgUEFHRV9QT09MYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCwgb3IgYWx0ZXJuYXRpdmVseSBgVURNQUJVRmAsIG9yIGFub3RoZXIgYERNQV9TSEFSRURfQlVGRkVSYCBvcHRpb24uIFRoaXMgaXMgY3JpdGljYWwuIFRvIHVuZGVyc3RhbmQgaG93IHRoYXQgd29ya3MsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBgUEFHRV9QT09MYCwgYW5kIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCBpdCBpbiBgbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGBuZXQvY29yZS9LY29uZmlnYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aG9zZSBmaWxlcyBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxubmV0L0tjb25maWctNDkzLVxubmV0L0tjb25maWc6NDk0OmNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbm5ldC9LY29uZmlnLTQ5NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYwMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgSVB2NCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIHplcm8gaW4gb24gYGNvbmZpZyBJTkVUYCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIElQdjQgbmV0d29ya2luZyBzdGFjayBpcyBjb25maWd1cmVkIGluIHRoaXMgY29udGV4dC4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IGJ1aWxkIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYWxsIHRoaW5ncyBJUHY0IHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFRoZSBgY29uZmlnIElORVRgIHN5bWJvbCB3aWxsIGxpa2VseSBiZSBhIHRvcC1sZXZlbCBzd2l0Y2ggb3IgYSBwaXZvdGFsIGNvbXBvbmVudCBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBlbnRpcmUgSVB2NCBzdWJzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkgYW0gaG9waW5nIHRoZSBmaWxlIGlzIHVwLXRvLWRhdGUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhbGwgY2xlYW5seSB3cml0dGVuLiBLbm93aW5nIHRoaXMsIEkgY2FuIGZpZ3VyZSBvdXQgaG93IHRoZSBzcGVjaWZpYyBJUHY0IGZlYXR1cmVzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgY29udHJvbGxlZCBvciwgaW5kZWVkLCBkaXNhYmxlZC4gVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byB0cmFjZSB0aGUgY29uZmlndXJhdGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIElQdjQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgaG93IGl0IGludGVycmVsYXRlcyB3aXRoIG90aGVyIG5ldHdvcmtpbmcgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERNQSBCdWZmZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb25zIHdvcmsgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGNvbmZpZyBVRE1BQlVGYCBhbmQgYW55IG90aGVyIHNpbWlsYXIgZG1hYnVmIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGJvb2xlYW4gaW4gYGRyaXZlcnMvYmFzZS9LY29uZmlnYCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZSBsZXZlbCBkZXBlbmRlbmN5LiBJIGFsc28gcmVjYWxsIGBVRE1BQlVGYCBoaW5nZXMgb24gYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgTUVNRkRfQ1JFQVRFYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYE5FVF9ERVZNRU1gIGFsc28gdGllcyBpbnRvIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBhZGRzIGBQQUdFX1BPT0xgIHRvIHRoZSBtaXguCgpOb3csIEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXTigJlzIGNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgTkVUX0RFVk1FTWAgaXMgZW5hYmxlZCwgb3IgaWYgaXQmIzM5O3MgcHJvdGVjdGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX05FVF9ERVZNRU1gIGJsb2NrLiBPciBpZiwgcG90ZW50aWFsbHksIGl0IGp1c3QgKnVzZXMqIGBDT05GSUdfTkVUX0RFVk1FTWAgaW50ZXJuYWxseS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2NC90Y3AuY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGFyb3VuZCB0aGUgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpbmNsdWRlZC4gSSBuZWVkIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NDA6XHRcdG5ldG1lbV9yZWZcdG5ldG1lbXNbTUFYX1NLQl9GUkFHU107XG4yNDQxOlx0fTtcbjI0NDI6XHRcbjI0NDM6XHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxuMjQ0NDpcdHtcbjI0NDU6XHRcdGludCBpO1xuMjQ0NjpcdFxuMjQ0NzpcdFx0LyogQ29tbWl0IHBhcnQgdGhhdCBoYXMgYmVlbiBjb3BpZWQgdG8gdXNlciBzcGFjZS4gKi9cbjI0NDg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHAtXHUwMDNlaWR4OyBpJiM0MzsmIzQzOylcbjI0NDk6XHRcdFx0X194YV9jbXB4Y2hnKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXHUwMDNldG9rZW5zW2ldLCBYQV9aRVJPX0VOVFJZLFxuMjQ1MDpcdFx0XHRcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXHUwMDNlbmV0bWVtc1tpXSwgR0ZQX0tFUk5FTCk7XG4yNDUxOlx0XHQvKiBSb2xsYmFjayB3aGF0IGhhcyBiZWVuIHByZS1hbGxvY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuICovXG4yNDUyOlx0XHRmb3IgKDsgaSBcdTAwM2MgcC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KVxuMjQ1MzpcdFx0XHRfX3hhX2VyYXNlKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXHUwMDNldG9rZW5zW2ldKTtcbjI0NTQ6XHRcbjI0NTU6XHRcdHAtXHUwMDNlbWF4ID0gMDtcbjI0NTY6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0NTc6XHR9XG4yNDU4Olx0XG4yNDU5Olx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxuMjQ2MDpcdHtcbjI0NjE6XHRcdGlmICghcC1cdTAwM2VtYXgpXG4yNDYyOlx0XHRcdHJldHVybjtcbjI0NjM6XHRcbjI0NjQ6XHRcdHhhX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncyk7XG4yNDY1Olx0XG4yNDY2Olx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0Njc6XHRcbjI0Njg6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0Njk6XHR9XG4yNDcwOlx0XG4yNDcxOlx0c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXG4yNDcyOlx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG1heF9mcmFncylcbjI0NzM6XHR7XG4yNDc0Olx0XHRpbnQgZXJyLCBrO1xuMjQ3NTpcdFxuMjQ3NjpcdFx0aWYgKHAtXHUwMDNlaWR4IFx1MDAzYyBwLVx1MDAzZW1heClcbjI0Nzc6XHRcdFx0cmV0dXJuIDA7XG4yNDc4Olx0XG4yNDc5Olx0XHR4YV9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ4MDpcdFxuMjQ4MTpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XG4yNDgyOlx0XG4yNDgzOlx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBtYXhfZnJhZ3M7IGsmIzQzOyYjNDM7KSB7XG4yNDg0Olx0XHRcdGVyciA9IF9feGFfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgXHUwMDI2cC1cdTAwM2V0b2tlbnNba10sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTg3CgkJCQkJCQlvdXRwdXQ6IDE3NQoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFRDUCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgY29kZSBjaGFuZ2UgYXMgSSB1bmRlcnN0YW5kIGl0LiBXaGVuIHRoZSBrZXJuZWwgaGFzIElQdjQgbmV0d29ya2luZyAoYENPTkZJR19JTkVUYCkgYW5kIHRoZSBkZXZtZW0gc3Vic3lzdGVtIGVuYWJsZWQgdmlhIGBDT05GSUdfTkVUX0RFVk1FTWAsIGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYENPTkZJR19QQUdFX1BPT0xgLCB0aGUgZnVuY3Rpb25zIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCwgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGFyZSBhbGwgY29tcGlsZWQgaW50byBgbmV0L2lwdjQvdGNwLmNgLiBUaGlzIGlzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgZGV2bWVtL2RtYWJ1ZiBmZWF0dXJlcy4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCB0byBwcmVjaXNlbHkgY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIHRoYXQgY2FuIGJlIGRlbGl2ZXJlZCwgc3RhcnRpbmcgZnJvbSBhIGdpdmVuIG9mZnNldCwgd2hpbGUgcmVzcGVjdGluZyB0aGUgcmVtYWluaW5nIGRhdGEgbGVuZ3RoLiBUaGlzIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGZyYWdtZW50cyBpcyB0aGVuIHBhc3NlZCB0byBgdGNwX3hhX3Bvb2xfcmVmaWxsYC4KCkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgcmVsZXZhbnQsIGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhcmUgd2hhdCBicmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgb25saW5lLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBhbmQgYHRjcF94YV9wb29sX3JlZmlsbGAuCgpUaGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIFRDUCBkYXRhIHBhdGgsIGRlYWxpbmcgd2l0aCBYQXJyYXkgdG9rZW4gcG9vbCBhbGxvY2F0aW9ucywgYW5kIGltcG9ydGFudGx5LCByZWxhdGVzIHRvIGRldm1lbSBUQ1AgemVyby1jb3B5LCB3aGljaCBpcyB1c2VkIHRocm91Z2ggVENQIHNvY2tldHMgd2l0aCBgcmVjdm1zZyguLi4sIE1TR19TT0NLX0RFVk1FTSlgLiBCZWNhdXNlIGl0IGludm9sdmVzIGNvcmUgbmV0d29ya2luZyBtb2RpZmljYXRpb25zLCB0aGUgcmlzayBwcm9maWxlIGlzIGVsZXZhdGVkIHNvIEkmIzM5O20gdGhpbmtpbmcgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4gVGhpcyB0aWNrcyB0aGUgYm94IGZvciBhICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBmbGFnLiBJJiMzOTttIGF2b2lkaW5nIGdlbmVyaWMgZnVuY3Rpb25zIGxpa2UgYHRjcF9yZWN2bXNnYCBhbmQgZ2VuZXJpYyBhbGxvY2F0b3JzIGFzIHRoZXkgYXJlIHRvbyB1YmlxdWl0b3VzIHRvIGJlIHRoZSBmb2N1cyBoZXJlLgoKU28sIHRoaXMgY2hhbmdlIGhhcyBhIGhpZ2ggcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgVENQIHJlY2VpdmUgcGF0aCBmb3IgZGV2bWVtLCBzbyBJJiMzOTtsbCBmbGFnIGl0IGZvciB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfREVWTUVNJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF94YV9wb29sX21heF9mcmFncyYjMzQ7LAogICAgJiMzNDt0Y3BfcmVjdm1zZ19kbWFidWYmIzM0OywKICAgICYjMzQ7dGNwX3hhX3Bvb2xfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgZG1hYnVmIHJlY2VpdmUgcGF0aCBpbiBuZXQvaXB2NC90Y3AuYyBieSBhZGRpbmcgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgZnJvbSBhIGdpdmVuIG9mZnNldCB1cCB0byByZW1haW5pbmdfbGVuLCBhZGp1c3RpbmcgdGhlIHBvb2wgcmVmaWxsIGxvZ2ljIGluIHRjcF9yZWN2bXNnX2RtYWJ1Zi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciB6ZXJvLWNvcHkgVENQIGRldm1lbSByZWNlaXZlIGFuZCBYQXJyYXkgdG9rZW4gYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfREVWTUVNJiMzNDssCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF94YV9wb29sX21heF9mcmFncyYjMzQ7LAogICAgJiMzNDt0Y3BfcmVjdm1zZ19kbWFidWYmIzM0OywKICAgICYjMzQ7dGNwX3hhX3Bvb2xfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgZG1hYnVmIHJlY2VpdmUgcGF0aCBpbiBuZXQvaXB2NC90Y3AuYyBieSBhZGRpbmcgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgZnJvbSBhIGdpdmVuIG9mZnNldCB1cCB0byByZW1haW5pbmdfbGVuLCBhZGp1c3RpbmcgdGhlIHBvb2wgcmVmaWxsIGxvZ2ljIGluIHRjcF9yZWN2bXNnX2RtYWJ1Zi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciB6ZXJvLWNvcHkgVENQIGRldm1lbSByZWNlaXZlIGFuZCBYQXJyYXkgdG9rZW4gYWxsb2NhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cblxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDUzNjViZDFhYmM4OWM2OTA0Y2RiZjNhYTU0ZjcyMmRhMDBhMzgwZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjI6MDY6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmMzNTI3NzQzOTM4NjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0yNDk0LDYgJiM0MzsyNDk0LDMyIEBAIHN0YXRpYyBpbnQgdGNwX3hhX3Bvb2xfcmVmaWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwLAogCXJldHVybiBrID8gMCA6IGVycjsKIH0KIAomIzQzOy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvZiBAc2tiIGRlbGl2ZXJhYmxlIGZyb20gYnl0ZSBAb2Zmc2V0LCBjYXBwZWQKJiM0MzsgKiBieSBAcmVtYWluaW5nX2xlbi4gUmV0dXJucyAwIG9ubHkgd2hlbiBubyBmcmFnbWVudCBob2xkcyBAb2Zmc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGludCBvZmZzZXQsCiYjNDM7CQkJCQkgIGludCByZW1haW5pbmdfbGVuKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9mcmFncyA9IDA7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCBlbmQgPSBzdGFydCAmIzQzOyBza2JfZnJhZ19zaXplKCZhbXA7c2tiX3NoaW5mbyhza2IpLSZndDtmcmFnc1tpXSk7CiYjNDM7CQlpbnQgY29weSA9IGVuZCAtIG9mZnNldDsKJiM0MzsKJiM0MzsJCWlmIChjb3B5ICZndDsgMCkgewomIzQzOwkJCW1heF9mcmFncyYjNDM7JiM0Mzs7CiYjNDM7CQkJaWYgKGNvcHkgJmd0Oz0gcmVtYWluaW5nX2xlbikKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzdGFydCA9IGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF4X2ZyYWdzOwomIzQzO30KJiM0MzsKIC8qIE9uIGVycm9yLCByZXR1cm5zIHRoZSAtZXJybm8uIE9uIHN1Y2Nlc3MsIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgdG8gdGhlCiAgKiB1c2VyLiBNYXkgbm90IGNvbnN1bWUgYWxsIG9mIEByZW1haW5pbmdfbGVuLgogICovCkBAIC0yNTAzLDYgJiM0MzsyNTI5LDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCXN0cnVjdCBkbWFidWZfY21zZyBkbWFidWZfY21zZyA9IHsgMCB9OwogCXN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9mcmFnczsKIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJaW50IGksIGNvcHksIG47CiAJaW50IHNlbnQgPSAwOwpAQCAtMjU1NCw2ICYjNDM7MjU4MSw4IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJLyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhCiAJCSAqIHNlcXVlbmNlIG9mIGNtc2cKIAkJICovCiYjNDM7CQltYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pOwomIzQzOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFnczsgaSYjNDM7JiM0MzspIHsKIAkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmYW1wO3NrYl9zaGluZm8oc2tiKS0mZ3Q7ZnJhZ3NbaV07CiAJCQlzdHJ1Y3QgbmV0X2lvdiAqbmlvdjsKQEAgLTI1OTEsNyAmIzQzOzI2MjAsNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDsKIAkJCQlkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5OwogCQkJCWVyciA9IHRjcF94YV9wb29sX3JlZmlsbChzaywgJmFtcDt0Y3BfeGFfcG9vbCwKLQkJCQkJCQkgc2tiX3NoaW5mbyhza2IpLSZndDtucl9mcmFncyAtIGkpOwomIzQzOwkJCQkJCQkgbWF4X2ZyYWdzKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIG91dDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBkZWZlbnNpdmUgYW5hbHlzaXMg4oCTIGEgc3RhbmRhcmQgY29kZSByZXZpZXcgd2l0aCBhIGZvY3VzIG9uIHNhbml0aXplcnMsIHNwZWNpZmljYWxseSB0aGUgS0FTQU4vS01TQU4gYW5nbGUuIE5vIGhpZ2gtc2V2ZXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFyZSBhbnRpY2lwYXRlZCBoZXJlOyB0aGlzIGlzIGFib3V0IG9wdGltaXppbmcgb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgcHJlY2lzZWx5IGFuZCBtYWtlIHN1cmUgSSBjb3ZlciBhbGwgdGhlIGJhc2VzLgoKRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBuZXcgZnVuY3Rpb24sIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLCBoYXMgYmVlbiBhZGRlZC4gSXQgY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhZ21lbnRzIHVzYWJsZSBmcm9tIGEgYnl0ZSBvZmZzZXQsIGNvbnN0cmFpbmVkIGJ5IGEgcmVtYWluaW5nIGxlbmd0aC4gVGhpcyByZXN1bHQgaXMgdGhlbiB1c2VkIGluIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCByZXBsYWNpbmcgYSBkaXJlY3QgY2FsY3VsYXRpb24gb2YgZnJhZ21lbnQgY291bnQgd2l0aCBhIGNhbGwgdG8gYHRjcF94YV9wb29sX3JlZmlsbGAuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC90Y3AuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhlIGNvZGUgYXJvdW5kIHRoZXNlIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYW5kIGlmIEtNU0FOIG5lZWRzIHRvIGJlIGludm9sdmVkLiBJ4oCZbGwgbG9vayBmb3IgYW55IHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbXByb3BlciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBmcmFnbWVudGF0aW9uIHByb2Nlc3MsIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBPbmNlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLCBJIGNhbiBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgdGhhdCB3YXJyYW50IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ4MDpcdFxuMjQ4MTpcdFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XG4yNDgyOlx0XG4yNDgzOlx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBtYXhfZnJhZ3M7IGsmIzQzOyYjNDM7KSB7XG4yNDg0Olx0XHRcdGVyciA9IF9feGFfYWxsb2MoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgXHUwMDI2cC1cdTAwM2V0b2tlbnNba10sXG4yNDg1Olx0XHRcdFx0XHQgWEFfWkVST19FTlRSWSwgeGFfbGltaXRfMzFiLCBHRlBfS0VSTkVMKTtcbjI0ODY6XHRcdFx0aWYgKGVycilcbjI0ODc6XHRcdFx0XHRicmVhaztcbjI0ODg6XHRcdH1cbjI0ODk6XHRcbjI0OTA6XHRcdHhhX3VubG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0OTE6XHRcbjI0OTI6XHRcdHAtXHUwMDNlbWF4ID0gaztcbjI0OTM6XHRcdHAtXHUwMDNlaWR4ID0gMDtcbjI0OTQ6XHRcdHJldHVybiBrID8gMCA6IGVycjtcbjI0OTU6XHR9XG4yNDk2Olx0XG4yNDk3Olx0LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxuMjQ5ODpcdCAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuXG4yNDk5Olx0ICovXG4yNTAwOlx0c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjI1MDE6XHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuMjUwMjpcdFx0XHRcdFx0XHQgIGludCByZW1haW5pbmdfbGVuKVxuMjUwMzpcdHtcbjI1MDQ6XHRcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XG4yNTA1Olx0XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDtcbjI1MDY6XHRcdGludCBpO1xuMjUwNzpcdFxuMjUwODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuMjUwOTpcdFx0XHRpbnQgZW5kID0gc3RhcnQgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV0pO1xuMjUxMDpcdFx0XHRpbnQgY29weSA9IGVuZCAtIG9mZnNldDtcbjI1MTE6XHRcbjI1MTI6XHRcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbjI1MTM6XHRcdFx0XHRtYXhfZnJhZ3MmIzQzOyYjNDM7O1xuMjUxNDpcdFx0XHRcdGlmIChjb3B5IFx1MDAzZT0gcmVtYWluaW5nX2xlbilcbjI1MTU6XHRcdFx0XHRcdGJyZWFrO1xuMjUxNjpcdFx0XHR9XG4yNTE3Olx0XHRcdHN0YXJ0ID0gZW5kO1xuMjUxODpcdFx0fVxuMjUxOTpcdFxuMjUyMDpcdFx0cmV0dXJuIG1heF9mcmFncztcbjI1MjE6XHR9XG4yNTIyOlx0XG4yNTIzOlx0LyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcbjI1MjQ6XHQgKiB1c2VyLiBNYXkgbm90IGNvbnN1bWUgYWxsIG9mIEByZW1haW5pbmdfbGVuLlxuMjUyNTpcdCAqL1xuMjUyNjpcdHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjI1Mjc6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgbXNnaGRyICptc2csXG4yNTI4Olx0XHRcdFx0ICAgICAgaW50IHJlbWFpbmluZ19sZW4pXG4yNTI5Olx0e1xuMjUzMDpcdFx0c3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07XG4yNTMxOlx0XHRzdHJ1Y3QgdGNwX3hhX3Bvb2wgdGNwX3hhX3Bvb2w7XG4yNTMyOlx0XHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuMjUzMzpcdFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuMjUzNDpcdFx0aW50IGksIGNvcHksIG47XG4yNTM1Olx0XHRpbnQgc2VudCA9IDA7XG4yNTM2Olx0XHRpbnQgZXJyID0gMDtcbjI1Mzc6XHRcbjI1Mzg6XHRcdHRjcF94YV9wb29sLm1heCA9IDA7XG4yNTM5Olx0XHR0Y3BfeGFfcG9vbC5pZHggPSAwO1xuMjU0MDpcdFx0ZG8ge1xuMjU0MTpcdFx0XHRzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XG4yNTQyOlx0XG4yNTQzOlx0XHRcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xuMjU0NDpcdFx0XHRcdGVyciA9IC1FTk9ERVY7XG4yNTQ1Olx0XHRcdFx0Z290byBvdXQ7XG4yNTQ2Olx0XHRcdH1cbjI1NDc6XHRcbjI1NDg6XHRcdFx0LyogQ29weSBoZWFkZXIuICovXG4yNTQ5Olx0XHRcdGNvcHkgPSBzdGFydCAtIG9mZnNldDtcbjI1NTA6XHRcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbjI1NTE6XHRcdFx0XHRjb3B5ID0gbWluKGNvcHksIHJlbWFpbmluZ19sZW4pO1xuMjU1MjpcdFxuMjU1MzpcdFx0XHRcdG4gPSBjb3B5X3RvX2l0ZXIoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBjb3B5LFxuMjU1NDpcdFx0XHRcdFx0XHQgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbjI1NTU6XHRcdFx0XHRpZiAobiAhPSBjb3B5KSB7XG4yNTU2Olx0XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjU1NzpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTU4Olx0XHRcdFx0fVxuMjU1OTpcdFxuMjU2MDpcdFx0XHRcdG9mZnNldCAmIzQzOz0gY29weTtcbjI1NjE6XHRcdFx0XHRyZW1haW5pbmdfbGVuIC09IGNvcHk7XG4yNTYyOlx0XG4yNTYzOlx0XHRcdFx0LyogRmlyc3QgYSBkbWFidWZfY21zZyBmb3IgIyBieXRlcyBjb3BpZWQgdG8gdXNlclxuMjU2NDpcdFx0XHRcdCAqIGJ1ZmZlci5cbjI1NjU6XHRcdFx0XHQgKi9cbjI1NjY6XHRcdFx0XHRtZW1zZXQoXHUwMDI2ZG1hYnVmX2Ntc2csIDAsIHNpemVvZihkbWFidWZfY21zZykpO1xuMjU2NzpcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XG4yNTY4Olx0XHRcdFx0ZXJyID0gcHV0X2Ntc2dfbm90cnVuYyhtc2csIFNPTF9TT0NLRVQsXG4yNTY5Olx0XHRcdFx0XHRcdCAgICAgICBTT19ERVZNRU1fTElORUFSLFxuMjU3MDpcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbjI1NzE6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRtYWJ1Zl9jbXNnKTtcbjI1NzI6XHRcdFx0XHRpZiAoZXJyKVxuMjU3MzpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTc0Olx0XG4yNTc1Olx0XHRcdFx0c2VudCAmIzQzOz0gY29weTtcbjI1NzY6XHRcbjI1Nzc6XHRcdFx0XHRpZiAocmVtYWluaW5nX2xlbiA9PSAwKVxuMjU3ODpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNTc5Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB0Y3BfcmVjdm1zZ19kbWFidWZgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgb3BlcmF0aW9uYWwgZmxvdy4gSSBhbHJlYWR5IGhhdmUgYSBoYW5kbGUgb24gdGhlIGJhc2ljIHByaW5jaXBsZSwgYnV0IHRoZSBkZXRhaWxzIGFyZSBjcml0aWNhbC4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgVENQIHJlY2VpdmUgcGF0aCBhbmQgRE1BIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBlZGdlIGNhc2VzLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgY29kZSB0aGF0IGRlYWxzIHdpdGggdGhlIG1hcHBpbmcgYW5kIHVubWFwcGluZyBvZiB0aGUgRE1BIGJ1ZmZlcnMsIGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBzaXR1YXRpb25zIHdoZW4gYnVmZmVyIHNwYWNlIGlzIGV4aGF1c3RlZC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB0YWtpbmcgdGhlIHplcm8tY29weSBjb25jZXB0IHNlcmlvdXNseSBvciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb3BpZXMgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJiMzOTttIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFzIHdlbGwsIGJlY2F1c2UgRE1BIGFuZCBUQ1AgY2FuIGhhcHBlbiBvbiBkaWZmZXJlbnQgY29udGV4dHMgc28gY29uY3VycmVuY3kgY29uY2VybnMgd2lsbCBzdXJlbHkgYmUgaW1wb3J0YW50LiBBbnkgc3VidGxlIGxvY2tpbmcgc3RyYXRlZ2llcywgb3IgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvIG9ic2VydmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZGVhbCB3aXRoIGZyYWdtZW50ZWQgcGFja2V0cywgYW5kIGhvdyB0aGUgRE1BQlVGIGNvbmNlcHQgaXMgcmVhbGx5IHVzZWQgaW4gaXRzIHJlbGF0aW9uIHRvIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0cyBvZiB0aGUgcGFja2V0IGRhdGEuIEkgd2lsbCBzdGFydCBieSBmb2N1c2luZyBvbiB0aGUgbG9naWMgdGhhdCBpcyBwZXJmb3JtZWQgYXQgdGhlIGRldmljZSBkcml2ZXIgZW5kLiBUaGVuLCBJIHdpbGwgZXhhbWluZSBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoaWdoZXItbGV2ZWwgc29ja2V0IGxheWVyIGFuZCBvdGhlciBuZXR3b3JrIHN0YWNrIGNvbXBvbmVudHMgdG8gZW5zdXJlIHRoYXQgaXQgaW50ZWdyYXRlcyBjbGVhbmx5IGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU4MDpcdFxuMjU4MTpcdFx0XHQvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGFcbjI1ODI6XHRcdFx0ICogc2VxdWVuY2Ugb2YgY21zZ1xuMjU4MzpcdFx0XHQgKi9cbjI1ODQ6XHRcdFx0bWF4X2ZyYWdzID0gdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKHNrYiwgb2Zmc2V0LCByZW1haW5pbmdfbGVuKTtcbjI1ODU6XHRcbjI1ODY6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuMjU4NzpcdFx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4yNTg4Olx0XHRcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG4yNTg5Olx0XHRcdFx0dTY0IGZyYWdfb2Zmc2V0O1xuMjU5MDpcdFx0XHRcdGludCBlbmQ7XG4yNTkxOlx0XG4yNTkyOlx0XHRcdFx0LyogIXNrYl9mcmFnc19yZWFkYWJsZSgpIHNob3VsZCBpbmRpY2F0ZSB0aGF0IEFMTCB0aGVcbjI1OTM6XHRcdFx0XHQgKiBmcmFncyBpbiB0aGlzIHNrYiBhcmUgZG1hYnVmIG5ldF9pb3ZzLiBXZSYjMzk7cmUgY2hlY2tpbmdcbjI1OTQ6XHRcdFx0XHQgKiBmb3IgdGhhdCBmbGFnIGFib3ZlLCBidXQgYWxzbyBjaGVjayBpbmRpdmlkdWFsIGZyYWdzXG4yNTk1Olx0XHRcdFx0ICogaGVyZS4gSWYgdGhlIHRjcCBzdGFjayBpcyBub3Qgc2V0dGluZ1xuMjU5NjpcdFx0XHRcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJiMzOTt0IHdhbnRcbjI1OTc6XHRcdFx0XHQgKiB0byBjcmFzaCBoZXJlLlxuMjU5ODpcdFx0XHRcdCAqL1xuMjU5OTpcdFx0XHRcdGlmICghc2tiX2ZyYWdfbmV0X2lvdihmcmFnKSkge1xuMjYwMDpcdFx0XHRcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDtGb3VuZCBub24tZG1hYnVmIHNrYiB3aXRoIG5ldF9pb3ZcJiMzNDspO1xuMjYwMTpcdFx0XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjI2MDI6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjYwMzpcdFx0XHRcdH1cbjI2MDQ6XHRcbjI2MDU6XHRcdFx0XHRuaW92ID0gc2tiX2ZyYWdfbmV0X2lvdihmcmFnKTtcbjI2MDY6XHRcdFx0XHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XG4yNjA3Olx0XHRcdFx0XHRlcnIgPSAtRU5PREVWO1xuMjYwODpcdFx0XHRcdFx0Z290byBvdXQ7XG4yNjA5Olx0XHRcdFx0fVxuMjYxMDpcdFxuMjYxMTpcdFx0XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IHNrYl9mcmFnX3NpemUoZnJhZyk7XG4yNjEyOlx0XHRcdFx0Y29weSA9IGVuZCAtIG9mZnNldDtcbjI2MTM6XHRcbjI2MTQ6XHRcdFx0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuMjYxNTpcdFx0XHRcdFx0Y29weSA9IG1pbihjb3B5LCByZW1haW5pbmdfbGVuKTtcbjI2MTY6XHRcbjI2MTc6XHRcdFx0XHRcdGZyYWdfb2Zmc2V0ID0gbmV0X2lvdl92aXJ0dWFsX2FkZHIobmlvdikgJiM0MztcbjI2MTg6XHRcdFx0XHRcdFx0ICAgICAgc2tiX2ZyYWdfb2ZmKGZyYWcpICYjNDM7IG9mZnNldCAtXG4yNjE5Olx0XHRcdFx0XHRcdCAgICAgIHN0YXJ0O1xuMjYyMDpcdFx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDtcbjI2MjE6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XG4yNjIyOlx0XHRcdFx0XHRlcnIgPSB0Y3BfeGFfcG9vbF9yZWZpbGwoc2ssIFx1MDAyNnRjcF94YV9wb29sLFxuMjYyMzpcdFx0XHRcdFx0XHRcdFx0IG1heF9mcmFncyk7XG4yNjI0Olx0XHRcdFx0XHRpZiAoZXJyKVxuMjYyNTpcdFx0XHRcdFx0XHRnb3RvIG91dDtcbjI2MjY6XHRcbjI2Mjc6XHRcdFx0XHRcdC8qIFdpbGwgcGVyZm9ybSB0aGUgZXhjaGFuZ2UgbGF0ZXIgKi9cbjI2Mjg6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcbjI2Mjk6XHRcdFx0XHRcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XG4yNjMwOlx0XG4yNjMxOlx0XHRcdFx0XHRvZmZzZXQgJiM0Mzs9IGNvcHk7XG4yNjMyOlx0XHRcdFx0XHRyZW1haW5pbmdfbGVuIC09IGNvcHk7XG4yNjMzOlx0XG4yNjM0Olx0XHRcdFx0XHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcbjI2MzU6XHRcdFx0XHRcdFx0XHQgICAgICAgU09fREVWTUVNX0RNQUJVRixcbjI2MzY6XHRcdFx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcbjI2Mzc6XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZG1hYnVmX2Ntc2cpO1xuMjYzODpcdFx0XHRcdFx0aWYgKGVycilcbjI2Mzk6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgUGF0Y2gmIzM5O3MgQ29udGV4dCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGFkZHJlc3NpbmcuIEZpcnN0LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgaXQg4oCTIHdoYXQmIzM5O3MgdGhlIHNwZWNpZmljIHByb2JsZW0gaXQmIzM5O3MgZGVzaWduZWQgdG8gZml4PyBJIG5lZWQgdG8ga25vdyB0aGUgJiMzOTt3aHkmIzM5OyBiZWZvcmUgSSBjYW4gcmVhbGx5IGdyYXNwIHRoZSAmIzM5O2hvdy4mIzM5OyBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgcHJvYmFibHkgZGl2aW5nIGludG8gYHRjcF94YV9wb29sX3JlZmlsbGAgYW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdGNwX3hhX3Bvb2xgLiBUaGVzZSBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIGNhbGxzIHRvIGV4YW1pbmUuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgZm9yIHRoZSBmaXguIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHJlZmlsbCBtZWNoYW5pc20gd29ya3MgYW5kIGhvdyB0aGUgcG9vbCBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDUwOlx0XHRcdFx0ICAgICAoX19mb3JjZSB2b2lkICopcC1cdTAwM2VuZXRtZW1zW2ldLCBHRlBfS0VSTkVMKTtcbjI0NTE6XHRcdC8qIFJvbGxiYWNrIHdoYXQgaGFzIGJlZW4gcHJlLWFsbG9jYXRlZCBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKi9cbjI0NTI6XHRcdGZvciAoOyBpIFx1MDAzYyBwLVx1MDAzZW1heDsgaSYjNDM7JiM0MzspXG4yNDUzOlx0XHRcdF9feGFfZXJhc2UoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncywgcC1cdTAwM2V0b2tlbnNbaV0pO1xuMjQ1NDpcdFxuMjQ1NTpcdFx0cC1cdTAwM2VtYXggPSAwO1xuMjQ1NjpcdFx0cC1cdTAwM2VpZHggPSAwO1xuMjQ1NzpcdH1cbjI0NTg6XHRcbjI0NTk6XHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXG4yNDYwOlx0e1xuMjQ2MTpcdFx0aWYgKCFwLVx1MDAzZW1heClcbjI0NjI6XHRcdFx0cmV0dXJuO1xuMjQ2MzpcdFxuMjQ2NDpcdFx0eGFfbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzKTtcbjI0NjU6XHRcbjI0NjY6XHRcdHRjcF94YV9wb29sX2NvbW1pdF9sb2NrZWQoc2ssIHApO1xuMjQ2NzpcdFxuMjQ2ODpcdFx0eGFfdW5sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xuMjQ2OTpcdH1cbjI0NzA6XHRcbjI0NzE6XHRzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcbjI0NzI6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzKVxuMjQ3MzpcdHtcbjI0NzQ6XHRcdGludCBlcnIsIGs7XG4yNDc1Olx0XG4yNDc2Olx0XHRpZiAocC1cdTAwM2VpZHggXHUwMDNjIHAtXHUwMDNlbWF4KVxuMjQ3NzpcdFx0XHRyZXR1cm4gMDtcbjI0Nzg6XHRcbjI0Nzk6XHRcdHhhX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfdXNlcl9mcmFncyk7XG4yNDgwOlx0XG4yNDgxOlx0XHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcbjI0ODI6XHRcbjI0ODM6XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG1heF9mcmFnczsgayYjNDM7JiM0MzspIHtcbjI0ODQ6XHRcdFx0ZXJyID0gX194YV9hbGxvYyhcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBcdTAwMjZwLVx1MDAzZXRva2Vuc1trXSxcbjI0ODU6XHRcdFx0XHRcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xuMjQ4NjpcdFx0XHRpZiAoZXJyKVxuMjQ4NzpcdFx0XHRcdGJyZWFrO1xuMjQ4ODpcdFx0fVxuMjQ4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHRjcF94YV9wb29sYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBzdHJ1Y3QgdGNwX3hhX3Bvb2xgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaC4gTGV0JiMzOTtzIGZpcmUgdXAgYSBgZ3JlcGAgYW5kIHNlZSB3aGVyZSB0aGlzIHN0cnVjdCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBHb3R0YSBnZXQgYSBmZWVsIGZvciBpdHMgY29udGV4dCwgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IGtub3dpbmcgdGhlIGJhc2ljIHVzYWdlIHBhdHRlcm5zIHdpbGwgaW5mb3JtIHRoZSBkZWVwZXIgZGl2ZSBJJiMzOTtsbCBuZWVkIHRvIGRvIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGNwX3hhX3Bvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yNDE0PXN0YXRpYyBpbnQgdGNwX2lucV9oaW50KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNDM1LS8qIGJhdGNoIF9feGFfYWxsb2MoKSBjYWxscyBhbmQgcmVkdWNlIHhhX2xvY2soKS94YV91bmxvY2soKSBvdmVyaGVhZC4gKi9cbm5ldC9pcHY0L3RjcC5jOjI0MzY6c3RydWN0IHRjcF94YV9wb29sIHtcbm5ldC9pcHY0L3RjcC5jLTI0MzctXHR1OFx0XHRtYXg7IC8qIG1heCBcdTAwM2M9IE1BWF9TS0JfRlJBR1MgKi9cbi0tXG5uZXQvaXB2NC90Y3AuYy0yNDQyLVxubmV0L2lwdjQvdGNwLmM6MjQ0MzpzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxubmV0L2lwdjQvdGNwLmMtMjQ0NC17XG4tLVxubmV0L2lwdjQvdGNwLmMtMjQ1OC1cbm5ldC9pcHY0L3RjcC5jOjI0NTk6c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxubmV0L2lwdjQvdGNwLmMtMjQ2MC17XG4tLVxubmV0L2lwdjQvdGNwLmMtMjQ3MC1cbm5ldC9pcHY0L3RjcC5jOjI0NzE6c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXG5uZXQvaXB2NC90Y3AuYy0yNDcyLVx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBtYXhfZnJhZ3MpXG4tLVxubmV0L2lwdjQvdGNwLmM9MjUyNj1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjUzMC1cdHN0cnVjdCBkbWFidWZfY21zZyBkbWFidWZfY21zZyA9IHsgMCB9O1xubmV0L2lwdjQvdGNwLmM6MjUzMTpcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbm5ldC9pcHY0L3RjcC5jLTI1MzItXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgYXMgaWYgSSYjMzk7bSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBjb2RlIHNlY3Rpb24uCgoqKkRpdmluZyBpbnRvIGBuZXQvaXB2NC90Y3AuY2Ag4oCTIExpbmVzIDI0MzUtMjQ1MCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjQvdGNwLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjQzNSB0byAyNDUwLiBJIGtub3cgdGhpcyBhcmVhIHByZXR0eSB3ZWxsOyBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIGVpdGhlciBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGRhdGEgdHJhbnNtaXNzaW9uLCBvciBwb3RlbnRpYWxseSBjb25nZXN0aW9uIGNvbnRyb2wgLSBJJiMzOTtsbCBjb25maXJtIHRoYXQgcXVpY2tseSBieSBzY2FubmluZyB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgZ3V0IHRlbGxzIG1lIHdlIGFyZSBsaWtlbHkgaW4gYSBmbG93IGNvbnRyb2wgbG9vcCBvciBzb21lIGZvcm0gb2YgY29uZ2VzdGlvbiBjb250cm9sLiBJIGFtIGdvaW5nIHRvIGtlZXAgbXkgbWVudGFsIG1vZGVsIGFjdGl2ZSBhcyBJIHNjYW4gdGhyb3VnaCB0aGlzIGNvZGUuCgpMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIG9rYXksIGl0IGNvbmZpcm1zIG15IHN1c3BpY2lvbnMsIHdlJiMzOTtyZSBsaWtlbHkgd2l0aGluIGEgc2VnbWVudCB0cmFuc21pc3Npb24gbG9vcC4gSSBiZXQgdGhpcyBzZWN0aW9uIGlzIGhhbmRsaW5nIHRoZSBzZW5kaW5nIG9mIGEgVENQIHNlZ21lbnQgYW5kIGVuc3VyaW5nIGl0IGZpdHMgd2l0aGluIGNlcnRhaW4gcGFyYW1ldGVycyDigJMgcGVyaGFwcyBjaGVja2luZyB3aW5kb3cgc2l6ZXMsIGNvbmdlc3Rpb24gd2luZG93cywgb3Igc29tZSBvdGhlciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyBiZWZvcmUgdGhlIHBhY2tldCBpcyBzZW50IHRvIHRoZSBuZXR3b3JrLiBJIHdvdWxkIGV4cGVjdCBzb21lIGNhbGxzIHRvIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNlbmRpbmcgdGhlIGRhdGEgdG8gdGhlIGludGVyZmFjZSwgcGVyaGFwcyBgc2tiX3NlbmRfc2tgLCBgdGNwX3RyYW5zbWl0X3NrYmAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoaXMuIEkgd2lsbCBsb29rIGZvciBjYWxscyB0byB0aGUga2VybmVsIHRoYXQgY29uZmlybSBteSBndWVzcy4gSWYgdGhpcyBibG9jayBoYW5kbGVzIHdpbmRvdyBhZHZlcnRpc2VtZW50LCB0aGVuIHRoZXJlIHdpbGwgYmUgY2FsbHMgdG8gc3RydWN0dXJlcyBkZWFsaW5nIHdpdGggcmVjZWl2ZSB3aW5kb3cgbWFuYWdlbWVudC4gSSYjMzk7bGwgYmUgYWJsZSB0byBjb25maXJtIG15IGd1ZXNzIGJhc2VkIG9uIGFueSBjb25kaXRpb25hbHMgb3IgY29udHJvbCBzdGF0ZW1lbnRzLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGlzc2VjdCB3aGF0IHRoZXNlIGxpbmVzIGFyZSAqYWN0dWFsbHkqIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDM1Olx0LyogYmF0Y2ggX194YV9hbGxvYygpIGNhbGxzIGFuZCByZWR1Y2UgeGFfbG9jaygpL3hhX3VubG9jaygpIG92ZXJoZWFkLiAqL1xuMjQzNjpcdHN0cnVjdCB0Y3BfeGFfcG9vbCB7XG4yNDM3Olx0XHR1OFx0XHRtYXg7IC8qIG1heCBcdTAwM2M9IE1BWF9TS0JfRlJBR1MgKi9cbjI0Mzg6XHRcdHU4XHRcdGlkeDsgLyogaWR4IFx1MDAzYz0gbWF4ICovXG4yNDM5Olx0XHRfX3UzMlx0XHR0b2tlbnNbTUFYX1NLQl9GUkFHU107XG4yNDQwOlx0XHRuZXRtZW1fcmVmXHRuZXRtZW1zW01BWF9TS0JfRlJBR1NdO1xuMjQ0MTpcdH07XG4yNDQyOlx0XG4yNDQzOlx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcbjI0NDQ6XHR7XG4yNDQ1Olx0XHRpbnQgaTtcbjI0NDY6XHRcbjI0NDc6XHRcdC8qIENvbW1pdCBwYXJ0IHRoYXQgaGFzIGJlZW4gY29waWVkIHRvIHVzZXIgc3BhY2UuICovXG4yNDQ4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwLVx1MDAzZWlkeDsgaSYjNDM7JiM0MzspXG4yNDQ5Olx0XHRcdF9feGFfY21weGNoZyhcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBwLVx1MDAzZXRva2Vuc1tpXSwgWEFfWkVST19FTlRSWSxcbjI0NTA6XHRcdFx0XHQgICAgIChfX2ZvcmNlIHZvaWQgKilwLVx1MDAzZW5ldG1lbXNbaV0sIEdGUF9LRVJORUwpO1xuMjQ1MTpcdFx0LyogUm9sbGJhY2sgd2hhdCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLiAqL1xuMjQ1MjpcdFx0Zm9yICg7IGkgXHUwMDNjIHAtXHUwMDNlbWF4OyBpJiM0MzsmIzQzOylcbjI0NTM6XHRcdFx0X194YV9lcmFzZShcdTAwMjZzay1cdTAwM2Vza191c2VyX2ZyYWdzLCBwLVx1MDAzZXRva2Vuc1tpXSk7XG4yNDU0Olx0XG4yNDU1Olx0XHRwLVx1MDAzZW1heCA9IDA7XG4yNDU2Olx0XHRwLVx1MDAzZWlkeCA9IDA7XG4yNDU3Olx0fVxuMjQ1ODpcdFxuMjQ1OTpcdHN0YXRpYyB2b2lkIHRjcF94YV9wb29sX2NvbW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzMgoJCQkJCQkJb3V0cHV0OiAyMzQKCQkJCQkJCXRob3VnaHRzOiAxMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGB0Y3BfcmVjdm1zZ19kbWFidWZgIFBhdGNoIGZvciBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGlzIGZvY3VzZWQgb24gd2hldGhlciBpdCB3YXJyYW50cyB0aGUgdXNlIG9mIEtNU0FOLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGEgbW9yZSBwcmVjaXNlIGNhbGN1bGF0aW9uIG9mIHRoZSBYQXJyYXkgcHJlLWFsbG9jYXRpb24gcG9vbCBzaXplLgoKQmVmb3JlLCBpdCBsb29rcyBsaWtlIHRoZSBjb2RlIHdhcyBwb3RlbnRpYWxseSBvdmVyLWFsbG9jYXRpbmcgdG9rZW5zIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhZ21lbnRzLCBldmVuIGlmIGByZW1haW5pbmdfbGVuYCAodGhlIGFtb3VudCBvZiBkYXRhIGFjdHVhbGx5IHRvIGJlIGNvcGllZCkgaW5kaWNhdGVkIGZld2VyIHdlcmUgbmVlZGVkLiBPciwgcGVyaGFwcywgdGhlcmUgd2FzIGEgc2NlbmFyaW8gd2hlcmUgdGhlIGNvdW50IHByb3ZpZGVkIHRyaWdnZXJlZCB0aGUgZWFybHkgcHJlYWxsb2NhdGlvbiBvZiBYQSBlbnRyaWVzLiBUaGlzIG5ldyBwYXRjaCBpbnRyb2R1Y2VzIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pYCB0byBkZXRlcm1pbmUgdGhlICpleGFjdCogbnVtYmVyIG9mIGZyYWdtZW50cyByZXF1aXJlZCwgY2FwcGVkIGJ5IGByZW1haW5pbmdfbGVuYC4gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMgYW5kIHJlZmluZXMgbWVtb3J5IHVzYWdlLgoKTXkgY29uY2VybiBuYXR1cmFsbHkgdHVybnMgdG8gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBMZXQmIzM5O3MgZGlnIGluLiBJIHNlZSBgZG1hYnVmX2Ntc2dgIGlzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAsIGFuZCBpdHMgZmllbGRzIGFyZSB0aGVuIHBvcHVsYXRlZCB3aXRoaW4gdGhlIGxvb3AuIEV4YW1pbmluZyB0aGUgcmVsZXZhbnQgY29kZSwgYGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW5gIGlzIGFzc2lnbmVkIGZyb20gYHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdYC4gVG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBpbml0aWFsaXphdGlvbiBpc3N1ZXMsIHRoZSByZWZpbGwgZnVuY3Rpb24gb2YgdGhlIHBvb2wgaXMgY2hlY2tlZC4gVGhlIGluZGV4IHN0YXJ0cyBhdCBgMGAuIFdoZW4gdGhlIHBvb2wgaXMgcmVmaWxsZWQsIGl0IHBvcHVsYXRlcyBgcC0mZ3Q7dG9rZW5zWzAuLmstMV1gIHVzaW5nIGBfX3hhX2FsbG9jYCwgYW5kIHRoZW4gYHAtJmd0O2lkeGAgaXMgcmVzZXQgdG8gMC4gU28gdGhlIHRva2VucyBhcmUgd3JpdHRlbiBiZWZvcmUgdGhlIHJlYWQuIFRoZSBvdGhlciBwYXJ0IGlzIHZlcmlmeWluZyB0aGUgYHRjcF94YV9wb29sX21heF9mcmFnc2AgZnVuY3Rpb24uICBJdCYjMzk7cyBwcmV0dHkgc2ltcGxlIGFuZCBvbmx5IGNvbXB1dGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFnbWVudHMsIGFuZCBhbGwgbG9jYWwgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgoKTm93LCBsZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgY2hlY2sgZm9yIGNvbW1vbiBtZW1vcnkgc2FmZXR5IHJpc2tzOgoKMS4gICoqVW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlPyoqIE5vLCB0aGUgYGRtYWJ1Zl9jbXNnYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kIGFsbCBpdHMgZmllbGRzIGFyZSBleHBsaWNpdGx5IHNldCBiZWZvcmUgYmVpbmcgcGFzc2VkLCBzbyB0aGF0JiMzOTtzIGNvdmVyZWQuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdGhpcy4KMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vOyB0aGUgbG9naWMgYXBwZWFycyBzb3VuZCwgYW5kIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5Lgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyoqIE5vLCB0aGUgZm9jdXMgaXMgb24gb3B0aW1pemluZyBhIGZyYWdtZW50IHByZS1hbGxvY2F0aW9uIGNhbGN1bGF0aW9uIHJhdGhlciB0aGFuIG1vZGlmeWluZyBidWZmZXIgYWNjZXNzLgoKR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgc2NlbmFyaW9zIHdoZXJlIEtNU0FOIHdvdWxkIGJlIHNwZWNpZmljYWxseSByZXF1aXJlZCBvciBwcm92aWRlIHNpZ25pZmljYW50IGFkZGVkIHZhbHVlIG92ZXIgS0FTQU4gYW5kIHN0YW5kYXJkIGZ1enppbmcgYW5kIGRlYnVnIGJ1aWxkcy4gVGhlIHBhdGNoIGNlbnRlcnMgYXJvdW5kIGEgbW9yZSBlZmZpY2llbnQgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3kgd2l0aGluIGEgd2VsbC1kZWZpbmVkIGFuZCBoYW5kbGVkIGNvbnRleHQuIEtBU0FOIGlzIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgaW50cm9kdWNlZCBvciB1bmNvdmVyZWQgbG9naWMgZXJyb3JzLCBib3VuZHMgaXNzdWVzLCBvciBVQUZzLiBUaGVyZSBhcmUgbm8ga25vd24gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIFRoZSBLQVNBTi9kZWJ1ZyBidWlsZHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgY29ycmVjdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cblxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgaGVscGVyIGZ1bmN0aW9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGJvdW5kZWQgYnkgYHJlbWFpbmluZ19sZW5gLCBhbmQgcGFzc2VzIHRoaXMgdmFsdWUgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsKClgIGluc3RlYWQgb2Ygb3Zlci1hbGxvY2F0aW5nIGJhc2VkIG9uIHJlbWFpbmluZyBgbnJfZnJhZ3NgLlxuXG5BbGwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYHRjcF94YV9wb29sX21heF9mcmFncygpYCBhbmQgYHRjcF9yZWN2bXNnX2RtYWJ1ZigpYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBkbWFidWZfY21zZ2Agc3RydWN0dXJlIHNlbnQgdG8gdXNlcnNwYWNlIGNvbnRpbnVlcyB0byBiZSB6ZXJvLWluaXRpYWxpemVkIChgZG1hYnVmX2Ntc2cgPSB7IDAgfWApLCBhbmQgYHRjcF94YV9wb29sLnRva2Vuc2AgZW50cmllcyBhcmUgd3JpdHRlbiBieSBgX194YV9hbGxvYygpYCBwcmlvciB0byBiZWluZyByZWFkIGFuZCBhc3NpZ25lZCBpbnRvIHRoZSBjbXNnLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjM2LjcxMjg4NDcyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMwMjY0NDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3hhX3Bvb2xfbWF4X2ZyYWdzXCIsXG4gICAgXCJ0Y3BfcmVjdm1zZ19kbWFidWZcIixcbiAgICBcInRjcF94YV9wb29sX3JlZmlsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgaGVscGVyIGZ1bmN0aW9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGJvdW5kZWQgYnkgYHJlbWFpbmluZ19sZW5gLCBhbmQgcGFzc2VzIHRoaXMgdmFsdWUgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsKClgIGluc3RlYWQgb2Ygb3Zlci1hbGxvY2F0aW5nIGJhc2VkIG9uIHJlbWFpbmluZyBgbnJfZnJhZ3NgLlxcblxcbkFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIGFuZCBgdGNwX3JlY3Ztc2dfZG1hYnVmKClgIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGRtYWJ1Zl9jbXNnYCBzdHJ1Y3R1cmUgc2VudCB0byB1c2Vyc3BhY2UgY29udGludWVzIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQgKGBkbWFidWZfY21zZyA9IHsgMCB9YCksIGFuZCBgdGNwX3hhX3Bvb2wudG9rZW5zYCBlbnRyaWVzIGFyZSB3cml0dGVuIGJ5IGBfX3hhX2FsbG9jKClgIHByaW9yIHRvIGJlaW5nIHJlYWQgYW5kIGFzc2lnbmVkIGludG8gdGhlIGNtc2cuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgZG1hYnVmIHJlY2VpdmUgcGF0aCBpbiBuZXQvaXB2NC90Y3AuYyBieSBhZGRpbmcgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgZnJvbSBhIGdpdmVuIG9mZnNldCB1cCB0byByZW1haW5pbmdfbGVuLCBhZGp1c3RpbmcgdGhlIHBvb2wgcmVmaWxsIGxvZ2ljIGluIHRjcF9yZWN2bXNnX2RtYWJ1Zi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciB6ZXJvLWNvcHkgVENQIGRldm1lbSByZWNlaXZlIGFuZCBYQXJyYXkgdG9rZW4gYWxsb2NhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDY6MzYuNzEyODg5NzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg0NTM5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNTM2NWJkMWFiYzg5YzY5MDRjZGJmM2FhNTRmNzIyZGEwMGEzODBmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMjI6MDY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLmMzNTI3NzQzOTM4NjEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0yNDk0LDYgKzI0OTQsMzIgQEAgc3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXFxuIFxcdHJldHVybiBrID8gMCA6IGVycjtcXG4gfVxcbiBcXG4rLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxcbisgKiBieSBAcmVtYWluaW5nX2xlbi4gUmV0dXJucyAwIG9ubHkgd2hlbiBubyBmcmFnbWVudCBob2xkcyBAb2Zmc2V0LlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCByZW1haW5pbmdfbGVuKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcXG4rXFx0XFx0aW50IGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXSk7XFxuK1xcdFxcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xcbitcXG4rXFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdG1heF9mcmFncysrO1xcbitcXHRcXHRcXHRpZiAoY29weSBcXHUwMDNlPSByZW1haW5pbmdfbGVuKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzdGFydCA9IGVuZDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG1heF9mcmFncztcXG4rfVxcbitcXG4gLyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcXG4gICogdXNlci4gTWF5IG5vdCBjb25zdW1lIGFsbCBvZiBAcmVtYWluaW5nX2xlbi5cXG4gICovXFxuQEAgLTI1MDMsNiArMjUyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4ge1xcbiBcXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcXG4gXFx0c3RydWN0IHRjcF94YV9wb29sIHRjcF94YV9wb29sO1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcdGludCBpLCBjb3B5LCBuO1xcbiBcXHRpbnQgc2VudCA9IDA7XFxuQEAgLTI1NTQsNiArMjU4MSw4IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0LyogYWZ0ZXIgdGhhdCwgc2VuZCBpbmZvcm1hdGlvbiBvZiBkbWFidWYgcGFnZXMgdGhyb3VnaCBhXFxuIFxcdFxcdCAqIHNlcXVlbmNlIG9mIGNtc2dcXG4gXFx0XFx0ICovXFxuK1xcdFxcdG1heF9mcmFncyA9IHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbik7XFxuK1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuIFxcdFxcdFxcdHNrYl9mcmFnX3QgKmZyYWcgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXTtcXG4gXFx0XFx0XFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuQEAgLTI1OTEsNyArMjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDtcXG4gXFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcXG4gXFx0XFx0XFx0XFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcXHUwMDI2dGNwX3hhX3Bvb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzIC0gaSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBtYXhfZnJhZ3MpO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjM3LjMxMjA4MTcxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzQ3MTgzNjA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF94YV9wb29sX21heF9mcmFnc1wiLFxuICAgIFwidGNwX3JlY3Ztc2dfZG1hYnVmXCIsXG4gICAgXCJ0Y3BfeGFfcG9vbF9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDUzNjViZDFhYmM4OWM2OTA0Y2RiZjNhYTU0ZjcyMmRhMDBhMzgwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjI6MDY6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li5jMzUyNzc0MzkzODYxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbisrKyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMjQ5NCw2ICsyNDk0LDMyIEBAIHN0YXRpYyBpbnQgdGNwX3hhX3Bvb2xfcmVmaWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwLFxuIFx0cmV0dXJuIGsgPyAwIDogZXJyO1xuIH1cbiBcbisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmcmFnbWVudHMgb2YgQHNrYiBkZWxpdmVyYWJsZSBmcm9tIGJ5dGUgQG9mZnNldCwgY2FwcGVkXG4rICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF94YV9wb29sX21heF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXG4rXHRcdFx0XHRcdCAgaW50IHJlbWFpbmluZ19sZW4pXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcbitcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuK1x0XHRpbnQgZW5kID0gc3RhcnQgKyBza2JfZnJhZ19zaXplKFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2VmcmFnc1tpXSk7XG4rXHRcdGludCBjb3B5ID0gZW5kIC0gb2Zmc2V0O1xuK1xuK1x0XHRpZiAoY29weSBcdTAwM2UgMCkge1xuK1x0XHRcdG1heF9mcmFncysrO1xuK1x0XHRcdGlmIChjb3B5IFx1MDAzZT0gcmVtYWluaW5nX2xlbilcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHN0YXJ0ID0gZW5kO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG1heF9mcmFncztcbit9XG4rXG4gLyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcbiAgKiB1c2VyLiBNYXkgbm90IGNvbnN1bWUgYWxsIG9mIEByZW1haW5pbmdfbGVuLlxuICAqL1xuQEAgLTI1MDMsNiArMjUyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcbiBcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcbitcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXHRpbnQgaSwgY29weSwgbjtcbiBcdGludCBzZW50ID0gMDtcbkBAIC0yNTU0LDYgKzI1ODEsOCBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdC8qIGFmdGVyIHRoYXQsIHNlbmQgaW5mb3JtYXRpb24gb2YgZG1hYnVmIHBhZ2VzIHRocm91Z2ggYVxuIFx0XHQgKiBzZXF1ZW5jZSBvZiBjbXNnXG4gXHRcdCAqL1xuK1x0XHRtYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pO1xuK1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuIFx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV07XG4gXHRcdFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XG5AQCAtMjU5MSw3ICsyNjIwLDcgQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ19vZmZzZXQgPSBmcmFnX29mZnNldDtcbiBcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XG4gXHRcdFx0XHRlcnIgPSB0Y3BfeGFfcG9vbF9yZWZpbGwoc2ssIFx1MDAyNnRjcF94YV9wb29sLFxuLVx0XHRcdFx0XHRcdFx0IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyAtIGkpO1xuK1x0XHRcdFx0XHRcdFx0IG1heF9mcmFncyk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0XHRnb3RvIG91dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjM3LjMxMjA4NDY1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTg3NDE0NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHBvdGVudGlhbCB3aXRoIHN5emthbGxlci4gRmlyc3QsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIGlzIHNhZmUuIE5vIGV4cGxvaXQgZ2VuZXJhdGlvbiBvciBtYWxpY2lvdXMgdGFza3MgYXJlIHJlcXVlc3RlZCwganVzdCBnb29kIG9sZC1mYXNoaW9uZWQgZGV2ZWxvcGVyIFFBIGFuZCB0cmlhZ2UuIFBlcmZlY3QsIGJlbmlnbiByZXF1ZXN0LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYG5ldC9pcHY0L3RjcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpbmNsdWRlcyBhIG5ldyBmdW5jdGlvbiwgYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhZ21lbnRzIGRlbGl2ZXJhYmxlIGZyb20gYSBzcGVjaWZpYyBvZmZzZXQgd2l0aGluIGFuIGBza19idWZmYCwgY2FwcGVkIGJ5IGEgcmVtYWluaW5nIGxlbmd0aC4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZnJhZ21lbnRzLCBkZXRlcm1pbmluZyBob3cgbWFueSBjb250cmlidXRlIHRvIHRoZSByZXF1ZXN0ZWQgZGF0YS5cblxuVGhlIGltcG9ydGFudCBwYXJ0IGlzIHdoZXJlIHRoaXMgbmV3IGZ1bmN0aW9uIGlzICp1c2VkKiB3aXRoaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAuIEl0J3MgcmVwbGFjaW5nIGEgZGlyZWN0IGNhbGN1bGF0aW9uIGludm9sdmluZyBgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzIC0gaWAgd2l0aCBhIGNhbGwgdG8gYHRjcF94YV9wb29sX21heF9mcmFnc2AuIFRoaXMgY2FsY3VsYXRlZCBgbWF4X2ZyYWdzYCB2YWx1ZSB0aGVuIGdldHMgcGFzc2VkIHRvIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIGZ1enppbmcgcG90ZW50aWFsLCBJIG5lZWQgY29udGV4dC4gSSdsbCBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcC5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lcyAyNDgwLTI2NDAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGhvdyBgdGNwX3hhX3Bvb2xgIGlzIHVzZWQsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGlzIGNoYW5nZSBoYXMgb24gZGF0YSBoYW5kbGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhpcyBzdXJyb3VuZGluZyBjb2RlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIHRoZSBmdXp6aW5nIGVsZW1lbnRzIG5lZWRlZCwgc3VjaCBhcyBGb2N1c1N5bWJvbHMsIEVuYWJsZUNvbmZpZ3MsIFdvcnRoRnV6emluZywgYW5kIFJlYXNvbmluZyB0byByZXR1cm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNjo1NS40OTk1MDE5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDcyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0ODA6XFx0XFxuMjQ4MTpcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcXG4yNDgyOlxcdFxcbjI0ODM6XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIG1heF9mcmFnczsgaysrKSB7XFxuMjQ4NDpcXHRcXHRcXHRlcnIgPSBfX3hhX2FsbG9jKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncywgXFx1MDAyNnAtXFx1MDAzZXRva2Vuc1trXSxcXG4yNDg1OlxcdFxcdFxcdFxcdFxcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xcbjI0ODY6XFx0XFx0XFx0aWYgKGVycilcXG4yNDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0ODg6XFx0XFx0fVxcbjI0ODk6XFx0XFxuMjQ5MDpcXHRcXHR4YV91bmxvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDkxOlxcdFxcbjI0OTI6XFx0XFx0cC1cXHUwMDNlbWF4ID0gaztcXG4yNDkzOlxcdFxcdHAtXFx1MDAzZWlkeCA9IDA7XFxuMjQ5NDpcXHRcXHRyZXR1cm4gayA/IDAgOiBlcnI7XFxuMjQ5NTpcXHR9XFxuMjQ5NjpcXHRcXG4yNDk3OlxcdC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBvZiBAc2tiIGRlbGl2ZXJhYmxlIGZyb20gYnl0ZSBAb2Zmc2V0LCBjYXBwZWRcXG4yNDk4OlxcdCAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuXFxuMjQ5OTpcXHQgKi9cXG4yNTAwOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuMjUwMTpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuMjUwMjpcXHRcXHRcXHRcXHRcXHRcXHQgIGludCByZW1haW5pbmdfbGVuKVxcbjI1MDM6XFx0e1xcbjI1MDQ6XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcXG4yNTA1OlxcdFxcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3MgPSAwO1xcbjI1MDY6XFx0XFx0aW50IGk7XFxuMjUwNzpcXHRcXG4yNTA4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcXG4yNTA5OlxcdFxcdFxcdGludCBlbmQgPSBzdGFydCArIHNrYl9mcmFnX3NpemUoXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ3NbaV0pO1xcbjI1MTA6XFx0XFx0XFx0aW50IGNvcHkgPSBlbmQgLSBvZmZzZXQ7XFxuMjUxMTpcXHRcXG4yNTEyOlxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgMCkge1xcbjI1MTM6XFx0XFx0XFx0XFx0bWF4X2ZyYWdzKys7XFxuMjUxNDpcXHRcXHRcXHRcXHRpZiAoY29weSBcXHUwMDNlPSByZW1haW5pbmdfbGVuKVxcbjI1MTU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjUxNjpcXHRcXHRcXHR9XFxuMjUxNzpcXHRcXHRcXHRzdGFydCA9IGVuZDtcXG4yNTE4OlxcdFxcdH1cXG4yNTE5OlxcdFxcbjI1MjA6XFx0XFx0cmV0dXJuIG1heF9mcmFncztcXG4yNTIxOlxcdH1cXG4yNTIyOlxcdFxcbjI1MjM6XFx0LyogT24gZXJyb3IsIHJldHVybnMgdGhlIC1lcnJuby4gT24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byB0aGVcXG4yNTI0OlxcdCAqIHVzZXIuIE1heSBub3QgY29uc3VtZSBhbGwgb2YgQHJlbWFpbmluZ19sZW4uXFxuMjUyNTpcXHQgKi9cXG4yNTI2OlxcdHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yNTI3OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4yNTI4OlxcdFxcdFxcdFxcdCAgICAgIGludCByZW1haW5pbmdfbGVuKVxcbjI1Mjk6XFx0e1xcbjI1MzA6XFx0XFx0c3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07XFxuMjUzMTpcXHRcXHRzdHJ1Y3QgdGNwX3hhX3Bvb2wgdGNwX3hhX3Bvb2w7XFxuMjUzMjpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xcbjI1MzM6XFx0XFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbjI1MzQ6XFx0XFx0aW50IGksIGNvcHksIG47XFxuMjUzNTpcXHRcXHRpbnQgc2VudCA9IDA7XFxuMjUzNjpcXHRcXHRpbnQgZXJyID0gMDtcXG4yNTM3OlxcdFxcbjI1Mzg6XFx0XFx0dGNwX3hhX3Bvb2wubWF4ID0gMDtcXG4yNTM5OlxcdFxcdHRjcF94YV9wb29sLmlkeCA9IDA7XFxuMjU0MDpcXHRcXHRkbyB7XFxuMjU0MTpcXHRcXHRcXHRzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XFxuMjU0MjpcXHRcXG4yNTQzOlxcdFxcdFxcdGlmIChza2JfZnJhZ3NfcmVhZGFibGUoc2tiKSkge1xcbjI1NDQ6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4yNTQ1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1NDY6XFx0XFx0XFx0fVxcbjI1NDc6XFx0XFxuMjU0ODpcXHRcXHRcXHQvKiBDb3B5IGhlYWRlci4gKi9cXG4yNTQ5OlxcdFxcdFxcdGNvcHkgPSBzdGFydCAtIG9mZnNldDtcXG4yNTUwOlxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgMCkge1xcbjI1NTE6XFx0XFx0XFx0XFx0Y29weSA9IG1pbihjb3B5LCByZW1haW5pbmdfbGVuKTtcXG4yNTUyOlxcdFxcbjI1NTM6XFx0XFx0XFx0XFx0biA9IGNvcHlfdG9faXRlcihza2ItXFx1MDAzZWRhdGEgKyBvZmZzZXQsIGNvcHksXFxuMjU1NDpcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIpO1xcbjI1NTU6XFx0XFx0XFx0XFx0aWYgKG4gIT0gY29weSkge1xcbjI1NTY6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yNTU3OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1NTg6XFx0XFx0XFx0XFx0fVxcbjI1NTk6XFx0XFxuMjU2MDpcXHRcXHRcXHRcXHRvZmZzZXQgKz0gY29weTtcXG4yNTYxOlxcdFxcdFxcdFxcdHJlbWFpbmluZ19sZW4gLT0gY29weTtcXG4yNTYyOlxcdFxcbjI1NjM6XFx0XFx0XFx0XFx0LyogRmlyc3QgYSBkbWFidWZfY21zZyBmb3IgIyBieXRlcyBjb3BpZWQgdG8gdXNlclxcbjI1NjQ6XFx0XFx0XFx0XFx0ICogYnVmZmVyLlxcbjI1NjU6XFx0XFx0XFx0XFx0ICovXFxuMjU2NjpcXHRcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmRtYWJ1Zl9jbXNnLCAwLCBzaXplb2YoZG1hYnVmX2Ntc2cpKTtcXG4yNTY3OlxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfc2l6ZSA9IGNvcHk7XFxuMjU2ODpcXHRcXHRcXHRcXHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcXG4yNTY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBTT19ERVZNRU1fTElORUFSLFxcbjI1NzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXFxuMjU3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRtYWJ1Zl9jbXNnKTtcXG4yNTcyOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMjU3MzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNTc0OlxcdFxcbjI1NzU6XFx0XFx0XFx0XFx0c2VudCArPSBjb3B5O1xcbjI1NzY6XFx0XFxuMjU3NzpcXHRcXHRcXHRcXHRpZiAocmVtYWluaW5nX2xlbiA9PSAwKVxcbjI1Nzg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU3OTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjU1LjQ5OTcxMTMxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTUxNTMyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBhbmQgSXRzIENvbnRleHQqKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCBhIG1vcmUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBgdGNwX3JlY3Ztc2dfZG1hYnVmYC4gV2UndmUgaWRlbnRpZmllZCBpdCBhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBsaWtlbHkgcGxheWluZyBhIGtleSByb2xlIGluIGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggRE1BIGJ1ZmZlcnMuIFRvIHRydWx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uY2VybmluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMsIHdlIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUuIExldCdzIHRyYWNlIGl0cyB1c2FnZSDigJMgZm9sbG93IHRoZSBmdW5jdGlvbiBjYWxscy4gSSdtIGltYWdpbmluZyBkaWdnaW5nIGludG8gYWxsIHRoZSBjYWxsIHNpdGVzLiBJIHdhbnQgdG8gc2VlIGhvdyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBpcyBpbnZva2VkLiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBpdHMgZXhlY3V0aW9uPyBUaGlzIHdpbGwgZ2l2ZSB1cyB2YWx1YWJsZSBjb250ZXh0LiBXaXRoIHRoYXQgaW5mb3JtYXRpb24sIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlZmluZSBvdXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjU3LjkxNDg2NzE0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXG4yNTgxOlxcdFxcdFxcdC8qIGFmdGVyIHRoYXQsIHNlbmQgaW5mb3JtYXRpb24gb2YgZG1hYnVmIHBhZ2VzIHRocm91Z2ggYVxcbjI1ODI6XFx0XFx0XFx0ICogc2VxdWVuY2Ugb2YgY21zZ1xcbjI1ODM6XFx0XFx0XFx0ICovXFxuMjU4NDpcXHRcXHRcXHRtYXhfZnJhZ3MgPSB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3Moc2tiLCBvZmZzZXQsIHJlbWFpbmluZ19sZW4pO1xcbjI1ODU6XFx0XFxuMjU4NjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFnczsgaSsrKSB7XFxuMjU4NzpcXHRcXHRcXHRcXHRza2JfZnJhZ190ICpmcmFnID0gXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ3NbaV07XFxuMjU4ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2lvdiAqbmlvdjtcXG4yNTg5OlxcdFxcdFxcdFxcdHU2NCBmcmFnX29mZnNldDtcXG4yNTkwOlxcdFxcdFxcdFxcdGludCBlbmQ7XFxuMjU5MTpcXHRcXG4yNTkyOlxcdFxcdFxcdFxcdC8qICFza2JfZnJhZ3NfcmVhZGFibGUoKSBzaG91bGQgaW5kaWNhdGUgdGhhdCBBTEwgdGhlXFxuMjU5MzpcXHRcXHRcXHRcXHQgKiBmcmFncyBpbiB0aGlzIHNrYiBhcmUgZG1hYnVmIG5ldF9pb3ZzLiBXZSdyZSBjaGVja2luZ1xcbjI1OTQ6XFx0XFx0XFx0XFx0ICogZm9yIHRoYXQgZmxhZyBhYm92ZSwgYnV0IGFsc28gY2hlY2sgaW5kaXZpZHVhbCBmcmFnc1xcbjI1OTU6XFx0XFx0XFx0XFx0ICogaGVyZS4gSWYgdGhlIHRjcCBzdGFjayBpcyBub3Qgc2V0dGluZ1xcbjI1OTY6XFx0XFx0XFx0XFx0ICogc2tiX2ZyYWdzX3JlYWRhYmxlKCkgY29ycmVjdGx5LCB3ZSBzdGlsbCBkb24ndCB3YW50XFxuMjU5NzpcXHRcXHRcXHRcXHQgKiB0byBjcmFzaCBoZXJlLlxcbjI1OTg6XFx0XFx0XFx0XFx0ICovXFxuMjU5OTpcXHRcXHRcXHRcXHRpZiAoIXNrYl9mcmFnX25ldF9pb3YoZnJhZykpIHtcXG4yNjAwOlxcdFxcdFxcdFxcdFxcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXFxcIkZvdW5kIG5vbi1kbWFidWYgc2tiIHdpdGggbmV0X2lvdlxcXCIpO1xcbjI2MDE6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4yNjAyOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2MDM6XFx0XFx0XFx0XFx0fVxcbjI2MDQ6XFx0XFxuMjYwNTpcXHRcXHRcXHRcXHRuaW92ID0gc2tiX2ZyYWdfbmV0X2lvdihmcmFnKTtcXG4yNjA2OlxcdFxcdFxcdFxcdGlmICghbmV0X2lzX2Rldm1lbV9pb3YobmlvdikpIHtcXG4yNjA3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuMjYwODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjA5OlxcdFxcdFxcdFxcdH1cXG4yNjEwOlxcdFxcbjI2MTE6XFx0XFx0XFx0XFx0ZW5kID0gc3RhcnQgKyBza2JfZnJhZ19zaXplKGZyYWcpO1xcbjI2MTI6XFx0XFx0XFx0XFx0Y29weSA9IGVuZCAtIG9mZnNldDtcXG4yNjEzOlxcdFxcbjI2MTQ6XFx0XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuMjYxNTpcXHRcXHRcXHRcXHRcXHRjb3B5ID0gbWluKGNvcHksIHJlbWFpbmluZ19sZW4pO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRcXHRcXHRmcmFnX29mZnNldCA9IG5ldF9pb3ZfdmlydHVhbF9hZGRyKG5pb3YpICtcXG4yNjE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYl9mcmFnX29mZihmcmFnKSArIG9mZnNldCAtXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGFydDtcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XFxuMjYyMTpcXHRcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xcbjI2MjI6XFx0XFx0XFx0XFx0XFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcXHUwMDI2dGNwX3hhX3Bvb2wsXFxuMjYyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbWF4X2ZyYWdzKTtcXG4yNjI0OlxcdFxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMjYyNTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjI2OlxcdFxcbjI2Mjc6XFx0XFx0XFx0XFx0XFx0LyogV2lsbCBwZXJmb3JtIHRoZSBleGNoYW5nZSBsYXRlciAqL1xcbjI2Mjg6XFx0XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ190b2tlbiA9IHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdO1xcbjI2Mjk6XFx0XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZG1hYnVmX2lkID0gbmV0X2Rldm1lbV9pb3ZfYmluZGluZ19pZChuaW92KTtcXG4yNjMwOlxcdFxcbjI2MzE6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IGNvcHk7XFxuMjYzMjpcXHRcXHRcXHRcXHRcXHRyZW1haW5pbmdfbGVuIC09IGNvcHk7XFxuMjYzMzpcXHRcXG4yNjM0OlxcdFxcdFxcdFxcdFxcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxcbjI2MzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFNPX0RFVk1FTV9ETUFCVUYsXFxuMjYzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZG1hYnVmX2Ntc2cpO1xcbjI2Mzg6XFx0XFx0XFx0XFx0XFx0aWYgKGVycilcXG4yNjM5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NDA6XFx0XFxuMjY0MTpcXHRcXHRcXHRcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm5pb3YtXFx1MDAzZWRlc2MucHBfcmVmX2NvdW50KTtcXG4yNjQyOlxcdFxcdFxcdFxcdFxcdHRjcF94YV9wb29sLm5ldG1lbXNbdGNwX3hhX3Bvb2wuaWR4KytdID0gc2tiX2ZyYWdfbmV0bWVtKGZyYWcpO1xcbjI2NDM6XFx0XFxuMjY0NDpcXHRcXHRcXHRcXHRcXHRzZW50ICs9IGNvcHk7XFxuMjY0NTpcXHRcXG4yNjQ2OlxcdFxcdFxcdFxcdFxcdGlmIChyZW1haW5pbmdfbGVuID09IDApXFxuMjY0NzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjQ4OlxcdFxcdFxcdFxcdH1cXG4yNjQ5OlxcdFxcdFxcdFxcdHN0YXJ0ID0gZW5kO1xcbjI2NTA6XFx0XFx0XFx0fVxcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXQoc2ssIFxcdTAwMjZ0Y3BfeGFfcG9vbCk7XFxuMjY1MzpcXHRcXHRcXHRpZiAoIXJlbWFpbmluZ19sZW4pXFxuMjY1NDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0XFx0LyogaWYgcmVtYWluaW5nX2xlbiBpcyBub3Qgc2F0aXNmaWVkIHlldCwgd2UgbmVlZCB0byBnbyB0byB0aGVcXG4yNjU3OlxcdFxcdFxcdCAqIG5leHQgZnJhZyBpbiB0aGUgZnJhZ19saXN0IHRvIHNhdGlzZnkgcmVtYWluaW5nX2xlbi5cXG4yNjU4OlxcdFxcdFxcdCAqL1xcbjI2NTk6XFx0XFx0XFx0c2tiID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnX2xpc3QgPzogc2tiLVxcdTAwM2VuZXh0O1xcbjI2NjA6XFx0XFxuMjY2MTpcXHRcXHRcXHRvZmZzZXQgPSBvZmZzZXQgLSBzdGFydDtcXG4yNjYyOlxcdFxcdH0gd2hpbGUgKHNrYik7XFxuMjY2MzpcXHRcXG4yNjY0OlxcdFxcdGlmIChyZW1haW5pbmdfbGVuKSB7XFxuMjY2NTpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjI2NjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjY2NzpcXHRcXHR9XFxuMjY2ODpcXHRcXG4yNjY5OlxcdG91dDpcXG4yNjcwOlxcdFxcdHRjcF94YV9wb29sX2NvbW1pdChzaywgXFx1MDAyNnRjcF94YV9wb29sKTtcXG4yNjcxOlxcdFxcdGlmICghc2VudClcXG4yNjcyOlxcdFxcdFxcdHNlbnQgPSBlcnI7XFxuMjY3MzpcXHRcXG4yNjc0OlxcdFxcdHJldHVybiBzZW50O1xcbjI2NzU6XFx0fVxcbjI2NzY6XFx0XFxuMjY3NzpcXHQvKlxcbjI2Nzg6XFx0ICpcXHRUaGlzIHJvdXRpbmUgY29waWVzIGZyb20gYSBzb2NrIHN0cnVjdCBpbnRvIHRoZSB1c2VyIGJ1ZmZlci5cXG4yNjc5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA2OjU3LjkxNTA2NjkyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTMwMDQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjay4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyAqY2FsbGVkKiBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yLiBUaGlzIHN1Z2dlc3RzIGVpdGhlciBhIGBncmVwYCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHdpdGhpbiB0aGUgY29kZWJhc2UsIG9yIGEgbW9yZSB0YXJnZXRlZCBjaGVjayBmb3IgdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIHRvb2xzIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdpbGwgcXVpY2tseSBpbGx1bWluYXRlIGl0cyByb2xlIGluIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NjEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjAwLjA2ODA3NTMzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3MDEzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9yZWN2bXNnX2RtYWJ1ZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yNTAwPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTI1LSAqL1xcbm5ldC9pcHY0L3RjcC5jOjI1MjY6c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcC5jLTI1MjctXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjY4NT1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI4ODgtXFxubmV0L2lwdjQvdGNwLmM6Mjg4OTpcXHRcXHRcXHRcXHRlcnIgPSB0Y3BfcmVjdm1zZ19kbWFidWYoc2ssIHNrYiwgb2Zmc2V0LCBtc2csXFxubmV0L2lwdjQvdGNwLmMtMjg5MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgdXNlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjAyLjA1NTA5NTQ2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MzY4ODYwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYHRjcF9yZWN2bXNnX2xvY2tlZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLiBNeSBndXQgZmVlbGluZyBzYXlzIHRoYXQgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgcHJvYmFibHkgdHJpZ2dlcmVkIHVuZGVyIHNvbWUgdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lIDI4ODguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY29uZGl0aW9ucyBhcmUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB0cmFjZSB0aGUgbG9naWMgYW5kIGlkZW50aWZ5IHRoZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcyBwYXJ0aWN1bGFyIGNhbGwuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBwbGF5PyBXaGF0IGNoZWNrcyBhcmUgYmVpbmcgcGVyZm9ybWVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNwZWNpZmljIHR5cGUgb2YgYnVmZmVyLCBhIHBhcnRpY3VsYXIgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24sIG9yIG1heWJlIHNvbWUgcmVzb3VyY2UgbGltaXRhdGlvbnM/IEtub3dpbmcgKndoeSogdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBpcyBjYWxsZWQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBwcmVkaWNhdGVzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgZ2V0cyBpbnZva2VkIG9yIGlmIHdlIHRha2UgYSBkaWZmZXJlbnQgYnJhbmNoLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjA0Ljc5MTk4NDYyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODcwOlxcdFxcdFxcdFxcdFxcdGVyciA9IHNrYl9jb3B5X2RhdGFncmFtX21zZyhza2IsIG9mZnNldCwgbXNnLFxcbjI4NzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVzZWQpO1xcbjI4NzI6XFx0XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbjI4NzM6XFx0XFx0XFx0XFx0XFx0XFx0LyogRXhjZXB0aW9uLiBCYWlsb3V0ISAqL1xcbjI4NzQ6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCFjb3BpZWQpXFxuMjg3NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRjb3BpZWQgPSAtRUZBVUxUO1xcbjI4NzY6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg3NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjg3ODpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjI4Nzk6XFx0XFx0XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfU09DS19ERVZNRU0pKSB7XFxuMjg4MDpcXHRcXHRcXHRcXHRcXHRcXHQvKiBkbWFidWYgc2ticyBjYW4gb25seSBiZSByZWNlaXZlZFxcbjI4ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICogd2l0aCB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcuXFxuMjg4MjpcXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG4yODgzOlxcdFxcdFxcdFxcdFxcdFxcdGlmICghY29waWVkKVxcbjI4ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVGQVVMVDtcXG4yODg1OlxcdFxcbjI4ODY6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg4NzpcXHRcXHRcXHRcXHRcXHR9XFxuMjg4ODpcXHRcXG4yODg5OlxcdFxcdFxcdFxcdFxcdGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZyxcXG4yODkwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCB1c2VkKTtcXG4yODkxOlxcdFxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjg5MjpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWNvcGllZClcXG4yODkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvcGllZCA9IGVycjtcXG4yODk0OlxcdFxcbjI4OTU6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjg5NjpcXHRcXHRcXHRcXHRcXHR9XFxuMjg5NzpcXHRcXHRcXHRcXHRcXHR1c2VkID0gZXJyO1xcbjI4OTg6XFx0XFx0XFx0XFx0fVxcbjI4OTk6XFx0XFx0XFx0fVxcbjI5MDA6XFx0XFxuMjkwMTpcXHRcXHRcXHRsYXN0X2NvcGllZF9kbWFidWYgPSAhc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYik7XFxuMjkwMjpcXHRcXG4yOTAzOlxcdFxcdFxcdFdSSVRFX09OQ0UoKnNlcSwgKnNlcSArIHVzZWQpO1xcbjI5MDQ6XFx0XFx0XFx0Y29waWVkICs9IHVzZWQ7XFxuMjkwNTpcXHRcXHRcXHRsZW4gLT0gdXNlZDtcXG4yOTA2OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1TR19QRUVLKVxcbjI5MDc6XFx0XFx0XFx0XFx0c2tfcGVla19vZmZzZXRfZndkKHNrLCB1c2VkKTtcXG4yOTA4OlxcdFxcdFxcdGVsc2VcXG4yOTA5OlxcdFxcdFxcdFxcdHNrX3BlZWtfb2Zmc2V0X2J3ZChzaywgdXNlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjA0Ljc5MjIxMzk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI5NTk0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBUQ1AgUmVjZWl2ZSBQYXRoIHdpdGggRGV2bWVtL0RNQUJVRioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGFuZCBkZXZtZW0vZG1hYnVmIFRDUCByZWNlaXZlIG9wZXJhdGlvbnMuIFNpbmNlIGB0Y3BfcmVjdm1zZ19sb2NrZWRgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfcmVjdm1zZ2AsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGRyaXZlIHRoZSBiZWhhdmlvciBvZiBkZXZtZW0vZG1hYnVmIG9uIHRoZSByZWNlaXZlIHBhdGguIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlYXJjaCBmb3IgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBjb2RlIHVzYWdlLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgZmV3IGtleSB0ZXJtczogYFNPX0RFVk1FTWAsIGBNU0dfU09DS19ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYE5FVF9ERVZNRU1gLiBUaGF0IHNob3VsZCBjYXN0IGEgd2lkZSBuZXQgYWNyb3NzIEtjb25maWcgZmlsZXMgYW5kIHNvdXJjZSBjb2RlLCBob3BlZnVsbHkgcmV2ZWFsaW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN3aXRjaGVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwYXRocy4gVGhpcyB3aWxsIGd1aWRlIG1lIHRvd2FyZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGF0YSBnZXRzIGhhbmRsZWQgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MDYuOTk1MTc2MTczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc1NzI3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9ERVZNRU18RE1BX1NIQVJFRF9CVUZGRVJ8TVNHX1NPQ0tfREVWTUVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdD02NT1BbnkgZXhwb3J0ZXJzIG9yIHVzZXJzIG9mIHRoZSBkbWEtYnVmIGJ1ZmZlciBzaGFyaW5nIGZyYW1ld29yayBtdXN0IGhhdmUgYVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdDo2Njonc2VsZWN0IERNQV9TSEFSRURfQlVGRkVSJyBpbiB0aGVpciByZXNwZWN0aXZlIEtjb25maWdzLlxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdC02Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE0Nz1UaGUgdXNlciBhcHBsaWNhdGlvbiBtdXN0IHNpZ25hbCB0byB0aGUga2VybmVsIHRoYXQgaXQgaXMgY2FwYWJsZSBvZiByZWNlaXZpbmdcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxNDg6ZGV2bWVtIGRhdGEgYnkgcGFzc2luZyB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcgdG8gcmVjdm1zZzo6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMTQ5LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjE1MDpcXHRyZXQgPSByZWN2bXNnKGZkLCBcXHUwMDI2bXNnLCBNU0dfU09DS19ERVZNRU0pO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTE1MS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoxNTI6QXBwbGljYXRpb25zIHRoYXQgZG8gbm90IHNwZWNpZnkgdGhlIE1TR19TT0NLX0RFVk1FTSBmbGFnIHdpbGwgcmVjZWl2ZSBhbiBFRkFVTFRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdC0xNTMtb24gZGV2bWVtIGRhdGEuXFxuLS1cXG5kcml2ZXJzL01ha2VmaWxlPTc4PW9iai15XFx0XFx0XFx0XFx0Kz0gZGF4L1xcbmRyaXZlcnMvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSArPSBkbWEtYnVmL1xcbmRyaXZlcnMvTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX05VQlVTKVxcdFxcdCs9IG51YnVzL1xcbi0tXFxuZHJpdmVycy9hY2NlbC9oYWJhbmFsYWJzL0tjb25maWc9Nj1jb25maWcgRFJNX0FDQ0VMX0hBQkFOQUxBQlNcXG4tLVxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTEyLVxcdHNlbGVjdCBIV01PTlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnOjEzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvYWNjZWwvaGFiYW5hbGFicy9LY29uZmlnLTE0LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQ9Y29uZmlnIFNZTkNfRklMRVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNi1cXHRkZWZhdWx0IG5cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9MzM9Y29uZmlnIFVETUFCVUZcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTM1LVxcdGRlZmF1bHQgblxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy0zNy1cXHRkZXBlbmRzIG9uIE1FTUZEX0NSRUFURSB8fCBDT01QSUxFX1RFU1RcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnPTQzPWNvbmZpZyBETUFCVUZfREVCVUdcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy00NC1cXHRib29sIFxcXCJETUEtQlVGIGRlYnVnIGNoZWNrc1xcXCJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo0NTpcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWctNDYtXFx0ZGVmYXVsdCB5IGlmIERFQlVHXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZz01Mj1jb25maWcgRE1BQlVGX0tVTklUX1RFU1RcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnLTU0LVxcdGRlcGVuZHMgb24gS1VOSVRcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo1NTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy01Ni1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL0tjb25maWc9NjA9bWVudWNvbmZpZyBETUFCVUZfSEVBUFNcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02MS1cXHRib29sIFxcXCJETUEtQlVGIFVzZXJsYW5kIE1lbW9yeSBIZWFwc1xcXCJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2RtYS1idWYvS2NvbmZpZy02My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz04PW1lbnVjb25maWcgRFJNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0xMy1cXHRzZWxlY3QgSTJDXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MTQ6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMTUtXFx0c2VsZWN0IFNZTkNfRklMRVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnPTI9Y29uZmlnIERSTV9WSVJUSU9fR1BVXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWctOC1cXHRzZWxlY3QgRFJNX0dFTV9TSE1FTV9IRUxQRVJcXG5kcml2ZXJzL2dwdS9kcm0vdmlydGlvL0tjb25maWc6OTpcXHRzZWxlY3QgVklSVElPX0RNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9ncHUvZHJtL3ZpcnRpby9LY29uZmlnLTEwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9LY29uZmlnPTY9Y29uZmlnIFRFR1JBX0hPU1QxWFxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWctOC1cXHRkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9ncHUvaG9zdDF4L0tjb25maWc6OTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2dwdS9ob3N0MXgvS2NvbmZpZy0xMC1cXHRzZWxlY3QgVEVHUkFfSE9TVDFYX0NPTlRFWFRfQlVTXFxuLS1cXG5kcml2ZXJzL2lpby9LY29uZmlnPTE1PWNvbmZpZyBJSU9fQlVGRkVSXFxuZHJpdmVycy9paW8vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgYnVmZmVyIHN1cHBvcnQgd2l0aGluIElJT1xcXCJcXG5kcml2ZXJzL2lpby9LY29uZmlnOjE3OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaWlvL0tjb25maWctMTgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9Mj1tZW51Y29uZmlnIElORklOSUJBTkRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiAhQUxQSEFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTktXFx0c2VsZWN0IElSUV9QT0xMXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz00ND1jb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDctXFx0ZGVwZW5kcyBvbiBNTVVcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0ODpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnPTUxPWNvbmZpZyBJT01NVUZEX1RFU1RcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnLTU2LVxcdGRlcGVuZHMgb24gSU9NTVVfUFRfQU1EVjE9eSB8fCBJT01NVUZEPUlPTU1VX1BUX0FNRFYxXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWc6NTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL0tjb25maWctNTgtXFx0c2VsZWN0IElPTU1VRkRfRFJJVkVSXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmM9NDgyPWludCBpb3B0X21hcF9maWxlX3BhZ2VzKHN0cnVjdCBpb21tdWZkX2N0eCAqaWN0eCwgc3RydWN0IGlvX3BhZ2V0YWJsZSAqaW9wdCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb19wYWdldGFibGUuYy00OTctXFx0c3RhcnRfYnl0ZSA9IHN0YXJ0IC0gQUxJR05fRE9XTihzdGFydCwgUEFHRV9TSVpFKTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmM6NDk4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5jLTQ5OS1cXHRcXHRkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmg9MjUxPXN0YXRpYyBpbmxpbmUgYm9vbCBpb3B0X2lzX2RtYWJ1ZihzdHJ1Y3QgaW9wdF9wYWdlcyAqcGFnZXMpXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5oLTI1Mi17XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvX3BhZ2V0YWJsZS5oOjI1MzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9fcGFnZXRhYmxlLmgtMjU0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jPTE1Mjc9c3RydWN0IGlvcHRfcGFnZXMgKmlvcHRfYWxsb2NfZG1hYnVmX3BhZ2VzKHN0cnVjdCBpb21tdWZkX2N0eCAqaWN0eCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9wYWdlcy5jLTE1MzYtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3BhZ2VzLmM6MTUzNzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvcGFnZXMuYy0xNTM4LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnPTM9Y29uZmlnIFZJREVPQlVGMl9DT1JFXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6NDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy01LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZz0xMz1jb25maWcgVklERU9CVUYyX0RNQV9DT05USUdcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTE2LVxcdHNlbGVjdCBWSURFT0JVRjJfTUVNT1BTXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc6MTc6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWctMTgtXFxuZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL0tjb25maWc9MTk9Y29uZmlnIFZJREVPQlVGMl9WTUFMTE9DXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvS2NvbmZpZy0yMi1cXHRzZWxlY3QgVklERU9CVUYyX01FTU9QU1xcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnOjIzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi9LY29uZmlnLTI0LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc9MT1jb25maWcgVklERU9fVEVHUkFfVkRFXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy02LVxcdGRlcGVuZHMgb24gVklERU9fREVWXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9udmlkaWEvdGVncmEtdmRlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL252aWRpYS90ZWdyYS12ZGUvS2NvbmZpZy04LVxcdHNlbGVjdCBJT01NVV9JT1ZBXFxuLS1cXG5kcml2ZXJzL21pc2MvS2NvbmZpZz0yNjY9Y29uZmlnIFFDT01fRkFTVFJQQ1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMjY5LVxcdGRlcGVuZHMgb24gUlBNU0dcXG5kcml2ZXJzL21pc2MvS2NvbmZpZzoyNzA6XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9taXNjL0tjb25maWctMjcxLVxcdHNlbGVjdCBRQ09NX1NDTVxcbi0tXFxuZHJpdmVycy90ZWUvS2NvbmZpZz0zPW1lbnVjb25maWcgVEVFXFxuLS1cXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbmRyaXZlcnMvdGVlL0tjb25maWc6NzpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL3RlZS9LY29uZmlnLTgtXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0xOTI9Y29uZmlnIFVTQl9GX0ZTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTkzOlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE5NC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTU4PWNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTk6XFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNjAtXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnPTE2Mz1jb25maWcgVklSVElPX01NSU9fQ01ETElORV9ERVZJQ0VTXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjE3NDpjb25maWcgVklSVElPX0RNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL3ZpcnRpby9LY29uZmlnOjE3NjpcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy92aXJ0aW8vS2NvbmZpZy0xNzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1ZJUlRJT19NRU0pICs9IHZpcnRpb19tZW0ub1xcbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19WSVJUSU9fRE1BX1NIQVJFRF9CVUZGRVIpICs9IHZpcnRpb19kbWFfYnVmLm9cXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfVklSVElPX0RFQlVHKSArPSB2aXJ0aW9fZGVidWcub1xcbi0tXFxuZHJpdmVycy94ZW4vS2NvbmZpZz0xNDU9Y29uZmlnIFhFTl9HTlRERVZfRE1BQlVGXFxuLS1cXG5kcml2ZXJzL3hlbi9LY29uZmlnLTE0Ny1cXHRkZXBlbmRzIG9uIFhFTl9HTlRERVYgXFx1MDAyNlxcdTAwMjYgWEVOX0dSQU5UX0RNQV9BTExPQ1xcbmRyaXZlcnMveGVuL0tjb25maWc6MTQ4OlxcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxcbmRyaXZlcnMveGVuL0tjb25maWctMTQ5LVxcdGhlbHBcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ja2V0Lmg9MTk3PXN0cnVjdCB1Y3JlZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0My1cXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oOjM0NDojZGVmaW5lIE1TR19TT0NLX0RFVk1FTSAweDIwMDAwMDBcXHQvKiBSZWNlaXZlIGRldm1lbSBza2JzIGFzIGNtc2cgKi9cXG5pbmNsdWRlL2xpbnV4L3NvY2tldC5oLTM0NS0jZGVmaW5lIE1TR19aRVJPQ09QWVxcdDB4NDAwMDAwMFxcdC8qIFVzZSB1c2VyIGRhdGEgaW4ga2VybmVsIHBhdGggKi9cXG4tLVxcbmluY2x1ZGUvbmV0L25ldG1lbS5oPTM2MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0bWVtX2dldF9kbWFfYWRkcihuZXRtZW1fcmVmIG5ldG1lbSlcXG4tLVxcbmluY2x1ZGUvbmV0L25ldG1lbS5oLTM2NS1cXG5pbmNsdWRlL25ldC9uZXRtZW0uaDozNjY6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxuaW5jbHVkZS9uZXQvbmV0bWVtLmgtMzY3LXN0YXRpYyBpbmxpbmUgYm9vbCBuZXRfaXNfZGV2bWVtX2lvdihjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0xMzA9c3RhdGljIHZvaWQgaW9fdW5tYXBfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbmlvX3VyaW5nL3pjcnguYy0xMzEte1xcbmlvX3VyaW5nL3pjcnguYzoxMzI6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuaW9fdXJpbmcvemNyeC5jLTEzMy1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTQzPXN0YXRpYyB2b2lkIGlvX3JlbGVhc2VfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbmlvX3VyaW5nL3pjcnguYy0xNDQte1xcbmlvX3VyaW5nL3pjcnguYzoxNDU6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuaW9fdXJpbmcvemNyeC5jLTE0Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTUyPXN0YXRpYyBpbnQgaW9faW1wb3J0X2RtYWJ1ZihzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0xNjYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuaW9fdXJpbmcvemNyeC5jOjE2NzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG5pb191cmluZy96Y3J4LmMtMTY4LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT02Nj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGttZW1fY2FjaGVfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZTo2NzppZmVxICgkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlLTY4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZG1hYnVmX2l0ZXIub1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDk0Mj1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyX2R5bnB0ciwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5NDMtI2VuZGlmXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDk0NDojaWZkZWYgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDk0NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfZG1hYnVmX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5uZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcbm5ldC9LY29uZmlnLTcxLVxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbm5ldC9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gRE1BX1NIQVJFRF9CVUZGRVJcXG5uZXQvS2NvbmZpZy03My1cXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX05FVF9URVNUKSArPSBuZXRfdGVzdC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICs9IGRldm1lbS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtNTMtb2JqLSQoQ09ORklHX0RFQlVHX05FVCkgKz0gbG9ja19kZWJ1Zy5vXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaC05LSAqL1xcbm5ldC9jb3JlL2Rldm1lbS5oOjEwOiNpZm5kZWYgX05FVF9ERVZNRU1fSFxcbm5ldC9jb3JlL2Rldm1lbS5oOjExOiNkZWZpbmUgX05FVF9ERVZNRU1fSFxcbm5ldC9jb3JlL2Rldm1lbS5oLTEyLVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTg9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmgtNzgtXFxubmV0L2NvcmUvZGV2bWVtLmg6Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxubmV0L2NvcmUvZGV2bWVtLmgtODAtLyogT3duZXIgb2YgdGhlIGRtYS1idWYgY2h1bmtzIGluc2VydGVkIGludG8gdGhlIGdlbiBwb29sLiBFYWNoIHNjYXR0ZXJsaXN0XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0yNDI9bmV0X2Rldm1lbV9pb3ZfYmluZGluZyhjb25zdCBzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oLTI0Ny1cXG5uZXQvY29yZS9kZXZtZW0uaDoyNDg6I2VuZGlmIC8qIF9ORVRfREVWTUVNX0ggKi9cXG4tLVxcbm5ldC9jb3JlL21wX2RtYWJ1Zl9kZXZtZW0uaC0xMi1cXG5uZXQvY29yZS9tcF9kbWFidWZfZGV2bWVtLmg6MTM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxubmV0L2NvcmUvbXBfZG1hYnVmX2Rldm1lbS5oLTE0LWludCBtcF9kbWFidWZfZGV2bWVtX2luaXQoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCk7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yNjg1PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjg3OC1cXHRcXHRcXHR9IGVsc2Uge1xcbm5ldC9pcHY0L3RjcC5jOjI4Nzk6XFx0XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfU09DS19ERVZNRU0pKSB7XFxubmV0L2lwdjQvdGNwLmMtMjg4MC1cXHRcXHRcXHRcXHRcXHQvKiBkbWFidWYgc2ticyBjYW4gb25seSBiZSByZWNlaXZlZFxcbm5ldC9pcHY0L3RjcC5jOjI4ODE6XFx0XFx0XFx0XFx0XFx0ICogd2l0aCB0aGUgTVNHX1NPQ0tfREVWTUVNIGZsYWcuXFxubmV0L2lwdjQvdGNwLmMtMjg4Mi1cXHRcXHRcXHRcXHRcXHQgKi9cXG4tLVxcbnJ1c3QvaGVscGVycy9oZWxwZXJzLmMtNTktI2luY2x1ZGUgXFxcImRtYS5jXFxcIlxcbnJ1c3QvaGVscGVycy9oZWxwZXJzLmM6NjA6I2lmZGVmIENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUlxcbnJ1c3QvaGVscGVycy9oZWxwZXJzLmMtNjEtI2luY2x1ZGUgXFxcImRtYS1yZXN2LmNcXFwiXFxuLS1cXG5zYW1wbGVzL0tjb25maWc9MjMwPWNvbmZpZyBTQU1QTEVfVkZJT19NREVWX01CT0NIU1xcbi0tXFxuc2FtcGxlcy9LY29uZmlnLTIzMy1cXHRzZWxlY3QgVkZJT19NREVWXFxuc2FtcGxlcy9LY29uZmlnOjIzNDpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5zYW1wbGVzL0tjb25maWctMjM1LVxcdGhlbHBcXG4tLVxcbnNvdW5kL3NvYy9mc2wvS2NvbmZpZz02PWNvbmZpZyBTTkRfU09DX0ZTTF9BU1JDXFxuLS1cXG5zb3VuZC9zb2MvZnNsL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIEhBU19ETUFcXG5zb3VuZC9zb2MvZnNsL0tjb25maWc6OTpcXHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcXG5zb3VuZC9zb2MvZnNsL0tjb25maWctMTAtXFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oPTE5Nz1zdHJ1Y3QgdWNyZWQge1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zNDMtXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaDozNDQ6I2RlZmluZSBNU0dfU09DS19ERVZNRU0gMHgyMDAwMDAwXFx0LyogUmVjZWl2ZSBkZXZtZW0gc2ticyBhcyBjbXNnICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS9saW51eC9zb2NrZXQuaC0zNDUtI2RlZmluZSBNU0dfWkVST0NPUFlcXHQweDQwMDAwMDBcXHQvKiBVc2UgdXNlciBkYXRhIGluIGtlcm5lbCBwYXRoICovXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYy0xNS0jZW5kaWZcXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9tc2dfZmxhZ3MuYzoxNjojaWZuZGVmIE1TR19TT0NLX0RFVk1FTVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L21zZ19mbGFncy5jOjE3OiNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNXFx0XFx0IDB4MjAwMDAwMFxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L21zZ19mbGFncy5jLTE4LSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvY29uZmlnPTE3PUNPTkZJR19ORVRfQ0xTX0JQRj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvY29uZmlnOjE4OkNPTkZJR19ORVRfREVWTUVNPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9jb25maWctMTktQ09ORklHX05FVF9JUEdSRT15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTg1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6ODY6I2lmbmRlZiBNU0dfU09DS19ERVZNRU1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jOjg3OiNkZWZpbmUgTVNHX1NPQ0tfREVWTUVNIDB4MjAwMDAwMFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmMtODgtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05NjEtXFx0XFx0bXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGN0cmxfZGF0YSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzo5NjI6XFx0XFx0cmV0ID0gcmVjdm1zZyhjbGllbnRfZmQsIFxcdTAwMjZtc2csIE1TR19TT0NLX0RFVk1FTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy05NjMtXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJyZWN2bXNnIHJldD0lbGRcXFxcblxcXCIsIHJldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjA5LjY3MDkwOTc1MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQyOTQ2ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBEZXZtZW0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGRldm1lbSBzaXR1YXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY29uZmlndXJhdGlvbiBhbmQgb3ZlcmFsbCByZWFjaGFiaWxpdHkgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGFjdGl2ZWx5IGJlaW5nIHVzZWQ/IENhbiBpdCBiZSB0cmlnZ2VyZWQgaW4gYSB3YXkgdGhhdCBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBwcm9ibGVtLCB3aGV0aGVyIHRocm91Z2ggZGlyZWN0IG1lbW9yeSBhY2Nlc3Mgb3IgdGhyb3VnaCBhIHJlbGF0ZWQgbWVjaGFuaXNtIGxpa2UgYGRtYWJ1ZmAgb3ZlciBUQ1A/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLlxuXG5TbywgSSdsbCBpbW1lZGlhdGVseSBzdGFydCBzY2FubmluZyB0aGUgcmVsZXZhbnQga2VybmVsIGhlYWRlcnMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBnb2luZyB0byBodW50IGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBORVRfREVWTUVNYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGRldm1lbS1yZWxhdGVkIHNrYnVmZnMsIGlmIHRoZXkgZXZlbiBleGlzdCBpbiB0aGlzIGNvbnRleHQsIGFyZSBnZW5lcmF0ZWQgYW5kIG1hbmFnZWQuIEkgbmVlZCB0byBncmFzcCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyBjb250cm9sbGluZyBkZXZtZW0ncyBiZWhhdmlvciDigJMgaG93IGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGlzIG1hcHBlZCBhbmQgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBhYnNvbHV0ZWx5IGtleSB0byBmaWd1cmluZyBvdXQgaG93LCBvciBpZiwgaXQncyBpbXBhY3RpbmcgdGhpbmdzLiBJdCdzIGFsbCBhYm91dCBmb2xsb3dpbmcgdGhlIGRhdGEgZmxvdyBhbmQgZmlndXJpbmcgb3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgcG9pbnRzIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ1OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjEyLjUxMzg1OTI2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MTQ2MjE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT19ERVZNRU1fXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTE5OD1BcHBsaWNhdGlvbnMgbWF5IHJlY2VpdmUgMiBjbXNnczpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIwNy1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bWVtLnJzdDoyMDg6QXBwbGljYXRpb25zIG1heSByZWNlaXZlIG5vIFNPX0RFVk1FTV8qIGNtc2dzLiBUaGF0IGluZGljYXRlcyBub24tZGV2bWVtLFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0LTIwOS1yZWd1bGFyIFRDUCBkYXRhIHRoYXQgbGFuZGVkIG9uIGFuIFJYIHF1ZXVlIG5vdCBib3VuZCB0byBhIGRtYWJ1Zi5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0PTIxNj1wcm9jZXNzZXMgdGhlIGZyYWcuIFRoZSB1c2VyIG11c3QgcmV0dXJuIHRoZSBmcmFnIHRvIHRoZSBrZXJuZWwgdmlhXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3Q6MjE3OlNPX0RFVk1FTV9ET05UTkVFRDo6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjE4LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZtZW0ucnN0OjIxOTpcXHRyZXQgPSBzZXRzb2Nrb3B0KGNsaWVudF9mZCwgU09MX1NPQ0tFVCwgU09fREVWTUVNX0RPTlRORUVELCBcXHUwMDI2dG9rZW4sXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Rldm1lbS5yc3QtMjIwLVxcdFxcdFxcdCBzaXplb2YodG9rZW4pKTtcXG4tLVxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDItXFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MzojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQ3OFxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDQ6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUlxcdFNPX0RFVk1FTV9MSU5FQVJcXG5hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQ1OiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0NjojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDc6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbmFyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNDgtXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNTMtXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU0OiNkZWZpbmUgU09fREVWTUVNX0xJTkVBUlxcdDc4XFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU1OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVJcXHRTT19ERVZNRU1fTElORUFSXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU2OiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU3OiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcXHRTT19ERVZNRU1fRE1BQlVGXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTU4OiNkZWZpbmUgU09fREVWTUVNX0RPTlRORUVEXFx0ODBcXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xNTktXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTEzOC1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzOTojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQweDQwNEVcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjE0MDojZGVmaW5lIFNDTV9ERVZNRU1fTElORUFSXFx0U09fREVWTUVNX0xJTkVBUlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQxOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDB4NDA0RlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTQyOiNkZWZpbmUgU0NNX0RFVk1FTV9ETUFCVUZcXHRTT19ERVZNRU1fRE1BQlVGXFxuYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDM6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQweDQwNTBcXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0NC1cXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaC0xMzUtXFxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oOjEzNjojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVIgICAgICAgICAweDAwNTdcXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTM3OiNkZWZpbmUgU0NNX0RFVk1FTV9MSU5FQVIgICAgICAgIFNPX0RFVk1FTV9MSU5FQVJcXG5hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vc29ja2V0Lmg6MTM4OiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRiAgICAgICAgIDB4MDA1OFxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0RNQUJVRiAgICAgICAgU09fREVWTUVNX0RNQUJVRlxcbmFyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS9zb2NrZXQuaDoxNDA6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRUQgICAgICAgMHgwMDU5XFxuYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3NvY2tldC5oLTE0MS1cXG4tLVxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xMzctXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQ3OFxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUlxcdFNPX0RFVk1FTV9MSU5FQVJcXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQwOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDI6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDMtXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MTAzMD1zdGF0aWMgaW50IHNvY2tfcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMTA3Ni1cXG5uZXQvY29yZS9zb2NrLmM6MTA3NzovKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgdG9rZW5zIGFuZCBmcmFncyB0aGF0IHRoZSB1c2VyIGNhbiBTT19ERVZNRU1fRE9OVE5FRURcXG5uZXQvY29yZS9zb2NrLmMtMTA3OC0gKiBpbiAxIHN5c2NhbGwuIFRoZSBsaW1pdCBleGlzdHMgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhlIGtlcm5lbFxcbi0tXFxubmV0L2NvcmUvc29jay5jPTExOTQ9aW50IHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTEyOTctI2lmZGVmIENPTkZJR19QQUdFX1BPT0xcXG5uZXQvY29yZS9zb2NrLmM6MTI5ODpcXHRjYXNlIFNPX0RFVk1FTV9ET05UTkVFRDpcXG5uZXQvY29yZS9zb2NrLmMtMTI5OS1cXHRcXHRyZXR1cm4gc29ja19kZXZtZW1fZG9udG5lZWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTI1MjY9c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjU2OC1cXHRcXHRcXHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcXG5uZXQvaXB2NC90Y3AuYzoyNTY5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBTT19ERVZNRU1fTElORUFSLFxcbm5ldC9pcHY0L3RjcC5jLTI1NzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNjM0LVxcdFxcdFxcdFxcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxcbm5ldC9pcHY0L3RjcC5jOjI2MzU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFNPX0RFVk1FTV9ETUFCVUYsXFxubmV0L2lwdjQvdGNwLmMtMjYzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xMzctXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjEzODojZGVmaW5lIFNPX0RFVk1FTV9MSU5FQVJcXHQ3OFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxMzk6I2RlZmluZSBTQ01fREVWTUVNX0xJTkVBUlxcdFNPX0RFVk1FTV9MSU5FQVJcXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0Lmg6MTQwOiNkZWZpbmUgU09fREVWTUVNX0RNQUJVRlxcdDc5XFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oOjE0MTojZGVmaW5lIFNDTV9ERVZNRU1fRE1BQlVGXFx0U09fREVWTUVNX0RNQUJVRlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaDoxNDI6I2RlZmluZSBTT19ERVZNRU1fRE9OVE5FRURcXHQ4MFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaC0xNDMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jPTg0Nz1zdGF0aWMgaW50IGRvX3NlcnZlcihzdHJ1Y3QgbWVtb3J5X2J1ZmZlciAqbWVtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQyLVxcdFxcdFxcdHJldCA9IHNldHNvY2tvcHQoY2xpZW50X2ZkLCBTT0xfU09DS0VULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25jZGV2bWVtLmM6MTA0MzpcXHRcXHRcXHRcXHRcXHQgU09fREVWTUVNX0RPTlRORUVELCBcXHUwMDI2dG9rZW4sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQ0LVxcdFxcdFxcdFxcdFxcdCBzaXplb2YodG9rZW4pKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9uY2Rldm1lbS5jLTEwNDUtXFx0XFx0XFx0aWYgKHJldCAhPSAxKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYzoxMDQ2OlxcdFxcdFxcdFxcdHByX2VycihcXFwiU09fREVWTUVNX0RPTlRORUVEIG5vdCBlbm91Z2ggdG9rZW5zXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmNkZXZtZW0uYy0xMDQ3LVxcdFxcdFxcdFxcdGdvdG8gZXJyX2Nsb3NlX2NsaWVudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MTQuMTk1MzI4ODY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTE4NjU0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgbmV0X2Rldm1lbWAgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IG1hcHBpbmcgdGhlIG92ZXJhbGwgbGFuZHNjYXBlIOKAkyBpcyBpdCBwcmltYXJpbHkgZHJpdmVuIGJ5IE5ldGxpbmsgY29tbWFuZHMsIGFyZSB0aGVyZSBrZXkgc29ja2V0IG9wdGlvbnMgaW52b2x2ZWQsIG9yIGRvZXMgaXQgbGV2ZXJhZ2Ugc29tZXRoaW5nIGxpa2UgYHVkbWFidWZgIGZvciBkaXJlY3QgbWVtb3J5IGFjY2Vzcz8gSG93IGlzIHRoZSB3aG9sZSBgbmV0ZGV2IGRtYWJ1ZmAgYmluZGluZyBoYW5kbGVkIGluIHRoZSBuZXR3b3JrIHN0YWNrP1xuXG5UbyBnZXQgYSBjb25jcmV0ZSBzdGFydGluZyBwb2ludCwgSSdsbCBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGBkZXZtZW0uY2Agd2l0aGluIHRoZSBgbmV0L2NvcmUvYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5ldHdvcmsgZGV2aWNlcy4gSXQgd2lsbCBsaWtlbHkgaG9sZCB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIGludGVyZmFjZSwgYW5kIHRoZW4gSSBjYW4gdHJhY2UgZnJvbSB0aGVyZSB0byB0aGUgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzLiBJdCBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzoxNy44ODcxOTc0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0OTIzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2Rldm1lbV9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2bWVtLmM9MTI2PXZvaWQgbmV0X2Rldm1lbV91bmJpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMTU1LVxcbm5ldC9jb3JlL2Rldm1lbS5jOjE1NjppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uYy0xNTctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmM9MTg4PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uYzoxODk6bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbm5ldC9jb3JlL2Rldm1lbS5jLTE5MC1cXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTk0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDo5NTpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtOTYtXFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xMDI9dm9pZCBuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpO1xcbm5ldC9jb3JlL2Rldm1lbS5oOjEwMzppbnQgbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcnhxX2lkeCxcXG5uZXQvY29yZS9kZXZtZW0uaC0xMDQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE3ODpuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxubmV0L2NvcmUvZGV2bWVtLmgtMTc5LVxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmg9MTk5PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L2NvcmUvZGV2bWVtLmg6MjAwOm5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxubmV0L2NvcmUvZGV2bWVtLmgtMjAxLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwOTQtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzoxMDk1OlxcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKG5ldGRldiwgTlVMTCwgZG1hX2RldiwgRE1BX0ZST01fREVWSUNFLFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA5Ni1cXHRcXHRcXHRcXHRcXHQgZG1hYnVmX2ZkLCBuaW92X3NoaWZ0LCBwcml2LFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTAzLVxcdGZvcl9lYWNoX3NldF9iaXQocnhxX2lkeCwgcnhxX2JpdG1hcCwgbmV0ZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMpIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjExMDQ6XFx0XFx0ZXJyID0gbmV0X2Rldm1lbV9iaW5kX2RtYWJ1Zl90b19xdWV1ZShuZXRkZXYsIHJ4cV9pZHgsIGJpbmRpbmcsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMTA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTExNzE9aW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTIzNi1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEyMzc6XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fYmluZF9kbWFidWYoYmluZF9kZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMjM4LVxcdFxcdFxcdFxcdFxcdCBiaW5kX2RldiAhPSBuZXRkZXYgPyBuZXRkZXYgOiBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzoxNy45NjM2OTQ3MzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgwMjcxMTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbiBgbmV0L2lwdjQvdGNwLmNgIGlzIG1vZGlmeWluZyBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBhbmQgYWRkaW5nIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGNoYW5naW5nIGFuZCBpZiBpdCBtZXJpdHMgZnV6emluZy5cblxuVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIGBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgLSBpYCB3aXRoIHRoZSBvdXRwdXQgZnJvbSB0aGlzIG5ldyBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCBmdW5jdGlvbiBhcyB0aGUgcmVmaWxsIHNpemUgZm9yIHRoZSBYQSBwb29sLiAgU28sIHdlIGFyZSBnb2luZyBmcm9tIGEgc3RhdGljIGNhbGN1bGF0aW9uIHRvIGEgZHluYW1pYyBjYWxjdWxhdGlvbi4gIE1ha2VzIHNlbnNlIGZvciBtb3JlIHJvYnVzdCBjb250cm9sLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBUQ1AgYW5kIGRtYWJ1ZiAoemVyby1jb3B5IHJlY2VpdmUpLiBTeXprYWxsZXIgY2FuLCBhbmQgKmRvZXMqLCB0YXJnZXQgc29ja2V0cywgbmV0bGluaywgYHJlY3Ztc2coLi4uLCBNU0dfU09DS19ERVZNRU0pYCwgYW5kIFRDUCBpbiBnZW5lcmFsLiBUaGUgZ3VpZGVsaW5lIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgXCJjb3JlIG5ldHdvcmtpbmdcIiBtb2RpZmljYXRpb25zIGFyZSBhIHBvc2l0aXZlIHNpZ25hbC4gQmluZ28gLSB0aGlzIGlzIGxpa2VseSB3b3J0aCBmdXp6aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBcIkZvY3VzU3ltYm9sc1wiLiBUaGUgY2VudHJhbCBmb2N1cyBpcyBvbiB3aGF0IGlzIGFjdHVhbGx5IGFkZGVkIG9yIGFsdGVyZWQgaW4gdGhlIHBhdGNoLiBJJ20gbG9va2luZyBhdDpcbiogICBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYDogVGhpcyBpcyBuZXc7IGRlZmluaXRlbHkgb24gdGhlIGxpc3QuXG4qICAgYHRjcF9yZWN2bXNnX2RtYWJ1ZmA6IFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQ7IGl0IG11c3QgYmUgaW5jbHVkZWQuXG4qICAgUG90ZW50aWFsbHkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcC5jYCwgbGlrZSBgdGNwX3hhX3Bvb2xfcmVmaWxsYC5cblxuTGV0J3Mgbm90IGp1bXAgdG8gbWFraW5nIHRoaXMgdG9vIGJyb2FkIGJ5IGluY2x1ZGluZyB0aGUgdWJpcXVpdG91cyBgdGNwX3JlY3Ztc2dgIGFzIHRoYXQgd2lsbCBkZXRyYWN0IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLiBJbnN0ZWFkLCBsZXQncyBpZGVudGlmeSBmZWF0dXJlcyBzcGVjaWZpYyB0byBkbWFidWYgYW5kIHRoZSB4YSBwb29sLlxuXG5TbywgbGV0J3Mga2VlcCB0aGUgZm9jdXMgb24gYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBhbmQgcG9zc2libHkgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQncyBtYWtlIHN1cmUgdG8ga2VlcCB0aGlzIHRhcmdldGVkLlxuXG5JJ20gcHJldHR5IGNvbmZpZGVudCBpbiB0aG9zZSBjaG9pY2VzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC90Y3AuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBJIG1pZ2h0IGhhdmUgbWlzc2VkLCBidXQgSSBoYXZlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzoyNS43NjY0MDkzOTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NTA6XFx0XFx0XFx0XFx0ICAgICAoX19mb3JjZSB2b2lkICopcC1cXHUwMDNlbmV0bWVtc1tpXSwgR0ZQX0tFUk5FTCk7XFxuMjQ1MTpcXHRcXHQvKiBSb2xsYmFjayB3aGF0IGhhcyBiZWVuIHByZS1hbGxvY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuICovXFxuMjQ1MjpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIHAtXFx1MDAzZW1heDsgaSsrKVxcbjI0NTM6XFx0XFx0XFx0X194YV9lcmFzZShcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXFx1MDAzZXRva2Vuc1tpXSk7XFxuMjQ1NDpcXHRcXG4yNDU1OlxcdFxcdHAtXFx1MDAzZW1heCA9IDA7XFxuMjQ1NjpcXHRcXHRwLVxcdTAwM2VpZHggPSAwO1xcbjI0NTc6XFx0fVxcbjI0NTg6XFx0XFxuMjQ1OTpcXHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXFxuMjQ2MDpcXHR7XFxuMjQ2MTpcXHRcXHRpZiAoIXAtXFx1MDAzZW1heClcXG4yNDYyOlxcdFxcdFxcdHJldHVybjtcXG4yNDYzOlxcdFxcbjI0NjQ6XFx0XFx0eGFfbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0NjU6XFx0XFxuMjQ2NjpcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcXG4yNDY3OlxcdFxcbjI0Njg6XFx0XFx0eGFfdW5sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncyk7XFxuMjQ2OTpcXHR9XFxuMjQ3MDpcXHRcXG4yNDcxOlxcdHN0YXRpYyBpbnQgdGNwX3hhX3Bvb2xfcmVmaWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwLFxcbjI0NzI6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG1heF9mcmFncylcXG4yNDczOlxcdHtcXG4yNDc0OlxcdFxcdGludCBlcnIsIGs7XFxuMjQ3NTpcXHRcXG4yNDc2OlxcdFxcdGlmIChwLVxcdTAwM2VpZHggXFx1MDAzYyBwLVxcdTAwM2VtYXgpXFxuMjQ3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNDc4OlxcdFxcbjI0Nzk6XFx0XFx0eGFfbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0ODA6XFx0XFxuMjQ4MTpcXHRcXHR0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHNrLCBwKTtcXG4yNDgyOlxcdFxcbjI0ODM6XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIG1heF9mcmFnczsgaysrKSB7XFxuMjQ4NDpcXHRcXHRcXHRlcnIgPSBfX3hhX2FsbG9jKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncywgXFx1MDAyNnAtXFx1MDAzZXRva2Vuc1trXSxcXG4yNDg1OlxcdFxcdFxcdFxcdFxcdCBYQV9aRVJPX0VOVFJZLCB4YV9saW1pdF8zMWIsIEdGUF9LRVJORUwpO1xcbjI0ODY6XFx0XFx0XFx0aWYgKGVycilcXG4yNDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0ODg6XFx0XFx0fVxcbjI0ODk6XFx0XFxuMjQ5MDpcXHRcXHR4YV91bmxvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDkxOlxcdFxcbjI0OTI6XFx0XFx0cC1cXHUwMDNlbWF4ID0gaztcXG4yNDkzOlxcdFxcdHAtXFx1MDAzZWlkeCA9IDA7XFxuMjQ5NDpcXHRcXHRyZXR1cm4gayA/IDAgOiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjI1Ljc2NzIzMTYzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTA0MzQ0NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1AgRE1BIEJ1ZmZlciBSZWNlcHRpb24gQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlcGVuZGVuY2llcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYC4gVGhlIGZpcnN0IHRoaW5nIEknbSBjaGVja2luZyBpcyB3aGV0aGVyIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgdGhlc2UsIG9yIGlmIHRoZXkncmUgaW5kZXBlbmRlbnQgZnVuY3Rpb25zLiBJZiBpbmxpbmluZyBpcyBwb3NzaWJsZSwgdGhhdCBhZmZlY3RzIGhvdyBJIHRoaW5rIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy5cblxuRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgdGNwX3JlY3Ztc2dfZG1hYnVmYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJJ2xsIHZlcmlmeSBpZiBpdCdzIHNvbGVseSBjYWxsZWQgd2l0aGluIGB0Y3BfcmVjdm1zZ19sb2NrZWRgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSwgZ2l2ZW4gdGhlIGNhbGwgaGVyZTogYGVyciA9IHRjcF9yZWN2bXNnX2RtYWJ1Zihzaywgc2tiLCBvZmZzZXQsIG1zZywgdXNlZCk7YCBBbmQsIGFzIGV4cGVjdGVkLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCB0aGVuIGNhbGxzIHRob3NlIHBvb2wgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGJlZm9yZSAtIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3NgIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYC5cblxuTm93LCBJJ20gZ29pbmcgdG8gY29uc3VsdCB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMuIEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cyBmb3IgdGhpcyBzdWJzeXN0ZW0uIFRoZSBsaXN0ZWQgZnVuY3Rpb25zLCBgdGNwX3JlY3Ztc2dfZG1hYnVmYCwgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGFuZCBgdGNwX3hhX3Bvb2xfcmVmaWxsYCBsb29rIGxpa2UgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHNvIHRoYXQgY2hlY2tzIG91dC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGxvb2sgYXQgRW5hYmxlQ29uZmlncy4gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhpcyBjb2RlIHRvIGV2ZW4gYmUgY29tcGlsZWQgYW5kIGV4ZWN1dGVkPyBJJ2xsIGNoZWNrIGBuZXQvaXB2NC90Y3AuY2AgYW5kIEtjb25maWcgdG8gZmlndXJlIHRoYXQgb3V0LiBGaXJzdCwgaXMgYG5ldC9pcHY0L3RjcC5jYCBjb21waWxlZCB3aXRoIGBDT05GSUdfSU5FVGA/IEFuZCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gcnVsZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjI5LjY3MTU3OTMxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5MjgzMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU1OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEwOlxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTExLVxcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTItXFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEzOlxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICs9IHRjcF9jdWJpYy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RDUF9DT05HX0RDVENQKSArPSB0Y3BfZGN0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTUyLW9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgKz0gdGNwX3dlc3R3b29kLm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTU0PW9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgKz0gdGNwX2h5YmxhLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgKz0gdGNwX2h0Y3Aub1xcbm5ldC9pcHY0L01ha2VmaWxlLTU2LW9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgKz0gdGNwX3ZlZ2FzLm9cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTI3MT12b2lkIGluZXRfY3NrX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEyODctXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMjg4OlxcdHRjcF9vcnBoYW5fY291bnRfZGVjKCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjg5LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMjkzPXZvaWQgaW5ldF9jc2tfcHJlcGFyZV9mb3JfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI5Ny1cXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTI5ODpcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI5OS19XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzNjk9c3RhdGljIHZvaWQgaW5ldF9jaGlsZF9mb3JnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEzNzUtXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMzc2OlxcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzc3LVxcbi0tXFxubmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmM9NzQ1PWJvb2wgaW5ldF9laGFzaF9ub2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpvc2ssIGJvb2wgKmZvdW5kX2R1cF9zaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTc1MS1cXHR9IGVsc2Uge1xcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jOjc1MjpcXHRcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbm5ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jLTc1My1cXHRcXHRpbmV0X3NrX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG4tLVxcbm5ldC9pcHY0L3Byb2MuYz01MT1zdGF0aWMgaW50IHNvY2tzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjQvcHJvYy5jLTU1LVxcbm5ldC9pcHY0L3Byb2MuYzo1NjpcXHRvcnBoYW5zID0gdGNwX29ycGhhbl9jb3VudF9zdW0oKTtcXG5uZXQvaXB2NC9wcm9jLmMtNTctXFx0c29ja2V0cyA9IHByb3RvX3NvY2tldHNfYWxsb2NhdGVkX3N1bV9wb3NpdGl2ZShcXHUwMDI2dGNwX3Byb3QpO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQ2PXN0YXRpYyB1MzIgY29va2llX2hhc2goX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTU2LSAqIHdoZW4gc3luY29va2llcyBhcmUgaW4gZWZmZWN0IGFuZCB0Y3AgdGltZXN0YW1wcyBhcmUgZW5hYmxlZCB3ZSBlbmNvZGVcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NTc6ICogdGNwIG9wdGlvbnMgaW4gdGhlIGxvd2VyIGJpdHMgb2YgdGhlIHRpbWVzdGFtcCB2YWx1ZSB0aGF0IHdpbGwgYmVcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNTgtICogc2VudCBpbiB0aGUgc3luLWFjay5cXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIyOC0gKiB3aGVuIHN5bmNvb2tpZXMgYXJlIGluIGVmZmVjdCBhbmQgdGNwIHRpbWVzdGFtcHMgYXJlIGVuYWJsZWQgd2Ugc3RvcmVkXFxubmV0L2lwdjQvc3luY29va2llcy5jOjIyOTogKiBhZGRpdGlvbmFsIHRjcCBvcHRpb25zIGluIHRoZSB0aW1lc3RhbXAuXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzMC0gKiBUaGlzIGV4dHJhY3RzIHRoZXNlIG9wdGlvbnMgZnJvbSB0aGUgdGltZXN0YW1wIGVjaG8uXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzMS0gKlxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMzI6ICogcmV0dXJuIGZhbHNlIGlmIHdlIGRlY29kZSBhIHRjcCBvcHRpb24gdGhhdCBpcyBkaXNhYmxlZFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMzMtICogb24gdGhlIGhvc3QuXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MjM1PWJvb2wgY29va2llX3RpbWVzdGFtcF9kZWNvZGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMzY6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnRjcF9vcHQpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzNy17XFxubmV0L2lwdjQvc3luY29va2llcy5jLTIzOC1cXHQvKiBlY2hvZWQgdGltZXN0YW1wLCBsb3dlc3QgYml0cyBjb250YWluIG9wdGlvbnMgKi9cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjM5OlxcdHUzMiBvcHRpb25zID0gdGNwX29wdC1cXHUwMDNlcmN2X3RzZWNyO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNDAtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjI0MTpcXHRpZiAoIXRjcF9vcHQtXFx1MDAzZXNhd190c3RhbXApICB7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjI0MjpcXHRcXHR0Y3BfY2xlYXJfb3B0aW9ucyh0Y3Bfb3B0KTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjQzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTI0OC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjQ5OlxcdHRjcF9vcHQtXFx1MDAzZXNhY2tfb2sgPSAob3B0aW9ucyBcXHUwMDI2IFRTX09QVF9TQUNLKSA/IFRDUF9TQUNLX1NFRU4gOiAwO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTAtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjI1MTpcXHRpZiAodGNwX29wdC1cXHUwMDNlc2Fja19vayBcXHUwMDI2XFx1MDAyNiAhUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3NhY2spKVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yNTItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTI1Ni1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjU3OlxcdHRjcF9vcHQtXFx1MDAzZXdzY2FsZV9vayA9IDE7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjI1ODpcXHR0Y3Bfb3B0LVxcdTAwM2VzbmRfd3NjYWxlID0gb3B0aW9ucyBcXHUwMDI2IFRTX09QVF9XU0NBTEVfTUFTSztcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjU5LVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTMxOD1zdHJ1Y3QgcmVxdWVzdF9zb2NrICpjb29raWVfdGNwX3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxubmV0L2lwdjQvc3luY29va2llcy5jLTMxOS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozMjA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqdGNwX29wdCxcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzIxLVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgbXNzLCB1MzIgdHNvZmYpXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzQzLVxcdHJlcS1cXHUwMDNlbXNzID0gbXNzO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDQ6XFx0cmVxLVxcdTAwM2V0c19yZWNlbnQgPSB0Y3Bfb3B0LVxcdTAwM2VzYXdfdHN0YW1wID8gdGNwX29wdC1cXHUwMDNlcmN2X3RzdmFsIDogMDtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzQ1LVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDY6XFx0aXJlcS1cXHUwMDNlc25kX3dzY2FsZSA9IHRjcF9vcHQtXFx1MDAzZXNuZF93c2NhbGU7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM0NzpcXHRpcmVxLVxcdTAwM2V0c3RhbXBfb2sgPSB0Y3Bfb3B0LVxcdTAwM2VzYXdfdHN0YW1wO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNDg6XFx0aXJlcS1cXHUwMDNlc2Fja19vayA9IHRjcF9vcHQtXFx1MDAzZXNhY2tfb2s7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM0OTpcXHRpcmVxLVxcdTAwM2V3c2NhbGVfb2sgPSB0Y3Bfb3B0LVxcdTAwM2V3c2NhbGVfb2s7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM1MDpcXHRpcmVxLVxcdTAwM2VlY25fb2sgPSAhISh0Y3Bfb3B0LVxcdTAwM2VyY3ZfdHNlY3IgXFx1MDAyNiBUU19PUFRfRUNOKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzUxLVxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTM1OD1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqY29va2llX3RjcF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNjAte1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozNjE6XFx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRjcF9vcHQ7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM2Mi1cXHR1MzIgdHNvZmYgPSAwO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM3Ni1cXHQvKiBjaGVjayBmb3IgdGltZXN0YW1wIGNvb2tpZSBzdXBwb3J0ICovXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM3NzpcXHRtZW1zZXQoXFx1MDAyNnRjcF9vcHQsIDAsIHNpemVvZih0Y3Bfb3B0KSk7XFxubmV0L2lwdjQvc3luY29va2llcy5jOjM3ODpcXHR0Y3BfcGFyc2Vfb3B0aW9ucyhuZXQsIHNrYiwgXFx1MDAyNnRjcF9vcHQsIDAsIE5VTEwpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zNzktXFxubmV0L2lwdjQvc3luY29va2llcy5jOjM4MDpcXHRpZiAodGNwX29wdC5zYXdfdHN0YW1wIFxcdTAwMjZcXHUwMDI2IHRjcF9vcHQucmN2X3RzZWNyKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM4MS1cXHRcXHR1bmlvbiB0Y3Bfc2VxX2FuZF90c19vZmYgc3Q7XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMzg4LVxcdFxcdHRzb2ZmID0gc3QudHNfb2ZmO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozODk6XFx0XFx0dGNwX29wdC5yY3ZfdHNlY3IgLT0gdHNvZmY7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5MC1cXHR9XFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5MS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MzkyOlxcdGlmICghY29va2llX3RpbWVzdGFtcF9kZWNvZGUobmV0LCBcXHUwMDI2dGNwX29wdCkpXFxubmV0L2lwdjQvc3luY29va2llcy5jLTM5My1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTUtXFx0cmV0dXJuIGNvb2tpZV90Y3BfcmVxc2tfYWxsb2MoXFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfb3BzLCBzaywgc2tiLFxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzozOTY6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRjcF9vcHQsIG1zcywgdHNvZmYpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0zOTctb3V0Olxcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMDgwLVxcdHtcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxMDgxOlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9vcnBoYW5fcmV0cmllc1xcXCIsXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTA4MjpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllcyxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xMDgzLVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZih1OCksXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zNy0gKlxcdFxcdFxcdFxcdFxcdHVua25vd24gc29ja2V0cy5cXG5uZXQvaXB2NC90Y3AuYzozODogKlxcdFxcdEFsYW4gQ294XFx0OlxcdHRjcCBvcHRpb24gcHJvY2Vzc2luZy5cXG5uZXQvaXB2NC90Y3AuYy0zOS0gKlxcdFxcdEFsYW4gQ294XFx0OlxcdFJlc2V0IHR3ZWFrZWQgKHN0aWxsIG5vdCAxMDAlKSBbSGFkXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yOTQ9ZW51bSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yOTgtXFxubmV0L2lwdjQvdGNwLmM6Mjk5OkRFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgdGNwX29ycGhhbl9jb3VudCk7XFxubmV0L2lwdjQvdGNwLmMtMzAwLVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MzA5OT12b2lkIHRjcF9zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIGludCBob3cpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zMTE3LVxcbm5ldC9pcHY0L3RjcC5jOjMxMTg6aW50IHRjcF9vcnBoYW5fY291bnRfc3VtKHZvaWQpXFxubmV0L2lwdjQvdGNwLmMtMzExOS17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zMTIyLVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKVxcbm5ldC9pcHY0L3RjcC5jOjMxMjM6XFx0XFx0dG90YWwgKz0gcGVyX2NwdSh0Y3Bfb3JwaGFuX2NvdW50LCBpKTtcXG5uZXQvaXB2NC90Y3AuYy0zMTI0LVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzEyNy1cXG5uZXQvaXB2NC90Y3AuYzozMTI4OnN0YXRpYyBpbnQgdGNwX29ycGhhbl9jYWNoZTtcXG5uZXQvaXB2NC90Y3AuYzozMTI5OnN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB0Y3Bfb3JwaGFuX3RpbWVyO1xcbm5ldC9pcHY0L3RjcC5jLTMxMzAtI2RlZmluZSBUQ1BfT1JQSEFOX1RJTUVSX1BFUklPRCBtc2Vjc190b19qaWZmaWVzKDEwMClcXG5uZXQvaXB2NC90Y3AuYy0zMTMxLVxcbm5ldC9pcHY0L3RjcC5jOjMxMzI6c3RhdGljIHZvaWQgdGNwX29ycGhhbl91cGRhdGUoc3RydWN0IHRpbWVyX2xpc3QgKnVudXNlZClcXG5uZXQvaXB2NC90Y3AuYy0zMTMzLXtcXG5uZXQvaXB2NC90Y3AuYzozMTM0OlxcdFdSSVRFX09OQ0UodGNwX29ycGhhbl9jYWNoZSwgdGNwX29ycGhhbl9jb3VudF9zdW0oKSk7XFxubmV0L2lwdjQvdGNwLmM6MzEzNTpcXHRtb2RfdGltZXIoXFx1MDAyNnRjcF9vcnBoYW5fdGltZXIsIGppZmZpZXMgKyBUQ1BfT1JQSEFOX1RJTUVSX1BFUklPRCk7XFxubmV0L2lwdjQvdGNwLmMtMzEzNi19XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zMTM4PXN0YXRpYyBib29sIHRjcF90b29fbWFueV9vcnBoYW5zKGludCBzaGlmdClcXG5uZXQvaXB2NC90Y3AuYy0zMTM5LXtcXG5uZXQvaXB2NC90Y3AuYzozMTQwOlxcdHJldHVybiBSRUFEX09OQ0UodGNwX29ycGhhbl9jYWNoZSkgXFx1MDAzY1xcdTAwM2Mgc2hpZnQgXFx1MDAzZVxcbm5ldC9pcHY0L3RjcC5jLTMxNDEtXFx0XFx0UkVBRF9PTkNFKHN5c2N0bF90Y3BfbWF4X29ycGhhbnMpO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzE0My1cXG5uZXQvaXB2NC90Y3AuYzozMTQ0OnN0YXRpYyBib29sIHRjcF9vdXRfb2ZfbWVtb3J5KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3AuYy0zMTQ1LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMxNTI9Ym9vbCB0Y3BfY2hlY2tfb29tKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHNoaWZ0KVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzE1Ni1cXHR0b29fbWFueV9vcnBoYW5zID0gdGNwX3Rvb19tYW55X29ycGhhbnMoc2hpZnQpO1xcbm5ldC9pcHY0L3RjcC5jOjMxNTc6XFx0b3V0X29mX3NvY2tldF9tZW1vcnkgPSB0Y3Bfb3V0X29mX21lbW9yeShzayk7XFxubmV0L2lwdjQvdGNwLmMtMzE1OC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMxNjY9dm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTMyNjQtXFxubmV0L2lwdjQvdGNwLmM6MzI2NTpcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbm5ldC9pcHY0L3RjcC5jLTMyNjYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00MzkzPUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9nZXRfaW5mbyk7XFxubmV0L2lwdjQvdGNwLmMtNDM5NC1cXG5uZXQvaXB2NC90Y3AuYzo0Mzk1OnN0YXRpYyBzaXplX3QgdGNwX29wdF9zdGF0c19nZXRfc2l6ZSh2b2lkKVxcbm5ldC9pcHY0L3RjcC5jLTQzOTYte1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9NDQzOT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dldF90aW1lc3RhbXBpbmdfb3B0X3N0YXRzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ0NDgtXFxubmV0L2lwdjQvdGNwLmM6NDQ0OTpcXHRzdGF0cyA9IGFsbG9jX3NrYih0Y3Bfb3B0X3N0YXRzX2dldF9zaXplKCksIEdGUF9BVE9NSUMpO1xcbm5ldC9pcHY0L3RjcC5jLTQ0NTAtXFx0aWYgKCFzdGF0cylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTUzMTM9dm9pZCBfX2luaXQgdGNwX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTUzMjYtXFxubmV0L2lwdjQvdGNwLmM6NTMyNzpcXHR0aW1lcl9zZXR1cChcXHUwMDI2dGNwX29ycGhhbl90aW1lciwgdGNwX29ycGhhbl91cGRhdGUsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbm5ldC9pcHY0L3RjcC5jOjUzMjg6XFx0bW9kX3RpbWVyKFxcdTAwMjZ0Y3Bfb3JwaGFuX3RpbWVyLCBqaWZmaWVzICsgVENQX09SUEhBTl9USU1FUl9QRVJJT0QpO1xcbm5ldC9pcHY0L3RjcC5jLTUzMjktXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xMzg0PXN0YXRpYyBpbnQgdGNwX2FvX3BhcnNlX2NyeXB0byhjb25zdCBzdHJ1Y3QgdGNwX2FvX2FkZCAqY21kLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTM4Ni17XFxubmV0L2lwdjQvdGNwX2FvLmM6MTM4NzpcXHR1bnNpZ25lZCBpbnQgc3luX3RjcF9vcHRpb25fc3BhY2U7XFxubmV0L2lwdjQvdGNwX2FvLmMtMTM4OC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE0MTgtXFx0ICovXFxubmV0L2lwdjQvdGNwX2FvLmM6MTQxOTpcXHRzeW5fdGNwX29wdGlvbl9zcGFjZSA9IE1BWF9UQ1BfT1BUSU9OX1NQQUNFO1xcbm5ldC9pcHY0L3RjcF9hby5jOjE0MjA6XFx0c3luX3RjcF9vcHRpb25fc3BhY2UgLT0gVENQT0xFTl9NU1NfQUxJR05FRDtcXG5uZXQvaXB2NC90Y3BfYW8uYzoxNDIxOlxcdHN5bl90Y3Bfb3B0aW9uX3NwYWNlIC09IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ7XFxubmV0L2lwdjQvdGNwX2FvLmM6MTQyMjpcXHRzeW5fdGNwX29wdGlvbl9zcGFjZSAtPSBUQ1BPTEVOX1dTQ0FMRV9BTElHTkVEO1xcbm5ldC9pcHY0L3RjcF9hby5jOjE0MjM6XFx0aWYgKHRjcF9hb19sZW5fYWxpZ25lZChrZXkpIFxcdTAwM2Ugc3luX3RjcF9vcHRpb25fc3BhY2UpXFxubmV0L2lwdjQvdGNwX2FvLmMtMTQyNC1cXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9Mzk1MT1zdGF0aWMgaW50IHRjcF9hY2tfdXBkYXRlX3dpbmRvdyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUzMiBhY2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zOTg4LVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjM5ODk6c3RhdGljIGJvb2wgX190Y3Bfb293X3JhdGVfbGltaXRlZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBtaWJfaWR4LFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTM5OTAtXFx0XFx0XFx0XFx0ICAgdTMyICpsYXN0X29vd19hY2tfdGltZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMTktICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDAyMDpib29sIHRjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDIxLVxcdFxcdFxcdCAgaW50IG1pYl9pZHgsIHUzMiAqbGFzdF9vb3dfYWNrX3RpbWUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDI3LVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwMjg6XFx0cmV0dXJuIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQobmV0LCBtaWJfaWR4LCBsYXN0X29vd19hY2tfdGltZSk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDAyOS19XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDY5PXN0YXRpYyB2b2lkIHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBib29sIGFjY2Vjbl9yZWZsZWN0b3IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDc0LVxcdC8qIEZpcnN0IGNoZWNrIG91ciBwZXItc29ja2V0IGR1cGFjayByYXRlIGxpbWl0LiAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwNzU6XFx0aWYgKF9fdGNwX29vd19yYXRlX2xpbWl0ZWQobmV0LFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNzYtXFx0XFx0XFx0XFx0ICAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDg3LS8qIFNlbmQgYSBjaGFsbGVuZ2UgQUNLIGZyb20gYSBTWU4tUkVDRUlWRUQgcmVxdWVzdCBzb2NrZXQuIFVzZXNcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDg4OiAqIF9fdGNwX29vd19yYXRlX2xpbWl0ZWQoKSBkaXJlY3RseSBzbyB0aGF0IGFuIFJTVCBjYXJyeWluZyBwYXlsb2FkXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA4OS0gKiBjYW5ub3QgYnlwYXNzIHRoZSBwZXItcmVxdWVzdCByYXRlIGxpbWl0Llxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDA5MT12b2lkIHRjcF9yZXFza19zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5NS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDk2OlxcdGlmIChfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKG5ldCwgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA5Ny1cXHRcXHRcXHRcXHQgICBcXHUwMDI2dGNwX3JzayhyZXEpLVxcdTAwM2VsYXN0X29vd19hY2tfdGltZSkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00NTAwPXN0YXRpYyBib29sIHNtY19wYXJzZV9vcHRpb25zKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ1MDE6XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpvcHRfcngsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDUwMi1cXHRcXHRcXHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00NTIxPXUxNiB0Y3BfcGFyc2VfbXNzX29wdGlvbihjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgdTE2IHVzZXJfbXNzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2MC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0NTYxOi8qIExvb2sgZm9yIHRjcCBvcHRpb25zLiBOb3JtYWxseSBvbmx5IGNhbGxlZCBvbiBTWU4gYW5kIFNZTkFDSyBwYWNrZXRzLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ1NjItICogQnV0LCB0aGlzIGNhbiBhbHNvIGJlIGNhbGxlZCBvbiBwYWNrZXRzIGluIHRoZSBlc3RhYmxpc2hlZCBmbG93IHdoZW5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ1NjU9dm9pZCB0Y3BfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDU2Ni1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0NTY3OlxcdFxcdCAgICAgICBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm9wdF9yeCwgaW50IGVzdGFiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ1NjgtXFx0XFx0ICAgICAgIHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29va2llICpmb2MpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01MjQ0PXN0YXRpYyBib29sIHRjcF90cnlfY29hbGVzY2Uoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTI3OC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Mjc5OnN0YXRpYyBib29sIHRjcF9vb29fdHJ5X2NvYWxlc2NlKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01MjgwLVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnRvLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI5Nz10Y3BfZHJvcF9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01MzA1LSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUzMDY6c3RhdGljIHZvaWQgdGNwX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTMwNy17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01MzgxPXN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NDI1LVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU0MjY6XFx0aWYgKHRjcF9vb29fdHJ5X2NvYWxlc2NlKHNrLCB0cC1cXHUwMDNlb29vX2xhc3Rfc2tiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU0MjctXFx0XFx0XFx0XFx0IHNrYiwgXFx1MDAyNmZyYWdzdG9sZW4pKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NDgyLVxcdFxcdFxcdH1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1NDgzOlxcdFxcdH0gZWxzZSBpZiAodGNwX29vb190cnlfY29hbGVzY2Uoc2ssIHNrYjEsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTQ4NC1cXHRcXHRcXHRcXHRcXHRcXHRza2IsIFxcdTAwMjZmcmFnc3RvbGVuKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTYwNz1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Njc2LVxcdFxcdGlmICghUkJfRU1QVFlfUk9PVChcXHUwMDI2dHAtXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Njc3OlxcdFxcdFxcdHRjcF9vZm9fcXVldWUoc2spO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzgtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02MzIyPXN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzUxLVxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU0VTVEFCUkVKRUNURUQpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjYzNTI6XFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYixcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzUzLVxcdFxcdFxcdFxcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURQQVdTLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM3Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBMSU5VWF9NSUJfQkVZT05EX1dJTkRPVyk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjM3NzpcXHRcXHRcXHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNFUSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY3NjQ9c3RhdGljIGJvb2wgdGNwX3Jjdl9mYXN0b3Blbl9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc3luYWNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjc3Mi1cXHRpZiAobXNzID09IFJFQURfT05DRSh0cC1cXHUwMDNlcnhfb3B0LnVzZXJfbXNzKSkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjY3NzM6XFx0XFx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIG9wdDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Nzc0LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzQ1ND1zdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODgtXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ4OTpzdGF0aWMgdm9pZCB0Y3Bfb3BlbnJlcV9pbml0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDkwOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ5MS1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjI1LVxcdHUzMiBpc24gPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF90d19pc247XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyNjpcXHRzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgdG1wX29wdDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjI3LVxcdGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4Ni1cXHR0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Njg3OlxcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY4OC1cXHRpbmV0X3JzayhyZXEpLVxcdTAwM2Vub19zcmNjaGVjayA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NTktXFx0dGNwX3JzayhyZXEpLVxcdTAwM2VzeW5fdG9zID0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VpcF9kc2ZpZWxkO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3NjA6XFx0dGNwX29wZW5yZXFfaW5pdF9yd2luKHJlcSwgc2ssIGRzdCk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc2MS1cXHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTEzLSAqXFx0XFx0bGludXgvaXB2NC90Y3BfaW5wdXQuY1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTQ6ICpcXHRcXHRsaW51eC9pcHY0L3RjcF9vdXRwdXQuY1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTUtICpcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzQzOD1zdGF0aWMgaW50IF9fbmV0X2luaXQgdGNwX3NrX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYwLVxcdG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3JldHJpZXMyID0gVENQX1JFVFIyO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ2MTpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9vcnBoYW5fcmV0cmllcyA9IDA7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYyLVxcdG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2Zpbl90aW1lb3V0ID0gVENQX0ZJTl9USU1FT1VUO1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTM5PXRjcF90aW1ld2FpdF9jaGVja19vb3dfcmF0ZV9saW1pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00My1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDQ6XFx0aWYgKCF0Y3Bfb293X3JhdGVfbGltaXRlZCh0d3NrX25ldCh0dyksIHNrYiwgbWliX2lkeCxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDUtXFx0XFx0XFx0XFx0ICBcXHUwMDI2dGNwdHctXFx1MDAzZXR3X2xhc3Rfb293X2Fja190aW1lKSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTEwMT10Y3BfdGltZXdhaXRfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy0xMDYtXFx0dTMyIHJjdl9ueHQgPSBSRUFEX09OQ0UodGNwdHctXFx1MDAzZXR3X3Jjdl9ueHQpO1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzoxMDc6XFx0c3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHRtcF9vcHQ7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTEwOC1cXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBwc3BfZHJvcDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MTI9dm9pZCB0Y3BfdHdza19wdXJnZShzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDMxOnZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY5MS17XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY5MjpcXHRzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgdG1wX29wdDtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNjkzLVxcdHN0cnVjdCBzb2NrICpjaGlsZDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTAtXFx0XFx0ICovXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjc1MTpcXHRcXHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy03NTItXFx0XFx0XFx0XFx0XFx0ICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNZTlJFQ1YsXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtODUwLVxcdFxcdGlmICghKGZsZyBcXHUwMDI2IFRDUF9GTEFHX1JTVCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6ODUxOlxcdFxcdCAgICAhdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTg1Mi1cXHRcXHRcXHRcXHRcXHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU1lOUkVDVixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MTE9c3RhdGljIHZvaWQgc21jX29wdGlvbnNfd3JpdGUoX19iZTMyICpwdHIsIHUxNiAqb3B0aW9ucylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjUtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQyNjpzdHJ1Y3QgdGNwX291dF9vcHRpb25zIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI3LVxcdC8qIEZvbGxvd2luZyBncm91cCBpcyBjbGVhcmVkIGluIF9fdGNwX3RyYW5zbWl0X3NrYigpICovXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQxLVxcdHN0cnVjdCB0Y3BfZmFzdG9wZW5fY29va2llICpmYXN0b3Blbl9jb29raWU7XFx0LyogRmFzdCBvcGVuIGNvb2tpZSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDI6XFx0c3RydWN0IG1wdGNwX291dF9vcHRpb25zIG1wdGNwO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDMtfTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ0LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDU6c3RhdGljIHZvaWQgbXB0Y3Bfb3B0aW9uc193cml0ZShzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDc6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQ4LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00Njk9c3RhdGljIHUzMiBicGZfc2tvcHNfaGRyX29wdF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ3Mi1cXHRcXHRcXHRcXHQgZW51bSB0Y3Bfc3luYWNrX3R5cGUgc3luYWNrX3R5cGUsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ3MzpcXHRcXHRcXHRcXHQgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDc0LVxcdFxcdFxcdFxcdCB1MzIgcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTUzMz1zdGF0aWMgdm9pZCBicGZfc2tvcHNfd3JpdGVfaGRyX29wdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTM2LVxcdFxcdFxcdFxcdCAgICBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTM3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01Mzgte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTU3OD1zdGF0aWMgdTMyIGJwZl9za29wc19oZHJfb3B0X2xlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTgxLVxcdFxcdFxcdFxcdCBlbnVtIHRjcF9zeW5hY2tfdHlwZSBzeW5hY2tfdHlwZSxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NTgyOlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01ODMtXFx0XFx0XFx0XFx0IHUzMiByZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTg4PXN0YXRpYyB2b2lkIGJwZl9za29wc193cml0ZV9oZHJfb3B0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy01OTEtXFx0XFx0XFx0XFx0ICAgIGVudW0gdGNwX3N5bmFja190eXBlIHN5bmFja190eXBlLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo1OTI6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTU5My17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NTk3PXN0YXRpYyBfX2JlMzIgKnByb2Nlc3NfdGNwX2FvX29wdGlvbnMoc3RydWN0IHRjcF9zb2NrICp0cCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNTk4LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrICp0Y3Byc2ssXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjU5OTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02MDAtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF9rZXkgKmtleSwgX19iZTMyICpwdHIpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NjM4PXN0YXRpYyBjb25zdCB1MzIgc3luYWNrX2Vjbl9ieXRlc1szXSA9IHsgMCwgMCwgMCB9O1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTY1Mi0gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NjUzOnN0YXRpYyB2b2lkIHRjcF9vcHRpb25zX3dyaXRlKHN0cnVjdCB0Y3BoZHIgKnRoLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy02NTQtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcHJzayxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NjU1OlxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTY1Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX2tleSAqa2V5KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTgyNy1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODI4OlxcdG1wdGNwX29wdGlvbnNfd3JpdGUodGgsIHB0ciwgdHAsIG9wdHMpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04MjktfVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTgzMT1zdGF0aWMgdm9pZCBzbWNfc2V0X29wdGlvbihzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo4MzI6XFx0XFx0XFx0ICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtODMzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCAqcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTg0OD1zdGF0aWMgdm9pZCBzbWNfc2V0X29wdGlvbl9jb25kKGNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg0OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg1MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy04NTEtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50ICpyZW1haW5pbmcpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9ODY2PXN0YXRpYyB2b2lkIG1wdGNwX3NldF9vcHRpb25fY29uZChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjg2NzpcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg2OC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCAqcmVtYWluaW5nKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4MS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6ODgyOnN0YXRpYyB1MzIgdGNwX3N5bmFja19vcHRpb25zX2NvbWJpbmVfc2F2aW5nKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTg4My17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTAyLSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5MDM6c3RhdGljIGludCB0Y3Bfb3B0aW9uc19maXRfYWNjZWNuKHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsIGludCByZXF1aXJlZCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTA0LVxcdFxcdFxcdFxcdCAgaW50IHJlbWFpbmluZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz05NTk9c3RhdGljIHVuc2lnbmVkIGludCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo5NjA6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtOTYxLVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfa2V5ICprZXkpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA1MC1cXHRcXHRvcHRzLVxcdTAwM2V1c2Vfc3luYWNrX2Vjbl9ieXRlcyA9IDE7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjEwNTE6XFx0XFx0cmVtYWluaW5nIC09IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgMCwgcmVtYWluaW5nKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA1Mi1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTA2MT1zdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2My1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG1zcywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTA2NDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRjcF9vdXRfb3B0aW9ucyAqb3B0cyxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTA2NS1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHRjcF9rZXkgKmtleSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTM4LVxcdFxcdG9wdHMtXFx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTEzOTpcXHRcXHRyZW1haW5pbmcgLT0gdGNwX29wdGlvbnNfZml0X2FjY2VjbihvcHRzLCAwLCByZW1haW5pbmcpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMTQwLVxcdH1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMTUxPXN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxMTUyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTExNTMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9rZXkgKmtleSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xMjMxLVxcdFxcdFxcdG9wdHMtXFx1MDAzZXVzZV9zeW5hY2tfZWNuX2J5dGVzID0gMDtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTIzMjpcXHRcXHRcXHRzaXplICs9IHRjcF9vcHRpb25zX2ZpdF9hY2NlY24ob3B0cywgdHAtXFx1MDAzZWFjY2Vjbl9taW5sZW4sXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTEyMzMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BWF9UQ1BfT1BUSU9OX1NQQUNFIC0gc2l6ZSk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MTUzNj1zdGF0aWMgaW50IF9fdGNwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU0Mi1cXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNiO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNTQzOlxcdHN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0cztcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU0NDpcXHR1bnNpZ25lZCBpbnQgdGNwX29wdGlvbnNfc2l6ZSwgdGNwX2hlYWRlcl9zaXplO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTQ1LVxcdHN0cnVjdCBza19idWZmICpvc2tiID0gTlVMTDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTc5LVxcdGlmICh1bmxpa2VseSh0Y2ItXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9TWU4pKSB7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1ODA6XFx0XFx0dGNwX29wdGlvbnNfc2l6ZSA9IHRjcF9zeW5fb3B0aW9ucyhzaywgc2tiLCBcXHUwMDI2b3B0cywgXFx1MDAyNmtleSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE1ODEtXFx0fSBlbHNlIHtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTU4MjpcXHRcXHR0Y3Bfb3B0aW9uc19zaXplID0gdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc2ssIHNrYiwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNTgzLVxcdFxcdC8qIEZvcmNlIGEgUFNIIGZsYWcgb24gYWxsIChHU08pIHBhY2tldHMgdG8gZXhwZWRpdGUgR1JPIGZsdXNoXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU5My1cXHR9XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjE1OTQ6XFx0dGNwX2hlYWRlcl9zaXplID0gdGNwX29wdGlvbnNfc2l6ZSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMTU5NS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNjYyLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNjYzOlxcdHRjcF9vcHRpb25zX3dyaXRlKHRoLCB0cCwgTlVMTCwgXFx1MDAyNm9wdHMsIFxcdTAwMjZrZXkpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNjY0LVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTE5OTY9c3RhdGljIGlubGluZSBpbnQgX190Y3BfbXR1X3RvX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBwbXR1KVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwMDYtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwMDc6XFx0LyogQ2xhbXAgaXQgKG1zc19jbGFtcCBkb2VzIG5vdCBpbmNsdWRlIHRjcCBvcHRpb25zKSAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0yMDA4LVxcdGlmIChtc3Nfbm93IFxcdTAwM2UgdHAtXFx1MDAzZXJ4X29wdC5tc3NfY2xhbXApXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MjA0Mj12b2lkIHRjcF9tdHVwX2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTIwNjgtICAgdHAtXFx1MDAzZW1zc19jYWNoZSBpcyBjdXJyZW50IGVmZmVjdGl2ZSBzZW5kaW5nIG1zcywgaW5jbHVkaW5nXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjIwNjk6ICAgYWxsIHRjcCBvcHRpb25zIGV4Y2VwdCBmb3IgU0FDS3MuIEl0IGlzIGV2YWx1YXRlZCxcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMjA3MC0gICB0YWtpbmcgaW50byBhY2NvdW50IGN1cnJlbnQgcG10dSwgYnV0IG5ldmVyIGV4Y2VlZHNcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MzAuMDgwODcwMjE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDg4MjAwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBJbnNwZWN0aW9uOiBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUbyBwcm9wZXJseSBhc3Nlc3MgdGhpcyBzaXR1YXRpb24sIG15IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiBJJ2xsIHN0YXJ0IHdpdGggYSBzY2FuIG9mIGBuZXQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2NC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBhIGZldyBrZXkgc3ltYm9sczogYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhlc2UgZmxhZ3MgYXJlIHVzdWFsbHkgdGhlIGx5bmNocGlucyBpbiB1bmRlcnN0YW5kaW5nIGEga2VybmVsJ3MgbmV0d29ya2luZyBtZW1vcnkgYmVoYXZpb3IuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYG5ldC9LY29uZmlnYCwgYW5kIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBsaW5lcyA2NS04MCBhcmUgbGlrZWx5IHRvIGNvbnRhaW4gcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJ2xsIGJlIHN1cmUgdG8gc2NydXRpbml6ZSB0aGF0IHJlZ2lvbiBjYXJlZnVsbHkuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmFsIGNob2ljZXMgcmVsYXRlZCB0byB0aGVzZSBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzozMi4zMjk2OTI2MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0Y29uZmlnIE5FVF9SRURJUkVDVFxcbiAgNjE6XFx0XFx0Ym9vbFxcbiAgNjI6XFx0XFxuICA2MzpcXHRjb25maWcgU0tCX0RFQ1JZUFRFRFxcbiAgNjQ6XFx0XFx0Ym9vbFxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgU0tCX0VYVEVOU0lPTlNcXG4gIDY3OlxcdFxcdGJvb2xcXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIE5FVF9ERVZNRU1cXG4gIDcwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDcxOlxcdFxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxcbiAgNzM6XFx0XFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIE5FVF9TSEFQRVJcXG4gIDc2OlxcdFxcdGJvb2xcXG4gIDc3OlxcdFxcbiAgNzg6XFx0Y29uZmlnIE5FVF9DUkMzMkNcXG4gIDc5OlxcdFxcdGJvb2xcXG4gIDgwOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODE6XFx0XFxuICA4MjpcXHRtZW51IFxcXCJOZXR3b3JraW5nIG9wdGlvbnNcXFwiXFxuICA4MzpcXHRcXG4gIDg0OlxcdHNvdXJjZSBcXFwibmV0L3BhY2tldC9LY29uZmlnXFxcIlxcbiAgODU6XFx0c291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxuICA4NjpcXHRzb3VyY2UgXFxcIm5ldC91bml4L0tjb25maWdcXFwiXFxuICA4NzpcXHRzb3VyY2UgXFxcIm5ldC90bHMvS2NvbmZpZ1xcXCJcXG4gIDg4OlxcdHNvdXJjZSBcXFwibmV0L3hmcm0vS2NvbmZpZ1xcXCJcXG4gIDg5OlxcdHNvdXJjZSBcXFwibmV0L2l1Y3YvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MzIuMzI5NzYxOTc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NTAzOTU4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGBDT05GSUdfTkVUX0RFVk1FTWAgZml0cyBpbi4gSXQncyBkZWZpbmVkIGFzIGEgXCJ5XCIgd2hpY2ggbWVhbnMgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzOiBpdCBoaW5nZXMgb24gYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQncyB0aGUga2V5LlxuXG5Ob3csIEkga25vdyB0aGF0IGBDT05GSUdfSU5FVGAgY29tcGlsZXMgYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIG5ldHdvcmsgZnVuY3Rpb25hbGl0eS4gSSdsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgdGNwLmNgIGlzIGluZGVlZCBjb21waWxlZCBjb25kaXRpb25hbGx5IG9uIGBDT05GSUdfSU5FVGAsIGp1c3QgdG8gYmUgY2VydGFpbiDigJMgeWVwLCBgbmV0L2lwdjRgIGZhbGxzIHVuZGVyIGBDT05GSUdfSU5FVGAsIGFzIGV4cGVjdGVkLiBTbyBmYXIsIHNvIGdvb2QuXG5cbk5vdywgcmVnYXJkaW5nIGBORVRfREVWTUVNYCwgaXQgbmVlZHMgdGhvc2UgdHdvIGVuYWJsZXJzIG9mIGBQQUdFX1BPT0xgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBvciBhbHRlcm5hdGl2ZWx5IGBVRE1BQlVGYCwgb3IgYW5vdGhlciBgRE1BX1NIQVJFRF9CVUZGRVJgIG9wdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gVG8gdW5kZXJzdGFuZCBob3cgdGhhdCB3b3JrcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBQQUdFX1BPT0xgLCBhbmQgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGluIGBuZXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgYG5ldC9jb3JlL0tjb25maWdgLiBJJ2xsIGRlbHZlIGludG8gdGhvc2UgZmlsZXMgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMwNDgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzozNS43ODAxNjA0NDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTExMDYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfUE9PTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcbm5ldC9LY29uZmlnLTQ5My1cXG5uZXQvS2NvbmZpZzo0OTQ6Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbm5ldC9LY29uZmlnLTQ5NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6MzcuNDkxMjczMjM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MzI2MzcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBJUHY0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHplcm8gaW4gb24gYGNvbmZpZyBJTkVUYCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS5cIiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2sgaXMgY29uZmlndXJlZCBpbiB0aGlzIGNvbnRleHQuIEkga25vdyB0aGlzIGZpbGUgaG9sZHMgdGhlIGtleSBidWlsZCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGFsbCB0aGluZ3MgSVB2NCB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgYGNvbmZpZyBJTkVUYCBzeW1ib2wgd2lsbCBsaWtlbHkgYmUgYSB0b3AtbGV2ZWwgc3dpdGNoIG9yIGEgcGl2b3RhbCBjb21wb25lbnQgY29udHJvbGxpbmcgdGhlIGluY2x1c2lvbiBvZiB0aGUgZW50aXJlIElQdjQgc3Vic3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmF1bHQgdmFsdWUsIGhlbHAgdGV4dCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkgYW0gaG9waW5nIHRoZSBmaWxlIGlzIHVwLXRvLWRhdGUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhbGwgY2xlYW5seSB3cml0dGVuLiBLbm93aW5nIHRoaXMsIEkgY2FuIGZpZ3VyZSBvdXQgaG93IHRoZSBzcGVjaWZpYyBJUHY0IGZlYXR1cmVzIEknbSBpbnRlcmVzdGVkIGluIGFyZSBjb250cm9sbGVkIG9yLCBpbmRlZWQsIGRpc2FibGVkLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIHRyYWNlIHRoZSBjb25maWd1cmF0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggSVB2NCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgaXQgaW50ZXJyZWxhdGVzIHdpdGggb3RoZXIgbmV0d29ya2luZyBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYwMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQxLjEyMzkxMzE1N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NDg3NjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQzLjM3ODgwMjk3N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA5MTU0NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRE1BIEJ1ZmZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBETUEgYnVmZmVyIGNvbmZpZ3VyYXRpb25zIHdvcmsgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgaXMgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgY29uZmlnIFVETUFCVUZgIGFuZCBhbnkgb3RoZXIgc2ltaWxhciBkbWFidWYgY29uZmlndXJhdGlvbnMuIEkga25vdyBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiBpbiBgZHJpdmVycy9iYXNlL0tjb25maWdgLCBzbyB0aGF0J3MgdGhlIGJhc2UgbGV2ZWwgZGVwZW5kZW5jeS4gSSBhbHNvIHJlY2FsbCBgVURNQUJVRmAgaGluZ2VzIG9uIGJvdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYE1FTUZEX0NSRUFURWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IGBORVRfREVWTUVNYCBhbHNvIHRpZXMgaW50byBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYWRkcyBgUEFHRV9QT09MYCB0byB0aGUgbWl4LlxuXG5Ob3csIEknbSByZWFsbHkgY3VyaW91cyBhYm91dCBgdGNwX3JlY3Ztc2dfZG1hYnVmYC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdOKAmXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBORVRfREVWTUVNYCBpcyBlbmFibGVkLCBvciBpZiBpdCdzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19ORVRfREVWTUVNYCBibG9jay4gT3IgaWYsIHBvdGVudGlhbGx5LCBpdCBqdXN0ICp1c2VzKiBgQ09ORklHX05FVF9ERVZNRU1gIGludGVybmFsbHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgbmV0L2lwdjQvdGNwLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhcm91bmQgdGhlIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBpbmNsdWRlZC4gSSBuZWVkIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQ2LjE4Nzk2MTkyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ0MDpcXHRcXHRuZXRtZW1fcmVmXFx0bmV0bWVtc1tNQVhfU0tCX0ZSQUdTXTtcXG4yNDQxOlxcdH07XFxuMjQ0MjpcXHRcXG4yNDQzOlxcdHN0YXRpYyB2b2lkIHRjcF94YV9wb29sX2NvbW1pdF9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXFxuMjQ0NDpcXHR7XFxuMjQ0NTpcXHRcXHRpbnQgaTtcXG4yNDQ2OlxcdFxcbjI0NDc6XFx0XFx0LyogQ29tbWl0IHBhcnQgdGhhdCBoYXMgYmVlbiBjb3BpZWQgdG8gdXNlciBzcGFjZS4gKi9cXG4yNDQ4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwLVxcdTAwM2VpZHg7IGkrKylcXG4yNDQ5OlxcdFxcdFxcdF9feGFfY21weGNoZyhcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIHAtXFx1MDAzZXRva2Vuc1tpXSwgWEFfWkVST19FTlRSWSxcXG4yNDUwOlxcdFxcdFxcdFxcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXFx1MDAzZW5ldG1lbXNbaV0sIEdGUF9LRVJORUwpO1xcbjI0NTE6XFx0XFx0LyogUm9sbGJhY2sgd2hhdCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLiAqL1xcbjI0NTI6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBwLVxcdTAwM2VtYXg7IGkrKylcXG4yNDUzOlxcdFxcdFxcdF9feGFfZXJhc2UoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBwLVxcdTAwM2V0b2tlbnNbaV0pO1xcbjI0NTQ6XFx0XFxuMjQ1NTpcXHRcXHRwLVxcdTAwM2VtYXggPSAwO1xcbjI0NTY6XFx0XFx0cC1cXHUwMDNlaWR4ID0gMDtcXG4yNDU3OlxcdH1cXG4yNDU4OlxcdFxcbjI0NTk6XFx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxcbjI0NjA6XFx0e1xcbjI0NjE6XFx0XFx0aWYgKCFwLVxcdTAwM2VtYXgpXFxuMjQ2MjpcXHRcXHRcXHRyZXR1cm47XFxuMjQ2MzpcXHRcXG4yNDY0OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDY1OlxcdFxcbjI0NjY6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHhhX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0Njk6XFx0fVxcbjI0NzA6XFx0XFxuMjQ3MTpcXHRzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcXG4yNDcyOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBtYXhfZnJhZ3MpXFxuMjQ3MzpcXHR7XFxuMjQ3NDpcXHRcXHRpbnQgZXJyLCBrO1xcbjI0NzU6XFx0XFxuMjQ3NjpcXHRcXHRpZiAocC1cXHUwMDNlaWR4IFxcdTAwM2MgcC1cXHUwMDNlbWF4KVxcbjI0Nzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjQ3ODpcXHRcXG4yNDc5OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDgwOlxcdFxcbjI0ODE6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBtYXhfZnJhZ3M7IGsrKykge1xcbjI0ODQ6XFx0XFx0XFx0ZXJyID0gX194YV9hbGxvYyhcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIFxcdTAwMjZwLVxcdTAwM2V0b2tlbnNba10sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjQ2LjE4ODE3MzA2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY4OTE5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgVENQIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHRoaXMgY29kZSBjaGFuZ2UgYXMgSSB1bmRlcnN0YW5kIGl0LiBXaGVuIHRoZSBrZXJuZWwgaGFzIElQdjQgbmV0d29ya2luZyAoYENPTkZJR19JTkVUYCkgYW5kIHRoZSBkZXZtZW0gc3Vic3lzdGVtIGVuYWJsZWQgdmlhIGBDT05GSUdfTkVUX0RFVk1FTWAsIGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYENPTkZJR19QQUdFX1BPT0xgLCB0aGUgZnVuY3Rpb25zIGB0Y3BfeGFfcG9vbF9yZWZpbGxgLCBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzYCwgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGFyZSBhbGwgY29tcGlsZWQgaW50byBgbmV0L2lwdjQvdGNwLmNgLiBUaGlzIGlzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFRDUCByZWNlaXZlIHBhdGgsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBkZXZtZW0vZG1hYnVmIGZlYXR1cmVzLiBUaGV5J3ZlIGludHJvZHVjZWQgYHRjcF94YV9wb29sX21heF9mcmFnc2AgdG8gcHJlY2lzZWx5IGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyB0aGF0IGNhbiBiZSBkZWxpdmVyZWQsIHN0YXJ0aW5nIGZyb20gYSBnaXZlbiBvZmZzZXQsIHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJlbWFpbmluZyBkYXRhIGxlbmd0aC4gVGhpcyBjYWxjdWxhdGVkIG51bWJlciBvZiBmcmFnbWVudHMgaXMgdGhlbiBwYXNzZWQgdG8gYHRjcF94YV9wb29sX3JlZmlsbGAuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbmZpZ3MgdGhhdCBhcmUgcmVsZXZhbnQsIGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBhcmUgd2hhdCBicmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgb25saW5lLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGB0Y3BfcmVjdm1zZ19kbWFidWZgLCBhbmQgYHRjcF94YV9wb29sX3JlZmlsbGAuXG5cblRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIGNvcmUgVENQIGRhdGEgcGF0aCwgZGVhbGluZyB3aXRoIFhBcnJheSB0b2tlbiBwb29sIGFsbG9jYXRpb25zLCBhbmQgaW1wb3J0YW50bHksIHJlbGF0ZXMgdG8gZGV2bWVtIFRDUCB6ZXJvLWNvcHksIHdoaWNoIGlzIHVzZWQgdGhyb3VnaCBUQ1Agc29ja2V0cyB3aXRoIGByZWN2bXNnKC4uLiwgTVNHX1NPQ0tfREVWTUVNKWAuIEJlY2F1c2UgaXQgaW52b2x2ZXMgY29yZSBuZXR3b3JraW5nIG1vZGlmaWNhdGlvbnMsIHRoZSByaXNrIHByb2ZpbGUgaXMgZWxldmF0ZWQgc28gSSdtIHRoaW5raW5nIGl0J3Mgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4gVGhpcyB0aWNrcyB0aGUgYm94IGZvciBhIFwiV29ydGhGdXp6aW5nPXRydWVcIiBmbGFnLiBJJ20gYXZvaWRpbmcgZ2VuZXJpYyBmdW5jdGlvbnMgbGlrZSBgdGNwX3JlY3Ztc2dgIGFuZCBnZW5lcmljIGFsbG9jYXRvcnMgYXMgdGhleSBhcmUgdG9vIHViaXF1aXRvdXMgdG8gYmUgdGhlIGZvY3VzIGhlcmUuXG5cblNvLCB0aGlzIGNoYW5nZSBoYXMgYSBoaWdoIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIFRDUCByZWNlaXZlIHBhdGggZm9yIGRldm1lbSwgc28gSSdsbCBmbGFnIGl0IGZvciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE4NywiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzo1MS45NTcwOTU5OTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM0MzA1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF94YV9wb29sX21heF9mcmFnc1wiLFxuICAgIFwidGNwX3JlY3Ztc2dfZG1hYnVmXCIsXG4gICAgXCJ0Y3BfeGFfcG9vbF9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF94YV9wb29sX21heF9mcmFnc1wiLFxuICAgIFwidGNwX3JlY3Ztc2dfZG1hYnVmXCIsXG4gICAgXCJ0Y3BfeGFfcG9vbF9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIGRtYWJ1ZiByZWNlaXZlIHBhdGggaW4gbmV0L2lwdjQvdGNwLmMgYnkgYWRkaW5nIHRjcF94YV9wb29sX21heF9mcmFncyB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGZyb20gYSBnaXZlbiBvZmZzZXQgdXAgdG8gcmVtYWluaW5nX2xlbiwgYWRqdXN0aW5nIHRoZSBwb29sIHJlZmlsbCBsb2dpYyBpbiB0Y3BfcmVjdm1zZ19kbWFidWYuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgemVyby1jb3B5IFRDUCBkZXZtZW0gcmVjZWl2ZSBhbmQgWEFycmF5IHRva2VuIGFsbG9jYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA3OjUyLjAzMDQ0NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTg1MDcxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDc6NTIuMDMwOTUwNjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzk4NDU2MjcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGUgaGVscGVyIGZ1bmN0aW9uIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBudW1iZXIgb2YgZGVsaXZlcmFibGUgZnJhZ21lbnRzIGJvdW5kZWQgYnkgYHJlbWFpbmluZ19sZW5gLCBhbmQgcGFzc2VzIHRoaXMgdmFsdWUgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsKClgIGluc3RlYWQgb2Ygb3Zlci1hbGxvY2F0aW5nIGJhc2VkIG9uIHJlbWFpbmluZyBgbnJfZnJhZ3NgLlxcblxcbkFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIGFuZCBgdGNwX3JlY3Ztc2dfZG1hYnVmKClgIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgYGRtYWJ1Zl9jbXNnYCBzdHJ1Y3R1cmUgc2VudCB0byB1c2Vyc3BhY2UgY29udGludWVzIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQgKGBkbWFidWZfY21zZyA9IHsgMCB9YCksIGFuZCBgdGNwX3hhX3Bvb2wudG9rZW5zYCBlbnRyaWVzIGFyZSB3cml0dGVuIGJ5IGBfX3hhX2FsbG9jKClgIHByaW9yIHRvIGJlaW5nIHJlYWQgYW5kIGFzc2lnbmVkIGludG8gdGhlIGNtc2cuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQgYW5kIHN0YW5kYXJkIEtBU0FOL2RlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1MzY1YmQxYWJjODljNjkwNGNkYmYzYWE1NGY3MjJkYTAwYTM4MGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIyOjA2OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggYjQyMzdkMGU5OTRkNi4uYzM1Mjc3NDM5Mzg2MSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTI0OTQsNiArMjQ5NCwzMiBAQCBzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcbiBcdHJldHVybiBrID8gMCA6IGVycjtcbiB9XG4gXG4rLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxuKyAqIGJ5IEByZW1haW5pbmdfbGVuLiBSZXR1cm5zIDAgb25seSB3aGVuIG5vIGZyYWdtZW50IGhvbGRzIEBvZmZzZXQuXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuK1x0XHRcdFx0XHQgIGludCByZW1haW5pbmdfbGVuKVxuK3tcbitcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzID0gMDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcbitcdFx0aW50IGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShcdTAwMjZza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbaV0pO1xuK1x0XHRpbnQgY29weSA9IGVuZCAtIG9mZnNldDtcbitcbitcdFx0aWYgKGNvcHkgXHUwMDNlIDApIHtcbitcdFx0XHRtYXhfZnJhZ3MrKztcbitcdFx0XHRpZiAoY29weSBcdTAwM2U9IHJlbWFpbmluZ19sZW4pXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRzdGFydCA9IGVuZDtcbitcdH1cbitcbitcdHJldHVybiBtYXhfZnJhZ3M7XG4rfVxuK1xuIC8qIE9uIGVycm9yLCByZXR1cm5zIHRoZSAtZXJybm8uIE9uIHN1Y2Nlc3MsIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgdG8gdGhlXG4gICogdXNlci4gTWF5IG5vdCBjb25zdW1lIGFsbCBvZiBAcmVtYWluaW5nX2xlbi5cbiAgKi9cbkBAIC0yNTAzLDYgKzI1MjksNyBAQCBzdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4ge1xuIFx0c3RydWN0IGRtYWJ1Zl9jbXNnIGRtYWJ1Zl9jbXNnID0geyAwIH07XG4gXHRzdHJ1Y3QgdGNwX3hhX3Bvb2wgdGNwX3hhX3Bvb2w7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFx0aW50IGksIGNvcHksIG47XG4gXHRpbnQgc2VudCA9IDA7XG5AQCAtMjU1NCw2ICsyNTgxLDggQEAgc3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGFcbiBcdFx0ICogc2VxdWVuY2Ugb2YgY21zZ1xuIFx0XHQgKi9cbitcdFx0bWF4X2ZyYWdzID0gdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKHNrYiwgb2Zmc2V0LCByZW1haW5pbmdfbGVuKTtcbitcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcbiBcdFx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdzW2ldO1xuIFx0XHRcdHN0cnVjdCBuZXRfaW92ICpuaW92O1xuQEAgLTI1OTEsNyArMjYyMCw3IEBAIHN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdGRtYWJ1Zl9jbXNnLmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7XG4gXHRcdFx0XHRkbWFidWZfY21zZy5mcmFnX3NpemUgPSBjb3B5O1xuIFx0XHRcdFx0ZXJyID0gdGNwX3hhX3Bvb2xfcmVmaWxsKHNrLCBcdTAwMjZ0Y3BfeGFfcG9vbCxcbi1cdFx0XHRcdFx0XHRcdCBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgLSBpKTtcbitcdFx0XHRcdFx0XHRcdCBtYXhfZnJhZ3MpO1xuIFx0XHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowNzo1Mi4wMzA5NTE4M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDAxNzgzMjk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgTGludXgga2VybmVsIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGRlZmVuc2l2ZSBhbmFseXNpcyDigJMgYSBzdGFuZGFyZCBjb2RlIHJldmlldyB3aXRoIGEgZm9jdXMgb24gc2FuaXRpemVycywgc3BlY2lmaWNhbGx5IHRoZSBLQVNBTi9LTVNBTiBhbmdsZS4gTm8gaGlnaC1zZXZlcml0eSB2dWxuZXJhYmlsaXRpZXMgYXJlIGFudGljaXBhdGVkIGhlcmU7IHRoaXMgaXMgYWJvdXQgb3B0aW1pemluZyBvdXIgdGVzdGluZyBzdHJhdGVneS4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHByZWNpc2VseSBhbmQgbWFrZSBzdXJlIEkgY292ZXIgYWxsIHRoZSBiYXNlcy5cblxuRmlyc3QsIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGNoYW5nZXMgYXJlIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBhIG5ldyBmdW5jdGlvbiwgYHRjcF94YV9wb29sX21heF9mcmFnc2AsIGhhcyBiZWVuIGFkZGVkLiBJdCBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFnbWVudHMgdXNhYmxlIGZyb20gYSBieXRlIG9mZnNldCwgY29uc3RyYWluZWQgYnkgYSByZW1haW5pbmcgbGVuZ3RoLiBUaGlzIHJlc3VsdCBpcyB0aGVuIHVzZWQgaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIHJlcGxhY2luZyBhIGRpcmVjdCBjYWxjdWxhdGlvbiBvZiBmcmFnbWVudCBjb3VudCB3aXRoIGEgY2FsbCB0byBgdGNwX3hhX3Bvb2xfcmVmaWxsYC5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvdGNwLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhlIGNvZGUgYXJvdW5kIHRoZXNlIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYW5kIGlmIEtNU0FOIG5lZWRzIHRvIGJlIGludm9sdmVkLiBJ4oCZbGwgbG9vayBmb3IgYW55IHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbXByb3BlciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBmcmFnbWVudGF0aW9uIHByb2Nlc3MsIGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBPbmNlIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLCBJIGNhbiBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgdGhhdCB3YXJyYW50IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzMyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MDYuMDQ4Nzg3Nzc0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ4MDpcXHRcXG4yNDgxOlxcdFxcdHRjcF94YV9wb29sX2NvbW1pdF9sb2NrZWQoc2ssIHApO1xcbjI0ODI6XFx0XFxuMjQ4MzpcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2MgbWF4X2ZyYWdzOyBrKyspIHtcXG4yNDg0OlxcdFxcdFxcdGVyciA9IF9feGFfYWxsb2MoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBcXHUwMDI2cC1cXHUwMDNldG9rZW5zW2tdLFxcbjI0ODU6XFx0XFx0XFx0XFx0XFx0IFhBX1pFUk9fRU5UUlksIHhhX2xpbWl0XzMxYiwgR0ZQX0tFUk5FTCk7XFxuMjQ4NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjI0ODc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjQ4ODpcXHRcXHR9XFxuMjQ4OTpcXHRcXG4yNDkwOlxcdFxcdHhhX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0OTE6XFx0XFxuMjQ5MjpcXHRcXHRwLVxcdTAwM2VtYXggPSBrO1xcbjI0OTM6XFx0XFx0cC1cXHUwMDNlaWR4ID0gMDtcXG4yNDk0OlxcdFxcdHJldHVybiBrID8gMCA6IGVycjtcXG4yNDk1OlxcdH1cXG4yNDk2OlxcdFxcbjI0OTc6XFx0LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIEBza2IgZGVsaXZlcmFibGUgZnJvbSBieXRlIEBvZmZzZXQsIGNhcHBlZFxcbjI0OTg6XFx0ICogYnkgQHJlbWFpbmluZ19sZW4uIFJldHVybnMgMCBvbmx5IHdoZW4gbm8gZnJhZ21lbnQgaG9sZHMgQG9mZnNldC5cXG4yNDk5OlxcdCAqL1xcbjI1MDA6XFx0c3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4yNTAxOlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9mZnNldCxcXG4yNTAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IHJlbWFpbmluZ19sZW4pXFxuMjUwMzpcXHR7XFxuMjUwNDpcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfaGVhZGxlbihza2IpO1xcbjI1MDU6XFx0XFx0dW5zaWduZWQgaW50IG1heF9mcmFncyA9IDA7XFxuMjUwNjpcXHRcXHRpbnQgaTtcXG4yNTA3OlxcdFxcbjI1MDg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xcbjI1MDk6XFx0XFx0XFx0aW50IGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1tpXSk7XFxuMjUxMDpcXHRcXHRcXHRpbnQgY29weSA9IGVuZCAtIG9mZnNldDtcXG4yNTExOlxcdFxcbjI1MTI6XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuMjUxMzpcXHRcXHRcXHRcXHRtYXhfZnJhZ3MrKztcXG4yNTE0OlxcdFxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2U9IHJlbWFpbmluZ19sZW4pXFxuMjUxNTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTE2OlxcdFxcdFxcdH1cXG4yNTE3OlxcdFxcdFxcdHN0YXJ0ID0gZW5kO1xcbjI1MTg6XFx0XFx0fVxcbjI1MTk6XFx0XFxuMjUyMDpcXHRcXHRyZXR1cm4gbWF4X2ZyYWdzO1xcbjI1MjE6XFx0fVxcbjI1MjI6XFx0XFxuMjUyMzpcXHQvKiBPbiBlcnJvciwgcmV0dXJucyB0aGUgLWVycm5vLiBPbiBzdWNjZXNzLCByZXR1cm5zIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZVxcbjI1MjQ6XFx0ICogdXNlci4gTWF5IG5vdCBjb25zdW1lIGFsbCBvZiBAcmVtYWluaW5nX2xlbi5cXG4yNTI1OlxcdCAqL1xcbjI1MjY6XFx0c3RhdGljIGludCB0Y3BfcmVjdm1zZ19kbWFidWYoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjI1Mjc6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxcbjI1Mjg6XFx0XFx0XFx0XFx0ICAgICAgaW50IHJlbWFpbmluZ19sZW4pXFxuMjUyOTpcXHR7XFxuMjUzMDpcXHRcXHRzdHJ1Y3QgZG1hYnVmX2Ntc2cgZG1hYnVmX2Ntc2cgPSB7IDAgfTtcXG4yNTMxOlxcdFxcdHN0cnVjdCB0Y3BfeGFfcG9vbCB0Y3BfeGFfcG9vbDtcXG4yNTMyOlxcdFxcdHVuc2lnbmVkIGludCBtYXhfZnJhZ3M7XFxuMjUzMzpcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuMjUzNDpcXHRcXHRpbnQgaSwgY29weSwgbjtcXG4yNTM1OlxcdFxcdGludCBzZW50ID0gMDtcXG4yNTM2OlxcdFxcdGludCBlcnIgPSAwO1xcbjI1Mzc6XFx0XFxuMjUzODpcXHRcXHR0Y3BfeGFfcG9vbC5tYXggPSAwO1xcbjI1Mzk6XFx0XFx0dGNwX3hhX3Bvb2wuaWR4ID0gMDtcXG4yNTQwOlxcdFxcdGRvIHtcXG4yNTQxOlxcdFxcdFxcdHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTtcXG4yNTQyOlxcdFxcbjI1NDM6XFx0XFx0XFx0aWYgKHNrYl9mcmFnc19yZWFkYWJsZShza2IpKSB7XFxuMjU0NDpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI1NDU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU0NjpcXHRcXHRcXHR9XFxuMjU0NzpcXHRcXG4yNTQ4OlxcdFxcdFxcdC8qIENvcHkgaGVhZGVyLiAqL1xcbjI1NDk6XFx0XFx0XFx0Y29weSA9IHN0YXJ0IC0gb2Zmc2V0O1xcbjI1NTA6XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzZSAwKSB7XFxuMjU1MTpcXHRcXHRcXHRcXHRjb3B5ID0gbWluKGNvcHksIHJlbWFpbmluZ19sZW4pO1xcbjI1NTI6XFx0XFxuMjU1MzpcXHRcXHRcXHRcXHRuID0gY29weV90b19pdGVyKHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgY29weSxcXG4yNTU0OlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlcik7XFxuMjU1NTpcXHRcXHRcXHRcXHRpZiAobiAhPSBjb3B5KSB7XFxuMjU1NjpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjI1NTc6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjU1ODpcXHRcXHRcXHRcXHR9XFxuMjU1OTpcXHRcXG4yNTYwOlxcdFxcdFxcdFxcdG9mZnNldCArPSBjb3B5O1xcbjI1NjE6XFx0XFx0XFx0XFx0cmVtYWluaW5nX2xlbiAtPSBjb3B5O1xcbjI1NjI6XFx0XFxuMjU2MzpcXHRcXHRcXHRcXHQvKiBGaXJzdCBhIGRtYWJ1Zl9jbXNnIGZvciAjIGJ5dGVzIGNvcGllZCB0byB1c2VyXFxuMjU2NDpcXHRcXHRcXHRcXHQgKiBidWZmZXIuXFxuMjU2NTpcXHRcXHRcXHRcXHQgKi9cXG4yNTY2OlxcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2ZG1hYnVmX2Ntc2csIDAsIHNpemVvZihkbWFidWZfY21zZykpO1xcbjI1Njc6XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcXG4yNTY4OlxcdFxcdFxcdFxcdGVyciA9IHB1dF9jbXNnX25vdHJ1bmMobXNnLCBTT0xfU09DS0VULFxcbjI1Njk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFNPX0RFVk1FTV9MSU5FQVIsXFxuMjU3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGRtYWJ1Zl9jbXNnKSxcXG4yNTcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZG1hYnVmX2Ntc2cpO1xcbjI1NzI6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4yNTczOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI1NzQ6XFx0XFxuMjU3NTpcXHRcXHRcXHRcXHRzZW50ICs9IGNvcHk7XFxuMjU3NjpcXHRcXG4yNTc3OlxcdFxcdFxcdFxcdGlmIChyZW1haW5pbmdfbGVuID09IDApXFxuMjU3ODpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNTc5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MDYuMDQ5MDk2NTQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MDg5MjkyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGluLiBIZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGB0Y3BfcmVjdm1zZ19kbWFidWZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgb3BlcmF0aW9uYWwgZmxvdy4gSSBhbHJlYWR5IGhhdmUgYSBoYW5kbGUgb24gdGhlIGJhc2ljIHByaW5jaXBsZSwgYnV0IHRoZSBkZXRhaWxzIGFyZSBjcml0aWNhbC4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgVENQIHJlY2VpdmUgcGF0aCBhbmQgRE1BIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBlZGdlIGNhc2VzLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgY29kZSB0aGF0IGRlYWxzIHdpdGggdGhlIG1hcHBpbmcgYW5kIHVubWFwcGluZyBvZiB0aGUgRE1BIGJ1ZmZlcnMsIGhhbmRsaW5nIG9mIHBhcnRpYWwgcmVhZHMsIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBzaXR1YXRpb25zIHdoZW4gYnVmZmVyIHNwYWNlIGlzIGV4aGF1c3RlZC4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoZXkncmUgdGFraW5nIHRoZSB6ZXJvLWNvcHkgY29uY2VwdCBzZXJpb3VzbHkgb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29waWVzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSdtIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFzIHdlbGwsIGJlY2F1c2UgRE1BIGFuZCBUQ1AgY2FuIGhhcHBlbiBvbiBkaWZmZXJlbnQgY29udGV4dHMgc28gY29uY3VycmVuY3kgY29uY2VybnMgd2lsbCBzdXJlbHkgYmUgaW1wb3J0YW50LiBBbnkgc3VidGxlIGxvY2tpbmcgc3RyYXRlZ2llcywgb3IgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvIG9ic2VydmUuIExldCdzIHNlZSBob3cgdGhleSBkZWFsIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbmQgaG93IHRoZSBETUFCVUYgY29uY2VwdCBpcyByZWFsbHkgdXNlZCBpbiBpdHMgcmVsYXRpb24gdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzIG9mIHRoZSBwYWNrZXQgZGF0YS4gSSB3aWxsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBsb2dpYyB0aGF0IGlzIHBlcmZvcm1lZCBhdCB0aGUgZGV2aWNlIGRyaXZlciBlbmQuIFRoZW4sIEkgd2lsbCBleGFtaW5lIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlci1sZXZlbCBzb2NrZXQgbGF5ZXIgYW5kIG90aGVyIG5ldHdvcmsgc3RhY2sgY29tcG9uZW50cyB0byBlbnN1cmUgdGhhdCBpdCBpbnRlZ3JhdGVzIGNsZWFubHkgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODMxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowODowOC45NTgwMjk3ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1ODAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1ODA6XFx0XFxuMjU4MTpcXHRcXHRcXHQvKiBhZnRlciB0aGF0LCBzZW5kIGluZm9ybWF0aW9uIG9mIGRtYWJ1ZiBwYWdlcyB0aHJvdWdoIGFcXG4yNTgyOlxcdFxcdFxcdCAqIHNlcXVlbmNlIG9mIGNtc2dcXG4yNTgzOlxcdFxcdFxcdCAqL1xcbjI1ODQ6XFx0XFx0XFx0bWF4X2ZyYWdzID0gdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKHNrYiwgb2Zmc2V0LCByZW1haW5pbmdfbGVuKTtcXG4yNTg1OlxcdFxcbjI1ODY6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xcbjI1ODc6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZyA9IFxcdTAwMjZza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWZyYWdzW2ldO1xcbjI1ODg6XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9pb3YgKm5pb3Y7XFxuMjU4OTpcXHRcXHRcXHRcXHR1NjQgZnJhZ19vZmZzZXQ7XFxuMjU5MDpcXHRcXHRcXHRcXHRpbnQgZW5kO1xcbjI1OTE6XFx0XFxuMjU5MjpcXHRcXHRcXHRcXHQvKiAhc2tiX2ZyYWdzX3JlYWRhYmxlKCkgc2hvdWxkIGluZGljYXRlIHRoYXQgQUxMIHRoZVxcbjI1OTM6XFx0XFx0XFx0XFx0ICogZnJhZ3MgaW4gdGhpcyBza2IgYXJlIGRtYWJ1ZiBuZXRfaW92cy4gV2UncmUgY2hlY2tpbmdcXG4yNTk0OlxcdFxcdFxcdFxcdCAqIGZvciB0aGF0IGZsYWcgYWJvdmUsIGJ1dCBhbHNvIGNoZWNrIGluZGl2aWR1YWwgZnJhZ3NcXG4yNTk1OlxcdFxcdFxcdFxcdCAqIGhlcmUuIElmIHRoZSB0Y3Agc3RhY2sgaXMgbm90IHNldHRpbmdcXG4yNTk2OlxcdFxcdFxcdFxcdCAqIHNrYl9mcmFnc19yZWFkYWJsZSgpIGNvcnJlY3RseSwgd2Ugc3RpbGwgZG9uJ3Qgd2FudFxcbjI1OTc6XFx0XFx0XFx0XFx0ICogdG8gY3Jhc2ggaGVyZS5cXG4yNTk4OlxcdFxcdFxcdFxcdCAqL1xcbjI1OTk6XFx0XFx0XFx0XFx0aWYgKCFza2JfZnJhZ19uZXRfaW92KGZyYWcpKSB7XFxuMjYwMDpcXHRcXHRcXHRcXHRcXHRuZXRfZXJyX3JhdGVsaW1pdGVkKFxcXCJGb3VuZCBub24tZG1hYnVmIHNrYiB3aXRoIG5ldF9pb3ZcXFwiKTtcXG4yNjAxOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuMjYwMjpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4yNjAzOlxcdFxcdFxcdFxcdH1cXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0XFx0XFx0bmlvdiA9IHNrYl9mcmFnX25ldF9pb3YoZnJhZyk7XFxuMjYwNjpcXHRcXHRcXHRcXHRpZiAoIW5ldF9pc19kZXZtZW1faW92KG5pb3YpKSB7XFxuMjYwNzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI2MDg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjYwOTpcXHRcXHRcXHRcXHR9XFxuMjYxMDpcXHRcXG4yNjExOlxcdFxcdFxcdFxcdGVuZCA9IHN0YXJ0ICsgc2tiX2ZyYWdfc2l6ZShmcmFnKTtcXG4yNjEyOlxcdFxcdFxcdFxcdGNvcHkgPSBlbmQgLSBvZmZzZXQ7XFxuMjYxMzpcXHRcXG4yNjE0OlxcdFxcdFxcdFxcdGlmIChjb3B5IFxcdTAwM2UgMCkge1xcbjI2MTU6XFx0XFx0XFx0XFx0XFx0Y29weSA9IG1pbihjb3B5LCByZW1haW5pbmdfbGVuKTtcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0XFx0XFx0ZnJhZ19vZmZzZXQgPSBuZXRfaW92X3ZpcnR1YWxfYWRkcihuaW92KSArXFxuMjYxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBza2JfZnJhZ19vZmYoZnJhZykgKyBvZmZzZXQgLVxcbjI2MTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhcnQ7XFxuMjYyMDpcXHRcXHRcXHRcXHRcXHRkbWFidWZfY21zZy5mcmFnX29mZnNldCA9IGZyYWdfb2Zmc2V0O1xcbjI2MjE6XFx0XFx0XFx0XFx0XFx0ZG1hYnVmX2Ntc2cuZnJhZ19zaXplID0gY29weTtcXG4yNjIyOlxcdFxcdFxcdFxcdFxcdGVyciA9IHRjcF94YV9wb29sX3JlZmlsbChzaywgXFx1MDAyNnRjcF94YV9wb29sLFxcbjI2MjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG1heF9mcmFncyk7XFxuMjYyNDpcXHRcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjI2MjU6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjYyNjpcXHRcXG4yNjI3OlxcdFxcdFxcdFxcdFxcdC8qIFdpbGwgcGVyZm9ybSB0aGUgZXhjaGFuZ2UgbGF0ZXIgKi9cXG4yNjI4OlxcdFxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcXG4yNjI5OlxcdFxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XFxuMjYzMDpcXHRcXG4yNjMxOlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSBjb3B5O1xcbjI2MzI6XFx0XFx0XFx0XFx0XFx0cmVtYWluaW5nX2xlbiAtPSBjb3B5O1xcbjI2MzM6XFx0XFxuMjYzNDpcXHRcXHRcXHRcXHRcXHRlcnIgPSBwdXRfY21zZ19ub3RydW5jKG1zZywgU09MX1NPQ0tFVCxcXG4yNjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBTT19ERVZNRU1fRE1BQlVGLFxcbjI2MzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihkbWFidWZfY21zZyksXFxuMjYzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRtYWJ1Zl9jbXNnKTtcXG4yNjM4OlxcdFxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMjYzOTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MDguOTU4NDQzODUzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NDcyNDUyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBQYXRjaCdzIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGFkZHJlc3NpbmcuIEZpcnN0LCBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiBpdCDigJMgd2hhdCdzIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGl0J3MgZGVzaWduZWQgdG8gZml4PyBJIG5lZWQgdG8ga25vdyB0aGUgJ3doeScgYmVmb3JlIEkgY2FuIHJlYWxseSBncmFzcCB0aGUgJ2hvdy4nIFRoZSBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBkaXZpbmcgaW50byBgdGNwX3hhX3Bvb2xfcmVmaWxsYCBhbmQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0Y3BfeGFfcG9vbGAuIFRoZXNlIGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gY2FsbHMgdG8gZXhhbWluZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBmb3IgdGhlIGZpeC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWZpbGwgbWVjaGFuaXNtIHdvcmtzIGFuZCBob3cgdGhlIHBvb2wgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTAuODA1NjkzNzkzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDUwOlxcdFxcdFxcdFxcdCAgICAgKF9fZm9yY2Ugdm9pZCAqKXAtXFx1MDAzZW5ldG1lbXNbaV0sIEdGUF9LRVJORUwpO1xcbjI0NTE6XFx0XFx0LyogUm9sbGJhY2sgd2hhdCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLiAqL1xcbjI0NTI6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBwLVxcdTAwM2VtYXg7IGkrKylcXG4yNDUzOlxcdFxcdFxcdF9feGFfZXJhc2UoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBwLVxcdTAwM2V0b2tlbnNbaV0pO1xcbjI0NTQ6XFx0XFxuMjQ1NTpcXHRcXHRwLVxcdTAwM2VtYXggPSAwO1xcbjI0NTY6XFx0XFx0cC1cXHUwMDNlaWR4ID0gMDtcXG4yNDU3OlxcdH1cXG4yNDU4OlxcdFxcbjI0NTk6XFx0c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxcbjI0NjA6XFx0e1xcbjI0NjE6XFx0XFx0aWYgKCFwLVxcdTAwM2VtYXgpXFxuMjQ2MjpcXHRcXHRcXHRyZXR1cm47XFxuMjQ2MzpcXHRcXG4yNDY0OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDY1OlxcdFxcbjI0NjY6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ2NzpcXHRcXG4yNDY4OlxcdFxcdHhhX3VubG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MpO1xcbjI0Njk6XFx0fVxcbjI0NzA6XFx0XFxuMjQ3MTpcXHRzdGF0aWMgaW50IHRjcF94YV9wb29sX3JlZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcCxcXG4yNDcyOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBtYXhfZnJhZ3MpXFxuMjQ3MzpcXHR7XFxuMjQ3NDpcXHRcXHRpbnQgZXJyLCBrO1xcbjI0NzU6XFx0XFxuMjQ3NjpcXHRcXHRpZiAocC1cXHUwMDNlaWR4IFxcdTAwM2MgcC1cXHUwMDNlbWF4KVxcbjI0Nzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjQ3ODpcXHRcXG4yNDc5OlxcdFxcdHhhX2xvY2tfYmgoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzKTtcXG4yNDgwOlxcdFxcbjI0ODE6XFx0XFx0dGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzaywgcCk7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBtYXhfZnJhZ3M7IGsrKykge1xcbjI0ODQ6XFx0XFx0XFx0ZXJyID0gX194YV9hbGxvYyhcXHUwMDI2c2stXFx1MDAzZXNrX3VzZXJfZnJhZ3MsIFxcdTAwMjZwLVxcdTAwM2V0b2tlbnNba10sXFxuMjQ4NTpcXHRcXHRcXHRcXHRcXHQgWEFfWkVST19FTlRSWSwgeGFfbGltaXRfMzFiLCBHRlBfS0VSTkVMKTtcXG4yNDg2OlxcdFxcdFxcdGlmIChlcnIpXFxuMjQ4NzpcXHRcXHRcXHRcXHRicmVhaztcXG4yNDg4OlxcdFxcdH1cXG4yNDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowODoxMC44MDU5MTE2MTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2MDQ3NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHRjcF94YV9wb29sYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHN0cnVjdCB0Y3BfeGFfcG9vbGAuIFRoZSBmaXJzdCB0aGluZyBJIGFsd2F5cyBkbyBpcyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoLiBMZXQncyBmaXJlIHVwIGEgYGdyZXBgIGFuZCBzZWUgd2hlcmUgdGhpcyBzdHJ1Y3QgaXMgZGVmaW5lZCBhbmQgdXNlZC4gR290dGEgZ2V0IGEgZmVlbCBmb3IgaXRzIGNvbnRleHQsIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXA7IGtub3dpbmcgdGhlIGJhc2ljIHVzYWdlIHBhdHRlcm5zIHdpbGwgaW5mb3JtIHRoZSBkZWVwZXIgZGl2ZSBJJ2xsIG5lZWQgdG8gZG8gbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjA4OjEyLjY2NjM5MjE3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2ODk2NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjcF94YV9wb29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTI0MTQ9c3RhdGljIGludCB0Y3BfaW5xX2hpbnQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjQzNS0vKiBiYXRjaCBfX3hhX2FsbG9jKCkgY2FsbHMgYW5kIHJlZHVjZSB4YV9sb2NrKCkveGFfdW5sb2NrKCkgb3ZlcmhlYWQuICovXFxubmV0L2lwdjQvdGNwLmM6MjQzNjpzdHJ1Y3QgdGNwX3hhX3Bvb2wge1xcbm5ldC9pcHY0L3RjcC5jLTI0MzctXFx0dThcXHRcXHRtYXg7IC8qIG1heCBcXHUwMDNjPSBNQVhfU0tCX0ZSQUdTICovXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNDQyLVxcbm5ldC9pcHY0L3RjcC5jOjI0NDM6c3RhdGljIHZvaWQgdGNwX3hhX3Bvb2xfY29tbWl0X2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcXG5uZXQvaXB2NC90Y3AuYy0yNDQ0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTI0NTgtXFxubmV0L2lwdjQvdGNwLmM6MjQ1OTpzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnApXFxubmV0L2lwdjQvdGNwLmMtMjQ2MC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNDcwLVxcbm5ldC9pcHY0L3RjcC5jOjI0NzE6c3RhdGljIGludCB0Y3BfeGFfcG9vbF9yZWZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3hhX3Bvb2wgKnAsXFxubmV0L2lwdjQvdGNwLmMtMjQ3Mi1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbWF4X2ZyYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjUyNj1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTMwLVxcdHN0cnVjdCBkbWFidWZfY21zZyBkbWFidWZfY21zZyA9IHsgMCB9O1xcbm5ldC9pcHY0L3RjcC5jOjI1MzE6XFx0c3RydWN0IHRjcF94YV9wb29sIHRjcF94YV9wb29sO1xcbm5ldC9pcHY0L3RjcC5jLTI1MzItXFx0dW5zaWduZWQgaW50IG1heF9mcmFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTIuNzYyMDg3NzY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNDA4NDQ1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgb24sIHRoaW5raW5nIGFzIGlmIEknbSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBjb2RlIHNlY3Rpb24uXG5cbioqRGl2aW5nIGludG8gYG5ldC9pcHY0L3RjcC5jYCDigJMgTGluZXMgMjQzNS0yNDUwKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjQvdGNwLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMjQzNSB0byAyNDUwLiBJIGtub3cgdGhpcyBhcmVhIHByZXR0eSB3ZWxsOyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgZGF0YSB0cmFuc21pc3Npb24sIG9yIHBvdGVudGlhbGx5IGNvbmdlc3Rpb24gY29udHJvbCAtIEknbGwgY29uZmlybSB0aGF0IHF1aWNrbHkgYnkgc2Nhbm5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IGd1dCB0ZWxscyBtZSB3ZSBhcmUgbGlrZWx5IGluIGEgZmxvdyBjb250cm9sIGxvb3Agb3Igc29tZSBmb3JtIG9mIGNvbmdlc3Rpb24gY29udHJvbC4gSSBhbSBnb2luZyB0byBrZWVwIG15IG1lbnRhbCBtb2RlbCBhY3RpdmUgYXMgSSBzY2FuIHRocm91Z2ggdGhpcyBjb2RlLlxuXG5MZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29udGV4dCwgb2theSwgaXQgY29uZmlybXMgbXkgc3VzcGljaW9ucywgd2UncmUgbGlrZWx5IHdpdGhpbiBhIHNlZ21lbnQgdHJhbnNtaXNzaW9uIGxvb3AuIEkgYmV0IHRoaXMgc2VjdGlvbiBpcyBoYW5kbGluZyB0aGUgc2VuZGluZyBvZiBhIFRDUCBzZWdtZW50IGFuZCBlbnN1cmluZyBpdCBmaXRzIHdpdGhpbiBjZXJ0YWluIHBhcmFtZXRlcnMg4oCTIHBlcmhhcHMgY2hlY2tpbmcgd2luZG93IHNpemVzLCBjb25nZXN0aW9uIHdpbmRvd3MsIG9yIHNvbWUgb3RoZXIgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMgYmVmb3JlIHRoZSBwYWNrZXQgaXMgc2VudCB0byB0aGUgbmV0d29yay4gSSB3b3VsZCBleHBlY3Qgc29tZSBjYWxscyB0byBmdW5jdGlvbnMgcmVsYXRlZCB0byBzZW5kaW5nIHRoZSBkYXRhIHRvIHRoZSBpbnRlcmZhY2UsIHBlcmhhcHMgYHNrYl9zZW5kX3NrYCwgYHRjcF90cmFuc21pdF9za2JgLCBvciBzb21ldGhpbmcgc2ltaWxhci5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhpcy4gSSB3aWxsIGxvb2sgZm9yIGNhbGxzIHRvIHRoZSBrZXJuZWwgdGhhdCBjb25maXJtIG15IGd1ZXNzLiBJZiB0aGlzIGJsb2NrIGhhbmRsZXMgd2luZG93IGFkdmVydGlzZW1lbnQsIHRoZW4gdGhlcmUgd2lsbCBiZSBjYWxscyB0byBzdHJ1Y3R1cmVzIGRlYWxpbmcgd2l0aCByZWNlaXZlIHdpbmRvdyBtYW5hZ2VtZW50LiBJJ2xsIGJlIGFibGUgdG8gY29uZmlybSBteSBndWVzcyBiYXNlZCBvbiBhbnkgY29uZGl0aW9uYWxzIG9yIGNvbnRyb2wgc3RhdGVtZW50cy4gSSdtIHJlYWR5IHRvIGRpZyBpbiBhbmQgZGlzc2VjdCB3aGF0IHRoZXNlIGxpbmVzIGFyZSAqYWN0dWFsbHkqIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTUuODAyOTM1MTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzU6XFx0LyogYmF0Y2ggX194YV9hbGxvYygpIGNhbGxzIGFuZCByZWR1Y2UgeGFfbG9jaygpL3hhX3VubG9jaygpIG92ZXJoZWFkLiAqL1xcbjI0MzY6XFx0c3RydWN0IHRjcF94YV9wb29sIHtcXG4yNDM3OlxcdFxcdHU4XFx0XFx0bWF4OyAvKiBtYXggXFx1MDAzYz0gTUFYX1NLQl9GUkFHUyAqL1xcbjI0Mzg6XFx0XFx0dThcXHRcXHRpZHg7IC8qIGlkeCBcXHUwMDNjPSBtYXggKi9cXG4yNDM5OlxcdFxcdF9fdTMyXFx0XFx0dG9rZW5zW01BWF9TS0JfRlJBR1NdO1xcbjI0NDA6XFx0XFx0bmV0bWVtX3JlZlxcdG5ldG1lbXNbTUFYX1NLQl9GUkFHU107XFxuMjQ0MTpcXHR9O1xcbjI0NDI6XFx0XFxuMjQ0MzpcXHRzdGF0aWMgdm9pZCB0Y3BfeGFfcG9vbF9jb21taXRfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF94YV9wb29sICpwKVxcbjI0NDQ6XFx0e1xcbjI0NDU6XFx0XFx0aW50IGk7XFxuMjQ0NjpcXHRcXG4yNDQ3OlxcdFxcdC8qIENvbW1pdCBwYXJ0IHRoYXQgaGFzIGJlZW4gY29waWVkIHRvIHVzZXIgc3BhY2UuICovXFxuMjQ0ODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcC1cXHUwMDNlaWR4OyBpKyspXFxuMjQ0OTpcXHRcXHRcXHRfX3hhX2NtcHhjaGcoXFx1MDAyNnNrLVxcdTAwM2Vza191c2VyX2ZyYWdzLCBwLVxcdTAwM2V0b2tlbnNbaV0sIFhBX1pFUk9fRU5UUlksXFxuMjQ1MDpcXHRcXHRcXHRcXHQgICAgIChfX2ZvcmNlIHZvaWQgKilwLVxcdTAwM2VuZXRtZW1zW2ldLCBHRlBfS0VSTkVMKTtcXG4yNDUxOlxcdFxcdC8qIFJvbGxiYWNrIHdoYXQgaGFzIGJlZW4gcHJlLWFsbG9jYXRlZCBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKi9cXG4yNDUyOlxcdFxcdGZvciAoOyBpIFxcdTAwM2MgcC1cXHUwMDNlbWF4OyBpKyspXFxuMjQ1MzpcXHRcXHRcXHRfX3hhX2VyYXNlKFxcdTAwMjZzay1cXHUwMDNlc2tfdXNlcl9mcmFncywgcC1cXHUwMDNldG9rZW5zW2ldKTtcXG4yNDU0OlxcdFxcbjI0NTU6XFx0XFx0cC1cXHUwMDNlbWF4ID0gMDtcXG4yNDU2OlxcdFxcdHAtXFx1MDAzZWlkeCA9IDA7XFxuMjQ1NzpcXHR9XFxuMjQ1ODpcXHRcXG4yNDU5OlxcdHN0YXRpYyB2b2lkIHRjcF94YV9wb29sX2NvbW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfeGFfcG9vbCAqcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6MDg6MTUuODAzMTI5MDdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMTIzNjI3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYHRjcF9yZWN2bXNnX2RtYWJ1ZmAgUGF0Y2ggZm9yIEtNU0FOIE5lY2Vzc2l0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9yZWN2bXNnX2RtYWJ1ZmAsIGlzIGZvY3VzZWQgb24gd2hldGhlciBpdCB3YXJyYW50cyB0aGUgdXNlIG9mIEtNU0FOLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGEgbW9yZSBwcmVjaXNlIGNhbGN1bGF0aW9uIG9mIHRoZSBYQXJyYXkgcHJlLWFsbG9jYXRpb24gcG9vbCBzaXplLlxuXG5CZWZvcmUsIGl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgd2FzIHBvdGVudGlhbGx5IG92ZXItYWxsb2NhdGluZyB0b2tlbnMgYmFzZWQgb24gdGhlIHRvdGFsIG51bWJlciBvZiBmcmFnbWVudHMsIGV2ZW4gaWYgYHJlbWFpbmluZ19sZW5gICh0aGUgYW1vdW50IG9mIGRhdGEgYWN0dWFsbHkgdG8gYmUgY29waWVkKSBpbmRpY2F0ZWQgZmV3ZXIgd2VyZSBuZWVkZWQuIE9yLCBwZXJoYXBzLCB0aGVyZSB3YXMgYSBzY2VuYXJpbyB3aGVyZSB0aGUgY291bnQgcHJvdmlkZWQgdHJpZ2dlcmVkIHRoZSBlYXJseSBwcmVhbGxvY2F0aW9uIG9mIFhBIGVudHJpZXMuIFRoaXMgbmV3IHBhdGNoIGludHJvZHVjZXMgYHRjcF94YV9wb29sX21heF9mcmFncyhza2IsIG9mZnNldCwgcmVtYWluaW5nX2xlbilgIHRvIGRldGVybWluZSB0aGUgKmV4YWN0KiBudW1iZXIgb2YgZnJhZ21lbnRzIHJlcXVpcmVkLCBjYXBwZWQgYnkgYHJlbWFpbmluZ19sZW5gLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBhbmQgcmVmaW5lcyBtZW1vcnkgdXNhZ2UuXG5cbk15IGNvbmNlcm4gbmF0dXJhbGx5IHR1cm5zIHRvIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gTGV0J3MgZGlnIGluLiBJIHNlZSBgZG1hYnVmX2Ntc2dgIGlzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAsIGFuZCBpdHMgZmllbGRzIGFyZSB0aGVuIHBvcHVsYXRlZCB3aXRoaW4gdGhlIGxvb3AuIEV4YW1pbmluZyB0aGUgcmVsZXZhbnQgY29kZSwgYGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW5gIGlzIGFzc2lnbmVkIGZyb20gYHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdYC4gVG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IGluaXRpYWxpemF0aW9uIGlzc3VlcywgdGhlIHJlZmlsbCBmdW5jdGlvbiBvZiB0aGUgcG9vbCBpcyBjaGVja2VkLiBUaGUgaW5kZXggc3RhcnRzIGF0IGAwYC4gV2hlbiB0aGUgcG9vbCBpcyByZWZpbGxlZCwgaXQgcG9wdWxhdGVzIGBwLVx1MDAzZXRva2Vuc1swLi5rLTFdYCB1c2luZyBgX194YV9hbGxvY2AsIGFuZCB0aGVuIGBwLVx1MDAzZWlkeGAgaXMgcmVzZXQgdG8gMC4gU28gdGhlIHRva2VucyBhcmUgd3JpdHRlbiBiZWZvcmUgdGhlIHJlYWQuIFRoZSBvdGhlciBwYXJ0IGlzIHZlcmlmeWluZyB0aGUgYHRjcF94YV9wb29sX21heF9mcmFnc2AgZnVuY3Rpb24uICBJdCdzIHByZXR0eSBzaW1wbGUgYW5kIG9ubHkgY29tcHV0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWdtZW50cywgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cbk5vdywgbGV0J3Mgc3lzdGVtYXRpY2FsbHkgY2hlY2sgZm9yIGNvbW1vbiBtZW1vcnkgc2FmZXR5IHJpc2tzOlxuXG4xLiAgKipVbmluaXRpYWxpemVkIGRhdGEgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2U/KiogTm8sIHRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgYWxsIGl0cyBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgc2V0IGJlZm9yZSBiZWluZyBwYXNzZWQsIHNvIHRoYXQncyBjb3ZlcmVkLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIHNlZSBubyBldmlkZW5jZSBvZiB0aGlzLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vOyB0aGUgbG9naWMgYXBwZWFycyBzb3VuZCwgYW5kIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8qKiBObywgdGhlIGZvY3VzIGlzIG9uIG9wdGltaXppbmcgYSBmcmFnbWVudCBwcmUtYWxsb2NhdGlvbiBjYWxjdWxhdGlvbiByYXRoZXIgdGhhbiBtb2RpZnlpbmcgYnVmZmVyIGFjY2Vzcy5cblxuR2l2ZW4gdGhlc2UgY29uc2lkZXJhdGlvbnMsIEkgZG9uJ3Qgc2VlIGFueSBzY2VuYXJpb3Mgd2hlcmUgS01TQU4gd291bGQgYmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIG9yIHByb3ZpZGUgc2lnbmlmaWNhbnQgYWRkZWQgdmFsdWUgb3ZlciBLQVNBTiBhbmQgc3RhbmRhcmQgZnV6emluZyBhbmQgZGVidWcgYnVpbGRzLiBUaGUgcGF0Y2ggY2VudGVycyBhcm91bmQgYSBtb3JlIGVmZmljaWVudCBwcmUtYWxsb2NhdGlvbiBzdHJhdGVneSB3aXRoaW4gYSB3ZWxsLWRlZmluZWQgYW5kIGhhbmRsZWQgY29udGV4dC4gS0FTQU4gaXMgZnVsbHkgZXF1aXBwZWQgdG8gZGV0ZWN0IGFueSBpbnRyb2R1Y2VkIG9yIHVuY292ZXJlZCBsb2dpYyBlcnJvcnMsIGJvdW5kcyBpc3N1ZXMsIG9yIFVBRnMuIFRoZXJlIGFyZSBubyBrbm93biByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgS0FTQU4vZGVidWcgYnVpbGRzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMyLCJPdXRwdXRUb2tlbnMiOjIzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjowODoyNi4wMTU0OTQ2NTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGhlbHBlciBmdW5jdGlvbiBgdGNwX3hhX3Bvb2xfbWF4X2ZyYWdzKClgIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRlbGl2ZXJhYmxlIGZyYWdtZW50cyBib3VuZGVkIGJ5IGByZW1haW5pbmdfbGVuYCwgYW5kIHBhc3NlcyB0aGlzIHZhbHVlIGludG8gYHRjcF94YV9wb29sX3JlZmlsbCgpYCBpbnN0ZWFkIG9mIG92ZXItYWxsb2NhdGluZyBiYXNlZCBvbiByZW1haW5pbmcgYG5yX2ZyYWdzYC5cXG5cXG5BbGwgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gYHRjcF94YV9wb29sX21heF9mcmFncygpYCBhbmQgYHRjcF9yZWN2bXNnX2RtYWJ1ZigpYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGBkbWFidWZfY21zZ2Agc3RydWN0dXJlIHNlbnQgdG8gdXNlcnNwYWNlIGNvbnRpbnVlcyB0byBiZSB6ZXJvLWluaXRpYWxpemVkIChgZG1hYnVmX2Ntc2cgPSB7IDAgfWApLCBhbmQgYHRjcF94YV9wb29sLnRva2Vuc2AgZW50cmllcyBhcmUgd3JpdHRlbiBieSBgX194YV9hbGxvYygpYCBwcmlvciB0byBiZWluZyByZWFkIGFuZCBhc3NpZ25lZCBpbnRvIHRoZSBjbXNnLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGFuZCBzdGFuZGFyZCBLQVNBTi9kZWJ1ZyB0b29scyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBoZWxwZXIgZnVuY3Rpb24gYHRjcF94YV9wb29sX21heF9mcmFncygpYCB0byBjYWxjdWxhdGUgdGhlIGV4YWN0IG51bWJlciBvZiBkZWxpdmVyYWJsZSBmcmFnbWVudHMgYm91bmRlZCBieSBgcmVtYWluaW5nX2xlbmAsIGFuZCBwYXNzZXMgdGhpcyB2YWx1ZSBpbnRvIGB0Y3BfeGFfcG9vbF9yZWZpbGwoKWAgaW5zdGVhZCBvZiBvdmVyLWFsbG9jYXRpbmcgYmFzZWQgb24gcmVtYWluaW5nIGBucl9mcmFnc2AuXFxuXFxuQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIGB0Y3BfeGFfcG9vbF9tYXhfZnJhZ3MoKWAgYW5kIGB0Y3BfcmVjdm1zZ19kbWFidWYoKWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBgZG1hYnVmX2Ntc2dgIHN0cnVjdHVyZSBzZW50IHRvIHVzZXJzcGFjZSBjb250aW51ZXMgdG8gYmUgemVyby1pbml0aWFsaXplZCAoYGRtYWJ1Zl9jbXNnID0geyAwIH1gKSwgYW5kIGB0Y3BfeGFfcG9vbC50b2tlbnNgIGVudHJpZXMgYXJlIHdyaXR0ZW4gYnkgYF9feGFfYWxsb2MoKWAgcHJpb3IgdG8gYmVpbmcgcmVhZCBhbmQgYXNzaWduZWQgaW50byB0aGUgY21zZy5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZCBhbmQgc3RhbmRhcmQgS0FTQU4vZGVidWcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwrdkv[1] Phase: Succeeded StartedAt: 2026-09-03 22:08:36 +0000 UTC FinishedAt: 2026-09-03 22:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 22:08:36 +0000 UTC FinishedAt: 2026-09-03 22:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2] Phase: Succeeded StartedAt: 2026-09-03 22:08:36 +0000 UTC FinishedAt: 2026-09-04 01:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 22:08:36 +0000 UTC FinishedAt: 2026-09-04 01:51:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 22:08:36 +0000 UTC FinishedAt: 2026-09-03 22:08:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 22:08:36 +0000 UTC FinishedAt: 2026-09-03 22:08:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwrdkv/series-workflowwrdkv-convert-artifact-571956835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 22:08:47 +0000 UTC FinishedAt: 2026-09-03 22:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 22:08:47 +0000 UTC FinishedAt: 2026-09-03 22:26:21 +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:*0808e6f2-12a5-43f7-b065-e0c5fbfb888f,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-workflowwrdkv/series-workflowwrdkv-convert-artifact-571956835/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": "215f8082-b129-4c4a-95d7-b62f4b3d8694", "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-workflowwrdkv/series-workflowwrdkv-build-action-3795024337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 22:08:47 +0000 UTC FinishedAt: 2026-09-03 22:26:11 +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:*0808e6f2-12a5-43f7-b065-e0c5fbfb888f,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-workflowwrdkv/series-workflowwrdkv-convert-artifact-571956835/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": "215f8082-b129-4c4a-95d7-b62f4b3d8694", "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-workflowwrdkv/series-workflowwrdkv-build-action-3795024337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 22:26:21 +0000 UTC FinishedAt: 2026-09-03 22:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 22:26:21 +0000 UTC FinishedAt: 2026-09-03 22:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 22:26:21 +0000 UTC FinishedAt: 2026-09-03 22:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 22:26:21 +0000 UTC FinishedAt: 2026-09-03 22:26:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwrdkv/series-workflowwrdkv-convert-artifact-251702938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 22:26:32 +0000 UTC FinishedAt: 2026-09-03 22:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 22:26:32 +0000 UTC FinishedAt: 2026-09-03 22:28:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*215f8082-b129-4c4a-95d7-b62f4b3d8694,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-workflowwrdkv/series-workflowwrdkv-build-action-3795024337/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-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 22:28:35 +0000 UTC FinishedAt: 2026-09-03 22:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 22:28:35 +0000 UTC FinishedAt: 2026-09-03 22:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 22:28:35 +0000 UTC FinishedAt: 2026-09-03 22:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 22:28:35 +0000 UTC FinishedAt: 2026-09-03 22:46:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0808e6f2-12a5-43f7-b065-e0c5fbfb888f,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-workflowwrdkv/series-workflowwrdkv-convert-artifact-251702938/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": "2ac08589-fa3b-4dc7-bcc4-17f9cebbd8b5", "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-workflowwrdkv/series-workflowwrdkv-build-action-629693054/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 22:28:35 +0000 UTC FinishedAt: 2026-09-03 22:46:02 +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:*0808e6f2-12a5-43f7-b065-e0c5fbfb888f,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-workflowwrdkv/series-workflowwrdkv-convert-artifact-251702938/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": "2ac08589-fa3b-4dc7-bcc4-17f9cebbd8b5", "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-workflowwrdkv/series-workflowwrdkv-build-action-629693054/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 22:46:12 +0000 UTC FinishedAt: 2026-09-03 22:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 22:46:12 +0000 UTC FinishedAt: 2026-09-03 22:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 22:46:12 +0000 UTC FinishedAt: 2026-09-03 22:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 22:46:12 +0000 UTC FinishedAt: 2026-09-03 22:47:50 +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:*2ac08589-fa3b-4dc7-bcc4-17f9cebbd8b5,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-workflowwrdkv/series-workflowwrdkv-build-action-629693054/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-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-04 01:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-04 01:51:12 +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":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"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:*215f8082-b129-4c4a-95d7-b62f4b3d8694,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ac08589-fa3b-4dc7-bcc4-17f9cebbd8b5,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-workflowwrdkv/series-workflowwrdkv-build-action-3795024337/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-workflowwrdkv/series-workflowwrdkv-build-action-629693054/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-03 22:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-03 22:48:05 +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":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"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-workflowwrdkv/series-workflowwrdkv-convert-artifact-164212815/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-03 22:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-03 22:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 22:48:00 +0000 UTC FinishedAt: 2026-09-03 22:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 22:48:10 +0000 UTC FinishedAt: 2026-09-04 01:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrdkv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_xa_pool_max_frags","tcp_recvmsg_dmabuf","tcp_xa_pool_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"06e9cce0-22f0-42b0-a553-d105cecf4c06","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 22:48:10 +0000 UTC FinishedAt: 2026-09-04 01:51:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*215f8082-b129-4c4a-95d7-b62f4b3d8694,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ac08589-fa3b-4dc7-bcc4-17f9cebbd8b5,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-workflowwrdkv/series-workflowwrdkv-build-action-3795024337/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-workflowwrdkv/series-workflowwrdkv-build-action-629693054/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-workflowwrdkv/series-workflowwrdkv-convert-artifact-164212815/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,}