Name: series-workflowmwn85 Phase: Succeeded StartedAt: 2026-08-10 15:15:20 +0000 UTC FinishedAt: 2026-08-10 19:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[0] Phase: Succeeded StartedAt: 2026-08-10 15:15:20 +0000 UTC FinishedAt: 2026-08-10 15:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 15:15:20 +0000 UTC FinishedAt: 2026-08-10 15:38:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ed3b3093b6242bdb2c4acfb932d4b15db4e33948", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ed3b3093b6242bdb2c4acfb932d4b15db4e33948", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "range_tree_set", "range_tree_clear", "bpf_arena_alloc_pages", "bpf_arena_free_pages", "bpf_arena_alloc_pages_non_sleepable", "bpf_arena_alloc_pages_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBwcmUtYWxsb2NhdGVzIGEgYHJhbmdlX25vZGVgIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUgdG8gcHJldmVudCBsZWF2aW5nIHRoZSB0cmVlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyAoZS5nLiwgcmV0dXJuaW5nIGAtRU5PTUVNYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJhbmdlX3RyZWVfc2V0YCBpbiBgYXJlbmEuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzk0N2RiNzk0MzFmNGRmYjA5MGM5OGM0YmE3N2NkYmVmNDRjMzExOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjM3OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggNTU1ZWUyNTMxZWY5OC4uZDU3YTBiNjE3NTI1OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNzY2LDcgJiM0Mzs3NjYsOSBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICYjNDM7IHVhZGRyMzI7XG4gb3V0OlxuLVx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmICYjNDM7IG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xuJiM0MztcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCkpXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2JwZl9hcmVuYTogZmFpbGVkIHRvIHJlc3RvcmUgZnJlZSByYW5nZSAlbGQmIzQzOyVsZCBhZnRlciBwYXJ0aWFsIGFsbG9jXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuIFx0aWYgKG1hcHBlZCkge1xuIFx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbkBAIC04ODEsNyAmIzQzOzg4MywxMiBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWZlcjtcbiBcbi1cdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuJiM0MztcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4gXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuQEAgLTEwMDQsMTEgJiM0MzsxMDExLDE4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0a2FkZHIgPSBhcmVuYV92bV9zdGFydCAmIzQzOyBzLVx1MDAzZXVhZGRyO1xuIFx0XHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtXHUwMDNldWFkZHIpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1hcmsgdGhlIHJhbmdlIGFzIGZyZWUgYmVmb3JlIGNsZWFyaW5nIFBURXMgc28gdGhhdFxuJiM0MztcdFx0ICogaWYgdGhlIHJhbmdlIHRyZWUgdXBkYXRlIGZhaWxzIHdlIGxlYXZlIHRoZSBQVEVzXG4mIzQzO1x0XHQgKiBpbnRhY3QsIGF2b2lkaW5nIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUgd2hlcmUgcGFnZXNcbiYjNDM7XHRcdCAqIGFyZSBmcmVlZCBidXQgdGhlIGFyZW5hIGZyZWUgdHJlZSBkb2VzIG5vdCB0cmFjayB0aGVtLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovXG4gXHRcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcdTAwMjZjZGF0YSk7XG4tXG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuIFx0fVxuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuaW5kZXggMmYyODg4NmYzZmY3NS4uNTQwNTViMWZlNTQxMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuQEAgLTE0MywxNiAmIzQzOzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdFx0aWYgKHJuLVx1MDAzZXJuX3N0YXJ0IFx1MDAzYyBzdGFydCBcdTAwMjZcdTAwMjYgcm4tXHUwMDNlcm5fbGFzdCBcdTAwM2UgbGFzdCkge1xuIFx0XHRcdHUzMiBvbGRfbGFzdCA9IHJuLVx1MDAzZXJuX2xhc3Q7XG4gXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcbiYjNDM7XHRcdFx0ICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU1cbiYjNDM7XHRcdFx0ICogd2l0aG91dCBhbHRlcmluZyB0aGUgcmFuZ2UgdHJlZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4mIzQzO1x0XHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4mIzQzO1x0XHRcdGlmICghbmV3X3JuKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiBcdFx0XHQvKiBPdmVybGFwcyB3aXRoIHRoZSBlbnRpcmUgY2xlYXJpbmcgcmFuZ2UgKi9cbiBcdFx0XHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcbiBcdFx0XHRybi1cdTAwM2Vybl9sYXN0ID0gc3RhcnQgLSAxO1xuIFx0XHRcdHJhbmdlX2l0X2luc2VydChybiwgcnQpO1xuIFxuLVx0XHRcdC8qIEFkZCBhIHJhbmdlICovXG4tXHRcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCxcbi1cdFx0XHRcdFx0XHROVU1BX05PX05PREUpO1xuLVx0XHRcdGlmICghbmV3X3JuKVxuLVx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdC8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovXG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX3N0YXJ0ID0gbGFzdCAmIzQzOyAxO1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9sYXN0ID0gb2xkX2xhc3Q7XG4gXHRcdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuQEAgLTE5Myw2ICYjNDM7MTk5LDcgQEAgaW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiB7XG4gXHR1MzIgbGFzdCA9IHN0YXJ0ICYjNDM7IGxlbiAtIDE7XG4mIzQzO1x0c3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbGVmdDtcbiBcdGludCBlcnI7XG5AQCAtMjAyLDIwICYjNDM7MjA5LDQwIEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdGlmIChsZWZ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX3N0YXJ0IFx1MDAzYz0gc3RhcnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCBcdTAwM2U9IGxhc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBuZXcgbm9kZSBpcyBuZWVkZWQgb25seSB3aGVuIHRoZSByYW5nZSBoYXMgbm8gYWRqYWNlbnQgZnJlZVxuJiM0MztcdCAqIHJhbmdlIG9uIGVpdGhlciBzaWRlLiAgVGhpcyBpcyBrbm93biBiZWZvcmUgY2xlYXJpbmc6IGFueSByYW5nZVxuJiM0MztcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICYjNDM7IDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50XG4mIzQzO1x0ICogcGllY2UuICBBbGxvY2F0ZSBvbmx5IGluIHRoYXQgY2FzZSwgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSwgc29cbiYjNDM7XHQgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xuJiM0MztcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpO1xuJiM0MztcdGlmICghbGVmdCBcdTAwMjZcdTAwMjYgIXJpZ2h0KSB7XG4mIzQzO1x0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxuJiM0MztcdFx0XHRcdFx0X19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcbiYjNDM7XHRcdGlmICghbmV3X3JuKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xuIFx0ZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xuLVx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICYjNDM7IDEgIT0gc3RhcnQpIHtcbiYjNDM7XHRcdGVyciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiYjNDM7XHR9XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgcmlnaHQtYWRqYWNlbnQgcmFuZ2UgPyAqL1xuIFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICYjNDM7IDEsIGxhc3QgJiM0MzsgMSk7XG4tXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgJiM0MzsgMSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0aWYgKHJpZ2h0IFx1MDAyNlx1MDAyNiByaWdodC1cdTAwM2Vybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpIHtcbiYjNDM7XHRcdGVyciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiYjNDM7XHR9XG4gXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgcmlnaHQpIHtcbiBcdFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cbkBAIC0yMzUsMTQgJiM0MzsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0XHRyaWdodC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuIFx0XHRyYW5nZV9pdF9pbnNlcnQocmlnaHQsIHJ0KTtcbiBcdH0gZWxzZSB7XG4tXHRcdGxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuLVx0XHRpZiAoIWxlZnQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdGxlZnQtXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbi1cdFx0bGVmdC1cdTAwM2Vybl9sYXN0ID0gbGFzdDtcbi1cdFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcbiYjNDM7XHRcdC8qIE5vIGFkamFjZW50IHJhbmdlczsgdXNlIHRoZSBwcmUtYWxsb2NhdGVkIG5vZGUgKi9cbiYjNDM7XHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuJiM0MztcdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfZnJlZV9uZXc6XG4mIzQzO1x0a2ZyZWVfbm9sb2NrKG5ld19ybik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JhbmdlX3RyZWVfc2V0JiMzNDssCiAgICAmIzM0O3JhbmdlX3RyZWVfY2xlYXImIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbWVtb3J5IGJlZm9yZSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUsIHByZXZlbnRpbmcgdW5yZWNvdmVyYWJsZSBzdGF0ZXMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscyBkdXJpbmcgYHJhbmdlX3RyZWVfc2V0YCBvciBgcmFuZ2VfdHJlZV9jbGVhcmAuIFRoaXMgYWZmZWN0cyBCUEYgYXJlbmEgcGFnZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzIGFuZCBtYXAgb3BlcmF0aW9ucy4gRnV6emluZyB0aGVzZSBwYXRocyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM5NDdkYjc5NDMxZjRkZmIwOTBjOThjNGJhNzdjZGJlZjQ0YzMxMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTozNzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA1NTVlZTI1MzFlZjk4Li5kNTdhMGI2MTc1MjU4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC03NjYsNyAmIzQzOzc2Niw5IEBAIHN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKIAlyZXR1cm4gY2xlYXJfbG8zMihhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydCkgJiM0MzsgdWFkZHIzMjsKIG91dDoKLQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7CiYjNDM7CWlmIChyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCkpCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7YnBmX2FyZW5hOiBmYWlsZWQgdG8gcmVzdG9yZSBmcmVlIHJhbmdlICVsZCYjNDM7JWxkIGFmdGVyIHBhcnRpYWwgYWxsb2NcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiAJaWYgKG1hcHBlZCkgewogCQlmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwpAQCAtODgxLDcgJiM0Mzs4ODMsMTIgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwKIAlpZiAocmV0KQogCQlnb3RvIGRlZmVyOwogCi0JcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiYjNDM7CXJldCA9IHJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiwgcGFnZV9jbnQpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAogCWluaXRfbGxpc3RfaGVhZCgmYW1wO2ZyZWVfcGFnZXMpOwogCWNkYXRhLmFyZW5hID0gYXJlbmE7CkBAIC0xMDA0LDExICYjNDM7MTAxMSwxOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWthZGRyID0gYXJlbmFfdm1fc3RhcnQgJiM0Mzsgcy0mZ3Q7dWFkZHI7CiAJCXBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgcy0mZ3Q7dWFkZHIpOwogCiYjNDM7CQkvKgomIzQzOwkJICogTWFyayB0aGUgcmFuZ2UgYXMgZnJlZSBiZWZvcmUgY2xlYXJpbmcgUFRFcyBzbyB0aGF0CiYjNDM7CQkgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXMKJiM0MzsJCSAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlcwomIzQzOwkJICogYXJlIGZyZWVkIGJ1dCB0aGUgYXJlbmEgZnJlZSB0cmVlIGRvZXMgbm90IHRyYWNrIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovCiAJCWFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoJmFtcDtpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCQkJICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgJmFtcDtjZGF0YSk7Ci0KLQkJcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiAJfQogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCmluZGV4IDJmMjg4ODZmM2ZmNzUuLjU0MDU1YjFmZTU0MTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCkBAIC0xNDMsMTYgJiM0MzsxNDMsMjIgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJCWlmIChybi0mZ3Q7cm5fc3RhcnQgJmx0OyBzdGFydCAmYW1wOyZhbXA7IHJuLSZndDtybl9sYXN0ICZndDsgbGFzdCkgewogCQkJdTMyIG9sZF9sYXN0ID0gcm4tJmd0O3JuX2xhc3Q7CiAKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmcKJiM0MzsJCQkgKiB0aGUgdHJlZS4gSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSByZXR1cm4gLUVOT01FTQomIzQzOwkJCSAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuCiYjNDM7CQkJICovCiYjNDM7CQkJbmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwKJiM0MzsJCQkJCQlfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpOwomIzQzOwkJCWlmICghbmV3X3JuKQomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKIAkJCS8qIE92ZXJsYXBzIHdpdGggdGhlIGVudGlyZSBjbGVhcmluZyByYW5nZSAqLwogCQkJcmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7CiAJCQlybi0mZ3Q7cm5fbGFzdCA9IHN0YXJ0IC0gMTsKIAkJCXJhbmdlX2l0X2luc2VydChybiwgcnQpOwogCi0JCQkvKiBBZGQgYSByYW5nZSAqLwotCQkJbmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwKLQkJCQkJCU5VTUFfTk9fTk9ERSk7Ci0JCQlpZiAoIW5ld19ybikKLQkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQkvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqLwogCQkJbmV3X3JuLSZndDtybl9zdGFydCA9IGxhc3QgJiM0MzsgMTsKIAkJCW5ld19ybi0mZ3Q7cm5fbGFzdCA9IG9sZF9sYXN0OwogCQkJcmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpOwpAQCAtMTkzLDYgJiM0MzsxOTksNyBAQCBpbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiB7CiAJdTMyIGxhc3QgPSBzdGFydCAmIzQzOyBsZW4gLSAxOwomIzQzOwlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbmV3X3JuID0gTlVMTDsKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7CiAJc3RydWN0IHJhbmdlX25vZGUgKmxlZnQ7CiAJaW50IGVycjsKQEAgLTIwMiwyMCAmIzQzOzIwOSw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJaWYgKGxlZnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9zdGFydCAmbHQ7PSBzdGFydCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX2xhc3QgJmd0Oz0gbGFzdCkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJLyoKJiM0MzsJICogQSBuZXcgbm9kZSBpcyBuZWVkZWQgb25seSB3aGVuIHRoZSByYW5nZSBoYXMgbm8gYWRqYWNlbnQgZnJlZQomIzQzOwkgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2UKJiM0MzsJICogY292ZXJpbmcgc3RhcnQgLSAxIG9yIGxhc3QgJiM0MzsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnQKJiM0MzsJICogcGllY2UuICBBbGxvY2F0ZSBvbmx5IGluIHRoYXQgY2FzZSwgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSwgc28KJiM0MzsJICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkCiYjNDM7CSAqLwomIzQzOwlsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpOwomIzQzOwlyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgJiM0MzsgMSwgbGFzdCAmIzQzOyAxKTsKJiM0MzsJaWYgKCFsZWZ0ICZhbXA7JmFtcDsgIXJpZ2h0KSB7CiYjNDM7CQluZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLAomIzQzOwkJCQkJX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTsKJiM0MzsJCWlmICghbmV3X3JuKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiAJLyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqLwogCWVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIG91dF9mcmVlX25ldzsKIAogCS8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi8KIAlsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpOwotCWlmIChsZWZ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKGxlZnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9sYXN0ICYjNDM7IDEgIT0gc3RhcnQpIHsKJiM0MzsJCWVyciA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlX25ldzsKJiM0MzsJfQogCiAJLyogRG8gd2UgaGF2ZSBhIHJpZ2h0LWFkamFjZW50IHJhbmdlID8gKi8KIAlyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgJiM0MzsgMSwgbGFzdCAmIzQzOyAxKTsKLQlpZiAocmlnaHQgJmFtcDsmYW1wOyByaWdodC0mZ3Q7cm5fc3RhcnQgIT0gbGFzdCAmIzQzOyAxKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKHJpZ2h0ICZhbXA7JmFtcDsgcmlnaHQtJmd0O3JuX3N0YXJ0ICE9IGxhc3QgJiM0MzsgMSkgewomIzQzOwkJZXJyID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfbmV3OwomIzQzOwl9CiAKIAlpZiAobGVmdCAmYW1wOyZhbXA7IHJpZ2h0KSB7CiAJCS8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovCkBAIC0yMzUsMTQgJiM0MzsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogCQlyaWdodC0mZ3Q7cm5fc3RhcnQgPSBzdGFydDsKIAkJcmFuZ2VfaXRfaW5zZXJ0KHJpZ2h0LCBydCk7CiAJfSBlbHNlIHsKLQkJbGVmdCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7Ci0JCWlmICghbGVmdCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlsZWZ0LSZndDtybl9zdGFydCA9IHN0YXJ0OwotCQlsZWZ0LSZndDtybl9sYXN0ID0gbGFzdDsKLQkJcmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTsKJiM0MzsJCS8qIE5vIGFkamFjZW50IHJhbmdlczsgdXNlIHRoZSBwcmUtYWxsb2NhdGVkIG5vZGUgKi8KJiM0MzsJCW5ld19ybi0mZ3Q7cm5fc3RhcnQgPSBzdGFydDsKJiM0MzsJCW5ld19ybi0mZ3Q7cm5fbGFzdCA9IGxhc3Q7CiYjNDM7CQlyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7CiAJfQogCXJldHVybiAwOwomIzQzOwomIzQzO291dF9mcmVlX25ldzoKJiM0MzsJa2ZyZWVfbm9sb2NrKG5ld19ybik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aCB0aGUgYHJhbmdlX3RyZWVfc2V0YCBjYWxscyB3aXRoaW4gYGFyZW5hLmNgLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQmIzM5O3MgYWJvdXQgcHJlLWFsbG9jYXRpbmcgbWVtb3J5IGluIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBpbiBgcmFuZ2VfdHJlZS5jYCB0byBwcmV2ZW50IGluLXBsYWNlIG1vZGlmaWNhdGlvbnMgaWYgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIGEgY29kZXBhdGggd29ydGggZnV6emluZz8gVGhlIEJQRiBhcmVuYSBpcyBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZGl0aW9uLCB3aGljaCBpcyBwcm9taXNpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUgc2luY2UgaXQgbWF5IGJlIGxlc3Mgd2VsbC10ZXN0ZWQuIEdpdmVuIHRoaXMgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3ksIGZ1enppbmcgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpbiB0aGUgQlBGIGFyZW5hIGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9icGYvYXJlbmEuY2AuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gVGhlbiBJJiMzOTtsbCBzaGlmdCBvdmVyIHRvIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AgdG8gbG9vayBhdCBob3cgYHJhbmdlX3RyZWVfY2xlYXJgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgIGNoYW5nZWQsIGZvY3VzaW5nIG9uIGhvdyB0aGUgcHJlLWFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuCgpOZXh0IHN0ZXA6IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBCUEYgYXJlbmEgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXIuIEkmIzM5O2xsIHNlYXJjaCBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgZm9yIHNvbWV0aGluZyBsaWtlIGBicGZfYXJlbmFgIG9yIGBCUEZfQVJFTkFgIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LCBzbyB0aGF0IEkgdW5kZXJzdGFuZCBob3cgdG8gcmVwcm9kdWNlIHRoZSBjaGFuZ2VzIGluIG15IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0FSRU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkJQRiBTeXNjYWxsIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgc3RhcnQgdGVhcmluZyBhcGFydCB0aGUgZW50aXJlIGtlcm5lbCwgY291bGQgdGhpcyBiZSBhcyBzaW1wbGUgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gU3BlY2lmaWNhbGx5LCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZGVwZW5kZW50IG9uIGBDT05GSUdfQlBGX1NZU0NBTExgPyBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIHNlZWluZyBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBvdmVyIHRvIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gd2hldGhlciB0aGUgcmVsZXZhbnQgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGF0IGZsYWcuIFRoYXQgTWFrZWZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgaG93IGBDT05GSUdfQlBGX1NZU0NBTExgIHBsYXlzIGludG8gdGhlIGVxdWF0aW9uLiBJdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIHRvIGRldGVybWluZSBpZiB0aGUgaXNzdWUgaXMgYSBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtIG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkLCBsaWtlIGEgbWlzc2luZyBpbmNsdWRlIG9yIGEgbW9yZSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBDaGVja2luZyB0aGUgTWFrZWZpbGUgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgQXJlbmEgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsIGNvbmZpZyBpcyBzZXQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAgYWxsIGVuYWJsZWQuIFRoYXQgdGVsbHMgbWUgdGhpcyBpcyBhIDY0LWJpdCBNTVUgYXJjaGl0ZWN0dXJlIHdpdGggQlBGIHN5c3RlbSBjYWxscyBhY3RpdmF0ZWQuIEdvb2QsIGdvb2QuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBCUEYgYXJlbmEgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byBga2VybmVsL2JwZi9hcmVuYS5jYC4gQWgsIHRoZXJlIHRoZXkgYXJlOiBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AuIFRoZXkmIzM5O3JlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXNlIGFyZSAqYWN0dWFsbHkqIHVzZWQuIFRpbWUgdG8gdHJhY2UgdGhvc2UgY2FsbCBzaXRlcyBhbmQgc2VlIGhvdyB0aGUgQlBGIGFyZW5hIGlzIGJlaW5nIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgdTY0IGNsZWFyX2xvMzIodTY0IHZhbClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY3LSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjY2ODpzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY5LVx0XHRcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk0My0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xua2VybmVsL2JwZi9hcmVuYS5jOjk0NDogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cbmtlcm5lbC9icGYvYXJlbmEuYy05NDUtICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNjE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDcxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzI6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3My19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3NC1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDc1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3Ni1cdFx0XHRcdFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDgzLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwODQ6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtfVxua2VybmVsL2JwZi9hcmVuYS5jLTEwODYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA4Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA5NjpcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTM1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEFyZW5hIEFsbG9jYXRpb24gYW5kIFJhbmdlIFRyZWUgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIHRoZWlyIHZhcmlhbnRzIGFyZSBhbGwgZWZmZWN0aXZlbHkgd3JhcHBlciBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGtmdW5jcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHRoYXQgYXJlIHVsdGltYXRlbHkgY2FsbGluZyBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AuIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IHRoZXJlIGFzIGdyb3VuZGJyZWFraW5nLCBqdXN0IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiAqd2h5KiB0aGV5JiMzOTtyZSB1c2luZyB0aGVzZSB3cmFwcGVyIGtmdW5jcy4gQXJlIHRoZXkgYWRkaW5nIGFueSBCUEYtc3BlY2lmaWMgc2VtYW50aWNzPwoKVGhlIHJlYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIG1lbnRpb24gb2YgbW9kaWZpY2F0aW9ucyB0byBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAuIFJhbmdlIHRyZWVzIGFyZSBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlIGZvciB0cmFja2luZyBtZW1vcnksIHNvIGNoYW5nZXMgdGhlcmUgYXJlIGRlZmluaXRlbHkgd29ydGggYSBkZWVwZXIgbG9vay4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGByYW5nZV90cmVlLmNgIGFuZCBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY2hhbmdlcyBvbiB0aGUgb3ZlcmFsbCBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3BlY2lmaWNhbGx5IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIEJQRi4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBldmVuIGFuIGFyY2hpdGVjdHVyYWwgc2hpZnQgaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIG1lbW9yeSByYW5nZXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgY2hhbmdlZCB0byB0aGUgd2F5IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaXMgdHJhY2tlZC4gTGV04oCZcyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhbmdlX3RyZWVfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE5LVx0cmFuZ2VfdHJlZV9pbml0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0KTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMjA6XHRlcnIgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgMCwgYXR0ci1cdTAwM2VtYXhfZW50cmllcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MjItXHRpZiAocmV0KSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIzOlx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MjQtXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyOC1cdGlmIChyZXQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1Mjk6XHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUzMC1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTcxNC1cdGlmICh1YWRkcikge1xua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcdFx0cmV0ID0gaXNfcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE2LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03Njgtb3V0Olxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcwLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2JwZl9hcmVuYTogZmFpbGVkIHRvIHJlc3RvcmUgZnJlZSByYW5nZSAlbGQmIzQzOyVsZCBhZnRlciBwYXJ0aWFsIGFsbG9jXFxuXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg4NS1cbmtlcm5lbC9icGYvYXJlbmEuYzo4ODY6XHRyZXQgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy04ODctXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTk0Nj1zdGF0aWMgaW50IGFyZW5hX3Jlc2VydmVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIHUzMiBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTY0LVx0LyogQ2Fubm90IGd1YXJkIGFscmVhZHkgYWxsb2NhdGVkIHBhZ2VzLiAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjk2NTpcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTk2Ni1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTgwPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxOS1cdFx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAyMDpcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxua2VybmVsL2JwZi9hcmVuYS5jLTEwMjEtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjYtICogQXQgaW5pdCB0aW1lOlxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6Mjc6ICogICByYW5nZV90cmVlX3NldChydCwgMCwgbWF4KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMzItICogdG8gZmluZCBmcmVlIHJhbmdlIGFuZCBtYXJrIHNsb3RzIGFzIGFsbG9jYXRlZCBhbmQgbGF0ZXI6XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTM0LSAqIHRvIG1hcmsgYXMgdW5hbGxvY2F0ZWQgYWZ0ZXIgdXNlLlxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xODUtLyogSXMgdGhlIHdob2xlIHJhbmdlIHNldCA/ICovXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODY6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg3LXtcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTgtLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE5OTppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0yMDAte1xuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oPTE2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oOjE3OmludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxODppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmgtMTktczY0IHJhbmdlX3RyZWVfZmluZChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBBcmVuYSBNYXAgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQlBGIGFyZW5hIHN0dWZmLCBhbmQgdGhlIGNvbm5lY3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIuIFRoZSBCUEYgYXJlbmEgaXMsIG9mIGNvdXJzZSwgYSBCUEYgbWFwIHR5cGUuIFdoYXQgcmVhbGx5IGdvdCBteSBhdHRlbnRpb24gaXMgaG93IGBhcmVuYV9tYXBfYWxsb2NgIGNhbGxzIGByYW5nZV90cmVlX3NldGAgd2l0aCB0aGUgYGFyZW5hLSZndDtydGAgYW5kIGBhdHRyLSZndDttYXhfZW50cmllc2AuIFNvLCBjcmVhdGluZyBvbmUgb2YgdGhlc2UgbWFwcyBpcyBkaXJlY3RseSBnb2luZyB0byB0cmlnZ2VyIHRoYXQgYHJhbmdlX3RyZWVfc2V0YCBmdW5jdGlvbi4gQW5kIGl0IGRvZXNuJiMzOTt0IHN0b3AgdGhlcmU7IGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIHdpbGwgZnVydGhlciBpbnRlcmFjdCB3aXRoIHRoYXQgYHJhbmdlX3RyZWVfY2xlYXJgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgLCBtYWtpbmcgdGhpcyBhIGxpa2VseSBhcmVhIGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBtYXAgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIHRoYXQgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEZyb20gYSBxdWljayBnbGFuY2UsIEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIHNlZSB3aGF0IGVsc2Ugd2UgbWlnaHQgbmVlZCBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEJQRl9TWVNDQUxMIGluIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHdhaXQgYSBtaW51dGUuIGBCUEZfU1lTQ0FMTGAuLi4gaXNuJiMzOTt0IHRoYXQgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYD8gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBjbG9zZXIgdG8gdGhlIGNvcmUgQlBGIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNyZW1lbWJlcmluZyBvciBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLiBHaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSAqZXhwZWN0KiB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlcmUgaXQmIzM5O3MgKnJlZmVyZW5jZWQqIGlmIGl0JiMzOTtzIGRlZmluZWQgZWxzZXdoZXJlLiBOZWVkIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgaG9vayB3b3JrcyBpbiB0aGUgQlBGIHN1YnN5c3RlbSwgc2luY2UgdGhlIHBsYWNlbWVudCBzZWVtcyBvZGQuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTcyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIEkga25vdyBgQlBGX1NZU0NBTExgIGlzIGRlZmluaXRlbHkgZGVmaW5lZCB3aXRoaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEdvb2QuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBteSBjdXJyZW50IHRhc2suIEkmIzM5O2xsIHF1aWNrbHkgcmV2aXNpdCBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYW55IHVuZXhwZWN0ZWQgcm9hZGJsb2NrcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTmVjZXNzYXJ5IEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVGhpcyBUYXNrKioKClJpZ2h0LCBzbyB0byBnZXQgdGhpcyB3b3JraW5nLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYC4gUHJldHR5IHN0YW5kYXJkLCB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQsIGJ1dCBhbHdheXMgZ29vZCB0byBjb25maXJtLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCB0aGF0LgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBga2VybmVsL2JwZi9hcmVuYS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHRoYW4gdG8gY2hhc2UgZG93biBhIG1pc3NpbmcgY29uZmlnIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPdmVycmlkZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMsIGFuZCB0aGUgaW5pdGlhbCBjaGVjayBvZiBgYXJlbmEuY2AgeWllbGRlZCBubyBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhhdCYjMzk7cyBnb29kLCBrZWVwcyB0aGluZ3Mgc2ltcGxlLiBOb3csIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHN1YnRsZSB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGFyZWEgb2YgdGhlIGNvZGUsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYGtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jYC4gSXQmIzM5O3MgYSBrZXkgYXJlYSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgbHVya2luZyBpbiB0aGVyZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9yYW5nZV90cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcmFuZ2VfdHJlZS5jYCBmb3IgUmVsZXZhbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyB0aHJvdWdoIGByYW5nZV90cmVlLmNgLiBJdCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyLCBzbyB0aGF0JiMzOTtzIGdvb2QuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc2VlLi4uIGJhc2VkIG9uIHRoZSBuYW1lcywgYGFyZW5hX21hcF9hbGxvY2AsIGBhcmVuYV9tYXBfZnJlZWAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfd29ya2VyYCwgYHJhbmdlX3RyZWVfc2V0YCwgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBhbGwgbG9vayBsaWtlIGNhbmRpZGF0ZXMuCgpIbW0sIGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBTaW5jZSB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIHByb2JhYmx5IGlubGluZWQuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBpbmxpbmVkLiBBIHJlbGF0ZWQgY29uc2lkZXJhdGlvbiBjb21lcyB0byBtaW5kIOKAkyBJIHNob3VsZCBjaGVjayB0aGUga2Z1bmNzLCBhcyB0aGV5IG1heSBiZSB1c2luZyB0aGVzZSBpbnRlcm5hbCBtZXRob2RzLiBMZXQmIzM5O3MgY2hlY2s6IGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgLCBhbmQgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVgLgoKQWxzbywgdGhlIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub24tc3RhdGljLCBzbyB0aG9zZSBkZWZpbml0ZWx5IHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIGByYW5nZV90cmVlLmNgIGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYW5nZV90cmVlX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI2LSAqIEF0IGluaXQgdGltZTpcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjI3OiAqICAgcmFuZ2VfdHJlZV9zZXQocnQsIDAsIG1heCk7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0yOC0gKiBUaGVuOlxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTMyLSAqIHRvIGZpbmQgZnJlZSByYW5nZSBhbmQgbWFyayBzbG90cyBhcyBhbGxvY2F0ZWQgYW5kIGxhdGVyOlxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MzM6ICogICByYW5nZV90cmVlX3NldChydCwgc3RhcnQsIGxlbik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zNC0gKiB0byBtYXJrIGFzIHVuYWxsb2NhdGVkIGFmdGVyIHVzZS5cbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xMzY9aW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg1LS8qIElzIHRoZSB3aG9sZSByYW5nZSBzZXQgPyAqL1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MTg2OmludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4Ny17XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTk4LS8qIFNldCB0aGUgcmFuZ2UgaW4gdGhpcyByYW5nZSB0cmVlICovXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxOTk6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKUmlnaHQsIHNvIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBhcmUgZGVmaW5pdGVseSBub24tc3RhdGljIG1ldGhvZHMuIFdlIGNhbiB1c2UgdGhvc2UgbWV0aG9kcyBhcyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgd2hpY2ggaXMga2V5LiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgbWFuYWdlZCB0byBiZSBjZXJ0YWluIHRoZSBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBjb3JyZWN0bHkuIExldCYjMzk7cyBkaWcgaW50byBgYXJlbmFfbWFwX2FsbG9jYCBhbmQgYGFyZW5hX21hcF9mcmVlYC4gVGhleSBhcmUgdGhlIGdhdGVrZWVwZXJzIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgbWVtb3J5IGxlYWtzIGFyZW4mIzM5O3QgcG9zc2libGUgd2l0aGluIHRoZSByYW5nZSB0cmVlIGltcGxlbWVudGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfbWFwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYz0yNTk9c3RhdGljIGludCBwb3B1bGF0ZV9wZ3RhYmxlX2V4Y2VwdF9wdGUoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI2NS1cbmtlcm5lbC9icGYvYXJlbmEuYzoyNjY6c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY3LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjQwPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTY0MS1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XHQubWFwX2FsbG9jID0gYXJlbmFfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9hcmVuYS5jLTY0My1cdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQXJlbmEgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGFyZW5hIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhhdCBgYXJlbmFfbWFwX2FsbG9jYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gVGhpcyBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgc2NvcGUgYW5kIG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLCB3aGljaCBzaW1wbGlmaWVzIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGV4dGVybmFsIGNhbGxzIGFyZSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZTogYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlYCwgYW5kIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYC4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCBpcyAqYWN0dWFsbHkqIG5vbi1zdGF0aWMuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgY29uZnVzaW9uLCBhbmQgYSBzaW1wbGUgdmVyaWZpY2F0aW9uIHdpbGwgc2F2ZSBtZSB0aW1lIGRvd24gdGhlIHJvYWQuIFRoaXMgY29uZmlybWF0aW9uIGlzIG15IG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYy0zOS0gKiBpbnRvIGtlcm5lbCBhbmQgdXNlciB2bWEuXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA6ICogYnBmIHByb2dyYW0gY2FuIGFsbG9jYXRlIGEgcGFnZSB2aWEgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkga2Z1bmNcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk0My0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xua2VybmVsL2JwZi9hcmVuYS5jOjk0NDogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cbmtlcm5lbC9icGYvYXJlbmEuYy05NDUtICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNjE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc0LVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzU6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc2LVx0XHRcdFx0XHQgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwODYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA4Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTExMzQ9QlRGX0tGVU5DU19TVEFSVChhcmVuYV9rZnVuY3MpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhleSBhcmVuJiMzOTt0IHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBhIGZldyBzcGVjaWZpYyBvbmVzOiBgcmFuZ2VfdHJlZV9zZXRgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgLCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYC4gVGhlc2Ugc2VlbSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24uCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSBhcmUgYWxzbyBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgIGFuZCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZWAuIFRoZXkmIzM5O3JlICphbHNvKiBub24tc3RhdGljLiBHb3R0YSBtYWtlIHN1cmUgSSBpbmNsdWRlIHRob3NlIGluIG15IGFzc2Vzc21lbnQuIFRoaXMgaXMgaW1wb3J0YW50LgoKTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNydWNpYWwuIEFyZSBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgKmV4cG9ydGVkKiwgb3IgYXJlIHRoZXkganVzdCBub24tc3RhdGljIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGF0IGRpc3RpbmN0aW9uIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGZvciB0aGUgbmV4dCBzdGVwcyBvZiBteSBhbmFseXNpcy4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgc2NvcGUgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9yYW5nZV90cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NgoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBBcmVuYSBhbmQgUmFuZ2UgVHJlZSBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBzeXN0ZW0gZG9lc24mIzM5O3QgZXhwb3J0IHRoZXNlIHN5bWJvbHMgZGlyZWN0bHksIGJ1dCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5ICpub24tc3RhdGljKiwgbWVhbmluZyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhleSYjMzk7cmUgdXNlZC4KCkZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIG1ha2UgdGhpcyBidWlsZCBjb3JyZWN0bHkuIFRoZSBwcmltYXJ5IG9uZSBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgZXNzZW50aWFsIGZsYWcuIEJ1dCwgaGFuZyBvbi4uLiBsZXQgbWUgZG91YmxlLWNoZWNrLiBJdCBsb29rcyBsaWtlIHRoZSBvYmplY3RzIGByYW5nZV90cmVlLm9gIGFuZCBgYXJlbmEub2AgYWxzbyBkZXBlbmQgb24gYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBiZWluZyBlbmFibGVkIGluIGFkZGl0aW9uIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKUmlnaHQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbmFsaXRpZXMgYXJlIGVuYWJsZWQuCgpOb3csIGxldCBtZSBjb25kZW5zZSB0aGlzIGluZm9ybWF0aW9uIGludG8gYSB1c2FibGUgZm9ybWF0IGZvciBteSBhbmFseXNpcy4KCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLiBBYnNvbHV0ZWx5LgoqICAgKipGb2N1c1N5bWJvbHMqKjogSSBzaG91bGQgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6CiAgICAqICAgYHJhbmdlX3RyZWVfc2V0YAogICAgKiAgIGByYW5nZV90cmVlX2NsZWFyYAogICAgKiAgIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgCiAgICAqICAgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYAogICAgKiAgIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZWAKICAgICogICBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBFbmFibGUgYEJQRl9TWVNDQUxMYC4KCk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSBsb2dpYyBpbiBhIHNpZ25pZmljYW50IHdheS4gVGhlIGdvYWwgaXMgcHJlLWFsbG9jYXRpbmcgbWVtb3J5LCB3aGljaCBwcmV2ZW50cyBwb3RlbnRpYWxseSBkaXNhc3Ryb3VzIHVucmVjb3ZlcmFibGUgc3RhdGVzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYCBvcGVyYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGFmZmVjdHMgQlBGIGFyZW5hIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZywgZnVuY3Rpb25hbGl0aWVzIHRoYXQgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIHBhcmFtb3VudCB0byB2YWxpZGF0ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByZS1hbGxvY2F0aW9uIHN0cmF0ZWd5IHdvcmtzIHJlbGlhYmx5IHVuZGVyIHN0cmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JhbmdlX3RyZWVfc2V0JiMzNDssCiAgICAmIzM0O3JhbmdlX3RyZWVfY2xlYXImIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbWVtb3J5IGJlZm9yZSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUsIHByZXZlbnRpbmcgdW5yZWNvdmVyYWJsZSBzdGF0ZXMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscyBkdXJpbmcgYHJhbmdlX3RyZWVfc2V0YCBvciBgcmFuZ2VfdHJlZV9jbGVhcmAuIFRoaXMgYWZmZWN0cyBCUEYgYXJlbmEgcGFnZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzIGFuZCBtYXAgb3BlcmF0aW9ucy4gRnV6emluZyB0aGVzZSBwYXRocyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgZXJyb3IgaGFuZGxpbmcgaW4gQlBGIGFyZW5hJiMzOTtzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgcHJlLWFsbG9jYXRlcyBhIGByYW5nZV9ub2RlYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgdHJlZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMgKGUuZy4sIHJldHVybmluZyBgLUVOT01FTWApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgaW4gYGFyZW5hLmNgLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgIGhhcyBpdHMgZmllbGRzIChgcm5fc3RhcnRgLCBgcm5fbGFzdGApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGluc2VydGVkIGludG8gdGhlIHRyZWUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGluY29uc2lzdGVudCBpbnRlcm5hbCBzdGF0ZSwgbWVtb3J5IGxlYWtzLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIHJhbmdlIHRyZWUsIGFsbCBvZiB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzk0N2RiNzk0MzFmNGRmYjA5MGM5OGM0YmE3N2NkYmVmNDRjMzExOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE1OjM3OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jCmluZGV4IDU1NWVlMjUzMWVmOTguLmQ1N2EwYjYxNzUyNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FyZW5hLmMKQEAgLTc2Niw3ICYjNDM7NzY2LDkgQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQKIAlicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpOwogCXJldHVybiBjbGVhcl9sbzMyKGFyZW5hLSZndDt1c2VyX3ZtX3N0YXJ0KSAmIzQzOyB1YWRkcjMyOwogb3V0OgotCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTsKJiM0MzsJaWYgKHJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKSkKJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDticGZfYXJlbmE6IGZhaWxlZCB0byByZXN0b3JlIGZyZWUgcmFuZ2UgJWxkJiM0MzslbGQgYWZ0ZXIgcGFydGlhbCBhbGxvY1xuJiMzNDssCiYjNDM7CQkJCSAgICBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTsKIAlyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKTsKIAlpZiAobWFwcGVkKSB7CiAJCWZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCAmIzQzOyB1YWRkcjMyLCBtYXBwZWQgJmx0OyZsdDsgUEFHRV9TSElGVCk7CkBAIC04ODEsNyAmIzQzOzg4MywxMiBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LAogCWlmIChyZXQpCiAJCWdvdG8gZGVmZXI7CiAKLQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKJiM0MzsJcmV0ID0gcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwomIzQzOwkJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJaW5pdF9sbGlzdF9oZWFkKCZhbXA7ZnJlZV9wYWdlcyk7CiAJY2RhdGEuYXJlbmEgPSBhcmVuYTsKQEAgLTEwMDQsMTEgJiM0MzsxMDExLDE4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJa2FkZHIgPSBhcmVuYV92bV9zdGFydCAmIzQzOyBzLSZndDt1YWRkcjsKIAkJcGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCBzLSZndDt1YWRkcik7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXQKJiM0MzsJCSAqIGlmIHRoZSByYW5nZSB0cmVlIHVwZGF0ZSBmYWlscyB3ZSBsZWF2ZSB0aGUgUFRFcwomIzQzOwkJICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzCiYjNDM7CQkgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiwgcGFnZV9jbnQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQkvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHBhZ2VzIGluIGZyZWVfcGFnZXMgbGxpc3QgKi8KIAkJYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBwYWdlX2NudCAmbHQ7Jmx0OyBQQUdFX1NISUZULAogCQkJCQkgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCAmYW1wO2NkYXRhKTsKLQotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKIAl9CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmMKaW5kZXggMmYyODg4NmYzZmY3NS4uNTQwNTViMWZlNTQxMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmMKQEAgLTE0MywxNiAmIzQzOzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIAkJaWYgKHJuLSZndDtybl9zdGFydCAmbHQ7IHN0YXJ0ICZhbXA7JmFtcDsgcm4tJmd0O3JuX2xhc3QgJmd0OyBsYXN0KSB7CiAJCQl1MzIgb2xkX2xhc3QgPSBybi0mZ3Q7cm5fbGFzdDsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogUHJlLWFsbG9jYXRlIHRoZSByaWdodC1oYWxmIG5vZGUgYmVmb3JlIG1vZGlmeWluZwomIzQzOwkJCSAqIHRoZSB0cmVlLiBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlIHJldHVybiAtRU5PTUVNCiYjNDM7CQkJICogd2l0aG91dCBhbHRlcmluZyB0aGUgcmFuZ2UgdHJlZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQluZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLAomIzQzOwkJCQkJCV9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7CiYjNDM7CQkJaWYgKCFuZXdfcm4pCiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwogCQkJLyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovCiAJCQlyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTsKIAkJCXJuLSZndDtybl9sYXN0ID0gc3RhcnQgLSAxOwogCQkJcmFuZ2VfaXRfaW5zZXJ0KHJuLCBydCk7CiAKLQkJCS8qIEFkZCBhIHJhbmdlICovCi0JCQluZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULAotCQkJCQkJTlVNQV9OT19OT0RFKTsKLQkJCWlmICghbmV3X3JuKQotCQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJCS8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovCiAJCQluZXdfcm4tJmd0O3JuX3N0YXJ0ID0gbGFzdCAmIzQzOyAxOwogCQkJbmV3X3JuLSZndDtybl9sYXN0ID0gb2xkX2xhc3Q7CiAJCQlyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7CkBAIC0xOTMsNiAmIzQzOzE5OSw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIHsKIAl1MzIgbGFzdCA9IHN0YXJ0ICYjNDM7IGxlbiAtIDE7CiYjNDM7CXN0cnVjdCByYW5nZV9ub2RlICpuZXdfcm4gPSBOVUxMOwogCXN0cnVjdCByYW5nZV9ub2RlICpyaWdodDsKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbGVmdDsKIAlpbnQgZXJyOwpAQCAtMjAyLDIwICYjNDM7MjA5LDQwIEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIAlpZiAobGVmdCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX3N0YXJ0ICZsdDs9IHN0YXJ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fbGFzdCAmZ3Q7PSBsYXN0KQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlCiYjNDM7CSAqIHJhbmdlIG9uIGVpdGhlciBzaWRlLiAgVGhpcyBpcyBrbm93biBiZWZvcmUgY2xlYXJpbmc6IGFueSByYW5nZQomIzQzOwkgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCAmIzQzOyAxIHN1cnZpdmVzIHRoZSBjbGVhciBhcyBhbiBhZGphY2VudAomIzQzOwkgKiBwaWVjZS4gIEFsbG9jYXRlIG9ubHkgaW4gdGhhdCBjYXNlLCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlLCBzbwomIzQzOwkgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWQKJiM0MzsJICovCiYjNDM7CWxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7CiYjNDM7CXJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpOwomIzQzOwlpZiAoIWxlZnQgJmFtcDsmYW1wOyAhcmlnaHQpIHsKJiM0MzsJCW5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksCiYjNDM7CQkJCQlfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpOwomIzQzOwkJaWYgKCFuZXdfcm4pCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAkvKiBDbGVhciBvdXQgZXZlcnl0aGluZyBpbiB0aGUgcmFuZ2Ugd2Ugd2FudCB0byBzZXQuICovCiAJZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfbmV3OwogCiAJLyogRG8gd2UgaGF2ZSBhIGxlZnQtYWRqYWNlbnQgcmFuZ2UgPyAqLwogCWxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7Ci0JaWYgKGxlZnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9sYXN0ICYjNDM7IDEgIT0gc3RhcnQpCi0JCXJldHVybiAtRUZBVUxUOwomIzQzOwlpZiAobGVmdCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX2xhc3QgJiM0MzsgMSAhPSBzdGFydCkgewomIzQzOwkJZXJyID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfbmV3OwomIzQzOwl9CiAKIAkvKiBEbyB3ZSBoYXZlIGEgcmlnaHQtYWRqYWNlbnQgcmFuZ2UgPyAqLwogCXJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpOwotCWlmIChyaWdodCAmYW1wOyZhbXA7IHJpZ2h0LSZndDtybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpCi0JCXJldHVybiAtRUZBVUxUOwomIzQzOwlpZiAocmlnaHQgJmFtcDsmYW1wOyByaWdodC0mZ3Q7cm5fc3RhcnQgIT0gbGFzdCAmIzQzOyAxKSB7CiYjNDM7CQllcnIgPSAtRUZBVUxUOwomIzQzOwkJZ290byBvdXRfZnJlZV9uZXc7CiYjNDM7CX0KIAogCWlmIChsZWZ0ICZhbXA7JmFtcDsgcmlnaHQpIHsKIAkJLyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi8KQEAgLTIzNSwxNCAmIzQzOzI2MiwxNiBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJCXJpZ2h0LSZndDtybl9zdGFydCA9IHN0YXJ0OwogCQlyYW5nZV9pdF9pbnNlcnQocmlnaHQsIHJ0KTsKIAl9IGVsc2UgewotCQlsZWZ0ID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTsKLQkJaWYgKCFsZWZ0KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWxlZnQtJmd0O3JuX3N0YXJ0ID0gc3RhcnQ7Ci0JCWxlZnQtJmd0O3JuX2xhc3QgPSBsYXN0OwotCQlyYW5nZV9pdF9pbnNlcnQobGVmdCwgcnQpOwomIzQzOwkJLyogTm8gYWRqYWNlbnQgcmFuZ2VzOyB1c2UgdGhlIHByZS1hbGxvY2F0ZWQgbm9kZSAqLwomIzQzOwkJbmV3X3JuLSZndDtybl9zdGFydCA9IHN0YXJ0OwomIzQzOwkJbmV3X3JuLSZndDtybl9sYXN0ID0gbGFzdDsKJiM0MzsJCXJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTsKIAl9CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X2ZyZWVfbmV3OgomIzQzOwlrZnJlZV9ub2xvY2sobmV3X3JuKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MAoJCQkJCQkJb3V0cHV0OiAyNDIKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZm9jdXMgaGVyZSBpcyBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gdGhlIGByYW5nZV90cmVlX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHByZS1hbGxvY2F0aW5nIGEgYHJhbmdlX25vZGVgIHdpdGhpbiBgcmFuZ2VfdHJlZV9zZXRgIGJlZm9yZSBhY3R1YWxseSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUuIFRoaXMgaXMgc21hcnQsIGFzIGl0IGVuc3VyZXMgdGhhdCBpZiB0aGUgYWxsb2NhdGlvbiAobGlrZWx5IGEgYGttYWxsb2NgIHZhcmlhbnQpIGZhaWxzLCB0aGUgdHJlZSBpc24mIzM5O3QgbGVmdCBpbiBhIHBhcnRpYWxseSBtb2RpZmllZCwgaW5jb25zaXN0ZW50IHN0YXRlLiBUaGUgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCBmdW5jdGlvbnMgbm93IGFsc28gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgLCB3aGljaCBtYWtlcyBzZW5zZS4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCBhZnRlciBsb29raW5nIGNsb3NlbHksIGl0IGRvZXNuJiMzOTt0IHNlZW0gbGlrZSB0aGV5IGRvLiBUaGlzIGlzIGp1c3QgYWJvdXQgaGFuZGxpbmcgdGhlIGZhaWx1cmUgb2YgYSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYSByYW5nZSB0cmVlLCB3aGljaCB0cmFja3MgZnJlZSBhbmQgdXNlZCBtZW1vcnkgcmFuZ2VzLCBub3Qgc29tZSBuZXcgc3RydWN0dXJlIHRoYXQmIzM5O3MgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIGByYW5nZV90cmVlX3NldGAgZmFpbHMsIGl0IHNpbXBseSByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIHRyZWUgcmVtYWlucyB1bnRvdWNoZWQuIE5vIGRhdGEgaXMgbGVha2VkLgoKVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBtZW1vcnkgbGVha3Mgb3IgaW5jb25zaXN0ZW5jaWVzIHRoYXQgY291bGQgaGFwcGVuIGlmIHRoZSBga21hbGxvY19ub2xvY2tgIGNhbGwgaW4gYHJhbmdlX3RyZWVfc2V0YCBmYWlscy4gVGhpbmdzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayBjb3VsZCBhcmlzZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQgYnV0IHRoZW4gdGhlIHRyZWUgd2FzIHBhcnRpYWxseSBtb2RpZmllZC4gS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZyBtaWdodCBmbGFnIHRoZSBzdGF0ZSBpbmNvbnNpc3RlbmN5LCBidXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYWxsb2NhdGlvbi4gYHJhbmdlX3RyZWVfc2V0YCBpcyB1c2luZyBga21hbGxvY19ub2xvY2tgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhpcyBpcyBhIEJQRi1zcGVjaWZpYyB3cmFwcGVyIG9yIG5vdC4gT2theSwgaXQmIzM5O3MganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBga21hbGxvY2AgZmFtaWx5LiBSZWdhcmRsZXNzLCBgbmV3X3JuYCwgdGhlIGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAsIGhhcyBpdHMgYHJuX3N0YXJ0YCBhbmQgYHJuX2xhc3RgIGZpZWxkcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpdCYjMzk7cyBpbnNlcnRlZC4gU28sIHdlIGhhdmU6CgpgYGBjCgkJbmV3X3JuLSZndDtybl9zdGFydCA9IHN0YXJ0OwoJCW5ld19ybi0mZ3Q7cm5fbGFzdCA9IGxhc3Q7CgkJcmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpOwpgYGAKCk5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBiZWluZyByZWFkIGZyb20uIE5vIHByb2JsZW0uCgpTbywgSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcm9idXN0IGVycm9yIGhhbmRsaW5nIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiB0aGUgQlBGIGFyZW5hJiMzOTtzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyBhbmQgaW1wcm92aW5nIHN0YWJpbGl0eS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzbiYjMzk7dCBsZWFrIGFueSBpbmZvcm1hdGlvbiwgYW5kIGRvZXNuJiMzOTt0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUga2luZHMgb2YgYnVncyB0aGF0IGl0JiMzOTtzIHByZXZlbnRpbmcsIGxpa2UgbWVtb3J5IGxlYWtzLCBpbmNvbnNpc3RlbmNpZXMsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgYXJlIHRoaW5ncyB0aGF0IEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgc2hvdWxkIGNhdGNoLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSByZWFzb25pbmcgaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBwcmUtYWxsb2NhdGVzIGEgYHJhbmdlX25vZGVgIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUgdG8gcHJldmVudCBsZWF2aW5nIHRoZSB0cmVlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyAoZS5nLiwgcmV0dXJuaW5nIGAtRU5PTUVNYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJhbmdlX3RyZWVfc2V0YCBpbiBgYXJlbmEuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIEJQRiBhcmVuYSYjMzk7cyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IHByZS1hbGxvY2F0ZXMgYSBgcmFuZ2Vfbm9kZWAgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIHRyZWUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIChlLmcuLCByZXR1cm5pbmcgYC1FTk9NRU1gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgIGluIGBhcmVuYS5jYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgYWxsb2NhdGVkIGByYW5nZV9ub2RlYCBoYXMgaXRzIGZpZWxkcyAoYHJuX3N0YXJ0YCwgYHJuX2xhc3RgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBpbmNvbnNpc3RlbnQgaW50ZXJuYWwgc3RhdGUsIG1lbW9yeSBsZWFrcywgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCByYW5nZSB0cmVlLCBhbGwgb2Ygd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjE4LjgwNjIyNTU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NzczMTAzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IHByZS1hbGxvY2F0ZXMgYSBgcmFuZ2Vfbm9kZWAgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIHRyZWUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIChlLmcuLCByZXR1cm5pbmcgYC1FTk9NRU1gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgIGluIGBhcmVuYS5jYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgIGhhcyBpdHMgZmllbGRzIChgcm5fc3RhcnRgLCBgcm5fbGFzdGApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGluc2VydGVkIGludG8gdGhlIHRyZWUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGluY29uc2lzdGVudCBpbnRlcm5hbCBzdGF0ZSwgbWVtb3J5IGxlYWtzLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIHJhbmdlIHRyZWUsIGFsbCBvZiB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzoxOC44MDYyMzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ2NDQ5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOTQ3ZGI3OTQzMWY0ZGZiMDkwYzk4YzRiYTc3Y2RiZWY0NGMzMTE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjM3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbmluZGV4IDU1NWVlMjUzMWVmOTguLmQ1N2EwYjYxNzUyNTggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXFxuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuQEAgLTc2Niw3ICs3NjYsOSBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxcbiBcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbiBcXHRyZXR1cm4gY2xlYXJfbG8zMihhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgKyB1YWRkcjMyO1xcbiBvdXQ6XFxuLVxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmICsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7XFxuK1xcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpKVxcbitcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJicGZfYXJlbmE6IGZhaWxlZCB0byByZXN0b3JlIGZyZWUgcmFuZ2UgJWxkKyVsZCBhZnRlciBwYXJ0aWFsIGFsbG9jXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKG1hcHBlZCkge1xcbiBcXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuQEAgLTg4MSw3ICs4ODMsMTIgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBkZWZlcjtcXG4gXFxuLVxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxuK1xcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNmZyZWVfcGFnZXMpO1xcbiBcXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xcbkBAIC0xMDA0LDExICsxMDExLDE4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0a2FkZHIgPSBhcmVuYV92bV9zdGFydCArIHMtXFx1MDAzZXVhZGRyO1xcbiBcXHRcXHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtXFx1MDAzZXVhZGRyKTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1hcmsgdGhlIHJhbmdlIGFzIGZyZWUgYmVmb3JlIGNsZWFyaW5nIFBURXMgc28gdGhhdFxcbitcXHRcXHQgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXNcXG4rXFx0XFx0ICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzXFxuK1xcdFxcdCAqIGFyZSBmcmVlZCBidXQgdGhlIGFyZW5hIGZyZWUgdHJlZSBkb2VzIG5vdCB0cmFjayB0aGVtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovXFxuIFxcdFxcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcXHUwMDI2Y2RhdGEpO1xcbi1cXG4tXFx0XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG4gXFx0fVxcbiBcXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xcbmluZGV4IDJmMjg4ODZmM2ZmNzUuLjU0MDU1YjFmZTU0MTIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcXG4rKysgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xcbkBAIC0xNDMsMTYgKzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4gXFx0XFx0aWYgKHJuLVxcdTAwM2Vybl9zdGFydCBcXHUwMDNjIHN0YXJ0IFxcdTAwMjZcXHUwMDI2IHJuLVxcdTAwM2Vybl9sYXN0IFxcdTAwM2UgbGFzdCkge1xcbiBcXHRcXHRcXHR1MzIgb2xkX2xhc3QgPSBybi1cXHUwMDNlcm5fbGFzdDtcXG4gXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcXG4rXFx0XFx0XFx0ICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU1cXG4rXFx0XFx0XFx0ICogd2l0aG91dCBhbHRlcmluZyB0aGUgcmFuZ2UgdHJlZS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XFxuK1xcdFxcdFxcdGlmICghbmV3X3JuKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuIFxcdFxcdFxcdC8qIE92ZXJsYXBzIHdpdGggdGhlIGVudGlyZSBjbGVhcmluZyByYW5nZSAqL1xcbiBcXHRcXHRcXHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcXG4gXFx0XFx0XFx0cm4tXFx1MDAzZXJuX2xhc3QgPSBzdGFydCAtIDE7XFxuIFxcdFxcdFxcdHJhbmdlX2l0X2luc2VydChybiwgcnQpO1xcbiBcXG4tXFx0XFx0XFx0LyogQWRkIGEgcmFuZ2UgKi9cXG4tXFx0XFx0XFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0TlVNQV9OT19OT0RFKTtcXG4tXFx0XFx0XFx0aWYgKCFuZXdfcm4pXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHQvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqL1xcbiBcXHRcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX3N0YXJ0ID0gbGFzdCArIDE7XFxuIFxcdFxcdFxcdG5ld19ybi1cXHUwMDNlcm5fbGFzdCA9IG9sZF9sYXN0O1xcbiBcXHRcXHRcXHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XFxuQEAgLTE5Myw2ICsxOTksNyBAQCBpbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4ge1xcbiBcXHR1MzIgbGFzdCA9IHN0YXJ0ICsgbGVuIC0gMTtcXG4rXFx0c3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7XFxuIFxcdHN0cnVjdCByYW5nZV9ub2RlICpyaWdodDtcXG4gXFx0c3RydWN0IHJhbmdlX25vZGUgKmxlZnQ7XFxuIFxcdGludCBlcnI7XFxuQEAgLTIwMiwyMCArMjA5LDQwIEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4gXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fc3RhcnQgXFx1MDAzYz0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fbGFzdCBcXHUwMDNlPSBsYXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEEgbmV3IG5vZGUgaXMgbmVlZGVkIG9ubHkgd2hlbiB0aGUgcmFuZ2UgaGFzIG5vIGFkamFjZW50IGZyZWVcXG4rXFx0ICogcmFuZ2Ugb24gZWl0aGVyIHNpZGUuICBUaGlzIGlzIGtub3duIGJlZm9yZSBjbGVhcmluZzogYW55IHJhbmdlXFxuK1xcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnRcXG4rXFx0ICogcGllY2UuICBBbGxvY2F0ZSBvbmx5IGluIHRoYXQgY2FzZSwgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSwgc29cXG4rXFx0ICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkXFxuK1xcdCAqL1xcbitcXHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xcbitcXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XFxuK1xcdGlmICghbGVmdCBcXHUwMDI2XFx1MDAyNiAhcmlnaHQpIHtcXG4rXFx0XFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0XFx0X19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcXG4rXFx0XFx0aWYgKCFuZXdfcm4pXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBDbGVhciBvdXQgZXZlcnl0aGluZyBpbiB0aGUgcmFuZ2Ugd2Ugd2FudCB0byBzZXQuICovXFxuIFxcdGVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlX25ldztcXG4gXFxuIFxcdC8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi9cXG4gXFx0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcXG4tXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRpZiAobGVmdCBcXHUwMDI2XFx1MDAyNiBsZWZ0LVxcdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydCkge1xcbitcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlX25ldztcXG4rXFx0fVxcbiBcXG4gXFx0LyogRG8gd2UgaGF2ZSBhIHJpZ2h0LWFkamFjZW50IHJhbmdlID8gKi9cXG4gXFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICsgMSwgbGFzdCArIDEpO1xcbi1cXHRpZiAocmlnaHQgXFx1MDAyNlxcdTAwMjYgcmlnaHQtXFx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKHJpZ2h0IFxcdTAwMjZcXHUwMDI2IHJpZ2h0LVxcdTAwM2Vybl9zdGFydCAhPSBsYXN0ICsgMSkge1xcbitcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlX25ldztcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgcmlnaHQpIHtcXG4gXFx0XFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cXG5AQCAtMjM1LDE0ICsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbiBcXHRcXHRyaWdodC1cXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcXG4gXFx0XFx0cmFuZ2VfaXRfaW5zZXJ0KHJpZ2h0LCBydCk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xcbi1cXHRcXHRpZiAoIWxlZnQpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHRsZWZ0LVxcdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xcbi1cXHRcXHRsZWZ0LVxcdTAwM2Vybl9sYXN0ID0gbGFzdDtcXG4tXFx0XFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcXG4rXFx0XFx0LyogTm8gYWRqYWNlbnQgcmFuZ2VzOyB1c2UgdGhlIHByZS1hbGxvY2F0ZWQgbm9kZSAqL1xcbitcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdG5ld19ybi1cXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XFxuK1xcdFxcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mcmVlX25ldzpcXG4rXFx0a2ZyZWVfbm9sb2NrKG5ld19ybik7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6MTkuMjIxNDk1OTU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ5NzAxMTQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTQ3ZGI3OTQzMWY0ZGZiMDkwYzk4YzRiYTc3Y2RiZWY0NGMzMTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTU6Mzc6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDU1NWVlMjUzMWVmOTguLmQ1N2EwYjYxNzUyNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTc2Niw3ICs3NjYsOSBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICsgdWFkZHIzMjtcbiBvdXQ6XG4tXHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcbitcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKSlcbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcImJwZl9hcmVuYTogZmFpbGVkIHRvIHJlc3RvcmUgZnJlZSByYW5nZSAlbGQrJWxkIGFmdGVyIHBhcnRpYWwgYWxsb2NcXG5cIixcbitcdFx0XHRcdCAgICBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4gXHRpZiAobWFwcGVkKSB7XG4gXHRcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5AQCAtODgxLDcgKzg4MywxMiBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWZlcjtcbiBcbi1cdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuK1x0cmV0ID0gcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuK1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4gXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuQEAgLTEwMDQsMTEgKzEwMTEsMTggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRrYWRkciA9IGFyZW5hX3ZtX3N0YXJ0ICsgcy1cdTAwM2V1YWRkcjtcbiBcdFx0cGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCBzLVx1MDAzZXVhZGRyKTtcbiBcbitcdFx0LypcbitcdFx0ICogTWFyayB0aGUgcmFuZ2UgYXMgZnJlZSBiZWZvcmUgY2xlYXJpbmcgUFRFcyBzbyB0aGF0XG4rXHRcdCAqIGlmIHRoZSByYW5nZSB0cmVlIHVwZGF0ZSBmYWlscyB3ZSBsZWF2ZSB0aGUgUFRFc1xuK1x0XHQgKiBpbnRhY3QsIGF2b2lkaW5nIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUgd2hlcmUgcGFnZXNcbitcdFx0ICogYXJlIGZyZWVkIGJ1dCB0aGUgYXJlbmEgZnJlZSB0cmVlIGRvZXMgbm90IHRyYWNrIHRoZW0uXG4rXHRcdCAqL1xuK1x0XHRpZiAocmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3QgcGFnZXMgaW4gZnJlZV9wYWdlcyBsbGlzdCAqL1xuIFx0XHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXHUwMDI2Y2RhdGEpO1xuLVxuLVx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbiBcdH1cbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbmluZGV4IDJmMjg4ODZmM2ZmNzUuLjU0MDU1YjFmZTU0MTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuKysrIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbkBAIC0xNDMsMTYgKzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdFx0aWYgKHJuLVx1MDAzZXJuX3N0YXJ0IFx1MDAzYyBzdGFydCBcdTAwMjZcdTAwMjYgcm4tXHUwMDNlcm5fbGFzdCBcdTAwM2UgbGFzdCkge1xuIFx0XHRcdHUzMiBvbGRfbGFzdCA9IHJuLVx1MDAzZXJuX2xhc3Q7XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nXG4rXHRcdFx0ICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU1cbitcdFx0XHQgKiB3aXRob3V0IGFsdGVyaW5nIHRoZSByYW5nZSB0cmVlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4rXHRcdFx0XHRcdFx0X19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcbitcdFx0XHRpZiAoIW5ld19ybilcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuIFx0XHRcdC8qIE92ZXJsYXBzIHdpdGggdGhlIGVudGlyZSBjbGVhcmluZyByYW5nZSAqL1xuIFx0XHRcdHJhbmdlX2l0X3JlbW92ZShybiwgcnQpO1xuIFx0XHRcdHJuLVx1MDAzZXJuX2xhc3QgPSBzdGFydCAtIDE7XG4gXHRcdFx0cmFuZ2VfaXRfaW5zZXJ0KHJuLCBydCk7XG4gXG4tXHRcdFx0LyogQWRkIGEgcmFuZ2UgKi9cbi1cdFx0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULFxuLVx0XHRcdFx0XHRcdE5VTUFfTk9fTk9ERSk7XG4tXHRcdFx0aWYgKCFuZXdfcm4pXG4tXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHQvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqL1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IGxhc3QgKyAxO1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9sYXN0ID0gb2xkX2xhc3Q7XG4gXHRcdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuQEAgLTE5Myw2ICsxOTksNyBAQCBpbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIHtcbiBcdHUzMiBsYXN0ID0gc3RhcnQgKyBsZW4gLSAxO1xuK1x0c3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbGVmdDtcbiBcdGludCBlcnI7XG5AQCAtMjAyLDIwICsyMDksNDAgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fc3RhcnQgXHUwMDNjPSBzdGFydCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0IFx1MDAzZT0gbGFzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKlxuK1x0ICogQSBuZXcgbm9kZSBpcyBuZWVkZWQgb25seSB3aGVuIHRoZSByYW5nZSBoYXMgbm8gYWRqYWNlbnQgZnJlZVxuK1x0ICogcmFuZ2Ugb24gZWl0aGVyIHNpZGUuICBUaGlzIGlzIGtub3duIGJlZm9yZSBjbGVhcmluZzogYW55IHJhbmdlXG4rXHQgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCArIDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50XG4rXHQgKiBwaWVjZS4gIEFsbG9jYXRlIG9ubHkgaW4gdGhhdCBjYXNlLCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlLCBzb1xuK1x0ICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkXG4rXHQgKi9cbitcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XG4rXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XG4rXHRpZiAoIWxlZnQgXHUwMDI2XHUwMDI2ICFyaWdodCkge1xuK1x0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxuK1x0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuK1x0XHRpZiAoIW5ld19ybilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbiBcdC8qIENsZWFyIG91dCBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3ZSB3YW50IHRvIHNldC4gKi9cbiBcdGVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xuLVx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpIHtcbitcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4rXHR9XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgcmlnaHQtYWRqYWNlbnQgcmFuZ2UgPyAqL1xuIFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICsgMSwgbGFzdCArIDEpO1xuLVx0aWYgKHJpZ2h0IFx1MDAyNlx1MDAyNiByaWdodC1cdTAwM2Vybl9zdGFydCAhPSBsYXN0ICsgMSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKSB7XG4rXHRcdGVyciA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gb3V0X2ZyZWVfbmV3O1xuK1x0fVxuIFxuIFx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IHJpZ2h0KSB7XG4gXHRcdC8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovXG5AQCAtMjM1LDE0ICsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0XHRyaWdodC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuIFx0XHRyYW5nZV9pdF9pbnNlcnQocmlnaHQsIHJ0KTtcbiBcdH0gZWxzZSB7XG4tXHRcdGxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuLVx0XHRpZiAoIWxlZnQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdGxlZnQtXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbi1cdFx0bGVmdC1cdTAwM2Vybl9sYXN0ID0gbGFzdDtcbi1cdFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcbitcdFx0LyogTm8gYWRqYWNlbnQgcmFuZ2VzOyB1c2UgdGhlIHByZS1hbGxvY2F0ZWQgbm9kZSAqL1xuK1x0XHRuZXdfcm4tXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbitcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuK1x0XHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbitcbitvdXRfZnJlZV9uZXc6XG4rXHRrZnJlZV9ub2xvY2sobmV3X3JuKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjE5LjIyMTQ5NzA0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTI0MDk0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEFyZW5hIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jYC4gSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBlcnJvciBoYW5kbGluZyB3aXRoIHRoZSBgcmFuZ2VfdHJlZV9zZXRgIGNhbGxzIHdpdGhpbiBgYXJlbmEuY2AsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCdzIGFib3V0IHByZS1hbGxvY2F0aW5nIG1lbW9yeSBpbiBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgaW4gYHJhbmdlX3RyZWUuY2AgdG8gcHJldmVudCBpbi1wbGFjZSBtb2RpZmljYXRpb25zIGlmIGFsbG9jYXRpb24gZmFpbHMsIHJldHVybmluZyBgLUVOT01FTWAgaW5zdGVhZC4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gYSBjb2RlcGF0aCB3b3J0aCBmdXp6aW5nPyBUaGUgQlBGIGFyZW5hIGlzIGEgcmVsYXRpdmVseSByZWNlbnQgYWRkaXRpb24sIHdoaWNoIGlzIHByb21pc2luZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSBzaW5jZSBpdCBtYXkgYmUgbGVzcyB3ZWxsLXRlc3RlZC4gR2l2ZW4gdGhpcyBwcmUtYWxsb2NhdGlvbiBzdHJhdGVneSwgZnV6emluZyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGluIHRoZSBCUEYgYXJlbmEgbG9va3MgbGlrZSBhIGdvb2QgdGFyZ2V0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSdsbCB0YWtlIGEgbG9vayBhdCBga2VybmVsL2JwZi9hcmVuYS5jYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuIEknbGwgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QuIFRoZW4gSSdsbCBzaGlmdCBvdmVyIHRvIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AgdG8gbG9vayBhdCBob3cgYHJhbmdlX3RyZWVfY2xlYXJgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgIGNoYW5nZWQsIGZvY3VzaW5nIG9uIGhvdyB0aGUgcHJlLWFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEJQRiBhcmVuYSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGVyZSdzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyLiBJJ2xsIHNlYXJjaCBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgZm9yIHNvbWV0aGluZyBsaWtlIGBicGZfYXJlbmFgIG9yIGBCUEZfQVJFTkFgIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LCBzbyB0aGF0IEkgdW5kZXJzdGFuZCBob3cgdG8gcmVwcm9kdWNlIHRoZSBjaGFuZ2VzIGluIG15IHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzoyNS43NzM5MDk1OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MzUyOTI2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9BUkVOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6MjcuNzE3NDQ1NDY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzOTIyNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkJQRiBTeXNjYWxsIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBzdGFydCB0ZWFyaW5nIGFwYXJ0IHRoZSBlbnRpcmUga2VybmVsLCBjb3VsZCB0aGlzIGJlIGFzIHNpbXBsZSBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBTcGVjaWZpY2FsbHksIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBkZXBlbmRlbnQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGA/IFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBpZiB3ZSdyZSBzZWVpbmcgc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBMZXQgbWUganVzdCBxdWlja2x5IGp1bXAgb3ZlciB0byB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBjb25maXJtIHdoZXRoZXIgdGhlIHJlbGV2YW50IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhhdCBmbGFnLiBUaGF0IE1ha2VmaWxlIHNob3VsZCBwcm92aWRlIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBwbGF5cyBpbnRvIHRoZSBlcXVhdGlvbi4gSXQncyB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpc3N1ZSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0gb3Igc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQsIGxpa2UgYSBtaXNzaW5nIGluY2x1ZGUgb3IgYSBtb3JlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3kuIENoZWNraW5nIHRoZSBNYWtlZmlsZSB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzozMS43NTY2NzMzODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDc2ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjMxLjg2Mjc1NjMzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjcwMDM1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBBcmVuYSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gdGhlIGtlcm5lbCBjb25maWcgaXMgc2V0IHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTU1VYCwgYW5kIGBDT05GSUdfNjRCSVRgIGFsbCBlbmFibGVkLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgYSA2NC1iaXQgTU1VIGFyY2hpdGVjdHVyZSB3aXRoIEJQRiBzeXN0ZW0gY2FsbHMgYWN0aXZhdGVkLiBHb29kLCBnb29kLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBCUEYgYXJlbmEgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIExldCdzIGRpZyBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBBaCwgdGhlcmUgdGhleSBhcmU6IGBhcmVuYV9hbGxvY19wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYC4gVGhleSdyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGVzZSBhcmUgKmFjdHVhbGx5KiB1c2VkLiBUaW1lIHRvIHRyYWNlIHRob3NlIGNhbGwgc2l0ZXMgYW5kIHNlZSBob3cgdGhlIEJQRiBhcmVuYSBpcyBiZWluZyBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjM1LjQ4OTc2MjMxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkwNzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA6ICogYnBmIHByb2dyYW0gY2FuIGFsbG9jYXRlIGEgcGFnZSB2aWEgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkga2Z1bmNcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEtICogd2hpY2ggd2lsbCBpbnNlcnQgaXQgaW50byBrZXJuZWwgdm1fYXJlYS5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02NTk9c3RhdGljIHU2NCBjbGVhcl9sbzMyKHU2NCB2YWwpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY3LSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2Njg6c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjktXFx0XFx0XFx0ICAgICAgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9ODQ5PXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk0My0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5NDQ6ICogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzIGZyb20gYWRkaW5nIHBhZ2VzIHRvIHRoaXMgcmFuZ2UuXFxua2VybmVsL2JwZi9hcmVuYS5jLTk0NS0gKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMDYxPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2Mi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2NC1cXHRcXHRcXHRcXHRcXHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzI6XFx0cmV0dXJuICh2b2lkICopYXJlbmFfYWxsb2NfcGFnZXMoYXJlbmEsIChsb25nKWFkZHJfX2lnbiwgcGFnZV9jbnQsIG5vZGVfaWQsIHRydWUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDczLX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3NC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NTp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc2LVxcdFxcdFxcdFxcdFxcdCAgaW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDgzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg0OlxcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCBmYWxzZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtfVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg3OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4OC1cXHRcXHRcXHRcXHQgICAgICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwOTY6XFx0cmV0dXJuICh2b2lkICopYXJlbmFfYWxsb2NfcGFnZXMoYXJlbmEsIChsb25nKWFkZHJfX2lnbiwgcGFnZV9jbnQsIG5vZGVfaWQsIHRydWUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTM0PUJURl9LRlVOQ1NfU1RBUlQoYXJlbmFfa2Z1bmNzKVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTM1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzozNS41MzQ2NzU4ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI3NDk3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgQXJlbmEgQWxsb2NhdGlvbiBhbmQgUmFuZ2UgVHJlZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2AsIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCB0aGVpciB2YXJpYW50cyBhcmUgYWxsIGVmZmVjdGl2ZWx5IHdyYXBwZXIgZnVuY3Rpb25zLiBUaGV5J3JlIGtmdW5jcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHRoYXQgYXJlIHVsdGltYXRlbHkgY2FsbGluZyBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AuIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IHRoZXJlIGFzIGdyb3VuZGJyZWFraW5nLCBqdXN0IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mICp3aHkqIHRoZXkncmUgdXNpbmcgdGhlc2Ugd3JhcHBlciBrZnVuY3MuIEFyZSB0aGV5IGFkZGluZyBhbnkgQlBGLXNwZWNpZmljIHNlbWFudGljcz9cblxuVGhlIHJlYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIG1lbnRpb24gb2YgbW9kaWZpY2F0aW9ucyB0byBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAuIFJhbmdlIHRyZWVzIGFyZSBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlIGZvciB0cmFja2luZyBtZW1vcnksIHNvIGNoYW5nZXMgdGhlcmUgYXJlIGRlZmluaXRlbHkgd29ydGggYSBkZWVwZXIgbG9vay4gSSdsbCBoZWFkIG92ZXIgdG8gYHJhbmdlX3RyZWUuY2AgYW5kIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRob3NlIGNoYW5nZXMgb24gdGhlIG92ZXJhbGwgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNwZWNpZmljYWxseSBpdHMgaW50ZWdyYXRpb24gd2l0aCBCUEYuIFRoaXMgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3IgZXZlbiBhbiBhcmNoaXRlY3R1cmFsIHNoaWZ0IGluIGhvdyB0aGV5J3JlIGhhbmRsaW5nIG1lbW9yeSByYW5nZXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgY2hhbmdlZCB0byB0aGUgd2F5IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaXMgdHJhY2tlZC4gTGV04oCZcyBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6MzkuNTYyMTc2NjgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExNzExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYW5nZV90cmVlX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTMxOS1cXHRyYW5nZV90cmVlX2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcXHRlcnIgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCAwLCBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQ3OT1zdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MjItXFx0aWYgKHJldCkge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XFx0XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgdm1mLVxcdTAwM2VwZ29mZiwgMSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyNC1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyOC1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyOTpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTMwLVxcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE0LVxcdGlmICh1YWRkcikge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTU6XFx0XFx0cmV0ID0gaXNfcmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY4LW91dDpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY5OlxcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NzAtXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiYnBmX2FyZW5hOiBmYWlsZWQgdG8gcmVzdG9yZSBmcmVlIHJhbmdlICVsZCslbGQgYWZ0ZXIgcGFydGlhbCBhbGxvY1xcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtODg1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4ODY6XFx0cmV0ID0gcmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODg3LVxcdGlmIChyZXQpIHtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05NDY9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTY0LVxcdC8qIENhbm5vdCBndWFyZCBhbHJlYWR5IGFsbG9jYXRlZCBwYWdlcy4gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTY1OlxcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTk2Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTgwPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDE5LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDIwOlxcdFxcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDIxLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjYtICogQXQgaW5pdCB0aW1lOlxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjI3OiAqICAgcmFuZ2VfdHJlZV9zZXQocnQsIDAsIG1heCk7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjgtICogVGhlbjpcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTMyLSAqIHRvIGZpbmQgZnJlZSByYW5nZSBhbmQgbWFyayBzbG90cyBhcyBhbGxvY2F0ZWQgYW5kIGxhdGVyOlxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjMzOiAqICAgcmFuZ2VfdHJlZV9zZXQocnQsIHN0YXJ0LCBsZW4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTM0LSAqIHRvIG1hcmsgYXMgdW5hbGxvY2F0ZWQgYWZ0ZXIgdXNlLlxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM9MTM2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg1LS8qIElzIHRoZSB3aG9sZSByYW5nZSBzZXQgPyAqL1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE4NjppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg3LXtcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE5OC0vKiBTZXQgdGhlIHJhbmdlIGluIHRoaXMgcmFuZ2UgdHJlZSAqL1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE5OTppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjAwLXtcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oPTE2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxNzppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oOjE4OmludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmgtMTktczY0IHJhbmdlX3RyZWVfZmluZChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzozOS42MDcyOTk3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE1MDA4Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBBcmVuYSBNYXAgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJQRiBhcmVuYSBzdHVmZiwgYW5kIHRoZSBjb25uZWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyLiBUaGUgQlBGIGFyZW5hIGlzLCBvZiBjb3Vyc2UsIGEgQlBGIG1hcCB0eXBlLiBXaGF0IHJlYWxseSBnb3QgbXkgYXR0ZW50aW9uIGlzIGhvdyBgYXJlbmFfbWFwX2FsbG9jYCBjYWxscyBgcmFuZ2VfdHJlZV9zZXRgIHdpdGggdGhlIGBhcmVuYS1cdTAwM2VydGAgYW5kIGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzYC4gU28sIGNyZWF0aW5nIG9uZSBvZiB0aGVzZSBtYXBzIGlzIGRpcmVjdGx5IGdvaW5nIHRvIHRyaWdnZXIgdGhhdCBgcmFuZ2VfdHJlZV9zZXRgIGZ1bmN0aW9uLiBBbmQgaXQgZG9lc24ndCBzdG9wIHRoZXJlOyBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCB3aWxsIGZ1cnRoZXIgaW50ZXJhY3Qgd2l0aCB0aGF0IGByYW5nZV90cmVlX2NsZWFyYCBhbmQgYHJhbmdlX3RyZWVfc2V0YCwgbWFraW5nIHRoaXMgYSBsaWtlbHkgYXJlYSBmb3IgZnV6emluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgbWFwIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGF0IGxvb2tzIGxpa2UgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEZyb20gYSBxdWljayBnbGFuY2UsIEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBMZXQncyBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgZWxzZSB3ZSBtaWdodCBuZWVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE0NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzo0NC4xMjIzMTEyMzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg5ODM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzo0NC4xNjcyMTE0MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NTY4OTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGX1NZU0NBTEwgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB3YWl0IGEgbWludXRlLiBgQlBGX1NZU0NBTExgLi4uIGlzbid0IHRoYXQgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYD8gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEknZCBleHBlY3QgaXQgdG8gYmUgY2xvc2VyIHRvIHRoZSBjb3JlIEJQRiBpbXBsZW1lbnRhdGlvbi4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3JlbWVtYmVyaW5nIG9yIG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJvYmFibHkgYmVzdCB0byBnbyByaWdodCB0byB0aGUgc291cmNlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSAqZXhwZWN0KiB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlcmUgaXQncyAqcmVmZXJlbmNlZCogaWYgaXQncyBkZWZpbmVkIGVsc2V3aGVyZS4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIGhvb2sgd29ya3MgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNpbmNlIHRoZSBwbGFjZW1lbnQgc2VlbXMgb2RkLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjQ3Ljg2MjkwNDgxM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NTM2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6NDcuOTA3NjY0NjEyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzk4NTY4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkb3VibGUtY2hlY2tpbmcgdGhlIEJQRiBjb25maWd1cmF0aW9uLiBJIGtub3cgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IGRlZmluZWQgd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBHb29kLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBteSBjdXJyZW50IHRhc2suIEknbGwgcXVpY2tseSByZXZpc2l0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCByb2FkYmxvY2tzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzo1MS4wODc1MjQyOTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjUxLjEzNDU3MjI3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAzMTk5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTmVjZXNzYXJ5IEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVGhpcyBUYXNrKipcblxuUmlnaHQsIHNvIHRvIGdldCB0aGlzIHdvcmtpbmcsIEknbSBnb2luZyB0byBuZWVkIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAuIFByZXR0eSBzdGFuZGFyZCwgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2XzY0LCBidXQgYWx3YXlzIGdvb2QgdG8gY29uZmlybS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIGNhbid0IHByb2NlZWQgd2l0aG91dCB0aGF0LlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSdsbCB0YWtlIGEgbG9vayBhdCBga2VybmVsL2JwZi9hcmVuYS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHRoYW4gdG8gY2hhc2UgZG93biBhIG1pc3NpbmcgY29uZmlnIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6NTQuODM3Nzc0NTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM4ODExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjU0Ljg4MTE3MDI1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE3NjgyNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIE92ZXJyaWRlcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMsIGFuZCB0aGUgaW5pdGlhbCBjaGVjayBvZiBgYXJlbmEuY2AgeWllbGRlZCBubyBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhhdCdzIGdvb2QsIGtlZXBzIHRoaW5ncyBzaW1wbGUuIE5vdywgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBzdWJ0bGUgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyBhcmVhIG9mIHRoZSBjb2RlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0J3MgYSBrZXkgYXJlYSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgbHVya2luZyBpbiB0aGVyZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjU4LjE5ODg1NTE1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MzA4ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9yYW5nZV90cmVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjU4LjI0MjgxODM4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk2MTY2Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcmFuZ2VfdHJlZS5jYCBmb3IgUmVsZXZhbnQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgdGhyb3VnaCBgcmFuZ2VfdHJlZS5jYC4gSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyLCBzbyB0aGF0J3MgZ29vZC4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgb24uIExldCdzIHNlZS4uLiBiYXNlZCBvbiB0aGUgbmFtZXMsIGBhcmVuYV9tYXBfYWxsb2NgLCBgYXJlbmFfbWFwX2ZyZWVgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGBhcmVuYV9mcmVlX3dvcmtlcmAsIGByYW5nZV90cmVlX3NldGAsIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgYWxsIGxvb2sgbGlrZSBjYW5kaWRhdGVzLlxuXG5IbW0sIGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBhIGtleSBkZXRhaWwhIFNpbmNlIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQuIEJ1dCBsZXQncyB2ZXJpZnkuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW5saW5lZC4gQSByZWxhdGVkIGNvbnNpZGVyYXRpb24gY29tZXMgdG8gbWluZCDigJMgSSBzaG91bGQgY2hlY2sgdGhlIGtmdW5jcywgYXMgdGhleSBtYXkgYmUgdXNpbmcgdGhlc2UgaW50ZXJuYWwgbWV0aG9kcy4gTGV0J3MgY2hlY2s6IGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgLCBhbmQgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVgLlxuXG5BbHNvLCB0aGUgYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIHNvIHRob3NlIGRlZmluaXRlbHkgd2FycmFudCBhIGNsb3NlciBsb29rLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBgcmFuZ2VfdHJlZS5jYCBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozODowMy40Mzg5ODcxMzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjIxMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhbmdlX3RyZWVfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI2LSAqIEF0IGluaXQgdGltZTpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoyNzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCAwLCBtYXgpO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zMi0gKiB0byBmaW5kIGZyZWUgcmFuZ2UgYW5kIG1hcmsgc2xvdHMgYXMgYWxsb2NhdGVkIGFuZCBsYXRlcjpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zNC0gKiB0byBtYXJrIGFzIHVuYWxsb2NhdGVkIGFmdGVyIHVzZS5cXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4NS0vKiBJcyB0aGUgd2hvbGUgcmFuZ2Ugc2V0ID8gKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODY6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTgtLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxOTk6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTIwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjAzLjQ4MjYxNDAxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk3MjE3MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgIGFyZSBkZWZpbml0ZWx5IG5vbi1zdGF0aWMgbWV0aG9kcy4gV2UgY2FuIHVzZSB0aG9zZSBtZXRob2RzIGFzIHRoZXkgYXJlIGltcGxlbWVudGVkLCB3aGljaCBpcyBrZXkuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGFyZW5hIG1lbW9yeSBpcyBtYW5hZ2VkIHRvIGJlIGNlcnRhaW4gdGhlIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGNvcnJlY3RseS4gTGV0J3MgZGlnIGludG8gYGFyZW5hX21hcF9hbGxvY2AgYW5kIGBhcmVuYV9tYXBfZnJlZWAuIFRoZXkgYXJlIHRoZSBnYXRla2VlcGVycyBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgbWVtb3J5IGxlYWtzIGFyZW4ndCBwb3NzaWJsZSB3aXRoaW4gdGhlIHJhbmdlIHRyZWUgaW1wbGVtZW50YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjA2LjU3OTgzMzUxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxOTExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfbWFwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjcte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY0MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjQxLVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQyOlxcdC5tYXBfYWxsb2MgPSBhcmVuYV9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY0My1cXHQubWFwX2ZyZWUgPSBhcmVuYV9tYXBfZnJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MDYuNjI0MDI5Mzc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTc1ODYzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFyZW5hIEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYXJlbmEgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSB0aGF0IGBhcmVuYV9tYXBfYWxsb2NgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoaXMgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGUgc2NvcGUgYW5kIG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLCB3aGljaCBzaW1wbGlmaWVzIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGV4dGVybmFsIGNhbGxzIGFyZSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZTogYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlYCwgYW5kIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYC5cblxuTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2AgaXMgKmFjdHVhbGx5KiBub24tc3RhdGljLiBUaGlzIGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIGNvbmZ1c2lvbiwgYW5kIGEgc2ltcGxlIHZlcmlmaWNhdGlvbiB3aWxsIHNhdmUgbWUgdGltZSBkb3duIHRoZSByb2FkLiBUaGlzIGNvbmZpcm1hdGlvbiBpcyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjExLjQ4MTYxODM0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMTk5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTg0OT1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NDMtICogUmVzZXJ2ZSBhbiBhcmVuYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Ugd2l0aG91dCBwb3B1bGF0aW5nIGl0LiBUaGlzIGNhbGwgc3RvcHNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTQ0OiAqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyBmcm9tIGFkZGluZyBwYWdlcyB0byB0aGlzIHJhbmdlLlxcbmtlcm5lbC9icGYvYXJlbmEuYy05NDUtICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTA2MT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjItXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjM6X19icGZfa2Z1bmMgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjQtXFx0XFx0XFx0XFx0XFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDc1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzYtXFx0XFx0XFx0XFx0XFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwODc6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg4LVxcdFxcdFxcdFxcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTM2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MTEuNTI0NjQzNDY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODcwOTM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoZXkgYXJlbid0IHN0YXRpYy4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5NeSBmb2N1cyByaWdodCBub3cgaXMgb24gYSBmZXcgc3BlY2lmaWMgb25lczogYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AuIFRoZXNlIHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIHdoYXQgSSdtIHdvcmtpbmcgb24uXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlIGFyZSBhbHNvIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZWAgYW5kIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYC4gVGhleSdyZSAqYWxzbyogbm9uLXN0YXRpYy4gR290dGEgbWFrZSBzdXJlIEkgaW5jbHVkZSB0aG9zZSBpbiBteSBhc3Nlc3NtZW50LiBUaGlzIGlzIGltcG9ydGFudC5cblxuTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNydWNpYWwuIEFyZSBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgKmV4cG9ydGVkKiwgb3IgYXJlIHRoZXkganVzdCBub24tc3RhdGljIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGF0IGRpc3RpbmN0aW9uIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGZvciB0aGUgbmV4dCBzdGVwcyBvZiBteSBhbmFseXNpcy4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgc2NvcGUgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MTYuNTExNzQwMjM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ4NTUyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MTYuNTc5MjMxOTM3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODU2ODM3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBBcmVuYSBhbmQgUmFuZ2UgVHJlZSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIHN5c3RlbSBkb2Vzbid0IGV4cG9ydCB0aGVzZSBzeW1ib2xzIGRpcmVjdGx5LCBidXQgdGhleSdyZSBkZWZpbml0ZWx5ICpub24tc3RhdGljKiwgbWVhbmluZyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhleSdyZSB1c2VkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCB0byBtYWtlIHRoaXMgYnVpbGQgY29ycmVjdGx5LiBUaGUgcHJpbWFyeSBvbmUgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIOKAkyB0aGF0IHNlZW1zIGxpa2UgdGhlIGVzc2VudGlhbCBmbGFnLiBCdXQsIGhhbmcgb24uLi4gbGV0IG1lIGRvdWJsZS1jaGVjay4gSXQgbG9va3MgbGlrZSB0aGUgb2JqZWN0cyBgcmFuZ2VfdHJlZS5vYCBhbmQgYGFyZW5hLm9gIGFsc28gZGVwZW5kIG9uIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgYmVpbmcgZW5hYmxlZCBpbiBhZGRpdGlvbiB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC5cblxuUmlnaHQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbmFsaXRpZXMgYXJlIGVuYWJsZWQuXG5cbk5vdywgbGV0IG1lIGNvbmRlbnNlIHRoaXMgaW5mb3JtYXRpb24gaW50byBhIHVzYWJsZSBmb3JtYXQgZm9yIG15IGFuYWx5c2lzLlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS4gQWJzb2x1dGVseS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczpcbiAgICAqICAgYHJhbmdlX3RyZWVfc2V0YFxuICAgICogICBgcmFuZ2VfdHJlZV9jbGVhcmBcbiAgICAqICAgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2BcbiAgICAqICAgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYFxuICAgICogICBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgXG4gICAgKiAgIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBFbmFibGUgYEJQRl9TWVNDQUxMYC5cblxuTXkgcmVhc29uaW5nPyBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIGluIGEgc2lnbmlmaWNhbnQgd2F5LiBUaGUgZ29hbCBpcyBwcmUtYWxsb2NhdGluZyBtZW1vcnksIHdoaWNoIHByZXZlbnRzIHBvdGVudGlhbGx5IGRpc2FzdHJvdXMgdW5yZWNvdmVyYWJsZSBzdGF0ZXMgZHVyaW5nIGByYW5nZV90cmVlX3NldGAgb3IgYHJhbmdlX3RyZWVfY2xlYXJgIG9wZXJhdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyBCUEYgYXJlbmEgcGFnZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCBmdW5jdGlvbmFsaXRpZXMgdGhhdCBhcmUgcmVhY2hhYmxlIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQgbWFwIG9wZXJhdGlvbnMuIEZ1enppbmcgdGhlc2UgcGF0aHMgaXMgcGFyYW1vdW50IHRvIHZhbGlkYXRlIHRoZSByb2J1c3RuZXNzIG9mIHRoaXMgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3kgd29ya3MgcmVsaWFibHkgdW5kZXIgc3RyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0NiwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MjQuMDY0OTE4NDU0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2Njg5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhbmdlX3RyZWVfc2V0XCIsXG4gICAgXCJyYW5nZV90cmVlX2NsZWFyXCIsXG4gICAgXCJicGZfYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgYW5kIHJhbmdlIHRyZWUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG1lbW9yeSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSByYW5nZSB0cmVlLCBwcmV2ZW50aW5nIHVucmVjb3ZlcmFibGUgc3RhdGVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgZHVyaW5nIGByYW5nZV90cmVlX3NldGAgb3IgYHJhbmdlX3RyZWVfY2xlYXJgLiBUaGlzIGFmZmVjdHMgQlBGIGFyZW5hIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcyBhbmQgbWFwIG9wZXJhdGlvbnMuIEZ1enppbmcgdGhlc2UgcGF0aHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozODoyNC4xOTE2MTQ0OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1OTE5MTI0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozODoyNC4xOTIxNzYyM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTU5MTM0NzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgcHJlLWFsbG9jYXRlcyBhIGByYW5nZV9ub2RlYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgdHJlZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMgKGUuZy4sIHJldHVybmluZyBgLUVOT01FTWApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgaW4gYGFyZW5hLmNgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM5NDdkYjc5NDMxZjRkZmIwOTBjOThjNGJhNzdjZGJlZjQ0YzMxMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTozNzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggNTU1ZWUyNTMxZWY5OC4uZDU3YTBiNjE3NTI1OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNzY2LDcgKzc2Niw5IEBAIHN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuIFx0cmV0dXJuIGNsZWFyX2xvMzIoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkgKyB1YWRkcjMyO1xuIG91dDpcbi1cdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xuK1x0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpKVxuK1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiYnBmX2FyZW5hOiBmYWlsZWQgdG8gcmVzdG9yZSBmcmVlIHJhbmdlICVsZCslbGQgYWZ0ZXIgcGFydGlhbCBhbGxvY1xcblwiLFxuK1x0XHRcdFx0ICAgIHBnb2ZmICsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiBcdGlmIChtYXBwZWQpIHtcbiBcdFx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbkBAIC04ODEsNyArODgzLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGRlZmVyO1xuIFxuLVx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4rXHRyZXQgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4rXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbiBcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG5AQCAtMTAwNCwxMSArMTAxMSwxOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdGthZGRyID0gYXJlbmFfdm1fc3RhcnQgKyBzLVx1MDAzZXVhZGRyO1xuIFx0XHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtXHUwMDNldWFkZHIpO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXRcbitcdFx0ICogaWYgdGhlIHJhbmdlIHRyZWUgdXBkYXRlIGZhaWxzIHdlIGxlYXZlIHRoZSBQVEVzXG4rXHRcdCAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlc1xuK1x0XHQgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS5cbitcdFx0ICovXG4rXHRcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovXG4gXHRcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcdTAwMjZjZGF0YSk7XG4tXG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuIFx0fVxuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuaW5kZXggMmYyODg4NmYzZmY3NS4uNTQwNTViMWZlNTQxMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG4rKysgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuQEAgLTE0MywxNiArMTQzLDIyIEBAIGludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0XHRpZiAocm4tXHUwMDNlcm5fc3RhcnQgXHUwMDNjIHN0YXJ0IFx1MDAyNlx1MDAyNiBybi1cdTAwM2Vybl9sYXN0IFx1MDAzZSBsYXN0KSB7XG4gXHRcdFx0dTMyIG9sZF9sYXN0ID0gcm4tXHUwMDNlcm5fbGFzdDtcbiBcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcbitcdFx0XHQgKiB0aGUgdHJlZS4gSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSByZXR1cm4gLUVOT01FTVxuK1x0XHRcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXG4rXHRcdFx0ICovXG4rXHRcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcbitcdFx0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuK1x0XHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4gXHRcdFx0LyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovXG4gXHRcdFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XG4gXHRcdFx0cm4tXHUwMDNlcm5fbGFzdCA9IHN0YXJ0IC0gMTtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcbiBcbi1cdFx0XHQvKiBBZGQgYSByYW5nZSAqL1xuLVx0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXG4tXHRcdFx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi1cdFx0XHRpZiAoIW5ld19ybilcbi1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdC8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovXG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX3N0YXJ0ID0gbGFzdCArIDE7XG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBvbGRfbGFzdDtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XG5AQCAtMTkzLDYgKzE5OSw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4ge1xuIFx0dTMyIGxhc3QgPSBzdGFydCArIGxlbiAtIDE7XG4rXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbmV3X3JuID0gTlVMTDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpyaWdodDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpsZWZ0O1xuIFx0aW50IGVycjtcbkBAIC0yMDIsMjAgKzIwOSw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgXHUwMDNlPSBsYXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlXG4rXHQgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2VcbitcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnRcbitcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXG4rXHQgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWRcbitcdCAqL1xuK1x0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbitcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCArIDEsIGxhc3QgKyAxKTtcbitcdGlmICghbGVmdCBcdTAwMjZcdTAwMjYgIXJpZ2h0KSB7XG4rXHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4rXHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4rXHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xuIFx0ZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiBcbiBcdC8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi9cbiBcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XG4tXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydClcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydCkge1xuK1x0XHRlcnIgPSAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbitcdH1cbiBcbiBcdC8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XG4tXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChyaWdodCBcdTAwMjZcdTAwMjYgcmlnaHQtXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCArIDEpIHtcbitcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4rXHR9XG4gXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgcmlnaHQpIHtcbiBcdFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cbkBAIC0yMzUsMTQgKzI2MiwxNiBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XG4gXHRcdHJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bGVmdCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4tXHRcdGlmICghbGVmdClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bGVmdC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuLVx0XHRsZWZ0LVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuLVx0XHRyYW5nZV9pdF9pbnNlcnQobGVmdCwgcnQpO1xuK1x0XHQvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovXG4rXHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuK1x0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG4rXHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuK1xuK291dF9mcmVlX25ldzpcbitcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MjQuMTkyMTc3MzhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1OTEzMjUzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZm9jdXMgaGVyZSBpcyBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gdGhlIGByYW5nZV90cmVlX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHByZS1hbGxvY2F0aW5nIGEgYHJhbmdlX25vZGVgIHdpdGhpbiBgcmFuZ2VfdHJlZV9zZXRgIGJlZm9yZSBhY3R1YWxseSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUuIFRoaXMgaXMgc21hcnQsIGFzIGl0IGVuc3VyZXMgdGhhdCBpZiB0aGUgYWxsb2NhdGlvbiAobGlrZWx5IGEgYGttYWxsb2NgIHZhcmlhbnQpIGZhaWxzLCB0aGUgdHJlZSBpc24ndCBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkLCBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIGZ1bmN0aW9ucyBub3cgYWxzbyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAsIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgYWZ0ZXIgbG9va2luZyBjbG9zZWx5LCBpdCBkb2Vzbid0IHNlZW0gbGlrZSB0aGV5IGRvLiBUaGlzIGlzIGp1c3QgYWJvdXQgaGFuZGxpbmcgdGhlIGZhaWx1cmUgb2YgYSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYSByYW5nZSB0cmVlLCB3aGljaCB0cmFja3MgZnJlZSBhbmQgdXNlZCBtZW1vcnkgcmFuZ2VzLCBub3Qgc29tZSBuZXcgc3RydWN0dXJlIHRoYXQncyBwYXNzZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCdzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIGByYW5nZV90cmVlX3NldGAgZmFpbHMsIGl0IHNpbXBseSByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIHRyZWUgcmVtYWlucyB1bnRvdWNoZWQuIE5vIGRhdGEgaXMgbGVha2VkLlxuXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBsaWtlbHkgcmV2b2x2ZXMgYXJvdW5kIG1lbW9yeSBsZWFrcyBvciBpbmNvbnNpc3RlbmNpZXMgdGhhdCBjb3VsZCBoYXBwZW4gaWYgdGhlIGBrbWFsbG9jX25vbG9ja2AgY2FsbCBpbiBgcmFuZ2VfdHJlZV9zZXRgIGZhaWxzLiBUaGluZ3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBhIG1lbW9yeSBsZWFrIGNvdWxkIGFyaXNlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCBidXQgdGhlbiB0aGUgdHJlZSB3YXMgcGFydGlhbGx5IG1vZGlmaWVkLiBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nIG1pZ2h0IGZsYWcgdGhlIHN0YXRlIGluY29uc2lzdGVuY3ksIGJ1dCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYWxsb2NhdGlvbi4gYHJhbmdlX3RyZWVfc2V0YCBpcyB1c2luZyBga21hbGxvY19ub2xvY2tgLiBJJ2xsIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgQlBGLXNwZWNpZmljIHdyYXBwZXIgb3Igbm90LiBPa2F5LCBpdCdzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgYGttYWxsb2NgIGZhbWlseS4gUmVnYXJkbGVzcywgYG5ld19ybmAsIHRoZSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgLCBoYXMgaXRzIGBybl9zdGFydGAgYW5kIGBybl9sYXN0YCBmaWVsZHMgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgaXQncyBpbnNlcnRlZC4gU28sIHdlIGhhdmU6XG5cbmBgYGNcblx0XHRuZXdfcm4tXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcblx0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG5cdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuYGBgXG5cbk5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBiZWluZyByZWFkIGZyb20uIE5vIHByb2JsZW0uXG5cblNvLCBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHJvYnVzdCBlcnJvciBoYW5kbGluZyBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gdGhlIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyBhbmQgaW1wcm92aW5nIHN0YWJpbGl0eS4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXNuJ3QgbGVhayBhbnkgaW5mb3JtYXRpb24sIGFuZCBkb2Vzbid0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUga2luZHMgb2YgYnVncyB0aGF0IGl0J3MgcHJldmVudGluZywgbGlrZSBtZW1vcnkgbGVha3MsIGluY29uc2lzdGVuY2llcywgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLCBhcmUgdGhpbmdzIHRoYXQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyBzaG91bGQgY2F0Y2guIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkwLCJPdXRwdXRUb2tlbnMiOjI0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjM1Ljc4MzUwNTg1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgcHJlLWFsbG9jYXRlcyBhIGByYW5nZV9ub2RlYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgdHJlZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMgKGUuZy4sIHJldHVybmluZyBgLUVOT01FTWApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgaW4gYGFyZW5hLmNgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IHByZS1hbGxvY2F0ZXMgYSBgcmFuZ2Vfbm9kZWAgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIHRyZWUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIChlLmcuLCByZXR1cm5pbmcgYC1FTk9NRU1gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgIGluIGBhcmVuYS5jYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgIGhhcyBpdHMgZmllbGRzIChgcm5fc3RhcnRgLCBgcm5fbGFzdGApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGluc2VydGVkIGludG8gdGhlIHRyZWUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGluY29uc2lzdGVudCBpbnRlcm5hbCBzdGF0ZSwgbWVtb3J5IGxlYWtzLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIHJhbmdlIHRyZWUsIGFsbCBvZiB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 15:15:20 +0000 UTC FinishedAt: 2026-08-10 15:38:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ed3b3093b6242bdb2c4acfb932d4b15db4e33948", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ed3b3093b6242bdb2c4acfb932d4b15db4e33948", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "range_tree_set", "range_tree_clear", "bpf_arena_alloc_pages", "bpf_arena_free_pages", "bpf_arena_alloc_pages_non_sleepable", "bpf_arena_alloc_pages_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBwcmUtYWxsb2NhdGVzIGEgYHJhbmdlX25vZGVgIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUgdG8gcHJldmVudCBsZWF2aW5nIHRoZSB0cmVlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyAoZS5nLiwgcmV0dXJuaW5nIGAtRU5PTUVNYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJhbmdlX3RyZWVfc2V0YCBpbiBgYXJlbmEuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzk0N2RiNzk0MzFmNGRmYjA5MGM5OGM0YmE3N2NkYmVmNDRjMzExOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjM3OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggNTU1ZWUyNTMxZWY5OC4uZDU3YTBiNjE3NTI1OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNzY2LDcgJiM0Mzs3NjYsOSBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICYjNDM7IHVhZGRyMzI7XG4gb3V0OlxuLVx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmICYjNDM7IG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xuJiM0MztcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCkpXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2JwZl9hcmVuYTogZmFpbGVkIHRvIHJlc3RvcmUgZnJlZSByYW5nZSAlbGQmIzQzOyVsZCBhZnRlciBwYXJ0aWFsIGFsbG9jXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuIFx0aWYgKG1hcHBlZCkge1xuIFx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbkBAIC04ODEsNyAmIzQzOzg4MywxMiBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWZlcjtcbiBcbi1cdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuJiM0MztcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4gXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuQEAgLTEwMDQsMTEgJiM0MzsxMDExLDE4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0a2FkZHIgPSBhcmVuYV92bV9zdGFydCAmIzQzOyBzLVx1MDAzZXVhZGRyO1xuIFx0XHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtXHUwMDNldWFkZHIpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1hcmsgdGhlIHJhbmdlIGFzIGZyZWUgYmVmb3JlIGNsZWFyaW5nIFBURXMgc28gdGhhdFxuJiM0MztcdFx0ICogaWYgdGhlIHJhbmdlIHRyZWUgdXBkYXRlIGZhaWxzIHdlIGxlYXZlIHRoZSBQVEVzXG4mIzQzO1x0XHQgKiBpbnRhY3QsIGF2b2lkaW5nIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUgd2hlcmUgcGFnZXNcbiYjNDM7XHRcdCAqIGFyZSBmcmVlZCBidXQgdGhlIGFyZW5hIGZyZWUgdHJlZSBkb2VzIG5vdCB0cmFjayB0aGVtLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovXG4gXHRcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcdTAwMjZjZGF0YSk7XG4tXG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuIFx0fVxuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuaW5kZXggMmYyODg4NmYzZmY3NS4uNTQwNTViMWZlNTQxMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuQEAgLTE0MywxNiAmIzQzOzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdFx0aWYgKHJuLVx1MDAzZXJuX3N0YXJ0IFx1MDAzYyBzdGFydCBcdTAwMjZcdTAwMjYgcm4tXHUwMDNlcm5fbGFzdCBcdTAwM2UgbGFzdCkge1xuIFx0XHRcdHUzMiBvbGRfbGFzdCA9IHJuLVx1MDAzZXJuX2xhc3Q7XG4gXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcbiYjNDM7XHRcdFx0ICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU1cbiYjNDM7XHRcdFx0ICogd2l0aG91dCBhbHRlcmluZyB0aGUgcmFuZ2UgdHJlZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4mIzQzO1x0XHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4mIzQzO1x0XHRcdGlmICghbmV3X3JuKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiBcdFx0XHQvKiBPdmVybGFwcyB3aXRoIHRoZSBlbnRpcmUgY2xlYXJpbmcgcmFuZ2UgKi9cbiBcdFx0XHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcbiBcdFx0XHRybi1cdTAwM2Vybl9sYXN0ID0gc3RhcnQgLSAxO1xuIFx0XHRcdHJhbmdlX2l0X2luc2VydChybiwgcnQpO1xuIFxuLVx0XHRcdC8qIEFkZCBhIHJhbmdlICovXG4tXHRcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCxcbi1cdFx0XHRcdFx0XHROVU1BX05PX05PREUpO1xuLVx0XHRcdGlmICghbmV3X3JuKVxuLVx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdC8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovXG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX3N0YXJ0ID0gbGFzdCAmIzQzOyAxO1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9sYXN0ID0gb2xkX2xhc3Q7XG4gXHRcdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuQEAgLTE5Myw2ICYjNDM7MTk5LDcgQEAgaW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiB7XG4gXHR1MzIgbGFzdCA9IHN0YXJ0ICYjNDM7IGxlbiAtIDE7XG4mIzQzO1x0c3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbGVmdDtcbiBcdGludCBlcnI7XG5AQCAtMjAyLDIwICYjNDM7MjA5LDQwIEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdGlmIChsZWZ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX3N0YXJ0IFx1MDAzYz0gc3RhcnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCBcdTAwM2U9IGxhc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBuZXcgbm9kZSBpcyBuZWVkZWQgb25seSB3aGVuIHRoZSByYW5nZSBoYXMgbm8gYWRqYWNlbnQgZnJlZVxuJiM0MztcdCAqIHJhbmdlIG9uIGVpdGhlciBzaWRlLiAgVGhpcyBpcyBrbm93biBiZWZvcmUgY2xlYXJpbmc6IGFueSByYW5nZVxuJiM0MztcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICYjNDM7IDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50XG4mIzQzO1x0ICogcGllY2UuICBBbGxvY2F0ZSBvbmx5IGluIHRoYXQgY2FzZSwgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSwgc29cbiYjNDM7XHQgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xuJiM0MztcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpO1xuJiM0MztcdGlmICghbGVmdCBcdTAwMjZcdTAwMjYgIXJpZ2h0KSB7XG4mIzQzO1x0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxuJiM0MztcdFx0XHRcdFx0X19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcbiYjNDM7XHRcdGlmICghbmV3X3JuKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xuIFx0ZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xuLVx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICYjNDM7IDEgIT0gc3RhcnQpIHtcbiYjNDM7XHRcdGVyciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiYjNDM7XHR9XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgcmlnaHQtYWRqYWNlbnQgcmFuZ2UgPyAqL1xuIFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICYjNDM7IDEsIGxhc3QgJiM0MzsgMSk7XG4tXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgJiM0MzsgMSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0aWYgKHJpZ2h0IFx1MDAyNlx1MDAyNiByaWdodC1cdTAwM2Vybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpIHtcbiYjNDM7XHRcdGVyciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiYjNDM7XHR9XG4gXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgcmlnaHQpIHtcbiBcdFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cbkBAIC0yMzUsMTQgJiM0MzsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0XHRyaWdodC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuIFx0XHRyYW5nZV9pdF9pbnNlcnQocmlnaHQsIHJ0KTtcbiBcdH0gZWxzZSB7XG4tXHRcdGxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuLVx0XHRpZiAoIWxlZnQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdGxlZnQtXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbi1cdFx0bGVmdC1cdTAwM2Vybl9sYXN0ID0gbGFzdDtcbi1cdFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcbiYjNDM7XHRcdC8qIE5vIGFkamFjZW50IHJhbmdlczsgdXNlIHRoZSBwcmUtYWxsb2NhdGVkIG5vZGUgKi9cbiYjNDM7XHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuJiM0MztcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuJiM0MztcdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfZnJlZV9uZXc6XG4mIzQzO1x0a2ZyZWVfbm9sb2NrKG5ld19ybik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JhbmdlX3RyZWVfc2V0JiMzNDssCiAgICAmIzM0O3JhbmdlX3RyZWVfY2xlYXImIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbWVtb3J5IGJlZm9yZSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUsIHByZXZlbnRpbmcgdW5yZWNvdmVyYWJsZSBzdGF0ZXMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscyBkdXJpbmcgYHJhbmdlX3RyZWVfc2V0YCBvciBgcmFuZ2VfdHJlZV9jbGVhcmAuIFRoaXMgYWZmZWN0cyBCUEYgYXJlbmEgcGFnZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzIGFuZCBtYXAgb3BlcmF0aW9ucy4gRnV6emluZyB0aGVzZSBwYXRocyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM5NDdkYjc5NDMxZjRkZmIwOTBjOThjNGJhNzdjZGJlZjQ0YzMxMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTozNzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA1NTVlZTI1MzFlZjk4Li5kNTdhMGI2MTc1MjU4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC03NjYsNyAmIzQzOzc2Niw5IEBAIHN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKIAlyZXR1cm4gY2xlYXJfbG8zMihhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydCkgJiM0MzsgdWFkZHIzMjsKIG91dDoKLQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7CiYjNDM7CWlmIChyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCkpCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7YnBmX2FyZW5hOiBmYWlsZWQgdG8gcmVzdG9yZSBmcmVlIHJhbmdlICVsZCYjNDM7JWxkIGFmdGVyIHBhcnRpYWwgYWxsb2NcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiAJaWYgKG1hcHBlZCkgewogCQlmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkICZsdDsmbHQ7IFBBR0VfU0hJRlQpOwpAQCAtODgxLDcgJiM0Mzs4ODMsMTIgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwKIAlpZiAocmV0KQogCQlnb3RvIGRlZmVyOwogCi0JcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiYjNDM7CXJldCA9IHJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiwgcGFnZV9jbnQpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAogCWluaXRfbGxpc3RfaGVhZCgmYW1wO2ZyZWVfcGFnZXMpOwogCWNkYXRhLmFyZW5hID0gYXJlbmE7CkBAIC0xMDA0LDExICYjNDM7MTAxMSwxOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWthZGRyID0gYXJlbmFfdm1fc3RhcnQgJiM0Mzsgcy0mZ3Q7dWFkZHI7CiAJCXBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgcy0mZ3Q7dWFkZHIpOwogCiYjNDM7CQkvKgomIzQzOwkJICogTWFyayB0aGUgcmFuZ2UgYXMgZnJlZSBiZWZvcmUgY2xlYXJpbmcgUFRFcyBzbyB0aGF0CiYjNDM7CQkgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXMKJiM0MzsJCSAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlcwomIzQzOwkJICogYXJlIGZyZWVkIGJ1dCB0aGUgYXJlbmEgZnJlZSB0cmVlIGRvZXMgbm90IHRyYWNrIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJLyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovCiAJCWFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoJmFtcDtpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCQkJICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgJmFtcDtjZGF0YSk7Ci0KLQkJcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiAJfQogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCmluZGV4IDJmMjg4ODZmM2ZmNzUuLjU0MDU1YjFmZTU0MTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jCkBAIC0xNDMsMTYgJiM0MzsxNDMsMjIgQEAgaW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJCWlmIChybi0mZ3Q7cm5fc3RhcnQgJmx0OyBzdGFydCAmYW1wOyZhbXA7IHJuLSZndDtybl9sYXN0ICZndDsgbGFzdCkgewogCQkJdTMyIG9sZF9sYXN0ID0gcm4tJmd0O3JuX2xhc3Q7CiAKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmcKJiM0MzsJCQkgKiB0aGUgdHJlZS4gSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSByZXR1cm4gLUVOT01FTQomIzQzOwkJCSAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuCiYjNDM7CQkJICovCiYjNDM7CQkJbmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwKJiM0MzsJCQkJCQlfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpOwomIzQzOwkJCWlmICghbmV3X3JuKQomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKIAkJCS8qIE92ZXJsYXBzIHdpdGggdGhlIGVudGlyZSBjbGVhcmluZyByYW5nZSAqLwogCQkJcmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7CiAJCQlybi0mZ3Q7cm5fbGFzdCA9IHN0YXJ0IC0gMTsKIAkJCXJhbmdlX2l0X2luc2VydChybiwgcnQpOwogCi0JCQkvKiBBZGQgYSByYW5nZSAqLwotCQkJbmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwKLQkJCQkJCU5VTUFfTk9fTk9ERSk7Ci0JCQlpZiAoIW5ld19ybikKLQkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQkvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqLwogCQkJbmV3X3JuLSZndDtybl9zdGFydCA9IGxhc3QgJiM0MzsgMTsKIAkJCW5ld19ybi0mZ3Q7cm5fbGFzdCA9IG9sZF9sYXN0OwogCQkJcmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpOwpAQCAtMTkzLDYgJiM0MzsxOTksNyBAQCBpbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiB7CiAJdTMyIGxhc3QgPSBzdGFydCAmIzQzOyBsZW4gLSAxOwomIzQzOwlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbmV3X3JuID0gTlVMTDsKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7CiAJc3RydWN0IHJhbmdlX25vZGUgKmxlZnQ7CiAJaW50IGVycjsKQEAgLTIwMiwyMCAmIzQzOzIwOSw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJaWYgKGxlZnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9zdGFydCAmbHQ7PSBzdGFydCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX2xhc3QgJmd0Oz0gbGFzdCkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJLyoKJiM0MzsJICogQSBuZXcgbm9kZSBpcyBuZWVkZWQgb25seSB3aGVuIHRoZSByYW5nZSBoYXMgbm8gYWRqYWNlbnQgZnJlZQomIzQzOwkgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2UKJiM0MzsJICogY292ZXJpbmcgc3RhcnQgLSAxIG9yIGxhc3QgJiM0MzsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnQKJiM0MzsJICogcGllY2UuICBBbGxvY2F0ZSBvbmx5IGluIHRoYXQgY2FzZSwgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSwgc28KJiM0MzsJICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkCiYjNDM7CSAqLwomIzQzOwlsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpOwomIzQzOwlyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgJiM0MzsgMSwgbGFzdCAmIzQzOyAxKTsKJiM0MzsJaWYgKCFsZWZ0ICZhbXA7JmFtcDsgIXJpZ2h0KSB7CiYjNDM7CQluZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLAomIzQzOwkJCQkJX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTsKJiM0MzsJCWlmICghbmV3X3JuKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiAJLyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqLwogCWVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIG91dF9mcmVlX25ldzsKIAogCS8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi8KIAlsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpOwotCWlmIChsZWZ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fbGFzdCAmIzQzOyAxICE9IHN0YXJ0KQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKGxlZnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9sYXN0ICYjNDM7IDEgIT0gc3RhcnQpIHsKJiM0MzsJCWVyciA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlX25ldzsKJiM0MzsJfQogCiAJLyogRG8gd2UgaGF2ZSBhIHJpZ2h0LWFkamFjZW50IHJhbmdlID8gKi8KIAlyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgJiM0MzsgMSwgbGFzdCAmIzQzOyAxKTsKLQlpZiAocmlnaHQgJmFtcDsmYW1wOyByaWdodC0mZ3Q7cm5fc3RhcnQgIT0gbGFzdCAmIzQzOyAxKQotCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJaWYgKHJpZ2h0ICZhbXA7JmFtcDsgcmlnaHQtJmd0O3JuX3N0YXJ0ICE9IGxhc3QgJiM0MzsgMSkgewomIzQzOwkJZXJyID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfbmV3OwomIzQzOwl9CiAKIAlpZiAobGVmdCAmYW1wOyZhbXA7IHJpZ2h0KSB7CiAJCS8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovCkBAIC0yMzUsMTQgJiM0MzsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKQogCQlyaWdodC0mZ3Q7cm5fc3RhcnQgPSBzdGFydDsKIAkJcmFuZ2VfaXRfaW5zZXJ0KHJpZ2h0LCBydCk7CiAJfSBlbHNlIHsKLQkJbGVmdCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7Ci0JCWlmICghbGVmdCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlsZWZ0LSZndDtybl9zdGFydCA9IHN0YXJ0OwotCQlsZWZ0LSZndDtybl9sYXN0ID0gbGFzdDsKLQkJcmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTsKJiM0MzsJCS8qIE5vIGFkamFjZW50IHJhbmdlczsgdXNlIHRoZSBwcmUtYWxsb2NhdGVkIG5vZGUgKi8KJiM0MzsJCW5ld19ybi0mZ3Q7cm5fc3RhcnQgPSBzdGFydDsKJiM0MzsJCW5ld19ybi0mZ3Q7cm5fbGFzdCA9IGxhc3Q7CiYjNDM7CQlyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7CiAJfQogCXJldHVybiAwOwomIzQzOwomIzQzO291dF9mcmVlX25ldzoKJiM0MzsJa2ZyZWVfbm9sb2NrKG5ld19ybik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aCB0aGUgYHJhbmdlX3RyZWVfc2V0YCBjYWxscyB3aXRoaW4gYGFyZW5hLmNgLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQmIzM5O3MgYWJvdXQgcHJlLWFsbG9jYXRpbmcgbWVtb3J5IGluIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBpbiBgcmFuZ2VfdHJlZS5jYCB0byBwcmV2ZW50IGluLXBsYWNlIG1vZGlmaWNhdGlvbnMgaWYgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkLiBUaGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIGEgY29kZXBhdGggd29ydGggZnV6emluZz8gVGhlIEJQRiBhcmVuYSBpcyBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZGl0aW9uLCB3aGljaCBpcyBwcm9taXNpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUgc2luY2UgaXQgbWF5IGJlIGxlc3Mgd2VsbC10ZXN0ZWQuIEdpdmVuIHRoaXMgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3ksIGZ1enppbmcgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpbiB0aGUgQlBGIGFyZW5hIGxvb2tzIGxpa2UgYSBnb29kIHRhcmdldC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9icGYvYXJlbmEuY2AuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gVGhlbiBJJiMzOTtsbCBzaGlmdCBvdmVyIHRvIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AgdG8gbG9vayBhdCBob3cgYHJhbmdlX3RyZWVfY2xlYXJgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgIGNoYW5nZWQsIGZvY3VzaW5nIG9uIGhvdyB0aGUgcHJlLWFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuCgpOZXh0IHN0ZXA6IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBCUEYgYXJlbmEgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUmIzM5O3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gY29uc2lkZXIuIEkmIzM5O2xsIHNlYXJjaCBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgZm9yIHNvbWV0aGluZyBsaWtlIGBicGZfYXJlbmFgIG9yIGBCUEZfQVJFTkFgIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LCBzbyB0aGF0IEkgdW5kZXJzdGFuZCBob3cgdG8gcmVwcm9kdWNlIHRoZSBjaGFuZ2VzIGluIG15IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0FSRU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzEyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkJQRiBTeXNjYWxsIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgc3RhcnQgdGVhcmluZyBhcGFydCB0aGUgZW50aXJlIGtlcm5lbCwgY291bGQgdGhpcyBiZSBhcyBzaW1wbGUgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gU3BlY2lmaWNhbGx5LCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZGVwZW5kZW50IG9uIGBDT05GSUdfQlBGX1NZU0NBTExgPyBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIHNlZWluZyBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBvdmVyIHRvIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGNvbmZpcm0gd2hldGhlciB0aGUgcmVsZXZhbnQgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGF0IGZsYWcuIFRoYXQgTWFrZWZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgaG93IGBDT05GSUdfQlBGX1NZU0NBTExgIHBsYXlzIGludG8gdGhlIGVxdWF0aW9uLiBJdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIHRvIGRldGVybWluZSBpZiB0aGUgaXNzdWUgaXMgYSBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtIG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkLCBsaWtlIGEgbWlzc2luZyBpbmNsdWRlIG9yIGEgbW9yZSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBDaGVja2luZyB0aGUgTWFrZWZpbGUgd2lsbCBxdWlja2x5IGdpdmUgbWUgdGhlIHNjb3BlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgQXJlbmEgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsIGNvbmZpZyBpcyBzZXQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAgYWxsIGVuYWJsZWQuIFRoYXQgdGVsbHMgbWUgdGhpcyBpcyBhIDY0LWJpdCBNTVUgYXJjaGl0ZWN0dXJlIHdpdGggQlBGIHN5c3RlbSBjYWxscyBhY3RpdmF0ZWQuIEdvb2QsIGdvb2QuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBCUEYgYXJlbmEgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIExldCYjMzk7cyBkaWcgaW50byBga2VybmVsL2JwZi9hcmVuYS5jYC4gQWgsIHRoZXJlIHRoZXkgYXJlOiBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AuIFRoZXkmIzM5O3JlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXNlIGFyZSAqYWN0dWFsbHkqIHVzZWQuIFRpbWUgdG8gdHJhY2UgdGhvc2UgY2FsbCBzaXRlcyBhbmQgc2VlIGhvdyB0aGUgQlBGIGFyZW5hIGlzIGJlaW5nIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgdTY0IGNsZWFyX2xvMzIodTY0IHZhbClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY3LSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjY2ODpzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY5LVx0XHRcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk0My0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xua2VybmVsL2JwZi9hcmVuYS5jOjk0NDogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cbmtlcm5lbC9icGYvYXJlbmEuYy05NDUtICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNjE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDcxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzI6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3My19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3NC1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDc1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3Ni1cdFx0XHRcdFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDgzLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwODQ6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtfVxua2VybmVsL2JwZi9hcmVuYS5jLTEwODYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA4Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA5NjpcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTM1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEFyZW5hIEFsbG9jYXRpb24gYW5kIFJhbmdlIFRyZWUgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIHRoZWlyIHZhcmlhbnRzIGFyZSBhbGwgZWZmZWN0aXZlbHkgd3JhcHBlciBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGtmdW5jcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHRoYXQgYXJlIHVsdGltYXRlbHkgY2FsbGluZyBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AuIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IHRoZXJlIGFzIGdyb3VuZGJyZWFraW5nLCBqdXN0IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiAqd2h5KiB0aGV5JiMzOTtyZSB1c2luZyB0aGVzZSB3cmFwcGVyIGtmdW5jcy4gQXJlIHRoZXkgYWRkaW5nIGFueSBCUEYtc3BlY2lmaWMgc2VtYW50aWNzPwoKVGhlIHJlYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIG1lbnRpb24gb2YgbW9kaWZpY2F0aW9ucyB0byBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAuIFJhbmdlIHRyZWVzIGFyZSBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlIGZvciB0cmFja2luZyBtZW1vcnksIHNvIGNoYW5nZXMgdGhlcmUgYXJlIGRlZmluaXRlbHkgd29ydGggYSBkZWVwZXIgbG9vay4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGByYW5nZV90cmVlLmNgIGFuZCBkaWcgaW50byB0aG9zZSBmdW5jdGlvbnMgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY2hhbmdlcyBvbiB0aGUgb3ZlcmFsbCBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3BlY2lmaWNhbGx5IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIEJQRi4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBldmVuIGFuIGFyY2hpdGVjdHVyYWwgc2hpZnQgaW4gaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIG1lbW9yeSByYW5nZXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgY2hhbmdlZCB0byB0aGUgd2F5IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaXMgdHJhY2tlZC4gTGV04oCZcyBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhbmdlX3RyZWVfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE5LVx0cmFuZ2VfdHJlZV9pbml0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0KTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMjA6XHRlcnIgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgMCwgYXR0ci1cdTAwM2VtYXhfZW50cmllcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MjItXHRpZiAocmV0KSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIzOlx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MjQtXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyOC1cdGlmIChyZXQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1Mjk6XHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUzMC1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTcxNC1cdGlmICh1YWRkcikge1xua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcdFx0cmV0ID0gaXNfcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE2LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03Njgtb3V0Olxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcwLVx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2JwZl9hcmVuYTogZmFpbGVkIHRvIHJlc3RvcmUgZnJlZSByYW5nZSAlbGQmIzQzOyVsZCBhZnRlciBwYXJ0aWFsIGFsbG9jXFxuXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg4NS1cbmtlcm5lbC9icGYvYXJlbmEuYzo4ODY6XHRyZXQgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy04ODctXHRpZiAocmV0KSB7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTk0Nj1zdGF0aWMgaW50IGFyZW5hX3Jlc2VydmVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIHUzMiBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTY0LVx0LyogQ2Fubm90IGd1YXJkIGFscmVhZHkgYWxsb2NhdGVkIHBhZ2VzLiAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjk2NTpcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTk2Ni1cdGlmIChyZXQpIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTgwPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAxOS1cdFx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAyMDpcdFx0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxua2VybmVsL2JwZi9hcmVuYS5jLTEwMjEtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjYtICogQXQgaW5pdCB0aW1lOlxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6Mjc6ICogICByYW5nZV90cmVlX3NldChydCwgMCwgbWF4KTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMzItICogdG8gZmluZCBmcmVlIHJhbmdlIGFuZCBtYXJrIHNsb3RzIGFzIGFsbG9jYXRlZCBhbmQgbGF0ZXI6XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTM0LSAqIHRvIG1hcmsgYXMgdW5hbGxvY2F0ZWQgYWZ0ZXIgdXNlLlxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xODUtLyogSXMgdGhlIHdob2xlIHJhbmdlIHNldCA/ICovXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODY6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg3LXtcbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTgtLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE5OTppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0yMDAte1xuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oPTE2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oOjE3OmludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxODppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmgtMTktczY0IHJhbmdlX3RyZWVfZmluZChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBBcmVuYSBNYXAgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQlBGIGFyZW5hIHN0dWZmLCBhbmQgdGhlIGNvbm5lY3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIuIFRoZSBCUEYgYXJlbmEgaXMsIG9mIGNvdXJzZSwgYSBCUEYgbWFwIHR5cGUuIFdoYXQgcmVhbGx5IGdvdCBteSBhdHRlbnRpb24gaXMgaG93IGBhcmVuYV9tYXBfYWxsb2NgIGNhbGxzIGByYW5nZV90cmVlX3NldGAgd2l0aCB0aGUgYGFyZW5hLSZndDtydGAgYW5kIGBhdHRyLSZndDttYXhfZW50cmllc2AuIFNvLCBjcmVhdGluZyBvbmUgb2YgdGhlc2UgbWFwcyBpcyBkaXJlY3RseSBnb2luZyB0byB0cmlnZ2VyIHRoYXQgYHJhbmdlX3RyZWVfc2V0YCBmdW5jdGlvbi4gQW5kIGl0IGRvZXNuJiMzOTt0IHN0b3AgdGhlcmU7IGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIHdpbGwgZnVydGhlciBpbnRlcmFjdCB3aXRoIHRoYXQgYHJhbmdlX3RyZWVfY2xlYXJgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgLCBtYWtpbmcgdGhpcyBhIGxpa2VseSBhcmVhIGZvciBmdXp6aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBtYXAgaW50ZXJhY3Rpb25zIHdpdGggbWVtb3J5IGFsbG9jYXRpb24sIHRoYXQgbG9va3MgbGlrZSBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEZyb20gYSBxdWljayBnbGFuY2UsIEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIHNlZSB3aGF0IGVsc2Ugd2UgbWlnaHQgbmVlZCBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEJQRl9TWVNDQUxMIGluIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHdhaXQgYSBtaW51dGUuIGBCUEZfU1lTQ0FMTGAuLi4gaXNuJiMzOTt0IHRoYXQgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYD8gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBjbG9zZXIgdG8gdGhlIGNvcmUgQlBGIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNyZW1lbWJlcmluZyBvciBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLiBHaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBwcm9iYWJseSBiZXN0IHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSAqZXhwZWN0KiB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlcmUgaXQmIzM5O3MgKnJlZmVyZW5jZWQqIGlmIGl0JiMzOTtzIGRlZmluZWQgZWxzZXdoZXJlLiBOZWVkIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgaG9vayB3b3JrcyBpbiB0aGUgQlBGIHN1YnN5c3RlbSwgc2luY2UgdGhlIHBsYWNlbWVudCBzZWVtcyBvZGQuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTcyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgQlBGIGNvbmZpZ3VyYXRpb24uIEkga25vdyBgQlBGX1NZU0NBTExgIGlzIGRlZmluaXRlbHkgZGVmaW5lZCB3aXRoaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEdvb2QuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBteSBjdXJyZW50IHRhc2suIEkmIzM5O2xsIHF1aWNrbHkgcmV2aXNpdCBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYW55IHVuZXhwZWN0ZWQgcm9hZGJsb2NrcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTmVjZXNzYXJ5IEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVGhpcyBUYXNrKioKClJpZ2h0LCBzbyB0byBnZXQgdGhpcyB3b3JraW5nLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYC4gUHJldHR5IHN0YW5kYXJkLCB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQsIGJ1dCBhbHdheXMgZ29vZCB0byBjb25maXJtLiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgY2FuJiMzOTt0IHByb2NlZWQgd2l0aG91dCB0aGF0LgoKTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBga2VybmVsL2JwZi9hcmVuYS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHRoYW4gdG8gY2hhc2UgZG93biBhIG1pc3NpbmcgY29uZmlnIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBPdmVycmlkZXMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMsIGFuZCB0aGUgaW5pdGlhbCBjaGVjayBvZiBgYXJlbmEuY2AgeWllbGRlZCBubyBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhhdCYjMzk7cyBnb29kLCBrZWVwcyB0aGluZ3Mgc2ltcGxlLiBOb3csIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHN1YnRsZSB0aGF0IG1pZ2h0IGFmZmVjdCB0aGlzIGFyZWEgb2YgdGhlIGNvZGUsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYGtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jYC4gSXQmIzM5O3MgYSBrZXkgYXJlYSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgbHVya2luZyBpbiB0aGVyZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9yYW5nZV90cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcmFuZ2VfdHJlZS5jYCBmb3IgUmVsZXZhbnQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyB0aHJvdWdoIGByYW5nZV90cmVlLmNgLiBJdCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyLCBzbyB0aGF0JiMzOTtzIGdvb2QuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc2VlLi4uIGJhc2VkIG9uIHRoZSBuYW1lcywgYGFyZW5hX21hcF9hbGxvY2AsIGBhcmVuYV9tYXBfZnJlZWAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfd29ya2VyYCwgYHJhbmdlX3RyZWVfc2V0YCwgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBhbGwgbG9vayBsaWtlIGNhbmRpZGF0ZXMuCgpIbW0sIGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsISBTaW5jZSB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIHByb2JhYmx5IGlubGluZWQuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBpbmxpbmVkLiBBIHJlbGF0ZWQgY29uc2lkZXJhdGlvbiBjb21lcyB0byBtaW5kIOKAkyBJIHNob3VsZCBjaGVjayB0aGUga2Z1bmNzLCBhcyB0aGV5IG1heSBiZSB1c2luZyB0aGVzZSBpbnRlcm5hbCBtZXRob2RzLiBMZXQmIzM5O3MgY2hlY2s6IGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgLCBhbmQgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVgLgoKQWxzbywgdGhlIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub24tc3RhdGljLCBzbyB0aG9zZSBkZWZpbml0ZWx5IHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIGByYW5nZV90cmVlLmNgIGluIG1vcmUgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYW5nZV90cmVlX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI2LSAqIEF0IGluaXQgdGltZTpcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjI3OiAqICAgcmFuZ2VfdHJlZV9zZXQocnQsIDAsIG1heCk7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0yOC0gKiBUaGVuOlxuLS1cbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTMyLSAqIHRvIGZpbmQgZnJlZSByYW5nZSBhbmQgbWFyayBzbG90cyBhcyBhbGxvY2F0ZWQgYW5kIGxhdGVyOlxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MzM6ICogICByYW5nZV90cmVlX3NldChydCwgc3RhcnQsIGxlbik7XG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zNC0gKiB0byBtYXJrIGFzIHVuYWxsb2NhdGVkIGFmdGVyIHVzZS5cbi0tXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYz0xMzY9aW50IHJhbmdlX3RyZWVfY2xlYXIoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg1LS8qIElzIHRoZSB3aG9sZSByYW5nZSBzZXQgPyAqL1xua2VybmVsL2JwZi9yYW5nZV90cmVlLmM6MTg2OmludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4Ny17XG4tLVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTk4LS8qIFNldCB0aGUgcmFuZ2UgaW4gdGhpcyByYW5nZSB0cmVlICovXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxOTk6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKUmlnaHQsIHNvIGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCBhcmUgZGVmaW5pdGVseSBub24tc3RhdGljIG1ldGhvZHMuIFdlIGNhbiB1c2UgdGhvc2UgbWV0aG9kcyBhcyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgd2hpY2ggaXMga2V5LiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgbWFuYWdlZCB0byBiZSBjZXJ0YWluIHRoZSBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZCBjb3JyZWN0bHkuIExldCYjMzk7cyBkaWcgaW50byBgYXJlbmFfbWFwX2FsbG9jYCBhbmQgYGFyZW5hX21hcF9mcmVlYC4gVGhleSBhcmUgdGhlIGdhdGVrZWVwZXJzIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgbWVtb3J5IGxlYWtzIGFyZW4mIzM5O3QgcG9zc2libGUgd2l0aGluIHRoZSByYW5nZSB0cmVlIGltcGxlbWVudGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfbWFwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYz0yNTk9c3RhdGljIGludCBwb3B1bGF0ZV9wZ3RhYmxlX2V4Y2VwdF9wdGUoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI2NS1cbmtlcm5lbC9icGYvYXJlbmEuYzoyNjY6c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY3LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjQwPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTY0MS1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XHQubWFwX2FsbG9jID0gYXJlbmFfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9hcmVuYS5jLTY0My1cdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQXJlbmEgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGFyZW5hIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhhdCBgYXJlbmFfbWFwX2FsbG9jYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gVGhpcyBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgc2NvcGUgYW5kIG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLCB3aGljaCBzaW1wbGlmaWVzIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGV4dGVybmFsIGNhbGxzIGFyZSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZTogYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlYCwgYW5kIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYC4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCBpcyAqYWN0dWFsbHkqIG5vbi1zdGF0aWMuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgY29uZnVzaW9uLCBhbmQgYSBzaW1wbGUgdmVyaWZpY2F0aW9uIHdpbGwgc2F2ZSBtZSB0aW1lIGRvd24gdGhlIHJvYWQuIFRoaXMgY29uZmlybWF0aW9uIGlzIG15IG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYy0zOS0gKiBpbnRvIGtlcm5lbCBhbmQgdXNlciB2bWEuXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA6ICogYnBmIHByb2dyYW0gY2FuIGFsbG9jYXRlIGEgcGFnZSB2aWEgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkga2Z1bmNcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk0My0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xua2VybmVsL2JwZi9hcmVuYS5jOjk0NDogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cbmtlcm5lbC9icGYvYXJlbmEuYy05NDUtICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNjE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc0LVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzU6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc2LVx0XHRcdFx0XHQgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwODYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA4Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTExMzQ9QlRGX0tGVU5DU19TVEFSVChhcmVuYV9rZnVuY3MpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jLTExMzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhleSBhcmVuJiMzOTt0IHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBhIGZldyBzcGVjaWZpYyBvbmVzOiBgcmFuZ2VfdHJlZV9zZXRgLCBgcmFuZ2VfdHJlZV9jbGVhcmAsIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgLCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYC4gVGhlc2Ugc2VlbSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24uCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSBhcmUgYWxzbyBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgIGFuZCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZWAuIFRoZXkmIzM5O3JlICphbHNvKiBub24tc3RhdGljLiBHb3R0YSBtYWtlIHN1cmUgSSBpbmNsdWRlIHRob3NlIGluIG15IGFzc2Vzc21lbnQuIFRoaXMgaXMgaW1wb3J0YW50LgoKTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNydWNpYWwuIEFyZSBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgKmV4cG9ydGVkKiwgb3IgYXJlIHRoZXkganVzdCBub24tc3RhdGljIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGF0IGRpc3RpbmN0aW9uIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGZvciB0aGUgbmV4dCBzdGVwcyBvZiBteSBhbmFseXNpcy4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgc2NvcGUgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9yYW5nZV90cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NgoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAzMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBBcmVuYSBhbmQgUmFuZ2UgVHJlZSBDaGFuZ2VzKioKCk9rYXksIHNvIHRoZSBzeXN0ZW0gZG9lc24mIzM5O3QgZXhwb3J0IHRoZXNlIHN5bWJvbHMgZGlyZWN0bHksIGJ1dCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5ICpub24tc3RhdGljKiwgbWVhbmluZyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhleSYjMzk7cmUgdXNlZC4KCkZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIG1ha2UgdGhpcyBidWlsZCBjb3JyZWN0bHkuIFRoZSBwcmltYXJ5IG9uZSBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgZXNzZW50aWFsIGZsYWcuIEJ1dCwgaGFuZyBvbi4uLiBsZXQgbWUgZG91YmxlLWNoZWNrLiBJdCBsb29rcyBsaWtlIHRoZSBvYmplY3RzIGByYW5nZV90cmVlLm9gIGFuZCBgYXJlbmEub2AgYWxzbyBkZXBlbmQgb24gYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBiZWluZyBlbmFibGVkIGluIGFkZGl0aW9uIHRvIGBDT05GSUdfQlBGX1NZU0NBTExgLgoKUmlnaHQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbmFsaXRpZXMgYXJlIGVuYWJsZWQuCgpOb3csIGxldCBtZSBjb25kZW5zZSB0aGlzIGluZm9ybWF0aW9uIGludG8gYSB1c2FibGUgZm9ybWF0IGZvciBteSBhbmFseXNpcy4KCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLiBBYnNvbHV0ZWx5LgoqICAgKipGb2N1c1N5bWJvbHMqKjogSSBzaG91bGQgemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6CiAgICAqICAgYHJhbmdlX3RyZWVfc2V0YAogICAgKiAgIGByYW5nZV90cmVlX2NsZWFyYAogICAgKiAgIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgCiAgICAqICAgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYAogICAgKiAgIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZWAKICAgICogICBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBFbmFibGUgYEJQRl9TWVNDQUxMYC4KCk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSBsb2dpYyBpbiBhIHNpZ25pZmljYW50IHdheS4gVGhlIGdvYWwgaXMgcHJlLWFsbG9jYXRpbmcgbWVtb3J5LCB3aGljaCBwcmV2ZW50cyBwb3RlbnRpYWxseSBkaXNhc3Ryb3VzIHVucmVjb3ZlcmFibGUgc3RhdGVzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYCBvcGVyYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgY2hhbmdlIGRpcmVjdGx5IGFmZmVjdHMgQlBGIGFyZW5hIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZywgZnVuY3Rpb25hbGl0aWVzIHRoYXQgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIHBhcmFtb3VudCB0byB2YWxpZGF0ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByZS1hbGxvY2F0aW9uIHN0cmF0ZWd5IHdvcmtzIHJlbGlhYmx5IHVuZGVyIHN0cmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmFuZ2VfdHJlZV9zZXQmIzM0OywKICAgICYjMzQ7cmFuZ2VfdHJlZV9jbGVhciYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JhbmdlX3RyZWVfc2V0JiMzNDssCiAgICAmIzM0O3JhbmdlX3RyZWVfY2xlYXImIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBhbmQgcmFuZ2UgdHJlZSBsb2dpYyB0byBwcmUtYWxsb2NhdGUgbWVtb3J5IGJlZm9yZSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUsIHByZXZlbnRpbmcgdW5yZWNvdmVyYWJsZSBzdGF0ZXMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscyBkdXJpbmcgYHJhbmdlX3RyZWVfc2V0YCBvciBgcmFuZ2VfdHJlZV9jbGVhcmAuIFRoaXMgYWZmZWN0cyBCUEYgYXJlbmEgcGFnZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzIGFuZCBtYXAgb3BlcmF0aW9ucy4gRnV6emluZyB0aGVzZSBwYXRocyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgZXJyb3IgaGFuZGxpbmcgaW4gQlBGIGFyZW5hJiMzOTtzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgcHJlLWFsbG9jYXRlcyBhIGByYW5nZV9ub2RlYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgdHJlZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMgKGUuZy4sIHJldHVybmluZyBgLUVOT01FTWApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgaW4gYGFyZW5hLmNgLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgIGhhcyBpdHMgZmllbGRzIChgcm5fc3RhcnRgLCBgcm5fbGFzdGApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGluc2VydGVkIGludG8gdGhlIHRyZWUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGluY29uc2lzdGVudCBpbnRlcm5hbCBzdGF0ZSwgbWVtb3J5IGxlYWtzLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIHJhbmdlIHRyZWUsIGFsbCBvZiB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzk0N2RiNzk0MzFmNGRmYjA5MGM5OGM0YmE3N2NkYmVmNDRjMzExOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE1OjM3OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jCmluZGV4IDU1NWVlMjUzMWVmOTguLmQ1N2EwYjYxNzUyNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FyZW5hLmMKQEAgLTc2Niw3ICYjNDM7NzY2LDkgQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQKIAlicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpOwogCXJldHVybiBjbGVhcl9sbzMyKGFyZW5hLSZndDt1c2VyX3ZtX3N0YXJ0KSAmIzQzOyB1YWRkcjMyOwogb3V0OgotCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTsKJiM0MzsJaWYgKHJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKSkKJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDticGZfYXJlbmE6IGZhaWxlZCB0byByZXN0b3JlIGZyZWUgcmFuZ2UgJWxkJiM0MzslbGQgYWZ0ZXIgcGFydGlhbCBhbGxvY1xuJiMzNDssCiYjNDM7CQkJCSAgICBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTsKIAlyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKTsKIAlpZiAobWFwcGVkKSB7CiAJCWZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCAmIzQzOyB1YWRkcjMyLCBtYXBwZWQgJmx0OyZsdDsgUEFHRV9TSElGVCk7CkBAIC04ODEsNyAmIzQzOzg4MywxMiBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LAogCWlmIChyZXQpCiAJCWdvdG8gZGVmZXI7CiAKLQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKJiM0MzsJcmV0ID0gcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwomIzQzOwkJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJaW5pdF9sbGlzdF9oZWFkKCZhbXA7ZnJlZV9wYWdlcyk7CiAJY2RhdGEuYXJlbmEgPSBhcmVuYTsKQEAgLTEwMDQsMTEgJiM0MzsxMDExLDE4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJa2FkZHIgPSBhcmVuYV92bV9zdGFydCAmIzQzOyBzLSZndDt1YWRkcjsKIAkJcGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCBzLSZndDt1YWRkcik7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXQKJiM0MzsJCSAqIGlmIHRoZSByYW5nZSB0cmVlIHVwZGF0ZSBmYWlscyB3ZSBsZWF2ZSB0aGUgUFRFcwomIzQzOwkJICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzCiYjNDM7CQkgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCBwZ29mZiwgcGFnZV9jbnQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQkvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHBhZ2VzIGluIGZyZWVfcGFnZXMgbGxpc3QgKi8KIAkJYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBwYWdlX2NudCAmbHQ7Jmx0OyBQQUdFX1NISUZULAogCQkJCQkgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCAmYW1wO2NkYXRhKTsKLQotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKIAl9CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmMKaW5kZXggMmYyODg4NmYzZmY3NS4uNTQwNTViMWZlNTQxMiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmMKQEAgLTE0MywxNiAmIzQzOzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIAkJaWYgKHJuLSZndDtybl9zdGFydCAmbHQ7IHN0YXJ0ICZhbXA7JmFtcDsgcm4tJmd0O3JuX2xhc3QgJmd0OyBsYXN0KSB7CiAJCQl1MzIgb2xkX2xhc3QgPSBybi0mZ3Q7cm5fbGFzdDsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogUHJlLWFsbG9jYXRlIHRoZSByaWdodC1oYWxmIG5vZGUgYmVmb3JlIG1vZGlmeWluZwomIzQzOwkJCSAqIHRoZSB0cmVlLiBJZiBhbGxvY2F0aW9uIGZhaWxzIHdlIHJldHVybiAtRU5PTUVNCiYjNDM7CQkJICogd2l0aG91dCBhbHRlcmluZyB0aGUgcmFuZ2UgdHJlZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQluZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLAomIzQzOwkJCQkJCV9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7CiYjNDM7CQkJaWYgKCFuZXdfcm4pCiYjNDM7CQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwogCQkJLyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovCiAJCQlyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTsKIAkJCXJuLSZndDtybl9sYXN0ID0gc3RhcnQgLSAxOwogCQkJcmFuZ2VfaXRfaW5zZXJ0KHJuLCBydCk7CiAKLQkJCS8qIEFkZCBhIHJhbmdlICovCi0JCQluZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULAotCQkJCQkJTlVNQV9OT19OT0RFKTsKLQkJCWlmICghbmV3X3JuKQotCQkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJCS8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovCiAJCQluZXdfcm4tJmd0O3JuX3N0YXJ0ID0gbGFzdCAmIzQzOyAxOwogCQkJbmV3X3JuLSZndDtybl9sYXN0ID0gb2xkX2xhc3Q7CiAJCQlyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7CkBAIC0xOTMsNiAmIzQzOzE5OSw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIHsKIAl1MzIgbGFzdCA9IHN0YXJ0ICYjNDM7IGxlbiAtIDE7CiYjNDM7CXN0cnVjdCByYW5nZV9ub2RlICpuZXdfcm4gPSBOVUxMOwogCXN0cnVjdCByYW5nZV9ub2RlICpyaWdodDsKIAlzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbGVmdDsKIAlpbnQgZXJyOwpAQCAtMjAyLDIwICYjNDM7MjA5LDQwIEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbikKIAlpZiAobGVmdCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX3N0YXJ0ICZsdDs9IHN0YXJ0ICZhbXA7JmFtcDsgbGVmdC0mZ3Q7cm5fbGFzdCAmZ3Q7PSBsYXN0KQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlCiYjNDM7CSAqIHJhbmdlIG9uIGVpdGhlciBzaWRlLiAgVGhpcyBpcyBrbm93biBiZWZvcmUgY2xlYXJpbmc6IGFueSByYW5nZQomIzQzOwkgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCAmIzQzOyAxIHN1cnZpdmVzIHRoZSBjbGVhciBhcyBhbiBhZGphY2VudAomIzQzOwkgKiBwaWVjZS4gIEFsbG9jYXRlIG9ubHkgaW4gdGhhdCBjYXNlLCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlLCBzbwomIzQzOwkgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWQKJiM0MzsJICovCiYjNDM7CWxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7CiYjNDM7CXJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpOwomIzQzOwlpZiAoIWxlZnQgJmFtcDsmYW1wOyAhcmlnaHQpIHsKJiM0MzsJCW5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksCiYjNDM7CQkJCQlfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpOwomIzQzOwkJaWYgKCFuZXdfcm4pCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAkvKiBDbGVhciBvdXQgZXZlcnl0aGluZyBpbiB0aGUgcmFuZ2Ugd2Ugd2FudCB0byBzZXQuICovCiAJZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfbmV3OwogCiAJLyogRG8gd2UgaGF2ZSBhIGxlZnQtYWRqYWNlbnQgcmFuZ2UgPyAqLwogCWxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7Ci0JaWYgKGxlZnQgJmFtcDsmYW1wOyBsZWZ0LSZndDtybl9sYXN0ICYjNDM7IDEgIT0gc3RhcnQpCi0JCXJldHVybiAtRUZBVUxUOwomIzQzOwlpZiAobGVmdCAmYW1wOyZhbXA7IGxlZnQtJmd0O3JuX2xhc3QgJiM0MzsgMSAhPSBzdGFydCkgewomIzQzOwkJZXJyID0gLUVGQVVMVDsKJiM0MzsJCWdvdG8gb3V0X2ZyZWVfbmV3OwomIzQzOwl9CiAKIAkvKiBEbyB3ZSBoYXZlIGEgcmlnaHQtYWRqYWNlbnQgcmFuZ2UgPyAqLwogCXJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCAmIzQzOyAxLCBsYXN0ICYjNDM7IDEpOwotCWlmIChyaWdodCAmYW1wOyZhbXA7IHJpZ2h0LSZndDtybl9zdGFydCAhPSBsYXN0ICYjNDM7IDEpCi0JCXJldHVybiAtRUZBVUxUOwomIzQzOwlpZiAocmlnaHQgJmFtcDsmYW1wOyByaWdodC0mZ3Q7cm5fc3RhcnQgIT0gbGFzdCAmIzQzOyAxKSB7CiYjNDM7CQllcnIgPSAtRUZBVUxUOwomIzQzOwkJZ290byBvdXRfZnJlZV9uZXc7CiYjNDM7CX0KIAogCWlmIChsZWZ0ICZhbXA7JmFtcDsgcmlnaHQpIHsKIAkJLyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi8KQEAgLTIzNSwxNCAmIzQzOzI2MiwxNiBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pCiAJCXJpZ2h0LSZndDtybl9zdGFydCA9IHN0YXJ0OwogCQlyYW5nZV9pdF9pbnNlcnQocmlnaHQsIHJ0KTsKIAl9IGVsc2UgewotCQlsZWZ0ID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTsKLQkJaWYgKCFsZWZ0KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWxlZnQtJmd0O3JuX3N0YXJ0ID0gc3RhcnQ7Ci0JCWxlZnQtJmd0O3JuX2xhc3QgPSBsYXN0OwotCQlyYW5nZV9pdF9pbnNlcnQobGVmdCwgcnQpOwomIzQzOwkJLyogTm8gYWRqYWNlbnQgcmFuZ2VzOyB1c2UgdGhlIHByZS1hbGxvY2F0ZWQgbm9kZSAqLwomIzQzOwkJbmV3X3JuLSZndDtybl9zdGFydCA9IHN0YXJ0OwomIzQzOwkJbmV3X3JuLSZndDtybl9sYXN0ID0gbGFzdDsKJiM0MzsJCXJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTsKIAl9CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7b3V0X2ZyZWVfbmV3OgomIzQzOwlrZnJlZV9ub2xvY2sobmV3X3JuKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MAoJCQkJCQkJb3V0cHV0OiAyNDIKCQkJCQkJCXRob3VnaHRzOiA2NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQ2hlY2s6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZm9jdXMgaGVyZSBpcyBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gdGhlIGByYW5nZV90cmVlX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHByZS1hbGxvY2F0aW5nIGEgYHJhbmdlX25vZGVgIHdpdGhpbiBgcmFuZ2VfdHJlZV9zZXRgIGJlZm9yZSBhY3R1YWxseSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUuIFRoaXMgaXMgc21hcnQsIGFzIGl0IGVuc3VyZXMgdGhhdCBpZiB0aGUgYWxsb2NhdGlvbiAobGlrZWx5IGEgYGttYWxsb2NgIHZhcmlhbnQpIGZhaWxzLCB0aGUgdHJlZSBpc24mIzM5O3QgbGVmdCBpbiBhIHBhcnRpYWxseSBtb2RpZmllZCwgaW5jb25zaXN0ZW50IHN0YXRlLiBUaGUgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCBmdW5jdGlvbnMgbm93IGFsc28gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgLCB3aGljaCBtYWtlcyBzZW5zZS4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCBhZnRlciBsb29raW5nIGNsb3NlbHksIGl0IGRvZXNuJiMzOTt0IHNlZW0gbGlrZSB0aGV5IGRvLiBUaGlzIGlzIGp1c3QgYWJvdXQgaGFuZGxpbmcgdGhlIGZhaWx1cmUgb2YgYSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYSByYW5nZSB0cmVlLCB3aGljaCB0cmFja3MgZnJlZSBhbmQgdXNlZCBtZW1vcnkgcmFuZ2VzLCBub3Qgc29tZSBuZXcgc3RydWN0dXJlIHRoYXQmIzM5O3MgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIGByYW5nZV90cmVlX3NldGAgZmFpbHMsIGl0IHNpbXBseSByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIHRyZWUgcmVtYWlucyB1bnRvdWNoZWQuIE5vIGRhdGEgaXMgbGVha2VkLgoKVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBtZW1vcnkgbGVha3Mgb3IgaW5jb25zaXN0ZW5jaWVzIHRoYXQgY291bGQgaGFwcGVuIGlmIHRoZSBga21hbGxvY19ub2xvY2tgIGNhbGwgaW4gYHJhbmdlX3RyZWVfc2V0YCBmYWlscy4gVGhpbmdzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgYSBtZW1vcnkgbGVhayBjb3VsZCBhcmlzZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQgYnV0IHRoZW4gdGhlIHRyZWUgd2FzIHBhcnRpYWxseSBtb2RpZmllZC4gS0FTQU4gb3Igc3RhbmRhcmQgdGVzdGluZyBtaWdodCBmbGFnIHRoZSBzdGF0ZSBpbmNvbnNpc3RlbmN5LCBidXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYWxsb2NhdGlvbi4gYHJhbmdlX3RyZWVfc2V0YCBpcyB1c2luZyBga21hbGxvY19ub2xvY2tgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhpcyBpcyBhIEJQRi1zcGVjaWZpYyB3cmFwcGVyIG9yIG5vdC4gT2theSwgaXQmIzM5O3MganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBga21hbGxvY2AgZmFtaWx5LiBSZWdhcmRsZXNzLCBgbmV3X3JuYCwgdGhlIGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAsIGhhcyBpdHMgYHJuX3N0YXJ0YCBhbmQgYHJuX2xhc3RgIGZpZWxkcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpdCYjMzk7cyBpbnNlcnRlZC4gU28sIHdlIGhhdmU6CgpgYGBjCgkJbmV3X3JuLSZndDtybl9zdGFydCA9IHN0YXJ0OwoJCW5ld19ybi0mZ3Q7cm5fbGFzdCA9IGxhc3Q7CgkJcmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpOwpgYGAKCk5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBiZWluZyByZWFkIGZyb20uIE5vIHByb2JsZW0uCgpTbywgSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcm9idXN0IGVycm9yIGhhbmRsaW5nIGFyb3VuZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBpbiB0aGUgQlBGIGFyZW5hJiMzOTtzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyBhbmQgaW1wcm92aW5nIHN0YWJpbGl0eS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBkb2VzbiYjMzk7dCBsZWFrIGFueSBpbmZvcm1hdGlvbiwgYW5kIGRvZXNuJiMzOTt0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUga2luZHMgb2YgYnVncyB0aGF0IGl0JiMzOTtzIHByZXZlbnRpbmcsIGxpa2UgbWVtb3J5IGxlYWtzLCBpbmNvbnNpc3RlbmNpZXMsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgYXJlIHRoaW5ncyB0aGF0IEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgc2hvdWxkIGNhdGNoLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSByZWFzb25pbmcgaXMgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEmIzM5O3MgcmFuZ2UgdHJlZSBvcGVyYXRpb25zIChgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmApLiBJdCBwcmUtYWxsb2NhdGVzIGEgYHJhbmdlX25vZGVgIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUgdG8gcHJldmVudCBsZWF2aW5nIHRoZSB0cmVlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyAoZS5nLiwgcmV0dXJuaW5nIGAtRU5PTUVNYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJhbmdlX3RyZWVfc2V0YCBpbiBgYXJlbmEuY2AuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIEJQRiBhcmVuYSYjMzk7cyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IHByZS1hbGxvY2F0ZXMgYSBgcmFuZ2Vfbm9kZWAgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIHRyZWUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIChlLmcuLCByZXR1cm5pbmcgYC1FTk9NRU1gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgIGluIGBhcmVuYS5jYC5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3bHkgYWxsb2NhdGVkIGByYW5nZV9ub2RlYCBoYXMgaXRzIGZpZWxkcyAoYHJuX3N0YXJ0YCwgYHJuX2xhc3RgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBpbmNvbnNpc3RlbnQgaW50ZXJuYWwgc3RhdGUsIG1lbW9yeSBsZWFrcywgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGlzc3VlcyByZXN1bHRpbmcgZnJvbSBhIGNvcnJ1cHRlZCByYW5nZSB0cmVlLCBhbGwgb2Ygd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjE4LjgwNjIyNTU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5NzczMTAzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IHByZS1hbGxvY2F0ZXMgYSBgcmFuZ2Vfbm9kZWAgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIHRyZWUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIChlLmcuLCByZXR1cm5pbmcgYC1FTk9NRU1gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgIGluIGBhcmVuYS5jYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgIGhhcyBpdHMgZmllbGRzIChgcm5fc3RhcnRgLCBgcm5fbGFzdGApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGluc2VydGVkIGludG8gdGhlIHRyZWUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGluY29uc2lzdGVudCBpbnRlcm5hbCBzdGF0ZSwgbWVtb3J5IGxlYWtzLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIHJhbmdlIHRyZWUsIGFsbCBvZiB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzoxOC44MDYyMzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ2NDQ5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOTQ3ZGI3OTQzMWY0ZGZiMDkwYzk4YzRiYTc3Y2RiZWY0NGMzMTE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDE1OjM3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbmluZGV4IDU1NWVlMjUzMWVmOTguLmQ1N2EwYjYxNzUyNTggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXFxuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuQEAgLTc2Niw3ICs3NjYsOSBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxcbiBcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbiBcXHRyZXR1cm4gY2xlYXJfbG8zMihhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgKyB1YWRkcjMyO1xcbiBvdXQ6XFxuLVxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmICsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7XFxuK1xcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpKVxcbitcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJicGZfYXJlbmE6IGZhaWxlZCB0byByZXN0b3JlIGZyZWUgcmFuZ2UgJWxkKyVsZCBhZnRlciBwYXJ0aWFsIGFsbG9jXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKG1hcHBlZCkge1xcbiBcXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuQEAgLTg4MSw3ICs4ODMsMTIgQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBkZWZlcjtcXG4gXFxuLVxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxuK1xcdHJldCA9IHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNmZyZWVfcGFnZXMpO1xcbiBcXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xcbkBAIC0xMDA0LDExICsxMDExLDE4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0a2FkZHIgPSBhcmVuYV92bV9zdGFydCArIHMtXFx1MDAzZXVhZGRyO1xcbiBcXHRcXHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtXFx1MDAzZXVhZGRyKTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1hcmsgdGhlIHJhbmdlIGFzIGZyZWUgYmVmb3JlIGNsZWFyaW5nIFBURXMgc28gdGhhdFxcbitcXHRcXHQgKiBpZiB0aGUgcmFuZ2UgdHJlZSB1cGRhdGUgZmFpbHMgd2UgbGVhdmUgdGhlIFBURXNcXG4rXFx0XFx0ICogaW50YWN0LCBhdm9pZGluZyBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIHdoZXJlIHBhZ2VzXFxuK1xcdFxcdCAqIGFyZSBmcmVlZCBidXQgdGhlIGFyZW5hIGZyZWUgdHJlZSBkb2VzIG5vdCB0cmFjayB0aGVtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovXFxuIFxcdFxcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcXHUwMDI2Y2RhdGEpO1xcbi1cXG4tXFx0XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG4gXFx0fVxcbiBcXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xcbmluZGV4IDJmMjg4ODZmM2ZmNzUuLjU0MDU1YjFmZTU0MTIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcXG4rKysgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xcbkBAIC0xNDMsMTYgKzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4gXFx0XFx0aWYgKHJuLVxcdTAwM2Vybl9zdGFydCBcXHUwMDNjIHN0YXJ0IFxcdTAwMjZcXHUwMDI2IHJuLVxcdTAwM2Vybl9sYXN0IFxcdTAwM2UgbGFzdCkge1xcbiBcXHRcXHRcXHR1MzIgb2xkX2xhc3QgPSBybi1cXHUwMDNlcm5fbGFzdDtcXG4gXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcXG4rXFx0XFx0XFx0ICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU1cXG4rXFx0XFx0XFx0ICogd2l0aG91dCBhbHRlcmluZyB0aGUgcmFuZ2UgdHJlZS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XFxuK1xcdFxcdFxcdGlmICghbmV3X3JuKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuIFxcdFxcdFxcdC8qIE92ZXJsYXBzIHdpdGggdGhlIGVudGlyZSBjbGVhcmluZyByYW5nZSAqL1xcbiBcXHRcXHRcXHRyYW5nZV9pdF9yZW1vdmUocm4sIHJ0KTtcXG4gXFx0XFx0XFx0cm4tXFx1MDAzZXJuX2xhc3QgPSBzdGFydCAtIDE7XFxuIFxcdFxcdFxcdHJhbmdlX2l0X2luc2VydChybiwgcnQpO1xcbiBcXG4tXFx0XFx0XFx0LyogQWRkIGEgcmFuZ2UgKi9cXG4tXFx0XFx0XFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgX19HRlBfQUNDT1VOVCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0TlVNQV9OT19OT0RFKTtcXG4tXFx0XFx0XFx0aWYgKCFuZXdfcm4pXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHQvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqL1xcbiBcXHRcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX3N0YXJ0ID0gbGFzdCArIDE7XFxuIFxcdFxcdFxcdG5ld19ybi1cXHUwMDNlcm5fbGFzdCA9IG9sZF9sYXN0O1xcbiBcXHRcXHRcXHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XFxuQEAgLTE5Myw2ICsxOTksNyBAQCBpbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxuIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4ge1xcbiBcXHR1MzIgbGFzdCA9IHN0YXJ0ICsgbGVuIC0gMTtcXG4rXFx0c3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7XFxuIFxcdHN0cnVjdCByYW5nZV9ub2RlICpyaWdodDtcXG4gXFx0c3RydWN0IHJhbmdlX25vZGUgKmxlZnQ7XFxuIFxcdGludCBlcnI7XFxuQEAgLTIwMiwyMCArMjA5LDQwIEBAIGludCByYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4gXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fc3RhcnQgXFx1MDAzYz0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fbGFzdCBcXHUwMDNlPSBsYXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEEgbmV3IG5vZGUgaXMgbmVlZGVkIG9ubHkgd2hlbiB0aGUgcmFuZ2UgaGFzIG5vIGFkamFjZW50IGZyZWVcXG4rXFx0ICogcmFuZ2Ugb24gZWl0aGVyIHNpZGUuICBUaGlzIGlzIGtub3duIGJlZm9yZSBjbGVhcmluZzogYW55IHJhbmdlXFxuK1xcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnRcXG4rXFx0ICogcGllY2UuICBBbGxvY2F0ZSBvbmx5IGluIHRoYXQgY2FzZSwgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSwgc29cXG4rXFx0ICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkXFxuK1xcdCAqL1xcbitcXHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xcbitcXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XFxuK1xcdGlmICghbGVmdCBcXHUwMDI2XFx1MDAyNiAhcmlnaHQpIHtcXG4rXFx0XFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0XFx0X19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcXG4rXFx0XFx0aWYgKCFuZXdfcm4pXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBDbGVhciBvdXQgZXZlcnl0aGluZyBpbiB0aGUgcmFuZ2Ugd2Ugd2FudCB0byBzZXQuICovXFxuIFxcdGVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlX25ldztcXG4gXFxuIFxcdC8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi9cXG4gXFx0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcXG4tXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgbGVmdC1cXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpXFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRpZiAobGVmdCBcXHUwMDI2XFx1MDAyNiBsZWZ0LVxcdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydCkge1xcbitcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlX25ldztcXG4rXFx0fVxcbiBcXG4gXFx0LyogRG8gd2UgaGF2ZSBhIHJpZ2h0LWFkamFjZW50IHJhbmdlID8gKi9cXG4gXFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICsgMSwgbGFzdCArIDEpO1xcbi1cXHRpZiAocmlnaHQgXFx1MDAyNlxcdTAwMjYgcmlnaHQtXFx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKHJpZ2h0IFxcdTAwMjZcXHUwMDI2IHJpZ2h0LVxcdTAwM2Vybl9zdGFydCAhPSBsYXN0ICsgMSkge1xcbitcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlX25ldztcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGxlZnQgXFx1MDAyNlxcdTAwMjYgcmlnaHQpIHtcXG4gXFx0XFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cXG5AQCAtMjM1LDE0ICsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbiBcXHRcXHRyaWdodC1cXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcXG4gXFx0XFx0cmFuZ2VfaXRfaW5zZXJ0KHJpZ2h0LCBydCk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xcbi1cXHRcXHRpZiAoIWxlZnQpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHRsZWZ0LVxcdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xcbi1cXHRcXHRsZWZ0LVxcdTAwM2Vybl9sYXN0ID0gbGFzdDtcXG4tXFx0XFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcXG4rXFx0XFx0LyogTm8gYWRqYWNlbnQgcmFuZ2VzOyB1c2UgdGhlIHByZS1hbGxvY2F0ZWQgbm9kZSAqL1xcbitcXHRcXHRuZXdfcm4tXFx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdG5ld19ybi1cXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XFxuK1xcdFxcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mcmVlX25ldzpcXG4rXFx0a2ZyZWVfbm9sb2NrKG5ld19ybik7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6MTkuMjIxNDk1OTU3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ5NzAxMTQ0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTQ3ZGI3OTQzMWY0ZGZiMDkwYzk4YzRiYTc3Y2RiZWY0NGMzMTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTU6Mzc6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDU1NWVlMjUzMWVmOTguLmQ1N2EwYjYxNzUyNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTc2Niw3ICs3NjYsOSBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICsgdWFkZHIzMjtcbiBvdXQ6XG4tXHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcbitcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgKyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKSlcbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcImJwZl9hcmVuYTogZmFpbGVkIHRvIHJlc3RvcmUgZnJlZSByYW5nZSAlbGQrJWxkIGFmdGVyIHBhcnRpYWwgYWxsb2NcXG5cIixcbitcdFx0XHRcdCAgICBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4gXHRpZiAobWFwcGVkKSB7XG4gXHRcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5AQCAtODgxLDcgKzg4MywxMiBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkZWZlcjtcbiBcbi1cdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuK1x0cmV0ID0gcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuK1x0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4gXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuQEAgLTEwMDQsMTEgKzEwMTEsMTggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRrYWRkciA9IGFyZW5hX3ZtX3N0YXJ0ICsgcy1cdTAwM2V1YWRkcjtcbiBcdFx0cGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCBzLVx1MDAzZXVhZGRyKTtcbiBcbitcdFx0LypcbitcdFx0ICogTWFyayB0aGUgcmFuZ2UgYXMgZnJlZSBiZWZvcmUgY2xlYXJpbmcgUFRFcyBzbyB0aGF0XG4rXHRcdCAqIGlmIHRoZSByYW5nZSB0cmVlIHVwZGF0ZSBmYWlscyB3ZSBsZWF2ZSB0aGUgUFRFc1xuK1x0XHQgKiBpbnRhY3QsIGF2b2lkaW5nIGFuIHVucmVjb3ZlcmFibGUgc3RhdGUgd2hlcmUgcGFnZXNcbitcdFx0ICogYXJlIGZyZWVkIGJ1dCB0aGUgYXJlbmEgZnJlZSB0cmVlIGRvZXMgbm90IHRyYWNrIHRoZW0uXG4rXHRcdCAqL1xuK1x0XHRpZiAocmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4gXHRcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3QgcGFnZXMgaW4gZnJlZV9wYWdlcyBsbGlzdCAqL1xuIFx0XHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXHUwMDI2Y2RhdGEpO1xuLVxuLVx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbiBcdH1cbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbmluZGV4IDJmMjg4ODZmM2ZmNzUuLjU0MDU1YjFmZTU0MTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuKysrIGIva2VybmVsL2JwZi9yYW5nZV90cmVlLmNcbkBAIC0xNDMsMTYgKzE0MywyMiBAQCBpbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBcdFx0aWYgKHJuLVx1MDAzZXJuX3N0YXJ0IFx1MDAzYyBzdGFydCBcdTAwMjZcdTAwMjYgcm4tXHUwMDNlcm5fbGFzdCBcdTAwM2UgbGFzdCkge1xuIFx0XHRcdHUzMiBvbGRfbGFzdCA9IHJuLVx1MDAzZXJuX2xhc3Q7XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBQcmUtYWxsb2NhdGUgdGhlIHJpZ2h0LWhhbGYgbm9kZSBiZWZvcmUgbW9kaWZ5aW5nXG4rXHRcdFx0ICogdGhlIHRyZWUuIElmIGFsbG9jYXRpb24gZmFpbHMgd2UgcmV0dXJuIC1FTk9NRU1cbitcdFx0XHQgKiB3aXRob3V0IGFsdGVyaW5nIHRoZSByYW5nZSB0cmVlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4rXHRcdFx0XHRcdFx0X19HRlBfQUNDT1VOVCwgTlVNQV9OT19OT0RFKTtcbitcdFx0XHRpZiAoIW5ld19ybilcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuIFx0XHRcdC8qIE92ZXJsYXBzIHdpdGggdGhlIGVudGlyZSBjbGVhcmluZyByYW5nZSAqL1xuIFx0XHRcdHJhbmdlX2l0X3JlbW92ZShybiwgcnQpO1xuIFx0XHRcdHJuLVx1MDAzZXJuX2xhc3QgPSBzdGFydCAtIDE7XG4gXHRcdFx0cmFuZ2VfaXRfaW5zZXJ0KHJuLCBydCk7XG4gXG4tXHRcdFx0LyogQWRkIGEgcmFuZ2UgKi9cbi1cdFx0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULFxuLVx0XHRcdFx0XHRcdE5VTUFfTk9fTk9ERSk7XG4tXHRcdFx0aWYgKCFuZXdfcm4pXG4tXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHQvKiBBZGQgcmlnaHQtaGFsZiByYW5nZSAqL1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IGxhc3QgKyAxO1xuIFx0XHRcdG5ld19ybi1cdTAwM2Vybl9sYXN0ID0gb2xkX2xhc3Q7XG4gXHRcdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuQEAgLTE5Myw2ICsxOTksNyBAQCBpbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIHtcbiBcdHUzMiBsYXN0ID0gc3RhcnQgKyBsZW4gLSAxO1xuK1x0c3RydWN0IHJhbmdlX25vZGUgKm5ld19ybiA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmlnaHQ7XG4gXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbGVmdDtcbiBcdGludCBlcnI7XG5AQCAtMjAyLDIwICsyMDksNDAgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fc3RhcnQgXHUwMDNjPSBzdGFydCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0IFx1MDAzZT0gbGFzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHQvKlxuK1x0ICogQSBuZXcgbm9kZSBpcyBuZWVkZWQgb25seSB3aGVuIHRoZSByYW5nZSBoYXMgbm8gYWRqYWNlbnQgZnJlZVxuK1x0ICogcmFuZ2Ugb24gZWl0aGVyIHNpZGUuICBUaGlzIGlzIGtub3duIGJlZm9yZSBjbGVhcmluZzogYW55IHJhbmdlXG4rXHQgKiBjb3ZlcmluZyBzdGFydCAtIDEgb3IgbGFzdCArIDEgc3Vydml2ZXMgdGhlIGNsZWFyIGFzIGFuIGFkamFjZW50XG4rXHQgKiBwaWVjZS4gIEFsbG9jYXRlIG9ubHkgaW4gdGhhdCBjYXNlLCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlLCBzb1xuK1x0ICogYSBmYWlsdXJlIGxlYXZlcyB0aGUgcmFuZ2UgdHJlZSB1bm1vZGlmaWVkXG4rXHQgKi9cbitcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XG4rXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XG4rXHRpZiAoIWxlZnQgXHUwMDI2XHUwMDI2ICFyaWdodCkge1xuK1x0XHRuZXdfcm4gPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLFxuK1x0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuK1x0XHRpZiAoIW5ld19ybilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbiBcdC8qIENsZWFyIG91dCBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3ZSB3YW50IHRvIHNldC4gKi9cbiBcdGVyciA9IHJhbmdlX3RyZWVfY2xlYXIocnQsIHN0YXJ0LCBsZW4pO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgbGVmdC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRsZWZ0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgc3RhcnQgLSAxLCBzdGFydCAtIDEpO1xuLVx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpXG4tXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IGxlZnQtXHUwMDNlcm5fbGFzdCArIDEgIT0gc3RhcnQpIHtcbitcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4rXHR9XG4gXG4gXHQvKiBEbyB3ZSBoYXZlIGEgcmlnaHQtYWRqYWNlbnQgcmFuZ2UgPyAqL1xuIFx0cmlnaHQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBsYXN0ICsgMSwgbGFzdCArIDEpO1xuLVx0aWYgKHJpZ2h0IFx1MDAyNlx1MDAyNiByaWdodC1cdTAwM2Vybl9zdGFydCAhPSBsYXN0ICsgMSlcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKSB7XG4rXHRcdGVyciA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gb3V0X2ZyZWVfbmV3O1xuK1x0fVxuIFxuIFx0aWYgKGxlZnQgXHUwMDI2XHUwMDI2IHJpZ2h0KSB7XG4gXHRcdC8qIENvbWJpbmUgbGVmdCBhbmQgcmlnaHQgYWRqYWNlbnQgcmFuZ2VzICovXG5AQCAtMjM1LDE0ICsyNjIsMTYgQEAgaW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0XHRyaWdodC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuIFx0XHRyYW5nZV9pdF9pbnNlcnQocmlnaHQsIHJ0KTtcbiBcdH0gZWxzZSB7XG4tXHRcdGxlZnQgPSBrbWFsbG9jX25vbG9jayhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuLVx0XHRpZiAoIWxlZnQpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdGxlZnQtXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbi1cdFx0bGVmdC1cdTAwM2Vybl9sYXN0ID0gbGFzdDtcbi1cdFx0cmFuZ2VfaXRfaW5zZXJ0KGxlZnQsIHJ0KTtcbitcdFx0LyogTm8gYWRqYWNlbnQgcmFuZ2VzOyB1c2UgdGhlIHByZS1hbGxvY2F0ZWQgbm9kZSAqL1xuK1x0XHRuZXdfcm4tXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcbitcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuK1x0XHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbitcbitvdXRfZnJlZV9uZXc6XG4rXHRrZnJlZV9ub2xvY2sobmV3X3JuKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgcmFuZ2VfdHJlZV9kZXN0cm95KHN0cnVjdCByYW5nZV90cmVlICpydClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjE5LjIyMTQ5NzA0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTI0MDk0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIEFyZW5hIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jYC4gSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBlcnJvciBoYW5kbGluZyB3aXRoIHRoZSBgcmFuZ2VfdHJlZV9zZXRgIGNhbGxzIHdpdGhpbiBgYXJlbmEuY2AsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCdzIGFib3V0IHByZS1hbGxvY2F0aW5nIG1lbW9yeSBpbiBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgaW4gYHJhbmdlX3RyZWUuY2AgdG8gcHJldmVudCBpbi1wbGFjZSBtb2RpZmljYXRpb25zIGlmIGFsbG9jYXRpb24gZmFpbHMsIHJldHVybmluZyBgLUVOT01FTWAgaW5zdGVhZC4gVGhhdCdzIGEgZ29vZCBhcHByb2FjaCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gYSBjb2RlcGF0aCB3b3J0aCBmdXp6aW5nPyBUaGUgQlBGIGFyZW5hIGlzIGEgcmVsYXRpdmVseSByZWNlbnQgYWRkaXRpb24sIHdoaWNoIGlzIHByb21pc2luZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSBzaW5jZSBpdCBtYXkgYmUgbGVzcyB3ZWxsLXRlc3RlZC4gR2l2ZW4gdGhpcyBwcmUtYWxsb2NhdGlvbiBzdHJhdGVneSwgZnV6emluZyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGluIHRoZSBCUEYgYXJlbmEgbG9va3MgbGlrZSBhIGdvb2QgdGFyZ2V0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gSSdsbCB0YWtlIGEgbG9vayBhdCBga2VybmVsL2JwZi9hcmVuYS5jYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuIEknbGwgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QuIFRoZW4gSSdsbCBzaGlmdCBvdmVyIHRvIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AgdG8gbG9vayBhdCBob3cgYHJhbmdlX3RyZWVfY2xlYXJgIGFuZCBgcmFuZ2VfdHJlZV9zZXRgIGNoYW5nZWQsIGZvY3VzaW5nIG9uIGhvdyB0aGUgcHJlLWFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEJQRiBhcmVuYSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGVyZSdzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyLiBJJ2xsIHNlYXJjaCBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgZm9yIHNvbWV0aGluZyBsaWtlIGBicGZfYXJlbmFgIG9yIGBCUEZfQVJFTkFgIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LCBzbyB0aGF0IEkgdW5kZXJzdGFuZCBob3cgdG8gcmVwcm9kdWNlIHRoZSBjaGFuZ2VzIGluIG15IHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzoyNS43NzM5MDk1OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MzUyOTI2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9BUkVOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6MjcuNzE3NDQ1NDY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzOTIyNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkJQRiBTeXNjYWxsIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBzdGFydCB0ZWFyaW5nIGFwYXJ0IHRoZSBlbnRpcmUga2VybmVsLCBjb3VsZCB0aGlzIGJlIGFzIHNpbXBsZSBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBTcGVjaWZpY2FsbHksIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBkZXBlbmRlbnQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGA/IFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSBpZiB3ZSdyZSBzZWVpbmcgc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBMZXQgbWUganVzdCBxdWlja2x5IGp1bXAgb3ZlciB0byB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBjb25maXJtIHdoZXRoZXIgdGhlIHJlbGV2YW50IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhhdCBmbGFnLiBUaGF0IE1ha2VmaWxlIHNob3VsZCBwcm92aWRlIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBgQ09ORklHX0JQRl9TWVNDQUxMYCBwbGF5cyBpbnRvIHRoZSBlcXVhdGlvbi4gSXQncyB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpc3N1ZSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0gb3Igc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQsIGxpa2UgYSBtaXNzaW5nIGluY2x1ZGUgb3IgYSBtb3JlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3kuIENoZWNraW5nIHRoZSBNYWtlZmlsZSB3aWxsIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgc2NvcGUgb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzozMS43NTY2NzMzODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDc2ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjMxLjg2Mjc1NjMzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjcwMDM1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBBcmVuYSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gdGhlIGtlcm5lbCBjb25maWcgaXMgc2V0IHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTU1VYCwgYW5kIGBDT05GSUdfNjRCSVRgIGFsbCBlbmFibGVkLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgYSA2NC1iaXQgTU1VIGFyY2hpdGVjdHVyZSB3aXRoIEJQRiBzeXN0ZW0gY2FsbHMgYWN0aXZhdGVkLiBHb29kLCBnb29kLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBCUEYgYXJlbmEgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIExldCdzIGRpZyBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBBaCwgdGhlcmUgdGhleSBhcmU6IGBhcmVuYV9hbGxvY19wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYC4gVGhleSdyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGVzZSBhcmUgKmFjdHVhbGx5KiB1c2VkLiBUaW1lIHRvIHRyYWNlIHRob3NlIGNhbGwgc2l0ZXMgYW5kIHNlZSBob3cgdGhlIEJQRiBhcmVuYSBpcyBiZWluZyBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjM1LjQ4OTc2MjMxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkwNzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA6ICogYnBmIHByb2dyYW0gY2FuIGFsbG9jYXRlIGEgcGFnZSB2aWEgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkga2Z1bmNcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEtICogd2hpY2ggd2lsbCBpbnNlcnQgaXQgaW50byBrZXJuZWwgdm1fYXJlYS5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02NTk9c3RhdGljIHU2NCBjbGVhcl9sbzMyKHU2NCB2YWwpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY3LSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2Njg6c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjktXFx0XFx0XFx0ICAgICAgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9ODQ5PXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk0My0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5NDQ6ICogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzIGZyb20gYWRkaW5nIHBhZ2VzIHRvIHRoaXMgcmFuZ2UuXFxua2VybmVsL2JwZi9hcmVuYS5jLTk0NS0gKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMDYxPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2Mi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2NC1cXHRcXHRcXHRcXHRcXHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzI6XFx0cmV0dXJuICh2b2lkICopYXJlbmFfYWxsb2NfcGFnZXMoYXJlbmEsIChsb25nKWFkZHJfX2lnbiwgcGFnZV9jbnQsIG5vZGVfaWQsIHRydWUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDczLX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3NC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NTp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc2LVxcdFxcdFxcdFxcdFxcdCAgaW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDgzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg0OlxcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCBmYWxzZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtfVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg3OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4OC1cXHRcXHRcXHRcXHQgICAgICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwOTY6XFx0cmV0dXJuICh2b2lkICopYXJlbmFfYWxsb2NfcGFnZXMoYXJlbmEsIChsb25nKWFkZHJfX2lnbiwgcGFnZV9jbnQsIG5vZGVfaWQsIHRydWUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTM0PUJURl9LRlVOQ1NfU1RBUlQoYXJlbmFfa2Z1bmNzKVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTM1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzozNS41MzQ2NzU4ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI3NDk3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgQXJlbmEgQWxsb2NhdGlvbiBhbmQgUmFuZ2UgVHJlZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2AsIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCB0aGVpciB2YXJpYW50cyBhcmUgYWxsIGVmZmVjdGl2ZWx5IHdyYXBwZXIgZnVuY3Rpb25zLiBUaGV5J3JlIGtmdW5jcywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIHRoYXQgYXJlIHVsdGltYXRlbHkgY2FsbGluZyBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AuIE5vdGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IHRoZXJlIGFzIGdyb3VuZGJyZWFraW5nLCBqdXN0IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mICp3aHkqIHRoZXkncmUgdXNpbmcgdGhlc2Ugd3JhcHBlciBrZnVuY3MuIEFyZSB0aGV5IGFkZGluZyBhbnkgQlBGLXNwZWNpZmljIHNlbWFudGljcz9cblxuVGhlIHJlYWwgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhlIG1lbnRpb24gb2YgbW9kaWZpY2F0aW9ucyB0byBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAuIFJhbmdlIHRyZWVzIGFyZSBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlIGZvciB0cmFja2luZyBtZW1vcnksIHNvIGNoYW5nZXMgdGhlcmUgYXJlIGRlZmluaXRlbHkgd29ydGggYSBkZWVwZXIgbG9vay4gSSdsbCBoZWFkIG92ZXIgdG8gYHJhbmdlX3RyZWUuY2AgYW5kIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRob3NlIGNoYW5nZXMgb24gdGhlIG92ZXJhbGwgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNwZWNpZmljYWxseSBpdHMgaW50ZWdyYXRpb24gd2l0aCBCUEYuIFRoaXMgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3IgZXZlbiBhbiBhcmNoaXRlY3R1cmFsIHNoaWZ0IGluIGhvdyB0aGV5J3JlIGhhbmRsaW5nIG1lbW9yeSByYW5nZXMgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgZnVuZGFtZW50YWwgY2hhbmdlZCB0byB0aGUgd2F5IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGZyZWVpbmcgaXMgdHJhY2tlZC4gTGV04oCZcyBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6MzkuNTYyMTc2NjgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTExNzExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYW5nZV90cmVlX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjY2PXN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTMxOS1cXHRyYW5nZV90cmVlX2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcXHRlcnIgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCAwLCBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQ3OT1zdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MjItXFx0aWYgKHJldCkge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XFx0XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgdm1mLVxcdTAwM2VwZ29mZiwgMSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyNC1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyOC1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyOTpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTMwLVxcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY2OD1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE0LVxcdGlmICh1YWRkcikge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTU6XFx0XFx0cmV0ID0gaXNfcmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY4LW91dDpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY5OlxcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NzAtXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiYnBmX2FyZW5hOiBmYWlsZWQgdG8gcmVzdG9yZSBmcmVlIHJhbmdlICVsZCslbGQgYWZ0ZXIgcGFydGlhbCBhbGxvY1xcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04NDk9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtODg1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4ODY6XFx0cmV0ID0gcmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODg3LVxcdGlmIChyZXQpIHtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05NDY9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTY0LVxcdC8qIENhbm5vdCBndWFyZCBhbHJlYWR5IGFsbG9jYXRlZCBwYWdlcy4gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTY1OlxcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTk2Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTgwPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDE5LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDIwOlxcdFxcdGlmIChyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDIxLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjYtICogQXQgaW5pdCB0aW1lOlxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjI3OiAqICAgcmFuZ2VfdHJlZV9zZXQocnQsIDAsIG1heCk7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjgtICogVGhlbjpcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTMyLSAqIHRvIGZpbmQgZnJlZSByYW5nZSBhbmQgbWFyayBzbG90cyBhcyBhbGxvY2F0ZWQgYW5kIGxhdGVyOlxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjMzOiAqICAgcmFuZ2VfdHJlZV9zZXQocnQsIHN0YXJ0LCBsZW4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTM0LSAqIHRvIG1hcmsgYXMgdW5hbGxvY2F0ZWQgYWZ0ZXIgdXNlLlxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmM9MTM2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbi0tXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg1LS8qIElzIHRoZSB3aG9sZSByYW5nZSBzZXQgPyAqL1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE4NjppbnQgaXNfcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMTg3LXtcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE5OC0vKiBTZXQgdGhlIHJhbmdlIGluIHRoaXMgcmFuZ2UgdHJlZSAqL1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jOjE5OTppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmMtMjAwLXtcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oPTE2PWludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuaDoxNzppbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5oOjE4OmludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbik7XFxua2VybmVsL2JwZi9yYW5nZV90cmVlLmgtMTktczY0IHJhbmdlX3RyZWVfZmluZChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzozOS42MDcyOTk3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE1MDA4Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBBcmVuYSBNYXAgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJQRiBhcmVuYSBzdHVmZiwgYW5kIHRoZSBjb25uZWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyLiBUaGUgQlBGIGFyZW5hIGlzLCBvZiBjb3Vyc2UsIGEgQlBGIG1hcCB0eXBlLiBXaGF0IHJlYWxseSBnb3QgbXkgYXR0ZW50aW9uIGlzIGhvdyBgYXJlbmFfbWFwX2FsbG9jYCBjYWxscyBgcmFuZ2VfdHJlZV9zZXRgIHdpdGggdGhlIGBhcmVuYS1cdTAwM2VydGAgYW5kIGBhdHRyLVx1MDAzZW1heF9lbnRyaWVzYC4gU28sIGNyZWF0aW5nIG9uZSBvZiB0aGVzZSBtYXBzIGlzIGRpcmVjdGx5IGdvaW5nIHRvIHRyaWdnZXIgdGhhdCBgcmFuZ2VfdHJlZV9zZXRgIGZ1bmN0aW9uLiBBbmQgaXQgZG9lc24ndCBzdG9wIHRoZXJlOyBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCB3aWxsIGZ1cnRoZXIgaW50ZXJhY3Qgd2l0aCB0aGF0IGByYW5nZV90cmVlX2NsZWFyYCBhbmQgYHJhbmdlX3RyZWVfc2V0YCwgbWFraW5nIHRoaXMgYSBsaWtlbHkgYXJlYSBmb3IgZnV6emluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgbWFwIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGF0IGxvb2tzIGxpa2UgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEZyb20gYSBxdWljayBnbGFuY2UsIEkga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBMZXQncyBkaXZlIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgZWxzZSB3ZSBtaWdodCBuZWVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE0NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzo0NC4xMjIzMTEyMzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg5ODM4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzo0NC4xNjcyMTE0MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5NTY4OTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGX1NZU0NBTEwgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB3YWl0IGEgbWludXRlLiBgQlBGX1NZU0NBTExgLi4uIGlzbid0IHRoYXQgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYD8gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEknZCBleHBlY3QgaXQgdG8gYmUgY2xvc2VyIHRvIHRoZSBjb3JlIEJQRiBpbXBsZW1lbnRhdGlvbi4gTGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3JlbWVtYmVyaW5nIG9yIG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJvYmFibHkgYmVzdCB0byBnbyByaWdodCB0byB0aGUgc291cmNlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSAqZXhwZWN0KiB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlcmUgaXQncyAqcmVmZXJlbmNlZCogaWYgaXQncyBkZWZpbmVkIGVsc2V3aGVyZS4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIGhvb2sgd29ya3MgaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNpbmNlIHRoZSBwbGFjZW1lbnQgc2VlbXMgb2RkLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjQ3Ljg2MjkwNDgxM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NTM2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6NDcuOTA3NjY0NjEyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzk4NTY4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkb3VibGUtY2hlY2tpbmcgdGhlIEJQRiBjb25maWd1cmF0aW9uLiBJIGtub3cgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbml0ZWx5IGRlZmluZWQgd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBHb29kLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCBteSBjdXJyZW50IHRhc2suIEknbGwgcXVpY2tseSByZXZpc2l0IGBrZXJuZWwvYnBmL01ha2VmaWxlYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBhdm9pZCBhbnkgdW5leHBlY3RlZCByb2FkYmxvY2tzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozNzo1MS4wODc1MjQyOTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjUxLjEzNDU3MjI3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAzMTk5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTmVjZXNzYXJ5IEtlcm5lbCBDb25maWd1cmF0aW9ucyBmb3IgVGhpcyBUYXNrKipcblxuUmlnaHQsIHNvIHRvIGdldCB0aGlzIHdvcmtpbmcsIEknbSBnb2luZyB0byBuZWVkIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAuIFByZXR0eSBzdGFuZGFyZCwgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2XzY0LCBidXQgYWx3YXlzIGdvb2QgdG8gY29uZmlybS4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIGNhbid0IHByb2NlZWQgd2l0aG91dCB0aGF0LlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSdsbCB0YWtlIGEgbG9vayBhdCBga2VybmVsL2JwZi9hcmVuYS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHRoYW4gdG8gY2hhc2UgZG93biBhIG1pc3NpbmcgY29uZmlnIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzc6NTQuODM3Nzc0NTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM4ODExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjU0Ljg4MTE3MDI1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzE3NjgyNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZGlyZWN0IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIE92ZXJyaWRlcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMsIGFuZCB0aGUgaW5pdGlhbCBjaGVjayBvZiBgYXJlbmEuY2AgeWllbGRlZCBubyBvdGhlciBjb25maWd1cmF0aW9ucy4gVGhhdCdzIGdvb2QsIGtlZXBzIHRoaW5ncyBzaW1wbGUuIE5vdywgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBzdWJ0bGUgdGhhdCBtaWdodCBhZmZlY3QgdGhpcyBhcmVhIG9mIHRoZSBjb2RlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0J3MgYSBrZXkgYXJlYSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgc28gaXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgbHVya2luZyBpbiB0aGVyZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjU4LjE5ODg1NTE1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MzA4ODksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9yYW5nZV90cmVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM3OjU4LjI0MjgxODM4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk2MTY2Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcmFuZ2VfdHJlZS5jYCBmb3IgUmVsZXZhbnQgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgdGhyb3VnaCBgcmFuZ2VfdHJlZS5jYC4gSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyLCBzbyB0aGF0J3MgZ29vZC4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgSSBzaG91bGQgZm9jdXMgb24uIExldCdzIHNlZS4uLiBiYXNlZCBvbiB0aGUgbmFtZXMsIGBhcmVuYV9tYXBfYWxsb2NgLCBgYXJlbmFfbWFwX2ZyZWVgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGBhcmVuYV9mcmVlX3dvcmtlcmAsIGByYW5nZV90cmVlX3NldGAsIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgYWxsIGxvb2sgbGlrZSBjYW5kaWRhdGVzLlxuXG5IbW0sIGEgdGhvdWdodCBqdXN0IHN0cnVjayBtZTogYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBhIGtleSBkZXRhaWwhIFNpbmNlIHRoZXkncmUgc3RhdGljLCB0aGV5J3JlIHByb2JhYmx5IGlubGluZWQuIEJ1dCBsZXQncyB2ZXJpZnkuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW5saW5lZC4gQSByZWxhdGVkIGNvbnNpZGVyYXRpb24gY29tZXMgdG8gbWluZCDigJMgSSBzaG91bGQgY2hlY2sgdGhlIGtmdW5jcywgYXMgdGhleSBtYXkgYmUgdXNpbmcgdGhlc2UgaW50ZXJuYWwgbWV0aG9kcy4gTGV0J3MgY2hlY2s6IGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgLCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgLCBhbmQgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVgLlxuXG5BbHNvLCB0aGUgYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIHNvIHRob3NlIGRlZmluaXRlbHkgd2FycmFudCBhIGNsb3NlciBsb29rLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSBgcmFuZ2VfdHJlZS5jYCBpbiBtb3JlIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozODowMy40Mzg5ODcxMzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjIxMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhbmdlX3RyZWVfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI2LSAqIEF0IGluaXQgdGltZTpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoyNzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCAwLCBtYXgpO1xcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTI4LSAqIFRoZW46XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zMi0gKiB0byBmaW5kIGZyZWUgcmFuZ2UgYW5kIG1hcmsgc2xvdHMgYXMgYWxsb2NhdGVkIGFuZCBsYXRlcjpcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzozMzogKiAgIHJhbmdlX3RyZWVfc2V0KHJ0LCBzdGFydCwgbGVuKTtcXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0zNC0gKiB0byBtYXJrIGFzIHVuYWxsb2NhdGVkIGFmdGVyIHVzZS5cXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jPTEzNj1pbnQgcmFuZ2VfdHJlZV9jbGVhcihzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcXG4tLVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4NS0vKiBJcyB0aGUgd2hvbGUgcmFuZ2Ugc2V0ID8gKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxODY6aW50IGlzX3JhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTE4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYy0xOTgtLyogU2V0IHRoZSByYW5nZSBpbiB0aGlzIHJhbmdlIHRyZWUgKi9cXG5rZXJuZWwvYnBmL3JhbmdlX3RyZWUuYzoxOTk6aW50IHJhbmdlX3RyZWVfc2V0KHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxcbmtlcm5lbC9icGYvcmFuZ2VfdHJlZS5jLTIwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjAzLjQ4MjYxNDAxN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk3MjE3MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgIGFyZSBkZWZpbml0ZWx5IG5vbi1zdGF0aWMgbWV0aG9kcy4gV2UgY2FuIHVzZSB0aG9zZSBtZXRob2RzIGFzIHRoZXkgYXJlIGltcGxlbWVudGVkLCB3aGljaCBpcyBrZXkuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGFyZW5hIG1lbW9yeSBpcyBtYW5hZ2VkIHRvIGJlIGNlcnRhaW4gdGhlIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGNvcnJlY3RseS4gTGV0J3MgZGlnIGludG8gYGFyZW5hX21hcF9hbGxvY2AgYW5kIGBhcmVuYV9tYXBfZnJlZWAuIFRoZXkgYXJlIHRoZSBnYXRla2VlcGVycyBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgbWVtb3J5IGxlYWtzIGFyZW4ndCBwb3NzaWJsZSB3aXRoaW4gdGhlIHJhbmdlIHRyZWUgaW1wbGVtZW50YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjA2LjU3OTgzMzUxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxOTExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfbWFwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjcte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY0MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjQxLVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQyOlxcdC5tYXBfYWxsb2MgPSBhcmVuYV9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY0My1cXHQubWFwX2ZyZWUgPSBhcmVuYV9tYXBfZnJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MDYuNjI0MDI5Mzc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NTc1ODYzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFyZW5hIEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYXJlbmEgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYW5kIGltbWVkaWF0ZWx5IG5vdGljZSB0aGF0IGBhcmVuYV9tYXBfYWxsb2NgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIFRoaXMgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGUgc2NvcGUgYW5kIG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLCB3aGljaCBzaW1wbGlmaWVzIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGV4dGVybmFsIGNhbGxzIGFyZSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZTogYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYGJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlYCwgYW5kIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYC5cblxuTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2AgaXMgKmFjdHVhbGx5KiBub24tc3RhdGljLiBUaGlzIGlzIGEgcG90ZW50aWFsIHBvaW50IG9mIGNvbmZ1c2lvbiwgYW5kIGEgc2ltcGxlIHZlcmlmaWNhdGlvbiB3aWxsIHNhdmUgbWUgdGltZSBkb3duIHRoZSByb2FkLiBUaGlzIGNvbmZpcm1hdGlvbiBpcyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjExLjQ4MTYxODM0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMTk5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTg0OT1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NDMtICogUmVzZXJ2ZSBhbiBhcmVuYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Ugd2l0aG91dCBwb3B1bGF0aW5nIGl0LiBUaGlzIGNhbGwgc3RvcHNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTQ0OiAqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyBmcm9tIGFkZGluZyBwYWdlcyB0byB0aGlzIHJhbmdlLlxcbmtlcm5lbC9icGYvYXJlbmEuYy05NDUtICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTA2MT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjItXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjM6X19icGZfa2Z1bmMgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjQtXFx0XFx0XFx0XFx0XFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDc1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzYtXFx0XFx0XFx0XFx0XFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwODc6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg4LVxcdFxcdFxcdFxcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEzND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEzNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTM2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MTEuNTI0NjQzNDY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODcwOTM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHRoZXkgYXJlbid0IHN0YXRpYy4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5NeSBmb2N1cyByaWdodCBub3cgaXMgb24gYSBmZXcgc3BlY2lmaWMgb25lczogYHJhbmdlX3RyZWVfc2V0YCwgYHJhbmdlX3RyZWVfY2xlYXJgLCBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzYCwgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AuIFRoZXNlIHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIHdoYXQgSSdtIHdvcmtpbmcgb24uXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlIGFyZSBhbHNvIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZWAgYW5kIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYC4gVGhleSdyZSAqYWxzbyogbm9uLXN0YXRpYy4gR290dGEgbWFrZSBzdXJlIEkgaW5jbHVkZSB0aG9zZSBpbiBteSBhc3Nlc3NtZW50LiBUaGlzIGlzIGltcG9ydGFudC5cblxuTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGNydWNpYWwuIEFyZSBgcmFuZ2VfdHJlZV9zZXRgIGFuZCBgcmFuZ2VfdHJlZV9jbGVhcmAgKmV4cG9ydGVkKiwgb3IgYXJlIHRoZXkganVzdCBub24tc3RhdGljIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGF0IGRpc3RpbmN0aW9uIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGZvciB0aGUgbmV4dCBzdGVwcyBvZiBteSBhbmFseXNpcy4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhlaXIgc2NvcGUgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MTYuNTExNzQwMjM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ4NTUyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MTYuNTc5MjMxOTM3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0ODU2ODM3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBBcmVuYSBhbmQgUmFuZ2UgVHJlZSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIHN5c3RlbSBkb2Vzbid0IGV4cG9ydCB0aGVzZSBzeW1ib2xzIGRpcmVjdGx5LCBidXQgdGhleSdyZSBkZWZpbml0ZWx5ICpub24tc3RhdGljKiwgbWVhbmluZyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9scy4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhleSdyZSB1c2VkLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCB0byBtYWtlIHRoaXMgYnVpbGQgY29ycmVjdGx5LiBUaGUgcHJpbWFyeSBvbmUgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIOKAkyB0aGF0IHNlZW1zIGxpa2UgdGhlIGVzc2VudGlhbCBmbGFnLiBCdXQsIGhhbmcgb24uLi4gbGV0IG1lIGRvdWJsZS1jaGVjay4gSXQgbG9va3MgbGlrZSB0aGUgb2JqZWN0cyBgcmFuZ2VfdHJlZS5vYCBhbmQgYGFyZW5hLm9gIGFsc28gZGVwZW5kIG9uIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgYmVpbmcgZW5hYmxlZCBpbiBhZGRpdGlvbiB0byBgQ09ORklHX0JQRl9TWVNDQUxMYC5cblxuUmlnaHQsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIHRoaW5nIGhlcmUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbmFsaXRpZXMgYXJlIGVuYWJsZWQuXG5cbk5vdywgbGV0IG1lIGNvbmRlbnNlIHRoaXMgaW5mb3JtYXRpb24gaW50byBhIHVzYWJsZSBmb3JtYXQgZm9yIG15IGFuYWx5c2lzLlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZS4gQWJzb2x1dGVseS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBJIHNob3VsZCB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczpcbiAgICAqICAgYHJhbmdlX3RyZWVfc2V0YFxuICAgICogICBgcmFuZ2VfdHJlZV9jbGVhcmBcbiAgICAqICAgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2BcbiAgICAqICAgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYFxuICAgICogICBgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVgXG4gICAgKiAgIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBFbmFibGUgYEJQRl9TWVNDQUxMYC5cblxuTXkgcmVhc29uaW5nPyBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIGluIGEgc2lnbmlmaWNhbnQgd2F5LiBUaGUgZ29hbCBpcyBwcmUtYWxsb2NhdGluZyBtZW1vcnksIHdoaWNoIHByZXZlbnRzIHBvdGVudGlhbGx5IGRpc2FzdHJvdXMgdW5yZWNvdmVyYWJsZSBzdGF0ZXMgZHVyaW5nIGByYW5nZV90cmVlX3NldGAgb3IgYHJhbmdlX3RyZWVfY2xlYXJgIG9wZXJhdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyBCUEYgYXJlbmEgcGFnZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLCBmdW5jdGlvbmFsaXRpZXMgdGhhdCBhcmUgcmVhY2hhYmxlIHRocm91Z2ggQlBGIGtmdW5jcyBhbmQgbWFwIG9wZXJhdGlvbnMuIEZ1enppbmcgdGhlc2UgcGF0aHMgaXMgcGFyYW1vdW50IHRvIHZhbGlkYXRlIHRoZSByb2J1c3RuZXNzIG9mIHRoaXMgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcHJlLWFsbG9jYXRpb24gc3RyYXRlZ3kgd29ya3MgcmVsaWFibHkgdW5kZXIgc3RyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0NiwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MjQuMDY0OTE4NDU0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2Njg5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhbmdlX3RyZWVfc2V0XCIsXG4gICAgXCJyYW5nZV90cmVlX2NsZWFyXCIsXG4gICAgXCJicGZfYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZVwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgYW5kIHJhbmdlIHRyZWUgbG9naWMgdG8gcHJlLWFsbG9jYXRlIG1lbW9yeSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSByYW5nZSB0cmVlLCBwcmV2ZW50aW5nIHVucmVjb3ZlcmFibGUgc3RhdGVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgZHVyaW5nIGByYW5nZV90cmVlX3NldGAgb3IgYHJhbmdlX3RyZWVfY2xlYXJgLiBUaGlzIGFmZmVjdHMgQlBGIGFyZW5hIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcyBhbmQgbWFwIG9wZXJhdGlvbnMuIEZ1enppbmcgdGhlc2UgcGF0aHMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYW5nZV90cmVlX3NldFwiLFxuICAgIFwicmFuZ2VfdHJlZV9jbGVhclwiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGVcIixcbiAgICBcImJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIGFuZCByYW5nZSB0cmVlIGxvZ2ljIHRvIHByZS1hbGxvY2F0ZSBtZW1vcnkgYmVmb3JlIG1vZGlmeWluZyB0aGUgcmFuZ2UgdHJlZSwgcHJldmVudGluZyB1bnJlY292ZXJhYmxlIHN0YXRlcyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzIGR1cmluZyBgcmFuZ2VfdHJlZV9zZXRgIG9yIGByYW5nZV90cmVlX2NsZWFyYC4gVGhpcyBhZmZlY3RzIEJQRiBhcmVuYSBwYWdlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MgYW5kIG1hcCBvcGVyYXRpb25zLiBGdXp6aW5nIHRoZXNlIHBhdGhzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozODoyNC4xOTE2MTQ0OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1OTE5MTI0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNTozODoyNC4xOTIxNzYyM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTU5MTM0NzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgcHJlLWFsbG9jYXRlcyBhIGByYW5nZV9ub2RlYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgdHJlZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMgKGUuZy4sIHJldHVybmluZyBgLUVOT01FTWApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgaW4gYGFyZW5hLmNgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM5NDdkYjc5NDMxZjRkZmIwOTBjOThjNGJhNzdjZGJlZjQ0YzMxMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNTozNzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggNTU1ZWUyNTMxZWY5OC4uZDU3YTBiNjE3NTI1OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNzY2LDcgKzc2Niw5IEBAIHN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuIFx0cmV0dXJuIGNsZWFyX2xvMzIoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkgKyB1YWRkcjMyO1xuIG91dDpcbi1cdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xuK1x0aWYgKHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpKVxuK1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiYnBmX2FyZW5hOiBmYWlsZWQgdG8gcmVzdG9yZSBmcmVlIHJhbmdlICVsZCslbGQgYWZ0ZXIgcGFydGlhbCBhbGxvY1xcblwiLFxuK1x0XHRcdFx0ICAgIHBnb2ZmICsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiBcdGlmIChtYXBwZWQpIHtcbiBcdFx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbkBAIC04ODEsNyArODgzLDEyIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGRlZmVyO1xuIFxuLVx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4rXHRyZXQgPSByYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4rXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbiBcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG5AQCAtMTAwNCwxMSArMTAxMSwxOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdGthZGRyID0gYXJlbmFfdm1fc3RhcnQgKyBzLVx1MDAzZXVhZGRyO1xuIFx0XHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHMtXHUwMDNldWFkZHIpO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBNYXJrIHRoZSByYW5nZSBhcyBmcmVlIGJlZm9yZSBjbGVhcmluZyBQVEVzIHNvIHRoYXRcbitcdFx0ICogaWYgdGhlIHJhbmdlIHRyZWUgdXBkYXRlIGZhaWxzIHdlIGxlYXZlIHRoZSBQVEVzXG4rXHRcdCAqIGludGFjdCwgYXZvaWRpbmcgYW4gdW5yZWNvdmVyYWJsZSBzdGF0ZSB3aGVyZSBwYWdlc1xuK1x0XHQgKiBhcmUgZnJlZWQgYnV0IHRoZSBhcmVuYSBmcmVlIHRyZWUgZG9lcyBub3QgdHJhY2sgdGhlbS5cbitcdFx0ICovXG4rXHRcdGlmIChyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBwYWdlcyBpbiBmcmVlX3BhZ2VzIGxsaXN0ICovXG4gXHRcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcdTAwMjZjZGF0YSk7XG4tXG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuIFx0fVxuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9yYW5nZV90cmVlLmMgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuaW5kZXggMmYyODg4NmYzZmY3NS4uNTQwNTViMWZlNTQxMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcmFuZ2VfdHJlZS5jXG4rKysgYi9rZXJuZWwvYnBmL3JhbmdlX3RyZWUuY1xuQEAgLTE0MywxNiArMTQzLDIyIEBAIGludCByYW5nZV90cmVlX2NsZWFyKHN0cnVjdCByYW5nZV90cmVlICpydCwgdTMyIHN0YXJ0LCB1MzIgbGVuKVxuIFx0XHRpZiAocm4tXHUwMDNlcm5fc3RhcnQgXHUwMDNjIHN0YXJ0IFx1MDAyNlx1MDAyNiBybi1cdTAwM2Vybl9sYXN0IFx1MDAzZSBsYXN0KSB7XG4gXHRcdFx0dTMyIG9sZF9sYXN0ID0gcm4tXHUwMDNlcm5fbGFzdDtcbiBcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFByZS1hbGxvY2F0ZSB0aGUgcmlnaHQtaGFsZiBub2RlIGJlZm9yZSBtb2RpZnlpbmdcbitcdFx0XHQgKiB0aGUgdHJlZS4gSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSByZXR1cm4gLUVOT01FTVxuK1x0XHRcdCAqIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIHJhbmdlIHRyZWUuXG4rXHRcdFx0ICovXG4rXHRcdFx0bmV3X3JuID0ga21hbGxvY19ub2xvY2soc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSxcbitcdFx0XHRcdFx0XHRfX0dGUF9BQ0NPVU5ULCBOVU1BX05PX05PREUpO1xuK1x0XHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4gXHRcdFx0LyogT3ZlcmxhcHMgd2l0aCB0aGUgZW50aXJlIGNsZWFyaW5nIHJhbmdlICovXG4gXHRcdFx0cmFuZ2VfaXRfcmVtb3ZlKHJuLCBydCk7XG4gXHRcdFx0cm4tXHUwMDNlcm5fbGFzdCA9IHN0YXJ0IC0gMTtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQocm4sIHJ0KTtcbiBcbi1cdFx0XHQvKiBBZGQgYSByYW5nZSAqL1xuLVx0XHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsXG4tXHRcdFx0XHRcdFx0TlVNQV9OT19OT0RFKTtcbi1cdFx0XHRpZiAoIW5ld19ybilcbi1cdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdC8qIEFkZCByaWdodC1oYWxmIHJhbmdlICovXG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX3N0YXJ0ID0gbGFzdCArIDE7XG4gXHRcdFx0bmV3X3JuLVx1MDAzZXJuX2xhc3QgPSBvbGRfbGFzdDtcbiBcdFx0XHRyYW5nZV9pdF9pbnNlcnQobmV3X3JuLCBydCk7XG5AQCAtMTkzLDYgKzE5OSw3IEBAIGludCBpc19yYW5nZV90cmVlX3NldChzdHJ1Y3QgcmFuZ2VfdHJlZSAqcnQsIHUzMiBzdGFydCwgdTMyIGxlbilcbiBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4ge1xuIFx0dTMyIGxhc3QgPSBzdGFydCArIGxlbiAtIDE7XG4rXHRzdHJ1Y3QgcmFuZ2Vfbm9kZSAqbmV3X3JuID0gTlVMTDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpyaWdodDtcbiBcdHN0cnVjdCByYW5nZV9ub2RlICpsZWZ0O1xuIFx0aW50IGVycjtcbkBAIC0yMDIsMjAgKzIwOSw0MCBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBsZWZ0LVx1MDAzZXJuX2xhc3QgXHUwMDNlPSBsYXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBBIG5ldyBub2RlIGlzIG5lZWRlZCBvbmx5IHdoZW4gdGhlIHJhbmdlIGhhcyBubyBhZGphY2VudCBmcmVlXG4rXHQgKiByYW5nZSBvbiBlaXRoZXIgc2lkZS4gIFRoaXMgaXMga25vd24gYmVmb3JlIGNsZWFyaW5nOiBhbnkgcmFuZ2VcbitcdCAqIGNvdmVyaW5nIHN0YXJ0IC0gMSBvciBsYXN0ICsgMSBzdXJ2aXZlcyB0aGUgY2xlYXIgYXMgYW4gYWRqYWNlbnRcbitcdCAqIHBpZWNlLiAgQWxsb2NhdGUgb25seSBpbiB0aGF0IGNhc2UsIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRyZWUsIHNvXG4rXHQgKiBhIGZhaWx1cmUgbGVhdmVzIHRoZSByYW5nZSB0cmVlIHVubW9kaWZpZWRcbitcdCAqL1xuK1x0bGVmdCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIHN0YXJ0IC0gMSwgc3RhcnQgLSAxKTtcbitcdHJpZ2h0ID0gcmFuZ2VfaXRfaXRlcl9maXJzdChydCwgbGFzdCArIDEsIGxhc3QgKyAxKTtcbitcdGlmICghbGVmdCBcdTAwMjZcdTAwMjYgIXJpZ2h0KSB7XG4rXHRcdG5ld19ybiA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksXG4rXHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4rXHRcdGlmICghbmV3X3JuKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0LyogQ2xlYXIgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHJhbmdlIHdlIHdhbnQgdG8gc2V0LiAqL1xuIFx0ZXJyID0gcmFuZ2VfdHJlZV9jbGVhcihydCwgc3RhcnQsIGxlbik7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbiBcbiBcdC8qIERvIHdlIGhhdmUgYSBsZWZ0LWFkamFjZW50IHJhbmdlID8gKi9cbiBcdGxlZnQgPSByYW5nZV9pdF9pdGVyX2ZpcnN0KHJ0LCBzdGFydCAtIDEsIHN0YXJ0IC0gMSk7XG4tXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydClcbi1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgbGVmdC1cdTAwM2Vybl9sYXN0ICsgMSAhPSBzdGFydCkge1xuK1x0XHRlcnIgPSAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dF9mcmVlX25ldztcbitcdH1cbiBcbiBcdC8qIERvIHdlIGhhdmUgYSByaWdodC1hZGphY2VudCByYW5nZSA/ICovXG4gXHRyaWdodCA9IHJhbmdlX2l0X2l0ZXJfZmlyc3QocnQsIGxhc3QgKyAxLCBsYXN0ICsgMSk7XG4tXHRpZiAocmlnaHQgXHUwMDI2XHUwMDI2IHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ICE9IGxhc3QgKyAxKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChyaWdodCBcdTAwMjZcdTAwMjYgcmlnaHQtXHUwMDNlcm5fc3RhcnQgIT0gbGFzdCArIDEpIHtcbitcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0Z290byBvdXRfZnJlZV9uZXc7XG4rXHR9XG4gXG4gXHRpZiAobGVmdCBcdTAwMjZcdTAwMjYgcmlnaHQpIHtcbiBcdFx0LyogQ29tYmluZSBsZWZ0IGFuZCByaWdodCBhZGphY2VudCByYW5nZXMgKi9cbkBAIC0yMzUsMTQgKzI2MiwxNiBAQCBpbnQgcmFuZ2VfdHJlZV9zZXQoc3RydWN0IHJhbmdlX3RyZWUgKnJ0LCB1MzIgc3RhcnQsIHUzMiBsZW4pXG4gXHRcdHJpZ2h0LVx1MDAzZXJuX3N0YXJ0ID0gc3RhcnQ7XG4gXHRcdHJhbmdlX2l0X2luc2VydChyaWdodCwgcnQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bGVmdCA9IGttYWxsb2Nfbm9sb2NrKHNpemVvZihzdHJ1Y3QgcmFuZ2Vfbm9kZSksIF9fR0ZQX0FDQ09VTlQsIE5VTUFfTk9fTk9ERSk7XG4tXHRcdGlmICghbGVmdClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bGVmdC1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuLVx0XHRsZWZ0LVx1MDAzZXJuX2xhc3QgPSBsYXN0O1xuLVx0XHRyYW5nZV9pdF9pbnNlcnQobGVmdCwgcnQpO1xuK1x0XHQvKiBObyBhZGphY2VudCByYW5nZXM7IHVzZSB0aGUgcHJlLWFsbG9jYXRlZCBub2RlICovXG4rXHRcdG5ld19ybi1cdTAwM2Vybl9zdGFydCA9IHN0YXJ0O1xuK1x0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG4rXHRcdHJhbmdlX2l0X2luc2VydChuZXdfcm4sIHJ0KTtcbiBcdH1cbiBcdHJldHVybiAwO1xuK1xuK291dF9mcmVlX25ldzpcbitcdGtmcmVlX25vbG9jayhuZXdfcm4pO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCByYW5nZV90cmVlX2Rlc3Ryb3koc3RydWN0IHJhbmdlX3RyZWUgKnJ0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTU6Mzg6MjQuMTkyMTc3MzhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1OTEzMjUzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3JhbmdlX3RyZWUuY2AuIEl0IHNlZW1zIGxpa2UgdGhlIG1haW4gZm9jdXMgaGVyZSBpcyBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gdGhlIGByYW5nZV90cmVlX3NldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHByZS1hbGxvY2F0aW5nIGEgYHJhbmdlX25vZGVgIHdpdGhpbiBgcmFuZ2VfdHJlZV9zZXRgIGJlZm9yZSBhY3R1YWxseSBtb2RpZnlpbmcgdGhlIHJhbmdlIHRyZWUuIFRoaXMgaXMgc21hcnQsIGFzIGl0IGVuc3VyZXMgdGhhdCBpZiB0aGUgYWxsb2NhdGlvbiAobGlrZWx5IGEgYGttYWxsb2NgIHZhcmlhbnQpIGZhaWxzLCB0aGUgdHJlZSBpc24ndCBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkLCBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgIGZ1bmN0aW9ucyBub3cgYWxzbyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAsIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEJ1dCwgYWZ0ZXIgbG9va2luZyBjbG9zZWx5LCBpdCBkb2Vzbid0IHNlZW0gbGlrZSB0aGV5IGRvLiBUaGlzIGlzIGp1c3QgYWJvdXQgaGFuZGxpbmcgdGhlIGZhaWx1cmUgb2YgYSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYSByYW5nZSB0cmVlLCB3aGljaCB0cmFja3MgZnJlZSBhbmQgdXNlZCBtZW1vcnkgcmFuZ2VzLCBub3Qgc29tZSBuZXcgc3RydWN0dXJlIHRoYXQncyBwYXNzZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCdzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIGByYW5nZV90cmVlX3NldGAgZmFpbHMsIGl0IHNpbXBseSByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIHRyZWUgcmVtYWlucyB1bnRvdWNoZWQuIE5vIGRhdGEgaXMgbGVha2VkLlxuXG5UaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCBsaWtlbHkgcmV2b2x2ZXMgYXJvdW5kIG1lbW9yeSBsZWFrcyBvciBpbmNvbnNpc3RlbmNpZXMgdGhhdCBjb3VsZCBoYXBwZW4gaWYgdGhlIGBrbWFsbG9jX25vbG9ja2AgY2FsbCBpbiBgcmFuZ2VfdHJlZV9zZXRgIGZhaWxzLiBUaGluZ3MgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBhIG1lbW9yeSBsZWFrIGNvdWxkIGFyaXNlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCBidXQgdGhlbiB0aGUgdHJlZSB3YXMgcGFydGlhbGx5IG1vZGlmaWVkLiBLQVNBTiBvciBzdGFuZGFyZCB0ZXN0aW5nIG1pZ2h0IGZsYWcgdGhlIHN0YXRlIGluY29uc2lzdGVuY3ksIGJ1dCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYWxsb2NhdGlvbi4gYHJhbmdlX3RyZWVfc2V0YCBpcyB1c2luZyBga21hbGxvY19ub2xvY2tgLiBJJ2xsIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgQlBGLXNwZWNpZmljIHdyYXBwZXIgb3Igbm90LiBPa2F5LCBpdCdzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgYGttYWxsb2NgIGZhbWlseS4gUmVnYXJkbGVzcywgYG5ld19ybmAsIHRoZSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgLCBoYXMgaXRzIGBybl9zdGFydGAgYW5kIGBybl9sYXN0YCBmaWVsZHMgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgaXQncyBpbnNlcnRlZC4gU28sIHdlIGhhdmU6XG5cbmBgYGNcblx0XHRuZXdfcm4tXHUwMDNlcm5fc3RhcnQgPSBzdGFydDtcblx0XHRuZXdfcm4tXHUwMDNlcm5fbGFzdCA9IGxhc3Q7XG5cdFx0cmFuZ2VfaXRfaW5zZXJ0KG5ld19ybiwgcnQpO1xuYGBgXG5cbk5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBiZWluZyByZWFkIGZyb20uIE5vIHByb2JsZW0uXG5cblNvLCBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHJvYnVzdCBlcnJvciBoYW5kbGluZyBhcm91bmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gdGhlIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyBhbmQgaW1wcm92aW5nIHN0YWJpbGl0eS4gSXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGRvZXNuJ3QgbGVhayBhbnkgaW5mb3JtYXRpb24sIGFuZCBkb2Vzbid0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUga2luZHMgb2YgYnVncyB0aGF0IGl0J3MgcHJldmVudGluZywgbGlrZSBtZW1vcnkgbGVha3MsIGluY29uc2lzdGVuY2llcywgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlLCBhcmUgdGhpbmdzIHRoYXQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyBzaG91bGQgY2F0Y2guIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkwLCJPdXRwdXRUb2tlbnMiOjI0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE1OjM4OjM1Ljc4MzUwNTg1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIEJQRiBhcmVuYSdzIHJhbmdlIHRyZWUgb3BlcmF0aW9ucyAoYHJhbmdlX3RyZWVfc2V0YCBhbmQgYHJhbmdlX3RyZWVfY2xlYXJgKS4gSXQgcHJlLWFsbG9jYXRlcyBhIGByYW5nZV9ub2RlYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB0cmVlIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgdHJlZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgaWYgdGhlIGFsbG9jYXRpb24gZmFpbHMgKGUuZy4sIHJldHVybmluZyBgLUVOT01FTWApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGByYW5nZV90cmVlX3NldGAgaW4gYGFyZW5hLmNgLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIG5ld2x5IGFsbG9jYXRlZCBgcmFuZ2Vfbm9kZWAgaGFzIGl0cyBmaWVsZHMgKGBybl9zdGFydGAsIGBybl9sYXN0YCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gaW5jb25zaXN0ZW50IGludGVybmFsIHN0YXRlLCBtZW1vcnkgbGVha3MsIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBpc3N1ZXMgcmVzdWx0aW5nIGZyb20gYSBjb3JydXB0ZWQgcmFuZ2UgdHJlZSwgYWxsIG9mIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyBpbiBCUEYgYXJlbmEncyByYW5nZSB0cmVlIG9wZXJhdGlvbnMgKGByYW5nZV90cmVlX3NldGAgYW5kIGByYW5nZV90cmVlX2NsZWFyYCkuIEl0IHByZS1hbGxvY2F0ZXMgYSBgcmFuZ2Vfbm9kZWAgYmVmb3JlIG1vZGlmeWluZyB0aGUgdHJlZSB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIHRyZWUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzIChlLmcuLCByZXR1cm5pbmcgYC1FTk9NRU1gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgcmFuZ2VfdHJlZV9zZXRgIGluIGBhcmVuYS5jYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXdseSBhbGxvY2F0ZWQgYHJhbmdlX25vZGVgIGhhcyBpdHMgZmllbGRzIChgcm5fc3RhcnRgLCBgcm5fbGFzdGApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGluc2VydGVkIGludG8gdGhlIHRyZWUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGluY29uc2lzdGVudCBpbnRlcm5hbCBzdGF0ZSwgbWVtb3J5IGxlYWtzLCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgaXNzdWVzIHJlc3VsdGluZyBmcm9tIGEgY29ycnVwdGVkIHJhbmdlIHRyZWUsIGFsbCBvZiB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[1] Phase: Succeeded StartedAt: 2026-08-10 15:38:47 +0000 UTC FinishedAt: 2026-08-10 15:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 15:38:47 +0000 UTC FinishedAt: 2026-08-10 15:38:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2] Phase: Succeeded StartedAt: 2026-08-10 15:38:47 +0000 UTC FinishedAt: 2026-08-10 19:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 15:38:47 +0000 UTC FinishedAt: 2026-08-10 19:31:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 15:38:47 +0000 UTC FinishedAt: 2026-08-10 15:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 15:38:47 +0000 UTC FinishedAt: 2026-08-10 15:38:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowmwn85/series-workflowmwn85-convert-artifact-1925228952/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 15:38:57 +0000 UTC FinishedAt: 2026-08-10 16:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 15:38:57 +0000 UTC FinishedAt: 2026-08-10 16:04:58 +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:*2867a44e-3f59-448e-b841-c5e71f610d53,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-workflowmwn85/series-workflowmwn85-convert-artifact-1925228952/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": "ea787c21-d0c4-4548-87f4-c34fd03a5bbc", "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-workflowmwn85/series-workflowmwn85-build-action-3505383118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 15:38:57 +0000 UTC FinishedAt: 2026-08-10 16:04:28 +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:*2867a44e-3f59-448e-b841-c5e71f610d53,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-workflowmwn85/series-workflowmwn85-convert-artifact-1925228952/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": "ea787c21-d0c4-4548-87f4-c34fd03a5bbc", "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-workflowmwn85/series-workflowmwn85-build-action-3505383118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 16:04:58 +0000 UTC FinishedAt: 2026-08-10 16:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 16:04:58 +0000 UTC FinishedAt: 2026-08-10 16:04:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 16:04:58 +0000 UTC FinishedAt: 2026-08-10 16:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 16:04:58 +0000 UTC FinishedAt: 2026-08-10 16:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowmwn85/series-workflowmwn85-convert-artifact-2266996735/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 16:05:18 +0000 UTC FinishedAt: 2026-08-10 16:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 16:05:18 +0000 UTC FinishedAt: 2026-08-10 16:07:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea787c21-d0c4-4548-87f4-c34fd03a5bbc,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-workflowmwn85/series-workflowmwn85-build-action-3505383118/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-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 16:07:23 +0000 UTC FinishedAt: 2026-08-10 16:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 16:07:23 +0000 UTC FinishedAt: 2026-08-10 16:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 16:07:23 +0000 UTC FinishedAt: 2026-08-10 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 16:07:23 +0000 UTC FinishedAt: 2026-08-10 16:26:47 +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:*2867a44e-3f59-448e-b841-c5e71f610d53,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-workflowmwn85/series-workflowmwn85-convert-artifact-2266996735/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": "34a6181f-1344-49c6-8ad5-26867b8e7bd8", "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-workflowmwn85/series-workflowmwn85-build-action-3811730963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 16:07:23 +0000 UTC FinishedAt: 2026-08-10 16:26:37 +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:*2867a44e-3f59-448e-b841-c5e71f610d53,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-workflowmwn85/series-workflowmwn85-convert-artifact-2266996735/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": "34a6181f-1344-49c6-8ad5-26867b8e7bd8", "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-workflowmwn85/series-workflowmwn85-build-action-3811730963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 16:26:47 +0000 UTC FinishedAt: 2026-08-10 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 16:26:47 +0000 UTC FinishedAt: 2026-08-10 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 16:26:47 +0000 UTC FinishedAt: 2026-08-10 16:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 16:26:47 +0000 UTC FinishedAt: 2026-08-10 16:28:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34a6181f-1344-49c6-8ad5-26867b8e7bd8,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-workflowmwn85/series-workflowmwn85-build-action-3811730963/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-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 19:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 19:31:17 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ea787c21-d0c4-4548-87f4-c34fd03a5bbc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34a6181f-1344-49c6-8ad5-26867b8e7bd8,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-workflowmwn85/series-workflowmwn85-build-action-3505383118/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-workflowmwn85/series-workflowmwn85-build-action-3811730963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 16:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 16:28:55 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmwn85/series-workflowmwn85-convert-artifact-765452440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 16:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 16:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 16:28:51 +0000 UTC FinishedAt: 2026-08-10 16:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 16:29:01 +0000 UTC FinishedAt: 2026-08-10 19:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwn85[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["range_tree_set","range_tree_clear","bpf_arena_alloc_pages","bpf_arena_free_pages","bpf_arena_alloc_pages_non_sleepable","bpf_arena_alloc_pages_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ed3b3093b6242bdb2c4acfb932d4b15db4e33948","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3630bbcd-b00e-4b9f-92b9-7b9ccf4b2638","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 16:29:01 +0000 UTC FinishedAt: 2026-08-10 19:31:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea787c21-d0c4-4548-87f4-c34fd03a5bbc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*34a6181f-1344-49c6-8ad5-26867b8e7bd8,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-workflowmwn85/series-workflowmwn85-build-action-3505383118/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-workflowmwn85/series-workflowmwn85-build-action-3811730963/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-workflowmwn85/series-workflowmwn85-convert-artifact-765452440/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,}