Name: series-workflow24ks5 Phase: Succeeded StartedAt: 2026-09-06 15:04:26 +0000 UTC FinishedAt: 2026-09-06 19:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[0] Phase: Succeeded StartedAt: 2026-09-06 15:04:26 +0000 UTC FinishedAt: 2026-09-06 15:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 15:04:26 +0000 UTC FinishedAt: 2026-09-06 15:23:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ed57836ff3000d5c8b889e04153efec88102311f", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ed57836ff3000d5c8b889e04153efec88102311f", "config_name": "upstream-apparmor-kasan.config", "series_id": "e0be0f6c-8311-424f-b7e6-0a91ffdb20b1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__purge_vmap_area_lazy", "purge_vmap_node", "schedule_drain_vmap_work", "free_vmap_area_noflush", "drain_vmap_area_work", "reclaim_and_purge_vmap_areas" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wdXJnZV92bWFwX2FyZWFfbGF6eSYjMzQ7LAogICAgJiMzNDtwdXJnZV92bWFwX25vZGUmIzM0OywKICAgICYjMzQ7c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrJiMzNDssCiAgICAmIzM0O2ZyZWVfdm1hcF9hcmVhX25vZmx1c2gmIzM0OywKICAgICYjMzQ7ZHJhaW5fdm1hcF9hcmVhX3dvcmsmIzM0OywKICAgICYjMzQ7cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaW4gbW0vdm1hbGxvYy5jIGJ5IGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxIGFuZCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZXBsYWNpbmcgdGhlIHN0YXRpYyBjcHVtYXNrIHRyYWNraW5nIHdpdGggYSBwZXItbm9kZSBib29sZWFuIGZsYWcgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB3aGVuIHNjaGVkdWxpbmcgcHVyZ2Ugam9icy5cblxuVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbHRlcmF0aW9ucyB0byBidWZmZXIgYm91bmRzL2RhdGEgc2l6ZXMuIFRoZSBib29sZWFuIGZsYWcgYHdvcmtfcXVldWVkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIGVhY2ggaXRlcmF0aW9uIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZWN5Y2xlLCBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS92bWFsbG9jLmMsIGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxLCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZWZhY3RvcmluZyB0aGUgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIGFuZCBub2RlIGRyYWluaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjIzOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggYmVhOWY3NmVkN2U3NC4uODljMzI3YTZjZTdkOSAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtOTcyLDYgJiM0Mzs5NzIsNyBAQCBzdGF0aWMgc3RydWN0IHZtYXBfbm9kZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVyZ2Vfd29yaztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkO1xuJiM0MztcdGJvb2wgd29ya19xdWV1ZWQ7XG4gfSBzaW5nbGU7XG4gXG4gLypcbkBAIC0xMDkwLDYgJiM0MzsxMDkxLDggQEAgc3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKTtcbiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRCh2bWFwX25vdGlmeV9saXN0KTtcbiBzdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyBERUNMQVJFX1dPUksoZHJhaW5fdm1hcF93b3JrLCBkcmFpbl92bWFwX2FyZWFfd29yayk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF9oZWxwZXJzX3dxO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3ZtYXBfd3E7XG4gXG4gc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIGF0b21pY19sb25nX3Qgdm1hcF9sYXp5X25yO1xuIFxuQEAgLTIzNTEsNiAmIzQzOzIzNTQsMTYgQEAgc3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXHUwMDI2bG9jYWxfbGlzdCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbFxuJiM0MztzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLFxuJiM0MztcdFx0c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHdxKVxuJiM0MztcdFx0cmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLlxuICAqL1xuQEAgLTIzNTgsMTkgJiM0MzsyMzcxLDEyIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXMgPSAwO1xuIFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7XG4tXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xuLVx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4tXHRpbnQgaTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbiBcbi1cdC8qXG4tXHQgKiBVc2UgY3B1bWFzayB0byBtYXJrIHdoaWNoIG5vZGUgaGFzIHRvIGJlIHByb2Nlc3NlZC5cbi1cdCAqL1xuLVx0cHVyZ2Vfbm9kZXMgPSBDUFVfTUFTS19OT05FO1xuLVxuIFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QpO1xuIFx0XHR2bi1cdTAwM2Vza2lwX3BvcHVsYXRlID0gZnVsbF9wb29sX2RlY2F5O1xuQEAgLTIzOTAsMTAgJiM0MzsyMzk2LDkgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ZW5kID0gbWF4KGVuZCwgbGlzdF9sYXN0X2VudHJ5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QsXG4gXHRcdFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXHUwMDNldmFfZW5kKTtcbiBcbi1cdFx0Y3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCBcdTAwMjZwdXJnZV9ub2Rlcyk7XG4mIzQzO1x0XHRucl9wdXJnZV9ub2RlcyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHRucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KFx1MDAyNnB1cmdlX25vZGVzKTtcbiBcdGlmIChucl9wdXJnZV9ub2RlcyBcdTAwM2UgMCkge1xuIFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xuIFxuQEAgLTI0MDEsMjkgJiM0MzsyNDA2LDMxIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuIFx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4gXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbiYjNDM7XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuJiM0MztcdFx0XHR2bi1cdTAwM2V3b3JrX3F1ZXVlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbiBcdFx0XHRcdElOSVRfV09SSyhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xuJiM0MztcdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxuJiM0MztcdFx0XHRcdFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuIFxuLVx0XHRcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSlcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29ya19vbihpLCBcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdGVsc2Vcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cbi1cdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jID0gTlVMTDtcbi1cdFx0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuJiM0MztcdFx0XHRcdGlmICh2bi1cdTAwM2V3b3JrX3F1ZXVlZCkge1xuJiM0MztcdFx0XHRcdFx0bnJfcHVyZ2VfaGVscGVycy0tO1xuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0fVxuIFxuLVx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbi1cdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4mIzQzO1x0XHRcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xuJiM0MztcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4mIzQzO1x0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuJiM0MztcdFx0fVxuIFxuLVx0XHRcdGlmICh2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMpIHtcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cbiYjNDM7XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuJiM0MztcdFx0XHRpZiAodm4tXHUwMDNld29ya19xdWV1ZWQpIHtcbiBcdFx0XHRcdGZsdXNoX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4gXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbiBcdFx0XHR9XG5AQCAtMjQ4Nyw3ICYjNDM7MjQ5NCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm1hcF9hcmVhX25vZmx1c2goc3RydWN0IHZtYXBfYXJlYSAqdmEpXG4gXG4gXHQvKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBtYXkgZnJlZSB2YSBhdCBhbnkgdGltZSAqL1xuIFx0aWYgKHVubGlrZWx5KG5yX2xhenkgXHUwMDNlIG5yX2xhenlfbWF4KSlcbi1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZkcmFpbl92bWFwX3dvcmspO1xuJiM0MztcdFx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFJFQURfT05DRShkcmFpbl92bWFwX3dxKSxcbiYjNDM7XHRcdFx0XHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbiB9XG4gXG4gLypcbkBAIC01NTg3LDMgJiM0Mzs1NTk1LDIwIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxuIFx0dm1hcF9ub2RlX3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHZtYXBfbm9kZV9zaHJpbmtfc2NhbjtcbiBcdHNocmlua2VyX3JlZ2lzdGVyKHZtYXBfbm9kZV9zaHJpbmtlcik7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU07XG4mIzQzO1xuJiM0MztcdGRyYWluX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O3ZtYXBfZHJhaW5cJiMzNDssIGZsYWdzLCAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0UoZHJhaW5fd3EgPT0gTlVMTCk7XG4mIzQzO1x0V1JJVEVfT05DRShkcmFpbl92bWFwX3dxLCBkcmFpbl93cSk7XG4mIzQzO1xuJiM0MztcdGhlbHBlcnNfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7dm1hcF9kcmFpbl9oZWxwZXJzXCYjMzQ7LCBmbGFncywgMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKGhlbHBlcnNfd3EgPT0gTlVMTCk7XG4mIzQzO1x0V1JJVEVfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EsIGhlbHBlcnNfd3EpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9pbml0Y2FsbCh2bWFsbG9jX2luaXRfd29ya3F1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcHVyZ2Vfdm1hcF9hcmVhX2xhenkmIzM0OywKICAgICYjMzQ7cHVyZ2Vfdm1hcF9ub2RlJiMzNDssCiAgICAmIzM0O3NjaGVkdWxlX2RyYWluX3ZtYXBfd29yayYjMzQ7LAogICAgJiMzNDtmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoJiMzNDssCiAgICAmIzM0O2RyYWluX3ZtYXBfYXJlYV93b3JrJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS92bWFsbG9jLmMsIGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxLCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZWZhY3RvcmluZyB0aGUgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIGFuZCBub2RlIGRyYWluaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE1OjIzOjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGJlYTlmNzZlZDdlNzQuLjg5YzMyN2E2Y2U3ZDkgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTk3Miw2ICYjNDM7OTcyLDcgQEAgc3RhdGljIHN0cnVjdCB2bWFwX25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgcHVyZ2VfbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVyZ2Vfd29yazsKIAl1bnNpZ25lZCBsb25nIG5yX3B1cmdlZDsKJiM0MzsJYm9vbCB3b3JrX3F1ZXVlZDsKIH0gc2luZ2xlOwogCiAvKgpAQCAtMTA5MCw2ICYjNDM7MTA5MSw4IEBAIHN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZCk7CiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRCh2bWFwX25vdGlmeV9saXN0KTsKIHN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgREVDTEFSRV9XT1JLKGRyYWluX3ZtYXBfd29yaywgZHJhaW5fdm1hcF9hcmVhX3dvcmspOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF9oZWxwZXJzX3dxOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF93cTsKIAogc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIGF0b21pY19sb25nX3Qgdm1hcF9sYXp5X25yOwogCkBAIC0yMzUxLDYgJiM0MzsyMzU0LDE2IEBAIHN0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfbm9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcmVjbGFpbV9saXN0X2dsb2JhbCgmYW1wO2xvY2FsX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIGJvb2wKJiM0MztzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLAomIzQzOwkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJaWYgKHdxKQomIzQzOwkJcmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoKICAqIFB1cmdlcyBhbGwgbGF6aWx5LWZyZWVkIHZtYXAgYXJlYXMuCiAgKi8KQEAgLTIzNTgsMTkgJiM0MzsyMzcxLDEyIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWJvb2wgZnVsbF9wb29sX2RlY2F5KQogewogCXVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDsKIAl1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVyczsKLQlzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzOwotCXVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlczsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKLQlpbnQgaTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2bWFwX3B1cmdlX2xvY2spOwogCi0JLyoKLQkgKiBVc2UgY3B1bWFzayB0byBtYXJrIHdoaWNoIG5vZGUgaGFzIHRvIGJlIHByb2Nlc3NlZC4KLQkgKi8KLQlwdXJnZV9ub2RlcyA9IENQVV9NQVNLX05PTkU7Ci0KIAlmb3JfZWFjaF92bWFwX25vZGUodm4pIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt2bi0mZ3Q7cHVyZ2VfbGlzdCk7CiAJCXZuLSZndDtza2lwX3BvcHVsYXRlID0gZnVsbF9wb29sX2RlY2F5OwpAQCAtMjM5MCwxMCAmIzQzOzIzOTYsOSBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQllbmQgPSBtYXgoZW5kLCBsaXN0X2xhc3RfZW50cnkoJmFtcDt2bi0mZ3Q7cHVyZ2VfbGlzdCwKIAkJCXN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLSZndDt2YV9lbmQpOwogCi0JCWNwdW1hc2tfc2V0X2NwdShub2RlX3RvX2lkKHZuKSwgJmFtcDtwdXJnZV9ub2Rlcyk7CiYjNDM7CQlucl9wdXJnZV9ub2RlcyYjNDM7JiM0Mzs7CiAJfQogCi0JbnJfcHVyZ2Vfbm9kZXMgPSBjcHVtYXNrX3dlaWdodCgmYW1wO3B1cmdlX25vZGVzKTsKIAlpZiAobnJfcHVyZ2Vfbm9kZXMgJmd0OyAwKSB7CiAJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7CiAKQEAgLTI0MDEsMjkgJiM0MzsyNDA2LDMxIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCW5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKCZhbXA7dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7CiAJCW5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTsKIAotCQlmb3JfZWFjaF9jcHUoaSwgJmFtcDtwdXJnZV9ub2RlcykgewotCQkJdm4gPSAmYW1wO3ZtYXBfbm9kZXNbaV07CiYjNDM7CQlmb3JfZWFjaF92bWFwX25vZGUodm4pIHsKJiM0MzsJCQl2bi0mZ3Q7d29ya19xdWV1ZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCQlpZiAobGlzdF9lbXB0eSgmYW1wO3ZuLSZndDtwdXJnZV9saXN0KSkKJiM0MzsJCQkJY29udGludWU7CiAKIAkJCWlmIChucl9wdXJnZV9oZWxwZXJzICZndDsgMCkgewogCQkJCUlOSVRfV09SSygmYW1wO3ZuLSZndDtwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpOwomIzQzOwkJCQl2bi0mZ3Q7d29ya19xdWV1ZWQgPSBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoCiYjNDM7CQkJCQlSRUFEX09OQ0UoZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSwgJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7CiAKLQkJCQlpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKQotCQkJCQlzY2hlZHVsZV93b3JrX29uKGksICZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCQkJCWVsc2UKLQkJCQkJc2NoZWR1bGVfd29yaygmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQotCQkJCW5yX3B1cmdlX2hlbHBlcnMtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJdm4tJmd0O3B1cmdlX3dvcmsuZnVuYyA9IE5VTEw7Ci0JCQkJcHVyZ2Vfdm1hcF9ub2RlKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCQkJCW5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tJmd0O25yX3B1cmdlZDsKJiM0MzsJCQkJaWYgKHZuLSZndDt3b3JrX3F1ZXVlZCkgewomIzQzOwkJCQkJbnJfcHVyZ2VfaGVscGVycy0tOwomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCX0KIAkJCX0KLQkJfQogCi0JCWZvcl9lYWNoX2NwdShpLCAmYW1wO3B1cmdlX25vZGVzKSB7Ci0JCQl2biA9ICZhbXA7dm1hcF9ub2Rlc1tpXTsKJiM0MzsJCQkvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi8KJiM0MzsJCQlwdXJnZV92bWFwX25vZGUoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7CiYjNDM7CQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwomIzQzOwkJfQogCi0JCQlpZiAodm4tJmd0O3B1cmdlX3dvcmsuZnVuYykgewomIzQzOwkJLyogV2FpdCBmb3IgY29tcGxldGlvbiBpZiBxdWV1ZWQgYW55LiAqLwomIzQzOwkJZm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7CiYjNDM7CQkJaWYgKHZuLSZndDt3b3JrX3F1ZXVlZCkgewogCQkJCWZsdXNoX3dvcmsoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7CiAJCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwogCQkJfQpAQCAtMjQ4Nyw3ICYjNDM7MjQ5NCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm1hcF9hcmVhX25vZmx1c2goc3RydWN0IHZtYXBfYXJlYSAqdmEpCiAKIAkvKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBtYXkgZnJlZSB2YSBhdCBhbnkgdGltZSAqLwogCWlmICh1bmxpa2VseShucl9sYXp5ICZndDsgbnJfbGF6eV9tYXgpKQotCQlzY2hlZHVsZV93b3JrKCZhbXA7ZHJhaW5fdm1hcF93b3JrKTsKJiM0MzsJCXNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksCiYjNDM7CQkJJmFtcDtkcmFpbl92bWFwX3dvcmspOwogfQogCiAvKgpAQCAtNTU4NywzICYjNDM7NTU5NSwyMCBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKIAl2bWFwX25vZGVfc2hyaW5rZXItJmd0O3NjYW5fb2JqZWN0cyA9IHZtYXBfbm9kZV9zaHJpbmtfc2NhbjsKIAlzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHZtYWxsb2NfaW5pdF93b3JrcXVldWUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl93cSwgKmhlbHBlcnNfd3E7CiYjNDM7CXVuc2lnbmVkIGludCBmbGFncyA9IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTTsKJiM0MzsKJiM0MzsJZHJhaW5fd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDt2bWFwX2RyYWluJiMzNDssIGZsYWdzLCAwKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGRyYWluX3dxID09IE5VTEwpOwomIzQzOwlXUklURV9PTkNFKGRyYWluX3ZtYXBfd3EsIGRyYWluX3dxKTsKJiM0MzsKJiM0MzsJaGVscGVyc193cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3ZtYXBfZHJhaW5faGVscGVycyYjMzQ7LCBmbGFncywgMCk7CiYjNDM7CVdBUk5fT05fT05DRShoZWxwZXJzX3dxID09IE5VTEwpOwomIzQzOwlXUklURV9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSwgaGVscGVyc193cSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztlYXJseV9pbml0Y2FsbCh2bWFsbG9jX2luaXRfd29ya3F1ZXVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGl2aW5nIGludG8gYG1tL3ZtYWxsb2MuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2Ug4oCTIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBpbnRlcmVzdGluZy4KClNvLCB0aGUga2V5IGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB3b3JrcXVldWVzIGZvciB2bWFwIGRyYWluaW5nLiBXZSYjMzk7dmUgZ290IHR3byBuZXcgd29ya3F1ZXVlczogYGRyYWluX3ZtYXBfaGVscGVyc193cWAgYW5kIGBkcmFpbl92bWFwX3dxYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCByZXBsYWNpbmcgc29tZSBleGlzdGluZyBDUFUgbWFzayBsb2dpYyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgd2l0aCBhIGBmb3JfZWFjaF92bWFwX25vZGVgIGxvb3AgYW5kIHRoZW4gcXVldWluZyB3b3JrIHRvIHRoZXNlIHdvcmtxdWV1ZXMgdXNpbmcgYHNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya2AuIFdlIGFsc28gc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgd29ya19xdWV1ZWRgIGZsYWcgd2l0aGluIHRoZSBgdm1hcF9ub2RlYCBzdHJ1Y3R1cmUuIEFkZGl0aW9uYWxseSwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgIGlzIG5vdyBzY2hlZHVsaW5nIHdvcmsgYXMgd2VsbC4gRmluYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgYHZtYWxsb2NfaW5pdF93b3JrcXVldWVgIHRvIHNldCB1cCB0aGUgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgd2l0aCB0aGUgYFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTWAgZmxhZ3MuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgcnVsZSBzZXQuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIGBtbS92bWFsbG9jLmNgIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGUgJiMzNDttZW1vcnkgbWFuYWdlbWVudCYjMzQ7IGNhdGVnb3J5IOKAkyB0aGF0JiMzOTtzIGEgZGlyZWN0IGhpdC4gSXQmIzM5O3MgZXhlY3V0YWJsZSBjb2RlLCBhbmQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB2bWFsbG9jIGFyZWEgcHVyZ2luZyBhbmQgd29ya3F1ZXVlIGhhbmRsaW5nLCB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMuIEdpdmVuIHRoZSBjb3JlIHN1YnN5c3RlbSBpbnZvbHZlbWVudCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbiByZWxhdGVkIHRvIHdvcmtxdWV1ZSBpbnRlcmFjdGlvbnMsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZSwgc28gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbW0vdm1hbGxvYy5jYCBhbmQgS2NvbmZpZy4gR2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZG9pbmcgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBpbnNpZ2h0IGludG8gdGhlIHBvc3NpYmxlIGltcGFjdHMgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0yMzU4PXNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsXG4tLVxubW0vdm1hbGxvYy5jLTIzNjktICovXG5tbS92bWFsbG9jLmM6MjM3MDpzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1hbGxvYy5jLTIzNzEtXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuLS1cbm1tL3ZtYWxsb2MuYz0yNDQ3PXN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZClcbi0tXG5tbS92bWFsbG9jLmMtMjQ1MS1cdHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTtcbm1tL3ZtYWxsb2MuYzoyNDUyOlx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xubW0vdm1hbGxvYy5jLTI0NTMtXHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbi0tXG5tbS92bWFsbG9jLmM9MjQ1Nj1zdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTI0NTgtXHRtdXRleF9sb2NrKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG5tbS92bWFsbG9jLmM6MjQ1OTpcdF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoVUxPTkdfTUFYLCAwLCBmYWxzZSk7XG5tbS92bWFsbG9jLmMtMjQ2MC1cdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuLS1cbm1tL3ZtYWxsb2MuYz0yOTczPXN0YXRpYyB2b2lkIF92bV91bm1hcF9hbGlhc2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmx1c2gpXG4tLVxubW0vdm1hbGxvYy5jLTMwMTktXG5tbS92bWFsbG9jLmM6MzAyMDpcdGlmICghX19wdXJnZV92bWFwX2FyZWFfbGF6eShzdGFydCwgZW5kLCBmYWxzZSkgXHUwMDI2XHUwMDI2IGZsdXNoKVxubW0vdm1hbGxvYy5jLTMwMjEtXHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg1MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gdm1hbGxvYy5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgY29uY2VudHJhdGVkIGFyZWEgb2Ygd29yayBhcm91bmQgdm1hcCBhcmVhIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHB1cmdpbmcgYW5kIGZyZWVpbmcgb3BlcmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbjogYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLCBgcHVyZ2Vfdm1hcF9ub2RlYCwgdGhlIGhlbHBlciBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGFuIGVmZm9ydCB0byBpbXByb3ZlIHRoZSBlZmZpY2llbmN5IG9yIHJvYnVzdG5lc3Mgb2YgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCwgcG9zc2libHkgYWRkcmVzc2luZyBpc3N1ZXMgYXJvdW5kIGZyYWdtZW50YXRpb24gb3IgbGF0ZW5jeSB3aGVuIHJlY2xhaW1pbmcgdm1hbGxvYyYjMzk7ZCByZWdpb25zLiBJIGFsc28gbm90aWNlZCBgdm1fdW5tYXBfYWxpYXNlc2AgYW5kIGl0cyBpbnRlcm5hbCB2YXJpYW50IGBfdm1fdW5tYXBfYWxpYXNlc2AgaW4gdGhlIG1peC4gRmluYWxseSwgSSYjMzk7dmUgZ290IGB2bWFsbG9jX2luaXRfd29ya3F1ZXVlYCwgYnV0IHRoYXQmIzM5O3MganVzdCBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHBhcnQgb2YgdGhlIGNvcmUgY2hhbmdlcy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICppbXBhY3QqIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgdm1hbGxvYyBsaWZlY3ljbGUuIEkmIzM5O2xsIGFsc28gYmUgZXhhbWluaW5nIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBmaWxlIHRvIGVzdGFibGlzaCBhIGNvbXBsZXRlIG92ZXJ2aWV3LiBJIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29tbWl0IG1lc3NhZ2VzIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjQ1Nj1zdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTI0NjctICovXG5tbS92bWFsbG9jLmM6MjQ2ODpzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxubW0vdm1hbGxvYy5jLTI0Njkte1xuLS1cbm1tL3ZtYWxsb2MuYy0yNDkyLVxubW0vdm1hbGxvYy5jOjI0OTM6XHR0cmFjZV9mcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHZhX3N0YXJ0LCBucl9sYXp5LCBucl9sYXp5X21heCk7XG5tbS92bWFsbG9jLmMtMjQ5NC1cbi0tXG5tbS92bWFsbG9jLmM9MjUwND1zdGF0aWMgdm9pZCBmcmVlX3VubWFwX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcbi0tXG5tbS92bWFsbG9jLmMtMjUxMC1cbm1tL3ZtYWxsb2MuYzoyNTExOlx0ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YSk7XG5tbS92bWFsbG9jLmMtMjUxMi19XG4tLVxubW0vdm1hbGxvYy5jPTI3ODk9c3RhdGljIHZvaWQgZnJlZV92bWFwX2Jsb2NrKHN0cnVjdCB2bWFwX2Jsb2NrICp2Yilcbi0tXG5tbS92bWFsbG9jLmMtMjgwMy1cbm1tL3ZtYWxsb2MuYzoyODA0Olx0ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2Yi1cdTAwM2V2YSk7XG5tbS92bWFsbG9jLmMtMjgwNS1cdGtmcmVlX3JjdSh2YiwgcmN1X2hlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaWZmOiBBIFF1aWNrIFNjYW4gb2YgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMgd2l0aGluIHRoaXMgZGlmZiByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXAuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGUgbGlzdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ6IGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCwgYGRyYWluX3ZtYXBfYXJlYV93b3JrYCwgYHB1cmdlX3ZtYXBfbm9kZWAsIGBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoYCwgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLCBhbmQgYHZtX3VubWFwX2FsaWFzZXNgLiBJJiMzOTtsbCB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBoYW5kbGUgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCB1bm1hcHBpbmcuCgpOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBvZiB0aGUga2V5IGZ1bmN0aW9ucywgSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgQ09ORklHIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIGB2bWFsbG9jLmNgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IGp1bXAgb3V0LiBUaGF0IHdheSwgSSBjYW4gdGFpbG9yIG15IGFuYWx5c2lzIGZyb20gdGhlIHN0YXJ0IGFuZCBhdm9pZCBvdmVybG9va2luZyBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS0zOS1cdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlOjQwOlx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xubW0vTWFrZWZpbGUtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1tL3ZtYWxsb2MuY2AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX01NVWAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBvbiBhbWQ2NCBhcmNoaXRlY3R1cmVzOyBpdCYjMzk7cyBhbHdheXMgc2V0IHRvICYjMzk7eSYjMzk7LiBUaGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4gV2hhdCBJIG5lZWQgdG8gZG8gaXMgaWRlbnRpZnkgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb2RlIGFyb3VuZCB0aG9zZSBtb2RpZmljYXRpb25zIGluIGBtbS92bWFsbG9jLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRvIGdldCBhIGJldHRlciBncmFzcCwgSSBzaG91bGQgcmVhbGx5IGxvb2sgYXQgYSB3aWRlciByYW5nZS4gSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMjMwMCB0aHJvdWdoIDI1NTAgaW4gYG1tL3ZtYWxsb2MuY2AuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhhdCBzZWN0aW9uLiBIb3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgc29tZSByZWxhdGVkIGNvbmRpdGlvbmFsIGNvZGUgdGhhdCBnaXZlcyBtZSBzb21lIGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM1MDpcdFx0fVxuMjM1MTpcdFxuMjM1MjpcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3B1cmdlZF9wYWdlcywgXHUwMDI2dm1hcF9sYXp5X25yKTtcbjIzNTM6XHRcbjIzNTQ6XHRcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXHUwMDI2bG9jYWxfbGlzdCk7XG4yMzU1Olx0fVxuMjM1NjpcdFxuMjM1NzpcdHN0YXRpYyBib29sXG4yMzU4Olx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcbjIzNTk6XHRcdFx0c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuMjM2MDpcdHtcbjIzNjE6XHRcdGlmICh3cSlcbjIzNjI6XHRcdFx0cmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspO1xuMjM2MzpcdFxuMjM2NDpcdFx0cmV0dXJuIGZhbHNlO1xuMjM2NTpcdH1cbjIzNjY6XHRcbjIzNjc6XHQvKlxuMjM2ODpcdCAqIFB1cmdlcyBhbGwgbGF6aWx5LWZyZWVkIHZtYXAgYXJlYXMuXG4yMzY5Olx0ICovXG4yMzcwOlx0c3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbjIzNzE6XHRcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4yMzcyOlx0e1xuMjM3MzpcdFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuMjM3NDpcdFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDtcbjIzNzU6XHRcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xuMjM3NjpcdFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4yMzc3Olx0XG4yMzc4Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG4yMzc5Olx0XG4yMzgwOlx0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbjIzODE6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCk7XG4yMzgyOlx0XHRcdHZuLVx1MDAzZXNraXBfcG9wdWxhdGUgPSBmdWxsX3Bvb2xfZGVjYXk7XG4yMzgzOlx0XHRcdGRlY2F5X3ZhX3Bvb2xfbm9kZSh2biwgZnVsbF9wb29sX2RlY2F5KTtcbjIzODQ6XHRcbjIzODU6XHRcdFx0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2dm4tXHUwMDNlbGF6eS5yb290KSlcbjIzODY6XHRcdFx0XHRjb250aW51ZTtcbjIzODc6XHRcbjIzODg6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnZuLVx1MDAzZWxhenkubG9jayk7XG4yMzg5Olx0XHRcdFdSSVRFX09OQ0Uodm4tXHUwMDNlbGF6eS5yb290LnJiX25vZGUsIE5VTEwpO1xuMjM5MDpcdFx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ2bi1cdTAwM2VsYXp5LmhlYWQsIFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QpO1xuMjM5MTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuMjM5MjpcdFxuMjM5MzpcdFx0XHRzdGFydCA9IG1pbihzdGFydCwgbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0LFxuMjM5NDpcdFx0XHRcdHN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLVx1MDAzZXZhX3N0YXJ0KTtcbjIzOTU6XHRcbjIzOTY6XHRcdFx0ZW5kID0gbWF4KGVuZCwgbGlzdF9sYXN0X2VudHJ5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QsXG4yMzk3Olx0XHRcdFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXHUwMDNldmFfZW5kKTtcbjIzOTg6XHRcbjIzOTk6XHRcdFx0bnJfcHVyZ2Vfbm9kZXMmIzQzOyYjNDM7O1xuMjQwMDpcdFx0fVxuMjQwMTpcdFxuMjQwMjpcdFx0aWYgKG5yX3B1cmdlX25vZGVzIFx1MDAzZSAwKSB7XG4yNDAzOlx0XHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4yNDA0Olx0XG4yNDA1Olx0XHRcdC8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovXG4yNDA2Olx0XHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuMjQwNzpcdFx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4yNDA4Olx0XG4yNDA5Olx0XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuMjQxMDpcdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gZmFsc2U7XG4yNDExOlx0XG4yNDEyOlx0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCkpXG4yNDEzOlx0XHRcdFx0XHRjb250aW51ZTtcbjI0MTQ6XHRcbjI0MTU6XHRcdFx0XHRpZiAobnJfcHVyZ2VfaGVscGVycyBcdTAwM2UgMCkge1xuMjQxNjpcdFx0XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XG4yNDE3Olx0XHRcdFx0XHR2bi1cdTAwM2V3b3JrX3F1ZXVlZCA9IHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhcbjI0MTg6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuMjQxOTpcdFxuMjQyMDpcdFx0XHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4yNDIxOlx0XHRcdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbjI0MjI6XHRcdFx0XHRcdFx0Y29udGludWU7XG4yNDIzOlx0XHRcdFx0XHR9XG4yNDI0Olx0XHRcdFx0fVxuMjQyNTpcdFxuMjQyNjpcdFx0XHRcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xuMjQyNzpcdFx0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbjI0Mjg6XHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbjI0Mjk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgcmVzcG9uZGluZyB0byB0aGUgcHJvbXB0OgoKKipUYXJnZXRlZCBSZXZpZXcgQXJlYSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGZvY3VzZWQgYW5kIGRpZyBpbnRvIHRoaXMgc2VjdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBzY3J1dGluaXplIGxpbmVzIDI0MzAgdGhyb3VnaCAyNTEwLiBJdCYjMzk7cyB0aW1lIHRvIHplcm8gaW4gb24gdGhhdCBzcGVjaWZpYyByYW5nZTsgdGhhdCYjMzk7cyB3aGVyZSBJIGFudGljaXBhdGUgd2UmIzM5O2xsIGRpc2NvdmVyIHRoZSBrZXkgbnVhbmNlcyB0aGF0IG5lZWQgYXR0ZW50aW9uLiBUaW1lIHRvIGNhcmVmdWxseSBhbmQgbWV0aG9kaWNhbGx5IHJldmlldyB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDMwOlx0XG4yNDMxOlx0XHRcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cbjI0MzI6XHRcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4yNDMzOlx0XHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4yNDM0Olx0XHRcdFx0XHRmbHVzaF93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuMjQzNTpcdFx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4yNDM2Olx0XHRcdFx0fVxuMjQzNzpcdFx0XHR9XG4yNDM4Olx0XHR9XG4yNDM5Olx0XG4yNDQwOlx0XHR0cmFjZV9wdXJnZV92bWFwX2FyZWFfbGF6eShzdGFydCwgZW5kLCBucl9wdXJnZWRfYXJlYXMpO1xuMjQ0MTpcdFx0cmV0dXJuIG5yX3B1cmdlZF9hcmVhcyBcdTAwM2UgMDtcbjI0NDI6XHR9XG4yNDQzOlx0XG4yNDQ0Olx0LypcbjI0NDU6XHQgKiBSZWNsYWltIHZtYXAgYXJlYXMgYnkgcHVyZ2luZyBmcmFnbWVudGVkIGJsb2NrcyBhbmQgcHVyZ2Vfdm1hcF9hcmVhX2xpc3QuXG4yNDQ2Olx0ICovXG4yNDQ3Olx0c3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKVxuMjQ0ODpcdFxuMjQ0OTpcdHtcbjI0NTA6XHRcdG11dGV4X2xvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbjI0NTE6XHRcdHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTtcbjI0NTI6XHRcdF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoVUxPTkdfTUFYLCAwLCB0cnVlKTtcbjI0NTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuMjQ1NDpcdH1cbjI0NTU6XHRcbjI0NTY6XHRzdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNDU3Olx0e1xuMjQ1ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuMjQ1OTpcdFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcbjI0NjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuMjQ2MTpcdH1cbjI0NjI6XHRcbjI0NjM6XHQvKlxuMjQ2NDpcdCAqIEZyZWUgYSB2bWFwIGFyZWEsIGNhbGxlciBlbnN1cmluZyB0aGF0IHRoZSBhcmVhIGhhcyBiZWVuIHVubWFwcGVkLFxuMjQ2NTpcdCAqIHVubGlua2VkIGFuZCBmbHVzaF9jYWNoZV92dW5tYXAgaGFkIGJlZW4gY2FsbGVkIGZvciB0aGUgY29ycmVjdFxuMjQ2NjpcdCAqIHJhbmdlIHByZXZpb3VzbHkuXG4yNDY3Olx0ICovXG4yNDY4Olx0c3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWFfbm9mbHVzaChzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcbjI0Njk6XHR7XG4yNDcwOlx0XHR1bnNpZ25lZCBsb25nIG5yX2xhenlfbWF4ID0gbGF6eV9tYXhfcGFnZXMoKTtcbjI0NzE6XHRcdHVuc2lnbmVkIGxvbmcgdmFfc3RhcnQgPSB2YS1cdTAwM2V2YV9zdGFydDtcbjI0NzI6XHRcdHVuc2lnbmVkIGludCB2bl9pZCA9IGRlY29kZV92bl9pZCh2YS1cdTAwM2VmbGFncyk7XG4yNDczOlx0XHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbjI0NzQ6XHRcdHVuc2lnbmVkIGxvbmcgbnJfbGF6eTtcbjI0NzU6XHRcbjI0NzY6XHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2dmEtXHUwMDNlbGlzdCkpKVxuMjQ3NzpcdFx0XHRyZXR1cm47XG4yNDc4Olx0XG4yNDc5Olx0XHRucl9sYXp5ID0gYXRvbWljX2xvbmdfYWRkX3JldHVybl9yZWxheGVkKHZhX3NpemUodmEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuMjQ4MDpcdFx0XHRcdFx0XHQgXHUwMDI2dm1hcF9sYXp5X25yKTtcbjI0ODE6XHRcbjI0ODI6XHRcdC8qXG4yNDgzOlx0XHQgKiBJZiBpdCB3YXMgcmVxdWVzdCBieSBhIGNlcnRhaW4gbm9kZSB3ZSB3b3VsZCBsaWtlIHRvXG4yNDg0Olx0XHQgKiByZXR1cm4gaXQgdG8gdGhhdCBub2RlLCBpLmUuIGl0cyBwb29sIGZvciBsYXRlciByZXVzZS5cbjI0ODU6XHRcdCAqL1xuMjQ4NjpcdFx0dm4gPSBpc192bl9pZF92YWxpZCh2bl9pZCkgP1xuMjQ4NzpcdFx0XHRpZF90b19ub2RlKHZuX2lkKTphZGRyX3RvX25vZGUodmEtXHUwMDNldmFfc3RhcnQpO1xuMjQ4ODpcdFxuMjQ4OTpcdFx0c3Bpbl9sb2NrKFx1MDAyNnZuLVx1MDAzZWxhenkubG9jayk7XG4yNDkwOlx0XHRpbnNlcnRfdm1hcF9hcmVhKHZhLCBcdTAwMjZ2bi1cdTAwM2VsYXp5LnJvb3QsIFx1MDAyNnZuLVx1MDAzZWxhenkuaGVhZCk7XG4yNDkxOlx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuMjQ5MjpcdFxuMjQ5MzpcdFx0dHJhY2VfZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YV9zdGFydCwgbnJfbGF6eSwgbnJfbGF6eV9tYXgpO1xuMjQ5NDpcdFxuMjQ5NTpcdFx0LyogQWZ0ZXIgdGhpcyBwb2ludCwgd2UgbWF5IGZyZWUgdmEgYXQgYW55IHRpbWUgKi9cbjI0OTY6XHRcdGlmICh1bmxpa2VseShucl9sYXp5IFx1MDAzZSBucl9sYXp5X21heCkpXG4yNDk3Olx0XHRcdHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksXG4yNDk4Olx0XHRcdFx0XHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbjI0OTk6XHR9XG4yNTAwOlx0XG4yNTAxOlx0LypcbjI1MDI6XHQgKiBGcmVlIGFuZCB1bm1hcCBhIHZtYXAgYXJlYVxuMjUwMzpcdCAqL1xuMjUwNDpcdHN0YXRpYyB2b2lkIGZyZWVfdW5tYXBfdm1hcF9hcmVhKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxuMjUwNTpcdHtcbjI1MDY6XHRcdGZsdXNoX2NhY2hlX3Z1bm1hcCh2YS1cdTAwM2V2YV9zdGFydCwgdmEtXHUwMDNldmFfZW5kKTtcbjI1MDc6XHRcdHZ1bm1hcF9yYW5nZV9ub2ZsdXNoKHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQpO1xuMjUwODpcdFx0aWYgKGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkX3N0YXRpYygpKVxuMjUwOTpcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNgoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiA1NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZtYXAgQXJlYSBQdXJnaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgKHZtYXApIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaGVyZS4gSSB3YW50IHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zLCBzbyBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBmdW5jdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBkcmFpbmluZyBhbmQgcHVyZ2luZyBsb2dpYy4KCkJhc2VkIG9uIHRoZSBpbml0aWFsIGFuYWx5c2lzLCBJJiMzOTt2ZSBnb3QgYSBsaXN0OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGZhY3RvciBpbiB0aGF0IGB2bV91bm1hcF9hbGlhc2VzYCBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGFuZCBgdmZyZWVgIGFuZCBgdnVubWFwYCBldmVudHVhbGx5IGNhbGwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGFua2Z1bGx5LCB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZyBkZXBlbmRlbmNpZXMgYmV5b25kIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEFNRDY0IGFyY2hpdGVjdHVyZXMuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBlZmZlY3RpdmVseSBlbXB0eS4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkLCBsZXQmIzM5O3MgcmV2aXNpdCBteSBpbnN0cnVjdGlvbiBzZXQgb25lIGxhc3QgdGltZToKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBPa2F5LCBtYWtlcyBzZW5zZS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYW55IGNoYW5nZSBoZXJlIGlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSwgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHVuYm91bmQgd29ya3F1ZXVlcyBmb3IgYXN5bmNocm9ub3VzIGRyYWluaW5nIGFuZCBub2RlIHB1cmdpbmcsIGFuZCBtb2RpZnlpbmcgdGhlIG11bHRpLW5vZGUgcHVyZ2UgaXRlcmF0aW9uIGFuZCB3b3JrIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gU3BvdCBvbi4KKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBsaXN0OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkIGBbXWAsIHJlbHlpbmcgb24gdGhlIHN0YW5kYXJkIE1NVSBjb25maWcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IHByb2Nlc3MsIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5JiMzNDssCiAgICAmIzM0O3B1cmdlX3ZtYXBfbm9kZSYjMzQ7LAogICAgJiMzNDtzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsmIzM0OywKICAgICYjMzQ7ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCYjMzQ7LAogICAgJiMzNDtkcmFpbl92bWFwX2FyZWFfd29yayYjMzQ7LAogICAgJiMzNDtyZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vdm1hbGxvYy5jLCBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSwgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVmYWN0b3JpbmcgdGhlIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBhbmQgbm9kZSBkcmFpbmluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wdXJnZV92bWFwX2FyZWFfbGF6eSYjMzQ7LAogICAgJiMzNDtwdXJnZV92bWFwX25vZGUmIzM0OywKICAgICYjMzQ7c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrJiMzNDssCiAgICAmIzM0O2ZyZWVfdm1hcF9hcmVhX25vZmx1c2gmIzM0OywKICAgICYjMzQ7ZHJhaW5fdm1hcF9hcmVhX3dvcmsmIzM0OywKICAgICYjMzQ7cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3ZtYWxsb2MuYywgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EsIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlZmFjdG9yaW5nIHRoZSBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgYW5kIG5vZGUgZHJhaW5pbmcgbG9naWMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSBpbiBtbS92bWFsbG9jLmMgYnkgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EgYW5kIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlcGxhY2luZyB0aGUgc3RhdGljIGNwdW1hc2sgdHJhY2tpbmcgd2l0aCBhIHBlci1ub2RlIGJvb2xlYW4gZmxhZyAodm4tXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxuXG5UaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvZGF0YSBzaXplcy4gVGhlIGJvb2xlYW4gZmxhZyBgd29ya19xdWV1ZWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gZWFjaCBpdGVyYXRpb24gaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJlMGU3MjFmM2M4ODAxZjVmNzE2Y2M4YTlmMjY2ZDE3Mjg0NWRmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTU6MjM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYmVhOWY3NmVkN2U3NC4uODljMzI3YTZjZTdkOSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuYwpAQCAtOTcyLDYgJiM0Mzs5NzIsNyBAQCBzdGF0aWMgc3RydWN0IHZtYXBfbm9kZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBwdXJnZV9saXN0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwdXJnZV93b3JrOwogCXVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkOwomIzQzOwlib29sIHdvcmtfcXVldWVkOwogfSBzaW5nbGU7CiAKIC8qCkBAIC0xMDkwLDYgJiM0MzsxMDkxLDggQEAgc3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKTsKIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHZtYXBfbm90aWZ5X2xpc3QpOwogc3RhdGljIHZvaWQgZHJhaW5fdm1hcF9hcmVhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX1dPUksoZHJhaW5fdm1hcF93b3JrLCBkcmFpbl92bWFwX2FyZWFfd29yayk7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl92bWFwX2hlbHBlcnNfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl92bWFwX3dxOwogCiBzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgYXRvbWljX2xvbmdfdCB2bWFwX2xhenlfbnI7CiAKQEAgLTIzNTEsNiAmIzQzOzIzNTQsMTYgQEAgc3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlyZWNsYWltX2xpc3RfZ2xvYmFsKCZhbXA7bG9jYWxfbGlzdCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbAomIzQzO3NjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCiYjNDM7CQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlpZiAod3EpCiYjNDM7CQlyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy4KICAqLwpAQCAtMjM1OCwxOSAmIzQzOzIzNzEsMTIgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJYm9vbCBmdWxsX3Bvb2xfZGVjYXkpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXMgPSAwOwogCXVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzOwotCXN0YXRpYyBjcHVtYXNrX3QgcHVyZ2Vfbm9kZXM7Ci0JdW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzOwogCXN0cnVjdCB2bWFwX25vZGUgKnZuOwotCWludCBpOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZtYXBfcHVyZ2VfbG9jayk7CiAKLQkvKgotCSAqIFVzZSBjcHVtYXNrIHRvIG1hcmsgd2hpY2ggbm9kZSBoYXMgdG8gYmUgcHJvY2Vzc2VkLgotCSAqLwotCXB1cmdlX25vZGVzID0gQ1BVX01BU0tfTk9ORTsKLQogCWZvcl9lYWNoX3ZtYXBfbm9kZSh2bikgewogCQlJTklUX0xJU1RfSEVBRCgmYW1wO3ZuLSZndDtwdXJnZV9saXN0KTsKIAkJdm4tJmd0O3NraXBfcG9wdWxhdGUgPSBmdWxsX3Bvb2xfZGVjYXk7CkBAIC0yMzkwLDEwICYjNDM7MjM5Niw5IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWVuZCA9IG1heChlbmQsIGxpc3RfbGFzdF9lbnRyeSgmYW1wO3ZuLSZndDtwdXJnZV9saXN0LAogCQkJc3RydWN0IHZtYXBfYXJlYSwgbGlzdCktJmd0O3ZhX2VuZCk7CiAKLQkJY3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCAmYW1wO3B1cmdlX25vZGVzKTsKJiM0MzsJCW5yX3B1cmdlX25vZGVzJiM0MzsmIzQzOzsKIAl9CiAKLQlucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KCZhbXA7cHVyZ2Vfbm9kZXMpOwogCWlmIChucl9wdXJnZV9ub2RlcyAmZ3Q7IDApIHsKIAkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKIApAQCAtMjQwMSwyOSAmIzQzOzI0MDYsMzEgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJbnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoJmFtcDt2bWFwX2xhenlfbnIpIC8gbGF6eV9tYXhfcGFnZXMoKTsKIAkJbnJfcHVyZ2VfaGVscGVycyA9IGNsYW1wKG5yX3B1cmdlX2hlbHBlcnMsIDFVLCBucl9wdXJnZV9ub2RlcykgLSAxOwogCi0JCWZvcl9lYWNoX2NwdShpLCAmYW1wO3B1cmdlX25vZGVzKSB7Ci0JCQl2biA9ICZhbXA7dm1hcF9ub2Rlc1tpXTsKJiM0MzsJCWZvcl9lYWNoX3ZtYXBfbm9kZSh2bikgewomIzQzOwkJCXZuLSZndDt3b3JrX3F1ZXVlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkJCWlmIChsaXN0X2VtcHR5KCZhbXA7dm4tJmd0O3B1cmdlX2xpc3QpKQomIzQzOwkJCQljb250aW51ZTsKIAogCQkJaWYgKG5yX3B1cmdlX2hlbHBlcnMgJmd0OyAwKSB7CiAJCQkJSU5JVF9XT1JLKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7CiYjNDM7CQkJCXZuLSZndDt3b3JrX3F1ZXVlZCA9IHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yaygKJiM0MzsJCQkJCVJFQURfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EpLCAmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKIAotCQkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpCi0JCQkJCXNjaGVkdWxlX3dvcmtfb24oaSwgJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJZWxzZQotCQkJCQlzY2hlZHVsZV93b3JrKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCi0JCQkJbnJfcHVyZ2VfaGVscGVycy0tOwotCQkJfSBlbHNlIHsKLQkJCQl2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jID0gTlVMTDsKLQkJCQlwdXJnZV92bWFwX25vZGUoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwomIzQzOwkJCQlpZiAodm4tJmd0O3dvcmtfcXVldWVkKSB7CiYjNDM7CQkJCQlucl9wdXJnZV9oZWxwZXJzLS07CiYjNDM7CQkJCQljb250aW51ZTsKJiM0MzsJCQkJfQogCQkJfQotCQl9CiAKLQkJZm9yX2VhY2hfY3B1KGksICZhbXA7cHVyZ2Vfbm9kZXMpIHsKLQkJCXZuID0gJmFtcDt2bWFwX25vZGVzW2ldOwomIzQzOwkJCS8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqLwomIzQzOwkJCXB1cmdlX3ZtYXBfbm9kZSgmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKJiM0MzsJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7CiYjNDM7CQl9CiAKLQkJCWlmICh2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jKSB7CiYjNDM7CQkvKiBXYWl0IGZvciBjb21wbGV0aW9uIGlmIHF1ZXVlZCBhbnkuICovCiYjNDM7CQlmb3JfZWFjaF92bWFwX25vZGUodm4pIHsKJiM0MzsJCQlpZiAodm4tJmd0O3dvcmtfcXVldWVkKSB7CiAJCQkJZmx1c2hfd29yaygmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKIAkJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7CiAJCQl9CkBAIC0yNDg3LDcgJiM0MzsyNDk0LDggQEAgc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWFfbm9mbHVzaChzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKIAogCS8qIEFmdGVyIHRoaXMgcG9pbnQsIHdlIG1heSBmcmVlIHZhIGF0IGFueSB0aW1lICovCiAJaWYgKHVubGlrZWx5KG5yX2xhenkgJmd0OyBucl9sYXp5X21heCkpCi0JCXNjaGVkdWxlX3dvcmsoJmFtcDtkcmFpbl92bWFwX3dvcmspOwomIzQzOwkJc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFJFQURfT05DRShkcmFpbl92bWFwX3dxKSwKJiM0MzsJCQkmYW1wO2RyYWluX3ZtYXBfd29yayk7CiB9CiAKIC8qCkBAIC01NTg3LDMgJiM0Mzs1NTk1LDIwIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQogCXZtYXBfbm9kZV9zaHJpbmtlci0mZ3Q7c2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuOwogCXNocmlua2VyX3JlZ2lzdGVyKHZtYXBfbm9kZV9zaHJpbmtlcik7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTsKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzID0gV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNOwomIzQzOwomIzQzOwlkcmFpbl93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3ZtYXBfZHJhaW4mIzM0OywgZmxhZ3MsIDApOwomIzQzOwlXQVJOX09OX09OQ0UoZHJhaW5fd3EgPT0gTlVMTCk7CiYjNDM7CVdSSVRFX09OQ0UoZHJhaW5fdm1hcF93cSwgZHJhaW5fd3EpOwomIzQzOwomIzQzOwloZWxwZXJzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7dm1hcF9kcmFpbl9oZWxwZXJzJiMzNDssIGZsYWdzLCAwKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGhlbHBlcnNfd3EgPT0gTlVMTCk7CiYjNDM7CVdSSVRFX09OQ0UoZHJhaW5fdm1hcF9oZWxwZXJzX3dxLCBoZWxwZXJzX3dxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBwYXRjaCB0byBgbW0vdm1hbGxvYy5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgc2V2ZXJhbCBjaGFuZ2VzOyBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGEgYHdvcmtfcXVldWVkYCBib29sZWFuIHRvIGBzdHJ1Y3Qgdm1hcF9ub2RlYCwgYW5kIHR3byBuZXcgd29ya3F1ZXVlcywgYGRyYWluX3ZtYXBfaGVscGVyc193cWAgYW5kIGBkcmFpbl92bWFwX3dxYCwgaW5pdGlhbGl6ZWQgZHVyaW5nIGBlYXJseV9pbml0Y2FsbGAuIFRoZSBleGlzdGluZyBjcHVtYXNrIHRyYWNraW5nIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBpcyByZXBsYWNlZCB3aXRoIGRpcmVjdCBpdGVyYXRpb24sIGFuZCB3b3JrIGlzIHF1ZXVlZCBvbiB0aGVzZSB3b3JrcXVldWVzLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gd2F5IGZvciB1bmluaXRpYWxpemVkIGRhdGEgdG8gZ2V0IG91dCB0aGVyZS4gRmlyc3QgcGFzcywgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3QgdXNlci1zcGFjZSBjb3BpZXMgKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMsIG5vdGhpbmcgY29tcGxleCkuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGludHJpY2F0ZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGFyb3VuZCB1bmluaXRpYWxpemVkLCBlaXRoZXIuIExvb2tpbmcgY2xvc2VyLCBhbGwgdGhlIGB2bWFwX25vZGVgIGVsZW1lbnRzIHNlZW0gdG8gYmUgc3RhdGljYWxseSBvciBnbG9iYWxseSBhbGxvY2F0ZWQuIEFuZCwgZ29vZCwgdGhlIGB2bi0mZ3Q7d29ya19xdWV1ZWRgIGZpZWxkICppcyogZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIHdpdGhpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYmVmb3JlIGl0IGlzIHVzZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHdvcmtxdWV1ZSBvcGVyYXRpb25zIGhlcmUgYXJlIHByaW1hcmlseSBhYm91dCBzeW5jaHJvbml6YXRpb24sIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHZtYWxsb2Mgc3Vic3lzdGVtLCByYXRoZXIgdGhhbiBjb21wbGV4IGRhdGEgbWFuaXB1bGF0aW9uLgoKTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIGBwdXJnZV92bWFwX25vZGVgIGFuZCBhbGwgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IG1haW4gY29uY2VybiBpcyB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBvcGVyYXRpb25zICpyZWFkKiB1bmluaXRpYWxpemVkIG1lbW9yeSBkaXJlY3RseSwgZWl0aGVyIGR1ZSB0byBhIGRhdGEtcmFjZSBvciBmcm9tIGNhcmVsZXNzIHVzZS4gSSB3aWxsIGluc3BlY3QgYHB1cmdlX3ZtYXBfbm9kZWAgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gY29uZmlybSB0aGlzLiBJIHRoaW5rIGl0IGlzICp1bmxpa2VseSosIGJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXJnZV92bWFwX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTIyOTg9a2FzYW5fcmVsZWFzZV92bWFsbG9jX25vZGUoc3RydWN0IHZtYXBfbm9kZSAqdm4pXG4tLVxubW0vdm1hbGxvYy5jLTIzMjEtXG5tbS92bWFsbG9jLmM6MjMyMjpzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0vdm1hbGxvYy5jLTIzMjMte1xuLS1cbm1tL3ZtYWxsb2MuYz0yMzcwPXN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTI0MTUtXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbm1tL3ZtYWxsb2MuYzoyNDE2Olx0XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XG5tbS92bWFsbG9jLmMtMjQxNy1cdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxuLS1cbm1tL3ZtYWxsb2MuYy0yNDI2LVx0XHRcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xubW0vdm1hbGxvYy5jOjI0Mjc6XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xubW0vdm1hbGxvYy5jLTI0MjgtXHRcdFx0bnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBwdXJnZV92bWFwX25vZGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHZtYWxsb2NgIHNwYWNlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbW0vdm1hbGxvYy5jYCBhbmQgZm9jdXMgb24gdGhlIGBwdXJnZV92bWFwX25vZGVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGNyaXRpY2FsIGZvciBmcmVlaW5nIHVwIHRob3NlIFZNIGFyZWEgbm9kZXMsIGVzcGVjaWFsbHkgYWZ0ZXIgc29tZXRoaW5nIGdvZXMgd3Jvbmcgb3Igd2hlbiByZXNvdXJjZXMgbmVlZCB0byBiZSByZWNsYWltZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB2bWFwIGFsbG9jYXRvciYjMzk7cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eSwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4gVW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMjA6XHR9XG4yMzIxOlx0XG4yMzIyOlx0c3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjIzMjM6XHR7XG4yMzI0Olx0XHRzdHJ1Y3Qgdm1hcF9ub2RlICp2biA9IGNvbnRhaW5lcl9vZih3b3JrLFxuMjMyNTpcdFx0XHRzdHJ1Y3Qgdm1hcF9ub2RlLCBwdXJnZV93b3JrKTtcbjIzMjY6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX3BhZ2VzID0gMDtcbjIzMjc6XHRcdHN0cnVjdCB2bWFwX2FyZWEgKnZhLCAqbl92YTtcbjIzMjg6XHRcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcbjIzMjk6XHRcbjIzMzA6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9WTUFMTE9DKSlcbjIzMzE6XHRcdFx0a2FzYW5fcmVsZWFzZV92bWFsbG9jX25vZGUodm4pO1xuMjMzMjpcdFxuMjMzMzpcdFx0dm4tXHUwMDNlbnJfcHVyZ2VkID0gMDtcbjIzMzQ6XHRcbjIzMzU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2YSwgbl92YSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCwgbGlzdCkge1xuMjMzNjpcdFx0XHR1bnNpZ25lZCBsb25nIG5yID0gdmFfc2l6ZSh2YSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4yMzM3Olx0XHRcdHVuc2lnbmVkIGludCB2bl9pZCA9IGRlY29kZV92bl9pZCh2YS1cdTAwM2VmbGFncyk7XG4yMzM4Olx0XG4yMzM5Olx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dmEtXHUwMDNlbGlzdCk7XG4yMzQwOlx0XG4yMzQxOlx0XHRcdG5yX3B1cmdlZF9wYWdlcyAmIzQzOz0gbnI7XG4yMzQyOlx0XHRcdHZuLVx1MDAzZW5yX3B1cmdlZCYjNDM7JiM0Mzs7XG4yMzQzOlx0XG4yMzQ0Olx0XHRcdGlmIChpc192bl9pZF92YWxpZCh2bl9pZCkgXHUwMDI2XHUwMDI2ICF2bi1cdTAwM2Vza2lwX3BvcHVsYXRlKVxuMjM0NTpcdFx0XHRcdGlmIChub2RlX3Bvb2xfYWRkX3ZhKHZuLCB2YSkpXG4yMzQ2Olx0XHRcdFx0XHRjb250aW51ZTtcbjIzNDc6XHRcbjIzNDg6XHRcdFx0LyogR28gYmFjayB0byBnbG9iYWwuICovXG4yMzQ5Olx0XHRcdGxpc3RfYWRkKFx1MDAyNnZhLVx1MDAzZWxpc3QsIFx1MDAyNmxvY2FsX2xpc3QpO1xuMjM1MDpcdFx0fVxuMjM1MTpcdFxuMjM1MjpcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3B1cmdlZF9wYWdlcywgXHUwMDI2dm1hcF9sYXp5X25yKTtcbjIzNTM6XHRcbjIzNTQ6XHRcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXHUwMDI2bG9jYWxfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzEKCQkJCQkJCW91dHB1dDogMTkxCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgTGF6eSBQdXJnaW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGNoYW5nZXMgaW4gYG1tL3ZtYWxsb2MuY2AgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBwb3NpdGl2ZS4gSXQmIzM5O3MgYSBjbGVhbiwgZm9jdXNlZCBpbXByb3ZlbWVudCB0byB0aGUgbGF6eSBwdXJnaW5nIG1lY2hhbmlzbSB3aXRoaW4gdm1hbGxvYy4gVGhlIGludHJvZHVjdGlvbiBvZiBkZWRpY2F0ZWQgd29ya3F1ZXVlcywgYGRyYWluX3ZtYXBfd3FgIGFuZCBgZHJhaW5fdm1hcF9oZWxwZXJzX3dxYCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIGBjcHVtYXNrYCB0cmFja2luZywgaXMgYSBkZWZpbml0ZSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEFuZCBzd2l0Y2hpbmcgdG8gcGVyLW5vZGUgYHdvcmtfcXVldWVkYCBmbGFncyBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgYW5kIHNob3VsZCBwcm92aWRlIGJldHRlciBncmFudWxhcml0eS4KClRoZSBpbXBvcnRhbnQgdGhpbmcgaXMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBhdHRhY2sgdmVjdG9ycyBoZXJlLiBObyB1c2VyLWNvcHkgdnVsbmVyYWJpbGl0aWVzLCBubyBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzLiBJIGNhbiYjMzk7dCBzcG90IGFueSBpbnN0YW5jZXMgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5kZWZpbmVkIGRhdGEuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KCkZyb20gYSBjb25jdXJyZW5jeSBwZXJzcGVjdGl2ZSwgdGhlIG5ldyBhcmNoaXRlY3R1cmUsIHV0aWxpemluZyB3b3JrcXVldWVzLCBzaG91bGQgYmUgcm9idXN0LiBQbHVzLCBhbnkgcmVtYWluaW5nIGNvbmNlcm5zIHJlZ2FyZGluZyB3b3JrcXVldWUgbGlmZXRpbWVzIG9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdGhhdCAqbWlnaHQqIGJlIHByZXNlbnQsIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIHJpZ29yb3VzIHRlc3RpbmcuIFNvLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTiBhbmFseXNpcy4gYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBoZXJlLgoKQWxyaWdodCwgd2l0aCB0aGF0IGFzc2Vzc21lbnQsIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgc2lnbmFsIHRoYXQgdGhlIHJldmlldyBpcyBjb21wbGV0ZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSBpbiBtbS92bWFsbG9jLmMgYnkgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EgYW5kIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlcGxhY2luZyB0aGUgc3RhdGljIGNwdW1hc2sgdHJhY2tpbmcgd2l0aCBhIHBlci1ub2RlIGJvb2xlYW4gZmxhZyAodm4tXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxuXG5UaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvZGF0YSBzaXplcy4gVGhlIGJvb2xlYW4gZmxhZyBgd29ya19xdWV1ZWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gZWFjaCBpdGVyYXRpb24gaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSBpbiBtbS92bWFsbG9jLmMgYnkgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EgYW5kIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlcGxhY2luZyB0aGUgc3RhdGljIGNwdW1hc2sgdHJhY2tpbmcgd2l0aCBhIHBlci1ub2RlIGJvb2xlYW4gZmxhZyAodm4tXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxuXG5UaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvZGF0YSBzaXplcy4gVGhlIGJvb2xlYW4gZmxhZyBgd29ya19xdWV1ZWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gZWFjaCBpdGVyYXRpb24gaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzowNS43MTc1NDQzMzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODMyNDM3OTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5XCIsXG4gICAgXCJwdXJnZV92bWFwX25vZGVcIixcbiAgICBcInNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya1wiLFxuICAgIFwiZnJlZV92bWFwX2FyZWFfbm9mbHVzaFwiLFxuICAgIFwiZHJhaW5fdm1hcF9hcmVhX3dvcmtcIixcbiAgICBcInJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaW4gbW0vdm1hbGxvYy5jIGJ5IGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxIGFuZCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZXBsYWNpbmcgdGhlIHN0YXRpYyBjcHVtYXNrIHRyYWNraW5nIHdpdGggYSBwZXItbm9kZSBib29sZWFuIGZsYWcgKHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCkgd2hlbiBzY2hlZHVsaW5nIHB1cmdlIGpvYnMuXFxuXFxuVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbHRlcmF0aW9ucyB0byBidWZmZXIgYm91bmRzL2RhdGEgc2l6ZXMuIFRoZSBib29sZWFuIGZsYWcgYHdvcmtfcXVldWVkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIGVhY2ggaXRlcmF0aW9uIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZWN5Y2xlLCBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3ZtYWxsb2MuYywgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EsIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlZmFjdG9yaW5nIHRoZSBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgYW5kIG5vZGUgZHJhaW5pbmcgbG9naWMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzowNS43MTc1NTA0NzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODcwNTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxNToyMzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li44OWMzMjdhNmNlN2Q5IDEwMDY0NFxcbi0tLSBhL21tL3ZtYWxsb2MuY1xcbisrKyBiL21tL3ZtYWxsb2MuY1xcbkBAIC05NzIsNiArOTcyLDcgQEAgc3RhdGljIHN0cnVjdCB2bWFwX25vZGUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBwdXJnZV93b3JrO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZDtcXG4rXFx0Ym9vbCB3b3JrX3F1ZXVlZDtcXG4gfSBzaW5nbGU7XFxuIFxcbiAvKlxcbkBAIC0xMDkwLDYgKzEwOTEsOCBAQCBzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpO1xcbiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRCh2bWFwX25vdGlmeV9saXN0KTtcXG4gc3RhdGljIHZvaWQgZHJhaW5fdm1hcF9hcmVhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIERFQ0xBUkVfV09SSyhkcmFpbl92bWFwX3dvcmssIGRyYWluX3ZtYXBfYXJlYV93b3JrKTtcXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl92bWFwX2hlbHBlcnNfd3E7XFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF93cTtcXG4gXFxuIHN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBhdG9taWNfbG9uZ190IHZtYXBfbGF6eV9ucjtcXG4gXFxuQEAgLTIzNTEsNiArMjM1NCwxNiBAQCBzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyZWNsYWltX2xpc3RfZ2xvYmFsKFxcdTAwMjZsb2NhbF9saXN0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2xcXG4rc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcXG4rXFx0XFx0c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdGlmICh3cSlcXG4rXFx0XFx0cmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLlxcbiAgKi9cXG5AQCAtMjM1OCwxOSArMjM3MSwxMiBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRib29sIGZ1bGxfcG9vbF9kZWNheSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZF9hcmVhcyA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlcyA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xcbi1cXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7XFxuIFxcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbi1cXHRpbnQgaTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBVc2UgY3B1bWFzayB0byBtYXJrIHdoaWNoIG5vZGUgaGFzIHRvIGJlIHByb2Nlc3NlZC5cXG4tXFx0ICovXFxuLVxcdHB1cmdlX25vZGVzID0gQ1BVX01BU0tfTk9ORTtcXG4tXFxuIFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QpO1xcbiBcXHRcXHR2bi1cXHUwMDNlc2tpcF9wb3B1bGF0ZSA9IGZ1bGxfcG9vbF9kZWNheTtcXG5AQCAtMjM5MCwxMCArMjM5Niw5IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdGVuZCA9IG1heChlbmQsIGxpc3RfbGFzdF9lbnRyeShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QsXFxuIFxcdFxcdFxcdHN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLVxcdTAwM2V2YV9lbmQpO1xcbiBcXG4tXFx0XFx0Y3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCBcXHUwMDI2cHVyZ2Vfbm9kZXMpO1xcbitcXHRcXHRucl9wdXJnZV9ub2RlcysrO1xcbiBcXHR9XFxuIFxcbi1cXHRucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KFxcdTAwMjZwdXJnZV9ub2Rlcyk7XFxuIFxcdGlmIChucl9wdXJnZV9ub2RlcyBcXHUwMDNlIDApIHtcXG4gXFx0XFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcXG4gXFxuQEAgLTI0MDEsMjkgKzI0MDYsMzEgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0bnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xcbiBcXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XFxuIFxcbi1cXHRcXHRmb3JfZWFjaF9jcHUoaSwgXFx1MDAyNnB1cmdlX25vZGVzKSB7XFxuLVxcdFxcdFxcdHZuID0gXFx1MDAyNnZtYXBfbm9kZXNbaV07XFxuK1xcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbitcXHRcXHRcXHR2bi1cXHUwMDNld29ya19xdWV1ZWQgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2VfbGlzdCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdFxcdFxcdElOSVRfV09SSyhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XFxuK1xcdFxcdFxcdFxcdHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCA9IHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhcXG4rXFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuIFxcbi1cXHRcXHRcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKVxcbi1cXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV93b3JrX29uKGksIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuLVxcdFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbi1cXG4tXFx0XFx0XFx0XFx0bnJfcHVyZ2VfaGVscGVycy0tO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHR2bi1cXHUwMDNlcHVyZ2Vfd29yay5mdW5jID0gTlVMTDtcXG4tXFx0XFx0XFx0XFx0cHVyZ2Vfdm1hcF9ub2RlKFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuLVxcdFxcdFxcdFxcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cXHUwMDNlbnJfcHVyZ2VkO1xcbitcXHRcXHRcXHRcXHRpZiAodm4tXFx1MDAzZXdvcmtfcXVldWVkKSB7XFxuK1xcdFxcdFxcdFxcdFxcdG5yX3B1cmdlX2hlbHBlcnMtLTtcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuIFxcbi1cXHRcXHRmb3JfZWFjaF9jcHUoaSwgXFx1MDAyNnB1cmdlX25vZGVzKSB7XFxuLVxcdFxcdFxcdHZuID0gXFx1MDAyNnZtYXBfbm9kZXNbaV07XFxuK1xcdFxcdFxcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xcbitcXHRcXHRcXHRwdXJnZV92bWFwX25vZGUoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG4rXFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICh2bi1cXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XFxuK1xcdFxcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cXG4rXFx0XFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XFxuK1xcdFxcdFxcdGlmICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHtcXG4gXFx0XFx0XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbiBcXHRcXHRcXHRcXHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXFx1MDAzZW5yX3B1cmdlZDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0yNDg3LDcgKzI0OTQsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxcbiBcXG4gXFx0LyogQWZ0ZXIgdGhpcyBwb2ludCwgd2UgbWF5IGZyZWUgdmEgYXQgYW55IHRpbWUgKi9cXG4gXFx0aWYgKHVubGlrZWx5KG5yX2xhenkgXFx1MDAzZSBucl9sYXp5X21heCkpXFxuLVxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmRyYWluX3ZtYXBfd29yayk7XFxuK1xcdFxcdHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksXFxuK1xcdFxcdFxcdFxcdTAwMjZkcmFpbl92bWFwX3dvcmspO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01NTg3LDMgKzU1OTUsMjAgQEAgdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXFxuIFxcdHZtYXBfbm9kZV9zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xcbiBcXHRzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB2bWFsbG9jX2luaXRfd29ya3F1ZXVlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTtcXG4rXFx0dW5zaWduZWQgaW50IGZsYWdzID0gV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNO1xcbitcXG4rXFx0ZHJhaW5fd3EgPSBhbGxvY193b3JrcXVldWUoXFxcInZtYXBfZHJhaW5cXFwiLCBmbGFncywgMCk7XFxuK1xcdFdBUk5fT05fT05DRShkcmFpbl93cSA9PSBOVUxMKTtcXG4rXFx0V1JJVEVfT05DRShkcmFpbl92bWFwX3dxLCBkcmFpbl93cSk7XFxuK1xcbitcXHRoZWxwZXJzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJ2bWFwX2RyYWluX2hlbHBlcnNcXFwiLCBmbGFncywgMCk7XFxuK1xcdFdBUk5fT05fT05DRShoZWxwZXJzX3dxID09IE5VTEwpO1xcbitcXHRXUklURV9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSwgaGVscGVyc193cSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitlYXJseV9pbml0Y2FsbCh2bWFsbG9jX2luaXRfd29ya3F1ZXVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MDYuMjI2ODQzOTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzI5MjY1MjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5XCIsXG4gICAgXCJwdXJnZV92bWFwX25vZGVcIixcbiAgICBcInNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya1wiLFxuICAgIFwiZnJlZV92bWFwX2FyZWFfbm9mbHVzaFwiLFxuICAgIFwiZHJhaW5fdm1hcF9hcmVhX3dvcmtcIixcbiAgICBcInJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3ZtYWxsb2MuYywgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EsIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlZmFjdG9yaW5nIHRoZSBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgYW5kIG5vZGUgZHJhaW5pbmcgbG9naWMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjIzOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li44OWMzMjdhNmNlN2Q5IDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC05NzIsNiArOTcyLDcgQEAgc3RhdGljIHN0cnVjdCB2bWFwX25vZGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwdXJnZV9saXN0O1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHB1cmdlX3dvcms7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZDtcbitcdGJvb2wgd29ya19xdWV1ZWQ7XG4gfSBzaW5nbGU7XG4gXG4gLypcbkBAIC0xMDkwLDYgKzEwOTEsOCBAQCBzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpO1xuIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHZtYXBfbm90aWZ5X2xpc3QpO1xuIHN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIERFQ0xBUkVfV09SSyhkcmFpbl92bWFwX3dvcmssIGRyYWluX3ZtYXBfYXJlYV93b3JrKTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3ZtYXBfaGVscGVyc193cTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3ZtYXBfd3E7XG4gXG4gc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIGF0b21pY19sb25nX3Qgdm1hcF9sYXp5X25yO1xuIFxuQEAgLTIzNTEsNiArMjM1NCwxNiBAQCBzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmVjbGFpbV9saXN0X2dsb2JhbChcdTAwMjZsb2NhbF9saXN0KTtcbiB9XG4gXG4rc3RhdGljIGJvb2xcbitzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLFxuK1x0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0aWYgKHdxKVxuK1x0XHRyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy5cbiAgKi9cbkBAIC0yMzU4LDE5ICsyMzcxLDEyIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDtcbitcdHVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlcyA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVycztcbi1cdHN0YXRpYyBjcHVtYXNrX3QgcHVyZ2Vfbm9kZXM7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbi1cdGludCBpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFVzZSBjcHVtYXNrIHRvIG1hcmsgd2hpY2ggbm9kZSBoYXMgdG8gYmUgcHJvY2Vzc2VkLlxuLVx0ICovXG4tXHRwdXJnZV9ub2RlcyA9IENQVV9NQVNLX05PTkU7XG4tXG4gXHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCk7XG4gXHRcdHZuLVx1MDAzZXNraXBfcG9wdWxhdGUgPSBmdWxsX3Bvb2xfZGVjYXk7XG5AQCAtMjM5MCwxMCArMjM5Niw5IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGVuZCA9IG1heChlbmQsIGxpc3RfbGFzdF9lbnRyeShcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0LFxuIFx0XHRcdHN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLVx1MDAzZXZhX2VuZCk7XG4gXG4tXHRcdGNwdW1hc2tfc2V0X2NwdShub2RlX3RvX2lkKHZuKSwgXHUwMDI2cHVyZ2Vfbm9kZXMpO1xuK1x0XHRucl9wdXJnZV9ub2RlcysrO1xuIFx0fVxuIFxuLVx0bnJfcHVyZ2Vfbm9kZXMgPSBjcHVtYXNrX3dlaWdodChcdTAwMjZwdXJnZV9ub2Rlcyk7XG4gXHRpZiAobnJfcHVyZ2Vfbm9kZXMgXHUwMDNlIDApIHtcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbkBAIC0yNDAxLDI5ICsyNDA2LDMxIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuIFx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4gXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbitcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4rXHRcdFx0dm4tXHUwMDNld29ya19xdWV1ZWQgPSBmYWxzZTtcbitcbitcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0KSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmIChucl9wdXJnZV9oZWxwZXJzIFx1MDAzZSAwKSB7XG4gXHRcdFx0XHRJTklUX1dPUksoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTtcbitcdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxuK1x0XHRcdFx0XHRSRUFEX09OQ0UoZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4gXG4tXHRcdFx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrX29uKGksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVxuLVx0XHRcdFx0bnJfcHVyZ2VfaGVscGVycy0tO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHR2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMgPSBOVUxMO1xuLVx0XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbitcdFx0XHRcdGlmICh2bi1cdTAwM2V3b3JrX3F1ZXVlZCkge1xuK1x0XHRcdFx0XHRucl9wdXJnZV9oZWxwZXJzLS07XG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0fVxuIFxuLVx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbi1cdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4rXHRcdFx0LyogU3luYyBwYXRoLiBQcm9jZXNzIGxvY2FsbHkuICovXG4rXHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuK1x0XHRcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4rXHRcdH1cbiBcbi1cdFx0XHRpZiAodm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XG4rXHRcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cbitcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4rXHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4gXHRcdFx0XHRmbHVzaF93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuIFx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbiBcdFx0XHR9XG5AQCAtMjQ4Nyw3ICsyNDk0LDggQEAgc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWFfbm9mbHVzaChzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcbiBcbiBcdC8qIEFmdGVyIHRoaXMgcG9pbnQsIHdlIG1heSBmcmVlIHZhIGF0IGFueSB0aW1lICovXG4gXHRpZiAodW5saWtlbHkobnJfbGF6eSBcdTAwM2UgbnJfbGF6eV9tYXgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmRyYWluX3ZtYXBfd29yayk7XG4rXHRcdHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksXG4rXHRcdFx0XHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbiB9XG4gXG4gLypcbkBAIC01NTg3LDMgKzU1OTUsMjAgQEAgdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXG4gXHR2bWFwX25vZGVfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xuIFx0c2hyaW5rZXJfcmVnaXN0ZXIodm1hcF9ub2RlX3Nocmlua2VyKTtcbiB9XG4rXG4rc3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl93cSwgKmhlbHBlcnNfd3E7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU07XG4rXG4rXHRkcmFpbl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInZtYXBfZHJhaW5cIiwgZmxhZ3MsIDApO1xuK1x0V0FSTl9PTl9PTkNFKGRyYWluX3dxID09IE5VTEwpO1xuK1x0V1JJVEVfT05DRShkcmFpbl92bWFwX3dxLCBkcmFpbl93cSk7XG4rXG4rXHRoZWxwZXJzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwidm1hcF9kcmFpbl9oZWxwZXJzXCIsIGZsYWdzLCAwKTtcbitcdFdBUk5fT05fT05DRShoZWxwZXJzX3dxID09IE5VTEwpO1xuK1x0V1JJVEVfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EsIGhlbHBlcnNfd3EpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK2Vhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MDYuMjI2ODQ1NTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4OTc2MDk0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bWFsbG9jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRpdmluZyBpbnRvIGBtbS92bWFsbG9jLmNgLCB3aGljaCBpcyByaWdodCBpbiBteSB3aGVlbGhvdXNlIOKAkyBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cblNvLCB0aGUga2V5IGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB3b3JrcXVldWVzIGZvciB2bWFwIGRyYWluaW5nLiBXZSd2ZSBnb3QgdHdvIG5ldyB3b3JrcXVldWVzOiBgZHJhaW5fdm1hcF9oZWxwZXJzX3dxYCBhbmQgYGRyYWluX3ZtYXBfd3FgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHJlcGxhY2luZyBzb21lIGV4aXN0aW5nIENQVSBtYXNrIGxvZ2ljIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCB3aXRoIGEgYGZvcl9lYWNoX3ZtYXBfbm9kZWAgbG9vcCBhbmQgdGhlbiBxdWV1aW5nIHdvcmsgdG8gdGhlc2Ugd29ya3F1ZXVlcyB1c2luZyBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYC4gV2UgYWxzbyBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBhIGB3b3JrX3F1ZXVlZGAgZmxhZyB3aXRoaW4gdGhlIGB2bWFwX25vZGVgIHN0cnVjdHVyZS4gQWRkaXRpb25hbGx5LCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAgaXMgbm93IHNjaGVkdWxpbmcgd29yayBhcyB3ZWxsLiBGaW5hbGx5LCB0aGVyZSdzIGEgbmV3IGB2bWFsbG9jX2luaXRfd29ya3F1ZXVlYCB0byBzZXQgdXAgdGhlIGRlZGljYXRlZCB3b3JrcXVldWVzIHdpdGggdGhlIGBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU1gIGZsYWdzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBydWxlIHNldC4gVGhpcyBtb2RpZmljYXRpb24gdG8gYG1tL3ZtYWxsb2MuY2AgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoZSBcIm1lbW9yeSBtYW5hZ2VtZW50XCIgY2F0ZWdvcnkg4oCTIHRoYXQncyBhIGRpcmVjdCBoaXQuIEl0J3MgZXhlY3V0YWJsZSBjb2RlLCBhbmQgd2UncmUgZGVhbGluZyB3aXRoIHZtYWxsb2MgYXJlYSBwdXJnaW5nIGFuZCB3b3JrcXVldWUgaGFuZGxpbmcsIHdoaWNoIGFyZSBjcml0aWNhbCBhcmVhcy4gR2l2ZW4gdGhlIGNvcmUgc3Vic3lzdGVtIGludm9sdmVtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgdGltaW5nIGlzc3VlcyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGludGVyYWN0aW9ucywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBgV29ydGhGdXp6aW5nPXRydWVgIGZsYWcgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGNhbGxpbmcgdGhlIG1vZGlmaWVkIGNvZGUsIHNvIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbW0vdm1hbGxvYy5jYCBhbmQgS2NvbmZpZy4gR2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZG9pbmcgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBpbnNpZ2h0IGludG8gdGhlIHBvc3NpYmxlIGltcGFjdHMgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjE3LjEyNDQ1Nzc3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1NTM4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wdXJnZV92bWFwX2FyZWFfbGF6eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIzNTg9c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMzY5LSAqL1xcbm1tL3ZtYWxsb2MuYzoyMzcwOnN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTIzNzEtXFx0XFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXFxuLS1cXG5tbS92bWFsbG9jLmM9MjQ0Nz1zdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjQ1MS1cXHRwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKCk7XFxubW0vdm1hbGxvYy5jOjI0NTI6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xcbm1tL3ZtYWxsb2MuYy0yNDUzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yNDU2PXN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDU4LVxcdG11dGV4X2xvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxubW0vdm1hbGxvYy5jOjI0NTk6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcXG5tbS92bWFsbG9jLmMtMjQ2MC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuLS1cXG5tbS92bWFsbG9jLmM9Mjk3Mz1zdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsdXNoKVxcbi0tXFxubW0vdm1hbGxvYy5jLTMwMTktXFxubW0vdm1hbGxvYy5jOjMwMjA6XFx0aWYgKCFfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHN0YXJ0LCBlbmQsIGZhbHNlKSBcXHUwMDI2XFx1MDAyNiBmbHVzaClcXG5tbS92bWFsbG9jLmMtMzAyMS1cXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzoxNy4yMzYwMTY5NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQwNjY4MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgQ2hhbmdlcyBpbiB2bWFsbG9jLmMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgY29uY2VudHJhdGVkIGFyZWEgb2Ygd29yayBhcm91bmQgdm1hcCBhcmVhIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHB1cmdpbmcgYW5kIGZyZWVpbmcgb3BlcmF0aW9ucy4gSSdtIHNlZWluZyBjaGFuZ2VzIGluOiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCB0aGUgaGVscGVyIGBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmtgLCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYW4gZWZmb3J0IHRvIGltcHJvdmUgdGhlIGVmZmljaWVuY3kgb3Igcm9idXN0bmVzcyBvZiB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LCBwb3NzaWJseSBhZGRyZXNzaW5nIGlzc3VlcyBhcm91bmQgZnJhZ21lbnRhdGlvbiBvciBsYXRlbmN5IHdoZW4gcmVjbGFpbWluZyB2bWFsbG9jJ2QgcmVnaW9ucy4gSSBhbHNvIG5vdGljZWQgYHZtX3VubWFwX2FsaWFzZXNgIGFuZCBpdHMgaW50ZXJuYWwgdmFyaWFudCBgX3ZtX3VubWFwX2FsaWFzZXNgIGluIHRoZSBtaXguIEZpbmFsbHksIEkndmUgZ290IGB2bWFsbG9jX2luaXRfd29ya3F1ZXVlYCwgYnV0IHRoYXQncyBqdXN0IGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBwcm9iYWJseSBub3QgcGFydCBvZiB0aGUgY29yZSBjaGFuZ2VzLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqaW1wYWN0KiBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaG93IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHZtYWxsb2MgbGlmZWN5Y2xlLiBJJ2xsIGFsc28gYmUgZXhhbWluaW5nIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBmaWxlIHRvIGVzdGFibGlzaCBhIGNvbXBsZXRlIG92ZXJ2aWV3LiBJIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29tbWl0IG1lc3NhZ2VzIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MjAuNDc2Njg3ODg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTc3MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfdm1hcF9hcmVhX25vZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yNDU2PXN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDY3LSAqL1xcbm1tL3ZtYWxsb2MuYzoyNDY4OnN0YXRpYyB2b2lkIGZyZWVfdm1hcF9hcmVhX25vZmx1c2goc3RydWN0IHZtYXBfYXJlYSAqdmEpXFxubW0vdm1hbGxvYy5jLTI0Njkte1xcbi0tXFxubW0vdm1hbGxvYy5jLTI0OTItXFxubW0vdm1hbGxvYy5jOjI0OTM6XFx0dHJhY2VfZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YV9zdGFydCwgbnJfbGF6eSwgbnJfbGF6eV9tYXgpO1xcbm1tL3ZtYWxsb2MuYy0yNDk0LVxcbi0tXFxubW0vdm1hbGxvYy5jPTI1MDQ9c3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjUxMC1cXG5tbS92bWFsbG9jLmM6MjUxMTpcXHRmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHZhKTtcXG5tbS92bWFsbG9jLmMtMjUxMi19XFxuLS1cXG5tbS92bWFsbG9jLmM9Mjc4OT1zdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYmxvY2soc3RydWN0IHZtYXBfYmxvY2sgKnZiKVxcbi0tXFxubW0vdm1hbGxvYy5jLTI4MDMtXFxubW0vdm1hbGxvYy5jOjI4MDQ6XFx0ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2Yi1cXHUwMDNldmEpO1xcbm1tL3ZtYWxsb2MuYy0yODA1LVxcdGtmcmVlX3JjdSh2YiwgcmN1X2hlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzoyMC41NDQ4Njk3MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg5Nzg2NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlmZjogQSBRdWljayBTY2FuIG9mIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlcyB3aXRoaW4gdGhpcyBkaWZmIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgbWVtb3J5IG1hcC4gRmlyc3QsIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGxpc3QgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGBwdXJnZV92bWFwX25vZGVgLCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAsIGByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzYCwgYW5kIGB2bV91bm1hcF9hbGlhc2VzYC4gSSdsbCB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBoYW5kbGUgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCB1bm1hcHBpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIG9mIHRoZSBrZXkgZnVuY3Rpb25zLCBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBDT05GSUcgb3B0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYHZtYWxsb2MuY2AuIEknbGwgcXVpY2tseSBjaGVjayBgbW0vTWFrZWZpbGVgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCBqdW1wIG91dC4gVGhhdCB3YXksIEkgY2FuIHRhaWxvciBteSBhbmFseXNpcyBmcm9tIHRoZSBzdGFydCBhbmQgYXZvaWQgb3Zlcmxvb2tpbmcgYW55IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzM4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjIyLjkzNDY1OTEzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxNTE0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTM5LVxcdFxcdFxcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxcXFxubW0vTWFrZWZpbGU6NDA6XFx0XFx0XFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXFxubW0vTWFrZWZpbGUtNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjIzLjA0ODgxNTQ1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzEzMTc1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgbW0vdm1hbGxvYy5jYCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19NTVVgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gb24gYW1kNjQgYXJjaGl0ZWN0dXJlczsgaXQncyBhbHdheXMgc2V0IHRvICd5Jy4gVGhhdCdzIG5vdCB0aGUgcHJvYmxlbS4gV2hhdCBJIG5lZWQgdG8gZG8gaXMgaWRlbnRpZnkgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb2RlIGFyb3VuZCB0aG9zZSBtb2RpZmljYXRpb25zIGluIGBtbS92bWFsbG9jLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZS4gTGV0J3MgZGlnIGRlZXBlci4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwLCBJIHNob3VsZCByZWFsbHkgbG9vayBhdCBhIHdpZGVyIHJhbmdlLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDIzMDAgdGhyb3VnaCAyNTUwIGluIGBtbS92bWFsbG9jLmNgLiBUaW1lIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBzZWN0aW9uLiBIb3BlZnVsbHksIEknbGwgZmluZCBzb21lIHJlbGF0ZWQgY29uZGl0aW9uYWwgY29kZSB0aGF0IGdpdmVzIG1lIHNvbWUgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzoyNS4xMjAxMzU2OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdFxcdH1cXG4yMzUxOlxcdFxcbjIzNTI6XFx0XFx0YXRvbWljX2xvbmdfc3ViKG5yX3B1cmdlZF9wYWdlcywgXFx1MDAyNnZtYXBfbGF6eV9ucik7XFxuMjM1MzpcXHRcXG4yMzU0OlxcdFxcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXFx1MDAyNmxvY2FsX2xpc3QpO1xcbjIzNTU6XFx0fVxcbjIzNTY6XFx0XFxuMjM1NzpcXHRzdGF0aWMgYm9vbFxcbjIzNTg6XFx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcXG4yMzU5OlxcdFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4yMzYwOlxcdHtcXG4yMzYxOlxcdFxcdGlmICh3cSlcXG4yMzYyOlxcdFxcdFxcdHJldHVybiBxdWV1ZV93b3JrKHdxLCB3b3JrKTtcXG4yMzYzOlxcdFxcbjIzNjQ6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIzNjU6XFx0fVxcbjIzNjY6XFx0XFxuMjM2NzpcXHQvKlxcbjIzNjg6XFx0ICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy5cXG4yMzY5OlxcdCAqL1xcbjIzNzA6XFx0c3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4yMzcxOlxcdFxcdFxcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxcbjIzNzI6XFx0e1xcbjIzNzM6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xcbjIzNzQ6XFx0XFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDtcXG4yMzc1OlxcdFxcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xcbjIzNzY6XFx0XFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XFxuMjM3NzpcXHRcXG4yMzc4OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuMjM3OTpcXHRcXG4yMzgwOlxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjIzODE6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV9saXN0KTtcXG4yMzgyOlxcdFxcdFxcdHZuLVxcdTAwM2Vza2lwX3BvcHVsYXRlID0gZnVsbF9wb29sX2RlY2F5O1xcbjIzODM6XFx0XFx0XFx0ZGVjYXlfdmFfcG9vbF9ub2RlKHZuLCBmdWxsX3Bvb2xfZGVjYXkpO1xcbjIzODQ6XFx0XFxuMjM4NTpcXHRcXHRcXHRpZiAoUkJfRU1QVFlfUk9PVChcXHUwMDI2dm4tXFx1MDAzZWxhenkucm9vdCkpXFxuMjM4NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMzg3OlxcdFxcbjIzODg6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5sb2NrKTtcXG4yMzg5OlxcdFxcdFxcdFdSSVRFX09OQ0Uodm4tXFx1MDAzZWxhenkucm9vdC5yYl9ub2RlLCBOVUxMKTtcXG4yMzkwOlxcdFxcdFxcdGxpc3RfcmVwbGFjZV9pbml0KFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5oZWFkLCBcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QpO1xcbjIzOTE6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VsYXp5LmxvY2spO1xcbjIzOTI6XFx0XFxuMjM5MzpcXHRcXHRcXHRzdGFydCA9IG1pbihzdGFydCwgbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QsXFxuMjM5NDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1hcF9hcmVhLCBsaXN0KS1cXHUwMDNldmFfc3RhcnQpO1xcbjIzOTU6XFx0XFxuMjM5NjpcXHRcXHRcXHRlbmQgPSBtYXgoZW5kLCBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV9saXN0LFxcbjIzOTc6XFx0XFx0XFx0XFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXFx1MDAzZXZhX2VuZCk7XFxuMjM5ODpcXHRcXG4yMzk5OlxcdFxcdFxcdG5yX3B1cmdlX25vZGVzKys7XFxuMjQwMDpcXHRcXHR9XFxuMjQwMTpcXHRcXG4yNDAyOlxcdFxcdGlmIChucl9wdXJnZV9ub2RlcyBcXHUwMDNlIDApIHtcXG4yNDAzOlxcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XFxuMjQwNDpcXHRcXG4yNDA1OlxcdFxcdFxcdC8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovXFxuMjQwNjpcXHRcXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XFxuMjQwNzpcXHRcXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XFxuMjQwODpcXHRcXG4yNDA5OlxcdFxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjI0MTA6XFx0XFx0XFx0XFx0dm4tXFx1MDAzZXdvcmtfcXVldWVkID0gZmFsc2U7XFxuMjQxMTpcXHRcXG4yNDEyOlxcdFxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2VfbGlzdCkpXFxuMjQxMzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNDE0OlxcdFxcbjI0MTU6XFx0XFx0XFx0XFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXFx1MDAzZSAwKSB7XFxuMjQxNjpcXHRcXHRcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xcbjI0MTc6XFx0XFx0XFx0XFx0XFx0dm4tXFx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxcbjI0MTg6XFx0XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuMjQxOTpcXHRcXG4yNDIwOlxcdFxcdFxcdFxcdFxcdGlmICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHtcXG4yNDIxOlxcdFxcdFxcdFxcdFxcdFxcdG5yX3B1cmdlX2hlbHBlcnMtLTtcXG4yNDIyOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI0MjM6XFx0XFx0XFx0XFx0XFx0fVxcbjI0MjQ6XFx0XFx0XFx0XFx0fVxcbjI0MjU6XFx0XFxuMjQyNjpcXHRcXHRcXHRcXHQvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi9cXG4yNDI3OlxcdFxcdFxcdFxcdHB1cmdlX3ZtYXBfbm9kZShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbjI0Mjg6XFx0XFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuMjQyOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjI1LjEyMDQwNjU3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI3NzI4ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIGFuZCByZXNwb25kaW5nIHRvIHRoZSBwcm9tcHQ6XG5cbioqVGFyZ2V0ZWQgUmV2aWV3IEFyZWEqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGZvY3VzZWQgYW5kIGRpZyBpbnRvIHRoaXMgc2VjdGlvbi4gTGV0J3MgbWFrZSBzdXJlIHdlIHNjcnV0aW5pemUgbGluZXMgMjQzMCB0aHJvdWdoIDI1MTAuIEl0J3MgdGltZSB0byB6ZXJvIGluIG9uIHRoYXQgc3BlY2lmaWMgcmFuZ2U7IHRoYXQncyB3aGVyZSBJIGFudGljaXBhdGUgd2UnbGwgZGlzY292ZXIgdGhlIGtleSBudWFuY2VzIHRoYXQgbmVlZCBhdHRlbnRpb24uIFRpbWUgdG8gY2FyZWZ1bGx5IGFuZCBtZXRob2RpY2FsbHkgcmV2aWV3IHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MjcuMTQ4MTM3NzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQzMDpcXHRcXG4yNDMxOlxcdFxcdFxcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cXG4yNDMyOlxcdFxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjI0MzM6XFx0XFx0XFx0XFx0aWYgKHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCkge1xcbjI0MzQ6XFx0XFx0XFx0XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbjI0MzU6XFx0XFx0XFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuMjQzNjpcXHRcXHRcXHRcXHR9XFxuMjQzNzpcXHRcXHRcXHR9XFxuMjQzODpcXHRcXHR9XFxuMjQzOTpcXHRcXG4yNDQwOlxcdFxcdHRyYWNlX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHN0YXJ0LCBlbmQsIG5yX3B1cmdlZF9hcmVhcyk7XFxuMjQ0MTpcXHRcXHRyZXR1cm4gbnJfcHVyZ2VkX2FyZWFzIFxcdTAwM2UgMDtcXG4yNDQyOlxcdH1cXG4yNDQzOlxcdFxcbjI0NDQ6XFx0LypcXG4yNDQ1OlxcdCAqIFJlY2xhaW0gdm1hcCBhcmVhcyBieSBwdXJnaW5nIGZyYWdtZW50ZWQgYmxvY2tzIGFuZCBwdXJnZV92bWFwX2FyZWFfbGlzdC5cXG4yNDQ2OlxcdCAqL1xcbjI0NDc6XFx0c3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKVxcbjI0NDg6XFx0XFxuMjQ0OTpcXHR7XFxuMjQ1MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbjI0NTE6XFx0XFx0cHVyZ2VfZnJhZ21lbnRlZF9ibG9ja3NfYWxsY3B1cygpO1xcbjI0NTI6XFx0XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xcbjI0NTM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbjI0NTQ6XFx0fVxcbjI0NTU6XFx0XFxuMjQ1NjpcXHRzdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMjQ1NzpcXHR7XFxuMjQ1ODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbjI0NTk6XFx0XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcXG4yNDYwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcXG4yNDYxOlxcdH1cXG4yNDYyOlxcdFxcbjI0NjM6XFx0LypcXG4yNDY0OlxcdCAqIEZyZWUgYSB2bWFwIGFyZWEsIGNhbGxlciBlbnN1cmluZyB0aGF0IHRoZSBhcmVhIGhhcyBiZWVuIHVubWFwcGVkLFxcbjI0NjU6XFx0ICogdW5saW5rZWQgYW5kIGZsdXNoX2NhY2hlX3Z1bm1hcCBoYWQgYmVlbiBjYWxsZWQgZm9yIHRoZSBjb3JyZWN0XFxuMjQ2NjpcXHQgKiByYW5nZSBwcmV2aW91c2x5LlxcbjI0Njc6XFx0ICovXFxuMjQ2ODpcXHRzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxcbjI0Njk6XFx0e1xcbjI0NzA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9sYXp5X21heCA9IGxhenlfbWF4X3BhZ2VzKCk7XFxuMjQ3MTpcXHRcXHR1bnNpZ25lZCBsb25nIHZhX3N0YXJ0ID0gdmEtXFx1MDAzZXZhX3N0YXJ0O1xcbjI0NzI6XFx0XFx0dW5zaWduZWQgaW50IHZuX2lkID0gZGVjb2RlX3ZuX2lkKHZhLVxcdTAwM2VmbGFncyk7XFxuMjQ3MzpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG4yNDc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfbGF6eTtcXG4yNDc1OlxcdFxcbjI0NzY6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2dmEtXFx1MDAzZWxpc3QpKSlcXG4yNDc3OlxcdFxcdFxcdHJldHVybjtcXG4yNDc4OlxcdFxcbjI0Nzk6XFx0XFx0bnJfbGF6eSA9IGF0b21pY19sb25nX2FkZF9yZXR1cm5fcmVsYXhlZCh2YV9zaXplKHZhKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbjI0ODA6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ2bWFwX2xhenlfbnIpO1xcbjI0ODE6XFx0XFxuMjQ4MjpcXHRcXHQvKlxcbjI0ODM6XFx0XFx0ICogSWYgaXQgd2FzIHJlcXVlc3QgYnkgYSBjZXJ0YWluIG5vZGUgd2Ugd291bGQgbGlrZSB0b1xcbjI0ODQ6XFx0XFx0ICogcmV0dXJuIGl0IHRvIHRoYXQgbm9kZSwgaS5lLiBpdHMgcG9vbCBmb3IgbGF0ZXIgcmV1c2UuXFxuMjQ4NTpcXHRcXHQgKi9cXG4yNDg2OlxcdFxcdHZuID0gaXNfdm5faWRfdmFsaWQodm5faWQpID9cXG4yNDg3OlxcdFxcdFxcdGlkX3RvX25vZGUodm5faWQpOmFkZHJfdG9fbm9kZSh2YS1cXHUwMDNldmFfc3RhcnQpO1xcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZuLVxcdTAwM2VsYXp5LmxvY2spO1xcbjI0OTA6XFx0XFx0aW5zZXJ0X3ZtYXBfYXJlYSh2YSwgXFx1MDAyNnZuLVxcdTAwM2VsYXp5LnJvb3QsIFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5oZWFkKTtcXG4yNDkxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5sb2NrKTtcXG4yNDkyOlxcdFxcbjI0OTM6XFx0XFx0dHJhY2VfZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YV9zdGFydCwgbnJfbGF6eSwgbnJfbGF6eV9tYXgpO1xcbjI0OTQ6XFx0XFxuMjQ5NTpcXHRcXHQvKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBtYXkgZnJlZSB2YSBhdCBhbnkgdGltZSAqL1xcbjI0OTY6XFx0XFx0aWYgKHVubGlrZWx5KG5yX2xhenkgXFx1MDAzZSBucl9sYXp5X21heCkpXFxuMjQ5NzpcXHRcXHRcXHRzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoUkVBRF9PTkNFKGRyYWluX3ZtYXBfd3EpLFxcbjI0OTg6XFx0XFx0XFx0XFx0XFx1MDAyNmRyYWluX3ZtYXBfd29yayk7XFxuMjQ5OTpcXHR9XFxuMjUwMDpcXHRcXG4yNTAxOlxcdC8qXFxuMjUwMjpcXHQgKiBGcmVlIGFuZCB1bm1hcCBhIHZtYXAgYXJlYVxcbjI1MDM6XFx0ICovXFxuMjUwNDpcXHRzdGF0aWMgdm9pZCBmcmVlX3VubWFwX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcXG4yNTA1OlxcdHtcXG4yNTA2OlxcdFxcdGZsdXNoX2NhY2hlX3Z1bm1hcCh2YS1cXHUwMDNldmFfc3RhcnQsIHZhLVxcdTAwM2V2YV9lbmQpO1xcbjI1MDc6XFx0XFx0dnVubWFwX3JhbmdlX25vZmx1c2godmEtXFx1MDAzZXZhX3N0YXJ0LCB2YS1cXHUwMDNldmFfZW5kKTtcXG4yNTA4OlxcdFxcdGlmIChkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZF9zdGF0aWMoKSlcXG4yNTA5OlxcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodmEtXFx1MDAzZXZhX3N0YXJ0LCB2YS1cXHUwMDNldmFfZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MjcuMTQ4MzQ1NDU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNzEwNzM5NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFZtYXAgQXJlYSBQdXJnaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBJJ20gZm9jdXNpbmcgb24gdGhlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgKHZtYXApIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaGVyZS4gSSB3YW50IHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zLCBzbyBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIGRyYWluaW5nIGFuZCBwdXJnaW5nIGxvZ2ljLlxuXG5CYXNlZCBvbiB0aGUgaW5pdGlhbCBhbmFseXNpcywgSSd2ZSBnb3QgYSBsaXN0OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gZmFjdG9yIGluIHRoYXQgYHZtX3VubWFwX2FsaWFzZXNgIGNhbGxzIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCwgYW5kIGB2ZnJlZWAgYW5kIGB2dW5tYXBgIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhhbmtmdWxseSwgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0IGRvZXNuJ3QgYXBwZWFyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZyBkZXBlbmRlbmNpZXMgYmV5b25kIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEFNRDY0IGFyY2hpdGVjdHVyZXMuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBlZmZlY3RpdmVseSBlbXB0eS5cblxuVG8gbWFrZSBzdXJlIEknbSBzb2xpZCwgbGV0J3MgcmV2aXNpdCBteSBpbnN0cnVjdGlvbiBzZXQgb25lIGxhc3QgdGltZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIE9rYXksIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBhbnkgY2hhbmdlIGhlcmUgaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSwgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHVuYm91bmQgd29ya3F1ZXVlcyBmb3IgYXN5bmNocm9ub3VzIGRyYWluaW5nIGFuZCBub2RlIHB1cmdpbmcsIGFuZCBtb2RpZnlpbmcgdGhlIG11bHRpLW5vZGUgcHVyZ2UgaXRlcmF0aW9uIGFuZCB3b3JrIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gU3BvdCBvbi5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBDb25maXJtZWQgbGlzdDogYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLCBgcHVyZ2Vfdm1hcF9ub2RlYCwgYHNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya2AsIGBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoYCwgYGRyYWluX3ZtYXBfYXJlYV93b3JrYCwgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQgYFtdYCwgcmVseWluZyBvbiB0aGUgc3RhbmRhcmQgTU1VIGNvbmZpZy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBwcm9jZXNzLCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzNiwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzozMy41MTk0MjM4MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlcIixcbiAgICBcInB1cmdlX3ZtYXBfbm9kZVwiLFxuICAgIFwic2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrXCIsXG4gICAgXCJmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoXCIsXG4gICAgXCJkcmFpbl92bWFwX2FyZWFfd29ya1wiLFxuICAgIFwicmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vdm1hbGxvYy5jLCBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSwgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVmYWN0b3JpbmcgdGhlIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBhbmQgbm9kZSBkcmFpbmluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wdXJnZV92bWFwX2FyZWFfbGF6eVwiLFxuICAgIFwicHVyZ2Vfdm1hcF9ub2RlXCIsXG4gICAgXCJzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmtcIixcbiAgICBcImZyZWVfdm1hcF9hcmVhX25vZmx1c2hcIixcbiAgICBcImRyYWluX3ZtYXBfYXJlYV93b3JrXCIsXG4gICAgXCJyZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS92bWFsbG9jLmMsIGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxLCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZWZhY3RvcmluZyB0aGUgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIGFuZCBub2RlIGRyYWluaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MzMuNTE5NDk5NDI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUyMjQxNDUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjMzLjUyMDU1MzMyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNTIxMzU1OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgbWVjaGFuaXNtIGluIG1tL3ZtYWxsb2MuYyBieSBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSBhbmQgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVwbGFjaW5nIHRoZSBzdGF0aWMgY3B1bWFzayB0cmFja2luZyB3aXRoIGEgcGVyLW5vZGUgYm9vbGVhbiBmbGFnICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxcblxcblRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgYWx0ZXJhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9kYXRhIHNpemVzLiBUaGUgYm9vbGVhbiBmbGFnIGB3b3JrX3F1ZXVlZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiBlYWNoIGl0ZXJhdGlvbiBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxpZmVjeWNsZSwgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjJlMGU3MjFmM2M4ODAxZjVmNzE2Y2M4YTlmMjY2ZDE3Mjg0NWRmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MjM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IGJlYTlmNzZlZDdlNzQuLjg5YzMyN2E2Y2U3ZDkgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTk3Miw2ICs5NzIsNyBAQCBzdGF0aWMgc3RydWN0IHZtYXBfbm9kZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVyZ2Vfd29yaztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkO1xuK1x0Ym9vbCB3b3JrX3F1ZXVlZDtcbiB9IHNpbmdsZTtcbiBcbiAvKlxuQEAgLTEwOTAsNiArMTA5MSw4IEBAIHN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZCk7XG4gc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQodm1hcF9ub3RpZnlfbGlzdCk7XG4gc3RhdGljIHZvaWQgZHJhaW5fdm1hcF9hcmVhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgREVDTEFSRV9XT1JLKGRyYWluX3ZtYXBfd29yaywgZHJhaW5fdm1hcF9hcmVhX3dvcmspO1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF9oZWxwZXJzX3dxO1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF93cTtcbiBcbiBzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgYXRvbWljX2xvbmdfdCB2bWFwX2xhenlfbnI7XG4gXG5AQCAtMjM1MSw2ICsyMzU0LDE2IEBAIHN0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfbm9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRyZWNsYWltX2xpc3RfZ2xvYmFsKFx1MDAyNmxvY2FsX2xpc3QpO1xuIH1cbiBcbitzdGF0aWMgYm9vbFxuK3NjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsXG4rXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRpZiAod3EpXG4rXHRcdHJldHVybiBxdWV1ZV93b3JrKHdxLCB3b3JrKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLypcbiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLlxuICAqL1xuQEAgLTIzNTgsMTkgKzIzNzEsMTIgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuK1x0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDtcbiBcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xuLVx0c3RhdGljIGNwdW1hc2tfdCBwdXJnZV9ub2Rlcztcbi1cdHVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlcztcbiBcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuLVx0aW50IGk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG4gXG4tXHQvKlxuLVx0ICogVXNlIGNwdW1hc2sgdG8gbWFyayB3aGljaCBub2RlIGhhcyB0byBiZSBwcm9jZXNzZWQuXG4tXHQgKi9cbi1cdHB1cmdlX25vZGVzID0gQ1BVX01BU0tfTk9ORTtcbi1cbiBcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0KTtcbiBcdFx0dm4tXHUwMDNlc2tpcF9wb3B1bGF0ZSA9IGZ1bGxfcG9vbF9kZWNheTtcbkBAIC0yMzkwLDEwICsyMzk2LDkgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ZW5kID0gbWF4KGVuZCwgbGlzdF9sYXN0X2VudHJ5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QsXG4gXHRcdFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXHUwMDNldmFfZW5kKTtcbiBcbi1cdFx0Y3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCBcdTAwMjZwdXJnZV9ub2Rlcyk7XG4rXHRcdG5yX3B1cmdlX25vZGVzKys7XG4gXHR9XG4gXG4tXHRucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KFx1MDAyNnB1cmdlX25vZGVzKTtcbiBcdGlmIChucl9wdXJnZV9ub2RlcyBcdTAwM2UgMCkge1xuIFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xuIFxuQEAgLTI0MDEsMjkgKzI0MDYsMzEgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0bnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XG4gXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTtcbiBcbi1cdFx0Zm9yX2VhY2hfY3B1KGksIFx1MDAyNnB1cmdlX25vZGVzKSB7XG4tXHRcdFx0dm4gPSBcdTAwMjZ2bWFwX25vZGVzW2ldO1xuK1x0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbitcdFx0XHR2bi1cdTAwM2V3b3JrX3F1ZXVlZCA9IGZhbHNlO1xuK1xuK1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbiBcdFx0XHRcdElOSVRfV09SSyhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xuK1x0XHRcdFx0dm4tXHUwMDNld29ya19xdWV1ZWQgPSBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoXG4rXHRcdFx0XHRcdFJFQURfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EpLCBcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbiBcbi1cdFx0XHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmtfb24oaSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXG4tXHRcdFx0XHRucl9wdXJnZV9oZWxwZXJzLS07XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYyA9IE5VTEw7XG4tXHRcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuK1x0XHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4rXHRcdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHR9XG4gXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbitcdFx0XHQvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi9cbitcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4rXHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbitcdFx0fVxuIFxuLVx0XHRcdGlmICh2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMpIHtcbitcdFx0LyogV2FpdCBmb3IgY29tcGxldGlvbiBpZiBxdWV1ZWQgYW55LiAqL1xuK1x0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbitcdFx0XHRpZiAodm4tXHUwMDNld29ya19xdWV1ZWQpIHtcbiBcdFx0XHRcdGZsdXNoX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4gXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuIFx0XHRcdH1cbkBAIC0yNDg3LDcgKzI0OTQsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxuIFxuIFx0LyogQWZ0ZXIgdGhpcyBwb2ludCwgd2UgbWF5IGZyZWUgdmEgYXQgYW55IHRpbWUgKi9cbiBcdGlmICh1bmxpa2VseShucl9sYXp5IFx1MDAzZSBucl9sYXp5X21heCkpXG4tXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbitcdFx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFJFQURfT05DRShkcmFpbl92bWFwX3dxKSxcbitcdFx0XHRcdTAwMjZkcmFpbl92bWFwX3dvcmspO1xuIH1cbiBcbiAvKlxuQEAgLTU1ODcsMyArNTU5NSwyMCBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdHZtYXBfbm9kZV9zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSB2bWFwX25vZGVfc2hyaW5rX3NjYW47XG4gXHRzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpO1xuIH1cbitcbitzdGF0aWMgaW50IF9faW5pdCB2bWFsbG9jX2luaXRfd29ya3F1ZXVlKHZvaWQpXG4re1xuK1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTtcbitcdHVuc2lnbmVkIGludCBmbGFncyA9IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTTtcbitcbitcdGRyYWluX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwidm1hcF9kcmFpblwiLCBmbGFncywgMCk7XG4rXHRXQVJOX09OX09OQ0UoZHJhaW5fd3EgPT0gTlVMTCk7XG4rXHRXUklURV9PTkNFKGRyYWluX3ZtYXBfd3EsIGRyYWluX3dxKTtcbitcbitcdGhlbHBlcnNfd3EgPSBhbGxvY193b3JrcXVldWUoXCJ2bWFwX2RyYWluX2hlbHBlcnNcIiwgZmxhZ3MsIDApO1xuK1x0V0FSTl9PTl9PTkNFKGhlbHBlcnNfd3EgPT0gTlVMTCk7XG4rXHRXUklURV9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSwgaGVscGVyc193cSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rZWFybHlfaW5pdGNhbGwodm1hbGxvY19pbml0X3dvcmtxdWV1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzozMy41MjA1NTgxOThaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQxMzU0NTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggdG8gYG1tL3ZtYWxsb2MuY2Agd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNldmVyYWwgY2hhbmdlczsgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBhIGB3b3JrX3F1ZXVlZGAgYm9vbGVhbiB0byBgc3RydWN0IHZtYXBfbm9kZWAsIGFuZCB0d28gbmV3IHdvcmtxdWV1ZXMsIGBkcmFpbl92bWFwX2hlbHBlcnNfd3FgIGFuZCBgZHJhaW5fdm1hcF93cWAsIGluaXRpYWxpemVkIGR1cmluZyBgZWFybHlfaW5pdGNhbGxgLiBUaGUgZXhpc3RpbmcgY3B1bWFzayB0cmFja2luZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgaXMgcmVwbGFjZWQgd2l0aCBkaXJlY3QgaXRlcmF0aW9uLCBhbmQgd29yayBpcyBxdWV1ZWQgb24gdGhlc2Ugd29ya3F1ZXVlcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGdldCBvdXQgdGhlcmUuIEZpcnN0IHBhc3MsIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgdXNlci1zcGFjZSBjb3BpZXMgKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMsIG5vdGhpbmcgY29tcGxleCkuIFRoZXJlIGFyZW4ndCBhbnkgaW50cmljYXRlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgYXJvdW5kIHVuaW5pdGlhbGl6ZWQsIGVpdGhlci4gTG9va2luZyBjbG9zZXIsIGFsbCB0aGUgYHZtYXBfbm9kZWAgZWxlbWVudHMgc2VlbSB0byBiZSBzdGF0aWNhbGx5IG9yIGdsb2JhbGx5IGFsbG9jYXRlZC4gQW5kLCBnb29kLCB0aGUgYHZuLVx1MDAzZXdvcmtfcXVldWVkYCBmaWVsZCAqaXMqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB3aXRoaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGJlZm9yZSBpdCBpcyB1c2VkLiBJdCBsb29rcyBsaWtlIHRoZSB3b3JrcXVldWUgb3BlcmF0aW9ucyBoZXJlIGFyZSBwcmltYXJpbHkgYWJvdXQgc3luY2hyb25pemF0aW9uLCBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2bWFsbG9jIHN1YnN5c3RlbSwgcmF0aGVyIHRoYW4gY29tcGxleCBkYXRhIG1hbmlwdWxhdGlvbi5cblxuTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgYHB1cmdlX3ZtYXBfbm9kZWAgYW5kIGFsbCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHZlcmlmeSB0aGVyZSBhcmUgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgd2FudCB0byBzZWUgaWYgYW55IG9mIHRoZXNlIG9wZXJhdGlvbnMgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRpcmVjdGx5LCBlaXRoZXIgZHVlIHRvIGEgZGF0YS1yYWNlIG9yIGZyb20gY2FyZWxlc3MgdXNlLiBJIHdpbGwgaW5zcGVjdCBgcHVyZ2Vfdm1hcF9ub2RlYCBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIHRoaXMuIEkgdGhpbmsgaXQgaXMgKnVubGlrZWx5KiwgYnV0IEkgd2FudCB0byBiZSAqY2VydGFpbiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzozNy45MzQxMDcyMDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzI1NDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXJnZV92bWFwX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yMjk4PWthc2FuX3JlbGVhc2Vfdm1hbGxvY19ub2RlKHN0cnVjdCB2bWFwX25vZGUgKnZuKVxcbi0tXFxubW0vdm1hbGxvYy5jLTIzMjEtXFxubW0vdm1hbGxvYy5jOjIzMjI6c3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5tbS92bWFsbG9jLmMtMjMyMy17XFxuLS1cXG5tbS92bWFsbG9jLmM9MjM3MD1zdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTI0MTUtXFx0XFx0XFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXFx1MDAzZSAwKSB7XFxubW0vdm1hbGxvYy5jOjI0MTY6XFx0XFx0XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTtcXG5tbS92bWFsbG9jLmMtMjQxNy1cXHRcXHRcXHRcXHR2bi1cXHUwMDNld29ya19xdWV1ZWQgPSBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoXFxuLS1cXG5tbS92bWFsbG9jLmMtMjQyNi1cXHRcXHRcXHQvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi9cXG5tbS92bWFsbG9jLmM6MjQyNzpcXHRcXHRcXHRwdXJnZV92bWFwX25vZGUoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG5tbS92bWFsbG9jLmMtMjQyOC1cXHRcXHRcXHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXFx1MDAzZW5yX3B1cmdlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MzguMjQxMzY2MjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxMjAwMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgcHVyZ2Vfdm1hcF9ub2RlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHZtYWxsb2NgIHNwYWNlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBtbS92bWFsbG9jLmNgIGFuZCBmb2N1cyBvbiB0aGUgYHB1cmdlX3ZtYXBfbm9kZWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgaXQgYmVpbmcgY3JpdGljYWwgZm9yIGZyZWVpbmcgdXAgdGhvc2UgVk0gYXJlYSBub2RlcywgZXNwZWNpYWxseSBhZnRlciBzb21ldGhpbmcgZ29lcyB3cm9uZyBvciB3aGVuIHJlc291cmNlcyBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdm1hcCBhbGxvY2F0b3IncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zLiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gaW4gdGhlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQgbGF5ZXIuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjQwLjY1MzM3MjY4N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMjA6XFx0fVxcbjIzMjE6XFx0XFxuMjMyMjpcXHRzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjIzMjM6XFx0e1xcbjIzMjQ6XFx0XFx0c3RydWN0IHZtYXBfbm9kZSAqdm4gPSBjb250YWluZXJfb2Yod29yayxcXG4yMzI1OlxcdFxcdFxcdHN0cnVjdCB2bWFwX25vZGUsIHB1cmdlX3dvcmspO1xcbjIzMjY6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfcGFnZXMgPSAwO1xcbjIzMjc6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmEsICpuX3ZhO1xcbjIzMjg6XFx0XFx0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xcbjIzMjk6XFx0XFxuMjMzMDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU5fVk1BTExPQykpXFxuMjMzMTpcXHRcXHRcXHRrYXNhbl9yZWxlYXNlX3ZtYWxsb2Nfbm9kZSh2bik7XFxuMjMzMjpcXHRcXG4yMzMzOlxcdFxcdHZuLVxcdTAwM2Vucl9wdXJnZWQgPSAwO1xcbjIzMzQ6XFx0XFxuMjMzNTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmEsIG5fdmEsIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2VfbGlzdCwgbGlzdCkge1xcbjIzMzY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuciA9IHZhX3NpemUodmEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMjMzNzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdm5faWQgPSBkZWNvZGVfdm5faWQodmEtXFx1MDAzZWZsYWdzKTtcXG4yMzM4OlxcdFxcbjIzMzk6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dmEtXFx1MDAzZWxpc3QpO1xcbjIzNDA6XFx0XFxuMjM0MTpcXHRcXHRcXHRucl9wdXJnZWRfcGFnZXMgKz0gbnI7XFxuMjM0MjpcXHRcXHRcXHR2bi1cXHUwMDNlbnJfcHVyZ2VkKys7XFxuMjM0MzpcXHRcXG4yMzQ0OlxcdFxcdFxcdGlmIChpc192bl9pZF92YWxpZCh2bl9pZCkgXFx1MDAyNlxcdTAwMjYgIXZuLVxcdTAwM2Vza2lwX3BvcHVsYXRlKVxcbjIzNDU6XFx0XFx0XFx0XFx0aWYgKG5vZGVfcG9vbF9hZGRfdmEodm4sIHZhKSlcXG4yMzQ2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIzNDc6XFx0XFxuMjM0ODpcXHRcXHRcXHQvKiBHbyBiYWNrIHRvIGdsb2JhbC4gKi9cXG4yMzQ5OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZ2YS1cXHUwMDNlbGlzdCwgXFx1MDAyNmxvY2FsX2xpc3QpO1xcbjIzNTA6XFx0XFx0fVxcbjIzNTE6XFx0XFxuMjM1MjpcXHRcXHRhdG9taWNfbG9uZ19zdWIobnJfcHVyZ2VkX3BhZ2VzLCBcXHUwMDI2dm1hcF9sYXp5X25yKTtcXG4yMzUzOlxcdFxcbjIzNTQ6XFx0XFx0cmVjbGFpbV9saXN0X2dsb2JhbChcXHUwMDI2bG9jYWxfbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjQwLjY1MzU3MzQyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzg4MzE3MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgTGF6eSBQdXJnaW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJldmlld2VkIHRoZSBjaGFuZ2VzIGluIGBtbS92bWFsbG9jLmNgIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgcG9zaXRpdmUuIEl0J3MgYSBjbGVhbiwgZm9jdXNlZCBpbXByb3ZlbWVudCB0byB0aGUgbGF6eSBwdXJnaW5nIG1lY2hhbmlzbSB3aXRoaW4gdm1hbGxvYy4gVGhlIGludHJvZHVjdGlvbiBvZiBkZWRpY2F0ZWQgd29ya3F1ZXVlcywgYGRyYWluX3ZtYXBfd3FgIGFuZCBgZHJhaW5fdm1hcF9oZWxwZXJzX3dxYCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIGBjcHVtYXNrYCB0cmFja2luZywgaXMgYSBkZWZpbml0ZSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEFuZCBzd2l0Y2hpbmcgdG8gcGVyLW5vZGUgYHdvcmtfcXVldWVkYCBmbGFncyBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgYW5kIHNob3VsZCBwcm92aWRlIGJldHRlciBncmFudWxhcml0eS5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcywgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgYXR0YWNrIHZlY3RvcnMgaGVyZS4gTm8gdXNlci1jb3B5IHZ1bG5lcmFiaWxpdGllcywgbm8gcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBjYW4ndCBzcG90IGFueSBpbnN0YW5jZXMgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5kZWZpbmVkIGRhdGEuIFRoYXQncyBhIGh1Z2UgcmVsaWVmLlxuXG5Gcm9tIGEgY29uY3VycmVuY3kgcGVyc3BlY3RpdmUsIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLCB1dGlsaXppbmcgd29ya3F1ZXVlcywgc2hvdWxkIGJlIHJvYnVzdC4gUGx1cywgYW55IHJlbWFpbmluZyBjb25jZXJucyByZWdhcmRpbmcgd29ya3F1ZXVlIGxpZmV0aW1lcyBvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHRoYXQgKm1pZ2h0KiBiZSBwcmVzZW50LCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB1c3VhbCByaWdvcm91cyB0ZXN0aW5nLiBTbywgSSBkb24ndCBzZWUgYW55IG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTiBhbmFseXNpcy4gYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBoZXJlLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCwgbGV0J3MgZ28gYWhlYWQgYW5kIHNpZ25hbCB0aGF0IHRoZSByZXZpZXcgaXMgY29tcGxldGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MSwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzo0NC4wNDE4OTI4MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaW4gbW0vdm1hbGxvYy5jIGJ5IGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxIGFuZCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZXBsYWNpbmcgdGhlIHN0YXRpYyBjcHVtYXNrIHRyYWNraW5nIHdpdGggYSBwZXItbm9kZSBib29sZWFuIGZsYWcgKHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCkgd2hlbiBzY2hlZHVsaW5nIHB1cmdlIGpvYnMuXFxuXFxuVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbHRlcmF0aW9ucyB0byBidWZmZXIgYm91bmRzL2RhdGEgc2l6ZXMuIFRoZSBib29sZWFuIGZsYWcgYHdvcmtfcXVldWVkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIGVhY2ggaXRlcmF0aW9uIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZWN5Y2xlLCBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgbWVjaGFuaXNtIGluIG1tL3ZtYWxsb2MuYyBieSBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSBhbmQgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVwbGFjaW5nIHRoZSBzdGF0aWMgY3B1bWFzayB0cmFja2luZyB3aXRoIGEgcGVyLW5vZGUgYm9vbGVhbiBmbGFnICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxcblxcblRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgYWx0ZXJhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9kYXRhIHNpemVzLiBUaGUgYm9vbGVhbiBmbGFnIGB3b3JrX3F1ZXVlZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiBlYWNoIGl0ZXJhdGlvbiBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxpZmVjeWNsZSwgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow24ks5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 15:04:26 +0000 UTC FinishedAt: 2026-09-06 15:23:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ed57836ff3000d5c8b889e04153efec88102311f", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ed57836ff3000d5c8b889e04153efec88102311f", "config_name": "upstream-apparmor-kasan.config", "series_id": "e0be0f6c-8311-424f-b7e6-0a91ffdb20b1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__purge_vmap_area_lazy", "purge_vmap_node", "schedule_drain_vmap_work", "free_vmap_area_noflush", "drain_vmap_area_work", "reclaim_and_purge_vmap_areas" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wdXJnZV92bWFwX2FyZWFfbGF6eSYjMzQ7LAogICAgJiMzNDtwdXJnZV92bWFwX25vZGUmIzM0OywKICAgICYjMzQ7c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrJiMzNDssCiAgICAmIzM0O2ZyZWVfdm1hcF9hcmVhX25vZmx1c2gmIzM0OywKICAgICYjMzQ7ZHJhaW5fdm1hcF9hcmVhX3dvcmsmIzM0OywKICAgICYjMzQ7cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaW4gbW0vdm1hbGxvYy5jIGJ5IGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxIGFuZCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZXBsYWNpbmcgdGhlIHN0YXRpYyBjcHVtYXNrIHRyYWNraW5nIHdpdGggYSBwZXItbm9kZSBib29sZWFuIGZsYWcgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB3aGVuIHNjaGVkdWxpbmcgcHVyZ2Ugam9icy5cblxuVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbHRlcmF0aW9ucyB0byBidWZmZXIgYm91bmRzL2RhdGEgc2l6ZXMuIFRoZSBib29sZWFuIGZsYWcgYHdvcmtfcXVldWVkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIGVhY2ggaXRlcmF0aW9uIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZWN5Y2xlLCBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS92bWFsbG9jLmMsIGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxLCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZWZhY3RvcmluZyB0aGUgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIGFuZCBub2RlIGRyYWluaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjIzOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggYmVhOWY3NmVkN2U3NC4uODljMzI3YTZjZTdkOSAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtOTcyLDYgJiM0Mzs5NzIsNyBAQCBzdGF0aWMgc3RydWN0IHZtYXBfbm9kZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVyZ2Vfd29yaztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkO1xuJiM0MztcdGJvb2wgd29ya19xdWV1ZWQ7XG4gfSBzaW5nbGU7XG4gXG4gLypcbkBAIC0xMDkwLDYgJiM0MzsxMDkxLDggQEAgc3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKTtcbiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRCh2bWFwX25vdGlmeV9saXN0KTtcbiBzdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyBERUNMQVJFX1dPUksoZHJhaW5fdm1hcF93b3JrLCBkcmFpbl92bWFwX2FyZWFfd29yayk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF9oZWxwZXJzX3dxO1xuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3ZtYXBfd3E7XG4gXG4gc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIGF0b21pY19sb25nX3Qgdm1hcF9sYXp5X25yO1xuIFxuQEAgLTIzNTEsNiAmIzQzOzIzNTQsMTYgQEAgc3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXHUwMDI2bG9jYWxfbGlzdCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbFxuJiM0MztzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLFxuJiM0MztcdFx0c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHdxKVxuJiM0MztcdFx0cmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLlxuICAqL1xuQEAgLTIzNTgsMTkgJiM0MzsyMzcxLDEyIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXMgPSAwO1xuIFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7XG4tXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xuLVx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4tXHRpbnQgaTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbiBcbi1cdC8qXG4tXHQgKiBVc2UgY3B1bWFzayB0byBtYXJrIHdoaWNoIG5vZGUgaGFzIHRvIGJlIHByb2Nlc3NlZC5cbi1cdCAqL1xuLVx0cHVyZ2Vfbm9kZXMgPSBDUFVfTUFTS19OT05FO1xuLVxuIFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QpO1xuIFx0XHR2bi1cdTAwM2Vza2lwX3BvcHVsYXRlID0gZnVsbF9wb29sX2RlY2F5O1xuQEAgLTIzOTAsMTAgJiM0MzsyMzk2LDkgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ZW5kID0gbWF4KGVuZCwgbGlzdF9sYXN0X2VudHJ5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QsXG4gXHRcdFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXHUwMDNldmFfZW5kKTtcbiBcbi1cdFx0Y3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCBcdTAwMjZwdXJnZV9ub2Rlcyk7XG4mIzQzO1x0XHRucl9wdXJnZV9ub2RlcyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHRucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KFx1MDAyNnB1cmdlX25vZGVzKTtcbiBcdGlmIChucl9wdXJnZV9ub2RlcyBcdTAwM2UgMCkge1xuIFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xuIFxuQEAgLTI0MDEsMjkgJiM0MzsyNDA2LDMxIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuIFx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4gXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbiYjNDM7XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuJiM0MztcdFx0XHR2bi1cdTAwM2V3b3JrX3F1ZXVlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbiBcdFx0XHRcdElOSVRfV09SSyhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xuJiM0MztcdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxuJiM0MztcdFx0XHRcdFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuIFxuLVx0XHRcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSlcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29ya19vbihpLCBcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdGVsc2Vcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cbi1cdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jID0gTlVMTDtcbi1cdFx0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuJiM0MztcdFx0XHRcdGlmICh2bi1cdTAwM2V3b3JrX3F1ZXVlZCkge1xuJiM0MztcdFx0XHRcdFx0bnJfcHVyZ2VfaGVscGVycy0tO1xuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0fVxuIFxuLVx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbi1cdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4mIzQzO1x0XHRcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xuJiM0MztcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4mIzQzO1x0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuJiM0MztcdFx0fVxuIFxuLVx0XHRcdGlmICh2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMpIHtcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cbiYjNDM7XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuJiM0MztcdFx0XHRpZiAodm4tXHUwMDNld29ya19xdWV1ZWQpIHtcbiBcdFx0XHRcdGZsdXNoX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4gXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbiBcdFx0XHR9XG5AQCAtMjQ4Nyw3ICYjNDM7MjQ5NCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm1hcF9hcmVhX25vZmx1c2goc3RydWN0IHZtYXBfYXJlYSAqdmEpXG4gXG4gXHQvKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBtYXkgZnJlZSB2YSBhdCBhbnkgdGltZSAqL1xuIFx0aWYgKHVubGlrZWx5KG5yX2xhenkgXHUwMDNlIG5yX2xhenlfbWF4KSlcbi1cdFx0c2NoZWR1bGVfd29yayhcdTAwMjZkcmFpbl92bWFwX3dvcmspO1xuJiM0MztcdFx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFJFQURfT05DRShkcmFpbl92bWFwX3dxKSxcbiYjNDM7XHRcdFx0XHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbiB9XG4gXG4gLypcbkBAIC01NTg3LDMgJiM0Mzs1NTk1LDIwIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxuIFx0dm1hcF9ub2RlX3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHZtYXBfbm9kZV9zaHJpbmtfc2NhbjtcbiBcdHNocmlua2VyX3JlZ2lzdGVyKHZtYXBfbm9kZV9zaHJpbmtlcik7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU07XG4mIzQzO1xuJiM0MztcdGRyYWluX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O3ZtYXBfZHJhaW5cJiMzNDssIGZsYWdzLCAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0UoZHJhaW5fd3EgPT0gTlVMTCk7XG4mIzQzO1x0V1JJVEVfT05DRShkcmFpbl92bWFwX3dxLCBkcmFpbl93cSk7XG4mIzQzO1xuJiM0MztcdGhlbHBlcnNfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7dm1hcF9kcmFpbl9oZWxwZXJzXCYjMzQ7LCBmbGFncywgMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKGhlbHBlcnNfd3EgPT0gTlVMTCk7XG4mIzQzO1x0V1JJVEVfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EsIGhlbHBlcnNfd3EpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztlYXJseV9pbml0Y2FsbCh2bWFsbG9jX2luaXRfd29ya3F1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcHVyZ2Vfdm1hcF9hcmVhX2xhenkmIzM0OywKICAgICYjMzQ7cHVyZ2Vfdm1hcF9ub2RlJiMzNDssCiAgICAmIzM0O3NjaGVkdWxlX2RyYWluX3ZtYXBfd29yayYjMzQ7LAogICAgJiMzNDtmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoJiMzNDssCiAgICAmIzM0O2RyYWluX3ZtYXBfYXJlYV93b3JrJiMzNDssCiAgICAmIzM0O3JlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS92bWFsbG9jLmMsIGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxLCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZWZhY3RvcmluZyB0aGUgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIGFuZCBub2RlIGRyYWluaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE1OjIzOjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGJlYTlmNzZlZDdlNzQuLjg5YzMyN2E2Y2U3ZDkgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTk3Miw2ICYjNDM7OTcyLDcgQEAgc3RhdGljIHN0cnVjdCB2bWFwX25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgcHVyZ2VfbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVyZ2Vfd29yazsKIAl1bnNpZ25lZCBsb25nIG5yX3B1cmdlZDsKJiM0MzsJYm9vbCB3b3JrX3F1ZXVlZDsKIH0gc2luZ2xlOwogCiAvKgpAQCAtMTA5MCw2ICYjNDM7MTA5MSw4IEBAIHN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZCk7CiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRCh2bWFwX25vdGlmeV9saXN0KTsKIHN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgREVDTEFSRV9XT1JLKGRyYWluX3ZtYXBfd29yaywgZHJhaW5fdm1hcF9hcmVhX3dvcmspOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF9oZWxwZXJzX3dxOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF93cTsKIAogc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIGF0b21pY19sb25nX3Qgdm1hcF9sYXp5X25yOwogCkBAIC0yMzUxLDYgJiM0MzsyMzU0LDE2IEBAIHN0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfbm9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcmVjbGFpbV9saXN0X2dsb2JhbCgmYW1wO2xvY2FsX2xpc3QpOwogfQogCiYjNDM7c3RhdGljIGJvb2wKJiM0MztzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLAomIzQzOwkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJaWYgKHdxKQomIzQzOwkJcmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoKICAqIFB1cmdlcyBhbGwgbGF6aWx5LWZyZWVkIHZtYXAgYXJlYXMuCiAgKi8KQEAgLTIzNTgsMTkgJiM0MzsyMzcxLDEyIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWJvb2wgZnVsbF9wb29sX2RlY2F5KQogewogCXVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDsKIAl1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVyczsKLQlzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzOwotCXVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlczsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKLQlpbnQgaTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2bWFwX3B1cmdlX2xvY2spOwogCi0JLyoKLQkgKiBVc2UgY3B1bWFzayB0byBtYXJrIHdoaWNoIG5vZGUgaGFzIHRvIGJlIHByb2Nlc3NlZC4KLQkgKi8KLQlwdXJnZV9ub2RlcyA9IENQVV9NQVNLX05PTkU7Ci0KIAlmb3JfZWFjaF92bWFwX25vZGUodm4pIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDt2bi0mZ3Q7cHVyZ2VfbGlzdCk7CiAJCXZuLSZndDtza2lwX3BvcHVsYXRlID0gZnVsbF9wb29sX2RlY2F5OwpAQCAtMjM5MCwxMCAmIzQzOzIzOTYsOSBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQllbmQgPSBtYXgoZW5kLCBsaXN0X2xhc3RfZW50cnkoJmFtcDt2bi0mZ3Q7cHVyZ2VfbGlzdCwKIAkJCXN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLSZndDt2YV9lbmQpOwogCi0JCWNwdW1hc2tfc2V0X2NwdShub2RlX3RvX2lkKHZuKSwgJmFtcDtwdXJnZV9ub2Rlcyk7CiYjNDM7CQlucl9wdXJnZV9ub2RlcyYjNDM7JiM0Mzs7CiAJfQogCi0JbnJfcHVyZ2Vfbm9kZXMgPSBjcHVtYXNrX3dlaWdodCgmYW1wO3B1cmdlX25vZGVzKTsKIAlpZiAobnJfcHVyZ2Vfbm9kZXMgJmd0OyAwKSB7CiAJCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7CiAKQEAgLTI0MDEsMjkgJiM0MzsyNDA2LDMxIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCW5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKCZhbXA7dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7CiAJCW5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTsKIAotCQlmb3JfZWFjaF9jcHUoaSwgJmFtcDtwdXJnZV9ub2RlcykgewotCQkJdm4gPSAmYW1wO3ZtYXBfbm9kZXNbaV07CiYjNDM7CQlmb3JfZWFjaF92bWFwX25vZGUodm4pIHsKJiM0MzsJCQl2bi0mZ3Q7d29ya19xdWV1ZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCQlpZiAobGlzdF9lbXB0eSgmYW1wO3ZuLSZndDtwdXJnZV9saXN0KSkKJiM0MzsJCQkJY29udGludWU7CiAKIAkJCWlmIChucl9wdXJnZV9oZWxwZXJzICZndDsgMCkgewogCQkJCUlOSVRfV09SSygmYW1wO3ZuLSZndDtwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpOwomIzQzOwkJCQl2bi0mZ3Q7d29ya19xdWV1ZWQgPSBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoCiYjNDM7CQkJCQlSRUFEX09OQ0UoZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSwgJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7CiAKLQkJCQlpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKQotCQkJCQlzY2hlZHVsZV93b3JrX29uKGksICZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCQkJCWVsc2UKLQkJCQkJc2NoZWR1bGVfd29yaygmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQotCQkJCW5yX3B1cmdlX2hlbHBlcnMtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJdm4tJmd0O3B1cmdlX3dvcmsuZnVuYyA9IE5VTEw7Ci0JCQkJcHVyZ2Vfdm1hcF9ub2RlKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCQkJCW5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tJmd0O25yX3B1cmdlZDsKJiM0MzsJCQkJaWYgKHZuLSZndDt3b3JrX3F1ZXVlZCkgewomIzQzOwkJCQkJbnJfcHVyZ2VfaGVscGVycy0tOwomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCX0KIAkJCX0KLQkJfQogCi0JCWZvcl9lYWNoX2NwdShpLCAmYW1wO3B1cmdlX25vZGVzKSB7Ci0JCQl2biA9ICZhbXA7dm1hcF9ub2Rlc1tpXTsKJiM0MzsJCQkvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi8KJiM0MzsJCQlwdXJnZV92bWFwX25vZGUoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7CiYjNDM7CQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwomIzQzOwkJfQogCi0JCQlpZiAodm4tJmd0O3B1cmdlX3dvcmsuZnVuYykgewomIzQzOwkJLyogV2FpdCBmb3IgY29tcGxldGlvbiBpZiBxdWV1ZWQgYW55LiAqLwomIzQzOwkJZm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7CiYjNDM7CQkJaWYgKHZuLSZndDt3b3JrX3F1ZXVlZCkgewogCQkJCWZsdXNoX3dvcmsoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7CiAJCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwogCQkJfQpAQCAtMjQ4Nyw3ICYjNDM7MjQ5NCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfdm1hcF9hcmVhX25vZmx1c2goc3RydWN0IHZtYXBfYXJlYSAqdmEpCiAKIAkvKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBtYXkgZnJlZSB2YSBhdCBhbnkgdGltZSAqLwogCWlmICh1bmxpa2VseShucl9sYXp5ICZndDsgbnJfbGF6eV9tYXgpKQotCQlzY2hlZHVsZV93b3JrKCZhbXA7ZHJhaW5fdm1hcF93b3JrKTsKJiM0MzsJCXNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksCiYjNDM7CQkJJmFtcDtkcmFpbl92bWFwX3dvcmspOwogfQogCiAvKgpAQCAtNTU4NywzICYjNDM7NTU5NSwyMCBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKIAl2bWFwX25vZGVfc2hyaW5rZXItJmd0O3NjYW5fb2JqZWN0cyA9IHZtYXBfbm9kZV9zaHJpbmtfc2NhbjsKIAlzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHZtYWxsb2NfaW5pdF93b3JrcXVldWUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl93cSwgKmhlbHBlcnNfd3E7CiYjNDM7CXVuc2lnbmVkIGludCBmbGFncyA9IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTTsKJiM0MzsKJiM0MzsJZHJhaW5fd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDt2bWFwX2RyYWluJiMzNDssIGZsYWdzLCAwKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGRyYWluX3dxID09IE5VTEwpOwomIzQzOwlXUklURV9PTkNFKGRyYWluX3ZtYXBfd3EsIGRyYWluX3dxKTsKJiM0MzsKJiM0MzsJaGVscGVyc193cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3ZtYXBfZHJhaW5faGVscGVycyYjMzQ7LCBmbGFncywgMCk7CiYjNDM7CVdBUk5fT05fT05DRShoZWxwZXJzX3dxID09IE5VTEwpOwomIzQzOwlXUklURV9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSwgaGVscGVyc193cSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztlYXJseV9pbml0Y2FsbCh2bWFsbG9jX2luaXRfd29ya3F1ZXVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGl2aW5nIGludG8gYG1tL3ZtYWxsb2MuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2Ug4oCTIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBpbnRlcmVzdGluZy4KClNvLCB0aGUga2V5IGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB3b3JrcXVldWVzIGZvciB2bWFwIGRyYWluaW5nLiBXZSYjMzk7dmUgZ290IHR3byBuZXcgd29ya3F1ZXVlczogYGRyYWluX3ZtYXBfaGVscGVyc193cWAgYW5kIGBkcmFpbl92bWFwX3dxYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCByZXBsYWNpbmcgc29tZSBleGlzdGluZyBDUFUgbWFzayBsb2dpYyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgd2l0aCBhIGBmb3JfZWFjaF92bWFwX25vZGVgIGxvb3AgYW5kIHRoZW4gcXVldWluZyB3b3JrIHRvIHRoZXNlIHdvcmtxdWV1ZXMgdXNpbmcgYHNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya2AuIFdlIGFsc28gc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBgd29ya19xdWV1ZWRgIGZsYWcgd2l0aGluIHRoZSBgdm1hcF9ub2RlYCBzdHJ1Y3R1cmUuIEFkZGl0aW9uYWxseSwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgIGlzIG5vdyBzY2hlZHVsaW5nIHdvcmsgYXMgd2VsbC4gRmluYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgYHZtYWxsb2NfaW5pdF93b3JrcXVldWVgIHRvIHNldCB1cCB0aGUgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgd2l0aCB0aGUgYFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTWAgZmxhZ3MuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgcnVsZSBzZXQuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIGBtbS92bWFsbG9jLmNgIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGUgJiMzNDttZW1vcnkgbWFuYWdlbWVudCYjMzQ7IGNhdGVnb3J5IOKAkyB0aGF0JiMzOTtzIGEgZGlyZWN0IGhpdC4gSXQmIzM5O3MgZXhlY3V0YWJsZSBjb2RlLCBhbmQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB2bWFsbG9jIGFyZWEgcHVyZ2luZyBhbmQgd29ya3F1ZXVlIGhhbmRsaW5nLCB3aGljaCBhcmUgY3JpdGljYWwgYXJlYXMuIEdpdmVuIHRoZSBjb3JlIHN1YnN5c3RlbSBpbnZvbHZlbWVudCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbiByZWxhdGVkIHRvIHdvcmtxdWV1ZSBpbnRlcmFjdGlvbnMsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgY2FsbGluZyB0aGUgbW9kaWZpZWQgY29kZSwgc28gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbW0vdm1hbGxvYy5jYCBhbmQgS2NvbmZpZy4gR2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZG9pbmcgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBpbnNpZ2h0IGludG8gdGhlIHBvc3NpYmxlIGltcGFjdHMgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0yMzU4PXNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsXG4tLVxubW0vdm1hbGxvYy5jLTIzNjktICovXG5tbS92bWFsbG9jLmM6MjM3MDpzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1hbGxvYy5jLTIzNzEtXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuLS1cbm1tL3ZtYWxsb2MuYz0yNDQ3PXN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZClcbi0tXG5tbS92bWFsbG9jLmMtMjQ1MS1cdHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTtcbm1tL3ZtYWxsb2MuYzoyNDUyOlx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xubW0vdm1hbGxvYy5jLTI0NTMtXHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbi0tXG5tbS92bWFsbG9jLmM9MjQ1Nj1zdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTI0NTgtXHRtdXRleF9sb2NrKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG5tbS92bWFsbG9jLmM6MjQ1OTpcdF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoVUxPTkdfTUFYLCAwLCBmYWxzZSk7XG5tbS92bWFsbG9jLmMtMjQ2MC1cdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuLS1cbm1tL3ZtYWxsb2MuYz0yOTczPXN0YXRpYyB2b2lkIF92bV91bm1hcF9hbGlhc2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmx1c2gpXG4tLVxubW0vdm1hbGxvYy5jLTMwMTktXG5tbS92bWFsbG9jLmM6MzAyMDpcdGlmICghX19wdXJnZV92bWFwX2FyZWFfbGF6eShzdGFydCwgZW5kLCBmYWxzZSkgXHUwMDI2XHUwMDI2IGZsdXNoKVxubW0vdm1hbGxvYy5jLTMwMjEtXHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg1MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gdm1hbGxvYy5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgY29uY2VudHJhdGVkIGFyZWEgb2Ygd29yayBhcm91bmQgdm1hcCBhcmVhIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHB1cmdpbmcgYW5kIGZyZWVpbmcgb3BlcmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbjogYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLCBgcHVyZ2Vfdm1hcF9ub2RlYCwgdGhlIGhlbHBlciBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGFuIGVmZm9ydCB0byBpbXByb3ZlIHRoZSBlZmZpY2llbmN5IG9yIHJvYnVzdG5lc3Mgb2YgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCwgcG9zc2libHkgYWRkcmVzc2luZyBpc3N1ZXMgYXJvdW5kIGZyYWdtZW50YXRpb24gb3IgbGF0ZW5jeSB3aGVuIHJlY2xhaW1pbmcgdm1hbGxvYyYjMzk7ZCByZWdpb25zLiBJIGFsc28gbm90aWNlZCBgdm1fdW5tYXBfYWxpYXNlc2AgYW5kIGl0cyBpbnRlcm5hbCB2YXJpYW50IGBfdm1fdW5tYXBfYWxpYXNlc2AgaW4gdGhlIG1peC4gRmluYWxseSwgSSYjMzk7dmUgZ290IGB2bWFsbG9jX2luaXRfd29ya3F1ZXVlYCwgYnV0IHRoYXQmIzM5O3MganVzdCBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgcHJvYmFibHkgbm90IHBhcnQgb2YgdGhlIGNvcmUgY2hhbmdlcy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICppbXBhY3QqIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgdm1hbGxvYyBsaWZlY3ljbGUuIEkmIzM5O2xsIGFsc28gYmUgZXhhbWluaW5nIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBmaWxlIHRvIGVzdGFibGlzaCBhIGNvbXBsZXRlIG92ZXJ2aWV3LiBJIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29tbWl0IG1lc3NhZ2VzIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjQ1Nj1zdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTI0NjctICovXG5tbS92bWFsbG9jLmM6MjQ2ODpzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxubW0vdm1hbGxvYy5jLTI0Njkte1xuLS1cbm1tL3ZtYWxsb2MuYy0yNDkyLVxubW0vdm1hbGxvYy5jOjI0OTM6XHR0cmFjZV9mcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHZhX3N0YXJ0LCBucl9sYXp5LCBucl9sYXp5X21heCk7XG5tbS92bWFsbG9jLmMtMjQ5NC1cbi0tXG5tbS92bWFsbG9jLmM9MjUwND1zdGF0aWMgdm9pZCBmcmVlX3VubWFwX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcbi0tXG5tbS92bWFsbG9jLmMtMjUxMC1cbm1tL3ZtYWxsb2MuYzoyNTExOlx0ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YSk7XG5tbS92bWFsbG9jLmMtMjUxMi19XG4tLVxubW0vdm1hbGxvYy5jPTI3ODk9c3RhdGljIHZvaWQgZnJlZV92bWFwX2Jsb2NrKHN0cnVjdCB2bWFwX2Jsb2NrICp2Yilcbi0tXG5tbS92bWFsbG9jLmMtMjgwMy1cbm1tL3ZtYWxsb2MuYzoyODA0Olx0ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2Yi1cdTAwM2V2YSk7XG5tbS92bWFsbG9jLmMtMjgwNS1cdGtmcmVlX3JjdSh2YiwgcmN1X2hlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaWZmOiBBIFF1aWNrIFNjYW4gb2YgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMgd2l0aGluIHRoaXMgZGlmZiByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXAuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGUgbGlzdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ6IGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCwgYGRyYWluX3ZtYXBfYXJlYV93b3JrYCwgYHB1cmdlX3ZtYXBfbm9kZWAsIGBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoYCwgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLCBhbmQgYHZtX3VubWFwX2FsaWFzZXNgLiBJJiMzOTtsbCB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBoYW5kbGUgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCB1bm1hcHBpbmcuCgpOb3csIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBvZiB0aGUga2V5IGZ1bmN0aW9ucywgSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgQ09ORklHIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIGB2bWFsbG9jLmNgLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IGp1bXAgb3V0LiBUaGF0IHdheSwgSSBjYW4gdGFpbG9yIG15IGFuYWx5c2lzIGZyb20gdGhlIHN0YXJ0IGFuZCBhdm9pZCBvdmVybG9va2luZyBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS0zOS1cdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlOjQwOlx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xubW0vTWFrZWZpbGUtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1tL3ZtYWxsb2MuY2AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQ09ORklHX01NVWAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBvbiBhbWQ2NCBhcmNoaXRlY3R1cmVzOyBpdCYjMzk7cyBhbHdheXMgc2V0IHRvICYjMzk7eSYjMzk7LiBUaGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4gV2hhdCBJIG5lZWQgdG8gZG8gaXMgaWRlbnRpZnkgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb2RlIGFyb3VuZCB0aG9zZSBtb2RpZmljYXRpb25zIGluIGBtbS92bWFsbG9jLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRvIGdldCBhIGJldHRlciBncmFzcCwgSSBzaG91bGQgcmVhbGx5IGxvb2sgYXQgYSB3aWRlciByYW5nZS4gSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMjMwMCB0aHJvdWdoIDI1NTAgaW4gYG1tL3ZtYWxsb2MuY2AuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhhdCBzZWN0aW9uLiBIb3BlZnVsbHksIEkmIzM5O2xsIGZpbmQgc29tZSByZWxhdGVkIGNvbmRpdGlvbmFsIGNvZGUgdGhhdCBnaXZlcyBtZSBzb21lIGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjM1MDpcdFx0fVxuMjM1MTpcdFxuMjM1MjpcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3B1cmdlZF9wYWdlcywgXHUwMDI2dm1hcF9sYXp5X25yKTtcbjIzNTM6XHRcbjIzNTQ6XHRcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXHUwMDI2bG9jYWxfbGlzdCk7XG4yMzU1Olx0fVxuMjM1NjpcdFxuMjM1NzpcdHN0YXRpYyBib29sXG4yMzU4Olx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcbjIzNTk6XHRcdFx0c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuMjM2MDpcdHtcbjIzNjE6XHRcdGlmICh3cSlcbjIzNjI6XHRcdFx0cmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspO1xuMjM2MzpcdFxuMjM2NDpcdFx0cmV0dXJuIGZhbHNlO1xuMjM2NTpcdH1cbjIzNjY6XHRcbjIzNjc6XHQvKlxuMjM2ODpcdCAqIFB1cmdlcyBhbGwgbGF6aWx5LWZyZWVkIHZtYXAgYXJlYXMuXG4yMzY5Olx0ICovXG4yMzcwOlx0c3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbjIzNzE6XHRcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4yMzcyOlx0e1xuMjM3MzpcdFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuMjM3NDpcdFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDtcbjIzNzU6XHRcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xuMjM3NjpcdFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4yMzc3Olx0XG4yMzc4Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG4yMzc5Olx0XG4yMzgwOlx0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbjIzODE6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCk7XG4yMzgyOlx0XHRcdHZuLVx1MDAzZXNraXBfcG9wdWxhdGUgPSBmdWxsX3Bvb2xfZGVjYXk7XG4yMzgzOlx0XHRcdGRlY2F5X3ZhX3Bvb2xfbm9kZSh2biwgZnVsbF9wb29sX2RlY2F5KTtcbjIzODQ6XHRcbjIzODU6XHRcdFx0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2dm4tXHUwMDNlbGF6eS5yb290KSlcbjIzODY6XHRcdFx0XHRjb250aW51ZTtcbjIzODc6XHRcbjIzODg6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnZuLVx1MDAzZWxhenkubG9jayk7XG4yMzg5Olx0XHRcdFdSSVRFX09OQ0Uodm4tXHUwMDNlbGF6eS5yb290LnJiX25vZGUsIE5VTEwpO1xuMjM5MDpcdFx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ2bi1cdTAwM2VsYXp5LmhlYWQsIFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QpO1xuMjM5MTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuMjM5MjpcdFxuMjM5MzpcdFx0XHRzdGFydCA9IG1pbihzdGFydCwgbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0LFxuMjM5NDpcdFx0XHRcdHN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLVx1MDAzZXZhX3N0YXJ0KTtcbjIzOTU6XHRcbjIzOTY6XHRcdFx0ZW5kID0gbWF4KGVuZCwgbGlzdF9sYXN0X2VudHJ5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QsXG4yMzk3Olx0XHRcdFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXHUwMDNldmFfZW5kKTtcbjIzOTg6XHRcbjIzOTk6XHRcdFx0bnJfcHVyZ2Vfbm9kZXMmIzQzOyYjNDM7O1xuMjQwMDpcdFx0fVxuMjQwMTpcdFxuMjQwMjpcdFx0aWYgKG5yX3B1cmdlX25vZGVzIFx1MDAzZSAwKSB7XG4yNDAzOlx0XHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4yNDA0Olx0XG4yNDA1Olx0XHRcdC8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovXG4yNDA2Olx0XHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuMjQwNzpcdFx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4yNDA4Olx0XG4yNDA5Olx0XHRcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuMjQxMDpcdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gZmFsc2U7XG4yNDExOlx0XG4yNDEyOlx0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCkpXG4yNDEzOlx0XHRcdFx0XHRjb250aW51ZTtcbjI0MTQ6XHRcbjI0MTU6XHRcdFx0XHRpZiAobnJfcHVyZ2VfaGVscGVycyBcdTAwM2UgMCkge1xuMjQxNjpcdFx0XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XG4yNDE3Olx0XHRcdFx0XHR2bi1cdTAwM2V3b3JrX3F1ZXVlZCA9IHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhcbjI0MTg6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuMjQxOTpcdFxuMjQyMDpcdFx0XHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4yNDIxOlx0XHRcdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbjI0MjI6XHRcdFx0XHRcdFx0Y29udGludWU7XG4yNDIzOlx0XHRcdFx0XHR9XG4yNDI0Olx0XHRcdFx0fVxuMjQyNTpcdFxuMjQyNjpcdFx0XHRcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xuMjQyNzpcdFx0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbjI0Mjg6XHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbjI0Mjk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgcmVzcG9uZGluZyB0byB0aGUgcHJvbXB0OgoKKipUYXJnZXRlZCBSZXZpZXcgQXJlYSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGZvY3VzZWQgYW5kIGRpZyBpbnRvIHRoaXMgc2VjdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBzY3J1dGluaXplIGxpbmVzIDI0MzAgdGhyb3VnaCAyNTEwLiBJdCYjMzk7cyB0aW1lIHRvIHplcm8gaW4gb24gdGhhdCBzcGVjaWZpYyByYW5nZTsgdGhhdCYjMzk7cyB3aGVyZSBJIGFudGljaXBhdGUgd2UmIzM5O2xsIGRpc2NvdmVyIHRoZSBrZXkgbnVhbmNlcyB0aGF0IG5lZWQgYXR0ZW50aW9uLiBUaW1lIHRvIGNhcmVmdWxseSBhbmQgbWV0aG9kaWNhbGx5IHJldmlldyB0aGlzIHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDMwOlx0XG4yNDMxOlx0XHRcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cbjI0MzI6XHRcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4yNDMzOlx0XHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4yNDM0Olx0XHRcdFx0XHRmbHVzaF93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuMjQzNTpcdFx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4yNDM2Olx0XHRcdFx0fVxuMjQzNzpcdFx0XHR9XG4yNDM4Olx0XHR9XG4yNDM5Olx0XG4yNDQwOlx0XHR0cmFjZV9wdXJnZV92bWFwX2FyZWFfbGF6eShzdGFydCwgZW5kLCBucl9wdXJnZWRfYXJlYXMpO1xuMjQ0MTpcdFx0cmV0dXJuIG5yX3B1cmdlZF9hcmVhcyBcdTAwM2UgMDtcbjI0NDI6XHR9XG4yNDQzOlx0XG4yNDQ0Olx0LypcbjI0NDU6XHQgKiBSZWNsYWltIHZtYXAgYXJlYXMgYnkgcHVyZ2luZyBmcmFnbWVudGVkIGJsb2NrcyBhbmQgcHVyZ2Vfdm1hcF9hcmVhX2xpc3QuXG4yNDQ2Olx0ICovXG4yNDQ3Olx0c3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKVxuMjQ0ODpcdFxuMjQ0OTpcdHtcbjI0NTA6XHRcdG11dGV4X2xvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbjI0NTE6XHRcdHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTtcbjI0NTI6XHRcdF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoVUxPTkdfTUFYLCAwLCB0cnVlKTtcbjI0NTM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuMjQ1NDpcdH1cbjI0NTU6XHRcbjI0NTY6XHRzdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4yNDU3Olx0e1xuMjQ1ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuMjQ1OTpcdFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcbjI0NjA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuMjQ2MTpcdH1cbjI0NjI6XHRcbjI0NjM6XHQvKlxuMjQ2NDpcdCAqIEZyZWUgYSB2bWFwIGFyZWEsIGNhbGxlciBlbnN1cmluZyB0aGF0IHRoZSBhcmVhIGhhcyBiZWVuIHVubWFwcGVkLFxuMjQ2NTpcdCAqIHVubGlua2VkIGFuZCBmbHVzaF9jYWNoZV92dW5tYXAgaGFkIGJlZW4gY2FsbGVkIGZvciB0aGUgY29ycmVjdFxuMjQ2NjpcdCAqIHJhbmdlIHByZXZpb3VzbHkuXG4yNDY3Olx0ICovXG4yNDY4Olx0c3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWFfbm9mbHVzaChzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcbjI0Njk6XHR7XG4yNDcwOlx0XHR1bnNpZ25lZCBsb25nIG5yX2xhenlfbWF4ID0gbGF6eV9tYXhfcGFnZXMoKTtcbjI0NzE6XHRcdHVuc2lnbmVkIGxvbmcgdmFfc3RhcnQgPSB2YS1cdTAwM2V2YV9zdGFydDtcbjI0NzI6XHRcdHVuc2lnbmVkIGludCB2bl9pZCA9IGRlY29kZV92bl9pZCh2YS1cdTAwM2VmbGFncyk7XG4yNDczOlx0XHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbjI0NzQ6XHRcdHVuc2lnbmVkIGxvbmcgbnJfbGF6eTtcbjI0NzU6XHRcbjI0NzY6XHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2dmEtXHUwMDNlbGlzdCkpKVxuMjQ3NzpcdFx0XHRyZXR1cm47XG4yNDc4Olx0XG4yNDc5Olx0XHRucl9sYXp5ID0gYXRvbWljX2xvbmdfYWRkX3JldHVybl9yZWxheGVkKHZhX3NpemUodmEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuMjQ4MDpcdFx0XHRcdFx0XHQgXHUwMDI2dm1hcF9sYXp5X25yKTtcbjI0ODE6XHRcbjI0ODI6XHRcdC8qXG4yNDgzOlx0XHQgKiBJZiBpdCB3YXMgcmVxdWVzdCBieSBhIGNlcnRhaW4gbm9kZSB3ZSB3b3VsZCBsaWtlIHRvXG4yNDg0Olx0XHQgKiByZXR1cm4gaXQgdG8gdGhhdCBub2RlLCBpLmUuIGl0cyBwb29sIGZvciBsYXRlciByZXVzZS5cbjI0ODU6XHRcdCAqL1xuMjQ4NjpcdFx0dm4gPSBpc192bl9pZF92YWxpZCh2bl9pZCkgP1xuMjQ4NzpcdFx0XHRpZF90b19ub2RlKHZuX2lkKTphZGRyX3RvX25vZGUodmEtXHUwMDNldmFfc3RhcnQpO1xuMjQ4ODpcdFxuMjQ4OTpcdFx0c3Bpbl9sb2NrKFx1MDAyNnZuLVx1MDAzZWxhenkubG9jayk7XG4yNDkwOlx0XHRpbnNlcnRfdm1hcF9hcmVhKHZhLCBcdTAwMjZ2bi1cdTAwM2VsYXp5LnJvb3QsIFx1MDAyNnZuLVx1MDAzZWxhenkuaGVhZCk7XG4yNDkxOlx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VsYXp5LmxvY2spO1xuMjQ5MjpcdFxuMjQ5MzpcdFx0dHJhY2VfZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YV9zdGFydCwgbnJfbGF6eSwgbnJfbGF6eV9tYXgpO1xuMjQ5NDpcdFxuMjQ5NTpcdFx0LyogQWZ0ZXIgdGhpcyBwb2ludCwgd2UgbWF5IGZyZWUgdmEgYXQgYW55IHRpbWUgKi9cbjI0OTY6XHRcdGlmICh1bmxpa2VseShucl9sYXp5IFx1MDAzZSBucl9sYXp5X21heCkpXG4yNDk3Olx0XHRcdHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksXG4yNDk4Olx0XHRcdFx0XHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbjI0OTk6XHR9XG4yNTAwOlx0XG4yNTAxOlx0LypcbjI1MDI6XHQgKiBGcmVlIGFuZCB1bm1hcCBhIHZtYXAgYXJlYVxuMjUwMzpcdCAqL1xuMjUwNDpcdHN0YXRpYyB2b2lkIGZyZWVfdW5tYXBfdm1hcF9hcmVhKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxuMjUwNTpcdHtcbjI1MDY6XHRcdGZsdXNoX2NhY2hlX3Z1bm1hcCh2YS1cdTAwM2V2YV9zdGFydCwgdmEtXHUwMDNldmFfZW5kKTtcbjI1MDc6XHRcdHZ1bm1hcF9yYW5nZV9ub2ZsdXNoKHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQpO1xuMjUwODpcdFx0aWYgKGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkX3N0YXRpYygpKVxuMjUwOTpcdFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNgoJCQkJCQkJb3V0cHV0OiAxNjYKCQkJCQkJCXRob3VnaHRzOiA1NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZtYXAgQXJlYSBQdXJnaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3QuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgKHZtYXApIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaGVyZS4gSSB3YW50IHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zLCBzbyBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBmdW5jdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBkcmFpbmluZyBhbmQgcHVyZ2luZyBsb2dpYy4KCkJhc2VkIG9uIHRoZSBpbml0aWFsIGFuYWx5c2lzLCBJJiMzOTt2ZSBnb3QgYSBsaXN0OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGZhY3RvciBpbiB0aGF0IGB2bV91bm1hcF9hbGlhc2VzYCBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGFuZCBgdmZyZWVgIGFuZCBgdnVubWFwYCBldmVudHVhbGx5IGNhbGwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGFua2Z1bGx5LCB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZG9lc24mIzM5O3QgYXBwZWFyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZyBkZXBlbmRlbmNpZXMgYmV5b25kIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEFNRDY0IGFyY2hpdGVjdHVyZXMuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBlZmZlY3RpdmVseSBlbXB0eS4KClRvIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkLCBsZXQmIzM5O3MgcmV2aXNpdCBteSBpbnN0cnVjdGlvbiBzZXQgb25lIGxhc3QgdGltZToKCiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBPa2F5LCBtYWtlcyBzZW5zZS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYW55IGNoYW5nZSBoZXJlIGlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBlcnJvcnMuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSwgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHVuYm91bmQgd29ya3F1ZXVlcyBmb3IgYXN5bmNocm9ub3VzIGRyYWluaW5nIGFuZCBub2RlIHB1cmdpbmcsIGFuZCBtb2RpZnlpbmcgdGhlIG11bHRpLW5vZGUgcHVyZ2UgaXRlcmF0aW9uIGFuZCB3b3JrIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gU3BvdCBvbi4KKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBsaXN0OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkIGBbXWAsIHJlbHlpbmcgb24gdGhlIHN0YW5kYXJkIE1NVSBjb25maWcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IHByb2Nlc3MsIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5JiMzNDssCiAgICAmIzM0O3B1cmdlX3ZtYXBfbm9kZSYjMzQ7LAogICAgJiMzNDtzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsmIzM0OywKICAgICYjMzQ7ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCYjMzQ7LAogICAgJiMzNDtkcmFpbl92bWFwX2FyZWFfd29yayYjMzQ7LAogICAgJiMzNDtyZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vdm1hbGxvYy5jLCBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSwgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVmYWN0b3JpbmcgdGhlIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBhbmQgbm9kZSBkcmFpbmluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wdXJnZV92bWFwX2FyZWFfbGF6eSYjMzQ7LAogICAgJiMzNDtwdXJnZV92bWFwX25vZGUmIzM0OywKICAgICYjMzQ7c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrJiMzNDssCiAgICAmIzM0O2ZyZWVfdm1hcF9hcmVhX25vZmx1c2gmIzM0OywKICAgICYjMzQ7ZHJhaW5fdm1hcF9hcmVhX3dvcmsmIzM0OywKICAgICYjMzQ7cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3ZtYWxsb2MuYywgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EsIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlZmFjdG9yaW5nIHRoZSBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgYW5kIG5vZGUgZHJhaW5pbmcgbG9naWMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSBpbiBtbS92bWFsbG9jLmMgYnkgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EgYW5kIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlcGxhY2luZyB0aGUgc3RhdGljIGNwdW1hc2sgdHJhY2tpbmcgd2l0aCBhIHBlci1ub2RlIGJvb2xlYW4gZmxhZyAodm4tXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxuXG5UaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvZGF0YSBzaXplcy4gVGhlIGJvb2xlYW4gZmxhZyBgd29ya19xdWV1ZWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gZWFjaCBpdGVyYXRpb24gaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJlMGU3MjFmM2M4ODAxZjVmNzE2Y2M4YTlmMjY2ZDE3Mjg0NWRmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTU6MjM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYmVhOWY3NmVkN2U3NC4uODljMzI3YTZjZTdkOSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuYwpAQCAtOTcyLDYgJiM0Mzs5NzIsNyBAQCBzdGF0aWMgc3RydWN0IHZtYXBfbm9kZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBwdXJnZV9saXN0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwdXJnZV93b3JrOwogCXVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkOwomIzQzOwlib29sIHdvcmtfcXVldWVkOwogfSBzaW5nbGU7CiAKIC8qCkBAIC0xMDkwLDYgJiM0MzsxMDkxLDggQEAgc3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKTsKIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHZtYXBfbm90aWZ5X2xpc3QpOwogc3RhdGljIHZvaWQgZHJhaW5fdm1hcF9hcmVhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX1dPUksoZHJhaW5fdm1hcF93b3JrLCBkcmFpbl92bWFwX2FyZWFfd29yayk7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl92bWFwX2hlbHBlcnNfd3E7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl92bWFwX3dxOwogCiBzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgYXRvbWljX2xvbmdfdCB2bWFwX2xhenlfbnI7CiAKQEAgLTIzNTEsNiAmIzQzOzIzNTQsMTYgQEAgc3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlyZWNsYWltX2xpc3RfZ2xvYmFsKCZhbXA7bG9jYWxfbGlzdCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbAomIzQzO3NjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsCiYjNDM7CQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlpZiAod3EpCiYjNDM7CQlyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy4KICAqLwpAQCAtMjM1OCwxOSAmIzQzOzIzNzEsMTIgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJYm9vbCBmdWxsX3Bvb2xfZGVjYXkpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXMgPSAwOwogCXVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzOwotCXN0YXRpYyBjcHVtYXNrX3QgcHVyZ2Vfbm9kZXM7Ci0JdW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzOwogCXN0cnVjdCB2bWFwX25vZGUgKnZuOwotCWludCBpOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZtYXBfcHVyZ2VfbG9jayk7CiAKLQkvKgotCSAqIFVzZSBjcHVtYXNrIHRvIG1hcmsgd2hpY2ggbm9kZSBoYXMgdG8gYmUgcHJvY2Vzc2VkLgotCSAqLwotCXB1cmdlX25vZGVzID0gQ1BVX01BU0tfTk9ORTsKLQogCWZvcl9lYWNoX3ZtYXBfbm9kZSh2bikgewogCQlJTklUX0xJU1RfSEVBRCgmYW1wO3ZuLSZndDtwdXJnZV9saXN0KTsKIAkJdm4tJmd0O3NraXBfcG9wdWxhdGUgPSBmdWxsX3Bvb2xfZGVjYXk7CkBAIC0yMzkwLDEwICYjNDM7MjM5Niw5IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWVuZCA9IG1heChlbmQsIGxpc3RfbGFzdF9lbnRyeSgmYW1wO3ZuLSZndDtwdXJnZV9saXN0LAogCQkJc3RydWN0IHZtYXBfYXJlYSwgbGlzdCktJmd0O3ZhX2VuZCk7CiAKLQkJY3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCAmYW1wO3B1cmdlX25vZGVzKTsKJiM0MzsJCW5yX3B1cmdlX25vZGVzJiM0MzsmIzQzOzsKIAl9CiAKLQlucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KCZhbXA7cHVyZ2Vfbm9kZXMpOwogCWlmIChucl9wdXJnZV9ub2RlcyAmZ3Q7IDApIHsKIAkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKIApAQCAtMjQwMSwyOSAmIzQzOzI0MDYsMzEgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJbnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoJmFtcDt2bWFwX2xhenlfbnIpIC8gbGF6eV9tYXhfcGFnZXMoKTsKIAkJbnJfcHVyZ2VfaGVscGVycyA9IGNsYW1wKG5yX3B1cmdlX2hlbHBlcnMsIDFVLCBucl9wdXJnZV9ub2RlcykgLSAxOwogCi0JCWZvcl9lYWNoX2NwdShpLCAmYW1wO3B1cmdlX25vZGVzKSB7Ci0JCQl2biA9ICZhbXA7dm1hcF9ub2Rlc1tpXTsKJiM0MzsJCWZvcl9lYWNoX3ZtYXBfbm9kZSh2bikgewomIzQzOwkJCXZuLSZndDt3b3JrX3F1ZXVlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkJCWlmIChsaXN0X2VtcHR5KCZhbXA7dm4tJmd0O3B1cmdlX2xpc3QpKQomIzQzOwkJCQljb250aW51ZTsKIAogCQkJaWYgKG5yX3B1cmdlX2hlbHBlcnMgJmd0OyAwKSB7CiAJCQkJSU5JVF9XT1JLKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7CiYjNDM7CQkJCXZuLSZndDt3b3JrX3F1ZXVlZCA9IHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yaygKJiM0MzsJCQkJCVJFQURfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EpLCAmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKIAotCQkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpCi0JCQkJCXNjaGVkdWxlX3dvcmtfb24oaSwgJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJZWxzZQotCQkJCQlzY2hlZHVsZV93b3JrKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCi0JCQkJbnJfcHVyZ2VfaGVscGVycy0tOwotCQkJfSBlbHNlIHsKLQkJCQl2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jID0gTlVMTDsKLQkJCQlwdXJnZV92bWFwX25vZGUoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwomIzQzOwkJCQlpZiAodm4tJmd0O3dvcmtfcXVldWVkKSB7CiYjNDM7CQkJCQlucl9wdXJnZV9oZWxwZXJzLS07CiYjNDM7CQkJCQljb250aW51ZTsKJiM0MzsJCQkJfQogCQkJfQotCQl9CiAKLQkJZm9yX2VhY2hfY3B1KGksICZhbXA7cHVyZ2Vfbm9kZXMpIHsKLQkJCXZuID0gJmFtcDt2bWFwX25vZGVzW2ldOwomIzQzOwkJCS8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqLwomIzQzOwkJCXB1cmdlX3ZtYXBfbm9kZSgmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKJiM0MzsJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7CiYjNDM7CQl9CiAKLQkJCWlmICh2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jKSB7CiYjNDM7CQkvKiBXYWl0IGZvciBjb21wbGV0aW9uIGlmIHF1ZXVlZCBhbnkuICovCiYjNDM7CQlmb3JfZWFjaF92bWFwX25vZGUodm4pIHsKJiM0MzsJCQlpZiAodm4tJmd0O3dvcmtfcXVldWVkKSB7CiAJCQkJZmx1c2hfd29yaygmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKIAkJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7CiAJCQl9CkBAIC0yNDg3LDcgJiM0MzsyNDk0LDggQEAgc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWFfbm9mbHVzaChzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKIAogCS8qIEFmdGVyIHRoaXMgcG9pbnQsIHdlIG1heSBmcmVlIHZhIGF0IGFueSB0aW1lICovCiAJaWYgKHVubGlrZWx5KG5yX2xhenkgJmd0OyBucl9sYXp5X21heCkpCi0JCXNjaGVkdWxlX3dvcmsoJmFtcDtkcmFpbl92bWFwX3dvcmspOwomIzQzOwkJc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFJFQURfT05DRShkcmFpbl92bWFwX3dxKSwKJiM0MzsJCQkmYW1wO2RyYWluX3ZtYXBfd29yayk7CiB9CiAKIC8qCkBAIC01NTg3LDMgJiM0Mzs1NTk1LDIwIEBAIHZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKQogCXZtYXBfbm9kZV9zaHJpbmtlci0mZ3Q7c2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuOwogCXNocmlua2VyX3JlZ2lzdGVyKHZtYXBfbm9kZV9zaHJpbmtlcik7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTsKJiM0MzsJdW5zaWduZWQgaW50IGZsYWdzID0gV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNOwomIzQzOwomIzQzOwlkcmFpbl93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3ZtYXBfZHJhaW4mIzM0OywgZmxhZ3MsIDApOwomIzQzOwlXQVJOX09OX09OQ0UoZHJhaW5fd3EgPT0gTlVMTCk7CiYjNDM7CVdSSVRFX09OQ0UoZHJhaW5fdm1hcF93cSwgZHJhaW5fd3EpOwomIzQzOwomIzQzOwloZWxwZXJzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7dm1hcF9kcmFpbl9oZWxwZXJzJiMzNDssIGZsYWdzLCAwKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGhlbHBlcnNfd3EgPT0gTlVMTCk7CiYjNDM7CVdSSVRFX09OQ0UoZHJhaW5fdm1hcF9oZWxwZXJzX3dxLCBoZWxwZXJzX3dxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO2Vhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBwYXRjaCB0byBgbW0vdm1hbGxvYy5jYCB3YXJyYW50cyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgc2V2ZXJhbCBjaGFuZ2VzOyBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9uIG9mIGEgYHdvcmtfcXVldWVkYCBib29sZWFuIHRvIGBzdHJ1Y3Qgdm1hcF9ub2RlYCwgYW5kIHR3byBuZXcgd29ya3F1ZXVlcywgYGRyYWluX3ZtYXBfaGVscGVyc193cWAgYW5kIGBkcmFpbl92bWFwX3dxYCwgaW5pdGlhbGl6ZWQgZHVyaW5nIGBlYXJseV9pbml0Y2FsbGAuIFRoZSBleGlzdGluZyBjcHVtYXNrIHRyYWNraW5nIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBpcyByZXBsYWNlZCB3aXRoIGRpcmVjdCBpdGVyYXRpb24sIGFuZCB3b3JrIGlzIHF1ZXVlZCBvbiB0aGVzZSB3b3JrcXVldWVzLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gd2F5IGZvciB1bmluaXRpYWxpemVkIGRhdGEgdG8gZ2V0IG91dCB0aGVyZS4gRmlyc3QgcGFzcywgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3QgdXNlci1zcGFjZSBjb3BpZXMgKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMsIG5vdGhpbmcgY29tcGxleCkuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGludHJpY2F0ZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGFyb3VuZCB1bmluaXRpYWxpemVkLCBlaXRoZXIuIExvb2tpbmcgY2xvc2VyLCBhbGwgdGhlIGB2bWFwX25vZGVgIGVsZW1lbnRzIHNlZW0gdG8gYmUgc3RhdGljYWxseSBvciBnbG9iYWxseSBhbGxvY2F0ZWQuIEFuZCwgZ29vZCwgdGhlIGB2bi0mZ3Q7d29ya19xdWV1ZWRgIGZpZWxkICppcyogZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIHdpdGhpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYmVmb3JlIGl0IGlzIHVzZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHdvcmtxdWV1ZSBvcGVyYXRpb25zIGhlcmUgYXJlIHByaW1hcmlseSBhYm91dCBzeW5jaHJvbml6YXRpb24sIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHZtYWxsb2Mgc3Vic3lzdGVtLCByYXRoZXIgdGhhbiBjb21wbGV4IGRhdGEgbWFuaXB1bGF0aW9uLgoKTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIGBwdXJnZV92bWFwX25vZGVgIGFuZCBhbGwgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIE15IG1haW4gY29uY2VybiBpcyB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aGVzZSBvcGVyYXRpb25zICpyZWFkKiB1bmluaXRpYWxpemVkIG1lbW9yeSBkaXJlY3RseSwgZWl0aGVyIGR1ZSB0byBhIGRhdGEtcmFjZSBvciBmcm9tIGNhcmVsZXNzIHVzZS4gSSB3aWxsIGluc3BlY3QgYHB1cmdlX3ZtYXBfbm9kZWAgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gY29uZmlybSB0aGlzLiBJIHRoaW5rIGl0IGlzICp1bmxpa2VseSosIGJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXJnZV92bWFwX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTIyOTg9a2FzYW5fcmVsZWFzZV92bWFsbG9jX25vZGUoc3RydWN0IHZtYXBfbm9kZSAqdm4pXG4tLVxubW0vdm1hbGxvYy5jLTIzMjEtXG5tbS92bWFsbG9jLmM6MjMyMjpzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubW0vdm1hbGxvYy5jLTIzMjMte1xuLS1cbm1tL3ZtYWxsb2MuYz0yMzcwPXN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTI0MTUtXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbm1tL3ZtYWxsb2MuYzoyNDE2Olx0XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XG5tbS92bWFsbG9jLmMtMjQxNy1cdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxuLS1cbm1tL3ZtYWxsb2MuYy0yNDI2LVx0XHRcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xubW0vdm1hbGxvYy5jOjI0Mjc6XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xubW0vdm1hbGxvYy5jLTI0MjgtXHRcdFx0bnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBwdXJnZV92bWFwX25vZGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHZtYWxsb2NgIHNwYWNlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbW0vdm1hbGxvYy5jYCBhbmQgZm9jdXMgb24gdGhlIGBwdXJnZV92bWFwX25vZGVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGNyaXRpY2FsIGZvciBmcmVlaW5nIHVwIHRob3NlIFZNIGFyZWEgbm9kZXMsIGVzcGVjaWFsbHkgYWZ0ZXIgc29tZXRoaW5nIGdvZXMgd3Jvbmcgb3Igd2hlbiByZXNvdXJjZXMgbmVlZCB0byBiZSByZWNsYWltZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludHJpY2FjaWVzIG9mIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB2bWFwIGFsbG9jYXRvciYjMzk7cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZCB0byBlbnN1cmUgdGhyZWFkIHNhZmV0eSwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucy4gVW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IGxheWVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMjA6XHR9XG4yMzIxOlx0XG4yMzIyOlx0c3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjIzMjM6XHR7XG4yMzI0Olx0XHRzdHJ1Y3Qgdm1hcF9ub2RlICp2biA9IGNvbnRhaW5lcl9vZih3b3JrLFxuMjMyNTpcdFx0XHRzdHJ1Y3Qgdm1hcF9ub2RlLCBwdXJnZV93b3JrKTtcbjIzMjY6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX3BhZ2VzID0gMDtcbjIzMjc6XHRcdHN0cnVjdCB2bWFwX2FyZWEgKnZhLCAqbl92YTtcbjIzMjg6XHRcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcbjIzMjk6XHRcbjIzMzA6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9WTUFMTE9DKSlcbjIzMzE6XHRcdFx0a2FzYW5fcmVsZWFzZV92bWFsbG9jX25vZGUodm4pO1xuMjMzMjpcdFxuMjMzMzpcdFx0dm4tXHUwMDNlbnJfcHVyZ2VkID0gMDtcbjIzMzQ6XHRcbjIzMzU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2YSwgbl92YSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCwgbGlzdCkge1xuMjMzNjpcdFx0XHR1bnNpZ25lZCBsb25nIG5yID0gdmFfc2l6ZSh2YSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4yMzM3Olx0XHRcdHVuc2lnbmVkIGludCB2bl9pZCA9IGRlY29kZV92bl9pZCh2YS1cdTAwM2VmbGFncyk7XG4yMzM4Olx0XG4yMzM5Olx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dmEtXHUwMDNlbGlzdCk7XG4yMzQwOlx0XG4yMzQxOlx0XHRcdG5yX3B1cmdlZF9wYWdlcyAmIzQzOz0gbnI7XG4yMzQyOlx0XHRcdHZuLVx1MDAzZW5yX3B1cmdlZCYjNDM7JiM0Mzs7XG4yMzQzOlx0XG4yMzQ0Olx0XHRcdGlmIChpc192bl9pZF92YWxpZCh2bl9pZCkgXHUwMDI2XHUwMDI2ICF2bi1cdTAwM2Vza2lwX3BvcHVsYXRlKVxuMjM0NTpcdFx0XHRcdGlmIChub2RlX3Bvb2xfYWRkX3ZhKHZuLCB2YSkpXG4yMzQ2Olx0XHRcdFx0XHRjb250aW51ZTtcbjIzNDc6XHRcbjIzNDg6XHRcdFx0LyogR28gYmFjayB0byBnbG9iYWwuICovXG4yMzQ5Olx0XHRcdGxpc3RfYWRkKFx1MDAyNnZhLVx1MDAzZWxpc3QsIFx1MDAyNmxvY2FsX2xpc3QpO1xuMjM1MDpcdFx0fVxuMjM1MTpcdFxuMjM1MjpcdFx0YXRvbWljX2xvbmdfc3ViKG5yX3B1cmdlZF9wYWdlcywgXHUwMDI2dm1hcF9sYXp5X25yKTtcbjIzNTM6XHRcbjIzNTQ6XHRcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXHUwMDI2bG9jYWxfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE1OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzEKCQkJCQkJCW91dHB1dDogMTkxCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgTGF6eSBQdXJnaW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGNoYW5nZXMgaW4gYG1tL3ZtYWxsb2MuY2AgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBwb3NpdGl2ZS4gSXQmIzM5O3MgYSBjbGVhbiwgZm9jdXNlZCBpbXByb3ZlbWVudCB0byB0aGUgbGF6eSBwdXJnaW5nIG1lY2hhbmlzbSB3aXRoaW4gdm1hbGxvYy4gVGhlIGludHJvZHVjdGlvbiBvZiBkZWRpY2F0ZWQgd29ya3F1ZXVlcywgYGRyYWluX3ZtYXBfd3FgIGFuZCBgZHJhaW5fdm1hcF9oZWxwZXJzX3dxYCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIGBjcHVtYXNrYCB0cmFja2luZywgaXMgYSBkZWZpbml0ZSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEFuZCBzd2l0Y2hpbmcgdG8gcGVyLW5vZGUgYHdvcmtfcXVldWVkYCBmbGFncyBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgYW5kIHNob3VsZCBwcm92aWRlIGJldHRlciBncmFudWxhcml0eS4KClRoZSBpbXBvcnRhbnQgdGhpbmcgaXMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBhdHRhY2sgdmVjdG9ycyBoZXJlLiBObyB1c2VyLWNvcHkgdnVsbmVyYWJpbGl0aWVzLCBubyBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWtzLiBJIGNhbiYjMzk7dCBzcG90IGFueSBpbnN0YW5jZXMgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5kZWZpbmVkIGRhdGEuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KCkZyb20gYSBjb25jdXJyZW5jeSBwZXJzcGVjdGl2ZSwgdGhlIG5ldyBhcmNoaXRlY3R1cmUsIHV0aWxpemluZyB3b3JrcXVldWVzLCBzaG91bGQgYmUgcm9idXN0LiBQbHVzLCBhbnkgcmVtYWluaW5nIGNvbmNlcm5zIHJlZ2FyZGluZyB3b3JrcXVldWUgbGlmZXRpbWVzIG9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdGhhdCAqbWlnaHQqIGJlIHByZXNlbnQsIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIHJpZ29yb3VzIHRlc3RpbmcuIFNvLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTiBhbmFseXNpcy4gYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBoZXJlLgoKQWxyaWdodCwgd2l0aCB0aGF0IGFzc2Vzc21lbnQsIGxldCYjMzk7cyBnbyBhaGVhZCBhbmQgc2lnbmFsIHRoYXQgdGhlIHJldmlldyBpcyBjb21wbGV0ZS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTU6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSBpbiBtbS92bWFsbG9jLmMgYnkgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EgYW5kIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlcGxhY2luZyB0aGUgc3RhdGljIGNwdW1hc2sgdHJhY2tpbmcgd2l0aCBhIHBlci1ub2RlIGJvb2xlYW4gZmxhZyAodm4tXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxuXG5UaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvZGF0YSBzaXplcy4gVGhlIGJvb2xlYW4gZmxhZyBgd29ya19xdWV1ZWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gZWFjaCBpdGVyYXRpb24gaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSBpbiBtbS92bWFsbG9jLmMgYnkgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EgYW5kIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlcGxhY2luZyB0aGUgc3RhdGljIGNwdW1hc2sgdHJhY2tpbmcgd2l0aCBhIHBlci1ub2RlIGJvb2xlYW4gZmxhZyAodm4tXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxuXG5UaGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBib3VuZHMvZGF0YSBzaXplcy4gVGhlIGJvb2xlYW4gZmxhZyBgd29ya19xdWV1ZWRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gZmFsc2Ugb24gZWFjaCBpdGVyYXRpb24gaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5LCBsaWZlY3ljbGUsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzowNS43MTc1NDQzMzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODMyNDM3OTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5XCIsXG4gICAgXCJwdXJnZV92bWFwX25vZGVcIixcbiAgICBcInNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya1wiLFxuICAgIFwiZnJlZV92bWFwX2FyZWFfbm9mbHVzaFwiLFxuICAgIFwiZHJhaW5fdm1hcF9hcmVhX3dvcmtcIixcbiAgICBcInJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaW4gbW0vdm1hbGxvYy5jIGJ5IGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxIGFuZCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZXBsYWNpbmcgdGhlIHN0YXRpYyBjcHVtYXNrIHRyYWNraW5nIHdpdGggYSBwZXItbm9kZSBib29sZWFuIGZsYWcgKHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCkgd2hlbiBzY2hlZHVsaW5nIHB1cmdlIGpvYnMuXFxuXFxuVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbHRlcmF0aW9ucyB0byBidWZmZXIgYm91bmRzL2RhdGEgc2l6ZXMuIFRoZSBib29sZWFuIGZsYWcgYHdvcmtfcXVldWVkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIGVhY2ggaXRlcmF0aW9uIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZWN5Y2xlLCBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3ZtYWxsb2MuYywgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EsIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlZmFjdG9yaW5nIHRoZSBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgYW5kIG5vZGUgZHJhaW5pbmcgbG9naWMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzowNS43MTc1NTA0NzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODcwNTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxNToyMzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li44OWMzMjdhNmNlN2Q5IDEwMDY0NFxcbi0tLSBhL21tL3ZtYWxsb2MuY1xcbisrKyBiL21tL3ZtYWxsb2MuY1xcbkBAIC05NzIsNiArOTcyLDcgQEAgc3RhdGljIHN0cnVjdCB2bWFwX25vZGUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBwdXJnZV93b3JrO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZDtcXG4rXFx0Ym9vbCB3b3JrX3F1ZXVlZDtcXG4gfSBzaW5nbGU7XFxuIFxcbiAvKlxcbkBAIC0xMDkwLDYgKzEwOTEsOCBAQCBzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpO1xcbiBzdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRCh2bWFwX25vdGlmeV9saXN0KTtcXG4gc3RhdGljIHZvaWQgZHJhaW5fdm1hcF9hcmVhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIERFQ0xBUkVfV09SSyhkcmFpbl92bWFwX3dvcmssIGRyYWluX3ZtYXBfYXJlYV93b3JrKTtcXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl92bWFwX2hlbHBlcnNfd3E7XFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF93cTtcXG4gXFxuIHN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBhdG9taWNfbG9uZ190IHZtYXBfbGF6eV9ucjtcXG4gXFxuQEAgLTIzNTEsNiArMjM1NCwxNiBAQCBzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyZWNsYWltX2xpc3RfZ2xvYmFsKFxcdTAwMjZsb2NhbF9saXN0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2xcXG4rc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcXG4rXFx0XFx0c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdGlmICh3cSlcXG4rXFx0XFx0cmV0dXJuIHF1ZXVlX3dvcmsod3EsIHdvcmspO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLlxcbiAgKi9cXG5AQCAtMjM1OCwxOSArMjM3MSwxMiBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRib29sIGZ1bGxfcG9vbF9kZWNheSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZF9hcmVhcyA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlcyA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xcbi1cXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7XFxuIFxcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbi1cXHRpbnQgaTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBVc2UgY3B1bWFzayB0byBtYXJrIHdoaWNoIG5vZGUgaGFzIHRvIGJlIHByb2Nlc3NlZC5cXG4tXFx0ICovXFxuLVxcdHB1cmdlX25vZGVzID0gQ1BVX01BU0tfTk9ORTtcXG4tXFxuIFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QpO1xcbiBcXHRcXHR2bi1cXHUwMDNlc2tpcF9wb3B1bGF0ZSA9IGZ1bGxfcG9vbF9kZWNheTtcXG5AQCAtMjM5MCwxMCArMjM5Niw5IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdGVuZCA9IG1heChlbmQsIGxpc3RfbGFzdF9lbnRyeShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QsXFxuIFxcdFxcdFxcdHN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLVxcdTAwM2V2YV9lbmQpO1xcbiBcXG4tXFx0XFx0Y3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCBcXHUwMDI2cHVyZ2Vfbm9kZXMpO1xcbitcXHRcXHRucl9wdXJnZV9ub2RlcysrO1xcbiBcXHR9XFxuIFxcbi1cXHRucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KFxcdTAwMjZwdXJnZV9ub2Rlcyk7XFxuIFxcdGlmIChucl9wdXJnZV9ub2RlcyBcXHUwMDNlIDApIHtcXG4gXFx0XFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcXG4gXFxuQEAgLTI0MDEsMjkgKzI0MDYsMzEgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0bnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xcbiBcXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XFxuIFxcbi1cXHRcXHRmb3JfZWFjaF9jcHUoaSwgXFx1MDAyNnB1cmdlX25vZGVzKSB7XFxuLVxcdFxcdFxcdHZuID0gXFx1MDAyNnZtYXBfbm9kZXNbaV07XFxuK1xcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbitcXHRcXHRcXHR2bi1cXHUwMDNld29ya19xdWV1ZWQgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2VfbGlzdCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdFxcdFxcdElOSVRfV09SSyhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XFxuK1xcdFxcdFxcdFxcdHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCA9IHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhcXG4rXFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuIFxcbi1cXHRcXHRcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKVxcbi1cXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV93b3JrX29uKGksIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuLVxcdFxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbi1cXG4tXFx0XFx0XFx0XFx0bnJfcHVyZ2VfaGVscGVycy0tO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHR2bi1cXHUwMDNlcHVyZ2Vfd29yay5mdW5jID0gTlVMTDtcXG4tXFx0XFx0XFx0XFx0cHVyZ2Vfdm1hcF9ub2RlKFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuLVxcdFxcdFxcdFxcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cXHUwMDNlbnJfcHVyZ2VkO1xcbitcXHRcXHRcXHRcXHRpZiAodm4tXFx1MDAzZXdvcmtfcXVldWVkKSB7XFxuK1xcdFxcdFxcdFxcdFxcdG5yX3B1cmdlX2hlbHBlcnMtLTtcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuIFxcbi1cXHRcXHRmb3JfZWFjaF9jcHUoaSwgXFx1MDAyNnB1cmdlX25vZGVzKSB7XFxuLVxcdFxcdFxcdHZuID0gXFx1MDAyNnZtYXBfbm9kZXNbaV07XFxuK1xcdFxcdFxcdC8qIFN5bmMgcGF0aC4gUHJvY2VzcyBsb2NhbGx5LiAqL1xcbitcXHRcXHRcXHRwdXJnZV92bWFwX25vZGUoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG4rXFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICh2bi1cXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XFxuK1xcdFxcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cXG4rXFx0XFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XFxuK1xcdFxcdFxcdGlmICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHtcXG4gXFx0XFx0XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbiBcXHRcXHRcXHRcXHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXFx1MDAzZW5yX3B1cmdlZDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0yNDg3LDcgKzI0OTQsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxcbiBcXG4gXFx0LyogQWZ0ZXIgdGhpcyBwb2ludCwgd2UgbWF5IGZyZWUgdmEgYXQgYW55IHRpbWUgKi9cXG4gXFx0aWYgKHVubGlrZWx5KG5yX2xhenkgXFx1MDAzZSBucl9sYXp5X21heCkpXFxuLVxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmRyYWluX3ZtYXBfd29yayk7XFxuK1xcdFxcdHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksXFxuK1xcdFxcdFxcdFxcdTAwMjZkcmFpbl92bWFwX3dvcmspO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01NTg3LDMgKzU1OTUsMjAgQEAgdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXFxuIFxcdHZtYXBfbm9kZV9zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xcbiBcXHRzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB2bWFsbG9jX2luaXRfd29ya3F1ZXVlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTtcXG4rXFx0dW5zaWduZWQgaW50IGZsYWdzID0gV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNO1xcbitcXG4rXFx0ZHJhaW5fd3EgPSBhbGxvY193b3JrcXVldWUoXFxcInZtYXBfZHJhaW5cXFwiLCBmbGFncywgMCk7XFxuK1xcdFdBUk5fT05fT05DRShkcmFpbl93cSA9PSBOVUxMKTtcXG4rXFx0V1JJVEVfT05DRShkcmFpbl92bWFwX3dxLCBkcmFpbl93cSk7XFxuK1xcbitcXHRoZWxwZXJzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJ2bWFwX2RyYWluX2hlbHBlcnNcXFwiLCBmbGFncywgMCk7XFxuK1xcdFdBUk5fT05fT05DRShoZWxwZXJzX3dxID09IE5VTEwpO1xcbitcXHRXUklURV9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSwgaGVscGVyc193cSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitlYXJseV9pbml0Y2FsbCh2bWFsbG9jX2luaXRfd29ya3F1ZXVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MDYuMjI2ODQzOTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzI5MjY1MjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5XCIsXG4gICAgXCJwdXJnZV92bWFwX25vZGVcIixcbiAgICBcInNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya1wiLFxuICAgIFwiZnJlZV92bWFwX2FyZWFfbm9mbHVzaFwiLFxuICAgIFwiZHJhaW5fdm1hcF9hcmVhX3dvcmtcIixcbiAgICBcInJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL3ZtYWxsb2MuYywgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHdvcmtxdWV1ZXMgKGRyYWluX3ZtYXBfd3EsIGRyYWluX3ZtYXBfaGVscGVyc193cSkgYW5kIHJlZmFjdG9yaW5nIHRoZSBhc3luY2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgYW5kIG5vZGUgZHJhaW5pbmcgbG9naWMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYyZTBlNzIxZjNjODgwMWY1ZjcxNmNjOGE5ZjI2NmQxNzI4NDVkZmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE1OjIzOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li44OWMzMjdhNmNlN2Q5IDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC05NzIsNiArOTcyLDcgQEAgc3RhdGljIHN0cnVjdCB2bWFwX25vZGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwdXJnZV9saXN0O1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHB1cmdlX3dvcms7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZDtcbitcdGJvb2wgd29ya19xdWV1ZWQ7XG4gfSBzaW5nbGU7XG4gXG4gLypcbkBAIC0xMDkwLDYgKzEwOTEsOCBAQCBzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpO1xuIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHZtYXBfbm90aWZ5X2xpc3QpO1xuIHN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIERFQ0xBUkVfV09SSyhkcmFpbl92bWFwX3dvcmssIGRyYWluX3ZtYXBfYXJlYV93b3JrKTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3ZtYXBfaGVscGVyc193cTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3ZtYXBfd3E7XG4gXG4gc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIGF0b21pY19sb25nX3Qgdm1hcF9sYXp5X25yO1xuIFxuQEAgLTIzNTEsNiArMjM1NCwxNiBAQCBzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmVjbGFpbV9saXN0X2dsb2JhbChcdTAwMjZsb2NhbF9saXN0KTtcbiB9XG4gXG4rc3RhdGljIGJvb2xcbitzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLFxuK1x0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0aWYgKHdxKVxuK1x0XHRyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy5cbiAgKi9cbkBAIC0yMzU4LDE5ICsyMzcxLDEyIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDtcbitcdHVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlcyA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVycztcbi1cdHN0YXRpYyBjcHVtYXNrX3QgcHVyZ2Vfbm9kZXM7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbi1cdGludCBpO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuIFxuLVx0Lypcbi1cdCAqIFVzZSBjcHVtYXNrIHRvIG1hcmsgd2hpY2ggbm9kZSBoYXMgdG8gYmUgcHJvY2Vzc2VkLlxuLVx0ICovXG4tXHRwdXJnZV9ub2RlcyA9IENQVV9NQVNLX05PTkU7XG4tXG4gXHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbiBcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dm4tXHUwMDNlcHVyZ2VfbGlzdCk7XG4gXHRcdHZuLVx1MDAzZXNraXBfcG9wdWxhdGUgPSBmdWxsX3Bvb2xfZGVjYXk7XG5AQCAtMjM5MCwxMCArMjM5Niw5IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGVuZCA9IG1heChlbmQsIGxpc3RfbGFzdF9lbnRyeShcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0LFxuIFx0XHRcdHN0cnVjdCB2bWFwX2FyZWEsIGxpc3QpLVx1MDAzZXZhX2VuZCk7XG4gXG4tXHRcdGNwdW1hc2tfc2V0X2NwdShub2RlX3RvX2lkKHZuKSwgXHUwMDI2cHVyZ2Vfbm9kZXMpO1xuK1x0XHRucl9wdXJnZV9ub2RlcysrO1xuIFx0fVxuIFxuLVx0bnJfcHVyZ2Vfbm9kZXMgPSBjcHVtYXNrX3dlaWdodChcdTAwMjZwdXJnZV9ub2Rlcyk7XG4gXHRpZiAobnJfcHVyZ2Vfbm9kZXMgXHUwMDNlIDApIHtcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbkBAIC0yNDAxLDI5ICsyNDA2LDMxIEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuIFx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4gXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbitcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4rXHRcdFx0dm4tXHUwMDNld29ya19xdWV1ZWQgPSBmYWxzZTtcbitcbitcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0KSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmIChucl9wdXJnZV9oZWxwZXJzIFx1MDAzZSAwKSB7XG4gXHRcdFx0XHRJTklUX1dPUksoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTtcbitcdFx0XHRcdHZuLVx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxuK1x0XHRcdFx0XHRSRUFEX09OQ0UoZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4gXG4tXHRcdFx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrX29uKGksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVxuLVx0XHRcdFx0bnJfcHVyZ2VfaGVscGVycy0tO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHR2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMgPSBOVUxMO1xuLVx0XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbitcdFx0XHRcdGlmICh2bi1cdTAwM2V3b3JrX3F1ZXVlZCkge1xuK1x0XHRcdFx0XHRucl9wdXJnZV9oZWxwZXJzLS07XG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0fVxuIFx0XHRcdH1cbi1cdFx0fVxuIFxuLVx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbi1cdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4rXHRcdFx0LyogU3luYyBwYXRoLiBQcm9jZXNzIGxvY2FsbHkuICovXG4rXHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuK1x0XHRcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4rXHRcdH1cbiBcbi1cdFx0XHRpZiAodm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XG4rXHRcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cbitcdFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKSB7XG4rXHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4gXHRcdFx0XHRmbHVzaF93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuIFx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbiBcdFx0XHR9XG5AQCAtMjQ4Nyw3ICsyNDk0LDggQEAgc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWFfbm9mbHVzaChzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcbiBcbiBcdC8qIEFmdGVyIHRoaXMgcG9pbnQsIHdlIG1heSBmcmVlIHZhIGF0IGFueSB0aW1lICovXG4gXHRpZiAodW5saWtlbHkobnJfbGF6eSBcdTAwM2UgbnJfbGF6eV9tYXgpKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmRyYWluX3ZtYXBfd29yayk7XG4rXHRcdHNjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhSRUFEX09OQ0UoZHJhaW5fdm1hcF93cSksXG4rXHRcdFx0XHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbiB9XG4gXG4gLypcbkBAIC01NTg3LDMgKzU1OTUsMjAgQEAgdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXG4gXHR2bWFwX25vZGVfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xuIFx0c2hyaW5rZXJfcmVnaXN0ZXIodm1hcF9ub2RlX3Nocmlua2VyKTtcbiB9XG4rXG4rc3RhdGljIGludCBfX2luaXQgdm1hbGxvY19pbml0X3dvcmtxdWV1ZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcmFpbl93cSwgKmhlbHBlcnNfd3E7XG4rXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU07XG4rXG4rXHRkcmFpbl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInZtYXBfZHJhaW5cIiwgZmxhZ3MsIDApO1xuK1x0V0FSTl9PTl9PTkNFKGRyYWluX3dxID09IE5VTEwpO1xuK1x0V1JJVEVfT05DRShkcmFpbl92bWFwX3dxLCBkcmFpbl93cSk7XG4rXG4rXHRoZWxwZXJzX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwidm1hcF9kcmFpbl9oZWxwZXJzXCIsIGZsYWdzLCAwKTtcbitcdFdBUk5fT05fT05DRShoZWxwZXJzX3dxID09IE5VTEwpO1xuK1x0V1JJVEVfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EsIGhlbHBlcnNfd3EpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK2Vhcmx5X2luaXRjYWxsKHZtYWxsb2NfaW5pdF93b3JrcXVldWUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MDYuMjI2ODQ1NTA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4OTc2MDk0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bWFsbG9jIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRpdmluZyBpbnRvIGBtbS92bWFsbG9jLmNgLCB3aGljaCBpcyByaWdodCBpbiBteSB3aGVlbGhvdXNlIOKAkyBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cblNvLCB0aGUga2V5IGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB3b3JrcXVldWVzIGZvciB2bWFwIGRyYWluaW5nLiBXZSd2ZSBnb3QgdHdvIG5ldyB3b3JrcXVldWVzOiBgZHJhaW5fdm1hcF9oZWxwZXJzX3dxYCBhbmQgYGRyYWluX3ZtYXBfd3FgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHJlcGxhY2luZyBzb21lIGV4aXN0aW5nIENQVSBtYXNrIGxvZ2ljIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCB3aXRoIGEgYGZvcl9lYWNoX3ZtYXBfbm9kZWAgbG9vcCBhbmQgdGhlbiBxdWV1aW5nIHdvcmsgdG8gdGhlc2Ugd29ya3F1ZXVlcyB1c2luZyBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYC4gV2UgYWxzbyBzZWUgdGhlIGludHJvZHVjdGlvbiBvZiBhIGB3b3JrX3F1ZXVlZGAgZmxhZyB3aXRoaW4gdGhlIGB2bWFwX25vZGVgIHN0cnVjdHVyZS4gQWRkaXRpb25hbGx5LCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAgaXMgbm93IHNjaGVkdWxpbmcgd29yayBhcyB3ZWxsLiBGaW5hbGx5LCB0aGVyZSdzIGEgbmV3IGB2bWFsbG9jX2luaXRfd29ya3F1ZXVlYCB0byBzZXQgdXAgdGhlIGRlZGljYXRlZCB3b3JrcXVldWVzIHdpdGggdGhlIGBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU1gIGZsYWdzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBydWxlIHNldC4gVGhpcyBtb2RpZmljYXRpb24gdG8gYG1tL3ZtYWxsb2MuY2AgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoZSBcIm1lbW9yeSBtYW5hZ2VtZW50XCIgY2F0ZWdvcnkg4oCTIHRoYXQncyBhIGRpcmVjdCBoaXQuIEl0J3MgZXhlY3V0YWJsZSBjb2RlLCBhbmQgd2UncmUgZGVhbGluZyB3aXRoIHZtYWxsb2MgYXJlYSBwdXJnaW5nIGFuZCB3b3JrcXVldWUgaGFuZGxpbmcsIHdoaWNoIGFyZSBjcml0aWNhbCBhcmVhcy4gR2l2ZW4gdGhlIGNvcmUgc3Vic3lzdGVtIGludm9sdmVtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgdGltaW5nIGlzc3VlcyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGludGVyYWN0aW9ucywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBgV29ydGhGdXp6aW5nPXRydWVgIGZsYWcgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGNhbGxpbmcgdGhlIG1vZGlmaWVkIGNvZGUsIHNvIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbW0vdm1hbGxvYy5jYCBhbmQgS2NvbmZpZy4gR2V0dGluZyBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZG9pbmcgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciBpbnNpZ2h0IGludG8gdGhlIHBvc3NpYmxlIGltcGFjdHMgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjE3LjEyNDQ1Nzc3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1NTM4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wdXJnZV92bWFwX2FyZWFfbGF6eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIzNTg9c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMzY5LSAqL1xcbm1tL3ZtYWxsb2MuYzoyMzcwOnN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTIzNzEtXFx0XFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXFxuLS1cXG5tbS92bWFsbG9jLmM9MjQ0Nz1zdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjQ1MS1cXHRwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKCk7XFxubW0vdm1hbGxvYy5jOjI0NTI6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xcbm1tL3ZtYWxsb2MuYy0yNDUzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yNDU2PXN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDU4LVxcdG11dGV4X2xvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxubW0vdm1hbGxvYy5jOjI0NTk6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcXG5tbS92bWFsbG9jLmMtMjQ2MC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuLS1cXG5tbS92bWFsbG9jLmM9Mjk3Mz1zdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsdXNoKVxcbi0tXFxubW0vdm1hbGxvYy5jLTMwMTktXFxubW0vdm1hbGxvYy5jOjMwMjA6XFx0aWYgKCFfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHN0YXJ0LCBlbmQsIGZhbHNlKSBcXHUwMDI2XFx1MDAyNiBmbHVzaClcXG5tbS92bWFsbG9jLmMtMzAyMS1cXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzoxNy4yMzYwMTY5NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQwNjY4MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgQ2hhbmdlcyBpbiB2bWFsbG9jLmMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zIHdpdGhpbiBgbW0vdm1hbGxvYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGEgY29uY2VudHJhdGVkIGFyZWEgb2Ygd29yayBhcm91bmQgdm1hcCBhcmVhIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHB1cmdpbmcgYW5kIGZyZWVpbmcgb3BlcmF0aW9ucy4gSSdtIHNlZWluZyBjaGFuZ2VzIGluOiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCB0aGUgaGVscGVyIGBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmtgLCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYW4gZWZmb3J0IHRvIGltcHJvdmUgdGhlIGVmZmljaWVuY3kgb3Igcm9idXN0bmVzcyBvZiB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LCBwb3NzaWJseSBhZGRyZXNzaW5nIGlzc3VlcyBhcm91bmQgZnJhZ21lbnRhdGlvbiBvciBsYXRlbmN5IHdoZW4gcmVjbGFpbWluZyB2bWFsbG9jJ2QgcmVnaW9ucy4gSSBhbHNvIG5vdGljZWQgYHZtX3VubWFwX2FsaWFzZXNgIGFuZCBpdHMgaW50ZXJuYWwgdmFyaWFudCBgX3ZtX3VubWFwX2FsaWFzZXNgIGluIHRoZSBtaXguIEZpbmFsbHksIEkndmUgZ290IGB2bWFsbG9jX2luaXRfd29ya3F1ZXVlYCwgYnV0IHRoYXQncyBqdXN0IGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBwcm9iYWJseSBub3QgcGFydCBvZiB0aGUgY29yZSBjaGFuZ2VzLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqaW1wYWN0KiBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaG93IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHZtYWxsb2MgbGlmZWN5Y2xlLiBJJ2xsIGFsc28gYmUgZXhhbWluaW5nIG90aGVyIGNsb3NlbHkgcmVsYXRlZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBmaWxlIHRvIGVzdGFibGlzaCBhIGNvbXBsZXRlIG92ZXJ2aWV3LiBJIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29tbWl0IG1lc3NhZ2VzIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MjAuNDc2Njg3ODg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTc3MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfdm1hcF9hcmVhX25vZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yNDU2PXN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDY3LSAqL1xcbm1tL3ZtYWxsb2MuYzoyNDY4OnN0YXRpYyB2b2lkIGZyZWVfdm1hcF9hcmVhX25vZmx1c2goc3RydWN0IHZtYXBfYXJlYSAqdmEpXFxubW0vdm1hbGxvYy5jLTI0Njkte1xcbi0tXFxubW0vdm1hbGxvYy5jLTI0OTItXFxubW0vdm1hbGxvYy5jOjI0OTM6XFx0dHJhY2VfZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YV9zdGFydCwgbnJfbGF6eSwgbnJfbGF6eV9tYXgpO1xcbm1tL3ZtYWxsb2MuYy0yNDk0LVxcbi0tXFxubW0vdm1hbGxvYy5jPTI1MDQ9c3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjUxMC1cXG5tbS92bWFsbG9jLmM6MjUxMTpcXHRmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHZhKTtcXG5tbS92bWFsbG9jLmMtMjUxMi19XFxuLS1cXG5tbS92bWFsbG9jLmM9Mjc4OT1zdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYmxvY2soc3RydWN0IHZtYXBfYmxvY2sgKnZiKVxcbi0tXFxubW0vdm1hbGxvYy5jLTI4MDMtXFxubW0vdm1hbGxvYy5jOjI4MDQ6XFx0ZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2Yi1cXHUwMDNldmEpO1xcbm1tL3ZtYWxsb2MuYy0yODA1LVxcdGtmcmVlX3JjdSh2YiwgcmN1X2hlYWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzoyMC41NDQ4Njk3MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg5Nzg2NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlmZjogQSBRdWljayBTY2FuIG9mIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgY2hhbmdlcyB3aXRoaW4gdGhpcyBkaWZmIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgbWVtb3J5IG1hcC4gRmlyc3QsIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGxpc3QgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGBwdXJnZV92bWFwX25vZGVgLCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAsIGByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzYCwgYW5kIGB2bV91bm1hcF9hbGlhc2VzYC4gSSdsbCB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBoYW5kbGUgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCB1bm1hcHBpbmcuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIG9mIHRoZSBrZXkgZnVuY3Rpb25zLCBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBDT05GSUcgb3B0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYHZtYWxsb2MuY2AuIEknbGwgcXVpY2tseSBjaGVjayBgbW0vTWFrZWZpbGVgIGFuZCBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCBqdW1wIG91dC4gVGhhdCB3YXksIEkgY2FuIHRhaWxvciBteSBhbmFseXNpcyBmcm9tIHRoZSBzdGFydCBhbmQgYXZvaWQgb3Zlcmxvb2tpbmcgYW55IGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzM4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjIyLjkzNDY1OTEzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxNTE0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTM5LVxcdFxcdFxcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxcXFxubW0vTWFrZWZpbGU6NDA6XFx0XFx0XFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXFxubW0vTWFrZWZpbGUtNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjIzLjA0ODgxNTQ1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzEzMTc1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgbW0vdm1hbGxvYy5jYCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYENPTkZJR19NTVVgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gb24gYW1kNjQgYXJjaGl0ZWN0dXJlczsgaXQncyBhbHdheXMgc2V0IHRvICd5Jy4gVGhhdCdzIG5vdCB0aGUgcHJvYmxlbS4gV2hhdCBJIG5lZWQgdG8gZG8gaXMgaWRlbnRpZnkgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb2RlIGFyb3VuZCB0aG9zZSBtb2RpZmljYXRpb25zIGluIGBtbS92bWFsbG9jLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZS4gTGV0J3MgZGlnIGRlZXBlci4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwLCBJIHNob3VsZCByZWFsbHkgbG9vayBhdCBhIHdpZGVyIHJhbmdlLiBJJ2xsIGZvY3VzIG9uIGxpbmVzIDIzMDAgdGhyb3VnaCAyNTUwIGluIGBtbS92bWFsbG9jLmNgLiBUaW1lIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBzZWN0aW9uLiBIb3BlZnVsbHksIEknbGwgZmluZCBzb21lIHJlbGF0ZWQgY29uZGl0aW9uYWwgY29kZSB0aGF0IGdpdmVzIG1lIHNvbWUgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzoyNS4xMjAxMzU2OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdFxcdH1cXG4yMzUxOlxcdFxcbjIzNTI6XFx0XFx0YXRvbWljX2xvbmdfc3ViKG5yX3B1cmdlZF9wYWdlcywgXFx1MDAyNnZtYXBfbGF6eV9ucik7XFxuMjM1MzpcXHRcXG4yMzU0OlxcdFxcdHJlY2xhaW1fbGlzdF9nbG9iYWwoXFx1MDAyNmxvY2FsX2xpc3QpO1xcbjIzNTU6XFx0fVxcbjIzNTY6XFx0XFxuMjM1NzpcXHRzdGF0aWMgYm9vbFxcbjIzNTg6XFx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSxcXG4yMzU5OlxcdFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4yMzYwOlxcdHtcXG4yMzYxOlxcdFxcdGlmICh3cSlcXG4yMzYyOlxcdFxcdFxcdHJldHVybiBxdWV1ZV93b3JrKHdxLCB3b3JrKTtcXG4yMzYzOlxcdFxcbjIzNjQ6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIzNjU6XFx0fVxcbjIzNjY6XFx0XFxuMjM2NzpcXHQvKlxcbjIzNjg6XFx0ICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy5cXG4yMzY5OlxcdCAqL1xcbjIzNzA6XFx0c3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4yMzcxOlxcdFxcdFxcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxcbjIzNzI6XFx0e1xcbjIzNzM6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xcbjIzNzQ6XFx0XFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDtcXG4yMzc1OlxcdFxcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xcbjIzNzY6XFx0XFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XFxuMjM3NzpcXHRcXG4yMzc4OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuMjM3OTpcXHRcXG4yMzgwOlxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjIzODE6XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV9saXN0KTtcXG4yMzgyOlxcdFxcdFxcdHZuLVxcdTAwM2Vza2lwX3BvcHVsYXRlID0gZnVsbF9wb29sX2RlY2F5O1xcbjIzODM6XFx0XFx0XFx0ZGVjYXlfdmFfcG9vbF9ub2RlKHZuLCBmdWxsX3Bvb2xfZGVjYXkpO1xcbjIzODQ6XFx0XFxuMjM4NTpcXHRcXHRcXHRpZiAoUkJfRU1QVFlfUk9PVChcXHUwMDI2dm4tXFx1MDAzZWxhenkucm9vdCkpXFxuMjM4NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMzg3OlxcdFxcbjIzODg6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5sb2NrKTtcXG4yMzg5OlxcdFxcdFxcdFdSSVRFX09OQ0Uodm4tXFx1MDAzZWxhenkucm9vdC5yYl9ub2RlLCBOVUxMKTtcXG4yMzkwOlxcdFxcdFxcdGxpc3RfcmVwbGFjZV9pbml0KFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5oZWFkLCBcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QpO1xcbjIzOTE6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VsYXp5LmxvY2spO1xcbjIzOTI6XFx0XFxuMjM5MzpcXHRcXHRcXHRzdGFydCA9IG1pbihzdGFydCwgbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX2xpc3QsXFxuMjM5NDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1hcF9hcmVhLCBsaXN0KS1cXHUwMDNldmFfc3RhcnQpO1xcbjIzOTU6XFx0XFxuMjM5NjpcXHRcXHRcXHRlbmQgPSBtYXgoZW5kLCBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV9saXN0LFxcbjIzOTc6XFx0XFx0XFx0XFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXFx1MDAzZXZhX2VuZCk7XFxuMjM5ODpcXHRcXG4yMzk5OlxcdFxcdFxcdG5yX3B1cmdlX25vZGVzKys7XFxuMjQwMDpcXHRcXHR9XFxuMjQwMTpcXHRcXG4yNDAyOlxcdFxcdGlmIChucl9wdXJnZV9ub2RlcyBcXHUwMDNlIDApIHtcXG4yNDAzOlxcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XFxuMjQwNDpcXHRcXG4yNDA1OlxcdFxcdFxcdC8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovXFxuMjQwNjpcXHRcXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XFxuMjQwNzpcXHRcXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XFxuMjQwODpcXHRcXG4yNDA5OlxcdFxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjI0MTA6XFx0XFx0XFx0XFx0dm4tXFx1MDAzZXdvcmtfcXVldWVkID0gZmFsc2U7XFxuMjQxMTpcXHRcXG4yNDEyOlxcdFxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2VfbGlzdCkpXFxuMjQxMzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNDE0OlxcdFxcbjI0MTU6XFx0XFx0XFx0XFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXFx1MDAzZSAwKSB7XFxuMjQxNjpcXHRcXHRcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xcbjI0MTc6XFx0XFx0XFx0XFx0XFx0dm4tXFx1MDAzZXdvcmtfcXVldWVkID0gc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFxcbjI0MTg6XFx0XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSksIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuMjQxOTpcXHRcXG4yNDIwOlxcdFxcdFxcdFxcdFxcdGlmICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHtcXG4yNDIxOlxcdFxcdFxcdFxcdFxcdFxcdG5yX3B1cmdlX2hlbHBlcnMtLTtcXG4yNDIyOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI0MjM6XFx0XFx0XFx0XFx0XFx0fVxcbjI0MjQ6XFx0XFx0XFx0XFx0fVxcbjI0MjU6XFx0XFxuMjQyNjpcXHRcXHRcXHRcXHQvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi9cXG4yNDI3OlxcdFxcdFxcdFxcdHB1cmdlX3ZtYXBfbm9kZShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbjI0Mjg6XFx0XFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuMjQyOTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjI1LjEyMDQwNjU3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI3NzI4ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIGFuZCByZXNwb25kaW5nIHRvIHRoZSBwcm9tcHQ6XG5cbioqVGFyZ2V0ZWQgUmV2aWV3IEFyZWEqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGZvY3VzZWQgYW5kIGRpZyBpbnRvIHRoaXMgc2VjdGlvbi4gTGV0J3MgbWFrZSBzdXJlIHdlIHNjcnV0aW5pemUgbGluZXMgMjQzMCB0aHJvdWdoIDI1MTAuIEl0J3MgdGltZSB0byB6ZXJvIGluIG9uIHRoYXQgc3BlY2lmaWMgcmFuZ2U7IHRoYXQncyB3aGVyZSBJIGFudGljaXBhdGUgd2UnbGwgZGlzY292ZXIgdGhlIGtleSBudWFuY2VzIHRoYXQgbmVlZCBhdHRlbnRpb24uIFRpbWUgdG8gY2FyZWZ1bGx5IGFuZCBtZXRob2RpY2FsbHkgcmV2aWV3IHRoaXMgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MjcuMTQ4MTM3NzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQzMDpcXHRcXG4yNDMxOlxcdFxcdFxcdC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gaWYgcXVldWVkIGFueS4gKi9cXG4yNDMyOlxcdFxcdFxcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xcbjI0MzM6XFx0XFx0XFx0XFx0aWYgKHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCkge1xcbjI0MzQ6XFx0XFx0XFx0XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbjI0MzU6XFx0XFx0XFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuMjQzNjpcXHRcXHRcXHRcXHR9XFxuMjQzNzpcXHRcXHRcXHR9XFxuMjQzODpcXHRcXHR9XFxuMjQzOTpcXHRcXG4yNDQwOlxcdFxcdHRyYWNlX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHN0YXJ0LCBlbmQsIG5yX3B1cmdlZF9hcmVhcyk7XFxuMjQ0MTpcXHRcXHRyZXR1cm4gbnJfcHVyZ2VkX2FyZWFzIFxcdTAwM2UgMDtcXG4yNDQyOlxcdH1cXG4yNDQzOlxcdFxcbjI0NDQ6XFx0LypcXG4yNDQ1OlxcdCAqIFJlY2xhaW0gdm1hcCBhcmVhcyBieSBwdXJnaW5nIGZyYWdtZW50ZWQgYmxvY2tzIGFuZCBwdXJnZV92bWFwX2FyZWFfbGlzdC5cXG4yNDQ2OlxcdCAqL1xcbjI0NDc6XFx0c3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKVxcbjI0NDg6XFx0XFxuMjQ0OTpcXHR7XFxuMjQ1MDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbjI0NTE6XFx0XFx0cHVyZ2VfZnJhZ21lbnRlZF9ibG9ja3NfYWxsY3B1cygpO1xcbjI0NTI6XFx0XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xcbjI0NTM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbjI0NTQ6XFx0fVxcbjI0NTU6XFx0XFxuMjQ1NjpcXHRzdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMjQ1NzpcXHR7XFxuMjQ1ODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbjI0NTk6XFx0XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcXG4yNDYwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcXG4yNDYxOlxcdH1cXG4yNDYyOlxcdFxcbjI0NjM6XFx0LypcXG4yNDY0OlxcdCAqIEZyZWUgYSB2bWFwIGFyZWEsIGNhbGxlciBlbnN1cmluZyB0aGF0IHRoZSBhcmVhIGhhcyBiZWVuIHVubWFwcGVkLFxcbjI0NjU6XFx0ICogdW5saW5rZWQgYW5kIGZsdXNoX2NhY2hlX3Z1bm1hcCBoYWQgYmVlbiBjYWxsZWQgZm9yIHRoZSBjb3JyZWN0XFxuMjQ2NjpcXHQgKiByYW5nZSBwcmV2aW91c2x5LlxcbjI0Njc6XFx0ICovXFxuMjQ2ODpcXHRzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxcbjI0Njk6XFx0e1xcbjI0NzA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9sYXp5X21heCA9IGxhenlfbWF4X3BhZ2VzKCk7XFxuMjQ3MTpcXHRcXHR1bnNpZ25lZCBsb25nIHZhX3N0YXJ0ID0gdmEtXFx1MDAzZXZhX3N0YXJ0O1xcbjI0NzI6XFx0XFx0dW5zaWduZWQgaW50IHZuX2lkID0gZGVjb2RlX3ZuX2lkKHZhLVxcdTAwM2VmbGFncyk7XFxuMjQ3MzpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG4yNDc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfbGF6eTtcXG4yNDc1OlxcdFxcbjI0NzY6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2dmEtXFx1MDAzZWxpc3QpKSlcXG4yNDc3OlxcdFxcdFxcdHJldHVybjtcXG4yNDc4OlxcdFxcbjI0Nzk6XFx0XFx0bnJfbGF6eSA9IGF0b21pY19sb25nX2FkZF9yZXR1cm5fcmVsYXhlZCh2YV9zaXplKHZhKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbjI0ODA6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZ2bWFwX2xhenlfbnIpO1xcbjI0ODE6XFx0XFxuMjQ4MjpcXHRcXHQvKlxcbjI0ODM6XFx0XFx0ICogSWYgaXQgd2FzIHJlcXVlc3QgYnkgYSBjZXJ0YWluIG5vZGUgd2Ugd291bGQgbGlrZSB0b1xcbjI0ODQ6XFx0XFx0ICogcmV0dXJuIGl0IHRvIHRoYXQgbm9kZSwgaS5lLiBpdHMgcG9vbCBmb3IgbGF0ZXIgcmV1c2UuXFxuMjQ4NTpcXHRcXHQgKi9cXG4yNDg2OlxcdFxcdHZuID0gaXNfdm5faWRfdmFsaWQodm5faWQpID9cXG4yNDg3OlxcdFxcdFxcdGlkX3RvX25vZGUodm5faWQpOmFkZHJfdG9fbm9kZSh2YS1cXHUwMDNldmFfc3RhcnQpO1xcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZuLVxcdTAwM2VsYXp5LmxvY2spO1xcbjI0OTA6XFx0XFx0aW5zZXJ0X3ZtYXBfYXJlYSh2YSwgXFx1MDAyNnZuLVxcdTAwM2VsYXp5LnJvb3QsIFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5oZWFkKTtcXG4yNDkxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlbGF6eS5sb2NrKTtcXG4yNDkyOlxcdFxcbjI0OTM6XFx0XFx0dHJhY2VfZnJlZV92bWFwX2FyZWFfbm9mbHVzaCh2YV9zdGFydCwgbnJfbGF6eSwgbnJfbGF6eV9tYXgpO1xcbjI0OTQ6XFx0XFxuMjQ5NTpcXHRcXHQvKiBBZnRlciB0aGlzIHBvaW50LCB3ZSBtYXkgZnJlZSB2YSBhdCBhbnkgdGltZSAqL1xcbjI0OTY6XFx0XFx0aWYgKHVubGlrZWx5KG5yX2xhenkgXFx1MDAzZSBucl9sYXp5X21heCkpXFxuMjQ5NzpcXHRcXHRcXHRzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoUkVBRF9PTkNFKGRyYWluX3ZtYXBfd3EpLFxcbjI0OTg6XFx0XFx0XFx0XFx0XFx1MDAyNmRyYWluX3ZtYXBfd29yayk7XFxuMjQ5OTpcXHR9XFxuMjUwMDpcXHRcXG4yNTAxOlxcdC8qXFxuMjUwMjpcXHQgKiBGcmVlIGFuZCB1bm1hcCBhIHZtYXAgYXJlYVxcbjI1MDM6XFx0ICovXFxuMjUwNDpcXHRzdGF0aWMgdm9pZCBmcmVlX3VubWFwX3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSlcXG4yNTA1OlxcdHtcXG4yNTA2OlxcdFxcdGZsdXNoX2NhY2hlX3Z1bm1hcCh2YS1cXHUwMDNldmFfc3RhcnQsIHZhLVxcdTAwM2V2YV9lbmQpO1xcbjI1MDc6XFx0XFx0dnVubWFwX3JhbmdlX25vZmx1c2godmEtXFx1MDAzZXZhX3N0YXJ0LCB2YS1cXHUwMDNldmFfZW5kKTtcXG4yNTA4OlxcdFxcdGlmIChkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZF9zdGF0aWMoKSlcXG4yNTA5OlxcdFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodmEtXFx1MDAzZXZhX3N0YXJ0LCB2YS1cXHUwMDNldmFfZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MjcuMTQ4MzQ1NDU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNzEwNzM5NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFZtYXAgQXJlYSBQdXJnaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcyB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wYWN0LiBJJ20gZm9jdXNpbmcgb24gdGhlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcgKHZtYXApIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaGVyZS4gSSB3YW50IHRvIGF2b2lkIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zLCBzbyBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIGRyYWluaW5nIGFuZCBwdXJnaW5nIGxvZ2ljLlxuXG5CYXNlZCBvbiB0aGUgaW5pdGlhbCBhbmFseXNpcywgSSd2ZSBnb3QgYSBsaXN0OiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIGBwdXJnZV92bWFwX25vZGVgLCBgc2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrYCwgYGZyZWVfdm1hcF9hcmVhX25vZmx1c2hgLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gZmFjdG9yIGluIHRoYXQgYHZtX3VubWFwX2FsaWFzZXNgIGNhbGxzIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCwgYW5kIGB2ZnJlZWAgYW5kIGB2dW5tYXBgIGV2ZW50dWFsbHkgY2FsbCBgZnJlZV92bWFwX2FyZWFfbm9mbHVzaGAuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhhbmtmdWxseSwgdGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0IGRvZXNuJ3QgYXBwZWFyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGNvbmZpZyBkZXBlbmRlbmNpZXMgYmV5b25kIGBDT05GSUdfTU1VYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEFNRDY0IGFyY2hpdGVjdHVyZXMuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBlZmZlY3RpdmVseSBlbXB0eS5cblxuVG8gbWFrZSBzdXJlIEknbSBzb2xpZCwgbGV0J3MgcmV2aXNpdCBteSBpbnN0cnVjdGlvbiBzZXQgb25lIGxhc3QgdGltZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIE9rYXksIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBhbnkgY2hhbmdlIGhlcmUgaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIG1lY2hhbmlzbSwgaW50cm9kdWNpbmcgZGVkaWNhdGVkIHVuYm91bmQgd29ya3F1ZXVlcyBmb3IgYXN5bmNocm9ub3VzIGRyYWluaW5nIGFuZCBub2RlIHB1cmdpbmcsIGFuZCBtb2RpZnlpbmcgdGhlIG11bHRpLW5vZGUgcHVyZ2UgaXRlcmF0aW9uIGFuZCB3b3JrIHN5bmNocm9uaXphdGlvbiBsb2dpYy4gU3BvdCBvbi5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBDb25maXJtZWQgbGlzdDogYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLCBgcHVyZ2Vfdm1hcF9ub2RlYCwgYHNjaGVkdWxlX2RyYWluX3ZtYXBfd29ya2AsIGBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoYCwgYGRyYWluX3ZtYXBfYXJlYV93b3JrYCwgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQgYFtdYCwgcmVseWluZyBvbiB0aGUgc3RhbmRhcmQgTU1VIGNvbmZpZy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBwcm9jZXNzLCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzNiwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzozMy41MTk0MjM4MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlcIixcbiAgICBcInB1cmdlX3ZtYXBfbm9kZVwiLFxuICAgIFwic2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrXCIsXG4gICAgXCJmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoXCIsXG4gICAgXCJkcmFpbl92bWFwX2FyZWFfd29ya1wiLFxuICAgIFwicmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vdm1hbGxvYy5jLCBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSwgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVmYWN0b3JpbmcgdGhlIGFzeW5jaHJvbm91cyBhbmQgc3luY2hyb25vdXMgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBhbmQgbm9kZSBkcmFpbmluZyBsb2dpYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wdXJnZV92bWFwX2FyZWFfbGF6eVwiLFxuICAgIFwicHVyZ2Vfdm1hcF9ub2RlXCIsXG4gICAgXCJzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmtcIixcbiAgICBcImZyZWVfdm1hcF9hcmVhX25vZmx1c2hcIixcbiAgICBcImRyYWluX3ZtYXBfYXJlYV93b3JrXCIsXG4gICAgXCJyZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS92bWFsbG9jLmMsIGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxLCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZWZhY3RvcmluZyB0aGUgYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cyBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIGFuZCBub2RlIGRyYWluaW5nIGxvZ2ljLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MzMuNTE5NDk5NDI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUyMjQxNDUyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjMzLjUyMDU1MzMyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNTIxMzU1OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgbWVjaGFuaXNtIGluIG1tL3ZtYWxsb2MuYyBieSBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSBhbmQgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVwbGFjaW5nIHRoZSBzdGF0aWMgY3B1bWFzayB0cmFja2luZyB3aXRoIGEgcGVyLW5vZGUgYm9vbGVhbiBmbGFnICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxcblxcblRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgYWx0ZXJhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9kYXRhIHNpemVzLiBUaGUgYm9vbGVhbiBmbGFnIGB3b3JrX3F1ZXVlZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiBlYWNoIGl0ZXJhdGlvbiBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxpZmVjeWNsZSwgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjJlMGU3MjFmM2M4ODAxZjVmNzE2Y2M4YTlmMjY2ZDE3Mjg0NWRmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTU6MjM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IGJlYTlmNzZlZDdlNzQuLjg5YzMyN2E2Y2U3ZDkgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTk3Miw2ICs5NzIsNyBAQCBzdGF0aWMgc3RydWN0IHZtYXBfbm9kZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHVyZ2Vfd29yaztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkO1xuK1x0Ym9vbCB3b3JrX3F1ZXVlZDtcbiB9IHNpbmdsZTtcbiBcbiAvKlxuQEAgLTEwOTAsNiArMTA5MSw4IEBAIHN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZCk7XG4gc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQodm1hcF9ub3RpZnlfbGlzdCk7XG4gc3RhdGljIHZvaWQgZHJhaW5fdm1hcF9hcmVhX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgREVDTEFSRV9XT1JLKGRyYWluX3ZtYXBfd29yaywgZHJhaW5fdm1hcF9hcmVhX3dvcmspO1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF9oZWxwZXJzX3dxO1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZHJhaW5fdm1hcF93cTtcbiBcbiBzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgYXRvbWljX2xvbmdfdCB2bWFwX2xhenlfbnI7XG4gXG5AQCAtMjM1MSw2ICsyMzU0LDE2IEBAIHN0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfbm9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRyZWNsYWltX2xpc3RfZ2xvYmFsKFx1MDAyNmxvY2FsX2xpc3QpO1xuIH1cbiBcbitzdGF0aWMgYm9vbFxuK3NjaGVkdWxlX2RyYWluX3ZtYXBfd29yayhzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsXG4rXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRpZiAod3EpXG4rXHRcdHJldHVybiBxdWV1ZV93b3JrKHdxLCB3b3JrKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLypcbiAgKiBQdXJnZXMgYWxsIGxhemlseS1mcmVlZCB2bWFwIGFyZWFzLlxuICAqL1xuQEAgLTIzNTgsMTkgKzIzNzEsMTIgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuK1x0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzID0gMDtcbiBcdHVuc2lnbmVkIGludCBucl9wdXJnZV9oZWxwZXJzO1xuLVx0c3RhdGljIGNwdW1hc2tfdCBwdXJnZV9ub2Rlcztcbi1cdHVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlcztcbiBcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuLVx0aW50IGk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG4gXG4tXHQvKlxuLVx0ICogVXNlIGNwdW1hc2sgdG8gbWFyayB3aGljaCBub2RlIGhhcyB0byBiZSBwcm9jZXNzZWQuXG4tXHQgKi9cbi1cdHB1cmdlX25vZGVzID0gQ1BVX01BU0tfTk9ORTtcbi1cbiBcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bikge1xuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2bi1cdTAwM2VwdXJnZV9saXN0KTtcbiBcdFx0dm4tXHUwMDNlc2tpcF9wb3B1bGF0ZSA9IGZ1bGxfcG9vbF9kZWNheTtcbkBAIC0yMzkwLDEwICsyMzk2LDkgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ZW5kID0gbWF4KGVuZCwgbGlzdF9sYXN0X2VudHJ5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QsXG4gXHRcdFx0c3RydWN0IHZtYXBfYXJlYSwgbGlzdCktXHUwMDNldmFfZW5kKTtcbiBcbi1cdFx0Y3B1bWFza19zZXRfY3B1KG5vZGVfdG9faWQodm4pLCBcdTAwMjZwdXJnZV9ub2Rlcyk7XG4rXHRcdG5yX3B1cmdlX25vZGVzKys7XG4gXHR9XG4gXG4tXHRucl9wdXJnZV9ub2RlcyA9IGNwdW1hc2tfd2VpZ2h0KFx1MDAyNnB1cmdlX25vZGVzKTtcbiBcdGlmIChucl9wdXJnZV9ub2RlcyBcdTAwM2UgMCkge1xuIFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xuIFxuQEAgLTI0MDEsMjkgKzI0MDYsMzEgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0bnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XG4gXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTtcbiBcbi1cdFx0Zm9yX2VhY2hfY3B1KGksIFx1MDAyNnB1cmdlX25vZGVzKSB7XG4tXHRcdFx0dm4gPSBcdTAwMjZ2bWFwX25vZGVzW2ldO1xuK1x0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbitcdFx0XHR2bi1cdTAwM2V3b3JrX3F1ZXVlZCA9IGZhbHNlO1xuK1xuK1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnZuLVx1MDAzZXB1cmdlX2xpc3QpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbiBcdFx0XHRcdElOSVRfV09SSyhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xuK1x0XHRcdFx0dm4tXHUwMDNld29ya19xdWV1ZWQgPSBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoXG4rXHRcdFx0XHRcdFJFQURfT05DRShkcmFpbl92bWFwX2hlbHBlcnNfd3EpLCBcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbiBcbi1cdFx0XHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmtfb24oaSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXG4tXHRcdFx0XHRucl9wdXJnZV9oZWxwZXJzLS07XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYyA9IE5VTEw7XG4tXHRcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuK1x0XHRcdFx0aWYgKHZuLVx1MDAzZXdvcmtfcXVldWVkKSB7XG4rXHRcdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHR9XG4gXHRcdFx0fVxuLVx0XHR9XG4gXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbitcdFx0XHQvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi9cbitcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4rXHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbitcdFx0fVxuIFxuLVx0XHRcdGlmICh2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMpIHtcbitcdFx0LyogV2FpdCBmb3IgY29tcGxldGlvbiBpZiBxdWV1ZWQgYW55LiAqL1xuK1x0XHRmb3JfZWFjaF92bWFwX25vZGUodm4pIHtcbitcdFx0XHRpZiAodm4tXHUwMDNld29ya19xdWV1ZWQpIHtcbiBcdFx0XHRcdGZsdXNoX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4gXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuIFx0XHRcdH1cbkBAIC0yNDg3LDcgKzI0OTQsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZtYXBfYXJlYV9ub2ZsdXNoKHN0cnVjdCB2bWFwX2FyZWEgKnZhKVxuIFxuIFx0LyogQWZ0ZXIgdGhpcyBwb2ludCwgd2UgbWF5IGZyZWUgdmEgYXQgYW55IHRpbWUgKi9cbiBcdGlmICh1bmxpa2VseShucl9sYXp5IFx1MDAzZSBucl9sYXp5X21heCkpXG4tXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZHJhaW5fdm1hcF93b3JrKTtcbitcdFx0c2NoZWR1bGVfZHJhaW5fdm1hcF93b3JrKFJFQURfT05DRShkcmFpbl92bWFwX3dxKSxcbitcdFx0XHRcdTAwMjZkcmFpbl92bWFwX3dvcmspO1xuIH1cbiBcbiAvKlxuQEAgLTU1ODcsMyArNTU5NSwyMCBAQCB2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZClcbiBcdHZtYXBfbm9kZV9zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSB2bWFwX25vZGVfc2hyaW5rX3NjYW47XG4gXHRzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpO1xuIH1cbitcbitzdGF0aWMgaW50IF9faW5pdCB2bWFsbG9jX2luaXRfd29ya3F1ZXVlKHZvaWQpXG4re1xuK1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRyYWluX3dxLCAqaGVscGVyc193cTtcbitcdHVuc2lnbmVkIGludCBmbGFncyA9IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTTtcbitcbitcdGRyYWluX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwidm1hcF9kcmFpblwiLCBmbGFncywgMCk7XG4rXHRXQVJOX09OX09OQ0UoZHJhaW5fd3EgPT0gTlVMTCk7XG4rXHRXUklURV9PTkNFKGRyYWluX3ZtYXBfd3EsIGRyYWluX3dxKTtcbitcbitcdGhlbHBlcnNfd3EgPSBhbGxvY193b3JrcXVldWUoXCJ2bWFwX2RyYWluX2hlbHBlcnNcIiwgZmxhZ3MsIDApO1xuK1x0V0FSTl9PTl9PTkNFKGhlbHBlcnNfd3EgPT0gTlVMTCk7XG4rXHRXUklURV9PTkNFKGRyYWluX3ZtYXBfaGVscGVyc193cSwgaGVscGVyc193cSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rZWFybHlfaW5pdGNhbGwodm1hbGxvY19pbml0X3dvcmtxdWV1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzozMy41MjA1NTgxOThaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQxMzU0NTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggdG8gYG1tL3ZtYWxsb2MuY2Agd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNldmVyYWwgY2hhbmdlczsgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBhIGB3b3JrX3F1ZXVlZGAgYm9vbGVhbiB0byBgc3RydWN0IHZtYXBfbm9kZWAsIGFuZCB0d28gbmV3IHdvcmtxdWV1ZXMsIGBkcmFpbl92bWFwX2hlbHBlcnNfd3FgIGFuZCBgZHJhaW5fdm1hcF93cWAsIGluaXRpYWxpemVkIGR1cmluZyBgZWFybHlfaW5pdGNhbGxgLiBUaGUgZXhpc3RpbmcgY3B1bWFzayB0cmFja2luZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgaXMgcmVwbGFjZWQgd2l0aCBkaXJlY3QgaXRlcmF0aW9uLCBhbmQgd29yayBpcyBxdWV1ZWQgb24gdGhlc2Ugd29ya3F1ZXVlcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIHdheSBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGdldCBvdXQgdGhlcmUuIEZpcnN0IHBhc3MsIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgdXNlci1zcGFjZSBjb3BpZXMgKG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBpb2N0bHMsIG5vdGhpbmcgY29tcGxleCkuIFRoZXJlIGFyZW4ndCBhbnkgaW50cmljYXRlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgYXJvdW5kIHVuaW5pdGlhbGl6ZWQsIGVpdGhlci4gTG9va2luZyBjbG9zZXIsIGFsbCB0aGUgYHZtYXBfbm9kZWAgZWxlbWVudHMgc2VlbSB0byBiZSBzdGF0aWNhbGx5IG9yIGdsb2JhbGx5IGFsbG9jYXRlZC4gQW5kLCBnb29kLCB0aGUgYHZuLVx1MDAzZXdvcmtfcXVldWVkYCBmaWVsZCAqaXMqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCB3aXRoaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGJlZm9yZSBpdCBpcyB1c2VkLiBJdCBsb29rcyBsaWtlIHRoZSB3b3JrcXVldWUgb3BlcmF0aW9ucyBoZXJlIGFyZSBwcmltYXJpbHkgYWJvdXQgc3luY2hyb25pemF0aW9uLCBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2bWFsbG9jIHN1YnN5c3RlbSwgcmF0aGVyIHRoYW4gY29tcGxleCBkYXRhIG1hbmlwdWxhdGlvbi5cblxuTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgYHB1cmdlX3ZtYXBfbm9kZWAgYW5kIGFsbCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgbWFpbiBjb25jZXJuIGlzIHRvIHZlcmlmeSB0aGVyZSBhcmUgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgd2FudCB0byBzZWUgaWYgYW55IG9mIHRoZXNlIG9wZXJhdGlvbnMgKnJlYWQqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRpcmVjdGx5LCBlaXRoZXIgZHVlIHRvIGEgZGF0YS1yYWNlIG9yIGZyb20gY2FyZWxlc3MgdXNlLiBJIHdpbGwgaW5zcGVjdCBgcHVyZ2Vfdm1hcF9ub2RlYCBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIHRoaXMuIEkgdGhpbmsgaXQgaXMgKnVubGlrZWx5KiwgYnV0IEkgd2FudCB0byBiZSAqY2VydGFpbiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzozNy45MzQxMDcyMDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzI1NDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXJnZV92bWFwX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yMjk4PWthc2FuX3JlbGVhc2Vfdm1hbGxvY19ub2RlKHN0cnVjdCB2bWFwX25vZGUgKnZuKVxcbi0tXFxubW0vdm1hbGxvYy5jLTIzMjEtXFxubW0vdm1hbGxvYy5jOjIzMjI6c3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5tbS92bWFsbG9jLmMtMjMyMy17XFxuLS1cXG5tbS92bWFsbG9jLmM9MjM3MD1zdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTI0MTUtXFx0XFx0XFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXFx1MDAzZSAwKSB7XFxubW0vdm1hbGxvYy5jOjI0MTY6XFx0XFx0XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTtcXG5tbS92bWFsbG9jLmMtMjQxNy1cXHRcXHRcXHRcXHR2bi1cXHUwMDNld29ya19xdWV1ZWQgPSBzY2hlZHVsZV9kcmFpbl92bWFwX3dvcmsoXFxuLS1cXG5tbS92bWFsbG9jLmMtMjQyNi1cXHRcXHRcXHQvKiBTeW5jIHBhdGguIFByb2Nlc3MgbG9jYWxseS4gKi9cXG5tbS92bWFsbG9jLmM6MjQyNzpcXHRcXHRcXHRwdXJnZV92bWFwX25vZGUoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG5tbS92bWFsbG9jLmMtMjQyOC1cXHRcXHRcXHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXFx1MDAzZW5yX3B1cmdlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTU6MjM6MzguMjQxMzY2MjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxMjAwMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgcHVyZ2Vfdm1hcF9ub2RlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHZtYWxsb2NgIHNwYWNlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBtbS92bWFsbG9jLmNgIGFuZCBmb2N1cyBvbiB0aGUgYHB1cmdlX3ZtYXBfbm9kZWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgaXQgYmVpbmcgY3JpdGljYWwgZm9yIGZyZWVpbmcgdXAgdGhvc2UgVk0gYXJlYSBub2RlcywgZXNwZWNpYWxseSBhZnRlciBzb21ldGhpbmcgZ29lcyB3cm9uZyBvciB3aGVuIHJlc291cmNlcyBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdm1hcCBhbGxvY2F0b3IncyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgZnJhZ21lbnRhdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zLiBVbmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gaW4gdGhlIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQgbGF5ZXIuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjQwLjY1MzM3MjY4N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzMjA6XFx0fVxcbjIzMjE6XFx0XFxuMjMyMjpcXHRzdGF0aWMgdm9pZCBwdXJnZV92bWFwX25vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjIzMjM6XFx0e1xcbjIzMjQ6XFx0XFx0c3RydWN0IHZtYXBfbm9kZSAqdm4gPSBjb250YWluZXJfb2Yod29yayxcXG4yMzI1OlxcdFxcdFxcdHN0cnVjdCB2bWFwX25vZGUsIHB1cmdlX3dvcmspO1xcbjIzMjY6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfcGFnZXMgPSAwO1xcbjIzMjc6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmEsICpuX3ZhO1xcbjIzMjg6XFx0XFx0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xcbjIzMjk6XFx0XFxuMjMzMDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU5fVk1BTExPQykpXFxuMjMzMTpcXHRcXHRcXHRrYXNhbl9yZWxlYXNlX3ZtYWxsb2Nfbm9kZSh2bik7XFxuMjMzMjpcXHRcXG4yMzMzOlxcdFxcdHZuLVxcdTAwM2Vucl9wdXJnZWQgPSAwO1xcbjIzMzQ6XFx0XFxuMjMzNTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmEsIG5fdmEsIFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2VfbGlzdCwgbGlzdCkge1xcbjIzMzY6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuciA9IHZhX3NpemUodmEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMjMzNzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdm5faWQgPSBkZWNvZGVfdm5faWQodmEtXFx1MDAzZWZsYWdzKTtcXG4yMzM4OlxcdFxcbjIzMzk6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dmEtXFx1MDAzZWxpc3QpO1xcbjIzNDA6XFx0XFxuMjM0MTpcXHRcXHRcXHRucl9wdXJnZWRfcGFnZXMgKz0gbnI7XFxuMjM0MjpcXHRcXHRcXHR2bi1cXHUwMDNlbnJfcHVyZ2VkKys7XFxuMjM0MzpcXHRcXG4yMzQ0OlxcdFxcdFxcdGlmIChpc192bl9pZF92YWxpZCh2bl9pZCkgXFx1MDAyNlxcdTAwMjYgIXZuLVxcdTAwM2Vza2lwX3BvcHVsYXRlKVxcbjIzNDU6XFx0XFx0XFx0XFx0aWYgKG5vZGVfcG9vbF9hZGRfdmEodm4sIHZhKSlcXG4yMzQ2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIzNDc6XFx0XFxuMjM0ODpcXHRcXHRcXHQvKiBHbyBiYWNrIHRvIGdsb2JhbC4gKi9cXG4yMzQ5OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZ2YS1cXHUwMDNlbGlzdCwgXFx1MDAyNmxvY2FsX2xpc3QpO1xcbjIzNTA6XFx0XFx0fVxcbjIzNTE6XFx0XFxuMjM1MjpcXHRcXHRhdG9taWNfbG9uZ19zdWIobnJfcHVyZ2VkX3BhZ2VzLCBcXHUwMDI2dm1hcF9sYXp5X25yKTtcXG4yMzUzOlxcdFxcbjIzNTQ6XFx0XFx0cmVjbGFpbV9saXN0X2dsb2JhbChcXHUwMDI2bG9jYWxfbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE1OjIzOjQwLjY1MzU3MzQyN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzg4MzE3MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgTGF6eSBQdXJnaW5nIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJldmlld2VkIHRoZSBjaGFuZ2VzIGluIGBtbS92bWFsbG9jLmNgIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgcG9zaXRpdmUuIEl0J3MgYSBjbGVhbiwgZm9jdXNlZCBpbXByb3ZlbWVudCB0byB0aGUgbGF6eSBwdXJnaW5nIG1lY2hhbmlzbSB3aXRoaW4gdm1hbGxvYy4gVGhlIGludHJvZHVjdGlvbiBvZiBkZWRpY2F0ZWQgd29ya3F1ZXVlcywgYGRyYWluX3ZtYXBfd3FgIGFuZCBgZHJhaW5fdm1hcF9oZWxwZXJzX3dxYCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIGBjcHVtYXNrYCB0cmFja2luZywgaXMgYSBkZWZpbml0ZSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEFuZCBzd2l0Y2hpbmcgdG8gcGVyLW5vZGUgYHdvcmtfcXVldWVkYCBmbGFncyBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgYW5kIHNob3VsZCBwcm92aWRlIGJldHRlciBncmFudWxhcml0eS5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcywgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgYXR0YWNrIHZlY3RvcnMgaGVyZS4gTm8gdXNlci1jb3B5IHZ1bG5lcmFiaWxpdGllcywgbm8gcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBjYW4ndCBzcG90IGFueSBpbnN0YW5jZXMgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBsb2dpYyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5kZWZpbmVkIGRhdGEuIFRoYXQncyBhIGh1Z2UgcmVsaWVmLlxuXG5Gcm9tIGEgY29uY3VycmVuY3kgcGVyc3BlY3RpdmUsIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLCB1dGlsaXppbmcgd29ya3F1ZXVlcywgc2hvdWxkIGJlIHJvYnVzdC4gUGx1cywgYW55IHJlbWFpbmluZyBjb25jZXJucyByZWdhcmRpbmcgd29ya3F1ZXVlIGxpZmV0aW1lcyBvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHRoYXQgKm1pZ2h0KiBiZSBwcmVzZW50LCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB1c3VhbCByaWdvcm91cyB0ZXN0aW5nLiBTbywgSSBkb24ndCBzZWUgYW55IG5lZWQgdG8gZmxhZyB0aGlzIGZvciBLTVNBTiBhbmFseXNpcy4gYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBoZXJlLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCwgbGV0J3MgZ28gYWhlYWQgYW5kIHNpZ25hbCB0aGF0IHRoZSByZXZpZXcgaXMgY29tcGxldGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc3MSwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNToyMzo0NC4wNDE4OTI4MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyBtZWNoYW5pc20gaW4gbW0vdm1hbGxvYy5jIGJ5IGludHJvZHVjaW5nIGRlZGljYXRlZCB3b3JrcXVldWVzIChkcmFpbl92bWFwX3dxIGFuZCBkcmFpbl92bWFwX2hlbHBlcnNfd3EpIGFuZCByZXBsYWNpbmcgdGhlIHN0YXRpYyBjcHVtYXNrIHRyYWNraW5nIHdpdGggYSBwZXItbm9kZSBib29sZWFuIGZsYWcgKHZuLVxcdTAwM2V3b3JrX3F1ZXVlZCkgd2hlbiBzY2hlZHVsaW5nIHB1cmdlIGpvYnMuXFxuXFxuVGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBhbHRlcmF0aW9ucyB0byBidWZmZXIgYm91bmRzL2RhdGEgc2l6ZXMuIFRoZSBib29sZWFuIGZsYWcgYHdvcmtfcXVldWVkYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGZhbHNlIG9uIGVhY2ggaXRlcmF0aW9uIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZWN5Y2xlLCBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgbWVjaGFuaXNtIGluIG1tL3ZtYWxsb2MuYyBieSBpbnRyb2R1Y2luZyBkZWRpY2F0ZWQgd29ya3F1ZXVlcyAoZHJhaW5fdm1hcF93cSBhbmQgZHJhaW5fdm1hcF9oZWxwZXJzX3dxKSBhbmQgcmVwbGFjaW5nIHRoZSBzdGF0aWMgY3B1bWFzayB0cmFja2luZyB3aXRoIGEgcGVyLW5vZGUgYm9vbGVhbiBmbGFnICh2bi1cXHUwMDNld29ya19xdWV1ZWQpIHdoZW4gc2NoZWR1bGluZyBwdXJnZSBqb2JzLlxcblxcblRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgYWx0ZXJhdGlvbnMgdG8gYnVmZmVyIGJvdW5kcy9kYXRhIHNpemVzLiBUaGUgYm9vbGVhbiBmbGFnIGB3b3JrX3F1ZXVlZGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBmYWxzZSBvbiBlYWNoIGl0ZXJhdGlvbiBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxpZmVjeWNsZSwgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow24ks5[1] Phase: Succeeded StartedAt: 2026-09-06 15:23:56 +0000 UTC FinishedAt: 2026-09-06 15:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 15:23:56 +0000 UTC FinishedAt: 2026-09-06 15:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2] Phase: Succeeded StartedAt: 2026-09-06 15:23:56 +0000 UTC FinishedAt: 2026-09-06 19:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 15:23:56 +0000 UTC FinishedAt: 2026-09-06 19:17:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 15:23:56 +0000 UTC FinishedAt: 2026-09-06 15:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 15:23:56 +0000 UTC FinishedAt: 2026-09-06 15:24:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow24ks5/series-workflow24ks5-convert-artifact-1471248486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 15:24:06 +0000 UTC FinishedAt: 2026-09-06 15:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 15:24:06 +0000 UTC FinishedAt: 2026-09-06 15:50:20 +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:*c7c3a5fe-58cd-40db-9917-5ae90df98b91,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-workflow24ks5/series-workflow24ks5-convert-artifact-1471248486/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": "33404a35-899d-4e23-a9f4-b666084d7a05", "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-workflow24ks5/series-workflow24ks5-build-action-800200700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 15:24:06 +0000 UTC FinishedAt: 2026-09-06 15:50:10 +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:*c7c3a5fe-58cd-40db-9917-5ae90df98b91,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-workflow24ks5/series-workflow24ks5-convert-artifact-1471248486/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": "33404a35-899d-4e23-a9f4-b666084d7a05", "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-workflow24ks5/series-workflow24ks5-build-action-800200700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 15:50:20 +0000 UTC FinishedAt: 2026-09-06 15:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 15:50:20 +0000 UTC FinishedAt: 2026-09-06 15:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 15:50:20 +0000 UTC FinishedAt: 2026-09-06 15:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 15:50:20 +0000 UTC FinishedAt: 2026-09-06 15:50:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow24ks5/series-workflow24ks5-convert-artifact-2462167225/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 15:50:30 +0000 UTC FinishedAt: 2026-09-06 15:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 15:50:30 +0000 UTC FinishedAt: 2026-09-06 15:52:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33404a35-899d-4e23-a9f4-b666084d7a05,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-workflow24ks5/series-workflow24ks5-build-action-800200700/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-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 15:52:23 +0000 UTC FinishedAt: 2026-09-06 15:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 15:52:23 +0000 UTC FinishedAt: 2026-09-06 15:52:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 15:52:23 +0000 UTC FinishedAt: 2026-09-06 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 15:52:23 +0000 UTC FinishedAt: 2026-09-06 16:10:39 +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:*c7c3a5fe-58cd-40db-9917-5ae90df98b91,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-workflow24ks5/series-workflow24ks5-convert-artifact-2462167225/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": "0c89c787-1d84-4808-b52d-fd75c5fa0e87", "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-workflow24ks5/series-workflow24ks5-build-action-1467845013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 15:52:23 +0000 UTC FinishedAt: 2026-09-06 16:10:29 +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:*c7c3a5fe-58cd-40db-9917-5ae90df98b91,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-workflow24ks5/series-workflow24ks5-convert-artifact-2462167225/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": "0c89c787-1d84-4808-b52d-fd75c5fa0e87", "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-workflow24ks5/series-workflow24ks5-build-action-1467845013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 16:10:39 +0000 UTC FinishedAt: 2026-09-06 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 16:10:39 +0000 UTC FinishedAt: 2026-09-06 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 16:10:39 +0000 UTC FinishedAt: 2026-09-06 16:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 16:10:39 +0000 UTC FinishedAt: 2026-09-06 16:12:23 +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:*0c89c787-1d84-4808-b52d-fd75c5fa0e87,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-workflow24ks5/series-workflow24ks5-build-action-1467845013/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-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 19:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 19:17:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},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:*33404a35-899d-4e23-a9f4-b666084d7a05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c89c787-1d84-4808-b52d-fd75c5fa0e87,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-workflow24ks5/series-workflow24ks5-build-action-800200700/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-workflow24ks5/series-workflow24ks5-build-action-1467845013/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 16:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 16:12:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},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-workflow24ks5/series-workflow24ks5-convert-artifact-2792068654/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 16:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 16:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 16:12:33 +0000 UTC FinishedAt: 2026-09-06 16:12:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 16:12:43 +0000 UTC FinishedAt: 2026-09-06 19:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24ks5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__purge_vmap_area_lazy","purge_vmap_node","schedule_drain_vmap_work","free_vmap_area_noflush","drain_vmap_area_work","reclaim_and_purge_vmap_areas"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ed57836ff3000d5c8b889e04153efec88102311f","config_name":"upstream-apparmor-kasan.config","series_id":"e0be0f6c-8311-424f-b7e6-0a91ffdb20b1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 16:12:43 +0000 UTC FinishedAt: 2026-09-06 19:17:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*33404a35-899d-4e23-a9f4-b666084d7a05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c89c787-1d84-4808-b52d-fd75c5fa0e87,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-workflow24ks5/series-workflow24ks5-build-action-800200700/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-workflow24ks5/series-workflow24ks5-build-action-1467845013/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-workflow24ks5/series-workflow24ks5-convert-artifact-2792068654/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,}