Name: series-workflowp76h8 Phase: Succeeded StartedAt: 2026-09-01 00:12:40 +0000 UTC FinishedAt: 2026-09-01 04:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[0] Phase: Succeeded StartedAt: 2026-09-01 00:12:40 +0000 UTC FinishedAt: 2026-09-01 00:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 00:12:40 +0000 UTC FinishedAt: 2026-09-01 00:17:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVFREE_RCU_BATCHED", "PREEMPT_RT", "EXPERT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVFREE_RCU_BATCHED", "PREEMPT_RT", "EXPERT" ], "series_id": "f6f82155-3726-4ce9-9236-69092a1e3e1a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__kfree_rcu_sheaf", "kfree_call_rcu_nolock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWRlJFRV9SQ1VfQkFUQ0hFRCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDssCiAgICAmIzM0O0VYUEVSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa2ZyZWVfcmN1X3NoZWFmJiMzNDssCiAgICAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJDVSBzaGVhZiBkZWFsbG9jYXRpb24gbG9naWMgaW4gc2xhYi9zbHViIChtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMpIHRvIGJ5cGFzcyB0aGUgc2hlYXZlcyBsYXllciBpbiBrdmZyZWVfY2FsbF9yY3UoKSBvbiBQUkVFTVBUX1JUIGtlcm5lbHMsIGF2b2lkaW5nIGxvY2sgbmVzdGluZyBpc3N1ZXMgd2l0aCBzbGVlcGluZyBsb2NrcyB1bmRlciByYXcgc3BpbmxvY2tzLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzbGFiIG1lbW9yeSBmcmVlaW5nIHBhdGhzIGFuZCBQUkVFTVBUX1JUIGxvY2sgY29uc3RyYWludHMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBkZWFkbG9jayBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgUkNVIHNoZWFmIGZyZWVpbmcgbG9naWMgaW4gbW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jLiBJdCBhZGp1c3RzIGtmcmVlX3JjdV9zaGVhZigpIHRvIGFsd2F5cyB1c2UgU0xBQl9GUkVFX0RFRkFVTFQgYW5kIHVwZGF0ZXMga3ZmcmVlX2NhbGxfcmN1KCkgdG8gY29tcGxldGVseSBieXBhc3MgdGhlIHNoZWFmIGxheWVyIHVuZGVyIENPTkZJR19QUkVFTVBUX1JUIHRvIGF2b2lkIGFjcXVpcmluZyBzbGVlcGluZyB3YWl0bG9ja3Mgd2hpbGUgaG9sZGluZyByYXcgc3BpbmxvY2tzIChzdWNoIGFzIHRhc2tfc3RydWN0OjpwaV9sb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFJDVSByZWNsYWltaW5nIHBhdGhzIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDA6MTU6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYl9jb21tb24uYyBiL21tL3NsYWJfY29tbW9uLmNcbmluZGV4IGIxOWJhMWIzMTQ4NGMuLjcyMjNhNzU5NmRhYmIgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jXG5AQCAtMTY2NywxNCAmIzQzOzE2NjcsNiBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuLVxuLVx0Lypcbi1cdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbi1cdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXG4tXHQgKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbi1cdFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XG4gXG4gXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNjg1LDcgJiM0MzsxNjc3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbiBcbiBcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4gXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbi1cdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTIwMzQsNyAmIzQzOzIwMjYsMTMgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIFx0aWYgKCFoZWFkKVxuIFx0XHRtaWdodF9zbGVlcCgpO1xuIFxuLVx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICoga3ZmcmVlX3JjdSgpIGlzIGNhbGxlZCBieSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgd2l0aFxuJiM0MztcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcbiYjNDM7XHQgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC5cbiYjNDM7XHQgKiBUaGVyZWZvcmUgYXZvaWQgaXQgb24gUFJFRU1QVF9SVC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJiMzOTt0IHlldCBzY2hlZHVsZSB0aGUgYmF0Y2guXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBmOWI1NmNiNDM5ZTcwLi43YTdlOTA2YTBlNDRkIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC02MDg4LDggJiM0Mzs2MDg4LDkgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIC8qXG4gICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG4tICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbi0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuXG4mIzQzOyAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbiYjNDM7ICogYXZvaWRzIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0suIGt2ZnJlZV9jYWxsX3JjdSgpIGlzXG4mIzQzOyAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuXG4gICpcbiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190XG4gICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7LAogICAgJiMzNDtFWFBFUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7LAogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yJiMzOTtzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3ZjM5YWQwZGNlYTQzMGQ2N2MxMzgwMWRmZDBmOTVjZmY2Y2M5NzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAwOjE1OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2xhYl9jb21tb24uYyBiL21tL3NsYWJfY29tbW9uLmMKaW5kZXggYjE5YmExYjMxNDg0Yy4uNzIyM2E3NTk2ZGFiYiAxMDA2NDQKLS0tIGEvbW0vc2xhYl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jCkBAIC0xNjY3LDE0ICYjNDM7MTY2Nyw2IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDsKLQotCS8qCi0JICogSXQgaXMgbm90IHNhZmUgdG8gc3BpbiBvbiBQUkVFTVBUX1JUIGJlY2F1c2UgdGhlIGtlcm5lbCBtaWdodCBiZQotCSAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuCi0JICovCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQotCQlmcmVlX2ZsYWdzID0gU0xBQl9GUkVFX05PTE9DSzsKIAogCWlmIChpc192bWFsbG9jX2FkZHIob2JqKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTY4NSw3ICYjNDM7MTY3Nyw3IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopCiAKIAlzID0gc2xhYi0mZ3Q7c2xhYl9jYWNoZTsKIAlpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSkKLQkJcmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7CiYjNDM7CQlyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0yMDM0LDcgJiM0MzsyMDI2LDEzIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKIAlpZiAoIWhlYWQpCiAJCW1pZ2h0X3NsZWVwKCk7CiAKLQlpZiAoa2ZyZWVfcmN1X3NoZWFmKHB0cikpCiYjNDM7CS8qCiYjNDM7CSAqIGt2ZnJlZV9yY3UoKSBpcyBjYWxsZWQgYnkgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIHdpdGgKJiM0MzsJICogdGFza19zdHJ1Y3Q6OnBpX2xvY2sgYWNxdWlyZWQuIE9uIFBSRUVNUFRfUlQgdGhlIGxvY2FsX3RyeWxvY2soKQomIzQzOwkgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC4KJiM0MzsJICogVGhlcmVmb3JlIGF2b2lkIGl0IG9uIFBSRUVNUFRfUlQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpICZhbXA7JmFtcDsga2ZyZWVfcmN1X3NoZWFmKHB0cikpCiAJCXJldHVybjsKIAogCS8vIFF1ZXVlIHRoZSBvYmplY3QgYnV0IGRvbiYjMzk7dCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGY5YjU2Y2I0MzllNzAuLjdhN2U5MDZhMGU0NGQgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTYwODgsOCAmIzQzOzYwODgsOSBAQCBzdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiAvKgogICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlCiAgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSwKLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzCi0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuCiYjNDM7ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKQomIzQzOyAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpcwomIzQzOyAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuCiAgKgogICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdAogICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGEKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MAoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBrZnJlZV9yY3UgYW5kIFBSRUVNUFRfUlQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgZGlmZiBoaXRzIGBtbS9zbGFiX2NvbW1vbi5jYCBhbmQgYG1tL3NsdWIuY2AsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtmcmVlX3JjdV9zaGVhZigpYCBpbiBgbW0vc2xhYl9jb21tb24uY2AuIEkgc2VlIHRoZXkmIzM5O3ZlIHJlbW92ZWQgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYGZyZWVfZmxhZ3NgIGJhc2VkIG9uIGBDT05GSUdfUFJFRU1QVF9SVGAuIFByZXZpb3VzbHksIGlmIFBSRUVNUFRfUlQgd2FzIGVuYWJsZWQsIGl0IHdvdWxkIHNldCBgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0tgLiBOb3csIGl0IHVuY29uZGl0aW9uYWxseSB1c2VzIGBTTEFCX0ZSRUVfREVGQVVMVGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IGFyZSBlbGltaW5hdGluZyB0aGF0IGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFzc3VtZSB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlIHRvIGZpeCBhIGxvY2tpbmcgaXNzdWUsIG9yIGltcHJvdmUgcGVyZm9ybWFuY2UuCgpUaGUgb3RoZXIgY2hhbmdlIGluIGBtbS9zbGFiX2NvbW1vbi5jYCBpcyBpbiBga3ZmcmVlX2NhbGxfcmN1KClgLiBUaGVyZSYjMzk7cyBhIGNoZWNrIHRoYXQgdXNlcyBga2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBpZiBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIG5vdCBlbmFibGVkLCB0aGVuIGl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgcmN1IG1lY2hhbmlzbS4gUHJldmlvdXNseSwgYGt2ZnJlZV9jYWxsX3JjdSgpYCB3YXMgdXNpbmcgdGhlIGBsb2NhbF90cnlsb2NrKClgIGNhbGwgaW4gY29uanVuY3Rpb24gd2l0aCBgdGFza19zdHJ1Y3Q6OnBpX2xvY2tgIGFuZCB0aGUgbmV3IGNvZGUgc2VlbXMgdG8gYXZvaWQgdGhlIGxvY2FsX3RyeWxvY2sgY2FsbC4gSSYjMzk7bSBndWVzc2luZyB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gaGFkIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNjZW5hcmlvIG9yIGNvbnRlbnRpb24gaXNzdWUgb24gUFJFRU1QVF9SVCBzeXN0ZW1zIHdoZW4gYHRhc2tfc3RydWN0OjpwaV9sb2NrYCB3YXMgaGVsZCwgYmVjYXVzZSBvZiB0aGUgYHdhaXRsb2NrYCBsb2NrIHRoYXQmIzM5O3MgdXNlZCBieSB0aGUgYGxvY2FsX3RyeWxvY2soKWAgY2FsbCBpbiBga2ZyZWVfcmN1X3NoZWFmKClgLiBUaGUgY29tbWVudHMgc3VwcG9ydCB0aGlzLgoKSW4gYG1tL3NsdWIuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGNvbW1lbnRzLCBwcm9iYWJseSB0byBwcm92aWRlIGNvbnRleHQgYXJvdW5kIHRoZSBjaGFuZ2VzIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIHJlYXNvbnMgYmVoaW5kIHRoaXMgcGF0Y2gsIGJ1dCBpdCBzZWVtcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIHByb2JsZW0gb24gUFJFRU1QVF9SVCBzeXN0ZW1zIHdoZW4gZnJlZWluZyBzbGFiIG9iamVjdHMgdmlhIFJDVS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGJ5IGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGluY2x1ZGluZyB0aGUgcG9zc2libGUgbG9jayBkZXBlbmRlbmN5IGdyYXBocyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjYwOlx0XHQgKiBUaGlzIGxpc3QgaXMgbmFtZWQgXCYjMzQ7Q2hhbm5lbCAzXCYjMzQ7LlxuMTY2MTpcdFx0ICovXG4xNjYyOlx0XHRpZiAoaGVhZCBcdTAwMjZcdTAwMjYgIVdBUk5fT05fT05DRSghcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3VfZnVsbChcdTAwMjZoZWFkX2dwX3NuYXApKSlcbjE2NjM6XHRcdFx0a3ZmcmVlX3JjdV9saXN0KGhlYWQpO1xuMTY2NDpcdH1cbjE2NjU6XHRcbjE2NjY6XHRzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuMTY2NzpcdHtcbjE2Njg6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuMTY2OTpcdFx0c3RydWN0IHNsYWIgKnNsYWI7XG4xNjcwOlx0XG4xNjcxOlx0XHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4xNjcyOlx0XHRcdHJldHVybiBmYWxzZTtcbjE2NzM6XHRcbjE2NzQ6XHRcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbjE2NzU6XHRcdGlmICh1bmxpa2VseSghc2xhYikpXG4xNjc2Olx0XHRcdHJldHVybiBmYWxzZTtcbjE2Nzc6XHRcbjE2Nzg6XHRcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4xNjc5Olx0XHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbjE2ODA6XHRcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuMTY4MTpcdFxuMTY4MjpcdFx0cmV0dXJuIGZhbHNlO1xuMTY4MzpcdH1cbjE2ODQ6XHRcbjE2ODU6XHRzdGF0aWMgYm9vbFxuMTY4NjpcdG5lZWRfb2ZmbG9hZF9rcmMoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXG4xNjg3Olx0e1xuMTY4ODpcdFx0aW50IGk7XG4xNjg5Olx0XG4xNjkwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBGUkVFX05fQ0hBTk5FTFM7IGkmIzQzOyYjNDM7KVxuMTY5MTpcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2a3JjcC1cdTAwM2VidWxrX2hlYWRbaV0pKVxuMTY5MjpcdFx0XHRcdHJldHVybiB0cnVlO1xuMTY5MzpcdFxuMTY5NDpcdFx0cmV0dXJuICEhUkVBRF9PTkNFKGtyY3AtXHUwMDNlaGVhZCk7XG4xNjk1Olx0fVxuMTY5NjpcdFxuMTY5NzpcdHN0YXRpYyBib29sXG4xNjk4Olx0bmVlZF93YWl0X2Zvcl9rcndwX3dvcmsoc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cClcbjE2OTk6XHR7XG4xNzAwOlx0XHRpbnQgaTtcbjE3MDE6XHRcbjE3MDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEZSRUVfTl9DSEFOTkVMUzsgaSYjNDM7JiM0MzspXG4xNzAzOlx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZrcndwLVx1MDAzZWJ1bGtfaGVhZF9mcmVlW2ldKSlcbjE3MDQ6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjE3MDU6XHRcbjE3MDY6XHRcdHJldHVybiAhIWtyd3AtXHUwMDNlaGVhZF9mcmVlO1xuMTcwNzpcdH1cbjE3MDg6XHRcbjE3MDk6XHRzdGF0aWMgaW50IGtyY19jb3VudChzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMjA6XHRcdCAqIFBsZWFzZSBub3RlIHRoZXJlIGlzIGEgbGltaXRhdGlvbiBmb3IgdGhlIGhlYWQtbGVzc1xuMjAyMTpcdFx0ICogdmFyaWFudCwgdGhhdCBpcyB3aHkgdGhlcmUgaXMgYSBjbGVhciBydWxlIGZvciBzdWNoXG4yMDIyOlx0XHQgKiBvYmplY3RzOiBpdCBjYW4gYmUgdXNlZCBmcm9tIG1pZ2h0X3NsZWVwKCkgY29udGV4dFxuMjAyMzpcdFx0ICogb25seS4gRm9yIG90aGVyIHBsYWNlcyBwbGVhc2UgZW1iZWQgYW4gcmN1X2hlYWQgdG9cbjIwMjQ6XHRcdCAqIHlvdXIgZGF0YS5cbjIwMjU6XHRcdCAqL1xuMjAyNjpcdFx0aWYgKCFoZWFkKVxuMjAyNzpcdFx0XHRtaWdodF9zbGVlcCgpO1xuMjAyODpcdFxuMjAyOTpcdFx0LypcbjIwMzA6XHRcdCAqIGt2ZnJlZV9yY3UoKSBpcyBjYWxsZWQgYnkgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIHdpdGhcbjIwMzE6XHRcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcbjIwMzI6XHRcdCAqIHVzYWdlIGJlbG93IHdpbGwgYWNxdWlyZSB0aGUgd2FpdGxvY2sgd2hpY2ggbXVzdCBiZSBhdm9pZGVkLlxuMjAzMzpcdFx0ICogVGhlcmVmb3JlIGF2b2lkIGl0IG9uIFBSRUVNUFRfUlQuXG4yMDM0Olx0XHQgKi9cbjIwMzU6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuMjAzNjpcdFx0XHRyZXR1cm47XG4yMDM3Olx0XG4yMDM4Olx0XHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24mIzM5O3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cbjIwMzk6XHRcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShwdHIpKSB7XG4yMDQwOlx0XHRcdC8vIFByb2JhYmxlIGRvdWJsZSBrZnJlZV9yY3UoKSwganVzdCBsZWFrLlxuMjA0MTpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIGNhbGwuIHJjdV9oZWFkICVwXFxuXCYjMzQ7LFxuMjA0MjpcdFx0XHRcdCAgX19mdW5jX18sIGhlYWQpO1xuMjA0MzpcdFxuMjA0NDpcdFx0XHQvLyBNYXJrIGFzIHN1Y2Nlc3MgYW5kIGxlYXZlLlxuMjA0NTpcdFx0XHRyZXR1cm47XG4yMDQ2Olx0XHR9XG4yMDQ3Olx0XG4yMDQ4Olx0XHRrYXNhbl9yZWNvcmRfYXV4X3N0YWNrKHB0cik7XG4yMDQ5Olx0XHRzdWNjZXNzID0gYWRkX3B0cl90b19idWxrX2tyY19sb2NrKFx1MDAyNmtyY3AsIFx1MDAyNmZsYWdzLCBwdHIsICFoZWFkKTtcbjIwNTA6XHRcdGlmICghc3VjY2Vzcykge1xuMjA1MTpcdFx0XHRydW5fcGFnZV9jYWNoZV93b3JrZXIoa3JjcCk7XG4yMDUyOlx0XG4yMDUzOlx0XHRcdGlmIChoZWFkID09IE5VTEwpXG4yMDU0Olx0XHRcdFx0Ly8gSW5saW5lIGlmIGt2ZnJlZV9yY3Uob25lX2FyZykgY2FsbC5cbjIwNTU6XHRcdFx0XHRnb3RvIHVubG9ja19yZXR1cm47XG4yMDU2Olx0XG4yMDU3Olx0XHRcdGhlYWQtXHUwMDNlbmV4dCA9IGtyY3AtXHUwMDNlaGVhZDtcbjIwNTg6XHRcdFx0V1JJVEVfT05DRShrcmNwLVx1MDAzZWhlYWQsIGhlYWQpO1xuMjA1OTpcdFx0XHRhdG9taWNfaW5jKFx1MDAyNmtyY3AtXHUwMDNlaGVhZF9jb3VudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgX19rZnJlZV9yY3Vfc2hlYWZgIGluIG1tL3NsdWIuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBpbiBgbW0vc2x1Yi5jYCwgc28gaXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgU0xVQiBhbGxvY2F0b3IuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGRlYWxzIHdpdGggZnJlZWluZyBvYmplY3RzIGluIGEgZGVsYXllZCBvciBSQ1Utc2FmZSBtYW5uZXIuIFRoZSBuYW1lICYjMzQ7c2hlYWYmIzM0OyBzdWdnZXN0cyBhIGdyb3VwaW5nIG9yIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBiZWluZyBoYW5kbGVkIHRvZ2V0aGVyLCBsaWtlbHkgdG8gaW1wcm92ZSBlZmZpY2llbmN5IG9yIGF0b21pYyBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbSB0byBlbnN1cmUgc2FmZSBjb25jdXJyZW50IG1lbW9yeSBkZWFsbG9jYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgaXQgYWRkcyBmcmVlZCBvYmplY3RzIHRvIHNvbWUgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZSBhbmQgaG93IHRoZSBhY3R1YWwgZnJlZWluZyBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciB0aGUgZ3JhY2UgcGVyaW9kLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQgYW5kIGhvdyBpdCBkZWFscyB3aXRoIE5VTUEgY29uc2lkZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGZyZWVpbmcgb2JqZWN0cyB0aGF0IG1pZ2h0IGJlIHNjYXR0ZXJlZCBhY3Jvc3MgZGlmZmVyZW50IG1lbW9yeSBub2Rlcy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNDgwLVxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXHRcdGdvdG8gZmFsbGJhY2s7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xNjY2PXN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjc5LVx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cbi0tXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy00MTYwLVx0XHQgKiB3ZSBkb24mIzM5O3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXG5tbS9zbHViLmM6NDE2MTpcdFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cbm1tL3NsdWIuYy00MTYyLVx0XHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXG5tbS9zbHViLmM6NDE2MzpcdFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxubW0vc2x1Yi5jLTQxNjQtXHRcdCAqL1xuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA4OS0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2Vcbm1tL3NsdWIuYzo2MDkwOiAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxuLS1cbm1tL3NsdWIuYz02MTAxPXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYxMDItXG5tbS9zbHViLmM6NjEwMzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2x1Yi5jLTYxMDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBncmFiIHRoZSBjb21taXQgZGV0YWlscyB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gSG1tLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYWJvdXQgYGt2ZnJlZV9jYWxsX3JjdSgpYCwgd2hpY2ggcmluZ3MgYSBiZWxsIGFzIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24gcmVsYXRlZCB0byBSQ1UtYmFzZWQgbWVtb3J5IGZyZWVpbmcuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGp1c3RpZmllcyBmdXp6aW5nPwoKTGV0JiMzOTtzIGNhcmVmdWxseSBwaWNrIGFwYXJ0IHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyBQUkVFTVBUX1JUIGlzIGFmZmVjdGVkLiBCZWZvcmUgdGhlIHBhdGNoLCBga2ZyZWVfcmN1X3NoZWFmYCBpbiBQUkVFTVBUX1JUIGNhbGxlZCBgX19rZnJlZV9yY3Vfc2hlYWZgIHdpdGggYSBzcGVjaWZpYyBmbGFnLiBOb3csIHdpdGggdGhlIHBhdGNoLCBga3ZmcmVlX2NhbGxfcmN1KClgICpjb21wbGV0ZWx5KiBieXBhc3NlcyBga2ZyZWVfcmN1X3NoZWFmYC4gVGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBmb3IgIVBSRUVNUFRfUlQuICBBaGEhIEluIG5vbi1SVCBidWlsZHMsIHRoZSBga2ZyZWVfcmN1X3NoZWFmYCBpcyBzdGlsbCB1c2VkIGFuZCBwYXNzZXMgYSBkZWZhdWx0IGZsYWcgdG8gdGhlIHNhbWUgaW50ZXJuYWwgZnVuY3Rpb24uCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBrdmZyZWVfY2FsbF9yY3VgIGEgaG90IHBhdGg/IEdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIG1lbW9yeSBmcmVlaW5nLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gSXQmIzM5O3MgY2FsbGVkIGV2ZXJ5d2hlcmUuCgpCdXQsIGlzIHRoaXMganVzdCBhbiBpbnRlcm5hbCBtbSBsb2NraW5nIGZpeCwgYW4gUlQgd29ya2Fyb3VuZCwgb3IgaXMgaXQgc29tZXRoaW5nIGZ1enotd29ydGh5PyBUaW1lIHRvIHB1bGwgb3V0IHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGd1aWRlbGluZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBpdCYjMzk7cyBub3QgYSBkb2N1bWVudGF0aW9uIGNoYW5nZSwgbm90IHB1cmVseSBsb2dnaW5nLCBubyBjb25zdGFudCBjaGFuZ2VzLCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgdW5yZWFjaGFibGUgY29kZSwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0ZWFyZG93bi4gIFRoZSBndWlkZWxpbmVzIHN0YXRlOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClNpbmNlIHRoaXMgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgdGhhdCBtZWFucyB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3cgY29tZXMgdGhlIG5leHQgY3JpdGljYWwgc3RlcDogaWRlbnRpZnlpbmcgYEZvY3VzU3ltYm9sc2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5OiAmIzM0O0V4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsKCk9rYXksIHNvIHdoYXQgZnVuY3Rpb25zIHdlcmUgYWN0dWFsbHkgbW9kaWZpZWQgb3IgaW50cm9kdWNlZD8gTG9va2luZyBhdCBgbW0vc2xhYl9jb21tb24uY2AsIHdlIGhhdmUgYGtmcmVlX3JjdV9zaGVhZmAgKHdoaWNoIGlzIHN0YXRpYykgYW5kIGBrdmZyZWVfY2FsbF9yY3VgIChub24tc3RhdGljLCBleHBvcnRlZCDigJMgYHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilgKS4KClRoZSBxdWVzdGlvbiBpcywgaXMgYGt2ZnJlZV9jYWxsX3JjdWAgYSAmIzM0O2dlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24mIzM0Oz8gT3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBlbnRyeSBwb2ludD8gT3Igc2hvdWxkIGBGb2N1c1N5bWJvbHNgIGJlIGVtcHR5PyBDYW4gYEZvY3VzU3ltYm9sc2AgYmUgZW1wdHkgaWYgYWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgb3Igc3RhdGljPyBMZXQmIzM5O3MgcmUtcmVhZCB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsKClJpZ2h0ISBMZXQgbWUgdGhpbmsuLi4gd2hhdCBhcmUgdGhlIHJlbGV2YW50IGVudHJ5cG9pbnRzIGZvciBga2ZyZWVfcmN1YCwgYGt2ZnJlZV9yY3VgIGFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYD8gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgIHRvIGZpbmQgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xubW0vc2xhYl9jb21tb24uYy0xMjk4LVxubW0vc2xhYl9jb21tb24uYzoxMjk5OnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzIzLX1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xubW0vc2xhYl9jb21tb24uYy0xMzI1LVxuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA5MC0gKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcbm1tL3NsdWIuYzo2MDkxOiAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbm1tL3NsdWIuYy02MDkyLSAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIFJDVSBhbmQgS2ZyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gbWVtb3J5IGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIG9mIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCBga3ZmcmVlX2NhbGxfcmN1YC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciBudWFuY2VzLCBob3cgdGhleSBiZWhhdmUsIGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgY2FzZXMgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuIEkgYW0gZ29pbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGV5JiMzOTt2ZSBiZWVuIG1vZGlmaWVkLgoKQmV5b25kIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUuIExldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gYWZmZWN0ZWQgaW4gdGhlIG1vc3QgcmVjZW50IEhFQUQgY29tbWl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEFyZSB0aGVzZSBpc29sYXRlZCBtb2RpZmljYXRpb25zIG9yIHBhcnQgb2Ygc29tZXRoaW5nIGJpZ2dlcj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gRGV0ZXJtaW5pbmcgd2hhdCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYSBsYXJnZXIgc3lzdGVtLWxldmVsIGNoYW5nZSBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGUgbGFyZ2VyIHBpY3R1cmUgd2lsbCBob3BlZnVsbHkgZXhwb3NlIGFueSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9mIGNoYW5nZXMgdGhhdCBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3JjdV9zaGVhZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNDgwLVxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXHRcdGdvdG8gZmFsbGJhY2s7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xNjIyPXN0YXRpYyB2b2lkIGtmcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTE2NjUtXG5tbS9zbGFiX2NvbW1vbi5jOjE2NjY6c3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbm1tL3NsYWJfY29tbW9uLmMtMTY2Ny17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjc5LVx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIwMTM9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjAzNC1cdCAqL1xubW0vc2xhYl9jb21tb24uYzoyMDM1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYga2ZyZWVfcmN1X3NoZWFmKHB0cikpXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzYtXHRcdHJldHVybjtcbi0tXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy00MTYwLVx0XHQgKiB3ZSBkb24mIzM5O3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXG5tbS9zbHViLmM6NDE2MTpcdFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cbm1tL3NsdWIuYy00MTYyLVx0XHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXG5tbS9zbHViLmM6NDE2MzpcdFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxubW0vc2x1Yi5jLTQxNjQtXHRcdCAqL1xuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA4OS0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2Vcbm1tL3NsdWIuYzo2MDkwOiAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxuLS1cbm1tL3NsdWIuYy02MTAwLSAqL1xubW0vc2x1Yi5jOjYxMDE6c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XG5tbS9zbHViLmMtNjEwMi1cbm1tL3NsdWIuYzo2MTAzOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG5tbS9zbHViLmMtNjEwNC17XG4tLVxubW0vc2x1Yi5jLTYxMTEtXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jOjYxMTI6XHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xubW0vc2x1Yi5jLTYxMTMtXG4tLVxubW0vc2x1Yi5jLTYyMTEtXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jOjYyMTI6XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG5tbS9zbHViLmMtNjIxMy1cdHJldHVybiB0cnVlO1xuLS1cbm1tL3NsdWIuYy02MjE3LVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbm1tL3NsdWIuYzo2MjE4Olx0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xubW0vc2x1Yi5jLTYyMTktXHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUkVFTVBUX1JUIGFuZCBrdmZyZWVfY2FsbF9yY3UgSW50ZXJhY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBDT05GSUdfUFJFRU1QVF9SVGAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGNvZGUgdG8gZnVuY3Rpb24gYSBjZXJ0YWluIHdheSwgb3IgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIHBhdGguIFNvLCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBga3ZmcmVlX2NhbGxfcmN1YC4gVGhlIGNvZGUgY2hlY2tzIGAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgIGFuZCwgaWYgdHJ1ZSwgY2FsbHMgYGtmcmVlX3JjdV9zaGVhZihwdHIpYC4gVGhhdCBtZWFucywgaW4gYSBzdGFuZGFyZCBrZXJuZWwsIHdpdGhvdXQgYFBSRUVNUFRfUlRgLCBga2ZyZWVfcmN1X3NoZWFmYCAqaXMqIGV4ZWN1dGVkLiBBbmQgd2l0aGluIGBrZnJlZV9yY3Vfc2hlYWZgLCB3ZSBzZWUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBiZWluZyBjYWxsZWQgd2l0aCBgU0xBQl9GUkVFX0RFRkFVTFRgLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBpbXBvcnRhbnQgYml0LCB3aXRoIGBDT05GSUdfUFJFRU1QVF9SVGAgZW5hYmxlZCwgdGhlIGVudGlyZSBjYWxsIHRvIGBrZnJlZV9yY3Vfc2hlYWZgIGlzIGJ5cGFzc2VkIGluIGBrdmZyZWVfY2FsbF9yY3VgLiBJbnRlcmVzdGluZy4KCk5vdywgaG9sZCBvbi4gSSBuZWVkIHRvIGNsYXJpZnk6IElzIGBQUkVFTVBUX1JUYCBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IHdlIGNhbiB0ZXN0IGhlcmU/IE9yIGlzIHRoZXJlIHNvbWV0aGluZyBlbHNlIGF0IHBsYXksIHBlcmhhcHMgYENPTkZJR19TTFVCYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gYmUgc3VyZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgaW5pdC9LY29uZmlnYCBvciBtYXliZSBga2VybmVsL0tjb25maWcucHJlZW1wdGAgdG8gZmluZCBgUFJFRU1QVF9SVGAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUX1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cdGJvb2wgXCYjMzQ7RnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgcHJlZW1wdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGp1bXAgaW50byBga2VybmVsL0tjb25maWcucHJlZW1wdGAuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHRoaXMgc3R1ZmYgYXJlIGFyb3VuZCBsaW5lIDkyLiBMZXQgbWUgZ3JhYiBteSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdGRlcGVuZHMgb24gIUFSQ0hfTk9fUFJFRU1QVFxuICA4MTpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19QUkVFTVBUX0xBWllcbiAgODI6XHRcdHNlbGVjdCBQUkVFTVBUX0JVSUxEIGlmICFQUkVFTVBUX0RZTkFNSUNcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBzY2hlZHVsZXIgZHJpdmVuIHByZWVtcHRpb24gbW9kZWwgdGhhdFxuICA4NTpcdFx0ICBpcyBmdW5kYW1lbnRhbGx5IHNpbWlsYXIgdG8gZnVsbCBwcmVlbXB0aW9uLCBidXQgaXMgbGVzc1xuICA4NjpcdFx0ICBlYWdlciB0byBwcmVlbXB0IFNDSEVEX05PUk1BTCB0YXNrcyBpbiBhbiBhdHRlbXB0IHRvXG4gIDg3Olx0XHQgIHJlZHVjZSBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGFuZCByZWNvdmVyIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlXG4gIDg4Olx0XHQgIGdhaW5zIHNlZW4gZnJvbSB1c2luZyBWb2x1bnRhcnkgcHJlZW1wdGlvbi5cbiAgODk6XHRcbiAgOTA6XHRlbmRjaG9pY2VcbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgUFJFRU1QVF9SVFxuICA5MzpcdFx0Ym9vbCBcJiMzNDtGdWxseSBQcmVlbXB0aWJsZSBLZXJuZWwgKFJlYWwtVGltZSlcJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gRVhQRVJUIFx1MDAyNlx1MDAyNiBBUkNIX1NVUFBPUlRTX1JUIFx1MDAyNlx1MDAyNiAhQ09NUElMRV9URVNUXG4gIDk1Olx0XHRzZWxlY3QgUFJFRU1QVElPTlxuICA5NjpcdFx0aGVscFxuICA5NzpcdFx0ICBUaGlzIG9wdGlvbiB0dXJucyB0aGUga2VybmVsIGludG8gYSByZWFsLXRpbWUga2VybmVsIGJ5IHJlcGxhY2luZ1xuICA5ODpcdFx0ICB2YXJpb3VzIGxvY2tpbmcgcHJpbWl0aXZlcyAoc3BpbmxvY2tzLCByd2xvY2tzLCBldGMuKSB3aXRoXG4gIDk5Olx0XHQgIHByZWVtcHRpYmxlIHByaW9yaXR5LWluaGVyaXRhbmNlIGF3YXJlIHZhcmlhbnRzLCBlbmZvcmNpbmdcbiAxMDA6XHRcdCAgaW50ZXJydXB0IHRocmVhZGluZyBhbmQgaW50cm9kdWNpbmcgbWVjaGFuaXNtcyB0byBicmVhayB1cCBsb25nXG4gMTAxOlx0XHQgIG5vbi1wcmVlbXB0aWJsZSBzZWN0aW9ucy4gVGhpcyBtYWtlcyB0aGUga2VybmVsLCBleGNlcHQgZm9yIHZlcnlcbiAxMDI6XHRcdCAgbG93IGxldmVsIGFuZCBjcml0aWNhbCBjb2RlIHBhdGhzIChlbnRyeSBjb2RlLCBzY2hlZHVsZXIsIGxvd1xuIDEwMzpcdFx0ICBsZXZlbCBpbnRlcnJ1cHQgaGFuZGxpbmcpIGZ1bGx5IHByZWVtcHRpYmxlIGFuZCBicmluZ3MgbW9zdFxuIDEwNDpcdFx0ICBleGVjdXRpb24gY29udGV4dHMgdW5kZXIgc2NoZWR1bGVyIGNvbnRyb2wuXG4gMTA1Olx0XG4gMTA2Olx0XHQgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIHN5c3RlbXMgd2hpY2hcbiAxMDc6XHRcdCAgcmVxdWlyZSByZWFsLXRpbWUgZ3VhcmFudGVlcy5cbiAxMDg6XHRcbiAxMDk6XHRjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG4gMTEwOlx0XHRib29sIFwmIzM0O0VuZm9yY2Ugc29mdGlycSBzeW5jaHJvbmlzYXRpb24gb24gUFJFRU1QVF9SVFwmIzM0O1xuIDExMTpcdFx0ZGVwZW5kcyBvbiBQUkVFTVBUX1JUXG4gMTEyOlx0XHRoZWxwXG4gMTEzOlx0XHQgIEVuZm9yY2Ugc3luY2hyb25pc2F0aW9uIGFjcm9zcyB0aGUgc29mdGlycXMgY29udGV4dC4gT24gUFJFRU1QVF9SVFxuIDExNDpcdFx0ICB0aGUgc29mdGlycSBpcyBwcmVlbXB0aWJsZS4gVGhpcyBlbmZvcmNlcyB0aGUgc2FtZSBwZXItQ1BVIEJMS1xuIDExNTpcdFx0ICBzZW1hbnRpYyBub24tUFJFRU1QVF9SVCBidWlsZHMgaGF2ZS4gVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZFxuIDExNjpcdFx0ICBiZWNhdXNlIHBlci1DUFUgbG9ja3Mgd2VyZSBhZGRlZCB0byBhdm9pZCB0aGUgcGVyLUNQVSBCS0wuXG4gMTE3Olx0XG4gMTE4Olx0XHQgIFRoaXMgc3dpdGNoIHByb3ZpZGVzIHRoZSBvbGQgYmVoYXZpb3VyIGZvciB0ZXN0aW5nIHJlYXNvbnMuIFNlbGVjdFxuIDExOTpcdFx0ICB0aGlzIGlmIHlvdSBzdXNwZWN0IGFuIGVycm9yIHdpdGggcHJlZW1wdGlibGUgc29mdGlycSBhbmQgd2FudCB0ZXN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjcyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IFNsYWIgRnJlZWluZyBNZWNoYW5pc21zKioKClJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGhhbmRsZXMgZnJlZWluZyBtZW1vcnkgc2xhYnMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUga2V5IGNvbnN0YW50cyBvciBtYWNyb3MgaW52b2x2ZWQuIEZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGBTTEFCX0ZSRUVfREVGQVVMVGAgYW5kIGBTTEFCX0ZSRUVfTk9MT0NLYCBhY3R1YWxseSBzaWduaWZ5LiBUaGVpciBuYW1lcyBhcmUgc3VnZ2VzdGl2ZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZWlyIGJlaGF2aW9yIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYF9ERUZBVUxUYCByZXByZXNlbnRzIHRoZSB0eXBpY2FsIHNsYWIgZnJlZWluZyBtZWNoYW5pc20gYW5kIGlmIGBfTk9MT0NLYCBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBzdHJhdGVneS4gTWF5YmUgdGhleSByZWxhdGUgdG8gbG9ja2luZyBzdHJhdGVnaWVzIG9yIGRlZmF1bHQgYmVoYXZpb3JzLgoKVG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLCBJJiMzOTttIGdvaW5nIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgU0xBQl9GUkVFX2Agd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIHBhdHRlcm4gaXMgdXN1YWxseSBoZWxwZnVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbiBvdmVydmlldyBvZiBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoZXNlIGNvbnN0YW50cyBhcmUgdXRpbGl6ZWQuIFRoaXMgd2lsbCBzaG93IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgdG8gd29yayB3aXRoIHRoZSBkZWZpbmVkIGJlaGF2aW9yLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIHV0aWxpemF0aW9ucywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgaG93IHRoZXNlIG1lbW9yeSBzbGFicyBhcmUgbWFuYWdlZCBhbmQgZnJlZWQuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgd2hldGhlciBJJiMzOTttIGRlYnVnZ2luZywgb3B0aW1pemluZywgb3Igc2ltcGx5IGdhaW5pbmcgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0xBQl9GUkVFXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jPTI4Mz1zdGF0aWMgdm9pZCBsa2R0bV9CVUREWV9JTklUX09OX0FMTE9DKHZvaWQpXG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYy0zMTUtXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjMxNjpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfRE9VQkxFKHZvaWQpXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMxNy17XG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYy0zMzItXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjMzMzpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfQ1JPU1Modm9pZClcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzM0LXtcbi0tXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM0OC1cbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM6MzQ5OnN0YXRpYyB2b2lkIGxrZHRtX1NMQUJfRlJFRV9QQUdFKHZvaWQpXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM1MC17XG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYz0zNzM9c3RhdGljIHN0cnVjdCBjcmFzaHR5cGUgY3Jhc2h0eXBlc1tdID0ge1xuLS1cbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzgyLVx0Q1JBU0hUWVBFKEJVRERZX0lOSVRfT05fQUxMT0MpLFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODM6XHRDUkFTSFRZUEUoU0xBQl9GUkVFX0RPVUJMRSksXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjM4NDpcdENSQVNIVFlQRShTTEFCX0ZSRUVfQ1JPU1MpLFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODU6XHRDUkFTSFRZUEUoU0xBQl9GUkVFX1BBR0UpLFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYy0zODYtfTtcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmM9NDg0PXZvaWQga2FzYW5faW5pdF9vYmplY3RfbWV0YShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIGNvbnN0IHZvaWQgKm9iamVjdClcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmMtNDk2LVx0ICogdmFsdWUgZm9yIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIGEgbmV3bHkgYWxsb2NhdGVkIG9iamVjdCBpcyBub3Rcbm1tL2thc2FuL2dlbmVyaWMuYzo0OTc6XHQgKiBLQVNBTl9TTEFCX0ZSRUVfTUVUQS5cbm1tL2thc2FuL2dlbmVyaWMuYy00OTgtXHQgKi9cbi0tXG5tbS9rYXNhbi9nZW5lcmljLmM9NTA3PXN0YXRpYyB2b2lkIHJlbGVhc2VfZnJlZV9tZXRhKGNvbnN0IHZvaWQgKm9iamVjdCwgc3RydWN0IGthc2FuX2ZyZWVfbWV0YSAqbWV0YSlcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmMtNTA5LVx0LyogQ2hlY2sgaWYgZnJlZSBtZXRhIGlzIHZhbGlkLiAqL1xubW0va2FzYW4vZ2VuZXJpYy5jOjUxMDpcdGlmICgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhvYmplY3QpICE9IEtBU0FOX1NMQUJfRlJFRV9NRVRBKVxubW0va2FzYW4vZ2VuZXJpYy5jLTUxMS1cdFx0cmV0dXJuO1xuLS1cbm1tL2thc2FuL2dlbmVyaWMuYz01NzM9dm9pZCBrYXNhbl9zYXZlX2ZyZWVfaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKm9iamVjdClcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmMtNTg2LVx0LyogTWFyayBmcmVlIG1ldGEgYXMgdmFsaWQuICovXG5tbS9rYXNhbi9nZW5lcmljLmM6NTg3Olx0Kih1OCAqKWthc2FuX21lbV90b19zaGFkb3cob2JqZWN0KSA9IEtBU0FOX1NMQUJfRlJFRV9NRVRBO1xubW0va2FzYW4vZ2VuZXJpYy5jLTU4OC19XG4tLVxubW0va2FzYW4va2FzYW4uaD0xMjQ9c3RhdGljIGlubGluZSBib29sIGthc2FuX3JlcXVpcmVzX21ldGEodm9pZClcbi0tXG5tbS9rYXNhbi9rYXNhbi5oLTE1Ny1cbm1tL2thc2FuL2thc2FuLmg6MTU4OiNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFX01FVEFcdDB4RkEgIC8qIGZyZWVkIHNsYWIgb2JqZWN0IHdpdGggZnJlZSBtZXRhICovXG5tbS9rYXNhbi9rYXNhbi5oLTE1OS0jZGVmaW5lIEtBU0FOX0dMT0JBTF9SRURaT05FXHQweEY5ICAvKiByZWR6b25lIGZvciBnbG9iYWwgdmFyaWFibGUgKi9cbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTI3MD1zdHJ1Y3QgcWxpc3Rfbm9kZSB7XG4tLVxubW0va2FzYW4va2FzYW4uaC0yODYtICogRnJlZSBtZXRhIGlzIGNvbnNpZGVyZWQgdmFsaWQgd2hlbmV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBzaGFkb3cgYnl0ZSB0aGF0XG5tbS9rYXNhbi9rYXNhbi5oOjI4NzogKiBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgOCBieXRlcyBvZiB0aGUgb2JqZWN0IGlzIEtBU0FOX1NMQUJfRlJFRV9NRVRBLlxubW0va2FzYW4va2FzYW4uaC0yODgtICovXG4tLVxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz03ND1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NoYWRvd19idWdfdHlwZShzdHJ1Y3Qga2FzYW5fcmVwb3J0X2luZm8gKmluZm8pXG4tLVxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYy0xMTItXHRjYXNlIEtBU0FOX1NMQUJfRlJFRTpcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmM6MTEzOlx0Y2FzZSBLQVNBTl9TTEFCX0ZSRUVfTUVUQTpcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTE0LVx0XHRidWdfdHlwZSA9IFwmIzM0O3NsYWItdXNlLWFmdGVyLWZyZWVcJiMzNDs7XG4tLVxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz0xNjA9dm9pZCBrYXNhbl9jb21wbGV0ZV9tb2RlX3JlcG9ydF9pbmZvKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcbi0tXG5tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jLTE3NS1cbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmM6MTc2Olx0aWYgKCoodTggKilrYXNhbl9tZW1fdG9fc2hhZG93KGluZm8tXHUwMDNlb2JqZWN0KSA9PSBLQVNBTl9TTEFCX0ZSRUVfTUVUQSkge1xubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYzoxNzc6XHRcdC8qIEZyZWUgbWV0YSBtdXN0IGJlIHByZXNlbnQgd2l0aCBLQVNBTl9TTEFCX0ZSRUVfTUVUQS4gKi9cbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTc4LVx0XHRmcmVlX21ldGEgPSBrYXNhbl9nZXRfZnJlZV9tZXRhKGluZm8tXHUwMDNlY2FjaGUsIGluZm8tXHUwMDNlb2JqZWN0KTtcbi0tXG5tbS9zbGFiLmgtMjYtXG5tbS9zbGFiLmg6Mjc6I2RlZmluZSBTTEFCX0ZSRUVfREVGQVVMVFx0MHgwMCAvKiBubyBmbGFncyAqL1xubW0vc2xhYi5oOjI4OiNkZWZpbmUgU0xBQl9GUkVFX05PTE9DS1x0MHgwMSAvKiBzcGlubmluZyBub3QgYWxsb3dlZCAqL1xubW0vc2xhYi5oLTI5LVxubW0vc2xhYi5oPTMwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRvX2FsbG9jX2ZsYWdzKHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2xhYi5oLTMxLXtcbm1tL3NsYWIuaDozMjpcdGlmIChmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKVxubW0vc2xhYi5oLTMzLVx0XHRyZXR1cm4gU0xBQl9BTExPQ19OT0xPQ0s7XG4tLVxubW0vc2xhYi5oPTQzPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2xhYi5oLTQ0LXtcbm1tL3NsYWIuaDo0NTpcdHJldHVybiAhKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spO1xubW0vc2xhYi5oLTQ2LX1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMxNS1cbm1tL3NsYWJfY29tbW9uLmM6MTMxNjpcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcbm1tL3NsYWJfY29tbW9uLmMtMTMxNy1cdFx0Z290byBmYWxsYmFjaztcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTE2NjY9c3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTE2NzktXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbm1tL3NsYWJfY29tbW9uLmM6MTY4MDpcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xubW0vc2xhYl9jb21tb24uYy0xNjgxLVxuLS1cbm1tL3NsdWIuYz0yODQ1PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODU4LVxubW0vc2x1Yi5jOjI4NTk6XHRpZiAodW5saWtlbHkoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSykpXG5tbS9zbHViLmMtMjg2MC1cdFx0a2ZyZWVfbm9sb2NrKHNoZWFmKTtcbi0tXG5tbS9zbHViLmM9Mjg2Nz1zdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG5tbS9zbHViLmMtMjg2OC17XG5tbS9zbHViLmM6Mjg2OTpcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xubW0vc2x1Yi5jLTI4NzAtfVxuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA5MS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpXG5tbS9zbHViLmM6NjA5MjogKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcbm1tL3NsdWIuYy02MDkzLSAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGtkdG0vdGVzdHMudHh0PTMyPUJVRERZX0lOSVRfT05fQUxMT0MgTWVtb3J5IGFwcGVhcnMgaW5pdGlhbGl6ZWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xrZHRtL3Rlc3RzLnR4dDozMzpTTEFCX0ZSRUVfRE9VQkxFXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzQ6U0xBQl9GUkVFX0NST1NTXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzU6U0xBQl9GUkVFX1BBR0VcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xrZHRtL3Rlc3RzLnR4dC0zNi0jU09GVExPQ0tVUCBIYW5ncyB0aGUgc3lzdGVtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFNMVUIgYW5kIFJDVSBTaGVhdmVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljcy4gTXkgZm9jdXMgaXMgb24gYG1tL3NsYWJfY29tbW9uLmNgIGFuZCBgbW0vc2x1Yi5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIFNMQUIgYW5kIFNMVUIgYWxsb2NhdG9ycyByZXNpZGVzLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgZnJlZWluZyBtZW1vcnksIHNwZWNpZmljYWxseSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgU0xBQl9GUkVFX0RFRkFVTFRgIGFuZCBgU0xBQl9GUkVFX05PTE9DS2AsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIGBrZnJlZV9yY3Vfc2hlYWZgLiBUaGUgbmV3IFNMVUIgc2hlYWYvYmF0Y2hpbmcgZmVhdHVyZSwgSSB0aGluaywgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcy4gVGltZSB0byB0cmFjZSB0aGluZ3MgZG93bi4gSSBzaG91bGQgY2hlY2sgb3V0IGBfX2tmcmVlX3JjdV9zaGVhZmAgaW4gYG1tL3NsdWIuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgaG93IFNMVUIgc2hlYXZlcyBhcmUgaGFuZGxlZCBkdXJpbmcgbWVtb3J5IHJlbGVhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjEwMDpcdCAqL1xuNjEwMTpcdHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xuNjEwMjpcdFxuNjEwMzpcdGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG42MTA0Olx0e1xuNjEwNTpcdFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbjYxMDY6XHRcdHN0cnVjdCBzbGFiX3NoZWFmICpyY3Vfc2hlYWY7XG42MTA3Olx0XHRib29sIGFsbG93X3NwaW4gPSBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGZyZWVfZmxhZ3MpO1xuNjEwODpcdFxuNjEwOTpcdFx0Vk1fV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBhbGxvd19zcGluKTtcbjYxMTA6XHRcbjYxMTE6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG42MTEyOlx0XHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuNjExMzpcdFxuNjExNDpcdFx0aWYgKCFsb2NhbF90cnlsb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpXG42MTE1Olx0XHRcdGdvdG8gZmFpbDtcbjYxMTY6XHRcbjYxMTc6XHRcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbjYxMTg6XHRcbjYxMTk6XHRcdGlmICh1bmxpa2VseSghcGNzLVx1MDAzZXJjdV9mcmVlKSkge1xuNjEyMDpcdFx0XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XG42MTIxOlx0XHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG42MTIyOlx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xuNjEyMzpcdFx0XHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcbjYxMjQ6XHRcbjYxMjU6XHRcdFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBmYWxsIGJhY2sgKi9cbjYxMjY6XHRcdFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbjYxMjc6XHRcdFx0XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbjYxMjg6XHRcdFx0XHRnb3RvIGZhaWw7XG42MTI5Olx0XHRcdH1cbjYxMzA6XHRcbjYxMzE6XHRcdFx0aWYgKHBjcy1cdTAwM2VzcGFyZSBcdTAwMjZcdTAwMjYgcGNzLVx1MDAzZXNwYXJlLVx1MDAzZXNpemUgPT0gMCkge1xuNjEzMjpcdFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IHBjcy1cdTAwM2VzcGFyZTtcbjYxMzM6XHRcdFx0XHRwY3MtXHUwMDNlc3BhcmUgPSBOVUxMO1xuNjEzNDpcdFx0XHRcdGdvdG8gZG9fZnJlZTtcbjYxMzU6XHRcdFx0fVxuNjEzNjpcdFxuNjEzNzpcdFx0XHRiYXJuID0gZ2V0X2Jhcm4ocyk7XG42MTM4Olx0XHRcdGlmICghYmFybikge1xuNjEzOTpcdFx0XHRcdGxvY2FsX3VubG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spO1xuNjE0MDpcdFx0XHRcdGdvdG8gZmFpbDtcbjYxNDE6XHRcdFx0fVxuNjE0MjpcdFxuNjE0MzpcdFx0XHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xuNjE0NDpcdFxuNjE0NTpcdFx0XHRpZiAoZW1wdHkpIHtcbjYxNDY6XHRcdFx0XHRwY3MtXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcbjYxNDc6XHRcdFx0XHRnb3RvIGRvX2ZyZWU7XG42MTQ4Olx0XHRcdH1cbjYxNDk6XHRcbjYxNTA6XHRcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG42MTUxOlx0XG42MTUyOlx0XHRcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7XG42MTUzOlx0XG42MTU0Olx0XHRcdGlmICghZW1wdHkpXG42MTU1Olx0XHRcdFx0Z290byBmYWlsO1xuNjE1NjpcdFxuNjE1NzpcdFx0XHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSkge1xuNjE1ODpcdFx0XHRcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBlbXB0eSwgZnJlZV9mbGFncyk7XG42MTU5Olx0XHRcdFx0Z290byBmYWlsO1xuNjE2MDpcdFx0XHR9XG42MTYxOlx0XG42MTYyOlx0XHRcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbjYxNjM6XHRcbjYxNjQ6XHRcdFx0aWYgKHVubGlrZWx5KHBjcy1cdTAwM2VyY3VfZnJlZSkpXG42MTY1Olx0XHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbjYxNjY6XHRcdFx0ZWxzZVxuNjE2NzpcdFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuNjE2ODpcdFx0fVxuNjE2OTpcdFxuNjE3MDpcdGRvX2ZyZWU6XG42MTcxOlx0XG42MTcyOlx0XHRyY3Vfc2hlYWYgPSBwY3MtXHUwMDNlcmN1X2ZyZWU7XG42MTczOlx0XG42MTc0Olx0XHQvKlxuNjE3NTpcdFx0ICogU2luY2Ugd2UgZmx1c2ggaW1tZWRpYXRlbHkgd2hlbiBzaXplIHJlYWNoZXMgY2FwYWNpdHksIHdlIG5ldmVyIHJlYWNoXG42MTc2Olx0XHQgKiB0aGlzIHdpdGggc2l6ZSBhbHJlYWR5IGF0IGNhcGFjaXR5LCBzbyBubyBPT0Igd3JpdGUgaXMgcG9zc2libGUuXG42MTc3Olx0XHQgKi9cbjYxNzg6XHRcdHJjdV9zaGVhZi1cdTAwM2VvYmplY3RzW3JjdV9zaGVhZi1cdTAwM2VzaXplJiM0MzsmIzQzO10gPSBvYmo7XG42MTc5Olx0XG42MTgwOlx0XHRpZiAobGlrZWx5KHJjdV9zaGVhZi1cdTAwM2VzaXplIFx1MDAzYyBzLVx1MDAzZXNoZWFmX2NhcGFjaXR5KSkge1xuNjE4MTpcdFx0XHRyY3Vfc2hlYWYgPSBOVUxMO1xuNjE4MjpcdFx0fSBlbHNlIHtcbjYxODM6XHRcdFx0cGNzLVx1MDAzZXJjdV9mcmVlID0gTlVMTDtcbjYxODQ6XHRcdFx0cmN1X3NoZWFmLVx1MDAzZW5vZGUgPSBudW1hX25vZGVfaWQoKTtcbjYxODU6XHRcdH1cbjYxODY6XHRcbjYxODc6XHRcdC8qXG42MTg4Olx0XHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xuNjE4OTpcdFx0ICogZmx1c2hfYWxsX3JjdV9zaGVhdmVzKCkgZG9lc24mIzM5O3QgbWlzcyB0aGlzIHNoZWFmXG42MTkwOlx0XHQgKi9cbjYxOTE6XHRcdGlmIChyY3Vfc2hlYWYpIHtcbjYxOTI6XHRcdFx0LypcbjYxOTM6XHRcdFx0ICogV2l0aCAhYWxsb3dfc3Bpbiwgd2UgbWlnaHQgaGF2ZSBpbnRlcnJ1cHRlZCBjYWxsX3JjdSgpJiMzOTtzXG42MTk0Olx0XHRcdCAqIElSUS1kaXNhYmxlZCBjcml0aWNhbCBzZWN0aW9uLiBJZiBJUlFzIGFyZSBub3QgZGlzYWJsZWQsXG42MTk1Olx0XHRcdCAqIHdlIGtub3cgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuXG42MTk2Olx0XHRcdCAqL1xuNjE5NzpcdFx0XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSkpIHtcbjYxOTg6XHRcdFx0XHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbjYxOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYF9fa2ZyZWVfcmN1X3NoZWFmYCBoYXMgYSBjb25kaXRpb25hbCB3YXJuaW5nLCBgVk1fV0FSTl9PTl9PTkNFYCwgdGhhdCB0cmlnZ2VycyBpZiBgYWxsb3dfc3BpbmAgKHdoaWNoIGlzIHRydWUgaW4gdGhlIGRlZmF1bHQgc3RhdGUpIGFuZCBgQ09ORklHX1BSRUVNUFRfUlRgIGFyZSBib3RoIGVuYWJsZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgbWVtb3J5IGlzIGZyZWVkLCBhbmQgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhdXNlZCBwcm9ibGVtcyB3aXRoIHNsZWVwaW5nIGxvY2tzIHVuZGVyIGBQUkVFTVBUX1JUYCwgc3BlY2lmaWNhbGx5IHdoZW4gYSByYXcgc3BpbmxvY2sgd2FzIGhlbGQuIFRoZSBmaXggYnlwYXNzZXMgdGhlIHByb2JsZW1hdGljIGZ1bmN0aW9uIGVudGlyZWx5IGluIG9uZSBjYXNlIGFuZCBjaGFuZ2VzIHRoZSBmbGFncyBwYXNzZWQgaW4gYW5vdGhlci4KCk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLiBMZXQgbWUgY2hlY2s6IHRoaXMgY2hhbmdlIGlzICpkZWZpbml0ZWx5KiBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBrdmZyZWVfY2FsbF9yY3VgKSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgY29uc3RhbnRseSBleGVjdXRlZCwgc28gYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSB3aGVyZSBmdXp6aW5nIHdpbGwgZXhwb3NlIHBvdGVudGlhbGx5IHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuCgpOb3csIGZvciBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBwcmVmZXIgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGt2ZnJlZV9jYWxsX3JjdWAgKmlzKiBhIHBvdGVudGlhbGx5IGhvdCBmdW5jdGlvbiwgc28gbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoaXMuLi5pdCBpcyBpbmRlZWQgYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uL1JDVSBmcmVlaW5nIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSAqdG9vKiBnZW5lcmFsLiBXaGF0IGRpZCB0aGUgcGF0Y2ggYWN0dWFsbHkgdG91Y2g/IGBrZnJlZV9yY3Vfc2hlYWZgLCBga3ZmcmVlX2NhbGxfcmN1YCwgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AuLi4gV2FpdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBvbmU6IGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbiwgYW5kIGlzICpub3QqIG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgYnV0IGl0IGNhbGxzIGBfX2tmcmVlX3JjdV9zaGVhZmAgd2l0aCBhIGZsYWcgdGhhdCAqd2FzKiBtb2RpZmllZC4KCk9rYXksIHNvIGxldCYjMzk7cyBzZWUsIHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdD8gTG9va2luZyBmb3Igbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLi4uYF9fa2ZyZWVfcmN1X3NoZWFmYCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9zbGFiLmhgLiBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBub3QgbW9kaWZpZWQsIGJ1dCBjYWxsZWQgYnkgdGhlIGNoYW5nZWQgY29kZSwgc28gcGVyaGFwcyBpdCBzaG91bGQgYmUgdGhlcmUgYXMgd2VsbC4gYGt2ZnJlZV9jYWxsX3JjdWAgaXMgbWF5YmUgdG9vIGdlbmVyYWwuCgpTbywgZm9yIG5vdywgbGV0JiMzOTtzIGluY2x1ZGUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYW5kIHNlZSBpZiBtb3JlIGNhbGxlcnMgYXJlIGF2YWlsYWJsZSBmb3IgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AuCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMTA9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTExOnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTExMi1cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTE0OT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTUzLVx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIGt2cmhmKSBcdTAwM2U9IDQwOTYpO1x0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExNTQ6XHRcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcdTAwMjYoKF9fX3ApLVx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE1NS1cdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTI5Nz1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTI5OC1cbm1tL3NsYWJfY29tbW9uLmM6MTI5OTp2b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMDAte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMyMy19XG5tbS9zbGFiX2NvbW1vbi5jOjEzMjQ6RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cbi0tXG5tbS9zbHViLmM9NjAzMT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubW0vc2x1Yi5jLTYwOTAtICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG5tbS9zbHViLmM6NjA5MTogKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpXG5tbS9zbHViLmMtNjA5Mi0gKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX3JjdV9ub2xvY2tgIE1hY3JvKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGludGVybmFscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYGtmcmVlX3JjdV9ub2xvY2tgLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvcmN1cGRhdGUuaGAgZmlsZS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbiB0aGVyZS4gVGhpcyB1c3VhbGx5IGdpdmVzIG1lIHRoZSBxdWlja2VzdCBwYXRoIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gaXQgY29tZXMgdG8gdGhlIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRob3V0IHRoZSBsb2NrLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgdGhhdCBzY2hlZHVsZXMgdGhlIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGFuIG9iamVjdCwgaG9wZWZ1bGx5IGFsb25nc2lkZSBzb21lIGhpbnRzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIGluZnJhc3RydWN0dXJlLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIGFzIEkgZXhwZWN0LCB1c2luZyBpdCBhbmQgaXRzIHZhcmlhbnRzIGlzIGEga2V5IG9wdGltaXphdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbnVhbmNlIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHQgKiBAa3ZyaGY6IHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIHdpdGhpbiB0aGUgdHlwZSBvZiBAcHRyLlxuMTE0MTpcdCAqXG4xMTQyOlx0ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuMTE0MzpcdCAqIHdpdGhvdXQgYW55IGRlZmVycmVkIHByb2Nlc3NpbmcsIGJ1dCBtYXkgc3RpbGwgZGVmZXIgZnJlZWluZy5cbjExNDQ6XHQgKiBMYXJnZSBrbWFsbG9jIGFuZCB2bWFsbG9jIG9iamVjdHMgYXJlIGFsd2F5cyBkZWZlcnJlZC5cbjExNDU6XHQgKlxuMTE0NjpcdCAqIGtmcmVlX3JjdV9ub2xvY2soKSBzdXBwb3J0cyAyLWFyZyB2YXJpYW50IG9ubHkuXG4xMTQ3Olx0ICovXG4xMTQ4Olx0I2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXHRcdFx0XHRcdFx0XFxcbjExNDk6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMTE1MDpcdFx0dHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTtcdFx0XHRcdFx0XHRcXFxuMTE1MTpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjExNTI6XHRcdGlmIChfX19wKSB7XHRcdFx0XHRcdFx0XHRcdFxcXG4xMTUzOlx0XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpIFx1MDAzZT0gNDA5Nik7XHRcdFxcXG4xMTU0Olx0XHRcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcdTAwMjYoKF9fX3ApLVx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4xMTU1Olx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjExNTY6XHR9IHdoaWxlICgwKVxuMTE1NzpcdFxuMTE1ODpcdC8qXG4xMTU5Olx0ICogUGxhY2UgdGhpcyBhZnRlciBhIGxvY2stYWNxdWlzaXRpb24gcHJpbWl0aXZlIHRvIGd1YXJhbnRlZSB0aGF0XG4xMTYwOlx0ICogYW4gVU5MT0NLJiM0MztMT0NLIHBhaXIgYWN0cyBhcyBhIGZ1bGwgYmFycmllci4gIFRoaXMgZ3VhcmFudGVlIGFwcGxpZXNcbjExNjE6XHQgKiBpZiB0aGUgVU5MT0NLIGFuZCBMT0NLIGFyZSBleGVjdXRlZCBieSB0aGUgc2FtZSBDUFUgb3IgaWYgdGhlXG4xMTYyOlx0ICogVU5MT0NLIGFuZCBMT0NLIG9wZXJhdGUgb24gdGhlIHNhbWUgbG9jayB2YXJpYWJsZS5cbjExNjM6XHQgKi9cbjExNjQ6XHQjaWZkZWYgQ09ORklHX0FSQ0hfV0VBS19SRUxFQVNFX0FDUVVJUkVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBga2ZyZWVfcmN1X25vbG9ja2AgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBrZnJlZV9yY3Vfbm9sb2NrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHBhdHRlcm5zLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGluIG15IGhlYWQ6ICpXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWw/IFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9iamVjdHMgYXJlIGJlaW5nIGZyZWVkIHRoaXMgd2F5PyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGluIHdoaWNoIGBrZnJlZV9yY3Vfbm9sb2NrYCBpcyBwcmVmZXJyZWQgb3ZlciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgIG9yIHRoZSBzdGFuZGFyZCBga2ZyZWVfcmN1YD8qCgpJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgJiMzNDtubyBsb2NrJiMzNDsgYXBwZW5kYWdlLCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgZm9yIHNwZWNpZmljIHNpdHVhdGlvbnMgd2hlcmUgdGFraW5nIGEgZ2xvYmFsIGxvY2sgaXMgdW5kZXNpcmFibGUgb3IgdW5uZWNlc3NhcnkgZm9yIFJDVS1zYWZlIG1lbW9yeSBkZWFsbG9jYXRpb24uIFRoZXJlZm9yZSwgSSB3YW50IHRvIGxvb2sgZm9yIHNjZW5hcmlvcyB3aGVyZSBsb2NrIGNvbnRlbnRpb24gaXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29kZSBwYXRocyB1c2UgaXQuCgpNeSBicmFpbiYjMzk7cyBhbHJlYWR5IGZpcmluZyB1cCBzZWFyY2ggcXVlcmllcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIGNvZGUsIGxvb2tpbmcgZm9yIGNhbGxzIHRvIGBrZnJlZV9yY3Vfbm9sb2NrYC4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIHVzYWdlLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGFuZCBzeW5jaHJvbml6YXRpb24gY29uc3RyYWludHMgdGhhdCBhcmUgcHJvbXB0aW5nIHRoZSB1c2Ugb2YgYGtmcmVlX3JjdV9ub2xvY2tgLiBXaGF0IHNwZWNpZmljIHRyYWRlLW9mZnMgYXJlIGJlaW5nIG1hZGUgaW4gY2hvb3NpbmcgdGhpcyBmdW5jdGlvbj8gKklzIGl0IHVzZWQgaW4gaW50ZXJydXB0IGNvbnRleHQ/IERvZXMgaXQgaW1wbHkgc3BlY2lmaWMgbWVtb3J5IG9yZGVyaW5nIHJlcXVpcmVtZW50cz8qIEnigJlsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIHVzYWdlIChvciBsYWNrIHRoZXJlb2YpIGFyb3VuZCB0aGUgY2FsbCBzaXRlcy4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQuCgpVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZ2FpbiBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vdGl2YXRpb25zIGJlaGluZCBpdHMgdXNlIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJJiMzOTtsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IG9yIHBvc3NpYmxlIHBpdGZhbGxzIGluIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3JjdV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMzA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM3LS8qKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzg6ICoga2ZyZWVfcmN1X25vbG9jaygpIC0gYSB2ZXJzaW9uIG9mIGtmcmVlX3JjdSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC5cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM5LSAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0MS0gKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExNDI6ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDMtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQ1LSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0NjogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDctICovXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0ODojZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDktZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jPTM0ND1zdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuLS1cbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzU5LVx0aWYgKGNhbl91c2Vfa2ZyZWVfcmN1IFx1MDAyNlx1MDAyNiAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50IFx1MDAyNiAyKSlcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM6MzYwOlx0XHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVx0ZWxzZVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE4Nj12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE4Ny17XG5tbS9zbGFiX2NvbW1vbi5jOjIxODg6XHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xubW0vc2xhYl9jb21tb24uYy0yMTg5LVx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDA1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIGFuZCBTTFVCIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBkbyB3ZSBzdGFydCB3aXRoIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWU/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBjYXVzaW5nIHRoZSBzbG93ZG93bi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSBhcm91bmQgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAuIEkgc3VzcGVjdCB0aGlzIG1pZ2h0IGJlIHBsYXlpbmcgYSByb2xlIGluIGhvdyB3ZSYjMzk7cmUgZnJlZWluZyBrZXJuZWwgbWVtb3J5LCBhbmQgYSBiYXRjaGVkIGFwcHJvYWNoIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFkZS1vZmZzLiBBZGRpdGlvbmFsbHksIEkgbmVlZCB0byBjb25zaWRlciBTTFVCIHNoZWF2ZXMuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFJDVSwgYmF0Y2ggZnJlZWluZywgYW5kIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgYSBjb21tb24gc291cmNlIG9mIHBlcmZvcm1hbmNlIHR3ZWFrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc2hlYXZlcyBvcGVyYXRlLCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIENQVSBhZmZpbml0eSwgYW5kIHdoZXRoZXIgdGhhdCYjMzk7cyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBkaWZmZXJlbnQga25vYnMgYXZhaWxhYmxlIHRvIG1lLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlLCB0cmFjaW5nIHRoZSBsaWtlbHkgY29kZSBwYXRocyB0byBpZGVudGlmeSB3aGVyZSB3ZSBjYW4gb3B0aW1pemUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgYSBtdWx0aS1mYWNldGVkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWRlJFRV9SQ1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMzA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQxLSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0MjogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0My0gKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTE0MzEtXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxNDMyOiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaD0yNTQ9c3RydWN0IGNhbGxiYWNrX2hlYWQge1xuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaC0yNTktXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmg6MjYwOiNpZmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuLS1cbm1tL0tjb25maWc9MTY0PWNvbmZpZyBTTFVCXG4tLVxubW0vS2NvbmZpZy0xNjctXG5tbS9LY29uZmlnOjE2ODpjb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG5tbS9LY29uZmlnLTE2OS1cdGRlZl9ib29sIHlcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMwMi1cbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcbm1tL3NsYWJfY29tbW9uLmMtMTMwNC1cdFx0Z290byBmYWxsYmFjaztcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNjojaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzNTU9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzU4LVxubW0vc2xhYl9jb21tb24uYzoxMzU5OiNlbHNlIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cbm1tL3NsYWJfY29tbW9uLmMtMTM2MC1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIyNDI9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMjk0LVxubW0vc2xhYl9jb21tb24uYzoyMjk1OiNlbmRpZiAvKiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlIHByb2JhYmx5IGluIGBtbS9LY29uZmlnYCwgYW5kLCBnaXZlbiB0aGUgbGlrZWx5IG9yZ2FuaXphdGlvbiwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGFyb3VuZCBsaW5lIDE2OC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBpcyBjb3JyZWN0LCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0ZW5kbWVudVxuIDE2MTpcdFxuIDE2MjpcdG1lbnUgXCYjMzQ7U2xhYiBhbGxvY2F0b3Igb3B0aW9uc1wmIzM0O1xuIDE2MzpcdFxuIDE2NDpcdGNvbmZpZyBTTFVCXG4gMTY1Olx0XHRkZWZfYm9vbCB5XG4gMTY2Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAxNjc6XHRcbiAxNjg6XHRjb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG4gMTY5Olx0XHRkZWZfYm9vbCB5XG4gMTcwOlx0XHRkZXBlbmRzIG9uICFTTFVCX1RJTlkgXHUwMDI2XHUwMDI2ICFUSU5ZX1JDVVxuIDE3MTpcdFx0ZGVwZW5kcyBvbiAhUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiAxNzI6XHRcbiAxNzM6XHRjb25maWcgU0xVQl9USU5ZXG4gMTc0Olx0XHRib29sIFwmIzM0O0NvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XCYjMzQ7XG4gMTc1Olx0XHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgIUNPTVBJTEVfVEVTVFxuIDE3NjpcdFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxuIDE3NzpcdFx0aGVscFxuIDE3ODpcdFx0ICAgQ29uZmlndXJlcyB0aGUgc2xhYiBhbGxvY2F0b3IgaW4gYSB3YXkgdG8gYWNoaWV2ZSBtaW5pbWFsIG1lbW9yeVxuIDE3OTpcdFx0ICAgZm9vdHByaW50LCBzYWNyaWZpY2luZyBzY2FsYWJpbGl0eSwgZGVidWdnaW5nIGFuZCBvdGhlciBmZWF0dXJlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFJlbGF0ZWQgS2VybmVsIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBQUkVFTVBUX1JUIHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLCByZWxhdGVkIG9yIG5vdCwgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgdXNlIG9mIHNoZWF2ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIHVzZSBncmVwIHRvIGxvb2sgZm9yIHRoZSB0ZXJtcyAmIzM0O3NoZWFmJiMzNDsgYW5kICYjMzQ7c2hlYXZlcywmIzM0OyBqdXN0IHRvIGJlIGNvbXByZWhlbnNpdmUgYW5kIGFjY291bnQgZm9yIHNpbmd1bGFyL3BsdXJhbCB2YXJpYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBkaXNjb3ZlciBhbnkgYXNzb2NpYXRlZCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IFBSRUVNUFRfUlQgYW5kIHNoZWF2ZXMgaW50ZXJhY3Qgb3IgYXJlIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NoZWFmfHNoZWF2ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2MjggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL3NsYWIuaD0yNDA9c3RydWN0IGttZW1fY2FjaGUge1xubW0vc2xhYi5oOjI0MTpcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzIF9fcGVyY3B1ICpjcHVfc2hlYXZlcztcbm1tL3NsYWIuaC0yNDItXHQvKiBVc2VkIGZvciByZXRyaWV2aW5nIHBhcnRpYWwgc2xhYnMsIGV0Yy4gKi9cbi0tXG5tbS9zbGFiLmgtMjQ4LVx0dW5zaWduZWQgaW50IG9mZnNldDtcdFx0LyogRnJlZSBwb2ludGVyIG9mZnNldCAqL1xubW0vc2xhYi5oOjI0OTpcdHVuc2lnbmVkIGludCBzaGVhZl9jYXBhY2l0eTtcbm1tL3NsYWIuaC0yNTAtXHRzdHJ1Y3Qga21lbV9jYWNoZV9vcmRlcl9vYmplY3RzIG9vO1xuLS1cbm1tL3NsYWIuaC0yOTYtLypcbm1tL3NsYWIuaDoyOTc6ICogRXZlcnkgY2FjaGUgaGFzICFOVUxMIHMtXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxubW0vc2xhYi5oOjI5ODogKiBib290c3RyYXBfc2hlYWYgdGVtcG9yYXJpbHkgZHVyaW5nIGluaXQsIG9yIHBlcm1hbmVudGx5IGZvciB0aGUgYm9vdCBjYWNoZXNcbm1tL3NsYWIuaC0yOTktICogYW5kIGNhY2hlcyB3aXRoIGRlYnVnZ2luZyBlbmFibGVkLCBvciBhbGwgY2FjaGVzIHdpdGggQ09ORklHX1NMVUJfVElOWS4gVGhpc1xubW0vc2xhYi5oOjMwMDogKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cbm1tL3NsYWIuaC0zMDEtICovXG5tbS9zbGFiLmg6MzAyOnN0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9oYXNfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWIuaC0zMDMte1xubW0vc2xhYi5oLTMwNC1cdC8qIFRlc3QgQ09ORklHX1NMVUJfVElOWSBmb3IgY29kZSBlbGltaW5hdGlvbiBwdXJwb3NlcyAqL1xubW0vc2xhYi5oOjMwNTpcdHJldHVybiAhSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSBcdTAwMjZcdTAwMjYgcy1cdTAwM2VzaGVhZl9jYXBhY2l0eTtcbm1tL3NsYWIuaC0zMDYtfVxuLS1cbm1tL3NsYWIuaD00NzM9c3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsYWIuaC00ODAtXG5tbS9zbGFiLmg6NDgxOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpO1xubW0vc2xhYi5oOjQ4Mjp2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcbm1tL3NsYWIuaDo0ODM6dm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG5tbS9zbGFiLmgtNDg0LVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MzE4PXN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTM0Ni1cdCAqL1xubW0vc2xhYl9jb21tb24uYzozNDc6XHRpZiAoYXJncy1cdTAwM2VzaGVhZl9jYXBhY2l0eSlcbm1tL3NsYWJfY29tbW9uLmMtMzQ4LVx0XHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzE1LVxubW0vc2xhYl9jb21tb24uYzoxMzE2Olx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxubW0vc2xhYl9jb21tb24uYy0xMzE3LVx0XHRnb3RvIGZhbGxiYWNrO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTYyMj1zdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxubW0vc2xhYl9jb21tb24uYzoxNjY2OnN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG5tbS9zbGFiX2NvbW1vbi5jLTE2Njcte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxubW0vc2xhYl9jb21tb24uYzoxNjgwOlx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXG4tLVxubW0vc2xhYl9jb21tb24uYz0yMDEzPXZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzQtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxubW0vc2xhYl9jb21tb24uYy0yMDM2LVx0XHRyZXR1cm47XG4tLVxubW0vc2xhYl9jb21tb24uYz0yMTczPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG5tbS9zbGFiX2NvbW1vbi5jLTIxNzQte1xubW0vc2xhYl9jb21tb24uYzoyMTc1Olx0Zmx1c2hfYWxsX3JjdV9zaGVhdmVzKCk7XG5tbS9zbGFiX2NvbW1vbi5jLTIxNzYtXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE4Nj12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE4Ny17XG5tbS9zbGFiX2NvbW1vbi5jOjIxODg6XHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xubW0vc2xhYl9jb21tb24uYy0yMTg5LVx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG5tbS9zbGFiX2NvbW1vbi5jLTIxOTAtXG5tbS9zbGFiX2NvbW1vbi5jOjIxOTE6XHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpIHtcbm1tL3NsYWJfY29tbW9uLmMtMjE5Mi1cdFx0Y3B1c19yZWFkX2xvY2soKTtcbm1tL3NsYWJfY29tbW9uLmM6MjE5MzpcdFx0Zmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUocyk7XG5tbS9zbGFiX2NvbW1vbi5jLTIxOTQtXHRcdGNwdXNfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9zbHViLmMtNjEtICogICAxLiAgc2xhYl9tdXRleCAoR2xvYmFsIE11dGV4KVxubW0vc2x1Yi5jOjYyOiAqICAgMmEuIGttZW1fY2FjaGUtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayAoTG9jYWwgdHJ5bG9jaylcbm1tL3NsdWIuYy02My0gKiAgIDJiLiBiYXJuLVx1MDAzZWxvY2sgKFNwaW5sb2NrKVxuLS1cbm1tL3NsdWIuYy0xMzItICpcbm1tL3NsdWIuYzoxMzM6ICogICBjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrIChsb2NhbF90cnlsb2NrKVxubW0vc2x1Yi5jLTEzNC0gKlxubW0vc2x1Yi5jOjEzNTogKiAgIFRoaXMgbG9jayBwcm90ZWN0cyBmYXN0cGF0aCBvcGVyYXRpb25zIG9uIHRoZSBwZXJjcHUgc2hlYXZlcy4gT24gIVJUIGl0XG5tbS9zbHViLmMtMTM2LSAqICAgb25seSBkaXNhYmxlcyBwcmVlbXB0aW9uIGFuZCBkb2VzIG5vIGF0b21pYyBvcGVyYXRpb25zLiBBcyBsb25nIGFzIHRoZSBtYWluXG5tbS9zbHViLmM6MTM3OiAqICAgb3Igc3BhcmUgc2hlYWYgY2FuIGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBvciBmcmVlLCB0aGVyZSBpcyBubyBvdGhlclxubW0vc2x1Yi5jLTEzOC0gKiAgIG92ZXJoZWFkLlxuLS1cbm1tL3NsdWIuYy0xNDItICogICBUaGlzIGxvY2sgcHJvdGVjdHMgdGhlIG9wZXJhdGlvbnMgb24gcGVyLU5VTUEtbm9kZSBiYXJuLiBJdCBjYW4gcXVpY2tseVxubW0vc2x1Yi5jOjE0MzogKiAgIHNlcnZlIGFuIGVtcHR5IG9yIGZ1bGwgc2hlYWYgaWYgYXZhaWxhYmxlLCBhbmQgYXZvaWQgbW9yZSBleHBlbnNpdmUgcmVmaWxsXG5tbS9zbHViLmMtMTQ0LSAqICAgb3IgZmx1c2ggb3BlcmF0aW9uLlxuLS1cbm1tL3NsdWIuYy0xNDgtICogICBPYmplY3RzIG1heSBoYXZlIHRvIGJlIGZyZWVkIHRvIHRoZWlyIHNsYWJzIHdoZW4gdGhleSBhcmUgZnJvbSBhIHJlbW90ZVxubW0vc2x1Yi5jOjE0OTogKiAgIG5vZGUgKHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsbGluZyBsb2NhbCBzaGVhdmVzIHdpdGggcmVtb3RlIG9iamVjdHMpXG5tbS9zbHViLmM6MTUwOiAqICAgb3Igd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgZnVsbCBzaGVhdmVzLiBPbiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRpbmdcbm1tL3NsdWIuYy0xNTEtICogICBjbXB4Y2hnX2RvdWJsZSB0aGlzIGlzIGRvbmUgYnkgYSBsb2NrbGVzcyB1cGRhdGUgb2Ygc2xhYiYjMzk7cyBmcmVlbGlzdCBhbmRcbi0tXG5tbS9zbHViLmMtMTY0LSAqXG5tbS9zbHViLmM6MTY1OiAqIFNMVUIgYXNzaWducyB0d28gb2JqZWN0IGFycmF5cyBjYWxsZWQgc2hlYXZlcyBmb3IgY2FjaGluZyBhbGxvY2F0aW9ucyBhbmRcbm1tL3NsdWIuYy0xNjYtICogZnJlZXMgb24gZWFjaCBjcHUsIHdpdGggYSBOVU1BIG5vZGUgc2hhcmVkIGJhcm4gZm9yIGJhbGFuY2luZyBiZXR3ZWVuIGNwdXMuXG5tbS9zbHViLmM6MTY3OiAqIEFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgcHJpbWFyaWx5IHNlcnZlZCBmcm9tIHRoZXNlIHNoZWF2ZXMuXG5tbS9zbHViLmMtMTY4LSAqXG4tLVxubW0vc2x1Yi5jPTM2Mz1lbnVtIHN0YXRfaXRlbSB7XG5tbS9zbHViLmM6MzY0Olx0QUxMT0NfRkFTVFBBVEgsXHRcdC8qIEFsbG9jYXRpb24gZnJvbSBwZXJjcHUgc2hlYXZlcyAqL1xubW0vc2x1Yi5jLTM2NS1cdEFMTE9DX1NMT1dQQVRILFx0XHQvKiBBbGxvY2F0aW9uIGZyb20gcGFydGlhbCBvciBuZXcgc2xhYiAqL1xubW0vc2x1Yi5jOjM2NjpcdEZSRUVfUkNVX1NIRUFGLFx0XHQvKiBGcmVlIHRvIHJjdV9mcmVlIHNoZWFmICovXG5tbS9zbHViLmM6MzY3Olx0RlJFRV9SQ1VfU0hFQUZfRkFJTCxcdC8qIEZhaWxlZCB0byBmcmVlIHRvIGEgcmN1X2ZyZWUgc2hlYWYgKi9cbm1tL3NsdWIuYzozNjg6XHRGUkVFX0ZBU1RQQVRILFx0XHQvKiBGcmVlIHRvIHBlcmNwdSBzaGVhdmVzICovXG5tbS9zbHViLmMtMzY5LVx0RlJFRV9TTE9XUEFUSCxcdFx0LyogRnJlZSB0byBhIHNsYWIgKi9cbi0tXG5tbS9zbHViLmMtMzcyLVx0QUxMT0NfU0xBQixcdFx0LyogTmV3IHNsYWIgYWNxdWlyZWQgZnJvbSBwYWdlIGFsbG9jYXRvciAqL1xubW0vc2x1Yi5jOjM3MzpcdEFMTE9DX05PREVfTUlTTUFUQ0gsXHQvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi9cbm1tL3NsdWIuYy0zNzQtXHRGUkVFX1NMQUIsXHRcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXG4tLVxubW0vc2x1Yi5jLTM3Ni1cdENNUFhDSEdfRE9VQkxFX0ZBSUwsXHQvKiBGYWlsdXJlcyBvZiBzbGFiIGZyZWVsaXN0IHVwZGF0ZSAqL1xubW0vc2x1Yi5jOjM3NzpcdFNIRUFGX0ZMVVNILFx0XHQvKiBPYmplY3RzIGZsdXNoZWQgZnJvbSBhIHNoZWFmICovXG5tbS9zbHViLmM6Mzc4Olx0U0hFQUZfUkVGSUxMLFx0XHQvKiBPYmplY3RzIHJlZmlsbGVkIHRvIGEgc2hlYWYgKi9cbm1tL3NsdWIuYzozNzk6XHRTSEVBRl9BTExPQyxcdFx0LyogQWxsb2NhdGlvbiBvZiBhbiBlbXB0eSBzaGVhZiBpbmNsdWRpbmcgb3ZlcnNpemVkIG9uZXMgKi9cbm1tL3NsdWIuYzozODA6XHRTSEVBRl9GUkVFLFx0XHQvKiBGcmVlaW5nIG9mIGFuIGVtcHR5IHNoZWFmIGluY2x1ZGluZyBvdmVyc2l6ZWQgb25lcyAqL1xubW0vc2x1Yi5jOjM4MTpcdEJBUk5fR0VULFx0XHQvKiBHb3QgZnVsbCBzaGVhZiBmcm9tIGJhcm4gKi9cbm1tL3NsdWIuYzozODI6XHRCQVJOX0dFVF9GQUlMLFx0XHQvKiBGYWlsZWQgdG8gZ2V0IGZ1bGwgc2hlYWYgZnJvbSBiYXJuICovXG5tbS9zbHViLmM6MzgzOlx0QkFSTl9QVVQsXHRcdC8qIFB1dCBmdWxsIHNoZWFmIHRvIGJhcm4gKi9cbm1tL3NsdWIuYzozODQ6XHRCQVJOX1BVVF9GQUlMLFx0XHQvKiBGYWlsZWQgdG8gcHV0IGZ1bGwgc2hlYWYgdG8gYmFybiAqL1xubW0vc2x1Yi5jOjM4NTpcdFNIRUFGX1BSRUZJTExfRkFTVCxcdC8qIFNoZWFmIHByZWZpbGwgZ3JhYmJlZCB0aGUgc3BhcmUgc2hlYWYgKi9cbm1tL3NsdWIuYzozODY6XHRTSEVBRl9QUkVGSUxMX1NMT1csXHQvKiBTaGVhZiBwcmVmaWxsIGZvdW5kIG5vIHNwYXJlIHNoZWFmICovXG5tbS9zbHViLmM6Mzg3Olx0U0hFQUZfUFJFRklMTF9PVkVSU0laRSxcdC8qIEFsbG9jYXRpb24gb2Ygb3ZlcnNpemUgc2hlYWYgZm9yIHByZWZpbGwgKi9cbm1tL3NsdWIuYzozODg6XHRTSEVBRl9SRVRVUk5fRkFTVCxcdC8qIFNoZWFmIHJldHVybiByZWF0dGFjaGVkIHNwYXJlIHNoZWFmICovXG5tbS9zbHViLmMtMzg5LVx0U0hFQUZfUkVUVVJOX1NMT1csXHQvKiBTaGVhZiByZXR1cm4gY291bGQgbm90IHJlYXR0YWNoIHNwYXJlICovXG4tLVxubW0vc2x1Yi5jPTQyMT1zdHJ1Y3Qgbm9kZV9iYXJuIHtcbm1tL3NsdWIuYy00MjItXHRzcGlubG9ja190IGxvY2s7XG5tbS9zbHViLmM6NDIzOlx0c3RydWN0IGxpc3RfaGVhZCBzaGVhdmVzX2Z1bGw7XG5tbS9zbHViLmM6NDI0Olx0c3RydWN0IGxpc3RfaGVhZCBzaGVhdmVzX2VtcHR5O1xubW0vc2x1Yi5jLTQyNS1cdHVuc2lnbmVkIGludCBucl9mdWxsO1xuLS1cbm1tL3NsdWIuYy00MjgtXG5tbS9zbHViLmM6NDI5OnN0cnVjdCBzbGFiX3NoZWFmIHtcbm1tL3NsdWIuYy00MzAtXHR1bmlvbiB7XG4tLVxubW0vc2x1Yi5jLTQzNC1cdFx0c3RydWN0IGxsaXN0X25vZGUgbGxub2RlO1xubW0vc2x1Yi5jOjQzNTpcdFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXG5tbS9zbHViLmMtNDM2LVx0XHRzdHJ1Y3Qge1xuLS1cbm1tL3NsdWIuYy00NDItXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbm1tL3NsdWIuYzo0NDM6XHRpbnQgbm9kZTsgLyogb25seSB1c2VkIGZvciByY3Vfc2hlYWYgKi9cbm1tL3NsdWIuYy00NDQtXHR2b2lkICpvYmplY3RzW107XG4tLVxubW0vc2x1Yi5jLTQ0Ni1cbm1tL3NsdWIuYzo0NDc6c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMge1xubW0vc2x1Yi5jLTQ0OC1cdGxvY2FsX3RyeWxvY2tfdCBsb2NrO1xubW0vc2x1Yi5jOjQ0OTpcdHN0cnVjdCBzbGFiX3NoZWFmICptYWluOyAvKiBuZXZlciBOVUxMIHdoZW4gdW5sb2NrZWQgKi9cbm1tL3NsdWIuYzo0NTA6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc3BhcmU7IC8qIGVtcHR5IG9yIGZ1bGwsIG1heSBiZSBOVUxMICovXG5tbS9zbHViLmM6NDUxOlx0c3RydWN0IHNsYWJfc2hlYWYgKnJjdV9mcmVlOyAvKiBmb3IgYmF0Y2hpbmcga2ZyZWVfcmN1KCkgKi9cbm1tL3NsdWIuYy00NTItfTtcbi0tXG5tbS9zbHViLmM9NTA2PXN0YXRpYyBub2RlbWFza190IHNsYWJfYmFybl9ub2Rlcztcbi0tXG5tbS9zbHViLmMtNTA4LS8qXG5tbS9zbHViLmM6NTA5OiAqIFdvcmtxdWV1ZSB1c2VkIGZvciBmbHVzaGluZyBjcHUgYW5kIGtmcmVlX3JjdSBzaGVhdmVzLlxubW0vc2x1Yi5jLTUxMC0gKi9cbi0tXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy0yMDczLS8qXG5tbS9zbHViLmM6MjA3NDogKiBUaGUgYWxsb2NhdGVkIG9iamNnIHBvaW50ZXJzIGFycmF5IG9yIHNoZWFmIGlzIG5vdCBhY2NvdW50ZWQgZGlyZWN0bHkuXG5tbS9zbHViLmMtMjA3NS0gKiBNb3Jlb3ZlciwgaXQgc2hvdWxkIG5vdCBjb21lIGZyb20gRE1BIGJ1ZmZlciBhbmQgaXMgbm90IHJlYWRpbHlcbi0tXG5tbS9zbHViLmM9Mjc5NT1zdGF0aWMgaW5saW5lIHZvaWQgKnNldHVwX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy0yODA2LVxubW0vc2x1Yi5jOjI4MDc6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpfX2FsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5tbS9zbHViLmMtMjgwOC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdW5zaWduZWQgaW50IGNhcGFjaXR5KVxubW0vc2x1Yi5jLTI4MDkte1xubW0vc2x1Yi5jOjI4MTA6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWY7XG5tbS9zbHViLmM6MjgxMTpcdHNpemVfdCBzaGVhZl9zaXplO1xubW0vc2x1Yi5jLTI4MTItXG4tLVxubW0vc2x1Yi5jLTI4MTQtXHQgKiBQcmV2ZW50IHJlY3Vyc2lvbiB0byB0aGUgc2FtZSBjYWNoZSwgb3IgYSBkZWVwIHN0YWNrIG9mIGttYWxsb2NzIG9mXG5tbS9zbHViLmM6MjgxNTpcdCAqIHZhcnlpbmcgc2l6ZXMgKHNoZWFmIGNhcGFjaXR5IG1pZ2h0IGRpZmZlciBmb3IgZWFjaCBrbWFsbG9jIHNpemVcbm1tL3NsdWIuYy0yODE2LVx0ICogYnVja2V0KVxuLS1cbm1tL3NsdWIuYy0yODIwLVxubW0vc2x1Yi5jOjI4MjE6XHRzaGVhZl9zaXplID0gc3RydWN0X3NpemUoc2hlYWYsIG9iamVjdHMsIGNhcGFjaXR5KTtcbm1tL3NsdWIuYzoyODIyOlx0c2hlYWYgPSBrbWFsbG9jX2ZsYWdzKHNoZWFmX3NpemUsIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBOVU1BX05PX05PREUpO1xubW0vc2x1Yi5jLTI4MjMtXG5tbS9zbHViLmM6MjgyNDpcdGlmICh1bmxpa2VseSghc2hlYWYpKVxubW0vc2x1Yi5jLTI4MjUtXHRcdHJldHVybiBOVUxMO1xubW0vc2x1Yi5jLTI4MjYtXG5tbS9zbHViLmM6MjgyNzpcdHNoZWFmLVx1MDAzZWNhY2hlID0gcztcbm1tL3NsdWIuYy0yODI4LVxuLS1cbm1tL3NsdWIuYy0yODMwLVxubW0vc2x1Yi5jOjI4MzE6XHRyZXR1cm4gc2hlYWY7XG5tbS9zbHViLmMtMjgzMi19XG5tbS9zbHViLmMtMjgzMy1cbm1tL3NsdWIuYzoyODM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTI4MzUtXHRcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmMtMjg0MS1cbm1tL3NsdWIuYzoyODQyOlx0cmV0dXJuIF9fYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncywgcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSk7XG5tbS9zbHViLmMtMjg0My19XG5tbS9zbHViLmMtMjg0NC1cbm1tL3NsdWIuYzoyODQ1OnN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxubW0vc2x1Yi5jLTI4NDYtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yODQ4LVx0Lypcbm1tL3NsdWIuYzoyODQ5Olx0ICogSWYgdGhlIHNoZWFmIHdhcyBjcmVhdGVkIHdpdGggU0xBQl9BTExPQ19OT19SRUNVUlNFIGZsYWcgdGhlbiBpdHNcbm1tL3NsdWIuYy0yODUwLVx0ICogY29ycmVzcG9uZGluZyBleHRlbnNpb24gaXMgTlVMTCBhbmQgYWxsb2NfdGFnX3N1YigpIHdpbGwgdGhyb3cgYVxubW0vc2x1Yi5jLTI4NTEtXHQgKiB3YXJuaW5nLCB0aGVyZWZvcmUgcmVwbGFjZSBOVUxMIHdpdGggQ09ERVRBR19FTVBUWSB0byBpbmRpY2F0ZVxubW0vc2x1Yi5jOjI4NTI6XHQgKiB0aGF0IHRoZSBleHRlbnNpb24gZm9yIHRoaXMgc2hlYWYgaXMgZXhwZWN0ZWQgdG8gYmUgTlVMTC5cbm1tL3NsdWIuYy0yODUzLVx0ICovXG5tbS9zbHViLmMtMjg1NC1cdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0tNQUxMT0MpXG5tbS9zbHViLmM6Mjg1NTpcdFx0bWFya19vYmpfY29kZXRhZ19lbXB0eShzaGVhZik7XG5tbS9zbHViLmMtMjg1Ni1cbm1tL3NsdWIuYzoyODU3Olx0Vk1fV0FSTl9PTl9PTkNFKHNoZWFmLVx1MDAzZXNpemUgXHUwMDNlIDApO1xubW0vc2x1Yi5jLTI4NTgtXG5tbS9zbHViLmMtMjg1OS1cdGlmICh1bmxpa2VseShmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcbm1tL3NsdWIuYzoyODYwOlx0XHRrZnJlZV9ub2xvY2soc2hlYWYpO1xubW0vc2x1Yi5jLTI4NjEtXHRlbHNlXG5tbS9zbHViLmM6Mjg2MjpcdFx0a2ZyZWUoc2hlYWYpO1xubW0vc2x1Yi5jLTI4NjMtXG4tLVxubW0vc2x1Yi5jLTI4NjYtXG5tbS9zbHViLmM6Mjg2NzpzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG5tbS9zbHViLmMtMjg2OC17XG5tbS9zbHViLmM6Mjg2OTpcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xubW0vc2x1Yi5jLTI4NzAtfVxuLS1cbm1tL3NsdWIuYz0yODczPXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy0yODc1LVxubW0vc2x1Yi5jOjI4NzY6c3RhdGljIGludCByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbm1tL3NsdWIuYy0yODc3LVx0XHRcdCBnZnBfdCBnZnApXG5tbS9zbHViLmMtMjg3OC17XG5tbS9zbHViLmM6Mjg3OTpcdGludCB0b19maWxsID0gcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSAtIHNoZWFmLVx1MDAzZXNpemU7XG5tbS9zbHViLmMtMjg4MC1cdGludCBmaWxsZWQ7XG4tLVxubW0vc2x1Yi5jLTI4ODQtXG5tbS9zbHViLmM6Mjg4NTpcdGZpbGxlZCA9IHJlZmlsbF9vYmplY3RzKHMsIFx1MDAyNnNoZWFmLVx1MDAzZW9iamVjdHNbc2hlYWYtXHUwMDNlc2l6ZV0sIGdmcCwgdG9fZmlsbCxcbm1tL3NsdWIuYy0yODg2LVx0XHRcdFx0dG9fZmlsbCk7XG5tbS9zbHViLmMtMjg4Ny1cbm1tL3NsdWIuYzoyODg4Olx0c2hlYWYtXHUwMDNlc2l6ZSAmIzQzOz0gZmlsbGVkO1xubW0vc2x1Yi5jLTI4ODktXG4tLVxubW0vc2x1Yi5jLTI4OTgtLypcbm1tL3NsdWIuYzoyODk5OiAqIE1heGltdW0gbnVtYmVyIG9mIG9iamVjdHMgZnJlZWQgZHVyaW5nIGEgc2luZ2xlIGZsdXNoIG9mIG1haW4gcGNzIHNoZWFmLlxubW0vc2x1Yi5jLTI5MDAtICogVHJhbnNsYXRlcyBkaXJlY3RseSB0byBhbiBvbi1zdGFjayBhcnJheSBzaXplLlxuLS1cbm1tL3NsdWIuYz0yOTA0PXN0YXRpYyB2b2lkIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCk7XG4tLVxubW0vc2x1Yi5jLTI5MDYtLypcbm1tL3NsdWIuYzoyOTA3OiAqIEZyZWUgYWxsIG9iamVjdHMgZnJvbSB0aGUgbWFpbiBzaGVhZi4gSW4gb3JkZXIgdG8gcGVyZm9ybVxubW0vc2x1Yi5jOjI5MDg6ICogX19rbWVtX2NhY2hlX2ZyZWVfYnVsaygpIG91dHNpZGUgb2YgY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaywgd29yayBpbiBiYXRjaGVzIHdoZXJlXG5tbS9zbHViLmMtMjkwOS0gKiBvYmplY3QgcG9pbnRlcnMgYXJlIG1vdmVkIHRvIGEgb24tc3RhY2sgYXJyYXkgdW5kZXIgdGhlIGxvY2suIFRvIGJvdW5kIHRoZVxuLS1cbm1tL3NsdWIuYy0yOTExLSAqXG5tbS9zbHViLmM6MjkxMjogKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayBsb2NrZWQsIHJldHVybnMgd2l0aCB0aGUgbG9ja1xubW0vc2x1Yi5jLTI5MTMtICogdW5sb2NrZWQuXG4tLVxubW0vc2x1Yi5jLTI5MTYtICovXG5tbS9zbHViLmM6MjkxNzpzdGF0aWMgdW5zaWduZWQgaW50IF9fc2hlYWZfZmx1c2hfbWFpbl9iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy0yOTE4LXtcbm1tL3NsdWIuYzoyOTE5Olx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbm1tL3NsdWIuYy0yOTIwLVx0dW5zaWduZWQgaW50IGJhdGNoLCByZW1haW5pbmc7XG5tbS9zbHViLmMtMjkyMS1cdHZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07XG5tbS9zbHViLmM6MjkyMjpcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcbm1tL3NsdWIuYy0yOTIzLVxubW0vc2x1Yi5jOjI5MjQ6XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xubW0vc2x1Yi5jLTI5MjUtXG5tbS9zbHViLmM6MjkyNjpcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbm1tL3NsdWIuYzoyOTI3Olx0c2hlYWYgPSBwY3MtXHUwMDNlbWFpbjtcbm1tL3NsdWIuYy0yOTI4LVxubW0vc2x1Yi5jOjI5Mjk6XHRiYXRjaCA9IG1pbihQQ1NfQkFUQ0hfTUFYLCBzaGVhZi1cdTAwM2VzaXplKTtcbm1tL3NsdWIuYy0yOTMwLVxubW0vc2x1Yi5jOjI5MzE6XHRzaGVhZi1cdTAwM2VzaXplIC09IGJhdGNoO1xubW0vc2x1Yi5jOjI5MzI6XHRtZW1jcHkob2JqZWN0cywgc2hlYWYtXHUwMDNlb2JqZWN0cyAmIzQzOyBzaGVhZi1cdTAwM2VzaXplLCBiYXRjaCAqIHNpemVvZih2b2lkICopKTtcbm1tL3NsdWIuYy0yOTMzLVxubW0vc2x1Yi5jOjI5MzQ6XHRyZW1haW5pbmcgPSBzaGVhZi1cdTAwM2VzaXplO1xubW0vc2x1Yi5jLTI5MzUtXG5tbS9zbHViLmM6MjkzNjpcdGxvY2FsX3VubG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spO1xubW0vc2x1Yi5jLTI5MzctXG4tLVxubW0vc2x1Yi5jLTI5NDQtXG5tbS9zbHViLmM6Mjk0NTpzdGF0aWMgdm9pZCBzaGVhZl9mbHVzaF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTI5NDYte1xuLS1cbm1tL3NsdWIuYy0yOTQ5LVx0ZG8ge1xubW0vc2x1Yi5jOjI5NTA6XHRcdGxvY2FsX2xvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbm1tL3NsdWIuYy0yOTUxLVxubW0vc2x1Yi5jOjI5NTI6XHRcdHJlbWFpbmluZyA9IF9fc2hlYWZfZmx1c2hfbWFpbl9iYXRjaChzKTtcbm1tL3NsdWIuYy0yOTUzLVxuLS1cbm1tL3NsdWIuYy0yOTU3LS8qXG5tbS9zbHViLmM6Mjk1ODogKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1haW4gc2hlYWYgd2FzIGF0IGxlYXN0IHBhcnRpYWxseSBmbHVzaGVkLlxubW0vc2x1Yi5jLTI5NTktICovXG5tbS9zbHViLmM6Mjk2MDpzdGF0aWMgYm9vbCBzaGVhZl90cnlfZmx1c2hfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy0yOTYxLXtcbi0tXG5tbS9zbHViLmMtMjk2NS1cdGRvIHtcbm1tL3NsdWIuYzoyOTY2Olx0XHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSlcbm1tL3NsdWIuYy0yOTY3LVx0XHRcdHJldHVybiByZXQ7XG4tLVxubW0vc2x1Yi5jLTI5NjktXHRcdHJldCA9IHRydWU7XG5tbS9zbHViLmM6Mjk3MDpcdFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xubW0vc2x1Yi5jLTI5NzEtXG4tLVxubW0vc2x1Yi5jLTI5NzctLypcbm1tL3NsdWIuYzoyOTc4OiAqIEZyZWUgYWxsIG9iamVjdHMgZnJvbSBhIHNoZWFmIHRoYXQmIzM5O3MgdW51c2VkLCBpLmUuIG5vdCBsaW5rZWQgdG8gYW55XG5tbS9zbHViLmM6Mjk3OTogKiBjcHVfc2hlYXZlcywgc28gd2UgbmVlZCBubyBsb2NraW5nIGFuZCBiYXRjaGluZy4gVGhlIGxvY2tpbmcgaXMgYWxzbyBub3Rcbm1tL3NsdWIuYzoyOTgwOiAqIG5lY2Vzc2FyeSB3aGVuIGZsdXNoaW5nIGNwdSYjMzk7cyBzaGVhdmVzIChib3RoIHNwYXJlIGFuZCBtYWluKSBkdXJpbmcgY3B1XG5tbS9zbHViLmMtMjk4MS0gKiBob3RyZW1vdmUgYXMgdGhlIGNwdSBpcyBub3QgZXhlY3V0aW5nIGFueW1vcmUuXG5tbS9zbHViLmMtMjk4Mi0gKi9cbm1tL3NsdWIuYzoyOTgzOnN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX3VudXNlZChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubW0vc2x1Yi5jLTI5ODQte1xubW0vc2x1Yi5jOjI5ODU6XHRpZiAoIXNoZWFmLVx1MDAzZXNpemUpXG5tbS9zbHViLmMtMjk4Ni1cdFx0cmV0dXJuO1xubW0vc2x1Yi5jLTI5ODctXG5tbS9zbHViLmM6Mjk4ODpcdHN0YXRfYWRkKHMsIFNIRUFGX0ZMVVNILCBzaGVhZi1cdTAwM2VzaXplKTtcbm1tL3NsdWIuYy0yOTg5LVxubW0vc2x1Yi5jOjI5OTA6XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNoZWFmLVx1MDAzZXNpemUsIFx1MDAyNnNoZWFmLVx1MDAzZW9iamVjdHNbMF0pO1xubW0vc2x1Yi5jLTI5OTEtXG5tbS9zbHViLmM6Mjk5MjpcdHNoZWFmLVx1MDAzZXNpemUgPSAwO1xubW0vc2x1Yi5jLTI5OTMtfVxubW0vc2x1Yi5jLTI5OTQtXG5tbS9zbHViLmM6Mjk5NTpzdGF0aWMgYm9vbCBfX3JjdV9mcmVlX3NoZWFmX3ByZXBhcmUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmM6Mjk5NjpcdFx0XHRcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubW0vc2x1Yi5jLTI5OTcte1xubW0vc2x1Yi5jLTI5OTgtXHRib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpO1xubW0vc2x1Yi5jOjI5OTk6XHR2b2lkICoqcCA9IFx1MDAyNnNoZWFmLVx1MDAzZW9iamVjdHNbMF07XG5tbS9zbHViLmMtMzAwMC1cdHVuc2lnbmVkIGludCBpID0gMDtcbi0tXG5tbS9zbHViLmMtMzAwMi1cbm1tL3NsdWIuYzozMDAzOlx0d2hpbGUgKGkgXHUwMDNjIHNoZWFmLVx1MDAzZXNpemUpIHtcbm1tL3NsdWIuYy0zMDA0LVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcbi0tXG5tbS9zbHViLmMtMzAwOS1cdFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCB0cnVlKSkpIHtcbm1tL3NsdWIuYzozMDEwOlx0XHRcdHBbaV0gPSBwWy0tc2hlYWYtXHUwMDNlc2l6ZV07XG5tbS9zbHViLmMtMzAxMS1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9zbHViLmMtMzAyMi1cbm1tL3NsdWIuYzozMDIzOnN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmX25vYmFybihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5tbS9zbHViLmMtMzAyNC17XG5tbS9zbHViLmM6MzAyNTpcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcbm1tL3NsdWIuYy0zMDI2LVx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG5tbS9zbHViLmMtMzAyNy1cbm1tL3NsdWIuYzozMDI4Olx0c2hlYWYgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHNsYWJfc2hlYWYsIHJjdV9oZWFkKTtcbm1tL3NsdWIuYzozMDI5Olx0cyA9IHNoZWFmLVx1MDAzZWNhY2hlO1xubW0vc2x1Yi5jLTMwMzAtXG5tbS9zbHViLmM6MzAzMTpcdF9fcmN1X2ZyZWVfc2hlYWZfcHJlcGFyZShzLCBzaGVhZik7XG5tbS9zbHViLmMtMzAzMi1cbm1tL3NsdWIuYzozMDMzOlx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbm1tL3NsdWIuYy0zMDM0LVxubW0vc2x1Yi5jOjMwMzU6XHRmcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmKTtcbm1tL3NsdWIuYy0zMDM2LX1cbi0tXG5tbS9zbHViLmMtMzAzOS0gKiBDYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIG1pZ3JhdGlvbiBpcyBkaXNhYmxlZCBpbiBvcmRlciB0byBmdWxseSBmbHVzaFxubW0vc2x1Yi5jOjMwNDA6ICogc2luZ2xlIGNwdSYjMzk7cyBzaGVhdmVzXG5tbS9zbHViLmMtMzA0MS0gKlxuLS1cbm1tL3NsdWIuYz0zMDQ3PXN0YXRpYyB2b2lkIHBjc19mbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtMzA0OC17XG5tbS9zbHViLmM6MzA0OTpcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5tbS9zbHViLmM6MzA1MDpcdHN0cnVjdCBzbGFiX3NoZWFmICpzcGFyZSwgKnJjdV9mcmVlO1xubW0vc2x1Yi5jLTMwNTEtXG5tbS9zbHViLmM6MzA1MjpcdGxvY2FsX2xvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbm1tL3NsdWIuYzozMDUzOlx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xubW0vc2x1Yi5jLTMwNTQtXG4tLVxubW0vc2x1Yi5jLTMwNjAtXG5tbS9zbHViLmM6MzA2MTpcdGxvY2FsX3VubG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spO1xubW0vc2x1Yi5jLTMwNjItXG5tbS9zbHViLmMtMzA2My1cdGlmIChzcGFyZSkge1xubW0vc2x1Yi5jOjMwNjQ6XHRcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzcGFyZSk7XG5tbS9zbHViLmM6MzA2NTpcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzcGFyZSk7XG5tbS9zbHViLmMtMzA2Ni1cdH1cbi0tXG5tbS9zbHViLmMtMzA2OC1cdGlmIChyY3VfZnJlZSlcbm1tL3NsdWIuYzozMDY5Olx0XHRjYWxsX3JjdShcdTAwMjZyY3VfZnJlZS1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWZfbm9iYXJuKTtcbm1tL3NsdWIuYy0zMDcwLVxubW0vc2x1Yi5jOjMwNzE6XHRzaGVhZl9mbHVzaF9tYWluKHMpO1xubW0vc2x1Yi5jLTMwNzItfVxuLS1cbm1tL3NsdWIuYz0zMDc0PXN0YXRpYyB2b2lkIF9fcGNzX2ZsdXNoX2FsbF9jcHUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHVuc2lnbmVkIGludCBjcHUpXG5tbS9zbHViLmMtMzA3NS17XG5tbS9zbHViLmM6MzA3NjpcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5tbS9zbHViLmMtMzA3Ny1cbm1tL3NsdWIuYzozMDc4Olx0cGNzID0gcGVyX2NwdV9wdHIocy1cdTAwM2VjcHVfc2hlYXZlcywgY3B1KTtcbm1tL3NsdWIuYy0zMDc5LVxubW0vc2x1Yi5jLTMwODAtXHQvKiBUaGUgY3B1IGlzIG5vdCBleGVjdXRpbmcgYW55bW9yZSBzbyB3ZSBkb24mIzM5O3QgbmVlZCBwY3MtXHUwMDNlbG9jayAqL1xubW0vc2x1Yi5jOjMwODE6XHRzaGVhZl9mbHVzaF91bnVzZWQocywgcGNzLVx1MDAzZW1haW4pO1xubW0vc2x1Yi5jLTMwODItXHRpZiAocGNzLVx1MDAzZXNwYXJlKSB7XG5tbS9zbHViLmM6MzA4MzpcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHBjcy1cdTAwM2VzcGFyZSk7XG5tbS9zbHViLmM6MzA4NDpcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBwY3MtXHUwMDNlc3BhcmUpO1xubW0vc2x1Yi5jLTMwODUtXHRcdHBjcy1cdTAwM2VzcGFyZSA9IE5VTEw7XG4tLVxubW0vc2x1Yi5jLTMwODgtXHRpZiAocGNzLVx1MDAzZXJjdV9mcmVlKSB7XG5tbS9zbHViLmM6MzA4OTpcdFx0Y2FsbF9yY3UoXHUwMDI2cGNzLVx1MDAzZXJjdV9mcmVlLVx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZl9ub2Jhcm4pO1xubW0vc2x1Yi5jLTMwOTAtXHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IE5VTEw7XG4tLVxubW0vc2x1Yi5jPTMwOTQ9c3RhdGljIHZvaWQgcGNzX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTMxMDEtXHQgKi9cbm1tL3NsdWIuYzozMTAyOlx0aWYgKCFzLVx1MDAzZWNwdV9zaGVhdmVzKVxubW0vc2x1Yi5jLTMxMDMtXHRcdHJldHVybjtcbm1tL3NsdWIuYy0zMTA0LVxubW0vc2x1Yi5jOjMxMDU6XHQvKiBwY3MtXHUwMDNlbWFpbiBjYW4gb25seSBwb2ludCB0byB0aGUgYm9vdHN0cmFwIHNoZWFmLCBub3RoaW5nIHRvIGZyZWUgKi9cbm1tL3NsdWIuYzozMTA2Olx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcbm1tL3NsdWIuYy0zMTA3LVx0XHRnb3RvIGZyZWVfcGNzO1xuLS1cbm1tL3NsdWIuYy0zMTA5LVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xubW0vc2x1Yi5jOjMxMTA6XHRcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5tbS9zbHViLmMtMzExMS1cbm1tL3NsdWIuYzozMTEyOlx0XHRwY3MgPSBwZXJfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzLCBjcHUpO1xubW0vc2x1Yi5jLTMxMTMtXG4tLVxubW0vc2x1Yi5jLTMxMjMtXHRcdCAqIHdhcm5pbmdzIGhlcmUgdHJpZ2dlciwgYW5kIHdlIHNob3VsZCByYXRoZXIgbGVhdmUgb2JqZWN0cyBhbmRcbm1tL3NsdWIuYzozMTI0Olx0XHQgKiBzaGVhdmVzIHRvIGxlYWsgaW4gdGhhdCBjYXNlLlxubW0vc2x1Yi5jLTMxMjUtXHRcdCAqL1xuLS1cbm1tL3NsdWIuYy0zMTMwLVx0XHRpZiAoIVdBUk5fT04ocGNzLVx1MDAzZW1haW4tXHUwMDNlc2l6ZSkpIHtcbm1tL3NsdWIuYzozMTMxOlx0XHRcdGZyZWVfZW1wdHlfc2hlYWYocywgcGNzLVx1MDAzZW1haW4pO1xubW0vc2x1Yi5jLTMxMzItXHRcdFx0cGNzLVx1MDAzZW1haW4gPSBOVUxMO1xuLS1cbm1tL3NsdWIuYy0zMTM2LWZyZWVfcGNzOlxubW0vc2x1Yi5jOjMxMzc6XHRmcmVlX3BlcmNwdShzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbm1tL3NsdWIuYzozMTM4Olx0cy1cdTAwM2VjcHVfc2hlYXZlcyA9IE5VTEw7XG5tbS9zbHViLmMtMzEzOS19XG5tbS9zbHViLmMtMzE0MC1cbm1tL3NsdWIuYzozMTQxOnN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqYmFybl9nZXRfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybixcbm1tL3NsdWIuYy0zMTQyLVx0XHRcdFx0XHQgICAgICAgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTMxNDMte1xubW0vc2x1Yi5jOjMxNDQ6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHkgPSBOVUxMO1xubW0vc2x1Yi5jLTMxNDUtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbm1tL3NsdWIuYy0zMTU1LVx0aWYgKGxpa2VseShiYXJuLVx1MDAzZW5yX2VtcHR5KSkge1xubW0vc2x1Yi5jOjMxNTY6XHRcdGVtcHR5ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZiYXJuLVx1MDAzZXNoZWF2ZXNfZW1wdHksXG5tbS9zbHViLmM6MzE1NzpcdFx0XHRcdFx0IHN0cnVjdCBzbGFiX3NoZWFmLCBiYXJuX2xpc3QpO1xubW0vc2x1Yi5jLTMxNTgtXHRcdGxpc3RfZGVsKFx1MDAyNmVtcHR5LVx1MDAzZWJhcm5fbGlzdCk7XG4tLVxubW0vc2x1Yi5jLTMxNjktICogaW50ZW5kZWQgYWN0aW9uIGR1ZSB0byBhIHJhY2Ugb3IgY3B1IG1pZ3JhdGlvbi4gVGh1cyB0aGV5IGRvIG5vdCBjaGVjayB0aGVcbm1tL3NsdWIuYzozMTcwOiAqIGVtcHR5IG9yIGZ1bGwgc2hlYWYgbGltaXRzIGZvciBzaW1wbGljaXR5LlxubW0vc2x1Yi5jLTMxNzEtICovXG5tbS9zbHViLmMtMzE3Mi1cbm1tL3NsdWIuYzozMTczOnN0YXRpYyB2b2lkIGJhcm5fcHV0X2VtcHR5X3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbm1tL3NsdWIuYy0zMTc0LXtcbi0tXG5tbS9zbHViLmMtMzE3OC1cbm1tL3NsdWIuYzozMTc5Olx0bGlzdF9hZGQoXHUwMDI2c2hlYWYtXHUwMDNlYmFybl9saXN0LCBcdTAwMjZiYXJuLVx1MDAzZXNoZWF2ZXNfZW1wdHkpO1xubW0vc2x1Yi5jLTMxODAtXHRiYXJuLVx1MDAzZW5yX2VtcHR5JiM0MzsmIzQzOztcbi0tXG5tbS9zbHViLmMtMzE4NC1cbm1tL3NsdWIuYzozMTg1OnN0YXRpYyB2b2lkIGJhcm5fcHV0X2Z1bGxfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubW0vc2x1Yi5jLTMxODYte1xuLS1cbm1tL3NsdWIuYy0zMTkwLVxubW0vc2x1Yi5jOjMxOTE6XHRsaXN0X2FkZChcdTAwMjZzaGVhZi1cdTAwM2ViYXJuX2xpc3QsIFx1MDAyNmJhcm4tXHUwMDNlc2hlYXZlc19mdWxsKTtcbm1tL3NsdWIuYy0zMTkyLVx0YmFybi1cdTAwM2Vucl9mdWxsJiM0MzsmIzQzOztcbi0tXG5tbS9zbHViLmMtMzE5Ni1cbm1tL3NsdWIuYzozMTk3OnN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqYmFybl9nZXRfZnVsbF9vcl9lbXB0eV9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuKVxubW0vc2x1Yi5jLTMxOTgte1xubW0vc2x1Yi5jOjMxOTk6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYgPSBOVUxMO1xubW0vc2x1Yi5jLTMyMDAtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbm1tL3NsdWIuYy0zMjA3LVx0aWYgKGJhcm4tXHUwMDNlbnJfZnVsbCkge1xubW0vc2x1Yi5jOjMyMDg6XHRcdHNoZWFmID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZiYXJuLVx1MDAzZXNoZWF2ZXNfZnVsbCwgc3RydWN0IHNsYWJfc2hlYWYsXG5tbS9zbHViLmMtMzIwOS1cdFx0XHRcdFx0YmFybl9saXN0KTtcbm1tL3NsdWIuYzozMjEwOlx0XHRsaXN0X2RlbChcdTAwMjZzaGVhZi1cdTAwM2ViYXJuX2xpc3QpO1xubW0vc2x1Yi5jLTMyMTEtXHRcdGJhcm4tXHUwMDNlbnJfZnVsbC0tO1xubW0vc2x1Yi5jLTMyMTItXHR9IGVsc2UgaWYgKGJhcm4tXHUwMDNlbnJfZW1wdHkpIHtcbm1tL3NsdWIuYzozMjEzOlx0XHRzaGVhZiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2YmFybi1cdTAwM2VzaGVhdmVzX2VtcHR5LFxubW0vc2x1Yi5jOjMyMTQ6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2xhYl9zaGVhZiwgYmFybl9saXN0KTtcbm1tL3NsdWIuYzozMjE1Olx0XHRsaXN0X2RlbChcdTAwMjZzaGVhZi1cdTAwM2ViYXJuX2xpc3QpO1xubW0vc2x1Yi5jLTMyMTYtXHRcdGJhcm4tXHUwMDNlbnJfZW1wdHktLTtcbi0tXG5tbS9zbHViLmMtMzIyMC1cbm1tL3NsdWIuYzozMjIxOlx0cmV0dXJuIHNoZWFmO1xubW0vc2x1Yi5jLTMyMjItfVxuLS1cbm1tL3NsdWIuYy0zMjI0LS8qXG5tbS9zbHViLmM6MzIyNTogKiBJZiBhIGZ1bGwgc2hlYWYgaXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYW5kIHB1dCB0aGUgc3VwcGxpZWQgZW1wdHkgb25lIHRvXG5tbS9zbHViLmM6MzIyNjogKiBiYXJuLiBXZSBpZ25vcmUgdGhlIGxpbWl0IG9uIGVtcHR5IHNoZWF2ZXMgYXMgdGhlIG51bWJlciBvZiBzaGVhdmVzIGRvZXNuJiMzOTt0XG5tbS9zbHViLmMtMzIyNy0gKiBjaGFuZ2UuXG5tbS9zbHViLmMtMzIyOC0gKi9cbm1tL3NsdWIuYzozMjI5OnN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqXG5tbS9zbHViLmM6MzIzMDpiYXJuX3JlcGxhY2VfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LFxubW0vc2x1Yi5jLTMyMzEtXHRcdFx0IGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zMjMyLXtcbm1tL3NsdWIuYzozMjMzOlx0c3RydWN0IHNsYWJfc2hlYWYgKmZ1bGwgPSBOVUxMO1xubW0vc2x1Yi5jLTMyMzQtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbm1tL3NsdWIuYy0zMjQ0LVx0aWYgKGxpa2VseShiYXJuLVx1MDAzZW5yX2Z1bGwpKSB7XG5tbS9zbHViLmM6MzI0NTpcdFx0ZnVsbCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2YmFybi1cdTAwM2VzaGVhdmVzX2Z1bGwsIHN0cnVjdCBzbGFiX3NoZWFmLFxubW0vc2x1Yi5jLTMyNDYtXHRcdFx0XHRcdGJhcm5fbGlzdCk7XG5tbS9zbHViLmMtMzI0Ny1cdFx0bGlzdF9kZWwoXHUwMDI2ZnVsbC1cdTAwM2ViYXJuX2xpc3QpO1xubW0vc2x1Yi5jOjMyNDg6XHRcdGxpc3RfYWRkKFx1MDAyNmVtcHR5LVx1MDAzZWJhcm5fbGlzdCwgXHUwMDI2YmFybi1cdTAwM2VzaGVhdmVzX2VtcHR5KTtcbm1tL3NsdWIuYy0zMjQ5LVx0XHRiYXJuLVx1MDAzZW5yX2Z1bGwtLTtcbi0tXG5tbS9zbHViLmMtMzI1OC0vKlxubW0vc2x1Yi5jOjMyNTk6ICogSWYgYW4gZW1wdHkgc2hlYWYgaXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYW5kIHB1dCB0aGUgc3VwcGxpZWQgZnVsbCBvbmUgdG9cbm1tL3NsdWIuYzozMjYwOiAqIGJhcm4uIEJ1dCBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgZnVsbCBzaGVhdmVzLCByZWplY3QgdGhpcyB3aXRoIC1FMkJJRy5cbm1tL3NsdWIuYy0zMjYxLSAqL1xubW0vc2x1Yi5jOjMyNjI6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpcbm1tL3NsdWIuYzozMjYzOmJhcm5fcmVwbGFjZV9mdWxsX3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sIHN0cnVjdCBzbGFiX3NoZWFmICpmdWxsLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUkNVIEZyZWVpbmcgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gYG1tL3NsdWIuY2AgYW5kIGBtbS9zbGFiX2NvbW1vbi5jYCB3aXRoIHJlZ2FyZCB0byBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYF9fa2ZyZWVfcmN1X3NoZWFmYCwgYHJjdV9mcmVlX3NoZWFmYCwgYHJjdV9mcmVlX3NoZWFmX25vYmFybmAgaW4gYG1tL3NsdWIuY2AgYW5kIGBrdmZyZWVfY2FsbF9yY3VgLCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgYGtmcmVlX3JjdV9zaGVhZmAgaW4gYG1tL3NsYWJfY29tbW9uLmNgLgoKRmlyc3QsIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHF1ZXN0aW9uLiBZZXMsIHRoaXMgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBga3ZmcmVlX2NhbGxfcmN1YCBhbmQgYGtmcmVlX3JjdV9zaGVhZmAuIFNwZWNpZmljYWxseSwgdW5kZXIgYFBSRUVNUFRfUlRgLCBpdCBieXBhc3NlcyB0aGUgc2hlYWYtYmFzZWQgYGtmcmVlX3JjdWAgYW5kIHBhc3NlcyBgU0xBQl9GUkVFX0RFRkFVTFRgIHVuZGVyIGAhUFJFRU1QVF9SVGAuCgpOb3csIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGNvbnVuZHJ1bS4gVGhlIGtleSBoZXJlIGlzIGlkZW50aWZ5aW5nICpzcGVjaWZpYyogZnVuY3Rpb25zIGZvciBpbnRlbnNpdmUgZnV6emluZywgd2hpbGUgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgZnV6emluZyB3aWxsIGJlIHNrZXdlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcy4gSSBrbm93IHRoYXQgbWVtb3J5IGFsbG9jYXRpb24vZnJlZSBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgLCBga21hbGxvY2AsIGBjYWxsX3JjdWAsIGBrdmZyZWVfY2FsbF9yY3VgIGFyZSBleHRyZW1lbHkgaG90IHBhdGguIEhvd2V2ZXIsIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgc3BlY2lmaWMgZW50cnlwb2ludCBmb3IgbG9ja2xlc3MgUkNVIGZyZWUuCgpNeSB0aG91Z2h0cyBjaXJjbGUgYXJvdW5kIGBrdmZyZWVfY2FsbF9yY3VgIGFuZCB3aGV0aGVyIGl0IGlzIGEgaG90LXBhdGggZnVuY3Rpb24sIHdoaWNoIGlzIHRyaWNreSBiZWNhdXNlIHdoaWxlIGBrZnJlZWAgYW5kIGBrbWFsbG9jYCBhcmUgZGlyZWN0bHkgY2FsbGVkLCBga3ZmcmVlX2NhbGxfcmN1YCBpcyBjYWxsZWQgd2hlbiBSQ1Ugb2JqZWN0cyBhcmUgcmVjbGFpbWVkLiBUaGlzIGlzIGEgc3VidGxlLCBidXQgaW1wb3J0YW50IGRpc3RpbmN0aW9uLiBJIGNhbiBydWxlIG91dCB0aGUgc3RhdGljIGhlbHBlciBgX19rZnJlZV9yY3Vfc2hlYWZgLiBUaGUga2V5IGlzIGZpbmRpbmcgYSBmdW5jdGlvbiB0aGF0IGJlbmVmaXRzIGZyb20gdGFyZ2V0ZWQgZnV6emluZywgYnV0IGlzbiYjMzk7dCBzbyBnZW5lcmljIHRoYXQgZnV6emluZyBpcyBza2V3ZWQuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGp1c3QgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIHVwZGF0ZWQgY29tbWVudHMgaW4gYG1tL3NsdWIuY2AuIFNvIG15IGJlc3QgYmV0IGlzIGBrdmZyZWVfY2FsbF9yY3VgLCBhcyB0aGUga2V5IEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guCgpGaW5hbGx5LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gVGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYFBSRUVNUFRfUlRgLCBzaW5jZSB0aGUgY29uZGl0aW9uYWwgY2hhbmdlIGhpbmdlcyBvbiBpdC4gVGhlIHBhdGNoIGFkZHMgYGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgJmFtcDsmYW1wOyBrZnJlZV9yY3Vfc2hlYWYocHRyKSlgIGFuZCBgU0xVQmAgaXMgZGVmYXVsdCB5LCBgS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBkZWZhdWx0IHkuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgYCFQUkVFTVBUX1JUYC4KClRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFBSRUVNUFRfUlRgLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBFWFBFUlRgIGFuZCBgQVJDSF9TVVBQT1JUU19SVGAuIEFsc28gYEtWRlJFRV9SQ1VfQkFUQ0hFRGAsIGFuZCBgIVNMVUJfVElOWWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY5MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vc2x1Yi5jPTE5Mz1lbnVtIHNsYWJfZmxhZ3Mge1xuLS1cbm1tL3NsdWIuYy0xOTgtXG5tbS9zbHViLmM6MTk5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxubW0vc2x1Yi5jLTIwMC0jZGVmaW5lIF9fZmFzdHBhdGhfaW5saW5lIF9fYWx3YXlzX2lubGluZVxuLS1cbm1tL3NsdWIuYy0yMDQtXG5tbS9zbHViLmM6MjA1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jOjIwNjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdfT05cbm1tL3NsdWIuYy0yMDctREVGSU5FX1NUQVRJQ19LRVlfVFJVRShzbHViX2RlYnVnX2VuYWJsZWQpO1xuLS1cbm1tL3NsdWIuYz0yMDk9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbm1tL3NsdWIuYy0yMTAtI2VuZGlmXG5tbS9zbHViLmM6MjExOiNlbmRpZlx0XHQvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTIxMi1cbm1tL3NsdWIuYzoyMTM6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmMtMjE0LXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XG4tLVxubW0vc2x1Yi5jLTIxNi1cbm1tL3NsdWIuYzoyMTc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbHViLmM6MjE4OkRFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbm1tL3NsdWIuYy0yMTktXHRcdFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4tLVxubW0vc2x1Yi5jPTIzOT1zdHJ1Y3Qgc2xhYl9vYmpfaXRlciB7XG4tLVxubW0vc2x1Yi5jLTI0MS1cdHZvaWQgKnN0YXJ0O1xubW0vc2x1Yi5jOjI0MjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9zbHViLmMtMjQzLVx0dW5zaWduZWQgbG9uZyBmcmVlbGlzdF9jb3VudDtcbi0tXG5tbS9zbHViLmM9MjU0PXZvaWQgKmZpeHVwX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxuLS1cbm1tL3NsdWIuYy0yNzItXG5tbS9zbHViLmM6MjczOiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxubW0vc2x1Yi5jLTI3NC0vKlxuLS1cbm1tL3NsdWIuYz0zMjg9c3RydWN0IHRyYWNrIHtcbm1tL3NsdWIuYy0zMjktXHR1bnNpZ25lZCBsb25nIGFkZHI7XHQvKiBDYWxsZWQgZnJvbSBhZGRyZXNzICovXG5tbS9zbHViLmM6MzMwOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTMzMS1cdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbi0tXG5tbS9zbHViLmM9MzQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3N5c2ZzX3Byb2Nlc3NfYWxpYXNlcyh2b2lkKSB7IH1cbi0tXG5tbS9zbHViLmMtMzQ5LVxubW0vc2x1Yi5jOjM1MDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKVxubW0vc2x1Yi5jLTM1MS1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopO1xuLS1cbm1tL3NsdWIuYz0zNjM9ZW51bSBzdGF0X2l0ZW0ge1xuLS1cbm1tL3NsdWIuYy0zOTItXG5tbS9zbHViLmM6MzkzOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTM5NC1zdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyB7XG4tLVxubW0vc2x1Yi5jPTM5OT1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpXG5tbS9zbHViLmMtNDAwLXtcbm1tL3NsdWIuYzo0MDE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNDAyLVx0Lypcbi0tXG5tbS9zbHViLmM9NDExPXZvaWQgc3RhdF9hZGQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpLCBpbnQgdilcbm1tL3NsdWIuYy00MTIte1xubW0vc2x1Yi5jOjQxMzojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy00MTQtXHRyYXdfY3B1X2FkZChzLVx1MDAzZWNwdV9zdGF0cy1cdTAwM2VzdGF0W3NpXSwgdik7XG4tLVxubW0vc2x1Yi5jPTQ1Nz1zdHJ1Y3Qga21lbV9jYWNoZV9ub2RlIHtcbi0tXG5tbS9zbHViLmMtNDYwLVx0c3RydWN0IGxpc3RfaGVhZCBwYXJ0aWFsO1xubW0vc2x1Yi5jOjQ2MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy00NjItXHRhdG9taWNfbG9uZ190IG5yX3NsYWJzO1xuLS1cbm1tL3NsdWIuYz01MzE9c3RhdGljIGlubGluZSBmcmVlcHRyX3QgZnJlZWxpc3RfcHRyX2VuY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNTM1LVxubW0vc2x1Yi5jOjUzNjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy01MzctXHRlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpcHRyIF4gcy1cdTAwM2VyYW5kb20gXiBzd2FiKHB0cl9hZGRyKTtcbi0tXG5tbS9zbHViLmM9NTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCAqZnJlZWxpc3RfcHRyX2RlY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNTQ4LVxubW0vc2x1Yi5jOjU0OTojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy01NTAtXHRkZWNvZGVkID0gKHZvaWQgKikocHRyLnYgXiBzLVx1MDAzZXJhbmRvbSBeIHN3YWIocHRyX2FkZHIpKTtcbi0tXG5tbS9zbHViLmM9NTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnJlZXBvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgdm9pZCAqZnApXG4tLVxubW0vc2x1Yi5jLTU3MS1cbm1tL3NsdWIuYzo1NzI6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG5tbS9zbHViLmMtNTczLVx0QlVHX09OKG9iamVjdCA9PSBmcCk7IC8qIG5haXZlIGRldGVjdGlvbiBvZiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uICovXG4tLVxubW0vc2x1Yi5jPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgX19zbGFiX3VwZGF0ZV9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTcwNi1cbm1tL3NsdWIuYzo3MDc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jLTcwOC1cdFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xuLS1cbm1tL3NsdWIuYz03NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcbi0tXG5tbS9zbHViLmMtNzkwLVxubW0vc2x1Yi5jOjc5MTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2x1Yi5jLTc5Mi1cbi0tXG5tbS9zbHViLmM9ODc5PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODg1LVxubW0vc2x1Yi5jOjg4NjojaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG5tbS9zbHViLmMtODg3LXN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmM9OTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTkyMC0gKi9cbm1tL3NsdWIuYzo5MjE6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSB8fCBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKVxubW0vc2x1Yi5jLTkyMi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpXG4tLVxubW0vc2x1Yi5jPTkyNz1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9hdHRhY2hfa3Byb2JlX2xvY2tlZCh2b2lkKSB7IH1cbi0tXG5tbS9zbHViLmMtOTM0LVxubW0vc2x1Yi5jOjkzNTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05MzYtXG4tLVxubW0vc2x1Yi5jPTk0OT1zdGF0aWMgdm9pZCBfX2ZpbGxfbWFwKHVuc2lnbmVkIGxvbmcgKm9ial9tYXAsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy05NjAtXG5tbS9zbHViLmM6OTYxOiNpZiBJU19FTkFCTEVEKENPTkZJR19LVU5JVClcbm1tL3NsdWIuYy05NjItc3RhdGljIGJvb2wgc2xhYl9hZGRfa3VuaXRfZXJyb3JzKHZvaWQpXG4tLVxubW0vc2x1Yi5jPTEwMDQ9c3RhdGljIGlubGluZSB2b2lkICpyZXN0b3JlX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxuLS1cbm1tL3NsdWIuYy0xMDE0LSAqL1xubW0vc2x1Yi5jOjEwMTU6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUdfT04pXG5tbS9zbHViLmMtMTAxNi1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xuLS1cbm1tL3NsdWIuYz0xMDU3PXN0YXRpYyBzdHJ1Y3QgdHJhY2sgKmdldF90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LFxuLS1cbm1tL3NsdWIuYy0xMDY2LVxubW0vc2x1Yi5jOjEwNjc6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXG5tbS9zbHViLmMtMTA2OC1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUoZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0xMDg2PXN0YXRpYyB2b2lkIHNldF90cmFja191cGRhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCxcbi0tXG5tbS9zbHViLmMtMTA5MS1cbm1tL3NsdWIuYzoxMDkyOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTEwOTMtXHRwLVx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcbi0tXG5tbS9zbHViLmM9MTEyMD1zdGF0aWMgdm9pZCBwcmludF90cmFjayhjb25zdCBjaGFyICpzLCBzdHJ1Y3QgdHJhY2sgKnQsIHVuc2lnbmVkIGxvbmcgcHJfdGltZSlcbi0tXG5tbS9zbHViLmMtMTEyOC1cdCAgICAgICBzLCAodm9pZCAqKXQtXHUwMDNlYWRkciwgcHJfdGltZSAtIHQtXHUwMDNld2hlbiwgdC1cdTAwM2VjcHUsIHQtXHUwMDNlcGlkKTtcbm1tL3NsdWIuYzoxMTI5OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTExMzAtXHRoYW5kbGUgPSBSRUFEX09OQ0UodC1cdTAwM2VoYW5kbGUpO1xuLS1cbm1tL3NsdWIuYz0xMzIwPXN0YXRpYyB2b2lkIHJlc3RvcmVfYnl0ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHU4IGRhdGEsXG4tLVxubW0vc2x1Yi5jLTEzMjYtXG5tbS9zbHViLmM6MTMyNzojaWZkZWYgQ09ORklHX0tNU0FOXG5tbS9zbHViLmMtMTMyOC0jZGVmaW5lIHBhZF9jaGVja19hdHRyaWJ1dGVzIG5vaW5saW5lIF9fbm9fa21zYW5fY2hlY2tzXG4tLVxubW0vc2x1Yi5jPTEzMzQ9Y2hlY2tfYnl0ZXNfYW5kX3JlcG9ydChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTEzOTctICpcbm1tL3NsdWIuYzoxMzk4OiAqIFtNYW5kYXRvcnkgcGFkZGluZ10gKGlmIENPTkZJR19TTFVCX0RFQlVHIFx1MDAyNlx1MDAyNiBTTEFCX1JFRF9aT05FKVxubW0vc2x1Yi5jLTEzOTktICogICAtIE9uZSBtYW5kYXRvcnkgZGVidWcgd29yZCB0byBndWFyYW50ZWUgYSBtaW5pbXVtIHBvaXNvbmVkIGdhcFxuLS1cbm1tL3NsdWIuYz0xOTA3PXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsdWJfZGVidWcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9zbHViLmMtMTk0MC1cdCAqIHNsYWJfZGVidWcgc2hvdWxkIGJlIHVuY2hhbmdlZCAoMCBvciBERUJVR19ERUZBVUxUX0ZMQUdTLCBkZXBlbmRpbmdcbm1tL3NsdWIuYzoxOTQxOlx0ICogb24gQ09ORklHX1NMVUJfREVCVUdfT04pLiBXZSBjYW4gZXh0ZW5kZWQgdGhhdCB0byBtdWx0aXBsZSBsaXN0cyBhc1xubW0vc2x1Yi5jLTE5NDItXHQgKiBsb25nIGFzIHRoZXJlIGlzIG5vIG9wdGlvbiBzcGVjaWZ5aW5nIGZsYWdzIHdpdGhvdXQgYSBzbGFiIGxpc3QuXG4tLVxubW0vc2x1Yi5jPTE5ODE9c2xhYl9mbGFnc190IGttZW1fY2FjaGVfZmxhZ3Moc2xhYl9mbGFnc190IGZsYWdzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3NsdWIuYy0yMDM0LX1cbm1tL3NsdWIuYzoyMDM1OiNlbHNlIC8qICFDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTIwMzYtc3RhdGljIGlubGluZSB2b2lkIHNldHVwX29iamVjdF9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KSB7fVxuLS1cbm1tL3NsdWIuYz0yMDY5PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG5tbS9zbHViLmMtMjA3MC1cdFx0XHRcdFx0XHRcdGludCBvYmplY3RzKSB7fVxubW0vc2x1Yi5jOjIwNzE6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXG5tbS9zbHViLmMtMjA3Mi1cbi0tXG5tbS9zbHViLmMtMjA4NC1cbm1tL3NsdWIuYzoyMDg1OiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG5tbS9zbHViLmMtMjA4Ni1cbm1tL3NsdWIuYzoyMDg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vc2x1Yi5jLTIwODgtXG4tLVxubW0vc2x1Yi5jPTIxMjQ9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjE0OS1cbm1tL3NsdWIuYzoyMTUwOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjE1MS1cbi0tXG5tbS9zbHViLmM9MjE1ND1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMTU2LVxubW0vc2x1Yi5jOjIxNTc6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjE1OC1cbi0tXG5tbS9zbHViLmM9MjE2ND1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIyMDAtXG5tbS9zbHViLmM6MjIwMTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19WTSkpIHtcbm1tL3NsdWIuYy0yMjAyLVx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0c19jYWNoZTtcbi0tXG5tbS9zbHViLmMtMjIxNy1cdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xubW0vc2x1Yi5jOjIyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIyMTktXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4tLVxubW0vc2x1Yi5jPTIyODU9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMDEtXG5tbS9zbHViLmM6MjMwMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjMwMy1cdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuLS1cbm1tL3NsdWIuYy0yMzE3LVxubW0vc2x1Yi5jOjIzMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIzMTktXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0tXG5tbS9zbHViLmMtMjMyNS1cbm1tL3NsdWIuYzoyMzI2OiNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbm1tL3NsdWIuYy0yMzI3LVxuLS1cbm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMzUwLVxubW0vc2x1Yi5jOjIzNTE6I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbm1tL3NsdWIuYy0yMzUyLVxubW0vc2x1Yi5jOjIzNTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbHViLmMtMjM1NC1cbi0tXG5tbS9zbHViLmM9MjQ2OT1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcbi0tXG5tbS9zbHViLmMtMjQ4MC1cbm1tL3NsdWIuYzoyNDgxOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9zbHViLmMtMjQ4Mi1cbi0tXG5tbS9zbHViLmM9MjQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcbi0tXG5tbS9zbHViLmMtMjQ5OC1cbm1tL3NsdWIuYzoyNDk5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xubW0vc2x1Yi5jLTI1MDAtXG5tbS9zbHViLmMtMjUwMS1cbm1tL3NsdWIuYzoyNTAyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsdWIuYy0yNTAzLVxuLS1cbm1tL3NsdWIuYz0yNTUzPWJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbi0tXG5tbS9zbHViLmMtMjYxMC1cbm1tL3NsdWIuYzoyNjExOiNlbHNlIC8qIENPTkZJR19NRU1DRyAqL1xubW0vc2x1Yi5jLTI2MTItc3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYz0yNjI1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNjI4LX1cbm1tL3NsdWIuYzoyNjI5OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3NsdWIuYy0yNjMwLVxubW0vc2x1Yi5jOjI2MzE6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTI2MzItc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKTtcbi0tXG5tbS9zbHViLmM9MjYzND1zdHJ1Y3QgcmN1X2RlbGF5ZWRfZnJlZSB7XG4tLVxubW0vc2x1Yi5jLTI2NDQtICogUmV0dXJucyB0cnVlIGlmIGZyZWVpbmcgb2YgdGhlIG9iamVjdCBjYW4gcHJvY2VlZCwgZmFsc2UgaWYgaXRzIHJldXNlXG5tbS9zbHViLmM6MjY0NTogKiB3YXMgZGVsYXllZCBieSBDT05GSUdfU0xVQl9SQ1VfREVCVUcgb3IgS0FTQU4gcXVhcmFudGluZSwgb3IgaXQgd2FzIHJldHVybmVkXG5tbS9zbHViLmMtMjY0Ni0gKiB0byBLRkVOQ0UuXG4tLVxubW0vc2x1Yi5jPTI2Njc9Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxuLS1cbm1tL3NsdWIuYy0yNjk1LVxubW0vc2x1Yi5jOjI2OTY6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTI2OTctXHRpZiAoc3RpbGxfYWNjZXNzaWJsZSkge1xuLS1cbm1tL3NsdWIuYy0yNzE1LVx0fVxubW0vc2x1Yi5jOjI3MTY6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xubW0vc2x1Yi5jLTI3MTctXG4tLVxubW0vc2x1Yi5jPTMzMzM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqYWxsb2Nfc2xhYl9wYWdlKGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtMzM2MC1cbm1tL3NsdWIuYzozMzYxOiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9SQU5ET01cbm1tL3NsdWIuYy0zMzYyLS8qIFByZS1pbml0aWFsaXplIHRoZSByYW5kb20gc2VxdWVuY2UgY2FjaGUgKi9cbi0tXG5tbS9zbHViLmM9MzQwOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9mcmVlbGlzdF9yYW5kb21pemF0aW9uKHZvaWQpIHsgfVxubW0vc2x1Yi5jOjM0MTA6I2VuZGlmIC8qIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTSAqL1xubW0vc2x1Yi5jLTM0MTEtXG4tLVxubW0vc2x1Yi5jPTM0NDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQ4MC1cbm1tL3NsdWIuYzozNDgxOiNpZmRlZiBDT05GSUdfNjRCSVRcbm1tL3NsdWIuYy0zNDgyLVx0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuLS1cbm1tL3NsdWIuYz0zNjM0PXN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zNjQwLVxubW0vc2x1Yi5jOjM2NDE6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtMzY0Mi1cdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xuLS1cbm1tL3NsdWIuYz0zNjY4PXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV4dF9zbGFiX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMzY3MC17XG5tbS9zbHViLmM6MzY3MTojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9zbHViLmMtMzY3Mi1cdGlmIChpdGVyLVx1MDAzZXJhbmRvbSkge1xuLS1cbm1tL3NsdWIuYz0zNzE4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2l0ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0zNzI0LVxubW0vc2x1Yi5jOjM3MjU6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTM3MjYtXHRpdGVyLVx1MDAzZXJhbmRvbSA9IChzbGFiLVx1MDAzZW9iamVjdHMgXHUwMDNlPSAyIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXJhbmRvbV9zZXEpO1xuLS1cbm1tL3NsdWIuYz0zODg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTM5MTMtXG5tbS9zbHViLmM6MzkxNDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTM5MTUtXHRcdFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzLCBuLCBzbGFiLFxuLS1cbm1tL3NsdWIuYz0zOTUwPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zOTUyLXtcbm1tL3NsdWIuYzozOTUzOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTM5NTQtXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0O1xuLS1cbm1tL3NsdWIuYy00MDE3LVx0fSB3aGlsZSAoYWxsb3dfc3BpbiBcdTAwMjZcdTAwMjYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9zbHViLmM6NDAxODojZW5kaWZcdC8qIENPTkZJR19OVU1BICovXG5tbS9zbHViLmMtNDAxOS1cdHJldHVybiBOVUxMO1xuLS1cbm1tL3NsdWIuYz00MjQ5PXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MjYxLVxubW0vc2x1Yi5jOjQyNjI6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDI2My1zdGF0aWMgaW50IGNvdW50X2ZyZWUoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTQyNzQ9c3RhdGljIGlubGluZSBib29sIGZyZWVfZGVidWdfcHJvY2Vzc2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNDMyOS19XG5tbS9zbHViLmM6NDMzMDojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy00MzMxLVxubW0vc2x1Yi5jOjQzMzI6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIHx8IGRlZmluZWQoU0xBQl9TVVBQT1JUU19TWVNGUylcbm1tL3NsdWIuYy00MzMzLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbi0tXG5tbS9zbHViLmMtNDM0NS19XG5tbS9zbHViLmM6NDM0NjojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgfHwgU0xBQl9TVVBQT1JUU19TWVNGUyAqL1xubW0vc2x1Yi5jLTQzNDctXG5tbS9zbHViLmM6NDM0ODojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy00MzQ5LSNkZWZpbmUgTUFYX1BBUlRJQUxfVE9fU0NBTiAxMDAwMFxuLS1cbm1tL3NsdWIuYz00Mzg3PXNsYWJfb3V0X29mX21lbW9yeShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBuaWQpXG4tLVxubW0vc2x1Yi5jLTQ0MjAtfVxubW0vc2x1Yi5jOjQ0MjE6I2Vsc2UgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy00NDIyLXN0YXRpYyBpbmxpbmUgdm9pZFxuLS1cbm1tL3NsdWIuYz00NTMzPXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTQ1ODEtXG5tbS9zbHViLmM6NDU4MjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy00NTgzLVx0XHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9uZXdfc2xhYihzLCBzbGFiLCBhYyk7XG4tLVxubW0vc2x1Yi5jPTQ2MDY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxubW0vc2x1Yi5jLTQ2MDcte1xubW0vc2x1Yi5jOjQ2MDg6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmMtNDYwOS1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9zbHViLmM9NDgyNz12b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy00ODMyLVxubW0vc2x1Yi5jOjQ4MzM6XHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcbm1tL3NsdWIuYy00ODM0LVxuLS1cbm1tL3NsdWIuYz01NzEyPXN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNTcyMi1cbm1tL3NsdWIuYzo1NzIzOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTU3MjQtXHRcdGZyZWVfdG9fcGFydGlhbF9saXN0KHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNudCwgYWRkcik7XG4tLVxubW0vc2x1Yi5jPTYxMDM9Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbi0tXG5tbS9zbHViLmMtNjEwOC1cbm1tL3NsdWIuYzo2MTA5Olx0Vk1fV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBhbGxvd19zcGluKTtcbm1tL3NsdWIuYy02MTEwLVxubW0vc2x1Yi5jOjYxMTE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jLTYxMTItXHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuLS1cbm1tL3NsdWIuYy02MjEwLVx0c3RhdChzLCBGUkVFX1JDVV9TSEVBRik7XG5tbS9zbHViLmM6NjIxMTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5tbS9zbHViLmMtNjIxMi1cdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbi0tXG5tbS9zbHViLmMtNjIxNi1cdHN0YXQocywgRlJFRV9SQ1VfU0hFQUZfRkFJTCk7XG5tbS9zbHViLmM6NjIxNzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5tbS9zbHViLmMtNjIxOC1cdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbi0tXG5tbS9zbHViLmM9NjIyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy02MjI2LVxubW0vc2x1Yi5jOjYyMjc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxubW0vc2x1Yi5jLTYyMjgtXHRcdGdvdG8gY2hlY2tfcGZtZW1hbGxvYztcbi0tXG5tbS9zbHViLmMtNjIzMS1cbm1tL3NsdWIuYzo2MjMyOiNpZmRlZiBDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTXG5tbS9zbHViLmMtNjIzMy1cdC8qXG4tLVxubW0vc2x1Yi5jPTY0OTQ9dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTY1MDktXG5tbS9zbHViLmM6NjUxMDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtNjUxMS0vKiBEbyBub3QgaW5saW5lIHRoZSByYXJlIG1lbWNnIGNoYXJnaW5nIGZhaWxlZCBwYXRoIGludG8gdGhlIGFsbG9jYXRpb24gcGF0aCAqL1xuLS1cbm1tL3NsdWIuYz02NTI1PXZvaWQgc2xhYl9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpoZWFkLFxuLS1cbm1tL3NsdWIuYy02NTM5LVxubW0vc2x1Yi5jOjY1NDA6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTY1NDEtc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuLS1cbm1tL3NsdWIuYy02NTY2LX1cbm1tL3NsdWIuYzo2NTY3OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9SQ1VfREVCVUcgKi9cbm1tL3NsdWIuYy02NTY4LVxubW0vc2x1Yi5jOjY1Njk6I2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmMtNjU3MC12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vc2x1Yi5jPTY2MDc9dm9pZCBrbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpXG4tLVxubW0vc2x1Yi5jLTY2MTItXG5tbS9zbHViLmM6NjYxMzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEKSB8fFxubW0vc2x1Yi5jLTY2MTQtXHQgICAga21lbV9jYWNoZV9kZWJ1Z19mbGFncyhzLCBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykpIHtcbi0tXG5tbS9zbHViLmM9NjYzMT1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy02NjM0LVxubW0vc2x1Yi5jOjY2MzU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNjYzNi1cdC8qXG4tLVxubW0vc2x1Yi5jPTY2NjA9c3RhdGljIHNpemVfdCBfX2tzaXplKGNvbnN0IHZvaWQgKm9iamVjdClcbi0tXG5tbS9zbHViLmMtNjY3Ny1cbm1tL3NsdWIuYzo2Njc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTY2NzktXHRza2lwX29yaWdfc2l6ZV9jaGVjayhzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9iamVjdCk7XG4tLVxubW0vc2x1Yi5jPTcyNTY9X19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy03MzI5LVxubW0vc2x1Yi5jOjczMzA6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmMtNzMzMS1zdGF0aWMgdW5zaWduZWQgaW50XG4tLVxubW0vc2x1Yi5jPTc0Mjc9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDMxLVxubW0vc2x1Yi5jOjc0MzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XG5tbS9zbHViLmMtNzQzMy1cdFx0Y29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCBhYyA9IHtcbi0tXG5tbS9zbHViLmM9NzU2MD1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWF4X29yZGVyID1cbm1tL3NsdWIuYzo3NTYxOlx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcbm1tL3NsdWIuYy03NTYyLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2x1Yl9taW5fb2JqZWN0cztcbi0tXG5tbS9zbHViLmM9NzY3Mz1pbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuLS1cbm1tL3NsdWIuYy03Njc3LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bi1cdTAwM2VwYXJ0aWFsKTtcbm1tL3NsdWIuYzo3Njc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc2NzktXHRhdG9taWNfbG9uZ19zZXQoXHUwMDI2bi1cdTAwM2Vucl9zbGFicywgMCk7XG4tLVxubW0vc2x1Yi5jLTc2ODQtXG5tbS9zbHViLmM6NzY4NTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy03Njg2LXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2ttZW1fY2FjaGVfc3RhdHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jPTc3NTQ9c3RhdGljIHZvaWQgZWFybHlfa21lbV9jYWNoZV9ub2RlX2FsbG9jKGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy03Nzc3LVxubW0vc2x1Yi5jOjc3Nzg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzc3OS1cdGluaXRfb2JqZWN0KGttZW1fY2FjaGVfbm9kZSwgbiwgU0xVQl9SRURfQUNUSVZFKTtcbi0tXG5tbS9zbHViLmM9NzgxNj12b2lkIF9fa21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03ODE5LVx0cGNzX2Rlc3Ryb3kocyk7XG5tbS9zbHViLmM6NzgyMDojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy03ODIxLVx0ZnJlZV9wZXJjcHUocy1cdTAwM2VjcHVfc3RhdHMpO1xuLS1cbm1tL3NsdWIuYz03ODY1PXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy03ODcyLVxubW0vc2x1Yi5jOjc4NzM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0RFQlVHX0ZMQUdTKVxubW0vc2x1Yi5jLTc4NzQtXHRcdHJldHVybiAwO1xuLS1cbm1tL3NsdWIuYz03OTE2PXN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03OTI5LVxubW0vc2x1Yi5jOjc5MzA6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzkzMS1cdC8qXG4tLVxubW0vc2x1Yi5jLTc5OTItXG5tbS9zbHViLmM6Nzk5MzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03OTk0LVx0aWYgKGZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpIHtcbi0tXG5tbS9zbHViLmMtODAwNy1cdGthc2FuX2NhY2hlX2NyZWF0ZShzLCBcdTAwMjZzaXplLCBcdTAwMjZzLVx1MDAzZWZsYWdzKTtcbm1tL3NsdWIuYzo4MDA4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTgwMDktXHRpZiAoZmxhZ3MgXHUwMDI2IFNMQUJfUkVEX1pPTkUpIHtcbi0tXG5tbS9zbHViLmMtODAzMC1cdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xubW0vc2x1Yi5jOjgwMzE6I2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxubW0vc2x1Yi5jLTgwMzItXHRpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3NsdWIuYz04MDcyPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy04MDczLXtcbm1tL3NsdWIuYzo4MDc0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTgwNzUtXHR2b2lkICphZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLS1cbm1tL3NsdWIuYz04MTM5PWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODg1CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2hlYWYgQ2FwYWNpdHkgYW5kIFJDVSBGcmVlaW5nIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgYGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eWAsIGl0IHNlZW1zIHNoZWF2ZXMgYXJlIGFjdGl2ZSB1bmRlciBub3JtYWwgYENPTkZJR19TTFVCYCBjb25kaXRpb25zLCBwcm92aWRlZCB3ZSBhcmVuJiMzOTt0IHVzaW5nIGBDT05GSUdfU0xVQl9USU5ZYCBvciBzb21lIGRlYnVnIGZsYWdzLiBHb29kLCB0aGF0IHNldHMgdGhlIHN0YWdlLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVxdWlyZW1lbnRzIGZvciBmdXp6aW5nOiBgV29ydGhGdXp6aW5nYCBpcyB0cnVlLCBncmVhdC4gRm9yIGBGb2N1c1N5bWJvbHNgLCB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcmVsYXRlZCB0byBSQ1Ugc2hlYWYgZnJlZWluZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgYF9fa2ZyZWVfcmN1X3NoZWFmYCwgYW5kIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIChvciBldmVuIGBrdmZyZWVfY2FsbF9yY3VgKS4gQnV0IHdhaXQsIGBrdmZyZWVfY2FsbF9yY3VgIGlzIGEgbW9yZSBjb3JlIEFQSSBlbnRyeSBwb2ludC4gU28sIHRoZSBxdWVzdGlvbiBpcywgd2hpY2ggYXJlIGJlc3QgdG8gZm9jdXMgb24/IFRoZSBpbnN0cnVjdGlvbnMgdGVsbCB1cyB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgZmF2b3Jpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFdlbGwsIGBfX2tmcmVlX3JjdV9zaGVhZmAgKmlzKiBub24tc3RhdGljIGFuZCBzcGVjaWZpY2FsbHkgZm9yIFJDVSBzaGVhZiBmcmVlaW5nLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBjaG9pY2UuIEFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZm9yIGxvY2tsZXNzIGtmcmVlIFJDVSB3aGljaCBzZWVtcyBiZXR0ZXIuIE9yLCB3ZSBjb3VsZCBpbmNsdWRlIHRoZSBnZW5lcmljIGBrdmZyZWVfY2FsbF9yY3VgIGVudHJ5cG9pbnQgYXMgd2VsbCwgdG8gYnJvYWRlbiBjb3ZlcmFnZS4gU28sIEkgdGhpbmsgd2UgY2FuIGNvbmZpZGVudGx5IGxpc3QgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgKG9yIGBrdmZyZWVfY2FsbF9yY3VgKS4KCkZpbmFsbHksIGZvciBgRW5hYmxlQ29uZmlnc2AsIHdlIG5lZWQgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgYW5kIGBQUkVFTVBUX1JUYCAoYW5kIGl0cyBgRVhQRVJUYCBkZXBlbmRlbmN5KS4gR290IGl0LgoKT2theSwgdGhhdCBzZWVtcyBsaWtlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFyYW1ldGVycy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7LAogICAgJiMzNDtFWFBFUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7LAogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yJiMzOTtzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZGUkVFX1JDVV9CQVRDSEVEJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OywKICAgICYjMzQ7RVhQRVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAgICYjMzQ7a2ZyZWVfY2FsbF9yY3Vfbm9sb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBSQ1Ugc2hlYWYgZnJlZWluZyBsb2dpYyBpbiBtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMuIEl0IGFkanVzdHMga2ZyZWVfcmN1X3NoZWFmKCkgdG8gYWx3YXlzIHVzZSBTTEFCX0ZSRUVfREVGQVVMVCBhbmQgdXBkYXRlcyBrdmZyZWVfY2FsbF9yY3UoKSB0byBjb21wbGV0ZWx5IGJ5cGFzcyB0aGUgc2hlYWYgbGF5ZXIgdW5kZXIgQ09ORklHX1BSRUVNUFRfUlQgdG8gYXZvaWQgYWNxdWlyaW5nIHNsZWVwaW5nIHdhaXRsb2NrcyB3aGlsZSBob2xkaW5nIHJhdyBzcGlubG9ja3MgKHN1Y2ggYXMgdGFza19zdHJ1Y3Q6OnBpX2xvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIHJlY2xhaW1pbmcgcGF0aHMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIGxvZ2ljIGluIHNsYWIvc2x1YiAobW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jKSB0byBieXBhc3MgdGhlIHNoZWF2ZXMgbGF5ZXIgaW4ga3ZmcmVlX2NhbGxfcmN1KCkgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBhdm9pZGluZyBsb2NrIG5lc3RpbmcgaXNzdWVzIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgcmF3IHNwaW5sb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDA6MTU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCBiMTliYTFiMzE0ODRjLi43MjIzYTc1OTZkYWJiIDEwMDY0NAotLS0gYS9tbS9zbGFiX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWJfY29tbW9uLmMKQEAgLTE2NjcsMTQgJiM0MzsxNjY3LDYgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYjsKLQl1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUOwotCi0JLyoKLQkgKiBJdCBpcyBub3Qgc2FmZSB0byBzcGluIG9uIFBSRUVNUFRfUlQgYmVjYXVzZSB0aGUga2VybmVsIG1pZ2h0IGJlCi0JICogaG9sZGluZyBhIHJhdyBzcGlubG9jayBhbmQgc2xhYiBhY3F1aXJlcyBzbGVlcGluZyBsb2Nrcy4KLQkgKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpCi0JCWZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLOwogCiAJaWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xNjg1LDcgJiM0MzsxNjc3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iaikKIAogCXMgPSBzbGFiLSZndDtzbGFiX2NhY2hlOwogCWlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKQotCQlyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBmcmVlX2ZsYWdzKTsKJiM0MzsJCXJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTIwMzQsNyAmIzQzOzIwMjYsMTMgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKQogCWlmICghaGVhZCkKIAkJbWlnaHRfc2xlZXAoKTsKIAotCWlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSkKJiM0MzsJLyoKJiM0MzsJICoga3ZmcmVlX3JjdSgpIGlzIGNhbGxlZCBieSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgd2l0aAomIzQzOwkgKiB0YXNrX3N0cnVjdDo6cGlfbG9jayBhY3F1aXJlZC4gT24gUFJFRU1QVF9SVCB0aGUgbG9jYWxfdHJ5bG9jaygpCiYjNDM7CSAqIHVzYWdlIGJlbG93IHdpbGwgYWNxdWlyZSB0aGUgd2FpdGxvY2sgd2hpY2ggbXVzdCBiZSBhdm9pZGVkLgomIzQzOwkgKiBUaGVyZWZvcmUgYXZvaWQgaXQgb24gUFJFRU1QVF9SVC4KJiM0MzsJICovCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgJmFtcDsmYW1wOyBrZnJlZV9yY3Vfc2hlYWYocHRyKSkKIAkJcmV0dXJuOwogCiAJLy8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJiMzOTt0IHlldCBzY2hlZHVsZSB0aGUgYmF0Y2guCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjliNTZjYjQzOWU3MC4uN2E3ZTkwNmEwZTQ0ZCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNjA4OCw4ICYjNDM7NjA4OCw5IEBAIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIC8qCiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2UKICAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLAotICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHMKLSAqIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0sgb24gUFJFRU1QVF9SVC4KJiM0MzsgKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpCiYjNDM7ICogYXZvaWRzIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0suIGt2ZnJlZV9jYWxsX3JjdSgpIGlzCiYjNDM7ICogYnlwYXNzaW5nIHRoZSBzaGVhdmVzIGxheWVyIGNvbXBsZXRlbHkgb24gUFJFRU1QVF9SVC4KICAqCiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190CiAgKiB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190LCBldmVuIG9uICFQUkVFTVBUX1JUIHdoZXJlIHNwaW5sb2NrX3QgaXMgYQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTbGFiL1NsdWIgUkNVIEZyZWVpbmcgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBoZXJlLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIGhvdyBga2ZyZWVfcmN1X3NoZWFmKClgIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBsb2NraW5nIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBpbiBhIFBSRUVNUFRfUlQgZW52aXJvbm1lbnQuICBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayB0byBzZXQgYGZyZWVfZmxhZ3NgIHRvIGBTTEFCX0ZSRUVfTk9MT0NLYCBpZiBgQ09ORklHX1BSRUVNUFRfUlRgIHdhcyBlbmFibGVkLiBUaGlzIHdhcyB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBuZXN0aW5nIGlzc3VlcyBiZWNhdXNlIGBfX2tmcmVlX3JjdV9zaGVhZigpYCBtaWdodCBhY3F1aXJlIHNsZWVwaW5nIGxvY2tzIHdoaWxlIHJhdyBzcGlubG9ja3MgYXJlIGhlbGQuCgpOb3csIGl0IGxvb2tzIGxpa2UgdGhhdCBjb25kaXRpb25hbCBmbGFnIHNldHRpbmcgaGFzIGJlZW4gcmVtb3ZlZCB3aXRoaW4gdGhlIGBrZnJlZV9yY3Vfc2hlYWZgIGZ1bmN0aW9uIGl0c2VsZi4gSW5zdGVhZCwgaXQmIzM5O3MgYnlwYXNzZWQgaW4gYGt2ZnJlZV9jYWxsX3JjdSgpYC4gVGhlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjYWxsIGBrZnJlZV9yY3Vfc2hlYWYoKWAgYXQgYWxsLiAgRXNzZW50aWFsbHksIG9uIFBSRUVNUFRfUlQsIHdlJiMzOTtyZSBza2lwcGluZyB0aGUgc2hlYWYgY2FjaGluZyBsYXllciBlbnRpcmVseS4gVGhpcyBpcyBsaWtlbHkgdGhlIHByZWZlcnJlZCBzb2x1dGlvbiwgYXMgaXQgZW5zdXJlcyB3ZSBhdm9pZCB0aGUgcmF3IHNwaW5sb2NrIGlzc3VlIHdoZXJlIGEgcHJlZW1wdGlibGUgc3BpbmxvY2sgbWlnaHQgYmUgYWNxdWlyZWQsIGFzIGRlc2NyaWJlZCBieSB0aGUgY29tbWVudCBpbiBgc2x1Yi5jYC4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBhIG5lY2Vzc2FyeSBtZWFzdXJlIGZvciBsb2NrIG5lc3Rpbmcgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBlc3BlY2lhbGx5IHdpdGggdGhlIGBwaV9sb2NrYCBpbiBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYC4KCkkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25jZXJucy4gIE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdW5pbml0aWFsaXplZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBoYW5kbGluZyBvciBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIG5vIG9idmlvdXMgbmV3IHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBwb2ludGVyIHJlYWRzL3dyaXRlcy4gVGhpcyBpcyBwdXJlbHkgYSByZS1hcnJhbmdlbWVudCBvZiBsb2NraW5nIGxvZ2ljIGZvciBSQ1UgZnJlZWluZyBhbmQgdGhlIHNsYWIvc2x1YiBsYXllci4KCkkgd2lsbCBzdGlsbCB3YW50IHRvIHBlcmZvcm0gYSBkZWVwZXIgYW5hbHlzaXMgd2l0aCB0b29scyBsaWtlIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgdG8gYmUgY2VydGFpbiBJIGhhdmUgY292ZXJlZCBhbGwgdGhlIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgYXQgZmlyc3QgZ2xhbmNlLCBJIHdvdWxkIGNvbnNpZGVyIHRoaXMgYSBzYWZlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYi5oLTQ4MC1cbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XG5tbS9zbGFiLmgtNDgyLXZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzE1LVxubW0vc2xhYl9jb21tb24uYzoxMzE2Olx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxubW0vc2xhYl9jb21tb24uYy0xMzE3LVx0XHRnb3RvIGZhbGxiYWNrO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTYyMj1zdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxubW0vc2xhYl9jb21tb24uYzoxNjY2OnN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG5tbS9zbGFiX2NvbW1vbi5jLTE2Njcte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxubW0vc2xhYl9jb21tb24uYzoxNjgwOlx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXG4tLVxubW0vc2xhYl9jb21tb24uYz0yMDEzPXZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzQtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxubW0vc2xhYl9jb21tb24uYy0yMDM2LVx0XHRyZXR1cm47XG4tLVxubW0vc2x1Yi5jPTQxNDg9dm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNDE2MC1cdFx0ICogd2UgZG9uJiMzOTt0IGNoZWNrIGlmIHJjdV9mcmVlIHNoZWFmIGV4aXN0cyAtIHJhY2luZ1xubW0vc2x1Yi5jOjQxNjE6XHRcdCAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWlnaHQgaGF2ZSBqdXN0IHJlbW92ZWQgaXQuXG5tbS9zbHViLmMtNDE2Mi1cdFx0ICogYnkgZXhlY3V0aW5nIGZsdXNoX3JjdV9zaGVhZigpIG9uIHRoZSBjcHUgd2UgbWFrZVxubW0vc2x1Yi5jOjQxNjM6XHRcdCAqIHN1cmUgdGhlIF9fa2ZyZWVfcmN1X3NoZWFmKCkgZmluaXNoZWQgaXRzIGNhbGxfcmN1KClcbm1tL3NsdWIuYy00MTY0LVx0XHQgKi9cbi0tXG5tbS9zbHViLmM9NjAzMT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubW0vc2x1Yi5jLTYwODktICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG5tbS9zbHViLmM6NjA5MDogKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcbm1tL3NsdWIuYy02MDkxLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbi0tXG5tbS9zbHViLmMtNjEwMC0gKi9cbm1tL3NsdWIuYzo2MTAxOnN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYxMDItXG5tbS9zbHViLmM6NjEwMzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2x1Yi5jLTYxMDQte1xuLS1cbm1tL3NsdWIuYy02MTExLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbm1tL3NsdWIuYzo2MTEyOlx0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbm1tL3NsdWIuYy02MTEzLVxuLS1cbm1tL3NsdWIuYy02MjExLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbm1tL3NsdWIuYzo2MjEyOlx0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xubW0vc2x1Yi5jLTYyMTMtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9zbHViLmMtNjIxNy1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5tbS9zbHViLmM6NjIxODpcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbm1tL3NsdWIuYy02MjE5LVx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ2CgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqUkNVIERlYWxsb2NhdGlvbiBDaGFuZ2VzIC0gQXNzZXNzaW5nIHRoZSBSaXNrKioKCkFscmlnaHQsIHNvIHRoZSBtb2RpZmljYXRpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0IGFyZSAqc3BlY2lmaWNhbGx5KiBjZW50ZXJlZCBvbiBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc2xhYiBhbmQgc2x1YiBhbGxvY2F0b3JzLCBhbmQgdGhleSYjMzk7cmUgdGllZCB0byB0aGUgbG9ja2luZyBjb25zdHJhaW50cyB0aGF0IFBSRUVNUFRfUlQga2VybmVscyBpbXBvc2UuIEdvb2QuIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4KClRoZSBpbW1lZGlhdGUgcmVsaWVmIGlzIHRoYXQgdGhlcmUmIzM5O3MgKnplcm8qIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoYXQmIzM5O3MgYSBodWdlIHdpbiDigJMgaXQgcmVtb3ZlcyBhIGNsYXNzIG9mIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCYjMzk7cyBnb2luZyB0byBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCBhbnkgdXNlci1zcGFjZSBleHBvc3VyZSBvZiBrZXJuZWwgaW50ZXJuYWxzLCB3aGljaCBrZWVwcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBteSByZWFsIGZvY3VzIHNoaWZ0cyB0byBtZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucy4gVGhhbmtmdWxseSwgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGxvY2tpbmcgZXJyb3JzIHRoYXQgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHdpdGhpbiBzbGFiL3NsdWIuIFRoYXQmIzM5O3MgZmFudGFzdGljLiBUaGF0IGtpbmQgb2YgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGNvdmVyYWdlIHJlYWxseSBidWlsZHMgbXkgY29uZmlkZW5jZS4gSSB0aGluayB3ZeKAmXJlIHdlbGwgcG9zaXRpb25lZCB0byBjYXRjaCBhbnkgZXJyb3JzIGhlcmUuCgpHaXZlbiB0aGUgZXhpc3RpbmcgdGVzdCBpbmZyYXN0cnVjdHVyZSwgaXQgbWVhbnMgdGhhdCBLTVNBTiwgd2hpbGUgdXNlZnVsIGluIHNvbWUgb3RoZXIgYXJlYXMsIGlzIG5vdCByZWFsbHkgbmVlZGVkIGhlcmUuIEtBU0FOIGlzIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIG9uIHRoZSBtZW1vcnkgZnJvbnQsIGFuZCBMT0NLREVQIGVuc3VyZXMgdGhlIGxvY2tpbmcgc2VtYW50aWNzIGFyZSBzb3VuZC4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgYW5kIHByb2NlZWQgd2l0aCBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIGxvZ2ljIGluIHNsYWIvc2x1YiAobW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jKSB0byBieXBhc3MgdGhlIHNoZWF2ZXMgbGF5ZXIgaW4ga3ZmcmVlX2NhbGxfcmN1KCkgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBhdm9pZGluZyBsb2NrIG5lc3RpbmcgaXNzdWVzIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgcmF3IHNwaW5sb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJDVSBzaGVhZiBkZWFsbG9jYXRpb24gbG9naWMgaW4gc2xhYi9zbHViIChtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMpIHRvIGJ5cGFzcyB0aGUgc2hlYXZlcyBsYXllciBpbiBrdmZyZWVfY2FsbF9yY3UoKSBvbiBQUkVFTVBUX1JUIGtlcm5lbHMsIGF2b2lkaW5nIGxvY2sgbmVzdGluZyBpc3N1ZXMgd2l0aCBzbGVlcGluZyBsb2NrcyB1bmRlciByYXcgc3BpbmxvY2tzLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzbGFiIG1lbW9yeSBmcmVlaW5nIHBhdGhzIGFuZCBQUkVFTVBUX1JUIGxvY2sgY29uc3RyYWludHMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBkZWFkbG9jayBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozMy4yMDczNTI5NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MjA4NTA2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZGUkVFX1JDVV9CQVRDSEVEXCIsXG4gICAgXCJQUkVFTVBUX1JUXCIsXG4gICAgXCJFWFBFUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2tmcmVlX3JjdV9zaGVhZlwiLFxuICAgIFwia2ZyZWVfY2FsbF9yY3Vfbm9sb2NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIGxvZ2ljIGluIHNsYWIvc2x1YiAobW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jKSB0byBieXBhc3MgdGhlIHNoZWF2ZXMgbGF5ZXIgaW4ga3ZmcmVlX2NhbGxfcmN1KCkgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBhdm9pZGluZyBsb2NrIG5lc3RpbmcgaXNzdWVzIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgcmF3IHNwaW5sb2Nrcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzbGFiIG1lbW9yeSBmcmVlaW5nIHBhdGhzIGFuZCBQUkVFTVBUX1JUIGxvY2sgY29uc3RyYWludHMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBkZWFkbG9jayBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvcidzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6MzMuMjA3MzU3NzExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1ODQzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAwOjE1OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXFxuaW5kZXggYjE5YmExYjMxNDg0Yy4uNzIyM2E3NTk2ZGFiYiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXFxuKysrIGIvbW0vc2xhYl9jb21tb24uY1xcbkBAIC0xNjY3LDE0ICsxNjY3LDYgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4gXFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuLVxcdHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzID0gU0xBQl9GUkVFX0RFRkFVTFQ7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJdCBpcyBub3Qgc2FmZSB0byBzcGluIG9uIFBSRUVNUFRfUlQgYmVjYXVzZSB0aGUga2VybmVsIG1pZ2h0IGJlXFxuLVxcdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXFxuLVxcdCAqL1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuLVxcdFxcdGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLO1xcbiBcXG4gXFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTE2ODUsNyArMTY3Nyw3IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxuIFxcbiBcXHRzID0gc2xhYi1cXHUwMDNlc2xhYl9jYWNoZTtcXG4gXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxuLVxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMjAzNCw3ICsyMDI2LDEzIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4gXFx0aWYgKCFoZWFkKVxcbiBcXHRcXHRtaWdodF9zbGVlcCgpO1xcbiBcXG4tXFx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbitcXHQvKlxcbitcXHQgKiBrdmZyZWVfcmN1KCkgaXMgY2FsbGVkIGJ5IHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSB3aXRoXFxuK1xcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcXG4rXFx0ICogdXNhZ2UgYmVsb3cgd2lsbCBhY3F1aXJlIHRoZSB3YWl0bG9jayB3aGljaCBtdXN0IGJlIGF2b2lkZWQuXFxuK1xcdCAqIFRoZXJlZm9yZSBhdm9pZCBpdCBvbiBQUkVFTVBUX1JULlxcbitcXHQgKi9cXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJ3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggZjliNTZjYjQzOWU3MC4uN2E3ZTkwNmEwZTQ0ZCAxMDA2NDRcXG4tLS0gYS9tbS9zbHViLmNcXG4rKysgYi9tbS9zbHViLmNcXG5AQCAtNjA4OCw4ICs2MDg4LDkgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiAvKlxcbiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxuLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzXFxuLSAqIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0sgb24gUFJFRU1QVF9SVC5cXG4rICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbisgKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcXG4rICogYnlwYXNzaW5nIHRoZSBzaGVhdmVzIGxheWVyIGNvbXBsZXRlbHkgb24gUFJFRU1QVF9SVC5cXG4gICpcXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxcbiAgKiB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190LCBldmVuIG9uICFQUkVFTVBUX1JUIHdoZXJlIHNwaW5sb2NrX3QgaXMgYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozNC43MTM4MjQyNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkxODAwOTI0ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiLFxuICAgIFwiUFJFRU1QVF9SVFwiLFxuICAgIFwiRVhQRVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rZnJlZV9yY3Vfc2hlYWZcIixcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvcidzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDA6MTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xuaW5kZXggYjE5YmExYjMxNDg0Yy4uNzIyM2E3NTk2ZGFiYiAxMDA2NDRcbi0tLSBhL21tL3NsYWJfY29tbW9uLmNcbisrKyBiL21tL3NsYWJfY29tbW9uLmNcbkBAIC0xNjY3LDE0ICsxNjY3LDYgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuLVx0dW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBub3Qgc2FmZSB0byBzcGluIG9uIFBSRUVNUFRfUlQgYmVjYXVzZSB0aGUga2VybmVsIG1pZ2h0IGJlXG4tXHQgKiBob2xkaW5nIGEgcmF3IHNwaW5sb2NrIGFuZCBzbGFiIGFjcXVpcmVzIHNsZWVwaW5nIGxvY2tzLlxuLVx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4tXHRcdGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTY4NSw3ICsxNjc3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbiBcbiBcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4gXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbi1cdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4rXHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMjAzNCw3ICsyMDI2LDEzIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiBcdGlmICghaGVhZClcbiBcdFx0bWlnaHRfc2xlZXAoKTtcbiBcbi1cdGlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbitcdC8qXG4rXHQgKiBrdmZyZWVfcmN1KCkgaXMgY2FsbGVkIGJ5IHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSB3aXRoXG4rXHQgKiB0YXNrX3N0cnVjdDo6cGlfbG9jayBhY3F1aXJlZC4gT24gUFJFRU1QVF9SVCB0aGUgbG9jYWxfdHJ5bG9jaygpXG4rXHQgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC5cbitcdCAqIFRoZXJlZm9yZSBhdm9pZCBpdCBvbiBQUkVFTVBUX1JULlxuK1x0ICovXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJ3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGY5YjU2Y2I0MzllNzAuLjdhN2U5MDZhMGU0NGQgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTYwODgsOCArNjA4OCw5IEBAIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAvKlxuICAqIGt2ZnJlZV9jYWxsX3JjdSgpIGNhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHJhd19zcGlubG9ja190LiBTaW5jZVxuICAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxuLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzXG4tICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxuKyAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbisgKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcbisgKiBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgY29tcGxldGVseSBvbiBQUkVFTVBUX1JULlxuICAqXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozNC43MTM4MjU2MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDc4NDkzNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGtmcmVlX3JjdSBhbmQgUFJFRU1QVF9SVCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgZGlmZiBoaXRzIGBtbS9zbGFiX2NvbW1vbi5jYCBhbmQgYG1tL3NsdWIuY2AsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIHNsYWIgYWxsb2NhdG9yLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBtb2RpZmllcyBga2ZyZWVfcmN1X3NoZWFmKClgIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4gSSBzZWUgdGhleSd2ZSByZW1vdmVkIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGBmcmVlX2ZsYWdzYCBiYXNlZCBvbiBgQ09ORklHX1BSRUVNUFRfUlRgLiBQcmV2aW91c2x5LCBpZiBQUkVFTVBUX1JUIHdhcyBlbmFibGVkLCBpdCB3b3VsZCBzZXQgYGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLYC4gTm93LCBpdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBgU0xBQl9GUkVFX0RFRkFVTFRgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSBhcmUgZWxpbWluYXRpbmcgdGhhdCBjb25kaXRpb25hbCBsb2dpYy4gSSBhc3N1bWUgdGhpcyBjaGFuZ2UgaXMgYmVpbmcgbWFkZSB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBvciBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuXG5UaGUgb3RoZXIgY2hhbmdlIGluIGBtbS9zbGFiX2NvbW1vbi5jYCBpcyBpbiBga3ZmcmVlX2NhbGxfcmN1KClgLiBUaGVyZSdzIGEgY2hlY2sgdGhhdCB1c2VzIGBrZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGlmIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgbm90IGVuYWJsZWQsIHRoZW4gaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSByY3UgbWVjaGFuaXNtLiBQcmV2aW91c2x5LCBga3ZmcmVlX2NhbGxfcmN1KClgIHdhcyB1c2luZyB0aGUgYGxvY2FsX3RyeWxvY2soKWAgY2FsbCBpbiBjb25qdW5jdGlvbiB3aXRoIGB0YXNrX3N0cnVjdDo6cGlfbG9ja2AgYW5kIHRoZSBuZXcgY29kZSBzZWVtcyB0byBhdm9pZCB0aGUgbG9jYWxfdHJ5bG9jayBjYWxsLiBJJ20gZ3Vlc3NpbmcgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGhhZCBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyBvciBjb250ZW50aW9uIGlzc3VlIG9uIFBSRUVNUFRfUlQgc3lzdGVtcyB3aGVuIGB0YXNrX3N0cnVjdDo6cGlfbG9ja2Agd2FzIGhlbGQsIGJlY2F1c2Ugb2YgdGhlIGB3YWl0bG9ja2AgbG9jayB0aGF0J3MgdXNlZCBieSB0aGUgYGxvY2FsX3RyeWxvY2soKWAgY2FsbCBpbiBga2ZyZWVfcmN1X3NoZWFmKClgLiBUaGUgY29tbWVudHMgc3VwcG9ydCB0aGlzLlxuXG5JbiBgbW0vc2x1Yi5jYCwgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gY29tbWVudHMsIHByb2JhYmx5IHRvIHByb3ZpZGUgY29udGV4dCBhcm91bmQgdGhlIGNoYW5nZXMgaW4gYG1tL3NsYWJfY29tbW9uLmNgLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSByZWFzb25zIGJlaGluZCB0aGlzIHBhdGNoLCBidXQgaXQgc2VlbXMgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbG9ja2luZyBwcm9ibGVtIG9uIFBSRUVNUFRfUlQgc3lzdGVtcyB3aGVuIGZyZWVpbmcgc2xhYiBvYmplY3RzIHZpYSBSQ1UuIEknbGwgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGJ5IGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGluY2x1ZGluZyB0aGUgcG9zc2libGUgbG9jayBkZXBlbmRlbmN5IGdyYXBocyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzAsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozOS43OTIzMjU1NzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2xhYl9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjYwOlxcdFxcdCAqIFRoaXMgbGlzdCBpcyBuYW1lZCBcXFwiQ2hhbm5lbCAzXFxcIi5cXG4xNjYxOlxcdFxcdCAqL1xcbjE2NjI6XFx0XFx0aWYgKGhlYWQgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT05fT05DRSghcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3VfZnVsbChcXHUwMDI2aGVhZF9ncF9zbmFwKSkpXFxuMTY2MzpcXHRcXHRcXHRrdmZyZWVfcmN1X2xpc3QoaGVhZCk7XFxuMTY2NDpcXHR9XFxuMTY2NTpcXHRcXG4xNjY2OlxcdHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxuMTY2NzpcXHR7XFxuMTY2ODpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4xNjY5OlxcdFxcdHN0cnVjdCBzbGFiICpzbGFiO1xcbjE2NzA6XFx0XFxuMTY3MTpcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXFxuMTY3MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTY3MzpcXHRcXG4xNjc0OlxcdFxcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcXG4xNjc1OlxcdFxcdGlmICh1bmxpa2VseSghc2xhYikpXFxuMTY3NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdHMgPSBzbGFiLVxcdTAwM2VzbGFiX2NhY2hlO1xcbjE2Nzk6XFx0XFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxuMTY4MDpcXHRcXHRcXHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuMTY4MTpcXHRcXG4xNjgyOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xNjgzOlxcdH1cXG4xNjg0OlxcdFxcbjE2ODU6XFx0c3RhdGljIGJvb2xcXG4xNjg2OlxcdG5lZWRfb2ZmbG9hZF9rcmMoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXFxuMTY4NzpcXHR7XFxuMTY4ODpcXHRcXHRpbnQgaTtcXG4xNjg5OlxcdFxcbjE2OTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZSRUVfTl9DSEFOTkVMUzsgaSsrKVxcbjE2OTE6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZrcmNwLVxcdTAwM2VidWxrX2hlYWRbaV0pKVxcbjE2OTI6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTY5MzpcXHRcXG4xNjk0OlxcdFxcdHJldHVybiAhIVJFQURfT05DRShrcmNwLVxcdTAwM2VoZWFkKTtcXG4xNjk1OlxcdH1cXG4xNjk2OlxcdFxcbjE2OTc6XFx0c3RhdGljIGJvb2xcXG4xNjk4OlxcdG5lZWRfd2FpdF9mb3Jfa3J3cF93b3JrKHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsgKmtyd3ApXFxuMTY5OTpcXHR7XFxuMTcwMDpcXHRcXHRpbnQgaTtcXG4xNzAxOlxcdFxcbjE3MDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZSRUVfTl9DSEFOTkVMUzsgaSsrKVxcbjE3MDM6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZrcndwLVxcdTAwM2VidWxrX2hlYWRfZnJlZVtpXSkpXFxuMTcwNDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNzA1OlxcdFxcbjE3MDY6XFx0XFx0cmV0dXJuICEha3J3cC1cXHUwMDNlaGVhZF9mcmVlO1xcbjE3MDc6XFx0fVxcbjE3MDg6XFx0XFxuMTcwOTpcXHRzdGF0aWMgaW50IGtyY19jb3VudChzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6MzkuNzkyNTA2NTE3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHQgKiBQbGVhc2Ugbm90ZSB0aGVyZSBpcyBhIGxpbWl0YXRpb24gZm9yIHRoZSBoZWFkLWxlc3NcXG4yMDIxOlxcdFxcdCAqIHZhcmlhbnQsIHRoYXQgaXMgd2h5IHRoZXJlIGlzIGEgY2xlYXIgcnVsZSBmb3Igc3VjaFxcbjIwMjI6XFx0XFx0ICogb2JqZWN0czogaXQgY2FuIGJlIHVzZWQgZnJvbSBtaWdodF9zbGVlcCgpIGNvbnRleHRcXG4yMDIzOlxcdFxcdCAqIG9ubHkuIEZvciBvdGhlciBwbGFjZXMgcGxlYXNlIGVtYmVkIGFuIHJjdV9oZWFkIHRvXFxuMjAyNDpcXHRcXHQgKiB5b3VyIGRhdGEuXFxuMjAyNTpcXHRcXHQgKi9cXG4yMDI2OlxcdFxcdGlmICghaGVhZClcXG4yMDI3OlxcdFxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMjAyODpcXHRcXG4yMDI5OlxcdFxcdC8qXFxuMjAzMDpcXHRcXHQgKiBrdmZyZWVfcmN1KCkgaXMgY2FsbGVkIGJ5IHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSB3aXRoXFxuMjAzMTpcXHRcXHQgKiB0YXNrX3N0cnVjdDo6cGlfbG9jayBhY3F1aXJlZC4gT24gUFJFRU1QVF9SVCB0aGUgbG9jYWxfdHJ5bG9jaygpXFxuMjAzMjpcXHRcXHQgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC5cXG4yMDMzOlxcdFxcdCAqIFRoZXJlZm9yZSBhdm9pZCBpdCBvbiBQUkVFTVBUX1JULlxcbjIwMzQ6XFx0XFx0ICovXFxuMjAzNTpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbjIwMzY6XFx0XFx0XFx0cmV0dXJuO1xcbjIwMzc6XFx0XFxuMjAzODpcXHRcXHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24ndCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxcbjIwMzk6XFx0XFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHB0cikpIHtcXG4yMDQwOlxcdFxcdFxcdC8vIFByb2JhYmxlIGRvdWJsZSBrZnJlZV9yY3UoKSwganVzdCBsZWFrLlxcbjIwNDE6XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCIlcygpOiBEb3VibGUtZnJlZWQgY2FsbC4gcmN1X2hlYWQgJXBcXFxcblxcXCIsXFxuMjA0MjpcXHRcXHRcXHRcXHQgIF9fZnVuY19fLCBoZWFkKTtcXG4yMDQzOlxcdFxcbjIwNDQ6XFx0XFx0XFx0Ly8gTWFyayBhcyBzdWNjZXNzIGFuZCBsZWF2ZS5cXG4yMDQ1OlxcdFxcdFxcdHJldHVybjtcXG4yMDQ2OlxcdFxcdH1cXG4yMDQ3OlxcdFxcbjIwNDg6XFx0XFx0a2FzYW5fcmVjb3JkX2F1eF9zdGFjayhwdHIpO1xcbjIwNDk6XFx0XFx0c3VjY2VzcyA9IGFkZF9wdHJfdG9fYnVsa19rcmNfbG9jayhcXHUwMDI2a3JjcCwgXFx1MDAyNmZsYWdzLCBwdHIsICFoZWFkKTtcXG4yMDUwOlxcdFxcdGlmICghc3VjY2Vzcykge1xcbjIwNTE6XFx0XFx0XFx0cnVuX3BhZ2VfY2FjaGVfd29ya2VyKGtyY3ApO1xcbjIwNTI6XFx0XFxuMjA1MzpcXHRcXHRcXHRpZiAoaGVhZCA9PSBOVUxMKVxcbjIwNTQ6XFx0XFx0XFx0XFx0Ly8gSW5saW5lIGlmIGt2ZnJlZV9yY3Uob25lX2FyZykgY2FsbC5cXG4yMDU1OlxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrX3JldHVybjtcXG4yMDU2OlxcdFxcbjIwNTc6XFx0XFx0XFx0aGVhZC1cXHUwMDNlbmV4dCA9IGtyY3AtXFx1MDAzZWhlYWQ7XFxuMjA1ODpcXHRcXHRcXHRXUklURV9PTkNFKGtyY3AtXFx1MDAzZWhlYWQsIGhlYWQpO1xcbjIwNTk6XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2a3JjcC1cXHUwMDNlaGVhZF9jb3VudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE1OjM5Ljc5MjYzNjk3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDIzMjE1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBfX2tmcmVlX3JjdV9zaGVhZmAgaW4gbW0vc2x1Yi5jKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBfX2tmcmVlX3JjdV9zaGVhZmAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGluIGBtbS9zbHViLmNgLCBzbyBpdCdzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBkZWFscyB3aXRoIGZyZWVpbmcgb2JqZWN0cyBpbiBhIGRlbGF5ZWQgb3IgUkNVLXNhZmUgbWFubmVyLiBUaGUgbmFtZSBcInNoZWFmXCIgc3VnZ2VzdHMgYSBncm91cGluZyBvciBjb2xsZWN0aW9uIG9mIG9iamVjdHMgYmVpbmcgaGFuZGxlZCB0b2dldGhlciwgbGlrZWx5IHRvIGltcHJvdmUgZWZmaWNpZW5jeSBvciBhdG9taWMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJDVSBtZWNoYW5pc20gdG8gZW5zdXJlIHNhZmUgY29uY3VycmVudCBtZW1vcnkgZGVhbGxvY2F0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgaXQgYWRkcyBmcmVlZCBvYmplY3RzIHRvIHNvbWUgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZSBhbmQgaG93IHRoZSBhY3R1YWwgZnJlZWluZyBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciB0aGUgZ3JhY2UgcGVyaW9kLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCBhbmQgaG93IGl0IGRlYWxzIHdpdGggTlVNQSBjb25zaWRlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB3ZSdyZSBmcmVlaW5nIG9iamVjdHMgdGhhdCBtaWdodCBiZSBzY2F0dGVyZWQgYWNyb3NzIGRpZmZlcmVudCBtZW1vcnkgbm9kZXMuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NDIuNDk0OTYxMTEzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODU1MjI2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rZnJlZV9yY3Vfc2hlYWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiLmgtNDgwLVxcbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XFxubW0vc2xhYi5oLTQ4Mi12b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXFxubW0vc2xhYl9jb21tb24uYzoxMzE2OlxcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXFxubW0vc2xhYl9jb21tb24uYy0xMzE3LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE2NjY9c3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XFx0XFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cXG4tLVxcbm1tL3NsdWIuYz00MTQ4PXZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNDE2MC1cXHRcXHQgKiB3ZSBkb24ndCBjaGVjayBpZiByY3VfZnJlZSBzaGVhZiBleGlzdHMgLSByYWNpbmdcXG5tbS9zbHViLmM6NDE2MTpcXHRcXHQgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1pZ2h0IGhhdmUganVzdCByZW1vdmVkIGl0Llxcbm1tL3NsdWIuYy00MTYyLVxcdFxcdCAqIGJ5IGV4ZWN1dGluZyBmbHVzaF9yY3Vfc2hlYWYoKSBvbiB0aGUgY3B1IHdlIG1ha2VcXG5tbS9zbHViLmM6NDE2MzpcXHRcXHQgKiBzdXJlIHRoZSBfX2tmcmVlX3JjdV9zaGVhZigpIGZpbmlzaGVkIGl0cyBjYWxsX3JjdSgpXFxubW0vc2x1Yi5jLTQxNjQtXFx0XFx0ICovXFxuLS1cXG5tbS9zbHViLmM9NjAzMT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjA4OS0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG5tbS9zbHViLmM6NjA5MDogKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcXG5tbS9zbHViLmMtNjA5MS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpXFxuLS1cXG5tbS9zbHViLmM9NjEwMT1zdGF0aWMgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKGtmcmVlX3JjdV9zaGVhZl9tYXAsIExEX1dBSVRfQ09ORklHKTtcXG5tbS9zbHViLmMtNjEwMi1cXG5tbS9zbHViLmM6NjEwMzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbm1tL3NsdWIuYy02MTA0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NDQuMTgwNDg4MDE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3Mzc5MTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBncmFiIHRoZSBjb21taXQgZGV0YWlscyB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLiBIbW0sIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhYm91dCBga3ZmcmVlX2NhbGxfcmN1KClgLCB3aGljaCByaW5ncyBhIGJlbGwgYXMgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiByZWxhdGVkIHRvIFJDVS1iYXNlZCBtZW1vcnkgZnJlZWluZy4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQganVzdGlmaWVzIGZ1enppbmc/XG5cbkxldCdzIGNhcmVmdWxseSBwaWNrIGFwYXJ0IHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyBQUkVFTVBUX1JUIGlzIGFmZmVjdGVkLiBCZWZvcmUgdGhlIHBhdGNoLCBga2ZyZWVfcmN1X3NoZWFmYCBpbiBQUkVFTVBUX1JUIGNhbGxlZCBgX19rZnJlZV9yY3Vfc2hlYWZgIHdpdGggYSBzcGVjaWZpYyBmbGFnLiBOb3csIHdpdGggdGhlIHBhdGNoLCBga3ZmcmVlX2NhbGxfcmN1KClgICpjb21wbGV0ZWx5KiBieXBhc3NlcyBga2ZyZWVfcmN1X3NoZWFmYC4gVGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBmb3IgIVBSRUVNUFRfUlQuICBBaGEhIEluIG5vbi1SVCBidWlsZHMsIHRoZSBga2ZyZWVfcmN1X3NoZWFmYCBpcyBzdGlsbCB1c2VkIGFuZCBwYXNzZXMgYSBkZWZhdWx0IGZsYWcgdG8gdGhlIHNhbWUgaW50ZXJuYWwgZnVuY3Rpb24uXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogaXMgYGt2ZnJlZV9jYWxsX3JjdWAgYSBob3QgcGF0aD8gR2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggbWVtb3J5IGZyZWVpbmcsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBJdCdzIGNhbGxlZCBldmVyeXdoZXJlLlxuXG5CdXQsIGlzIHRoaXMganVzdCBhbiBpbnRlcm5hbCBtbSBsb2NraW5nIGZpeCwgYW4gUlQgd29ya2Fyb3VuZCwgb3IgaXMgaXQgc29tZXRoaW5nIGZ1enotd29ydGh5PyBUaW1lIHRvIHB1bGwgb3V0IHRoZSBcIldvcnRoRnV6emluZ1wiIGd1aWRlbGluZXMuXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgaXQncyBub3QgYSBkb2N1bWVudGF0aW9uIGNoYW5nZSwgbm90IHB1cmVseSBsb2dnaW5nLCBubyBjb25zdGFudCBjaGFuZ2VzLCBkb2Vzbid0IHNlZW0gbGlrZSB1bnJlYWNoYWJsZSBjb2RlLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGVhcmRvd24uICBUaGUgZ3VpZGVsaW5lcyBzdGF0ZTogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cblNpbmNlIHRoaXMgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgdGhhdCBtZWFucyB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyBjb21lcyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwOiBpZGVudGlmeWluZyBgRm9jdXNTeW1ib2xzYC4gVGhlIGluc3RydWN0aW9ucyBzYXk6IFwiRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cIlxuXG5Pa2F5LCBzbyB3aGF0IGZ1bmN0aW9ucyB3ZXJlIGFjdHVhbGx5IG1vZGlmaWVkIG9yIGludHJvZHVjZWQ/IExvb2tpbmcgYXQgYG1tL3NsYWJfY29tbW9uLmNgLCB3ZSBoYXZlIGBrZnJlZV9yY3Vfc2hlYWZgICh3aGljaCBpcyBzdGF0aWMpIGFuZCBga3ZmcmVlX2NhbGxfcmN1YCAobm9uLXN0YXRpYywgZXhwb3J0ZWQg4oCTIGB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpYCkuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgYGt2ZnJlZV9jYWxsX3JjdWAgYSBcImdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25cIj8gT3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBlbnRyeSBwb2ludD8gT3Igc2hvdWxkIGBGb2N1c1N5bWJvbHNgIGJlIGVtcHR5PyBDYW4gYEZvY3VzU3ltYm9sc2AgYmUgZW1wdHkgaWYgYWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgb3Igc3RhdGljPyBMZXQncyByZS1yZWFkIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBpbnN0cnVjdGlvbnM6IFwiQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cIlxuXG5SaWdodCEgTGV0IG1lIHRoaW5rLi4uIHdoYXQgYXJlIHRoZSByZWxldmFudCBlbnRyeXBvaW50cyBmb3IgYGtmcmVlX3JjdWAsIGBrdmZyZWVfcmN1YCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2A/IEl0J3MgdGltZSB0byBkaWcgaW50byBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgIHRvIGZpbmQgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTo1MC43NTQyODI4MjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMjI3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWVfY2FsbF9yY3Vfbm9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTEyOTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7XFxubW0vc2xhYl9jb21tb24uYy0xMjk4LVxcbm1tL3NsYWJfY29tbW9uLmM6MTI5OTp2b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxubW0vc2xhYl9jb21tb24uYy0xMzAwLXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMyMy19XFxubW0vc2xhYl9jb21tb24uYzoxMzI0OkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7XFxubW0vc2xhYl9jb21tb24uYy0xMzI1LVxcbi0tXFxubW0vc2x1Yi5jPTYwMzE9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTYwOTAtICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jOjYwOTE6ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbm1tL3NsdWIuYy02MDkyLSAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTo1MC44MDI1MDgyMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2Nzg4MzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgd2l0aCBSQ1UgYW5kIEtmcmVlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gbWVtb3J5IGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIG9mIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCBga3ZmcmVlX2NhbGxfcmN1YC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRob3NlIHR3byBmdW5jdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIG51YW5jZXMsIGhvdyB0aGV5IGJlaGF2ZSwgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjYXNlcyB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gSSBhbSBnb2luZyB0byBzZWUgaG93IHRoZXkncmUgYmVpbmcgdXNlZCBhbmQgd2hlcmUgdGhleSd2ZSBiZWVuIG1vZGlmaWVkLlxuXG5CZXlvbmQgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZS4gTGV0J3Mgc2VlIHdoYXQgb3RoZXIgZmlsZXMgaGF2ZSBiZWVuIGFmZmVjdGVkIGluIHRoZSBtb3N0IHJlY2VudCBIRUFEIGNvbW1pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBBcmUgdGhlc2UgaXNvbGF0ZWQgbW9kaWZpY2F0aW9ucyBvciBwYXJ0IG9mIHNvbWV0aGluZyBiaWdnZXI/IFdoYXQncyB0aGUgY29udGV4dD8gRGV0ZXJtaW5pbmcgd2hhdCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYSBsYXJnZXIgc3lzdGVtLWxldmVsIGNoYW5nZSBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGUgbGFyZ2VyIHBpY3R1cmUgd2lsbCBob3BlZnVsbHkgZXhwb3NlIGFueSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9mIGNoYW5nZXMgdGhhdCBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTo1NC40NzAzOTM5NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODg3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdV9zaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiLmgtNDgwLVxcbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XFxubW0vc2xhYi5oLTQ4Mi12b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXFxubW0vc2xhYl9jb21tb24uYzoxMzE2OlxcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXFxubW0vc2xhYl9jb21tb24uYy0xMzE3LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE2MjI9c3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxcbm1tL3NsYWJfY29tbW9uLmM6MTY2NjpzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbm1tL3NsYWJfY29tbW9uLmMtMTY2Ny17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2NzktXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxubW0vc2xhYl9jb21tb24uYzoxNjgwOlxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIwMTM9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMDM0LVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbm1tL3NsYWJfY29tbW9uLmMtMjAzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTQxNjAtXFx0XFx0ICogd2UgZG9uJ3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXFxubW0vc2x1Yi5jOjQxNjE6XFx0XFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cXG5tbS9zbHViLmMtNDE2Mi1cXHRcXHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXFxubW0vc2x1Yi5jOjQxNjM6XFx0XFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxcbm1tL3NsdWIuYy00MTY0LVxcdFxcdCAqL1xcbi0tXFxubW0vc2x1Yi5jPTYwMzE9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTYwODktICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXFxubW0vc2x1Yi5jOjYwOTA6ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbi0tXFxubW0vc2x1Yi5jLTYxMDAtICovXFxubW0vc2x1Yi5jOjYxMDE6c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYxMDItXFxubW0vc2x1Yi5jOjYxMDM6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjEwNC17XFxuLS1cXG5tbS9zbHViLmMtNjExMS1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MTEyOlxcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG5tbS9zbHViLmMtNjExMy1cXG4tLVxcbm1tL3NsdWIuYy02MjExLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jOjYyMTI6XFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxubW0vc2x1Yi5jLTYyMTMtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9zbHViLmMtNjIxNy1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MjE4OlxcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xcbm1tL3NsdWIuYy02MjE5LVxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NTQuNTE5Mjk3ODExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NTI3NjkwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUkVFTVBUX1JUIGFuZCBrdmZyZWVfY2FsbF9yY3UgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgQ09ORklHX1BSRUVNUFRfUlRgIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBjb2RlIHRvIGZ1bmN0aW9uIGEgY2VydGFpbiB3YXksIG9yIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIHBhdGguIFNvLCBsZXQncyBnZXQgaW50byBpdC5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBhdCBga3ZmcmVlX2NhbGxfcmN1YC4gVGhlIGNvZGUgY2hlY2tzIGAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgIGFuZCwgaWYgdHJ1ZSwgY2FsbHMgYGtmcmVlX3JjdV9zaGVhZihwdHIpYC4gVGhhdCBtZWFucywgaW4gYSBzdGFuZGFyZCBrZXJuZWwsIHdpdGhvdXQgYFBSRUVNUFRfUlRgLCBga2ZyZWVfcmN1X3NoZWFmYCAqaXMqIGV4ZWN1dGVkLiBBbmQgd2l0aGluIGBrZnJlZV9yY3Vfc2hlYWZgLCB3ZSBzZWUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBiZWluZyBjYWxsZWQgd2l0aCBgU0xBQl9GUkVFX0RFRkFVTFRgLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBpbXBvcnRhbnQgYml0LCB3aXRoIGBDT05GSUdfUFJFRU1QVF9SVGAgZW5hYmxlZCwgdGhlIGVudGlyZSBjYWxsIHRvIGBrZnJlZV9yY3Vfc2hlYWZgIGlzIGJ5cGFzc2VkIGluIGBrdmZyZWVfY2FsbF9yY3VgLiBJbnRlcmVzdGluZy5cblxuTm93LCBob2xkIG9uLiBJIG5lZWQgdG8gY2xhcmlmeTogSXMgYFBSRUVNUFRfUlRgIGEgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgd2UgY2FuIHRlc3QgaGVyZT8gT3IgaXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgYXQgcGxheSwgcGVyaGFwcyBgQ09ORklHX1NMVUJgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB0byBiZSBzdXJlLiBJJ2xsIHN0YXJ0IHdpdGggYGluaXQvS2NvbmZpZ2Agb3IgbWF5YmUgYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgIHRvIGZpbmQgYFBSRUVNUFRfUlRgLiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2OTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NTkuNDcyMDY5MTMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzYwNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVFTVBUX1JUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXFxua2VybmVsL0tjb25maWcucHJlZW1wdC05MS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjkyOmNvbmZpZyBQUkVFTVBUX1JUXFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cXHRib29sIFxcXCJGdWxseSBQcmVlbXB0aWJsZSBLZXJuZWwgKFJlYWwtVGltZSlcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEwOC1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMTAtXFx0Ym9vbCBcXFwiRW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjowMS4wOTM4MzU1OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3Mzg0MDMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBwcmVlbXB0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBqdW1wIGludG8gYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGlzIHN0dWZmIGFyZSBhcm91bmQgbGluZSA5Mi4gTGV0IG1lIGdyYWIgbXkgZWRpdG9yIGFuZCB0YWtlIGEgbG9vaywgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MDQuNzY3Njc4MDA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9OT19QUkVFTVBUXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbiAgODI6XFx0XFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNjaGVkdWxlciBkcml2ZW4gcHJlZW1wdGlvbiBtb2RlbCB0aGF0XFxuICA4NTpcXHRcXHQgIGlzIGZ1bmRhbWVudGFsbHkgc2ltaWxhciB0byBmdWxsIHByZWVtcHRpb24sIGJ1dCBpcyBsZXNzXFxuICA4NjpcXHRcXHQgIGVhZ2VyIHRvIHByZWVtcHQgU0NIRURfTk9STUFMIHRhc2tzIGluIGFuIGF0dGVtcHQgdG9cXG4gIDg3OlxcdFxcdCAgcmVkdWNlIGxvY2sgaG9sZGVyIHByZWVtcHRpb24gYW5kIHJlY292ZXIgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2VcXG4gIDg4OlxcdFxcdCAgZ2FpbnMgc2VlbiBmcm9tIHVzaW5nIFZvbHVudGFyeSBwcmVlbXB0aW9uLlxcbiAgODk6XFx0XFxuICA5MDpcXHRlbmRjaG9pY2VcXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFBSRUVNUFRfUlRcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gRVhQRVJUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAgOTU6XFx0XFx0c2VsZWN0IFBSRUVNUFRJT05cXG4gIDk2OlxcdFxcdGhlbHBcXG4gIDk3OlxcdFxcdCAgVGhpcyBvcHRpb24gdHVybnMgdGhlIGtlcm5lbCBpbnRvIGEgcmVhbC10aW1lIGtlcm5lbCBieSByZXBsYWNpbmdcXG4gIDk4OlxcdFxcdCAgdmFyaW91cyBsb2NraW5nIHByaW1pdGl2ZXMgKHNwaW5sb2Nrcywgcndsb2NrcywgZXRjLikgd2l0aFxcbiAgOTk6XFx0XFx0ICBwcmVlbXB0aWJsZSBwcmlvcml0eS1pbmhlcml0YW5jZSBhd2FyZSB2YXJpYW50cywgZW5mb3JjaW5nXFxuIDEwMDpcXHRcXHQgIGludGVycnVwdCB0aHJlYWRpbmcgYW5kIGludHJvZHVjaW5nIG1lY2hhbmlzbXMgdG8gYnJlYWsgdXAgbG9uZ1xcbiAxMDE6XFx0XFx0ICBub24tcHJlZW1wdGlibGUgc2VjdGlvbnMuIFRoaXMgbWFrZXMgdGhlIGtlcm5lbCwgZXhjZXB0IGZvciB2ZXJ5XFxuIDEwMjpcXHRcXHQgIGxvdyBsZXZlbCBhbmQgY3JpdGljYWwgY29kZSBwYXRocyAoZW50cnkgY29kZSwgc2NoZWR1bGVyLCBsb3dcXG4gMTAzOlxcdFxcdCAgbGV2ZWwgaW50ZXJydXB0IGhhbmRsaW5nKSBmdWxseSBwcmVlbXB0aWJsZSBhbmQgYnJpbmdzIG1vc3RcXG4gMTA0OlxcdFxcdCAgZXhlY3V0aW9uIGNvbnRleHRzIHVuZGVyIHNjaGVkdWxlciBjb250cm9sLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIHN5c3RlbXMgd2hpY2hcXG4gMTA3OlxcdFxcdCAgcmVxdWlyZSByZWFsLXRpbWUgZ3VhcmFudGVlcy5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0Y29uZmlnIFBSRUVNUFRfUlRfTkVFRFNfQkhfTE9DS1xcbiAxMTA6XFx0XFx0Ym9vbCBcXFwiRW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXFxcIlxcbiAxMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUkVFTVBUX1JUXFxuIDExMjpcXHRcXHRoZWxwXFxuIDExMzpcXHRcXHQgIEVuZm9yY2Ugc3luY2hyb25pc2F0aW9uIGFjcm9zcyB0aGUgc29mdGlycXMgY29udGV4dC4gT24gUFJFRU1QVF9SVFxcbiAxMTQ6XFx0XFx0ICB0aGUgc29mdGlycSBpcyBwcmVlbXB0aWJsZS4gVGhpcyBlbmZvcmNlcyB0aGUgc2FtZSBwZXItQ1BVIEJMS1xcbiAxMTU6XFx0XFx0ICBzZW1hbnRpYyBub24tUFJFRU1QVF9SVCBidWlsZHMgaGF2ZS4gVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZFxcbiAxMTY6XFx0XFx0ICBiZWNhdXNlIHBlci1DUFUgbG9ja3Mgd2VyZSBhZGRlZCB0byBhdm9pZCB0aGUgcGVyLUNQVSBCS0wuXFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdCAgVGhpcyBzd2l0Y2ggcHJvdmlkZXMgdGhlIG9sZCBiZWhhdmlvdXIgZm9yIHRlc3RpbmcgcmVhc29ucy4gU2VsZWN0XFxuIDExOTpcXHRcXHQgIHRoaXMgaWYgeW91IHN1c3BlY3QgYW4gZXJyb3Igd2l0aCBwcmVlbXB0aWJsZSBzb2Z0aXJxIGFuZCB3YW50IHRlc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MDQuNzY3NzUxMjE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NTUwOTc5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFNsYWIgRnJlZWluZyBNZWNoYW5pc21zKipcblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaGFuZGxlcyBmcmVlaW5nIG1lbW9yeSBzbGFicy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGtleSBjb25zdGFudHMgb3IgbWFjcm9zIGludm9sdmVkLiBGaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gd2hhdCBgU0xBQl9GUkVFX0RFRkFVTFRgIGFuZCBgU0xBQl9GUkVFX05PTE9DS2AgYWN0dWFsbHkgc2lnbmlmeS4gVGhlaXIgbmFtZXMgYXJlIHN1Z2dlc3RpdmUsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGVpciBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYF9ERUZBVUxUYCByZXByZXNlbnRzIHRoZSB0eXBpY2FsIHNsYWIgZnJlZWluZyBtZWNoYW5pc20gYW5kIGlmIGBfTk9MT0NLYCBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBzdHJhdGVneS4gTWF5YmUgdGhleSByZWxhdGUgdG8gbG9ja2luZyBzdHJhdGVnaWVzIG9yIGRlZmF1bHQgYmVoYXZpb3JzLlxuXG5UbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBkbyBhIGdsb2JhbCBzZWFyY2ggZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYFNMQUJfRlJFRV9gIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBwYXR0ZXJuIGlzIHVzdWFsbHkgaGVscGZ1bC4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGVzZSBjb25zdGFudHMgYXJlIHV0aWxpemVkLiBUaGlzIHdpbGwgc2hvdyBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgdG8gd29yayB3aXRoIHRoZSBkZWZpbmVkIGJlaGF2aW9yLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgdXRpbGl6YXRpb25zLCBhbGxvd2luZyBtZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiBob3cgdGhlc2UgbWVtb3J5IHNsYWJzIGFyZSBtYW5hZ2VkIGFuZCBmcmVlZC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIEknbSBkZWJ1Z2dpbmcsIG9wdGltaXppbmcsIG9yIHNpbXBseSBnYWluaW5nIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjEyLjcyMjg1MDg4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDI1OTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTTEFCX0ZSRUVfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM9MjgzPXN0YXRpYyB2b2lkIGxrZHRtX0JVRERZX0lOSVRfT05fQUxMT0Modm9pZClcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzE1LVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM6MzE2OnN0YXRpYyB2b2lkIGxrZHRtX1NMQUJfRlJFRV9ET1VCTEUodm9pZClcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMxNy17XFxuLS1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMzMi1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjMzMzpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfQ1JPU1Modm9pZClcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMzNC17XFxuLS1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM0OC1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjM0OTpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfUEFHRSh2b2lkKVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzUwLXtcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM9MzczPXN0YXRpYyBzdHJ1Y3QgY3Jhc2h0eXBlIGNyYXNodHlwZXNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzgyLVxcdENSQVNIVFlQRShCVUREWV9JTklUX09OX0FMTE9DKSxcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjM4MzpcXHRDUkFTSFRZUEUoU0xBQl9GUkVFX0RPVUJMRSksXFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODQ6XFx0Q1JBU0hUWVBFKFNMQUJfRlJFRV9DUk9TUyksXFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODU6XFx0Q1JBU0hUWVBFKFNMQUJfRlJFRV9QQUdFKSxcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM4Ni19O1xcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jPTQ4ND12b2lkIGthc2FuX2luaXRfb2JqZWN0X21ldGEoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBjb25zdCB2b2lkICpvYmplY3QpXFxuLS1cXG5tbS9rYXNhbi9nZW5lcmljLmMtNDk2LVxcdCAqIHZhbHVlIGZvciB0aGUgZmlyc3QgOCBieXRlcyBvZiBhIG5ld2x5IGFsbG9jYXRlZCBvYmplY3QgaXMgbm90XFxubW0va2FzYW4vZ2VuZXJpYy5jOjQ5NzpcXHQgKiBLQVNBTl9TTEFCX0ZSRUVfTUVUQS5cXG5tbS9rYXNhbi9nZW5lcmljLmMtNDk4LVxcdCAqL1xcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jPTUwNz1zdGF0aWMgdm9pZCByZWxlYXNlX2ZyZWVfbWV0YShjb25zdCB2b2lkICpvYmplY3QsIHN0cnVjdCBrYXNhbl9mcmVlX21ldGEgKm1ldGEpXFxuLS1cXG5tbS9rYXNhbi9nZW5lcmljLmMtNTA5LVxcdC8qIENoZWNrIGlmIGZyZWUgbWV0YSBpcyB2YWxpZC4gKi9cXG5tbS9rYXNhbi9nZW5lcmljLmM6NTEwOlxcdGlmICgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhvYmplY3QpICE9IEtBU0FOX1NMQUJfRlJFRV9NRVRBKVxcbm1tL2thc2FuL2dlbmVyaWMuYy01MTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jPTU3Mz12b2lkIGthc2FuX3NhdmVfZnJlZV9pbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jLTU4Ni1cXHQvKiBNYXJrIGZyZWUgbWV0YSBhcyB2YWxpZC4gKi9cXG5tbS9rYXNhbi9nZW5lcmljLmM6NTg3OlxcdCoodTggKilrYXNhbl9tZW1fdG9fc2hhZG93KG9iamVjdCkgPSBLQVNBTl9TTEFCX0ZSRUVfTUVUQTtcXG5tbS9rYXNhbi9nZW5lcmljLmMtNTg4LX1cXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9MTI0PXN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl9yZXF1aXJlc19tZXRhKHZvaWQpXFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oLTE1Ny1cXG5tbS9rYXNhbi9rYXNhbi5oOjE1ODojZGVmaW5lIEtBU0FOX1NMQUJfRlJFRV9NRVRBXFx0MHhGQSAgLyogZnJlZWQgc2xhYiBvYmplY3Qgd2l0aCBmcmVlIG1ldGEgKi9cXG5tbS9rYXNhbi9rYXNhbi5oLTE1OS0jZGVmaW5lIEtBU0FOX0dMT0JBTF9SRURaT05FXFx0MHhGOSAgLyogcmVkem9uZSBmb3IgZ2xvYmFsIHZhcmlhYmxlICovXFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oPTI3MD1zdHJ1Y3QgcWxpc3Rfbm9kZSB7XFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oLTI4Ni0gKiBGcmVlIG1ldGEgaXMgY29uc2lkZXJlZCB2YWxpZCB3aGVuZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNoYWRvdyBieXRlIHRoYXRcXG5tbS9rYXNhbi9rYXNhbi5oOjI4NzogKiBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgOCBieXRlcyBvZiB0aGUgb2JqZWN0IGlzIEtBU0FOX1NMQUJfRlJFRV9NRVRBLlxcbm1tL2thc2FuL2thc2FuLmgtMjg4LSAqL1xcbi0tXFxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz03ND1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NoYWRvd19idWdfdHlwZShzdHJ1Y3Qga2FzYW5fcmVwb3J0X2luZm8gKmluZm8pXFxuLS1cXG5tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jLTExMi1cXHRjYXNlIEtBU0FOX1NMQUJfRlJFRTpcXG5tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jOjExMzpcXHRjYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOlxcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTE0LVxcdFxcdGJ1Z190eXBlID0gXFxcInNsYWItdXNlLWFmdGVyLWZyZWVcXFwiO1xcbi0tXFxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz0xNjA9dm9pZCBrYXNhbl9jb21wbGV0ZV9tb2RlX3JlcG9ydF9pbmZvKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG4tLVxcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTc1LVxcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmM6MTc2OlxcdGlmICgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhpbmZvLVxcdTAwM2VvYmplY3QpID09IEtBU0FOX1NMQUJfRlJFRV9NRVRBKSB7XFxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYzoxNzc6XFx0XFx0LyogRnJlZSBtZXRhIG11c3QgYmUgcHJlc2VudCB3aXRoIEtBU0FOX1NMQUJfRlJFRV9NRVRBLiAqL1xcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTc4LVxcdFxcdGZyZWVfbWV0YSA9IGthc2FuX2dldF9mcmVlX21ldGEoaW5mby1cXHUwMDNlY2FjaGUsIGluZm8tXFx1MDAzZW9iamVjdCk7XFxuLS1cXG5tbS9zbGFiLmgtMjYtXFxubW0vc2xhYi5oOjI3OiNkZWZpbmUgU0xBQl9GUkVFX0RFRkFVTFRcXHQweDAwIC8qIG5vIGZsYWdzICovXFxubW0vc2xhYi5oOjI4OiNkZWZpbmUgU0xBQl9GUkVFX05PTE9DS1xcdDB4MDEgLyogc3Bpbm5pbmcgbm90IGFsbG93ZWQgKi9cXG5tbS9zbGFiLmgtMjktXFxubW0vc2xhYi5oPTMwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRvX2FsbG9jX2ZsYWdzKHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbm1tL3NsYWIuaC0zMS17XFxubW0vc2xhYi5oOjMyOlxcdGlmIChmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcXG5tbS9zbGFiLmgtMzMtXFx0XFx0cmV0dXJuIFNMQUJfQUxMT0NfTk9MT0NLO1xcbi0tXFxubW0vc2xhYi5oPTQzPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbm1tL3NsYWIuaC00NC17XFxubW0vc2xhYi5oOjQ1OlxcdHJldHVybiAhKGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKTtcXG5tbS9zbGFiLmgtNDYtfVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMxNS1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XFx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXFx0XFx0Z290byBmYWxsYmFjaztcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTY2Nj1zdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNjc5LVxcdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxcbm1tL3NsYWJfY29tbW9uLmM6MTY4MDpcXHRcXHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxubW0vc2xhYl9jb21tb24uYy0xNjgxLVxcbi0tXFxubW0vc2x1Yi5jPTI4NDU9c3RhdGljIHZvaWQgX19mcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxuLS1cXG5tbS9zbHViLmMtMjg1OC1cXG5tbS9zbHViLmM6Mjg1OTpcXHRpZiAodW5saWtlbHkoZnJlZV9mbGFncyBcXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxcbm1tL3NsdWIuYy0yODYwLVxcdFxcdGtmcmVlX25vbG9jayhzaGVhZik7XFxuLS1cXG5tbS9zbHViLmM9Mjg2Nz1zdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxubW0vc2x1Yi5jLTI4Njgte1xcbm1tL3NsdWIuYzoyODY5OlxcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xcbm1tL3NsdWIuYy0yODcwLX1cXG4tLVxcbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02MDkxLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcXG5tbS9zbHViLmM6NjA5MjogKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcXG5tbS9zbHViLmMtNjA5My0gKiBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgY29tcGxldGVseSBvbiBQUkVFTVBUX1JULlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGtkdG0vdGVzdHMudHh0PTMyPUJVRERZX0lOSVRfT05fQUxMT0MgTWVtb3J5IGFwcGVhcnMgaW5pdGlhbGl6ZWRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzM6U0xBQl9GUkVFX0RPVUJMRVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xrZHRtL3Rlc3RzLnR4dDozNDpTTEFCX0ZSRUVfQ1JPU1NcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzU6U0xBQl9GUkVFX1BBR0VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQtMzYtI1NPRlRMT0NLVVAgSGFuZ3MgdGhlIHN5c3RlbVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjoxNC4xODcxMTc0MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM1NDE2NDUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBTTFVCIGFuZCBSQ1UgU2hlYXZlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gc29tZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWNzLiBNeSBmb2N1cyBpcyBvbiBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBTTEFCIGFuZCBTTFVCIGFsbG9jYXRvcnMgcmVzaWRlcywgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGZyZWVpbmcgbWVtb3J5LCBzcGVjaWZpY2FsbHkgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYFNMQUJfRlJFRV9ERUZBVUxUYCBhbmQgYFNMQUJfRlJFRV9OT0xPQ0tgLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byBga2ZyZWVfcmN1X3NoZWFmYC4gVGhlIG5ldyBTTFVCIHNoZWFmL2JhdGNoaW5nIGZlYXR1cmUsIEkgdGhpbmssIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIFRpbWUgdG8gdHJhY2UgdGhpbmdzIGRvd24uIEkgc2hvdWxkIGNoZWNrIG91dCBgX19rZnJlZV9yY3Vfc2hlYWZgIGluIGBtbS9zbHViLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGhvdyBTTFVCIHNoZWF2ZXMgYXJlIGhhbmRsZWQgZHVyaW5nIG1lbW9yeSByZWxlYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjoyMS41NDEyODM4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjEwMDpcXHQgKi9cXG42MTAxOlxcdHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xcbjYxMDI6XFx0XFxuNjEwMzpcXHRib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbjYxMDQ6XFx0e1xcbjYxMDU6XFx0XFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcXG42MTA2OlxcdFxcdHN0cnVjdCBzbGFiX3NoZWFmICpyY3Vfc2hlYWY7XFxuNjEwNzpcXHRcXHRib29sIGFsbG93X3NwaW4gPSBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGZyZWVfZmxhZ3MpO1xcbjYxMDg6XFx0XFxuNjEwOTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbik7XFxuNjExMDpcXHRcXG42MTExOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuNjExMjpcXHRcXHRcXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuNjExMzpcXHRcXG42MTE0OlxcdFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKVxcbjYxMTU6XFx0XFx0XFx0Z290byBmYWlsO1xcbjYxMTY6XFx0XFxuNjExNzpcXHRcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbjYxMTg6XFx0XFxuNjExOTpcXHRcXHRpZiAodW5saWtlbHkoIXBjcy1cXHUwMDNlcmN1X2ZyZWUpKSB7XFxuNjEyMDpcXHRcXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XFxuNjEyMTpcXHRcXHRcXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xcbjYxMjI6XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gdG9fYWxsb2NfZmxhZ3MoZnJlZV9mbGFncyk7XFxuNjEyMzpcXHRcXHRcXHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcXG42MTI0OlxcdFxcbjYxMjU6XFx0XFx0XFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBmYWxsIGJhY2sgKi9cXG42MTI2OlxcdFxcdFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuNjEyNzpcXHRcXHRcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG42MTI4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG42MTI5OlxcdFxcdFxcdH1cXG42MTMwOlxcdFxcbjYxMzE6XFx0XFx0XFx0aWYgKHBjcy1cXHUwMDNlc3BhcmUgXFx1MDAyNlxcdTAwMjYgcGNzLVxcdTAwM2VzcGFyZS1cXHUwMDNlc2l6ZSA9PSAwKSB7XFxuNjEzMjpcXHRcXHRcXHRcXHRwY3MtXFx1MDAzZXJjdV9mcmVlID0gcGNzLVxcdTAwM2VzcGFyZTtcXG42MTMzOlxcdFxcdFxcdFxcdHBjcy1cXHUwMDNlc3BhcmUgPSBOVUxMO1xcbjYxMzQ6XFx0XFx0XFx0XFx0Z290byBkb19mcmVlO1xcbjYxMzU6XFx0XFx0XFx0fVxcbjYxMzY6XFx0XFxuNjEzNzpcXHRcXHRcXHRiYXJuID0gZ2V0X2Jhcm4ocyk7XFxuNjEzODpcXHRcXHRcXHRpZiAoIWJhcm4pIHtcXG42MTM5OlxcdFxcdFxcdFxcdGxvY2FsX3VubG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spO1xcbjYxNDA6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjYxNDE6XFx0XFx0XFx0fVxcbjYxNDI6XFx0XFxuNjE0MzpcXHRcXHRcXHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xcbjYxNDQ6XFx0XFxuNjE0NTpcXHRcXHRcXHRpZiAoZW1wdHkpIHtcXG42MTQ2OlxcdFxcdFxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcXG42MTQ3OlxcdFxcdFxcdFxcdGdvdG8gZG9fZnJlZTtcXG42MTQ4OlxcdFxcdFxcdH1cXG42MTQ5OlxcdFxcbjYxNTA6XFx0XFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuNjE1MTpcXHRcXG42MTUyOlxcdFxcdFxcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7XFxuNjE1MzpcXHRcXG42MTU0OlxcdFxcdFxcdGlmICghZW1wdHkpXFxuNjE1NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNjE1NjpcXHRcXG42MTU3OlxcdFxcdFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKSB7XFxuNjE1ODpcXHRcXHRcXHRcXHRfX2ZyZWVfZW1wdHlfc2hlYWYocywgZW1wdHksIGZyZWVfZmxhZ3MpO1xcbjYxNTk6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjYxNjA6XFx0XFx0XFx0fVxcbjYxNjE6XFx0XFxuNjE2MjpcXHRcXHRcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbjYxNjM6XFx0XFxuNjE2NDpcXHRcXHRcXHRpZiAodW5saWtlbHkocGNzLVxcdTAwM2VyY3VfZnJlZSkpXFxuNjE2NTpcXHRcXHRcXHRcXHRfX2ZyZWVfZW1wdHlfc2hlYWYocywgZW1wdHksIGZyZWVfZmxhZ3MpO1xcbjYxNjY6XFx0XFx0XFx0ZWxzZVxcbjYxNjc6XFx0XFx0XFx0XFx0cGNzLVxcdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xcbjYxNjg6XFx0XFx0fVxcbjYxNjk6XFx0XFxuNjE3MDpcXHRkb19mcmVlOlxcbjYxNzE6XFx0XFxuNjE3MjpcXHRcXHRyY3Vfc2hlYWYgPSBwY3MtXFx1MDAzZXJjdV9mcmVlO1xcbjYxNzM6XFx0XFxuNjE3NDpcXHRcXHQvKlxcbjYxNzU6XFx0XFx0ICogU2luY2Ugd2UgZmx1c2ggaW1tZWRpYXRlbHkgd2hlbiBzaXplIHJlYWNoZXMgY2FwYWNpdHksIHdlIG5ldmVyIHJlYWNoXFxuNjE3NjpcXHRcXHQgKiB0aGlzIHdpdGggc2l6ZSBhbHJlYWR5IGF0IGNhcGFjaXR5LCBzbyBubyBPT0Igd3JpdGUgaXMgcG9zc2libGUuXFxuNjE3NzpcXHRcXHQgKi9cXG42MTc4OlxcdFxcdHJjdV9zaGVhZi1cXHUwMDNlb2JqZWN0c1tyY3Vfc2hlYWYtXFx1MDAzZXNpemUrK10gPSBvYmo7XFxuNjE3OTpcXHRcXG42MTgwOlxcdFxcdGlmIChsaWtlbHkocmN1X3NoZWFmLVxcdTAwM2VzaXplIFxcdTAwM2Mgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHkpKSB7XFxuNjE4MTpcXHRcXHRcXHRyY3Vfc2hlYWYgPSBOVUxMO1xcbjYxODI6XFx0XFx0fSBlbHNlIHtcXG42MTgzOlxcdFxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBOVUxMO1xcbjYxODQ6XFx0XFx0XFx0cmN1X3NoZWFmLVxcdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XFxuNjE4NTpcXHRcXHR9XFxuNjE4NjpcXHRcXG42MTg3OlxcdFxcdC8qXFxuNjE4ODpcXHRcXHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xcbjYxODk6XFx0XFx0ICogZmx1c2hfYWxsX3JjdV9zaGVhdmVzKCkgZG9lc24ndCBtaXNzIHRoaXMgc2hlYWZcXG42MTkwOlxcdFxcdCAqL1xcbjYxOTE6XFx0XFx0aWYgKHJjdV9zaGVhZikge1xcbjYxOTI6XFx0XFx0XFx0LypcXG42MTkzOlxcdFxcdFxcdCAqIFdpdGggIWFsbG93X3NwaW4sIHdlIG1pZ2h0IGhhdmUgaW50ZXJydXB0ZWQgY2FsbF9yY3UoKSdzXFxuNjE5NDpcXHRcXHRcXHQgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLFxcbjYxOTU6XFx0XFx0XFx0ICogd2Uga25vdyB0aGF0J3Mgbm90IHRoZSBjYXNlLlxcbjYxOTY6XFx0XFx0XFx0ICovXFxuNjE5NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXFx1MDAyNlxcdTAwMjYgaXJxc19kaXNhYmxlZCgpKSkge1xcbjYxOTg6XFx0XFx0XFx0XFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XFxuNjE5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MjEuNTQyNDUyNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU2NTgzMDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgX19rZnJlZV9yY3Vfc2hlYWZgIGhhcyBhIGNvbmRpdGlvbmFsIHdhcm5pbmcsIGBWTV9XQVJOX09OX09OQ0VgLCB0aGF0IHRyaWdnZXJzIGlmIGBhbGxvd19zcGluYCAod2hpY2ggaXMgdHJ1ZSBpbiB0aGUgZGVmYXVsdCBzdGF0ZSkgYW5kIGBDT05GSUdfUFJFRU1QVF9SVGAgYXJlIGJvdGggZW5hYmxlZC4gVGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBtZW1vcnkgaXMgZnJlZWQsIGFuZCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gY2F1c2VkIHByb2JsZW1zIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgYFBSRUVNUFRfUlRgLCBzcGVjaWZpY2FsbHkgd2hlbiBhIHJhdyBzcGlubG9jayB3YXMgaGVsZC4gVGhlIGZpeCBieXBhc3NlcyB0aGUgcHJvYmxlbWF0aWMgZnVuY3Rpb24gZW50aXJlbHkgaW4gb25lIGNhc2UgYW5kIGNoYW5nZXMgdGhlIGZsYWdzIHBhc3NlZCBpbiBhbm90aGVyLlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhhdCdzIHRoZSByZWFsIHF1ZXN0aW9uLiBMZXQgbWUgY2hlY2s6IHRoaXMgY2hhbmdlIGlzICpkZWZpbml0ZWx5KiBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBrdmZyZWVfY2FsbF9yY3VgKSwgYW5kIGl0J3MgcmVhY2hhYmxlIGFuZCBjb25zdGFudGx5IGV4ZWN1dGVkLCBzbyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoaXMgaXMgYSBjbGVhciBjYXNlIHdoZXJlIGZ1enppbmcgd2lsbCBleHBvc2UgcG90ZW50aWFsbHkgc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTGV0J3Mgc2VlLi4uIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBwcmVmZXIgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGt2ZnJlZV9jYWxsX3JjdWAgKmlzKiBhIHBvdGVudGlhbGx5IGhvdCBmdW5jdGlvbiwgc28gbGV0J3MgdGhpbmsgYWJvdXQgdGhpcy4uLml0IGlzIGluZGVlZCBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24vUkNVIGZyZWVpbmcgZnVuY3Rpb24sIHNvIGl0J3MgcHJvYmFibHkgKnRvbyogZ2VuZXJhbC4gV2hhdCBkaWQgdGhlIHBhdGNoIGFjdHVhbGx5IHRvdWNoPyBga2ZyZWVfcmN1X3NoZWFmYCwgYGt2ZnJlZV9jYWxsX3JjdWAsIGBfX2tmcmVlX3JjdV9zaGVhZmAgYW5kIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLi4uIFdhaXQsIHRoZXJlJ3MgYW5vdGhlciBvbmU6IGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbiwgYW5kIGlzICpub3QqIG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgYnV0IGl0IGNhbGxzIGBfX2tmcmVlX3JjdV9zaGVhZmAgd2l0aCBhIGZsYWcgdGhhdCAqd2FzKiBtb2RpZmllZC5cblxuT2theSwgc28gbGV0J3Mgc2VlLCB3aGljaCBzaG91bGQgYmUgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q/IExvb2tpbmcgZm9yIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4uLmBfX2tmcmVlX3JjdV9zaGVhZmAgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBJdCdzIG5vbi1zdGF0aWMsIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9zbGFiLmhgLiBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBub3QgbW9kaWZpZWQsIGJ1dCBjYWxsZWQgYnkgdGhlIGNoYW5nZWQgY29kZSwgc28gcGVyaGFwcyBpdCBzaG91bGQgYmUgdGhlcmUgYXMgd2VsbC4gYGt2ZnJlZV9jYWxsX3JjdWAgaXMgbWF5YmUgdG9vIGdlbmVyYWwuXG5cblNvLCBmb3Igbm93LCBsZXQncyBpbmNsdWRlIGBfX2tmcmVlX3JjdV9zaGVhZmAgYW5kIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCBzZWUgaWYgbW9yZSBjYWxsZXJzIGFyZSBhdmFpbGFibGUgZm9yIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjI5LjEwODI4Njc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NDU3MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTExMD12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTExOnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTE0OT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNTMtXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTU0OlxcdFxcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcXHUwMDI2KChfX19wKS1cXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE1NS1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTI5OC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEyOTk6dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjMtfVxcbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cXG4tLVxcbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02MDkwLSAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxcbm1tL3NsdWIuYzo2MDkxOiAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcXG5tbS9zbHViLmMtNjA5Mi0gKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MzAuNTg0NzQ3NzI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODI1NzMzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBga2ZyZWVfcmN1X25vbG9ja2AgTWFjcm8qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbnRlcm5hbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBrZnJlZV9yY3Vfbm9sb2NrYCwgc28gbGV0J3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvcmN1cGRhdGUuaGAgZmlsZS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBtYWNybyBkZWZpbml0aW9uIHRoZXJlLiBUaGlzIHVzdWFsbHkgZ2l2ZXMgbWUgdGhlIHF1aWNrZXN0IHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIGl0IGNvbWVzIHRvIHRoZSBtZW1vcnkgcmVjbGFtYXRpb24gd2l0aG91dCB0aGUgbG9jay4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgdGhhdCBzY2hlZHVsZXMgdGhlIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGFuIG9iamVjdCwgaG9wZWZ1bGx5IGFsb25nc2lkZSBzb21lIGhpbnRzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIGluZnJhc3RydWN0dXJlLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIGFzIEkgZXhwZWN0LCB1c2luZyBpdCBhbmQgaXRzIHZhcmlhbnRzIGlzIGEga2V5IG9wdGltaXphdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbnVhbmNlIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyOTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjozNC40NjczMjQwNzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdCAqIEBrdnJoZjogdGhlIG5hbWUgb2YgdGhlIHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgd2l0aGluIHRoZSB0eXBlIG9mIEBwdHIuXFxuMTE0MTpcXHQgKlxcbjExNDI6XFx0ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xcbjExNDM6XFx0ICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbjExNDQ6XFx0ICogTGFyZ2Uga21hbGxvYyBhbmQgdm1hbGxvYyBvYmplY3RzIGFyZSBhbHdheXMgZGVmZXJyZWQuXFxuMTE0NTpcXHQgKlxcbjExNDY6XFx0ICoga2ZyZWVfcmN1X25vbG9jaygpIHN1cHBvcnRzIDItYXJnIHZhcmlhbnQgb25seS5cXG4xMTQ3OlxcdCAqL1xcbjExNDg6XFx0I2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNDk6XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xMTUwOlxcdFxcdHR5cGVvZiAocHRyKSBfX19wID0gKHB0cik7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNTI6XFx0XFx0aWYgKF9fX3ApIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMTE1MzpcXHRcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIGt2cmhmKSBcXHUwMDNlPSA0MDk2KTtcXHRcXHRcXFxcXFxuMTE1NDpcXHRcXHRcXHRrZnJlZV9jYWxsX3JjdV9ub2xvY2soXFx1MDAyNigoX19fcCktXFx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcXHRcXFxcXFxuMTE1NTpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNTY6XFx0fSB3aGlsZSAoMClcXG4xMTU3OlxcdFxcbjExNTg6XFx0LypcXG4xMTU5OlxcdCAqIFBsYWNlIHRoaXMgYWZ0ZXIgYSBsb2NrLWFjcXVpc2l0aW9uIHByaW1pdGl2ZSB0byBndWFyYW50ZWUgdGhhdFxcbjExNjA6XFx0ICogYW4gVU5MT0NLK0xPQ0sgcGFpciBhY3RzIGFzIGEgZnVsbCBiYXJyaWVyLiAgVGhpcyBndWFyYW50ZWUgYXBwbGllc1xcbjExNjE6XFx0ICogaWYgdGhlIFVOTE9DSyBhbmQgTE9DSyBhcmUgZXhlY3V0ZWQgYnkgdGhlIHNhbWUgQ1BVIG9yIGlmIHRoZVxcbjExNjI6XFx0ICogVU5MT0NLIGFuZCBMT0NLIG9wZXJhdGUgb24gdGhlIHNhbWUgbG9jayB2YXJpYWJsZS5cXG4xMTYzOlxcdCAqL1xcbjExNjQ6XFx0I2lmZGVmIENPTkZJR19BUkNIX1dFQUtfUkVMRUFTRV9BQ1FVSVJFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjM0LjQ2NzQzNzg0NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjAxNDAwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBga2ZyZWVfcmN1X25vbG9ja2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBga2ZyZWVfcmN1X25vbG9ja2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSBwYXR0ZXJucy4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGluIG15IGhlYWQ6ICpXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWw/IFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9iamVjdHMgYXJlIGJlaW5nIGZyZWVkIHRoaXMgd2F5PyBXaGF0J3MgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGtmcmVlX3JjdV9ub2xvY2tgIGlzIHByZWZlcnJlZCBvdmVyIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGBrZnJlZWAgb3IgdGhlIHN0YW5kYXJkIGBrZnJlZV9yY3VgPypcblxuSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgXCJubyBsb2NrXCIgYXBwZW5kYWdlLCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgZm9yIHNwZWNpZmljIHNpdHVhdGlvbnMgd2hlcmUgdGFraW5nIGEgZ2xvYmFsIGxvY2sgaXMgdW5kZXNpcmFibGUgb3IgdW5uZWNlc3NhcnkgZm9yIFJDVS1zYWZlIG1lbW9yeSBkZWFsbG9jYXRpb24uIFRoZXJlZm9yZSwgSSB3YW50IHRvIGxvb2sgZm9yIHNjZW5hcmlvcyB3aGVyZSBsb2NrIGNvbnRlbnRpb24gaXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb2RlIHBhdGhzIHVzZSBpdC5cblxuTXkgYnJhaW4ncyBhbHJlYWR5IGZpcmluZyB1cCBzZWFyY2ggcXVlcmllcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBzb3VyY2UgY29kZSwgbG9va2luZyBmb3IgY2FsbHMgdG8gYGtmcmVlX3JjdV9ub2xvY2tgLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiB1c2FnZS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBhbmQgc3luY2hyb25pemF0aW9uIGNvbnN0cmFpbnRzIHRoYXQgYXJlIHByb21wdGluZyB0aGUgdXNlIG9mIGBrZnJlZV9yY3Vfbm9sb2NrYC4gV2hhdCBzcGVjaWZpYyB0cmFkZS1vZmZzIGFyZSBiZWluZyBtYWRlIGluIGNob29zaW5nIHRoaXMgZnVuY3Rpb24/ICpJcyBpdCB1c2VkIGluIGludGVycnVwdCBjb250ZXh0PyBEb2VzIGl0IGltcGx5IHNwZWNpZmljIG1lbW9yeSBvcmRlcmluZyByZXF1aXJlbWVudHM/KiBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSAob3IgbGFjayB0aGVyZW9mKSBhcm91bmQgdGhlIGNhbGwgc2l0ZXMuIFRoaXMgY29udGV4dCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW50LlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZ2FpbiBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vdGl2YXRpb25zIGJlaGluZCBpdHMgdXNlIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEknbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCBvciBwb3NzaWJsZSBwaXRmYWxscyBpbiBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MzguMDY4ODQwOTc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMjI1MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdV9ub2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMzA9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM3LS8qKlxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTM4OiAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzktICogQHB0cjogcG9pbnRlciB0byBrZnJlZSBmb3IgZG91YmxlLWFyZ3VtZW50IGludm9jYXRpb25zLlxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDEtICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0MjogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDMtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDUtICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0NjogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQ3LSAqL1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTQ4OiNkZWZpbmUga2ZyZWVfcmN1X25vbG9jayhwdHIsIGt2cmhmKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0OS1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubGliL3Rlc3RzL3NsdWJfa3VuaXQuYz0zNDQ9c3RhdGljIHZvaWQgdGVzdF9ub2xvY2soc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcXG4tLVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzU5LVxcdGlmIChjYW5fdXNlX2tmcmVlX3JjdSBcXHUwMDI2XFx1MDAyNiAoY3R4LVxcdTAwM2VjYWxsYmFja19jb3VudCBcXHUwMDI2IDIpKVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM6MzYwOlxcdFxcdGtmcmVlX3JjdV9ub2xvY2sob2JqcCwga3ZyY3UpO1xcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVxcdGVsc2VcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjE4Nj12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbGFiX2NvbW1vbi5jLTIxODcte1xcbm1tL3NsYWJfY29tbW9uLmM6MjE4ODpcXHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xcbm1tL3NsYWJfY29tbW9uLmMtMjE4OS1cXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MzkuNTEwMDcwNjI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4OTk3NTczMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBhbmQgU0xVQiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIGRvIHdlIHN0YXJ0IHdpdGggdGhpcyBwZXJmb3JtYW5jZSBpc3N1ZT8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhlIHNsb3dkb3duLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhvc2UgYXJvdW5kIGBLVkZSRUVfUkNVX0JBVENIRURgLiBJIHN1c3BlY3QgdGhpcyBtaWdodCBiZSBwbGF5aW5nIGEgcm9sZSBpbiBob3cgd2UncmUgZnJlZWluZyBrZXJuZWwgbWVtb3J5LCBhbmQgYSBiYXRjaGVkIGFwcHJvYWNoIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRyYWRlLW9mZnMuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGNvbnNpZGVyIFNMVUIgc2hlYXZlcy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gUkNVLCBiYXRjaCBmcmVlaW5nLCBhbmQgdGhlIFNMVUIgYWxsb2NhdG9yJ3MgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBwZXJmb3JtYW5jZSB0d2Vha3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHNoZWF2ZXMgb3BlcmF0ZSwgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBDUFUgYWZmaW5pdHksIGFuZCB3aGV0aGVyIHRoYXQncyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGRpZmZlcmVudCBrbm9icyBhdmFpbGFibGUgdG8gbWUuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUsIHRyYWNpbmcgdGhlIGxpa2VseSBjb2RlIHBhdGhzIHRvIGlkZW50aWZ5IHdoZXJlIHdlIGNhbiBvcHRpbWl6ZS4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBhIG11bHRpLWZhY2V0ZWQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjo0My40MDk4MzA1ODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjgwOTE3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZGUkVFX1JDVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEzMD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDEtICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0MjogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDMtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xNDMxLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjE0MzI6I2lmbmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC90eXBlcy5oPTI1ND1zdHJ1Y3QgY2FsbGJhY2tfaGVhZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjU5LVxcbmluY2x1ZGUvbGludXgvdHlwZXMuaDoyNjA6I2lmZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xcbi0tXFxubW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcXG4tLVxcbm1tL0tjb25maWctMTY3LVxcbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzAyLVxcbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpXFxubW0vc2xhYl9jb21tb24uYy0xMzA0LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjUtXFxubW0vc2xhYl9jb21tb24uYzoxMzI2OiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTM1NT12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTM1OC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNTk6I2Vsc2UgLyogQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCAqL1xcbm1tL3NsYWJfY29tbW9uLmMtMTM2MC1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjI0Mj12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjI5NC1cXG5tbS9zbGFiX2NvbW1vbi5jOjIyOTU6I2VuZGlmIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6NDQuODc3OTI2NzM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MjExOTQ1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlIHByb2JhYmx5IGluIGBtbS9LY29uZmlnYCwgYW5kLCBnaXZlbiB0aGUgbGlrZWx5IG9yZ2FuaXphdGlvbiwgSSdtIGdvaW5nIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gYXJvdW5kIGxpbmUgMTY4LiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4gaXMgZGVmaW5lZC4gTGV0J3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjQ5LjQ5OTEyMzQwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ZW5kbWVudVxcbiAxNjE6XFx0XFxuIDE2MjpcXHRtZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbiAxNjM6XFx0XFxuIDE2NDpcXHRjb25maWcgU0xVQlxcbiAxNjU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAxNjY6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDE2NzpcXHRcXG4gMTY4OlxcdGNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4gMTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gMTcwOlxcdFxcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcXHUwMDI2XFx1MDAyNiAhVElOWV9SQ1VcXG4gMTcxOlxcdFxcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBTTFVCX1RJTllcXG4gMTc0OlxcdFxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAxNzY6XFx0XFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICAgQ29uZmlndXJlcyB0aGUgc2xhYiBhbGxvY2F0b3IgaW4gYSB3YXkgdG8gYWNoaWV2ZSBtaW5pbWFsIG1lbW9yeVxcbiAxNzk6XFx0XFx0ICAgZm9vdHByaW50LCBzYWNyaWZpY2luZyBzY2FsYWJpbGl0eSwgZGVidWdnaW5nIGFuZCBvdGhlciBmZWF0dXJlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6NDkuNDk5MjY0MjY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjY0MzU3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBSZWxhdGVkIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFBSRUVNUFRfUlQgc2l0dWF0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIHJlbGF0ZWQgb3Igbm90LCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSB1c2Ugb2Ygc2hlYXZlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gdXNlIGdyZXAgdG8gbG9vayBmb3IgdGhlIHRlcm1zIFwic2hlYWZcIiBhbmQgXCJzaGVhdmVzLFwiIGp1c3QgdG8gYmUgY29tcHJlaGVuc2l2ZSBhbmQgYWNjb3VudCBmb3Igc2luZ3VsYXIvcGx1cmFsIHZhcmlhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGRpc2NvdmVyIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgUFJFRU1QVF9SVCBhbmQgc2hlYXZlcyBpbnRlcmFjdCBvciBhcmUgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NDMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjUxLjU2NTcwMjk3MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MjAxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hlYWZ8c2hlYXZlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjI4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9zbGFiLmg9MjQwPXN0cnVjdCBrbWVtX2NhY2hlIHtcXG5tbS9zbGFiLmg6MjQxOlxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzIF9fcGVyY3B1ICpjcHVfc2hlYXZlcztcXG5tbS9zbGFiLmgtMjQyLVxcdC8qIFVzZWQgZm9yIHJldHJpZXZpbmcgcGFydGlhbCBzbGFicywgZXRjLiAqL1xcbi0tXFxubW0vc2xhYi5oLTI0OC1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcdFxcdC8qIEZyZWUgcG9pbnRlciBvZmZzZXQgKi9cXG5tbS9zbGFiLmg6MjQ5OlxcdHVuc2lnbmVkIGludCBzaGVhZl9jYXBhY2l0eTtcXG5tbS9zbGFiLmgtMjUwLVxcdHN0cnVjdCBrbWVtX2NhY2hlX29yZGVyX29iamVjdHMgb287XFxuLS1cXG5tbS9zbGFiLmgtMjk2LS8qXFxubW0vc2xhYi5oOjI5NzogKiBFdmVyeSBjYWNoZSBoYXMgIU5VTEwgcy1cXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxcbm1tL3NsYWIuaDoyOTg6ICogYm9vdHN0cmFwX3NoZWFmIHRlbXBvcmFyaWx5IGR1cmluZyBpbml0LCBvciBwZXJtYW5lbnRseSBmb3IgdGhlIGJvb3QgY2FjaGVzXFxubW0vc2xhYi5oLTI5OS0gKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXFxubW0vc2xhYi5oOjMwMDogKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cXG5tbS9zbGFiLmgtMzAxLSAqL1xcbm1tL3NsYWIuaDozMDI6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0zMDMte1xcbm1tL3NsYWIuaC0zMDQtXFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXFxubW0vc2xhYi5oOjMwNTpcXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHk7XFxubW0vc2xhYi5oLTMwNi19XFxuLS1cXG5tbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsYWIuaC00ODAtXFxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcXG5tbS9zbGFiLmg6NDgyOnZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpO1xcbm1tL3NsYWIuaDo0ODM6dm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxubW0vc2xhYi5oLTQ4NC1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MzE4PXN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMzQ2LVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MzQ3OlxcdGlmIChhcmdzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSlcXG5tbS9zbGFiX2NvbW1vbi5jLTM0OC1cXHRcXHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMxNS1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XFx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXFx0XFx0Z290byBmYWxsYmFjaztcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTYyMj1zdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2NjUtXFxubW0vc2xhYl9jb21tb24uYzoxNjY2OnN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxubW0vc2xhYl9jb21tb24uYy0xNjY3LXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XFx0XFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjAxMz12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzQtXFx0ICovXFxubW0vc2xhYl9jb21tb24uYzoyMDM1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXFx1MDAyNlxcdTAwMjYga2ZyZWVfcmN1X3NoZWFmKHB0cikpXFxubW0vc2xhYl9jb21tb24uYy0yMDM2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjE3Mz12b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbm1tL3NsYWJfY29tbW9uLmMtMjE3NC17XFxubW0vc2xhYl9jb21tb24uYzoyMTc1OlxcdGZsdXNoX2FsbF9yY3Vfc2hlYXZlcygpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjE3Ni1cXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMTg2PXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWJfY29tbW9uLmMtMjE4Ny17XFxubW0vc2xhYl9jb21tb24uYzoyMTg4OlxcdC8qIGtmcmVlX3JjdV9ub2xvY2soKSBtaWdodCBoYXZlIGRlZmVycmVkIGZyZWVzIGV2ZW4gd2l0aG91dCBzaGVhdmVzICovXFxubW0vc2xhYl9jb21tb24uYy0yMTg5LVxcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjE5MC1cXG5tbS9zbGFiX2NvbW1vbi5jOjIxOTE6XFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XFxubW0vc2xhYl9jb21tb24uYy0yMTkyLVxcdFxcdGNwdXNfcmVhZF9sb2NrKCk7XFxubW0vc2xhYl9jb21tb24uYzoyMTkzOlxcdFxcdGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHMpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjE5NC1cXHRcXHRjcHVzX3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9zbHViLmMtNjEtICogICAxLiAgc2xhYl9tdXRleCAoR2xvYmFsIE11dGV4KVxcbm1tL3NsdWIuYzo2MjogKiAgIDJhLiBrbWVtX2NhY2hlLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayAoTG9jYWwgdHJ5bG9jaylcXG5tbS9zbHViLmMtNjMtICogICAyYi4gYmFybi1cXHUwMDNlbG9jayAoU3BpbmxvY2spXFxuLS1cXG5tbS9zbHViLmMtMTMyLSAqXFxubW0vc2x1Yi5jOjEzMzogKiAgIGNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrIChsb2NhbF90cnlsb2NrKVxcbm1tL3NsdWIuYy0xMzQtICpcXG5tbS9zbHViLmM6MTM1OiAqICAgVGhpcyBsb2NrIHByb3RlY3RzIGZhc3RwYXRoIG9wZXJhdGlvbnMgb24gdGhlIHBlcmNwdSBzaGVhdmVzLiBPbiAhUlQgaXRcXG5tbS9zbHViLmMtMTM2LSAqICAgb25seSBkaXNhYmxlcyBwcmVlbXB0aW9uIGFuZCBkb2VzIG5vIGF0b21pYyBvcGVyYXRpb25zLiBBcyBsb25nIGFzIHRoZSBtYWluXFxubW0vc2x1Yi5jOjEzNzogKiAgIG9yIHNwYXJlIHNoZWFmIGNhbiBoYW5kbGUgdGhlIGFsbG9jYXRpb24gb3IgZnJlZSwgdGhlcmUgaXMgbm8gb3RoZXJcXG5tbS9zbHViLmMtMTM4LSAqICAgb3ZlcmhlYWQuXFxuLS1cXG5tbS9zbHViLmMtMTQyLSAqICAgVGhpcyBsb2NrIHByb3RlY3RzIHRoZSBvcGVyYXRpb25zIG9uIHBlci1OVU1BLW5vZGUgYmFybi4gSXQgY2FuIHF1aWNrbHlcXG5tbS9zbHViLmM6MTQzOiAqICAgc2VydmUgYW4gZW1wdHkgb3IgZnVsbCBzaGVhZiBpZiBhdmFpbGFibGUsIGFuZCBhdm9pZCBtb3JlIGV4cGVuc2l2ZSByZWZpbGxcXG5tbS9zbHViLmMtMTQ0LSAqICAgb3IgZmx1c2ggb3BlcmF0aW9uLlxcbi0tXFxubW0vc2x1Yi5jLTE0OC0gKiAgIE9iamVjdHMgbWF5IGhhdmUgdG8gYmUgZnJlZWQgdG8gdGhlaXIgc2xhYnMgd2hlbiB0aGV5IGFyZSBmcm9tIGEgcmVtb3RlXFxubW0vc2x1Yi5jOjE0OTogKiAgIG5vZGUgKHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsbGluZyBsb2NhbCBzaGVhdmVzIHdpdGggcmVtb3RlIG9iamVjdHMpXFxubW0vc2x1Yi5jOjE1MDogKiAgIG9yIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IGZ1bGwgc2hlYXZlcy4gT24gYXJjaGl0ZWN0dXJlcyBzdXBwb3J0aW5nXFxubW0vc2x1Yi5jLTE1MS0gKiAgIGNtcHhjaGdfZG91YmxlIHRoaXMgaXMgZG9uZSBieSBhIGxvY2tsZXNzIHVwZGF0ZSBvZiBzbGFiJ3MgZnJlZWxpc3QgYW5kXFxuLS1cXG5tbS9zbHViLmMtMTY0LSAqXFxubW0vc2x1Yi5jOjE2NTogKiBTTFVCIGFzc2lnbnMgdHdvIG9iamVjdCBhcnJheXMgY2FsbGVkIHNoZWF2ZXMgZm9yIGNhY2hpbmcgYWxsb2NhdGlvbnMgYW5kXFxubW0vc2x1Yi5jLTE2Ni0gKiBmcmVlcyBvbiBlYWNoIGNwdSwgd2l0aCBhIE5VTUEgbm9kZSBzaGFyZWQgYmFybiBmb3IgYmFsYW5jaW5nIGJldHdlZW4gY3B1cy5cXG5tbS9zbHViLmM6MTY3OiAqIEFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgcHJpbWFyaWx5IHNlcnZlZCBmcm9tIHRoZXNlIHNoZWF2ZXMuXFxubW0vc2x1Yi5jLTE2OC0gKlxcbi0tXFxubW0vc2x1Yi5jPTM2Mz1lbnVtIHN0YXRfaXRlbSB7XFxubW0vc2x1Yi5jOjM2NDpcXHRBTExPQ19GQVNUUEFUSCxcXHRcXHQvKiBBbGxvY2F0aW9uIGZyb20gcGVyY3B1IHNoZWF2ZXMgKi9cXG5tbS9zbHViLmMtMzY1LVxcdEFMTE9DX1NMT1dQQVRILFxcdFxcdC8qIEFsbG9jYXRpb24gZnJvbSBwYXJ0aWFsIG9yIG5ldyBzbGFiICovXFxubW0vc2x1Yi5jOjM2NjpcXHRGUkVFX1JDVV9TSEVBRixcXHRcXHQvKiBGcmVlIHRvIHJjdV9mcmVlIHNoZWFmICovXFxubW0vc2x1Yi5jOjM2NzpcXHRGUkVFX1JDVV9TSEVBRl9GQUlMLFxcdC8qIEZhaWxlZCB0byBmcmVlIHRvIGEgcmN1X2ZyZWUgc2hlYWYgKi9cXG5tbS9zbHViLmM6MzY4OlxcdEZSRUVfRkFTVFBBVEgsXFx0XFx0LyogRnJlZSB0byBwZXJjcHUgc2hlYXZlcyAqL1xcbm1tL3NsdWIuYy0zNjktXFx0RlJFRV9TTE9XUEFUSCxcXHRcXHQvKiBGcmVlIHRvIGEgc2xhYiAqL1xcbi0tXFxubW0vc2x1Yi5jLTM3Mi1cXHRBTExPQ19TTEFCLFxcdFxcdC8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi9cXG5tbS9zbHViLmM6MzczOlxcdEFMTE9DX05PREVfTUlTTUFUQ0gsXFx0LyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovXFxubW0vc2x1Yi5jLTM3NC1cXHRGUkVFX1NMQUIsXFx0XFx0LyogU2xhYiBmcmVlZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IgKi9cXG4tLVxcbm1tL3NsdWIuYy0zNzYtXFx0Q01QWENIR19ET1VCTEVfRkFJTCxcXHQvKiBGYWlsdXJlcyBvZiBzbGFiIGZyZWVsaXN0IHVwZGF0ZSAqL1xcbm1tL3NsdWIuYzozNzc6XFx0U0hFQUZfRkxVU0gsXFx0XFx0LyogT2JqZWN0cyBmbHVzaGVkIGZyb20gYSBzaGVhZiAqL1xcbm1tL3NsdWIuYzozNzg6XFx0U0hFQUZfUkVGSUxMLFxcdFxcdC8qIE9iamVjdHMgcmVmaWxsZWQgdG8gYSBzaGVhZiAqL1xcbm1tL3NsdWIuYzozNzk6XFx0U0hFQUZfQUxMT0MsXFx0XFx0LyogQWxsb2NhdGlvbiBvZiBhbiBlbXB0eSBzaGVhZiBpbmNsdWRpbmcgb3ZlcnNpemVkIG9uZXMgKi9cXG5tbS9zbHViLmM6MzgwOlxcdFNIRUFGX0ZSRUUsXFx0XFx0LyogRnJlZWluZyBvZiBhbiBlbXB0eSBzaGVhZiBpbmNsdWRpbmcgb3ZlcnNpemVkIG9uZXMgKi9cXG5tbS9zbHViLmM6MzgxOlxcdEJBUk5fR0VULFxcdFxcdC8qIEdvdCBmdWxsIHNoZWFmIGZyb20gYmFybiAqL1xcbm1tL3NsdWIuYzozODI6XFx0QkFSTl9HRVRfRkFJTCxcXHRcXHQvKiBGYWlsZWQgdG8gZ2V0IGZ1bGwgc2hlYWYgZnJvbSBiYXJuICovXFxubW0vc2x1Yi5jOjM4MzpcXHRCQVJOX1BVVCxcXHRcXHQvKiBQdXQgZnVsbCBzaGVhZiB0byBiYXJuICovXFxubW0vc2x1Yi5jOjM4NDpcXHRCQVJOX1BVVF9GQUlMLFxcdFxcdC8qIEZhaWxlZCB0byBwdXQgZnVsbCBzaGVhZiB0byBiYXJuICovXFxubW0vc2x1Yi5jOjM4NTpcXHRTSEVBRl9QUkVGSUxMX0ZBU1QsXFx0LyogU2hlYWYgcHJlZmlsbCBncmFiYmVkIHRoZSBzcGFyZSBzaGVhZiAqL1xcbm1tL3NsdWIuYzozODY6XFx0U0hFQUZfUFJFRklMTF9TTE9XLFxcdC8qIFNoZWFmIHByZWZpbGwgZm91bmQgbm8gc3BhcmUgc2hlYWYgKi9cXG5tbS9zbHViLmM6Mzg3OlxcdFNIRUFGX1BSRUZJTExfT1ZFUlNJWkUsXFx0LyogQWxsb2NhdGlvbiBvZiBvdmVyc2l6ZSBzaGVhZiBmb3IgcHJlZmlsbCAqL1xcbm1tL3NsdWIuYzozODg6XFx0U0hFQUZfUkVUVVJOX0ZBU1QsXFx0LyogU2hlYWYgcmV0dXJuIHJlYXR0YWNoZWQgc3BhcmUgc2hlYWYgKi9cXG5tbS9zbHViLmMtMzg5LVxcdFNIRUFGX1JFVFVSTl9TTE9XLFxcdC8qIFNoZWFmIHJldHVybiBjb3VsZCBub3QgcmVhdHRhY2ggc3BhcmUgKi9cXG4tLVxcbm1tL3NsdWIuYz00MjE9c3RydWN0IG5vZGVfYmFybiB7XFxubW0vc2x1Yi5jLTQyMi1cXHRzcGlubG9ja190IGxvY2s7XFxubW0vc2x1Yi5jOjQyMzpcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNoZWF2ZXNfZnVsbDtcXG5tbS9zbHViLmM6NDI0OlxcdHN0cnVjdCBsaXN0X2hlYWQgc2hlYXZlc19lbXB0eTtcXG5tbS9zbHViLmMtNDI1LVxcdHVuc2lnbmVkIGludCBucl9mdWxsO1xcbi0tXFxubW0vc2x1Yi5jLTQyOC1cXG5tbS9zbHViLmM6NDI5OnN0cnVjdCBzbGFiX3NoZWFmIHtcXG5tbS9zbHViLmMtNDMwLVxcdHVuaW9uIHtcXG4tLVxcbm1tL3NsdWIuYy00MzQtXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgbGxub2RlO1xcbm1tL3NsdWIuYzo0MzU6XFx0XFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXFxubW0vc2x1Yi5jLTQzNi1cXHRcXHRzdHJ1Y3Qge1xcbi0tXFxubW0vc2x1Yi5jLTQ0Mi1cXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5tbS9zbHViLmM6NDQzOlxcdGludCBub2RlOyAvKiBvbmx5IHVzZWQgZm9yIHJjdV9zaGVhZiAqL1xcbm1tL3NsdWIuYy00NDQtXFx0dm9pZCAqb2JqZWN0c1tdO1xcbi0tXFxubW0vc2x1Yi5jLTQ0Ni1cXG5tbS9zbHViLmM6NDQ3OnN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzIHtcXG5tbS9zbHViLmMtNDQ4LVxcdGxvY2FsX3RyeWxvY2tfdCBsb2NrO1xcbm1tL3NsdWIuYzo0NDk6XFx0c3RydWN0IHNsYWJfc2hlYWYgKm1haW47IC8qIG5ldmVyIE5VTEwgd2hlbiB1bmxvY2tlZCAqL1xcbm1tL3NsdWIuYzo0NTA6XFx0c3RydWN0IHNsYWJfc2hlYWYgKnNwYXJlOyAvKiBlbXB0eSBvciBmdWxsLCBtYXkgYmUgTlVMTCAqL1xcbm1tL3NsdWIuYzo0NTE6XFx0c3RydWN0IHNsYWJfc2hlYWYgKnJjdV9mcmVlOyAvKiBmb3IgYmF0Y2hpbmcga2ZyZWVfcmN1KCkgKi9cXG5tbS9zbHViLmMtNDUyLX07XFxuLS1cXG5tbS9zbHViLmM9NTA2PXN0YXRpYyBub2RlbWFza190IHNsYWJfYmFybl9ub2RlcztcXG4tLVxcbm1tL3NsdWIuYy01MDgtLypcXG5tbS9zbHViLmM6NTA5OiAqIFdvcmtxdWV1ZSB1c2VkIGZvciBmbHVzaGluZyBjcHUgYW5kIGtmcmVlX3JjdSBzaGVhdmVzLlxcbm1tL3NsdWIuYy01MTAtICovXFxuLS1cXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTIwNzMtLypcXG5tbS9zbHViLmM6MjA3NDogKiBUaGUgYWxsb2NhdGVkIG9iamNnIHBvaW50ZXJzIGFycmF5IG9yIHNoZWFmIGlzIG5vdCBhY2NvdW50ZWQgZGlyZWN0bHkuXFxubW0vc2x1Yi5jLTIwNzUtICogTW9yZW92ZXIsIGl0IHNob3VsZCBub3QgY29tZSBmcm9tIERNQSBidWZmZXIgYW5kIGlzIG5vdCByZWFkaWx5XFxuLS1cXG5tbS9zbHViLmM9Mjc5NT1zdGF0aWMgaW5saW5lIHZvaWQgKnNldHVwX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTI4MDYtXFxubW0vc2x1Yi5jOjI4MDc6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpfX2FsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxubW0vc2x1Yi5jLTI4MDgtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB1bnNpZ25lZCBpbnQgY2FwYWNpdHkpXFxubW0vc2x1Yi5jLTI4MDkte1xcbm1tL3NsdWIuYzoyODEwOlxcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcXG5tbS9zbHViLmM6MjgxMTpcXHRzaXplX3Qgc2hlYWZfc2l6ZTtcXG5tbS9zbHViLmMtMjgxMi1cXG4tLVxcbm1tL3NsdWIuYy0yODE0LVxcdCAqIFByZXZlbnQgcmVjdXJzaW9uIHRvIHRoZSBzYW1lIGNhY2hlLCBvciBhIGRlZXAgc3RhY2sgb2Yga21hbGxvY3Mgb2ZcXG5tbS9zbHViLmM6MjgxNTpcXHQgKiB2YXJ5aW5nIHNpemVzIChzaGVhZiBjYXBhY2l0eSBtaWdodCBkaWZmZXIgZm9yIGVhY2gga21hbGxvYyBzaXplXFxubW0vc2x1Yi5jLTI4MTYtXFx0ICogYnVja2V0KVxcbi0tXFxubW0vc2x1Yi5jLTI4MjAtXFxubW0vc2x1Yi5jOjI4MjE6XFx0c2hlYWZfc2l6ZSA9IHN0cnVjdF9zaXplKHNoZWFmLCBvYmplY3RzLCBjYXBhY2l0eSk7XFxubW0vc2x1Yi5jOjI4MjI6XFx0c2hlYWYgPSBrbWFsbG9jX2ZsYWdzKHNoZWFmX3NpemUsIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBOVU1BX05PX05PREUpO1xcbm1tL3NsdWIuYy0yODIzLVxcbm1tL3NsdWIuYzoyODI0OlxcdGlmICh1bmxpa2VseSghc2hlYWYpKVxcbm1tL3NsdWIuYy0yODI1LVxcdFxcdHJldHVybiBOVUxMO1xcbm1tL3NsdWIuYy0yODI2LVxcbm1tL3NsdWIuYzoyODI3OlxcdHNoZWFmLVxcdTAwM2VjYWNoZSA9IHM7XFxubW0vc2x1Yi5jLTI4MjgtXFxuLS1cXG5tbS9zbHViLmMtMjgzMC1cXG5tbS9zbHViLmM6MjgzMTpcXHRyZXR1cm4gc2hlYWY7XFxubW0vc2x1Yi5jLTI4MzItfVxcbm1tL3NsdWIuYy0yODMzLVxcbm1tL3NsdWIuYzoyODM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yODM1LVxcdFxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI4NDEtXFxubW0vc2x1Yi5jOjI4NDI6XFx0cmV0dXJuIF9fYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncywgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHkpO1xcbm1tL3NsdWIuYy0yODQzLX1cXG5tbS9zbHViLmMtMjg0NC1cXG5tbS9zbHViLmM6Mjg0NTpzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcXG5tbS9zbHViLmMtMjg0Ni1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjg0OC1cXHQvKlxcbm1tL3NsdWIuYzoyODQ5OlxcdCAqIElmIHRoZSBzaGVhZiB3YXMgY3JlYXRlZCB3aXRoIFNMQUJfQUxMT0NfTk9fUkVDVVJTRSBmbGFnIHRoZW4gaXRzXFxubW0vc2x1Yi5jLTI4NTAtXFx0ICogY29ycmVzcG9uZGluZyBleHRlbnNpb24gaXMgTlVMTCBhbmQgYWxsb2NfdGFnX3N1YigpIHdpbGwgdGhyb3cgYVxcbm1tL3NsdWIuYy0yODUxLVxcdCAqIHdhcm5pbmcsIHRoZXJlZm9yZSByZXBsYWNlIE5VTEwgd2l0aCBDT0RFVEFHX0VNUFRZIHRvIGluZGljYXRlXFxubW0vc2x1Yi5jOjI4NTI6XFx0ICogdGhhdCB0aGUgZXh0ZW5zaW9uIGZvciB0aGlzIHNoZWFmIGlzIGV4cGVjdGVkIHRvIGJlIE5VTEwuXFxubW0vc2x1Yi5jLTI4NTMtXFx0ICovXFxubW0vc2x1Yi5jLTI4NTQtXFx0aWYgKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9LTUFMTE9DKVxcbm1tL3NsdWIuYzoyODU1OlxcdFxcdG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoc2hlYWYpO1xcbm1tL3NsdWIuYy0yODU2LVxcbm1tL3NsdWIuYzoyODU3OlxcdFZNX1dBUk5fT05fT05DRShzaGVhZi1cXHUwMDNlc2l6ZSBcXHUwMDNlIDApO1xcbm1tL3NsdWIuYy0yODU4LVxcbm1tL3NsdWIuYy0yODU5LVxcdGlmICh1bmxpa2VseShmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSykpXFxubW0vc2x1Yi5jOjI4NjA6XFx0XFx0a2ZyZWVfbm9sb2NrKHNoZWFmKTtcXG5tbS9zbHViLmMtMjg2MS1cXHRlbHNlXFxubW0vc2x1Yi5jOjI4NjI6XFx0XFx0a2ZyZWUoc2hlYWYpO1xcbm1tL3NsdWIuYy0yODYzLVxcbi0tXFxubW0vc2x1Yi5jLTI4NjYtXFxubW0vc2x1Yi5jOjI4Njc6c3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0yODY4LXtcXG5tbS9zbHViLmM6Mjg2OTpcXHRfX2ZyZWVfZW1wdHlfc2hlYWYocywgc2hlYWYsIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG5tbS9zbHViLmMtMjg3MC19XFxuLS1cXG5tbS9zbHViLmM9Mjg3Mz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy0yODc1LVxcbm1tL3NsdWIuYzoyODc2OnN0YXRpYyBpbnQgcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxubW0vc2x1Yi5jLTI4NzctXFx0XFx0XFx0IGdmcF90IGdmcClcXG5tbS9zbHViLmMtMjg3OC17XFxubW0vc2x1Yi5jOjI4Nzk6XFx0aW50IHRvX2ZpbGwgPSBzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSAtIHNoZWFmLVxcdTAwM2VzaXplO1xcbm1tL3NsdWIuYy0yODgwLVxcdGludCBmaWxsZWQ7XFxuLS1cXG5tbS9zbHViLmMtMjg4NC1cXG5tbS9zbHViLmM6Mjg4NTpcXHRmaWxsZWQgPSByZWZpbGxfb2JqZWN0cyhzLCBcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbc2hlYWYtXFx1MDAzZXNpemVdLCBnZnAsIHRvX2ZpbGwsXFxubW0vc2x1Yi5jLTI4ODYtXFx0XFx0XFx0XFx0dG9fZmlsbCk7XFxubW0vc2x1Yi5jLTI4ODctXFxubW0vc2x1Yi5jOjI4ODg6XFx0c2hlYWYtXFx1MDAzZXNpemUgKz0gZmlsbGVkO1xcbm1tL3NsdWIuYy0yODg5LVxcbi0tXFxubW0vc2x1Yi5jLTI4OTgtLypcXG5tbS9zbHViLmM6Mjg5OTogKiBNYXhpbXVtIG51bWJlciBvZiBvYmplY3RzIGZyZWVkIGR1cmluZyBhIHNpbmdsZSBmbHVzaCBvZiBtYWluIHBjcyBzaGVhZi5cXG5tbS9zbHViLmMtMjkwMC0gKiBUcmFuc2xhdGVzIGRpcmVjdGx5IHRvIGFuIG9uLXN0YWNrIGFycmF5IHNpemUuXFxuLS1cXG5tbS9zbHViLmM9MjkwND1zdGF0aWMgdm9pZCBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xcbi0tXFxubW0vc2x1Yi5jLTI5MDYtLypcXG5tbS9zbHViLmM6MjkwNzogKiBGcmVlIGFsbCBvYmplY3RzIGZyb20gdGhlIG1haW4gc2hlYWYuIEluIG9yZGVyIHRvIHBlcmZvcm1cXG5tbS9zbHViLmM6MjkwODogKiBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKCkgb3V0c2lkZSBvZiBjcHVfc2hlYXZlcy1cXHUwMDNlbG9jaywgd29yayBpbiBiYXRjaGVzIHdoZXJlXFxubW0vc2x1Yi5jLTI5MDktICogb2JqZWN0IHBvaW50ZXJzIGFyZSBtb3ZlZCB0byBhIG9uLXN0YWNrIGFycmF5IHVuZGVyIHRoZSBsb2NrLiBUbyBib3VuZCB0aGVcXG4tLVxcbm1tL3NsdWIuYy0yOTExLSAqXFxubW0vc2x1Yi5jOjI5MTI6ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayBsb2NrZWQsIHJldHVybnMgd2l0aCB0aGUgbG9ja1xcbm1tL3NsdWIuYy0yOTEzLSAqIHVubG9ja2VkLlxcbi0tXFxubW0vc2x1Yi5jLTI5MTYtICovXFxubW0vc2x1Yi5jOjI5MTc6c3RhdGljIHVuc2lnbmVkIGludCBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTI5MTgte1xcbm1tL3NsdWIuYzoyOTE5OlxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XFxubW0vc2x1Yi5jLTI5MjAtXFx0dW5zaWduZWQgaW50IGJhdGNoLCByZW1haW5pbmc7XFxubW0vc2x1Yi5jLTI5MjEtXFx0dm9pZCAqb2JqZWN0c1tQQ1NfQkFUQ0hfTUFYXTtcXG5tbS9zbHViLmM6MjkyMjpcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWY7XFxubW0vc2x1Yi5jLTI5MjMtXFxubW0vc2x1Yi5jOjI5MjQ6XFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKTtcXG5tbS9zbHViLmMtMjkyNS1cXG5tbS9zbHViLmM6MjkyNjpcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbm1tL3NsdWIuYzoyOTI3OlxcdHNoZWFmID0gcGNzLVxcdTAwM2VtYWluO1xcbm1tL3NsdWIuYy0yOTI4LVxcbm1tL3NsdWIuYzoyOTI5OlxcdGJhdGNoID0gbWluKFBDU19CQVRDSF9NQVgsIHNoZWFmLVxcdTAwM2VzaXplKTtcXG5tbS9zbHViLmMtMjkzMC1cXG5tbS9zbHViLmM6MjkzMTpcXHRzaGVhZi1cXHUwMDNlc2l6ZSAtPSBiYXRjaDtcXG5tbS9zbHViLmM6MjkzMjpcXHRtZW1jcHkob2JqZWN0cywgc2hlYWYtXFx1MDAzZW9iamVjdHMgKyBzaGVhZi1cXHUwMDNlc2l6ZSwgYmF0Y2ggKiBzaXplb2Yodm9pZCAqKSk7XFxubW0vc2x1Yi5jLTI5MzMtXFxubW0vc2x1Yi5jOjI5MzQ6XFx0cmVtYWluaW5nID0gc2hlYWYtXFx1MDAzZXNpemU7XFxubW0vc2x1Yi5jLTI5MzUtXFxubW0vc2x1Yi5jOjI5MzY6XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxubW0vc2x1Yi5jLTI5MzctXFxuLS1cXG5tbS9zbHViLmMtMjk0NC1cXG5tbS9zbHViLmM6Mjk0NTpzdGF0aWMgdm9pZCBzaGVhZl9mbHVzaF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0yOTQ2LXtcXG4tLVxcbm1tL3NsdWIuYy0yOTQ5LVxcdGRvIHtcXG5tbS9zbHViLmM6Mjk1MDpcXHRcXHRsb2NhbF9sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxubW0vc2x1Yi5jLTI5NTEtXFxubW0vc2x1Yi5jOjI5NTI6XFx0XFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xcbm1tL3NsdWIuYy0yOTUzLVxcbi0tXFxubW0vc2x1Yi5jLTI5NTctLypcXG5tbS9zbHViLmM6Mjk1ODogKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1haW4gc2hlYWYgd2FzIGF0IGxlYXN0IHBhcnRpYWxseSBmbHVzaGVkLlxcbm1tL3NsdWIuYy0yOTU5LSAqL1xcbm1tL3NsdWIuYzoyOTYwOnN0YXRpYyBib29sIHNoZWFmX3RyeV9mbHVzaF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0yOTYxLXtcXG4tLVxcbm1tL3NsdWIuYy0yOTY1LVxcdGRvIHtcXG5tbS9zbHViLmM6Mjk2NjpcXHRcXHRpZiAoIWxvY2FsX3RyeWxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSlcXG5tbS9zbHViLmMtMjk2Ny1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vc2x1Yi5jLTI5NjktXFx0XFx0cmV0ID0gdHJ1ZTtcXG5tbS9zbHViLmM6Mjk3MDpcXHRcXHRyZW1haW5pbmcgPSBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2gocyk7XFxubW0vc2x1Yi5jLTI5NzEtXFxuLS1cXG5tbS9zbHViLmMtMjk3Ny0vKlxcbm1tL3NsdWIuYzoyOTc4OiAqIEZyZWUgYWxsIG9iamVjdHMgZnJvbSBhIHNoZWFmIHRoYXQncyB1bnVzZWQsIGkuZS4gbm90IGxpbmtlZCB0byBhbnlcXG5tbS9zbHViLmM6Mjk3OTogKiBjcHVfc2hlYXZlcywgc28gd2UgbmVlZCBubyBsb2NraW5nIGFuZCBiYXRjaGluZy4gVGhlIGxvY2tpbmcgaXMgYWxzbyBub3RcXG5tbS9zbHViLmM6Mjk4MDogKiBuZWNlc3Nhcnkgd2hlbiBmbHVzaGluZyBjcHUncyBzaGVhdmVzIChib3RoIHNwYXJlIGFuZCBtYWluKSBkdXJpbmcgY3B1XFxubW0vc2x1Yi5jLTI5ODEtICogaG90cmVtb3ZlIGFzIHRoZSBjcHUgaXMgbm90IGV4ZWN1dGluZyBhbnltb3JlLlxcbm1tL3NsdWIuYy0yOTgyLSAqL1xcbm1tL3NsdWIuYzoyOTgzOnN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX3VudXNlZChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0yOTg0LXtcXG5tbS9zbHViLmM6Mjk4NTpcXHRpZiAoIXNoZWFmLVxcdTAwM2VzaXplKVxcbm1tL3NsdWIuYy0yOTg2LVxcdFxcdHJldHVybjtcXG5tbS9zbHViLmMtMjk4Ny1cXG5tbS9zbHViLmM6Mjk4ODpcXHRzdGF0X2FkZChzLCBTSEVBRl9GTFVTSCwgc2hlYWYtXFx1MDAzZXNpemUpO1xcbm1tL3NsdWIuYy0yOTg5LVxcbm1tL3NsdWIuYzoyOTkwOlxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2hlYWYtXFx1MDAzZXNpemUsIFxcdTAwMjZzaGVhZi1cXHUwMDNlb2JqZWN0c1swXSk7XFxubW0vc2x1Yi5jLTI5OTEtXFxubW0vc2x1Yi5jOjI5OTI6XFx0c2hlYWYtXFx1MDAzZXNpemUgPSAwO1xcbm1tL3NsdWIuYy0yOTkzLX1cXG5tbS9zbHViLmMtMjk5NC1cXG5tbS9zbHViLmM6Mjk5NTpzdGF0aWMgYm9vbCBfX3JjdV9mcmVlX3NoZWFmX3ByZXBhcmUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jOjI5OTY6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxubW0vc2x1Yi5jLTI5OTcte1xcbm1tL3NsdWIuYy0yOTk4LVxcdGJvb2wgaW5pdCA9IHNsYWJfd2FudF9pbml0X29uX2ZyZWUocyk7XFxubW0vc2x1Yi5jOjI5OTk6XFx0dm9pZCAqKnAgPSBcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbMF07XFxubW0vc2x1Yi5jLTMwMDAtXFx0dW5zaWduZWQgaW50IGkgPSAwO1xcbi0tXFxubW0vc2x1Yi5jLTMwMDItXFxubW0vc2x1Yi5jOjMwMDM6XFx0d2hpbGUgKGkgXFx1MDAzYyBzaGVhZi1cXHUwMDNlc2l6ZSkge1xcbm1tL3NsdWIuYy0zMDA0LVxcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xcbi0tXFxubW0vc2x1Yi5jLTMwMDktXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCB0cnVlKSkpIHtcXG5tbS9zbHViLmM6MzAxMDpcXHRcXHRcXHRwW2ldID0gcFstLXNoZWFmLVxcdTAwM2VzaXplXTtcXG5tbS9zbHViLmMtMzAxMS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3NsdWIuYy0zMDIyLVxcbm1tL3NsdWIuYzozMDIzOnN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmX25vYmFybihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxubW0vc2x1Yi5jLTMwMjQte1xcbm1tL3NsdWIuYzozMDI1OlxcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcXG5tbS9zbHViLmMtMzAyNi1cXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG5tbS9zbHViLmMtMzAyNy1cXG5tbS9zbHViLmM6MzAyODpcXHRzaGVhZiA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc2xhYl9zaGVhZiwgcmN1X2hlYWQpO1xcbm1tL3NsdWIuYzozMDI5OlxcdHMgPSBzaGVhZi1cXHUwMDNlY2FjaGU7XFxubW0vc2x1Yi5jLTMwMzAtXFxubW0vc2x1Yi5jOjMwMzE6XFx0X19yY3VfZnJlZV9zaGVhZl9wcmVwYXJlKHMsIHNoZWFmKTtcXG5tbS9zbHViLmMtMzAzMi1cXG5tbS9zbHViLmM6MzAzMzpcXHRzaGVhZl9mbHVzaF91bnVzZWQocywgc2hlYWYpO1xcbm1tL3NsdWIuYy0zMDM0LVxcbm1tL3NsdWIuYzozMDM1OlxcdGZyZWVfZW1wdHlfc2hlYWYocywgc2hlYWYpO1xcbm1tL3NsdWIuYy0zMDM2LX1cXG4tLVxcbm1tL3NsdWIuYy0zMDM5LSAqIENhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgbWlncmF0aW9uIGlzIGRpc2FibGVkIGluIG9yZGVyIHRvIGZ1bGx5IGZsdXNoXFxubW0vc2x1Yi5jOjMwNDA6ICogc2luZ2xlIGNwdSdzIHNoZWF2ZXNcXG5tbS9zbHViLmMtMzA0MS0gKlxcbi0tXFxubW0vc2x1Yi5jPTMwNDc9c3RhdGljIHZvaWQgcGNzX2ZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtMzA0OC17XFxubW0vc2x1Yi5jOjMwNDk6XFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcXG5tbS9zbHViLmM6MzA1MDpcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc3BhcmUsICpyY3VfZnJlZTtcXG5tbS9zbHViLmMtMzA1MS1cXG5tbS9zbHViLmM6MzA1MjpcXHRsb2NhbF9sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxubW0vc2x1Yi5jOjMwNTM6XFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzKTtcXG5tbS9zbHViLmMtMzA1NC1cXG4tLVxcbm1tL3NsdWIuYy0zMDYwLVxcbm1tL3NsdWIuYzozMDYxOlxcdGxvY2FsX3VubG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spO1xcbm1tL3NsdWIuYy0zMDYyLVxcbm1tL3NsdWIuYy0zMDYzLVxcdGlmIChzcGFyZSkge1xcbm1tL3NsdWIuYzozMDY0OlxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzcGFyZSk7XFxubW0vc2x1Yi5jOjMwNjU6XFx0XFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzcGFyZSk7XFxubW0vc2x1Yi5jLTMwNjYtXFx0fVxcbi0tXFxubW0vc2x1Yi5jLTMwNjgtXFx0aWYgKHJjdV9mcmVlKVxcbm1tL3NsdWIuYzozMDY5OlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZyY3VfZnJlZS1cXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmX25vYmFybik7XFxubW0vc2x1Yi5jLTMwNzAtXFxubW0vc2x1Yi5jOjMwNzE6XFx0c2hlYWZfZmx1c2hfbWFpbihzKTtcXG5tbS9zbHViLmMtMzA3Mi19XFxuLS1cXG5tbS9zbHViLmM9MzA3ND1zdGF0aWMgdm9pZCBfX3Bjc19mbHVzaF9hbGxfY3B1KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB1bnNpZ25lZCBpbnQgY3B1KVxcbm1tL3NsdWIuYy0zMDc1LXtcXG5tbS9zbHViLmM6MzA3NjpcXHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzO1xcbm1tL3NsdWIuYy0zMDc3LVxcbm1tL3NsdWIuYzozMDc4OlxcdHBjcyA9IHBlcl9jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzLCBjcHUpO1xcbm1tL3NsdWIuYy0zMDc5LVxcbm1tL3NsdWIuYy0zMDgwLVxcdC8qIFRoZSBjcHUgaXMgbm90IGV4ZWN1dGluZyBhbnltb3JlIHNvIHdlIGRvbid0IG5lZWQgcGNzLVxcdTAwM2Vsb2NrICovXFxubW0vc2x1Yi5jOjMwODE6XFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHBjcy1cXHUwMDNlbWFpbik7XFxubW0vc2x1Yi5jLTMwODItXFx0aWYgKHBjcy1cXHUwMDNlc3BhcmUpIHtcXG5tbS9zbHViLmM6MzA4MzpcXHRcXHRzaGVhZl9mbHVzaF91bnVzZWQocywgcGNzLVxcdTAwM2VzcGFyZSk7XFxubW0vc2x1Yi5jOjMwODQ6XFx0XFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBwY3MtXFx1MDAzZXNwYXJlKTtcXG5tbS9zbHViLmMtMzA4NS1cXHRcXHRwY3MtXFx1MDAzZXNwYXJlID0gTlVMTDtcXG4tLVxcbm1tL3NsdWIuYy0zMDg4LVxcdGlmIChwY3MtXFx1MDAzZXJjdV9mcmVlKSB7XFxubW0vc2x1Yi5jOjMwODk6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBjcy1cXHUwMDNlcmN1X2ZyZWUtXFx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZl9ub2Jhcm4pO1xcbm1tL3NsdWIuYy0zMDkwLVxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBOVUxMO1xcbi0tXFxubW0vc2x1Yi5jPTMwOTQ9c3RhdGljIHZvaWQgcGNzX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMzEwMS1cXHQgKi9cXG5tbS9zbHViLmM6MzEwMjpcXHRpZiAoIXMtXFx1MDAzZWNwdV9zaGVhdmVzKVxcbm1tL3NsdWIuYy0zMTAzLVxcdFxcdHJldHVybjtcXG5tbS9zbHViLmMtMzEwNC1cXG5tbS9zbHViLmM6MzEwNTpcXHQvKiBwY3MtXFx1MDAzZW1haW4gY2FuIG9ubHkgcG9pbnQgdG8gdGhlIGJvb3RzdHJhcCBzaGVhZiwgbm90aGluZyB0byBmcmVlICovXFxubW0vc2x1Yi5jOjMxMDY6XFx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcXG5tbS9zbHViLmMtMzEwNy1cXHRcXHRnb3RvIGZyZWVfcGNzO1xcbi0tXFxubW0vc2x1Yi5jLTMxMDktXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbm1tL3NsdWIuYzozMTEwOlxcdFxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XFxubW0vc2x1Yi5jLTMxMTEtXFxubW0vc2x1Yi5jOjMxMTI6XFx0XFx0cGNzID0gcGVyX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMsIGNwdSk7XFxubW0vc2x1Yi5jLTMxMTMtXFxuLS1cXG5tbS9zbHViLmMtMzEyMy1cXHRcXHQgKiB3YXJuaW5ncyBoZXJlIHRyaWdnZXIsIGFuZCB3ZSBzaG91bGQgcmF0aGVyIGxlYXZlIG9iamVjdHMgYW5kXFxubW0vc2x1Yi5jOjMxMjQ6XFx0XFx0ICogc2hlYXZlcyB0byBsZWFrIGluIHRoYXQgY2FzZS5cXG5tbS9zbHViLmMtMzEyNS1cXHRcXHQgKi9cXG4tLVxcbm1tL3NsdWIuYy0zMTMwLVxcdFxcdGlmICghV0FSTl9PTihwY3MtXFx1MDAzZW1haW4tXFx1MDAzZXNpemUpKSB7XFxubW0vc2x1Yi5jOjMxMzE6XFx0XFx0XFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBwY3MtXFx1MDAzZW1haW4pO1xcbm1tL3NsdWIuYy0zMTMyLVxcdFxcdFxcdHBjcy1cXHUwMDNlbWFpbiA9IE5VTEw7XFxuLS1cXG5tbS9zbHViLmMtMzEzNi1mcmVlX3BjczpcXG5tbS9zbHViLmM6MzEzNzpcXHRmcmVlX3BlcmNwdShzLVxcdTAwM2VjcHVfc2hlYXZlcyk7XFxubW0vc2x1Yi5jOjMxMzg6XFx0cy1cXHUwMDNlY3B1X3NoZWF2ZXMgPSBOVUxMO1xcbm1tL3NsdWIuYy0zMTM5LX1cXG5tbS9zbHViLmMtMzE0MC1cXG5tbS9zbHViLmM6MzE0MTpzdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKmJhcm5fZ2V0X2VtcHR5X3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sXFxubW0vc2x1Yi5jLTMxNDItXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMzE0My17XFxubW0vc2x1Yi5jOjMxNDQ6XFx0c3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5ID0gTlVMTDtcXG5tbS9zbHViLmMtMzE0NS1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxubW0vc2x1Yi5jLTMxNTUtXFx0aWYgKGxpa2VseShiYXJuLVxcdTAwM2Vucl9lbXB0eSkpIHtcXG5tbS9zbHViLmM6MzE1NjpcXHRcXHRlbXB0eSA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZW1wdHksXFxubW0vc2x1Yi5jOjMxNTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiX3NoZWFmLCBiYXJuX2xpc3QpO1xcbm1tL3NsdWIuYy0zMTU4LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZlbXB0eS1cXHUwMDNlYmFybl9saXN0KTtcXG4tLVxcbm1tL3NsdWIuYy0zMTY5LSAqIGludGVuZGVkIGFjdGlvbiBkdWUgdG8gYSByYWNlIG9yIGNwdSBtaWdyYXRpb24uIFRodXMgdGhleSBkbyBub3QgY2hlY2sgdGhlXFxubW0vc2x1Yi5jOjMxNzA6ICogZW1wdHkgb3IgZnVsbCBzaGVhZiBsaW1pdHMgZm9yIHNpbXBsaWNpdHkuXFxubW0vc2x1Yi5jLTMxNzEtICovXFxubW0vc2x1Yi5jLTMxNzItXFxubW0vc2x1Yi5jOjMxNzM6c3RhdGljIHZvaWQgYmFybl9wdXRfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0zMTc0LXtcXG4tLVxcbm1tL3NsdWIuYy0zMTc4LVxcbm1tL3NsdWIuYzozMTc5OlxcdGxpc3RfYWRkKFxcdTAwMjZzaGVhZi1cXHUwMDNlYmFybl9saXN0LCBcXHUwMDI2YmFybi1cXHUwMDNlc2hlYXZlc19lbXB0eSk7XFxubW0vc2x1Yi5jLTMxODAtXFx0YmFybi1cXHUwMDNlbnJfZW1wdHkrKztcXG4tLVxcbm1tL3NsdWIuYy0zMTg0LVxcbm1tL3NsdWIuYzozMTg1OnN0YXRpYyB2b2lkIGJhcm5fcHV0X2Z1bGxfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0zMTg2LXtcXG4tLVxcbm1tL3NsdWIuYy0zMTkwLVxcbm1tL3NsdWIuYzozMTkxOlxcdGxpc3RfYWRkKFxcdTAwMjZzaGVhZi1cXHUwMDNlYmFybl9saXN0LCBcXHUwMDI2YmFybi1cXHUwMDNlc2hlYXZlc19mdWxsKTtcXG5tbS9zbHViLmMtMzE5Mi1cXHRiYXJuLVxcdTAwM2Vucl9mdWxsKys7XFxuLS1cXG5tbS9zbHViLmMtMzE5Ni1cXG5tbS9zbHViLmM6MzE5NzpzdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKmJhcm5fZ2V0X2Z1bGxfb3JfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybilcXG5tbS9zbHViLmMtMzE5OC17XFxubW0vc2x1Yi5jOjMxOTk6XFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmID0gTlVMTDtcXG5tbS9zbHViLmMtMzIwMC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxubW0vc2x1Yi5jLTMyMDctXFx0aWYgKGJhcm4tXFx1MDAzZW5yX2Z1bGwpIHtcXG5tbS9zbHViLmM6MzIwODpcXHRcXHRzaGVhZiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZnVsbCwgc3RydWN0IHNsYWJfc2hlYWYsXFxubW0vc2x1Yi5jLTMyMDktXFx0XFx0XFx0XFx0XFx0YmFybl9saXN0KTtcXG5tbS9zbHViLmM6MzIxMDpcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2hlYWYtXFx1MDAzZWJhcm5fbGlzdCk7XFxubW0vc2x1Yi5jLTMyMTEtXFx0XFx0YmFybi1cXHUwMDNlbnJfZnVsbC0tO1xcbm1tL3NsdWIuYy0zMjEyLVxcdH0gZWxzZSBpZiAoYmFybi1cXHUwMDNlbnJfZW1wdHkpIHtcXG5tbS9zbHViLmM6MzIxMzpcXHRcXHRzaGVhZiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZW1wdHksXFxubW0vc2x1Yi5jOjMyMTQ6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiX3NoZWFmLCBiYXJuX2xpc3QpO1xcbm1tL3NsdWIuYzozMjE1OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzaGVhZi1cXHUwMDNlYmFybl9saXN0KTtcXG5tbS9zbHViLmMtMzIxNi1cXHRcXHRiYXJuLVxcdTAwM2Vucl9lbXB0eS0tO1xcbi0tXFxubW0vc2x1Yi5jLTMyMjAtXFxubW0vc2x1Yi5jOjMyMjE6XFx0cmV0dXJuIHNoZWFmO1xcbm1tL3NsdWIuYy0zMjIyLX1cXG4tLVxcbm1tL3NsdWIuYy0zMjI0LS8qXFxubW0vc2x1Yi5jOjMyMjU6ICogSWYgYSBmdWxsIHNoZWFmIGlzIGF2YWlsYWJsZSwgcmV0dXJuIGl0IGFuZCBwdXQgdGhlIHN1cHBsaWVkIGVtcHR5IG9uZSB0b1xcbm1tL3NsdWIuYzozMjI2OiAqIGJhcm4uIFdlIGlnbm9yZSB0aGUgbGltaXQgb24gZW1wdHkgc2hlYXZlcyBhcyB0aGUgbnVtYmVyIG9mIHNoZWF2ZXMgZG9lc24ndFxcbm1tL3NsdWIuYy0zMjI3LSAqIGNoYW5nZS5cXG5tbS9zbHViLmMtMzIyOC0gKi9cXG5tbS9zbHViLmM6MzIyOTpzdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKlxcbm1tL3NsdWIuYzozMjMwOmJhcm5fcmVwbGFjZV9lbXB0eV9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHksXFxubW0vc2x1Yi5jLTMyMzEtXFx0XFx0XFx0IGJvb2wgYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMzIzMi17XFxubW0vc2x1Yi5jOjMyMzM6XFx0c3RydWN0IHNsYWJfc2hlYWYgKmZ1bGwgPSBOVUxMO1xcbm1tL3NsdWIuYy0zMjM0LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5tbS9zbHViLmMtMzI0NC1cXHRpZiAobGlrZWx5KGJhcm4tXFx1MDAzZW5yX2Z1bGwpKSB7XFxubW0vc2x1Yi5jOjMyNDU6XFx0XFx0ZnVsbCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZnVsbCwgc3RydWN0IHNsYWJfc2hlYWYsXFxubW0vc2x1Yi5jLTMyNDYtXFx0XFx0XFx0XFx0XFx0YmFybl9saXN0KTtcXG5tbS9zbHViLmMtMzI0Ny1cXHRcXHRsaXN0X2RlbChcXHUwMDI2ZnVsbC1cXHUwMDNlYmFybl9saXN0KTtcXG5tbS9zbHViLmM6MzI0ODpcXHRcXHRsaXN0X2FkZChcXHUwMDI2ZW1wdHktXFx1MDAzZWJhcm5fbGlzdCwgXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZW1wdHkpO1xcbm1tL3NsdWIuYy0zMjQ5LVxcdFxcdGJhcm4tXFx1MDAzZW5yX2Z1bGwtLTtcXG4tLVxcbm1tL3NsdWIuYy0zMjU4LS8qXFxubW0vc2x1Yi5jOjMyNTk6ICogSWYgYW4gZW1wdHkgc2hlYWYgaXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYW5kIHB1dCB0aGUgc3VwcGxpZWQgZnVsbCBvbmUgdG9cXG5tbS9zbHViLmM6MzI2MDogKiBiYXJuLiBCdXQgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGZ1bGwgc2hlYXZlcywgcmVqZWN0IHRoaXMgd2l0aCAtRTJCSUcuXFxubW0vc2x1Yi5jLTMyNjEtICovXFxubW0vc2x1Yi5jOjMyNjI6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpcXG5tbS9zbHViLmM6MzI2MzpiYXJuX3JlcGxhY2VfZnVsbF9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZnVsbCxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6NTEuNjE1MTI5NDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzODQ2NjUyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJDVSBGcmVlaW5nIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgbW0vc2x1Yi5jYCBhbmQgYG1tL3NsYWJfY29tbW9uLmNgIHdpdGggcmVnYXJkIHRvIGZ1enppbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgX19rZnJlZV9yY3Vfc2hlYWZgLCBgcmN1X2ZyZWVfc2hlYWZgLCBgcmN1X2ZyZWVfc2hlYWZfbm9iYXJuYCBpbiBgbW0vc2x1Yi5jYCBhbmQgYGt2ZnJlZV9jYWxsX3JjdWAsIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLCBga2ZyZWVfcmN1X3NoZWFmYCBpbiBgbW0vc2xhYl9jb21tb24uY2AuXG5cbkZpcnN0LCB0aGUgXCJXb3J0aEZ1enppbmdcIiBxdWVzdGlvbi4gWWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIGBrZnJlZV9yY3Vfc2hlYWZgLiBTcGVjaWZpY2FsbHksIHVuZGVyIGBQUkVFTVBUX1JUYCwgaXQgYnlwYXNzZXMgdGhlIHNoZWFmLWJhc2VkIGBrZnJlZV9yY3VgIGFuZCBwYXNzZXMgYFNMQUJfRlJFRV9ERUZBVUxUYCB1bmRlciBgIVBSRUVNUFRfUlRgLlxuXG5Ob3csIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGNvbnVuZHJ1bS4gVGhlIGtleSBoZXJlIGlzIGlkZW50aWZ5aW5nICpzcGVjaWZpYyogZnVuY3Rpb25zIGZvciBpbnRlbnNpdmUgZnV6emluZywgd2hpbGUgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgZnV6emluZyB3aWxsIGJlIHNrZXdlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcy4gSSBrbm93IHRoYXQgbWVtb3J5IGFsbG9jYXRpb24vZnJlZSBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgLCBga21hbGxvY2AsIGBjYWxsX3JjdWAsIGBrdmZyZWVfY2FsbF9yY3VgIGFyZSBleHRyZW1lbHkgaG90IHBhdGguIEhvd2V2ZXIsIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgc3BlY2lmaWMgZW50cnlwb2ludCBmb3IgbG9ja2xlc3MgUkNVIGZyZWUuXG5cbk15IHRob3VnaHRzIGNpcmNsZSBhcm91bmQgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIHdoZXRoZXIgaXQgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgd2hpY2ggaXMgdHJpY2t5IGJlY2F1c2Ugd2hpbGUgYGtmcmVlYCBhbmQgYGttYWxsb2NgIGFyZSBkaXJlY3RseSBjYWxsZWQsIGBrdmZyZWVfY2FsbF9yY3VgIGlzIGNhbGxlZCB3aGVuIFJDVSBvYmplY3RzIGFyZSByZWNsYWltZWQuIFRoaXMgaXMgYSBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQgZGlzdGluY3Rpb24uIEkgY2FuIHJ1bGUgb3V0IHRoZSBzdGF0aWMgaGVscGVyIGBfX2tmcmVlX3JjdV9zaGVhZmAuIFRoZSBrZXkgaXMgZmluZGluZyBhIGZ1bmN0aW9uIHRoYXQgYmVuZWZpdHMgZnJvbSB0YXJnZXRlZCBmdXp6aW5nLCBidXQgaXNuJ3Qgc28gZ2VuZXJpYyB0aGF0IGZ1enppbmcgaXMgc2tld2VkLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGp1c3QgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIHVwZGF0ZWQgY29tbWVudHMgaW4gYG1tL3NsdWIuY2AuIFNvIG15IGJlc3QgYmV0IGlzIGBrdmZyZWVfY2FsbF9yY3VgLCBhcyB0aGUga2V5IEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guXG5cbkZpbmFsbHksIHdoYXQgYWJvdXQgYEVuYWJsZUNvbmZpZ3NgPyBUaGUgbW9zdCByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgUFJFRU1QVF9SVGAsIHNpbmNlIHRoZSBjb25kaXRpb25hbCBjaGFuZ2UgaGluZ2VzIG9uIGl0LiBUaGUgcGF0Y2ggYWRkcyBgaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYga2ZyZWVfcmN1X3NoZWFmKHB0cikpYCBhbmQgYFNMVUJgIGlzIGRlZmF1bHQgeSwgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgZGVmYXVsdCB5LiBUaGUgY2hhbmdlcyBhcmUgdHJpZ2dlcmVkIHVuZGVyIGAhUFJFRU1QVF9SVGAuXG5cblRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFBSRUVNUFRfUlRgLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBFWFBFUlRgIGFuZCBgQVJDSF9TVVBQT1JUU19SVGAuIEFsc28gYEtWRlJFRV9SQ1VfQkFUQ0hFRGAsIGFuZCBgIVNMVUJfVElOWWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzowMS45OTk3OTc0MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTI5NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjkxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9zbHViLmM9MTkzPWVudW0gc2xhYl9mbGFncyB7XFxuLS1cXG5tbS9zbHViLmMtMTk4LVxcbm1tL3NsdWIuYzoxOTk6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXFxubW0vc2x1Yi5jLTIwMC0jZGVmaW5lIF9fZmFzdHBhdGhfaW5saW5lIF9fYWx3YXlzX2lubGluZVxcbi0tXFxubW0vc2x1Yi5jLTIwNC1cXG5tbS9zbHViLmM6MjA1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYzoyMDY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OXFxubW0vc2x1Yi5jLTIwNy1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuLS1cXG5tbS9zbHViLmM9MjA5PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxubW0vc2x1Yi5jLTIxMC0jZW5kaWZcXG5tbS9zbHViLmM6MjExOiNlbmRpZlxcdFxcdC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTIxMi1cXG5tbS9zbHViLmM6MjEzOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy0yMTQtc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHN0cmljdF9udW1hKTtcXG4tLVxcbm1tL3NsdWIuYy0yMTYtXFxubW0vc2x1Yi5jOjIxNzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9zbHViLmM6MjE4OkRFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG5tbS9zbHViLmMtMjE5LVxcdFxcdFxcdHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbi0tXFxubW0vc2x1Yi5jPTIzOT1zdHJ1Y3Qgc2xhYl9vYmpfaXRlciB7XFxuLS1cXG5tbS9zbHViLmMtMjQxLVxcdHZvaWQgKnN0YXJ0O1xcbm1tL3NsdWIuYzoyNDI6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0yNDMtXFx0dW5zaWduZWQgbG9uZyBmcmVlbGlzdF9jb3VudDtcXG4tLVxcbm1tL3NsdWIuYz0yNTQ9dm9pZCAqZml4dXBfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMjcyLVxcbm1tL3NsdWIuYzoyNzM6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXFxubW0vc2x1Yi5jLTI3NC0vKlxcbi0tXFxubW0vc2x1Yi5jPTMyOD1zdHJ1Y3QgdHJhY2sge1xcbm1tL3NsdWIuYy0zMjktXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcdC8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi9cXG5tbS9zbHViLmM6MzMwOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy0zMzEtXFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbi0tXFxubW0vc2x1Yi5jPTM0Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zeXNmc19wcm9jZXNzX2FsaWFzZXModm9pZCkgeyB9XFxuLS1cXG5tbS9zbHViLmMtMzQ5LVxcbm1tL3NsdWIuYzozNTA6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKVxcbm1tL3NsdWIuYy0zNTEtc3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqKTtcXG4tLVxcbm1tL3NsdWIuYz0zNjM9ZW51bSBzdGF0X2l0ZW0ge1xcbi0tXFxubW0vc2x1Yi5jLTM5Mi1cXG5tbS9zbHViLmM6MzkzOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy0zOTQtc3RydWN0IGttZW1fY2FjaGVfc3RhdHMge1xcbi0tXFxubW0vc2x1Yi5jPTM5OT1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpXFxubW0vc2x1Yi5jLTQwMC17XFxubW0vc2x1Yi5jOjQwMTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtNDAyLVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NDExPXZvaWQgc3RhdF9hZGQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpLCBpbnQgdilcXG5tbS9zbHViLmMtNDEyLXtcXG5tbS9zbHViLmM6NDEzOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy00MTQtXFx0cmF3X2NwdV9hZGQocy1cXHUwMDNlY3B1X3N0YXRzLVxcdTAwM2VzdGF0W3NpXSwgdik7XFxuLS1cXG5tbS9zbHViLmM9NDU3PXN0cnVjdCBrbWVtX2NhY2hlX25vZGUge1xcbi0tXFxubW0vc2x1Yi5jLTQ2MC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpYWw7XFxubW0vc2x1Yi5jOjQ2MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNDYyLVxcdGF0b21pY19sb25nX3QgbnJfc2xhYnM7XFxuLS1cXG5tbS9zbHViLmM9NTMxPXN0YXRpYyBpbmxpbmUgZnJlZXB0cl90IGZyZWVsaXN0X3B0cl9lbmNvZGUoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNTM1LVxcbm1tL3NsdWIuYzo1MzY6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vc2x1Yi5jLTUzNy1cXHRlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpcHRyIF4gcy1cXHUwMDNlcmFuZG9tIF4gc3dhYihwdHJfYWRkcik7XFxuLS1cXG5tbS9zbHViLmM9NTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCAqZnJlZWxpc3RfcHRyX2RlY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy01NDgtXFxubW0vc2x1Yi5jOjU0OTojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9zbHViLmMtNTUwLVxcdGRlY29kZWQgPSAodm9pZCAqKShwdHIudiBeIHMtXFx1MDAzZXJhbmRvbSBeIHN3YWIocHRyX2FkZHIpKTtcXG4tLVxcbm1tL3NsdWIuYz01Njg9c3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCB2b2lkICpmcClcXG4tLVxcbm1tL3NsdWIuYy01NzEtXFxubW0vc2x1Yi5jOjU3MjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9zbHViLmMtNTczLVxcdEJVR19PTihvYmplY3QgPT0gZnApOyAvKiBuYWl2ZSBkZXRlY3Rpb24gb2YgZG91YmxlIGZyZWUgb3IgY29ycnVwdGlvbiAqL1xcbi0tXFxubW0vc2x1Yi5jPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgX19zbGFiX3VwZGF0ZV9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtNzA2LVxcbm1tL3NsdWIuYzo3MDc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5tbS9zbHViLmMtNzA4LVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTtcXG4tLVxcbm1tL3NsdWIuYz03NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG4tLVxcbm1tL3NsdWIuYy03OTAtXFxubW0vc2x1Yi5jOjc5MTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxcbm1tL3NsdWIuYy03OTItXFxuLS1cXG5tbS9zbHViLmM9ODc5PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy04ODUtXFxubW0vc2x1Yi5jOjg4NjojaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG5tbS9zbHViLmMtODg3LXN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYz05MTI9c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy05MjAtICovXFxubW0vc2x1Yi5jOjkyMTojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfVk0pIHx8IGRlZmluZWQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpXFxubW0vc2x1Yi5jLTkyMi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpXFxuLS1cXG5tbS9zbHViLmM9OTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpIHsgfVxcbi0tXFxubW0vc2x1Yi5jLTkzNC1cXG5tbS9zbHViLmM6OTM1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy05MzYtXFxuLS1cXG5tbS9zbHViLmM9OTQ5PXN0YXRpYyB2b2lkIF9fZmlsbF9tYXAodW5zaWduZWQgbG9uZyAqb2JqX21hcCwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtOTYwLVxcbm1tL3NsdWIuYzo5NjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0tVTklUKVxcbm1tL3NsdWIuYy05NjItc3RhdGljIGJvb2wgc2xhYl9hZGRfa3VuaXRfZXJyb3JzKHZvaWQpXFxuLS1cXG5tbS9zbHViLmM9MTAwND1zdGF0aWMgaW5saW5lIHZvaWQgKnJlc3RvcmVfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMTAxNC0gKi9cXG5tbS9zbHViLmM6MTAxNTojaWYgZGVmaW5lZChDT05GSUdfU0xVQl9ERUJVR19PTilcXG5tbS9zbHViLmMtMTAxNi1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xcbi0tXFxubW0vc2x1Yi5jPTEwNTc9c3RhdGljIHN0cnVjdCB0cmFjayAqZ2V0X3RyYWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsXFxuLS1cXG5tbS9zbHViLmMtMTA2Ni1cXG5tbS9zbHViLmM6MTA2NzojaWZkZWYgQ09ORklHX1NUQUNLREVQT1RcXG5tbS9zbHViLmMtMTA2OC1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUoZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTEwODY9c3RhdGljIHZvaWQgc2V0X3RyYWNrX3VwZGF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTEwOTEtXFxubW0vc2x1Yi5jOjEwOTI6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXFxubW0vc2x1Yi5jLTEwOTMtXFx0cC1cXHUwMDNlaGFuZGxlID0gaGFuZGxlO1xcbi0tXFxubW0vc2x1Yi5jPTExMjA9c3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0LCB1bnNpZ25lZCBsb25nIHByX3RpbWUpXFxuLS1cXG5tbS9zbHViLmMtMTEyOC1cXHQgICAgICAgcywgKHZvaWQgKil0LVxcdTAwM2VhZGRyLCBwcl90aW1lIC0gdC1cXHUwMDNld2hlbiwgdC1cXHUwMDNlY3B1LCB0LVxcdTAwM2VwaWQpO1xcbm1tL3NsdWIuYzoxMTI5OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy0xMTMwLVxcdGhhbmRsZSA9IFJFQURfT05DRSh0LVxcdTAwM2VoYW5kbGUpO1xcbi0tXFxubW0vc2x1Yi5jPTEzMjA9c3RhdGljIHZvaWQgcmVzdG9yZV9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbWVzc2FnZSwgdTggZGF0YSxcXG4tLVxcbm1tL3NsdWIuYy0xMzI2LVxcbm1tL3NsdWIuYzoxMzI3OiNpZmRlZiBDT05GSUdfS01TQU5cXG5tbS9zbHViLmMtMTMyOC0jZGVmaW5lIHBhZF9jaGVja19hdHRyaWJ1dGVzIG5vaW5saW5lIF9fbm9fa21zYW5fY2hlY2tzXFxuLS1cXG5tbS9zbHViLmM9MTMzND1jaGVja19ieXRlc19hbmRfcmVwb3J0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0xMzk3LSAqXFxubW0vc2x1Yi5jOjEzOTg6ICogW01hbmRhdG9yeSBwYWRkaW5nXSAoaWYgQ09ORklHX1NMVUJfREVCVUcgXFx1MDAyNlxcdTAwMjYgU0xBQl9SRURfWk9ORSlcXG5tbS9zbHViLmMtMTM5OS0gKiAgIC0gT25lIG1hbmRhdG9yeSBkZWJ1ZyB3b3JkIHRvIGd1YXJhbnRlZSBhIG1pbmltdW0gcG9pc29uZWQgZ2FwXFxuLS1cXG5tbS9zbHViLmM9MTkwNz1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbHViX2RlYnVnKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9zbHViLmMtMTk0MC1cXHQgKiBzbGFiX2RlYnVnIHNob3VsZCBiZSB1bmNoYW5nZWQgKDAgb3IgREVCVUdfREVGQVVMVF9GTEFHUywgZGVwZW5kaW5nXFxubW0vc2x1Yi5jOjE5NDE6XFx0ICogb24gQ09ORklHX1NMVUJfREVCVUdfT04pLiBXZSBjYW4gZXh0ZW5kZWQgdGhhdCB0byBtdWx0aXBsZSBsaXN0cyBhc1xcbm1tL3NsdWIuYy0xOTQyLVxcdCAqIGxvbmcgYXMgdGhlcmUgaXMgbm8gb3B0aW9uIHNwZWNpZnlpbmcgZmxhZ3Mgd2l0aG91dCBhIHNsYWIgbGlzdC5cXG4tLVxcbm1tL3NsdWIuYz0xOTgxPXNsYWJfZmxhZ3NfdCBrbWVtX2NhY2hlX2ZsYWdzKHNsYWJfZmxhZ3NfdCBmbGFncywgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm1tL3NsdWIuYy0yMDM0LX1cXG5tbS9zbHViLmM6MjAzNTojZWxzZSAvKiAhQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtMjAzNi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfb2JqZWN0X2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpIHt9XFxuLS1cXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxcbm1tL3NsdWIuYy0yMDcwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBvYmplY3RzKSB7fVxcbm1tL3NsdWIuYzoyMDcxOiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMDcyLVxcbi0tXFxubW0vc2x1Yi5jLTIwODQtXFxubW0vc2x1Yi5jOjIwODU6I2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcXG5tbS9zbHViLmMtMjA4Ni1cXG5tbS9zbHViLmM6MjA4NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9zbHViLmMtMjA4OC1cXG4tLVxcbm1tL3NsdWIuYz0yMTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjE0OS1cXG5tbS9zbHViLmM6MjE1MDojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTUxLVxcbi0tXFxubW0vc2x1Yi5jPTIxNTQ9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yMTU2LVxcbm1tL3NsdWIuYzoyMTU3OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTU4LVxcbi0tXFxubW0vc2x1Yi5jPTIxNjQ9aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIyMDAtXFxubW0vc2x1Yi5jOjIyMDE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSkge1xcbm1tL3NsdWIuYy0yMjAyLVxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpleHRzX2NhY2hlO1xcbi0tXFxubW0vc2x1Yi5jLTIyMTctXFx0bmV3X2V4dHMgPSAodW5zaWduZWQgbG9uZyl2ZWM7XFxubW0vc2x1Yi5jOjIyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yMjE5LVxcdG5ld19leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4tLVxcbm1tL3NsdWIuYz0yMjg1PXN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMDEtXFxubW0vc2x1Yi5jOjIzMDI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yMzAzLVxcdFxcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4tLVxcbm1tL3NsdWIuYy0yMzE3LVxcbm1tL3NsdWIuYzoyMzE4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjMxOS1cXHRcXHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuLS1cXG5tbS9zbHViLmMtMjMyNS1cXG5tbS9zbHViLmM6MjMyNjojZWxzZSAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxubW0vc2x1Yi5jLTIzMjctXFxuLS1cXG5tbS9zbHViLmM9MjM0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMzUwLVxcbm1tL3NsdWIuYzoyMzUxOiNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxubW0vc2x1Yi5jLTIzNTItXFxubW0vc2x1Yi5jOjIzNTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzNTQtXFxuLS1cXG5tbS9zbHViLmM9MjQ2OT1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDgwLVxcbm1tL3NsdWIuYzoyNDgxOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0ODItXFxuLS1cXG5tbS9zbHViLmM9MjQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDk4LVxcbm1tL3NsdWIuYzoyNDk5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3NsdWIuYy0yNTAwLVxcbm1tL3NsdWIuYy0yNTAxLVxcbm1tL3NsdWIuYzoyNTAyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjUwMy1cXG4tLVxcbm1tL3NsdWIuYz0yNTUzPWJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy0yNjEwLVxcbm1tL3NsdWIuYzoyNjExOiNlbHNlIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3NsdWIuYy0yNjEyLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYz0yNjI1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI2MjgtfVxcbm1tL3NsdWIuYzoyNjI5OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9zbHViLmMtMjYzMC1cXG5tbS9zbHViLmM6MjYzMTojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXFxubW0vc2x1Yi5jLTI2MzItc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKTtcXG4tLVxcbm1tL3NsdWIuYz0yNjM0PXN0cnVjdCByY3VfZGVsYXllZF9mcmVlIHtcXG4tLVxcbm1tL3NsdWIuYy0yNjQ0LSAqIFJldHVybnMgdHJ1ZSBpZiBmcmVlaW5nIG9mIHRoZSBvYmplY3QgY2FuIHByb2NlZWQsIGZhbHNlIGlmIGl0cyByZXVzZVxcbm1tL3NsdWIuYzoyNjQ1OiAqIHdhcyBkZWxheWVkIGJ5IENPTkZJR19TTFVCX1JDVV9ERUJVRyBvciBLQVNBTiBxdWFyYW50aW5lLCBvciBpdCB3YXMgcmV0dXJuZWRcXG5tbS9zbHViLmMtMjY0Ni0gKiB0byBLRkVOQ0UuXFxuLS1cXG5tbS9zbHViLmM9MjY2Nz1ib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXFxuLS1cXG5tbS9zbHViLmMtMjY5NS1cXG5tbS9zbHViLmM6MjY5NjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXFxubW0vc2x1Yi5jLTI2OTctXFx0aWYgKHN0aWxsX2FjY2Vzc2libGUpIHtcXG4tLVxcbm1tL3NsdWIuYy0yNzE1LVxcdH1cXG5tbS9zbHViLmM6MjcxNjojZW5kaWYgLyogQ09ORklHX1NMVUJfUkNVX0RFQlVHICovXFxubW0vc2x1Yi5jLTI3MTctXFxuLS1cXG5tbS9zbHViLmM9MzMzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTMzNjAtXFxubW0vc2x1Yi5jOjMzNjE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zMzYyLS8qIFByZS1pbml0aWFsaXplIHRoZSByYW5kb20gc2VxdWVuY2UgY2FjaGUgKi9cXG4tLVxcbm1tL3NsdWIuYz0zNDA5PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2ZyZWVsaXN0X3JhbmRvbWl6YXRpb24odm9pZCkgeyB9XFxubW0vc2x1Yi5jOjM0MTA6I2VuZGlmIC8qIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTSAqL1xcbm1tL3NsdWIuYy0zNDExLVxcbi0tXFxubW0vc2x1Yi5jPTM0NDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDgwLVxcbm1tL3NsdWIuYzozNDgxOiNpZmRlZiBDT05GSUdfNjRCSVRcXG5tbS9zbHViLmMtMzQ4Mi1cXHRpZiAoY2FjaGVfbmVlZHNfb2JqY2cocykpXFxuLS1cXG5tbS9zbHViLmM9MzYzND1zdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zNjQwLVxcbm1tL3NsdWIuYzozNjQxOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy0zNjQyLVxcdGlmIChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSB7XFxuLS1cXG5tbS9zbHViLmM9MzY2OD1zdGF0aWMgaW5saW5lIHZvaWQgKm5leHRfc2xhYl9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMzY3MC17XFxubW0vc2x1Yi5jOjM2NzE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zNjcyLVxcdGlmIChpdGVyLVxcdTAwM2VyYW5kb20pIHtcXG4tLVxcbm1tL3NsdWIuYz0zNzE4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2l0ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTM3MjQtXFxubW0vc2x1Yi5jOjM3MjU6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zNzI2LVxcdGl0ZXItXFx1MDAzZXJhbmRvbSA9IChzbGFiLVxcdTAwM2VvYmplY3RzIFxcdTAwM2U9IDIgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlcmFuZG9tX3NlcSk7XFxuLS1cXG5tbS9zbHViLmM9Mzg4NT1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTM5MTMtXFxubW0vc2x1Yi5jOjM5MTQ6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xcbm1tL3NsdWIuYy0zOTE1LVxcdFxcdFxcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwocywgbiwgc2xhYixcXG4tLVxcbm1tL3NsdWIuYz0zOTUwPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM5NTIte1xcbm1tL3NsdWIuYzozOTUzOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy0zOTU0LVxcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7XFxuLS1cXG5tbS9zbHViLmMtNDAxNy1cXHR9IHdoaWxlIChhbGxvd19zcGluIFxcdTAwMjZcXHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbm1tL3NsdWIuYzo0MDE4OiNlbmRpZlxcdC8qIENPTkZJR19OVU1BICovXFxubW0vc2x1Yi5jLTQwMTktXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9zbHViLmM9NDI0OT1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm1tL3NsdWIuYy00MjYxLVxcbm1tL3NsdWIuYzo0MjYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MjYzLXN0YXRpYyBpbnQgY291bnRfZnJlZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz00Mjc0PXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNDMyOS19XFxubW0vc2x1Yi5jOjQzMzA6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTQzMzEtXFxubW0vc2x1Yi5jOjQzMzI6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIHx8IGRlZmluZWQoU0xBQl9TVVBQT1JUU19TWVNGUylcXG5tbS9zbHViLmMtNDMzMy1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuLS1cXG5tbS9zbHViLmMtNDM0NS19XFxubW0vc2x1Yi5jOjQzNDY6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHIHx8IFNMQUJfU1VQUE9SVFNfU1lTRlMgKi9cXG5tbS9zbHViLmMtNDM0Ny1cXG5tbS9zbHViLmM6NDM0ODojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNDM0OS0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcXG4tLVxcbm1tL3NsdWIuYz00Mzg3PXNsYWJfb3V0X29mX21lbW9yeShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBuaWQpXFxuLS1cXG5tbS9zbHViLmMtNDQyMC19XFxubW0vc2x1Yi5jOjQ0MjE6I2Vsc2UgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtNDQyMi1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbm1tL3NsdWIuYz00NTMzPXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDU4MS1cXG5tbS9zbHViLmM6NDU4MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XFxubW0vc2x1Yi5jLTQ1ODMtXFx0XFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgYWMpO1xcbi0tXFxubW0vc2x1Yi5jPTQ2MDY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxcbm1tL3NsdWIuYy00NjA3LXtcXG5tbS9zbHViLmM6NDYwODojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmMtNDYwOS1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c3RyaWN0X251bWEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9zbHViLmM9NDgyNz12b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTQ4MzItXFxubW0vc2x1Yi5jOjQ4MzM6XFx0bm9kZV9yZXF1ZXN0ZWQgPSBJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcXG5tbS9zbHViLmMtNDgzNC1cXG4tLVxcbm1tL3NsdWIuYz01NzEyPXN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy01NzIyLVxcbm1tL3NsdWIuYzo1NzIzOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNTcyNC1cXHRcXHRmcmVlX3RvX3BhcnRpYWxfbGlzdChzLCBzbGFiLCBoZWFkLCB0YWlsLCBjbnQsIGFkZHIpO1xcbi0tXFxubW0vc2x1Yi5jPTYxMDM9Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4tLVxcbm1tL3NsdWIuYy02MTA4LVxcbm1tL3NsdWIuYzo2MTA5OlxcdFZNX1dBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGluKTtcXG5tbS9zbHViLmMtNjExMC1cXG5tbS9zbHViLmM6NjExMTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYy02MTEyLVxcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG4tLVxcbm1tL3NsdWIuYy02MjEwLVxcdHN0YXQocywgRlJFRV9SQ1VfU0hFQUYpO1xcbm1tL3NsdWIuYzo2MjExOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jLTYyMTItXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuLS1cXG5tbS9zbHViLmMtNjIxNi1cXHRzdGF0KHMsIEZSRUVfUkNVX1NIRUFGX0ZBSUwpO1xcbm1tL3NsdWIuYzo2MjE3OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jLTYyMTgtXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuLS1cXG5tbS9zbHViLmM9NjIyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTYyMjYtXFxubW0vc2x1Yi5jOjYyMjc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5tbS9zbHViLmMtNjIyOC1cXHRcXHRnb3RvIGNoZWNrX3BmbWVtYWxsb2M7XFxuLS1cXG5tbS9zbHViLmMtNjIzMS1cXG5tbS9zbHViLmM6NjIzMjojaWZkZWYgQ09ORklHX0hBVkVfTUVNT1JZTEVTU19OT0RFU1xcbm1tL3NsdWIuYy02MjMzLVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NjQ5ND12b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcXG4tLVxcbm1tL3NsdWIuYy02NTA5LVxcbm1tL3NsdWIuYzo2NTEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtNjUxMS0vKiBEbyBub3QgaW5saW5lIHRoZSByYXJlIG1lbWNnIGNoYXJnaW5nIGZhaWxlZCBwYXRoIGludG8gdGhlIGFsbG9jYXRpb24gcGF0aCAqL1xcbi0tXFxubW0vc2x1Yi5jPTY1MjU9dm9pZCBzbGFiX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmhlYWQsXFxuLS1cXG5tbS9zbHViLmMtNjUzOS1cXG5tbS9zbHViLmM6NjU0MDojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXFxubW0vc2x1Yi5jLTY1NDEtc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY1NjYtfVxcbm1tL3NsdWIuYzo2NTY3OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9SQ1VfREVCVUcgKi9cXG5tbS9zbHViLmMtNjU2OC1cXG5tbS9zbHViLmM6NjU2OTojaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5tbS9zbHViLmMtNjU3MC12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9zbHViLmM9NjYwNz12b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeClcXG4tLVxcbm1tL3NsdWIuYy02NjEyLVxcbm1tL3NsdWIuYzo2NjEzOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEKSB8fFxcbm1tL3NsdWIuYy02NjE0LVxcdCAgICBrbWVtX2NhY2hlX2RlYnVnX2ZsYWdzKHMsIFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSkge1xcbi0tXFxubW0vc2x1Yi5jPTY2MzE9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy02NjM0LVxcbm1tL3NsdWIuYzo2NjM1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy02NjM2LVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NjY2MD1zdGF0aWMgc2l6ZV90IF9fa3NpemUoY29uc3Qgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY2NzctXFxubW0vc2x1Yi5jOjY2Nzg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTY2NzktXFx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgb2JqZWN0KTtcXG4tLVxcbm1tL3NsdWIuYz03MjU2PV9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MzI5LVxcbm1tL3NsdWIuYzo3MzMwOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy03MzMxLXN0YXRpYyB1bnNpZ25lZCBpbnRcXG4tLVxcbm1tL3NsdWIuYz03NDI3PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDMxLVxcbm1tL3NsdWIuYzo3NDMyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNzQzMy1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IGFjID0ge1xcbi0tXFxubW0vc2x1Yi5jPTc1NjA9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XFxubW0vc2x1Yi5jOjc1NjE6XFx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9zbHViLmMtNzU2Mi1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NzY3Mz1pbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTc2NzctXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbm1tL3NsdWIuYzo3Njc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03Njc5LVxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bi1cXHUwMDNlbnJfc2xhYnMsIDApO1xcbi0tXFxubW0vc2x1Yi5jLTc2ODQtXFxubW0vc2x1Yi5jOjc2ODU6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTc2ODYtc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYz03NzU0PXN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2FjaGVfbm9kZV9hbGxvYyhpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy03Nzc3LVxcbm1tL3NsdWIuYzo3Nzc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03Nzc5LVxcdGluaXRfb2JqZWN0KGttZW1fY2FjaGVfbm9kZSwgbiwgU0xVQl9SRURfQUNUSVZFKTtcXG4tLVxcbm1tL3NsdWIuYz03ODE2PXZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNzgxOS1cXHRwY3NfZGVzdHJveShzKTtcXG5tbS9zbHViLmM6NzgyMDojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtNzgyMS1cXHRmcmVlX3BlcmNwdShzLVxcdTAwM2VjcHVfc3RhdHMpO1xcbi0tXFxubW0vc2x1Yi5jPTc4NjU9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNzg3Mi1cXG5tbS9zbHViLmM6Nzg3MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfREVCVUdfRkxBR1MpXFxubW0vc2x1Yi5jLTc4NzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9zbHViLmM9NzkxNj1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy03OTI5LVxcbm1tL3NsdWIuYzo3OTMwOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTMxLVxcdC8qXFxuLS1cXG5tbS9zbHViLmMtNzk5Mi1cXG5tbS9zbHViLmM6Nzk5MzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzk5NC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpIHtcXG4tLVxcbm1tL3NsdWIuYy04MDA3LVxcdGthc2FuX2NhY2hlX2NyZWF0ZShzLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNnMtXFx1MDAzZWZsYWdzKTtcXG5tbS9zbHViLmM6ODAwODojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODAwOS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1JFRF9aT05FKSB7XFxuLS1cXG5tbS9zbHViLmMtODAzMC1cXHRhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBzLVxcdTAwM2VhbGlnbik7XFxubW0vc2x1Yi5jOjgwMzE6I2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxubW0vc2x1Yi5jLTgwMzItXFx0aWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3NsdWIuYz04MDcyPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtODA3My17XFxubW0vc2x1Yi5jOjgwNzQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTgwNzUtXFx0dm9pZCAqYWRkciA9IHNsYWJfYWRkcmVzcyhzbGFiKTtcXG4tLVxcbm1tL3NsdWIuYz04MTM5PWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTc6MDIuMDQ2OTMwNzU0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTUxNjUyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNoZWFmIENhcGFjaXR5IGFuZCBSQ1UgRnJlZWluZyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHJlZ2FyZGluZyBgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5YCwgaXQgc2VlbXMgc2hlYXZlcyBhcmUgYWN0aXZlIHVuZGVyIG5vcm1hbCBgQ09ORklHX1NMVUJgIGNvbmRpdGlvbnMsIHByb3ZpZGVkIHdlIGFyZW4ndCB1c2luZyBgQ09ORklHX1NMVUJfVElOWWAgb3Igc29tZSBkZWJ1ZyBmbGFncy4gR29vZCwgdGhhdCBzZXRzIHRoZSBzdGFnZS5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZXF1aXJlbWVudHMgZm9yIGZ1enppbmc6IGBXb3J0aEZ1enppbmdgIGlzIHRydWUsIGdyZWF0LiBGb3IgYEZvY3VzU3ltYm9sc2AsIHdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUkNVIHNoZWFmIGZyZWVpbmcuIEluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGBfX2tmcmVlX3JjdV9zaGVhZmAsIGFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCAob3IgZXZlbiBga3ZmcmVlX2NhbGxfcmN1YCkuIEJ1dCB3YWl0LCBga3ZmcmVlX2NhbGxfcmN1YCBpcyBhIG1vcmUgY29yZSBBUEkgZW50cnkgcG9pbnQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoaWNoIGFyZSBiZXN0IHRvIGZvY3VzIG9uPyBUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgdXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBXZWxsLCBgX19rZnJlZV9yY3Vfc2hlYWZgICppcyogbm9uLXN0YXRpYyBhbmQgc3BlY2lmaWNhbGx5IGZvciBSQ1Ugc2hlYWYgZnJlZWluZywgc28gdGhhdCdzIGEgZ29vZCBjaG9pY2UuIEFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZm9yIGxvY2tsZXNzIGtmcmVlIFJDVSB3aGljaCBzZWVtcyBiZXR0ZXIuIE9yLCB3ZSBjb3VsZCBpbmNsdWRlIHRoZSBnZW5lcmljIGBrdmZyZWVfY2FsbF9yY3VgIGVudHJ5cG9pbnQgYXMgd2VsbCwgdG8gYnJvYWRlbiBjb3ZlcmFnZS4gU28sIEkgdGhpbmsgd2UgY2FuIGNvbmZpZGVudGx5IGxpc3QgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgKG9yIGBrdmZyZWVfY2FsbF9yY3VgKS5cblxuRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgd2UgbmVlZCBgS1ZGUkVFX1JDVV9CQVRDSEVEYCBhbmQgYFBSRUVNUFRfUlRgIChhbmQgaXRzIGBFWFBFUlRgIGRlcGVuZGVuY3kpLiBHb3QgaXQuXG5cbk9rYXksIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhcmFtZXRlcnMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg4NSwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTc6MDYuNDQyMDk3ODQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2NDc5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiLFxuICAgIFwiUFJFRU1QVF9SVFwiLFxuICAgIFwiRVhQRVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rZnJlZV9yY3Vfc2hlYWZcIixcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvcidzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVkZSRUVfUkNVX0JBVENIRURcIixcbiAgICBcIlBSRUVNUFRfUlRcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa2ZyZWVfcmN1X3NoZWFmXCIsXG4gICAgXCJrZnJlZV9jYWxsX3JjdV9ub2xvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3IncyBSQ1Ugc2hlYWYgZnJlZWluZyBsb2dpYyBpbiBtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMuIEl0IGFkanVzdHMga2ZyZWVfcmN1X3NoZWFmKCkgdG8gYWx3YXlzIHVzZSBTTEFCX0ZSRUVfREVGQVVMVCBhbmQgdXBkYXRlcyBrdmZyZWVfY2FsbF9yY3UoKSB0byBjb21wbGV0ZWx5IGJ5cGFzcyB0aGUgc2hlYWYgbGF5ZXIgdW5kZXIgQ09ORklHX1BSRUVNUFRfUlQgdG8gYXZvaWQgYWNxdWlyaW5nIHNsZWVwaW5nIHdhaXRsb2NrcyB3aGlsZSBob2xkaW5nIHJhdyBzcGlubG9ja3MgKHN1Y2ggYXMgdGFza19zdHJ1Y3Q6OnBpX2xvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIHJlY2xhaW1pbmcgcGF0aHMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE3OjA2LjUxNDc1MzMxM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTM0NDA1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzowNi41MTUxOTYwMzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTMxMjk5NDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUkNVIHNoZWFmIGRlYWxsb2NhdGlvbiBsb2dpYyBpbiBzbGFiL3NsdWIgKG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYykgdG8gYnlwYXNzIHRoZSBzaGVhdmVzIGxheWVyIGluIGt2ZnJlZV9jYWxsX3JjdSgpIG9uIFBSRUVNUFRfUlQga2VybmVscywgYXZvaWRpbmcgbG9jayBuZXN0aW5nIGlzc3VlcyB3aXRoIHNsZWVwaW5nIGxvY2tzIHVuZGVyIHJhdyBzcGlubG9ja3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhN2YzOWFkMGRjZWE0MzBkNjdjMTM4MDFkZmQwZjk1Y2ZmNmNjOTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMDoxNTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCBiMTliYTFiMzE0ODRjLi43MjIzYTc1OTZkYWJiIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuKysrIGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTE2NjcsMTQgKzE2NjcsNiBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuLVxuLVx0Lypcbi1cdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbi1cdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXG4tXHQgKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbi1cdFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XG4gXG4gXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNjg1LDcgKzE2NzcsNyBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIFxuIFx0cyA9IHNsYWItXHUwMDNlc2xhYl9jYWNoZTtcbiBcdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxuLVx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBmcmVlX2ZsYWdzKTtcbitcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yMDM0LDcgKzIwMjYsMTMgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIFx0aWYgKCFoZWFkKVxuIFx0XHRtaWdodF9zbGVlcCgpO1xuIFxuLVx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuK1x0LypcbitcdCAqIGt2ZnJlZV9yY3UoKSBpcyBjYWxsZWQgYnkgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIHdpdGhcbitcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcbitcdCAqIHVzYWdlIGJlbG93IHdpbGwgYWNxdWlyZSB0aGUgd2FpdGxvY2sgd2hpY2ggbXVzdCBiZSBhdm9pZGVkLlxuK1x0ICogVGhlcmVmb3JlIGF2b2lkIGl0IG9uIFBSRUVNUFRfUlQuXG4rXHQgKi9cbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24ndCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggZjliNTZjYjQzOWU3MC4uN2E3ZTkwNmEwZTQ0ZCAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNjA4OCw4ICs2MDg4LDkgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIC8qXG4gICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG4tICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbi0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuXG4rICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxuKyAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpc1xuKyAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuXG4gICpcbiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190XG4gICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGFcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE3OjA2LjUxNTE5Njk2M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODk3OTczMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2xhYi9TbHViIFJDVSBGcmVlaW5nIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBhcm91bmQgaG93IGBrZnJlZV9yY3Vfc2hlYWYoKWAgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IGxvY2tpbmcgbWVjaGFuaXNtcywgcGFydGljdWxhcmx5IGluIGEgUFJFRU1QVF9SVCBlbnZpcm9ubWVudC4gIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIHRvIHNldCBgZnJlZV9mbGFnc2AgdG8gYFNMQUJfRlJFRV9OT0xPQ0tgIGlmIGBDT05GSUdfUFJFRU1QVF9SVGAgd2FzIGVuYWJsZWQuIFRoaXMgd2FzIHRvIGF2b2lkIHBvdGVudGlhbCBsb2NrIG5lc3RpbmcgaXNzdWVzIGJlY2F1c2UgYF9fa2ZyZWVfcmN1X3NoZWFmKClgIG1pZ2h0IGFjcXVpcmUgc2xlZXBpbmcgbG9ja3Mgd2hpbGUgcmF3IHNwaW5sb2NrcyBhcmUgaGVsZC5cblxuTm93LCBpdCBsb29rcyBsaWtlIHRoYXQgY29uZGl0aW9uYWwgZmxhZyBzZXR0aW5nIGhhcyBiZWVuIHJlbW92ZWQgd2l0aGluIHRoZSBga2ZyZWVfcmN1X3NoZWFmYCBmdW5jdGlvbiBpdHNlbGYuIEluc3RlYWQsIGl0J3MgYnlwYXNzZWQgaW4gYGt2ZnJlZV9jYWxsX3JjdSgpYC4gVGhlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjYWxsIGBrZnJlZV9yY3Vfc2hlYWYoKWAgYXQgYWxsLiAgRXNzZW50aWFsbHksIG9uIFBSRUVNUFRfUlQsIHdlJ3JlIHNraXBwaW5nIHRoZSBzaGVhZiBjYWNoaW5nIGxheWVyIGVudGlyZWx5LiBUaGlzIGlzIGxpa2VseSB0aGUgcHJlZmVycmVkIHNvbHV0aW9uLCBhcyBpdCBlbnN1cmVzIHdlIGF2b2lkIHRoZSByYXcgc3BpbmxvY2sgaXNzdWUgd2hlcmUgYSBwcmVlbXB0aWJsZSBzcGlubG9jayBtaWdodCBiZSBhY3F1aXJlZCwgYXMgZGVzY3JpYmVkIGJ5IHRoZSBjb21tZW50IGluIGBzbHViLmNgLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgYSBuZWNlc3NhcnkgbWVhc3VyZSBmb3IgbG9jayBuZXN0aW5nIG9uIFBSRUVNUFRfUlQga2VybmVscywgZXNwZWNpYWxseSB3aXRoIHRoZSBgcGlfbG9ja2AgaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAuXG5cbkkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGNvbmNlcm5zLiAgTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1bmluaXRpYWxpemVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UsIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGhhbmRsaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgbm8gb2J2aW91cyBuZXcgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHBvaW50ZXIgcmVhZHMvd3JpdGVzLiBUaGlzIGlzIHB1cmVseSBhIHJlLWFycmFuZ2VtZW50IG9mIGxvY2tpbmcgbG9naWMgZm9yIFJDVSBmcmVlaW5nIGFuZCB0aGUgc2xhYi9zbHViIGxheWVyLlxuXG5JIHdpbGwgc3RpbGwgd2FudCB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIHdpdGggdG9vbHMgbGlrZSBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGNvdmVyZWQgYWxsIHRoZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIGF0IGZpcnN0IGdsYW5jZSwgSSB3b3VsZCBjb25zaWRlciB0aGlzIGEgc2FmZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzoxNi40MTMxNzIxODVaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjU2OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdV9zaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiLmgtNDgwLVxcbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XFxubW0vc2xhYi5oLTQ4Mi12b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXFxubW0vc2xhYl9jb21tb24uYzoxMzE2OlxcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXFxubW0vc2xhYl9jb21tb24uYy0xMzE3LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE2MjI9c3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxcbm1tL3NsYWJfY29tbW9uLmM6MTY2NjpzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbm1tL3NsYWJfY29tbW9uLmMtMTY2Ny17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2NzktXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxubW0vc2xhYl9jb21tb24uYzoxNjgwOlxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIwMTM9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMDM0LVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbm1tL3NsYWJfY29tbW9uLmMtMjAzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTQxNjAtXFx0XFx0ICogd2UgZG9uJ3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXFxubW0vc2x1Yi5jOjQxNjE6XFx0XFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cXG5tbS9zbHViLmMtNDE2Mi1cXHRcXHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXFxubW0vc2x1Yi5jOjQxNjM6XFx0XFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxcbm1tL3NsdWIuYy00MTY0LVxcdFxcdCAqL1xcbi0tXFxubW0vc2x1Yi5jPTYwMzE9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTYwODktICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXFxubW0vc2x1Yi5jOjYwOTA6ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbi0tXFxubW0vc2x1Yi5jLTYxMDAtICovXFxubW0vc2x1Yi5jOjYxMDE6c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYxMDItXFxubW0vc2x1Yi5jOjYxMDM6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjEwNC17XFxuLS1cXG5tbS9zbHViLmMtNjExMS1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MTEyOlxcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG5tbS9zbHViLmMtNjExMy1cXG4tLVxcbm1tL3NsdWIuYy02MjExLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jOjYyMTI6XFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxubW0vc2x1Yi5jLTYyMTMtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9zbHViLmMtNjIxNy1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MjE4OlxcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xcbm1tL3NsdWIuYy02MjE5LVxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTc6MTYuNDc0NDMxNjU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNTM3NDA0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipSQ1UgRGVhbGxvY2F0aW9uIENoYW5nZXMgLSBBc3Nlc3NpbmcgdGhlIFJpc2sqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyB3ZSdyZSBsb29raW5nIGF0IGFyZSAqc3BlY2lmaWNhbGx5KiBjZW50ZXJlZCBvbiBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc2xhYiBhbmQgc2x1YiBhbGxvY2F0b3JzLCBhbmQgdGhleSdyZSB0aWVkIHRvIHRoZSBsb2NraW5nIGNvbnN0cmFpbnRzIHRoYXQgUFJFRU1QVF9SVCBrZXJuZWxzIGltcG9zZS4gR29vZC4gRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLlxuXG5UaGUgaW1tZWRpYXRlIHJlbGllZiBpcyB0aGF0IHRoZXJlJ3MgKnplcm8qIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoYXQncyBhIGh1Z2Ugd2luIOKAkyBpdCByZW1vdmVzIGEgY2xhc3Mgb2YgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByaWdodCBvZmYgdGhlIGJhdC4gRnVydGhlcm1vcmUsIHRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBnb2luZyB0byBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSB1c2VyLXNwYWNlIGV4cG9zdXJlIG9mIGtlcm5lbCBpbnRlcm5hbHMsIHdoaWNoIGtlZXBzIHRoaW5ncyBzdHJhaWdodGZvcndhcmQuXG5cbk5vdywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgbXkgcmVhbCBmb2N1cyBzaGlmdHMgdG8gbWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMuIFRoYW5rZnVsbHksIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBsb2NraW5nIGVycm9ycyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSB3aXRoaW4gc2xhYi9zbHViLiBUaGF0J3MgZmFudGFzdGljLiBUaGF0IGtpbmQgb2YgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGNvdmVyYWdlIHJlYWxseSBidWlsZHMgbXkgY29uZmlkZW5jZS4gSSB0aGluayB3ZeKAmXJlIHdlbGwgcG9zaXRpb25lZCB0byBjYXRjaCBhbnkgZXJyb3JzIGhlcmUuXG5cbkdpdmVuIHRoZSBleGlzdGluZyB0ZXN0IGluZnJhc3RydWN0dXJlLCBpdCBtZWFucyB0aGF0IEtNU0FOLCB3aGlsZSB1c2VmdWwgaW4gc29tZSBvdGhlciBhcmVhcywgaXMgbm90IHJlYWxseSBuZWVkZWQgaGVyZS4gS0FTQU4gaXMgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb24gdGhlIG1lbW9yeSBmcm9udCwgYW5kIExPQ0tERVAgZW5zdXJlcyB0aGUgbG9ja2luZyBzZW1hbnRpY3MgYXJlIHNvdW5kLlxuXG5UaGVyZWZvcmUsIGxldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgYW5kIHByb2NlZWQgd2l0aCBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ2LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzoyMS44MjgxNzQ4NThaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJDVSBzaGVhZiBkZWFsbG9jYXRpb24gbG9naWMgaW4gc2xhYi9zbHViIChtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMpIHRvIGJ5cGFzcyB0aGUgc2hlYXZlcyBsYXllciBpbiBrdmZyZWVfY2FsbF9yY3UoKSBvbiBQUkVFTVBUX1JUIGtlcm5lbHMsIGF2b2lkaW5nIGxvY2sgbmVzdGluZyBpc3N1ZXMgd2l0aCBzbGVlcGluZyBsb2NrcyB1bmRlciByYXcgc3BpbmxvY2tzLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHNsYWIgbWVtb3J5IGZyZWVpbmcgcGF0aHMgYW5kIFBSRUVNUFRfUlQgbG9jayBjb25zdHJhaW50cy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGRlYWRsb2NrIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUkNVIHNoZWFmIGRlYWxsb2NhdGlvbiBsb2dpYyBpbiBzbGFiL3NsdWIgKG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYykgdG8gYnlwYXNzIHRoZSBzaGVhdmVzIGxheWVyIGluIGt2ZnJlZV9jYWxsX3JjdSgpIG9uIFBSRUVNUFRfUlQga2VybmVscywgYXZvaWRpbmcgbG9jayBuZXN0aW5nIGlzc3VlcyB3aXRoIHNsZWVwaW5nIGxvY2tzIHVuZGVyIHJhdyBzcGlubG9ja3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowp76h8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 00:12:40 +0000 UTC FinishedAt: 2026-09-01 00:17:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVFREE_RCU_BATCHED", "PREEMPT_RT", "EXPERT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVFREE_RCU_BATCHED", "PREEMPT_RT", "EXPERT" ], "series_id": "f6f82155-3726-4ce9-9236-69092a1e3e1a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__kfree_rcu_sheaf", "kfree_call_rcu_nolock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWRlJFRV9SQ1VfQkFUQ0hFRCYjMzQ7LAogICAgJiMzNDtQUkVFTVBUX1JUJiMzNDssCiAgICAmIzM0O0VYUEVSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa2ZyZWVfcmN1X3NoZWFmJiMzNDssCiAgICAmIzM0O2tmcmVlX2NhbGxfcmN1X25vbG9jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJDVSBzaGVhZiBkZWFsbG9jYXRpb24gbG9naWMgaW4gc2xhYi9zbHViIChtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMpIHRvIGJ5cGFzcyB0aGUgc2hlYXZlcyBsYXllciBpbiBrdmZyZWVfY2FsbF9yY3UoKSBvbiBQUkVFTVBUX1JUIGtlcm5lbHMsIGF2b2lkaW5nIGxvY2sgbmVzdGluZyBpc3N1ZXMgd2l0aCBzbGVlcGluZyBsb2NrcyB1bmRlciByYXcgc3BpbmxvY2tzLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzbGFiIG1lbW9yeSBmcmVlaW5nIHBhdGhzIGFuZCBQUkVFTVBUX1JUIGxvY2sgY29uc3RyYWludHMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBkZWFkbG9jayBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3ImIzM5O3MgUkNVIHNoZWFmIGZyZWVpbmcgbG9naWMgaW4gbW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jLiBJdCBhZGp1c3RzIGtmcmVlX3JjdV9zaGVhZigpIHRvIGFsd2F5cyB1c2UgU0xBQl9GUkVFX0RFRkFVTFQgYW5kIHVwZGF0ZXMga3ZmcmVlX2NhbGxfcmN1KCkgdG8gY29tcGxldGVseSBieXBhc3MgdGhlIHNoZWFmIGxheWVyIHVuZGVyIENPTkZJR19QUkVFTVBUX1JUIHRvIGF2b2lkIGFjcXVpcmluZyBzbGVlcGluZyB3YWl0bG9ja3Mgd2hpbGUgaG9sZGluZyByYXcgc3BpbmxvY2tzIChzdWNoIGFzIHRhc2tfc3RydWN0OjpwaV9sb2NrKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFJDVSByZWNsYWltaW5nIHBhdGhzIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDA6MTU6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYl9jb21tb24uYyBiL21tL3NsYWJfY29tbW9uLmNcbmluZGV4IGIxOWJhMWIzMTQ4NGMuLjcyMjNhNzU5NmRhYmIgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jXG5AQCAtMTY2NywxNCAmIzQzOzE2NjcsNiBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuLVxuLVx0Lypcbi1cdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbi1cdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXG4tXHQgKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbi1cdFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XG4gXG4gXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNjg1LDcgJiM0MzsxNjc3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbiBcbiBcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4gXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbi1cdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTIwMzQsNyAmIzQzOzIwMjYsMTMgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIFx0aWYgKCFoZWFkKVxuIFx0XHRtaWdodF9zbGVlcCgpO1xuIFxuLVx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICoga3ZmcmVlX3JjdSgpIGlzIGNhbGxlZCBieSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgd2l0aFxuJiM0MztcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcbiYjNDM7XHQgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC5cbiYjNDM7XHQgKiBUaGVyZWZvcmUgYXZvaWQgaXQgb24gUFJFRU1QVF9SVC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJiMzOTt0IHlldCBzY2hlZHVsZSB0aGUgYmF0Y2guXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXG5pbmRleCBmOWI1NmNiNDM5ZTcwLi43YTdlOTA2YTBlNDRkIDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC02MDg4LDggJiM0Mzs2MDg4LDkgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIC8qXG4gICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG4tICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbi0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuXG4mIzQzOyAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbiYjNDM7ICogYXZvaWRzIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0suIGt2ZnJlZV9jYWxsX3JjdSgpIGlzXG4mIzQzOyAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuXG4gICpcbiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190XG4gICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7LAogICAgJiMzNDtFWFBFUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7LAogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yJiMzOTtzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3ZjM5YWQwZGNlYTQzMGQ2N2MxMzgwMWRmZDBmOTVjZmY2Y2M5NzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAwOjE1OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2xhYl9jb21tb24uYyBiL21tL3NsYWJfY29tbW9uLmMKaW5kZXggYjE5YmExYjMxNDg0Yy4uNzIyM2E3NTk2ZGFiYiAxMDA2NDQKLS0tIGEvbW0vc2xhYl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiX2NvbW1vbi5jCkBAIC0xNjY3LDE0ICYjNDM7MTY2Nyw2IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CiAJc3RydWN0IHNsYWIgKnNsYWI7Ci0JdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDsKLQotCS8qCi0JICogSXQgaXMgbm90IHNhZmUgdG8gc3BpbiBvbiBQUkVFTVBUX1JUIGJlY2F1c2UgdGhlIGtlcm5lbCBtaWdodCBiZQotCSAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuCi0JICovCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQotCQlmcmVlX2ZsYWdzID0gU0xBQl9GUkVFX05PTE9DSzsKIAogCWlmIChpc192bWFsbG9jX2FkZHIob2JqKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTY4NSw3ICYjNDM7MTY3Nyw3IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopCiAKIAlzID0gc2xhYi0mZ3Q7c2xhYl9jYWNoZTsKIAlpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSkKLQkJcmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7CiYjNDM7CQlyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0yMDM0LDcgJiM0MzsyMDI2LDEzIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cikKIAlpZiAoIWhlYWQpCiAJCW1pZ2h0X3NsZWVwKCk7CiAKLQlpZiAoa2ZyZWVfcmN1X3NoZWFmKHB0cikpCiYjNDM7CS8qCiYjNDM7CSAqIGt2ZnJlZV9yY3UoKSBpcyBjYWxsZWQgYnkgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIHdpdGgKJiM0MzsJICogdGFza19zdHJ1Y3Q6OnBpX2xvY2sgYWNxdWlyZWQuIE9uIFBSRUVNUFRfUlQgdGhlIGxvY2FsX3RyeWxvY2soKQomIzQzOwkgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC4KJiM0MzsJICogVGhlcmVmb3JlIGF2b2lkIGl0IG9uIFBSRUVNUFRfUlQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpICZhbXA7JmFtcDsga2ZyZWVfcmN1X3NoZWFmKHB0cikpCiAJCXJldHVybjsKIAogCS8vIFF1ZXVlIHRoZSBvYmplY3QgYnV0IGRvbiYjMzk7dCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGY5YjU2Y2I0MzllNzAuLjdhN2U5MDZhMGU0NGQgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmMKQEAgLTYwODgsOCAmIzQzOzYwODgsOSBAQCBzdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiAvKgogICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlCiAgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSwKLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzCi0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuCiYjNDM7ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKQomIzQzOyAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpcwomIzQzOyAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuCiAgKgogICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdAogICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGEKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MAoJCQkJCQkJb3V0cHV0OiA3MgoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBrZnJlZV9yY3UgYW5kIFBSRUVNUFRfUlQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgZGlmZiBoaXRzIGBtbS9zbGFiX2NvbW1vbi5jYCBhbmQgYG1tL3NsdWIuY2AsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBzbGFiIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtmcmVlX3JjdV9zaGVhZigpYCBpbiBgbW0vc2xhYl9jb21tb24uY2AuIEkgc2VlIHRoZXkmIzM5O3ZlIHJlbW92ZWQgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgb2YgYGZyZWVfZmxhZ3NgIGJhc2VkIG9uIGBDT05GSUdfUFJFRU1QVF9SVGAuIFByZXZpb3VzbHksIGlmIFBSRUVNUFRfUlQgd2FzIGVuYWJsZWQsIGl0IHdvdWxkIHNldCBgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0tgLiBOb3csIGl0IHVuY29uZGl0aW9uYWxseSB1c2VzIGBTTEFCX0ZSRUVfREVGQVVMVGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IGFyZSBlbGltaW5hdGluZyB0aGF0IGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFzc3VtZSB0aGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlIHRvIGZpeCBhIGxvY2tpbmcgaXNzdWUsIG9yIGltcHJvdmUgcGVyZm9ybWFuY2UuCgpUaGUgb3RoZXIgY2hhbmdlIGluIGBtbS9zbGFiX2NvbW1vbi5jYCBpcyBpbiBga3ZmcmVlX2NhbGxfcmN1KClgLiBUaGVyZSYjMzk7cyBhIGNoZWNrIHRoYXQgdXNlcyBga2ZyZWVfcmN1X3NoZWFmKClgIGFuZCBpZiBgQ09ORklHX1BSRUVNUFRfUlRgIGlzIG5vdCBlbmFibGVkLCB0aGVuIGl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgcmN1IG1lY2hhbmlzbS4gUHJldmlvdXNseSwgYGt2ZnJlZV9jYWxsX3JjdSgpYCB3YXMgdXNpbmcgdGhlIGBsb2NhbF90cnlsb2NrKClgIGNhbGwgaW4gY29uanVuY3Rpb24gd2l0aCBgdGFza19zdHJ1Y3Q6OnBpX2xvY2tgIGFuZCB0aGUgbmV3IGNvZGUgc2VlbXMgdG8gYXZvaWQgdGhlIGxvY2FsX3RyeWxvY2sgY2FsbC4gSSYjMzk7bSBndWVzc2luZyB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gaGFkIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNjZW5hcmlvIG9yIGNvbnRlbnRpb24gaXNzdWUgb24gUFJFRU1QVF9SVCBzeXN0ZW1zIHdoZW4gYHRhc2tfc3RydWN0OjpwaV9sb2NrYCB3YXMgaGVsZCwgYmVjYXVzZSBvZiB0aGUgYHdhaXRsb2NrYCBsb2NrIHRoYXQmIzM5O3MgdXNlZCBieSB0aGUgYGxvY2FsX3RyeWxvY2soKWAgY2FsbCBpbiBga2ZyZWVfcmN1X3NoZWFmKClgLiBUaGUgY29tbWVudHMgc3VwcG9ydCB0aGlzLgoKSW4gYG1tL3NsdWIuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBsaW1pdGVkIHRvIGNvbW1lbnRzLCBwcm9iYWJseSB0byBwcm92aWRlIGNvbnRleHQgYXJvdW5kIHRoZSBjaGFuZ2VzIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIHJlYXNvbnMgYmVoaW5kIHRoaXMgcGF0Y2gsIGJ1dCBpdCBzZWVtcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBsb2NraW5nIHByb2JsZW0gb24gUFJFRU1QVF9SVCBzeXN0ZW1zIHdoZW4gZnJlZWluZyBzbGFiIG9iamVjdHMgdmlhIFJDVS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGJ5IGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGluY2x1ZGluZyB0aGUgcG9zc2libGUgbG9jayBkZXBlbmRlbmN5IGdyYXBocyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbGFiX2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjYwOlx0XHQgKiBUaGlzIGxpc3QgaXMgbmFtZWQgXCYjMzQ7Q2hhbm5lbCAzXCYjMzQ7LlxuMTY2MTpcdFx0ICovXG4xNjYyOlx0XHRpZiAoaGVhZCBcdTAwMjZcdTAwMjYgIVdBUk5fT05fT05DRSghcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3VfZnVsbChcdTAwMjZoZWFkX2dwX3NuYXApKSlcbjE2NjM6XHRcdFx0a3ZmcmVlX3JjdV9saXN0KGhlYWQpO1xuMTY2NDpcdH1cbjE2NjU6XHRcbjE2NjY6XHRzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuMTY2NzpcdHtcbjE2Njg6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuMTY2OTpcdFx0c3RydWN0IHNsYWIgKnNsYWI7XG4xNjcwOlx0XG4xNjcxOlx0XHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4xNjcyOlx0XHRcdHJldHVybiBmYWxzZTtcbjE2NzM6XHRcbjE2NzQ6XHRcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbjE2NzU6XHRcdGlmICh1bmxpa2VseSghc2xhYikpXG4xNjc2Olx0XHRcdHJldHVybiBmYWxzZTtcbjE2Nzc6XHRcbjE2Nzg6XHRcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4xNjc5Olx0XHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbjE2ODA6XHRcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuMTY4MTpcdFxuMTY4MjpcdFx0cmV0dXJuIGZhbHNlO1xuMTY4MzpcdH1cbjE2ODQ6XHRcbjE2ODU6XHRzdGF0aWMgYm9vbFxuMTY4NjpcdG5lZWRfb2ZmbG9hZF9rcmMoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXG4xNjg3Olx0e1xuMTY4ODpcdFx0aW50IGk7XG4xNjg5Olx0XG4xNjkwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBGUkVFX05fQ0hBTk5FTFM7IGkmIzQzOyYjNDM7KVxuMTY5MTpcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2a3JjcC1cdTAwM2VidWxrX2hlYWRbaV0pKVxuMTY5MjpcdFx0XHRcdHJldHVybiB0cnVlO1xuMTY5MzpcdFxuMTY5NDpcdFx0cmV0dXJuICEhUkVBRF9PTkNFKGtyY3AtXHUwMDNlaGVhZCk7XG4xNjk1Olx0fVxuMTY5NjpcdFxuMTY5NzpcdHN0YXRpYyBib29sXG4xNjk4Olx0bmVlZF93YWl0X2Zvcl9rcndwX3dvcmsoc3RydWN0IGtmcmVlX3JjdV9jcHVfd29yayAqa3J3cClcbjE2OTk6XHR7XG4xNzAwOlx0XHRpbnQgaTtcbjE3MDE6XHRcbjE3MDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEZSRUVfTl9DSEFOTkVMUzsgaSYjNDM7JiM0MzspXG4xNzAzOlx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZrcndwLVx1MDAzZWJ1bGtfaGVhZF9mcmVlW2ldKSlcbjE3MDQ6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjE3MDU6XHRcbjE3MDY6XHRcdHJldHVybiAhIWtyd3AtXHUwMDNlaGVhZF9mcmVlO1xuMTcwNzpcdH1cbjE3MDg6XHRcbjE3MDk6XHRzdGF0aWMgaW50IGtyY19jb3VudChzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NsYWJfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMjA6XHRcdCAqIFBsZWFzZSBub3RlIHRoZXJlIGlzIGEgbGltaXRhdGlvbiBmb3IgdGhlIGhlYWQtbGVzc1xuMjAyMTpcdFx0ICogdmFyaWFudCwgdGhhdCBpcyB3aHkgdGhlcmUgaXMgYSBjbGVhciBydWxlIGZvciBzdWNoXG4yMDIyOlx0XHQgKiBvYmplY3RzOiBpdCBjYW4gYmUgdXNlZCBmcm9tIG1pZ2h0X3NsZWVwKCkgY29udGV4dFxuMjAyMzpcdFx0ICogb25seS4gRm9yIG90aGVyIHBsYWNlcyBwbGVhc2UgZW1iZWQgYW4gcmN1X2hlYWQgdG9cbjIwMjQ6XHRcdCAqIHlvdXIgZGF0YS5cbjIwMjU6XHRcdCAqL1xuMjAyNjpcdFx0aWYgKCFoZWFkKVxuMjAyNzpcdFx0XHRtaWdodF9zbGVlcCgpO1xuMjAyODpcdFxuMjAyOTpcdFx0LypcbjIwMzA6XHRcdCAqIGt2ZnJlZV9yY3UoKSBpcyBjYWxsZWQgYnkgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIHdpdGhcbjIwMzE6XHRcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcbjIwMzI6XHRcdCAqIHVzYWdlIGJlbG93IHdpbGwgYWNxdWlyZSB0aGUgd2FpdGxvY2sgd2hpY2ggbXVzdCBiZSBhdm9pZGVkLlxuMjAzMzpcdFx0ICogVGhlcmVmb3JlIGF2b2lkIGl0IG9uIFBSRUVNUFRfUlQuXG4yMDM0Olx0XHQgKi9cbjIwMzU6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuMjAzNjpcdFx0XHRyZXR1cm47XG4yMDM3Olx0XG4yMDM4Olx0XHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24mIzM5O3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cbjIwMzk6XHRcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShwdHIpKSB7XG4yMDQwOlx0XHRcdC8vIFByb2JhYmxlIGRvdWJsZSBrZnJlZV9yY3UoKSwganVzdCBsZWFrLlxuMjA0MTpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIGNhbGwuIHJjdV9oZWFkICVwXFxuXCYjMzQ7LFxuMjA0MjpcdFx0XHRcdCAgX19mdW5jX18sIGhlYWQpO1xuMjA0MzpcdFxuMjA0NDpcdFx0XHQvLyBNYXJrIGFzIHN1Y2Nlc3MgYW5kIGxlYXZlLlxuMjA0NTpcdFx0XHRyZXR1cm47XG4yMDQ2Olx0XHR9XG4yMDQ3Olx0XG4yMDQ4Olx0XHRrYXNhbl9yZWNvcmRfYXV4X3N0YWNrKHB0cik7XG4yMDQ5Olx0XHRzdWNjZXNzID0gYWRkX3B0cl90b19idWxrX2tyY19sb2NrKFx1MDAyNmtyY3AsIFx1MDAyNmZsYWdzLCBwdHIsICFoZWFkKTtcbjIwNTA6XHRcdGlmICghc3VjY2Vzcykge1xuMjA1MTpcdFx0XHRydW5fcGFnZV9jYWNoZV93b3JrZXIoa3JjcCk7XG4yMDUyOlx0XG4yMDUzOlx0XHRcdGlmIChoZWFkID09IE5VTEwpXG4yMDU0Olx0XHRcdFx0Ly8gSW5saW5lIGlmIGt2ZnJlZV9yY3Uob25lX2FyZykgY2FsbC5cbjIwNTU6XHRcdFx0XHRnb3RvIHVubG9ja19yZXR1cm47XG4yMDU2Olx0XG4yMDU3Olx0XHRcdGhlYWQtXHUwMDNlbmV4dCA9IGtyY3AtXHUwMDNlaGVhZDtcbjIwNTg6XHRcdFx0V1JJVEVfT05DRShrcmNwLVx1MDAzZWhlYWQsIGhlYWQpO1xuMjA1OTpcdFx0XHRhdG9taWNfaW5jKFx1MDAyNmtyY3AtXHUwMDNlaGVhZF9jb3VudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgX19rZnJlZV9yY3Vfc2hlYWZgIGluIG1tL3NsdWIuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgX19rZnJlZV9yY3Vfc2hlYWZgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBpbiBgbW0vc2x1Yi5jYCwgc28gaXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgU0xVQiBhbGxvY2F0b3IuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGRlYWxzIHdpdGggZnJlZWluZyBvYmplY3RzIGluIGEgZGVsYXllZCBvciBSQ1Utc2FmZSBtYW5uZXIuIFRoZSBuYW1lICYjMzQ7c2hlYWYmIzM0OyBzdWdnZXN0cyBhIGdyb3VwaW5nIG9yIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBiZWluZyBoYW5kbGVkIHRvZ2V0aGVyLCBsaWtlbHkgdG8gaW1wcm92ZSBlZmZpY2llbmN5IG9yIGF0b21pYyBvcGVyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIG1lY2hhbmlzbSB0byBlbnN1cmUgc2FmZSBjb25jdXJyZW50IG1lbW9yeSBkZWFsbG9jYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBob3cgaXQgYWRkcyBmcmVlZCBvYmplY3RzIHRvIHNvbWUgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZSBhbmQgaG93IHRoZSBhY3R1YWwgZnJlZWluZyBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciB0aGUgZ3JhY2UgcGVyaW9kLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgaW52b2x2ZWQgYW5kIGhvdyBpdCBkZWFscyB3aXRoIE5VTUEgY29uc2lkZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGZyZWVpbmcgb2JqZWN0cyB0aGF0IG1pZ2h0IGJlIHNjYXR0ZXJlZCBhY3Jvc3MgZGlmZmVyZW50IG1lbW9yeSBub2Rlcy4gTGV0JiMzOTtzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNDgwLVxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXHRcdGdvdG8gZmFsbGJhY2s7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xNjY2PXN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjc5LVx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cbi0tXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy00MTYwLVx0XHQgKiB3ZSBkb24mIzM5O3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXG5tbS9zbHViLmM6NDE2MTpcdFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cbm1tL3NsdWIuYy00MTYyLVx0XHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXG5tbS9zbHViLmM6NDE2MzpcdFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxubW0vc2x1Yi5jLTQxNjQtXHRcdCAqL1xuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA4OS0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2Vcbm1tL3NsdWIuYzo2MDkwOiAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxuLS1cbm1tL3NsdWIuYz02MTAxPXN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYxMDItXG5tbS9zbHViLmM6NjEwMzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2x1Yi5jLTYxMDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBncmFiIHRoZSBjb21taXQgZGV0YWlscyB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gSG1tLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYWJvdXQgYGt2ZnJlZV9jYWxsX3JjdSgpYCwgd2hpY2ggcmluZ3MgYSBiZWxsIGFzIGEgY29yZSBrZXJuZWwgZnVuY3Rpb24gcmVsYXRlZCB0byBSQ1UtYmFzZWQgbWVtb3J5IGZyZWVpbmcuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGp1c3RpZmllcyBmdXp6aW5nPwoKTGV0JiMzOTtzIGNhcmVmdWxseSBwaWNrIGFwYXJ0IHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyBQUkVFTVBUX1JUIGlzIGFmZmVjdGVkLiBCZWZvcmUgdGhlIHBhdGNoLCBga2ZyZWVfcmN1X3NoZWFmYCBpbiBQUkVFTVBUX1JUIGNhbGxlZCBgX19rZnJlZV9yY3Vfc2hlYWZgIHdpdGggYSBzcGVjaWZpYyBmbGFnLiBOb3csIHdpdGggdGhlIHBhdGNoLCBga3ZmcmVlX2NhbGxfcmN1KClgICpjb21wbGV0ZWx5KiBieXBhc3NlcyBga2ZyZWVfcmN1X3NoZWFmYC4gVGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBmb3IgIVBSRUVNUFRfUlQuICBBaGEhIEluIG5vbi1SVCBidWlsZHMsIHRoZSBga2ZyZWVfcmN1X3NoZWFmYCBpcyBzdGlsbCB1c2VkIGFuZCBwYXNzZXMgYSBkZWZhdWx0IGZsYWcgdG8gdGhlIHNhbWUgaW50ZXJuYWwgZnVuY3Rpb24uCgpOb3csIGEgY3JpdGljYWwgcXVlc3Rpb246IGlzIGBrdmZyZWVfY2FsbF9yY3VgIGEgaG90IHBhdGg/IEdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIG1lbW9yeSBmcmVlaW5nLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gSXQmIzM5O3MgY2FsbGVkIGV2ZXJ5d2hlcmUuCgpCdXQsIGlzIHRoaXMganVzdCBhbiBpbnRlcm5hbCBtbSBsb2NraW5nIGZpeCwgYW4gUlQgd29ya2Fyb3VuZCwgb3IgaXMgaXQgc29tZXRoaW5nIGZ1enotd29ydGh5PyBUaW1lIHRvIHB1bGwgb3V0IHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGd1aWRlbGluZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBpdCYjMzk7cyBub3QgYSBkb2N1bWVudGF0aW9uIGNoYW5nZSwgbm90IHB1cmVseSBsb2dnaW5nLCBubyBjb25zdGFudCBjaGFuZ2VzLCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgdW5yZWFjaGFibGUgY29kZSwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0ZWFyZG93bi4gIFRoZSBndWlkZWxpbmVzIHN0YXRlOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClNpbmNlIHRoaXMgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgdGhhdCBtZWFucyB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3cgY29tZXMgdGhlIG5leHQgY3JpdGljYWwgc3RlcDogaWRlbnRpZnlpbmcgYEZvY3VzU3ltYm9sc2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5OiAmIzM0O0V4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsKCk9rYXksIHNvIHdoYXQgZnVuY3Rpb25zIHdlcmUgYWN0dWFsbHkgbW9kaWZpZWQgb3IgaW50cm9kdWNlZD8gTG9va2luZyBhdCBgbW0vc2xhYl9jb21tb24uY2AsIHdlIGhhdmUgYGtmcmVlX3JjdV9zaGVhZmAgKHdoaWNoIGlzIHN0YXRpYykgYW5kIGBrdmZyZWVfY2FsbF9yY3VgIChub24tc3RhdGljLCBleHBvcnRlZCDigJMgYHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilgKS4KClRoZSBxdWVzdGlvbiBpcywgaXMgYGt2ZnJlZV9jYWxsX3JjdWAgYSAmIzM0O2dlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24mIzM0Oz8gT3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBlbnRyeSBwb2ludD8gT3Igc2hvdWxkIGBGb2N1c1N5bWJvbHNgIGJlIGVtcHR5PyBDYW4gYEZvY3VzU3ltYm9sc2AgYmUgZW1wdHkgaWYgYWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgb3Igc3RhdGljPyBMZXQmIzM5O3MgcmUtcmVhZCB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuJiMzNDsKClJpZ2h0ISBMZXQgbWUgdGhpbmsuLi4gd2hhdCBhcmUgdGhlIHJlbGV2YW50IGVudHJ5cG9pbnRzIGZvciBga2ZyZWVfcmN1YCwgYGt2ZnJlZV9yY3VgIGFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYD8gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgIHRvIGZpbmQgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xubW0vc2xhYl9jb21tb24uYy0xMjk4LVxubW0vc2xhYl9jb21tb24uYzoxMjk5OnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzIzLX1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xubW0vc2xhYl9jb21tb24uYy0xMzI1LVxuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA5MC0gKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcbm1tL3NsdWIuYzo2MDkxOiAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbm1tL3NsdWIuYy02MDkyLSAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIFJDVSBhbmQgS2ZyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gbWVtb3J5IGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIG9mIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCBga3ZmcmVlX2NhbGxfcmN1YC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciBudWFuY2VzLCBob3cgdGhleSBiZWhhdmUsIGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMgY2FzZXMgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuIEkgYW0gZ29pbmcgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIGFuZCB3aGVyZSB0aGV5JiMzOTt2ZSBiZWVuIG1vZGlmaWVkLgoKQmV5b25kIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgcGVyc3BlY3RpdmUuIExldCYjMzk7cyBzZWUgd2hhdCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gYWZmZWN0ZWQgaW4gdGhlIG1vc3QgcmVjZW50IEhFQUQgY29tbWl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEFyZSB0aGVzZSBpc29sYXRlZCBtb2RpZmljYXRpb25zIG9yIHBhcnQgb2Ygc29tZXRoaW5nIGJpZ2dlcj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gRGV0ZXJtaW5pbmcgd2hhdCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYSBsYXJnZXIgc3lzdGVtLWxldmVsIGNoYW5nZSBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGUgbGFyZ2VyIHBpY3R1cmUgd2lsbCBob3BlZnVsbHkgZXhwb3NlIGFueSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9mIGNoYW5nZXMgdGhhdCBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3JjdV9zaGVhZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbGFiLmgtNDgwLVxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcbm1tL3NsYWIuaC00ODItdm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZCk7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XHRpZiAodW5saWtlbHkoIV9fa2ZyZWVfcmN1X3NoZWFmKHNsYWItXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXHRcdGdvdG8gZmFsbGJhY2s7XG4tLVxubW0vc2xhYl9jb21tb24uYz0xNjIyPXN0YXRpYyB2b2lkIGtmcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTE2NjUtXG5tbS9zbGFiX2NvbW1vbi5jOjE2NjY6c3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbm1tL3NsYWJfY29tbW9uLmMtMTY2Ny17XG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjc5LVx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIwMTM9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMjAzNC1cdCAqL1xubW0vc2xhYl9jb21tb24uYzoyMDM1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYga2ZyZWVfcmN1X3NoZWFmKHB0cikpXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzYtXHRcdHJldHVybjtcbi0tXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy00MTYwLVx0XHQgKiB3ZSBkb24mIzM5O3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXG5tbS9zbHViLmM6NDE2MTpcdFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cbm1tL3NsdWIuYy00MTYyLVx0XHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXG5tbS9zbHViLmM6NDE2MzpcdFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxubW0vc2x1Yi5jLTQxNjQtXHRcdCAqL1xuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA4OS0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2Vcbm1tL3NsdWIuYzo2MDkwOiAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxuLS1cbm1tL3NsdWIuYy02MTAwLSAqL1xubW0vc2x1Yi5jOjYxMDE6c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XG5tbS9zbHViLmMtNjEwMi1cbm1tL3NsdWIuYzo2MTAzOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG5tbS9zbHViLmMtNjEwNC17XG4tLVxubW0vc2x1Yi5jLTYxMTEtXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jOjYxMTI6XHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xubW0vc2x1Yi5jLTYxMTMtXG4tLVxubW0vc2x1Yi5jLTYyMTEtXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jOjYyMTI6XHRcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XG5tbS9zbHViLmMtNjIxMy1cdHJldHVybiB0cnVlO1xuLS1cbm1tL3NsdWIuYy02MjE3LVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbm1tL3NsdWIuYzo2MjE4Olx0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xubW0vc2x1Yi5jLTYyMTktXHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUkVFTVBUX1JUIGFuZCBrdmZyZWVfY2FsbF9yY3UgSW50ZXJhY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBDT05GSUdfUFJFRU1QVF9SVGAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGNvZGUgdG8gZnVuY3Rpb24gYSBjZXJ0YWluIHdheSwgb3IgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIHBhdGguIFNvLCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBga3ZmcmVlX2NhbGxfcmN1YC4gVGhlIGNvZGUgY2hlY2tzIGAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgIGFuZCwgaWYgdHJ1ZSwgY2FsbHMgYGtmcmVlX3JjdV9zaGVhZihwdHIpYC4gVGhhdCBtZWFucywgaW4gYSBzdGFuZGFyZCBrZXJuZWwsIHdpdGhvdXQgYFBSRUVNUFRfUlRgLCBga2ZyZWVfcmN1X3NoZWFmYCAqaXMqIGV4ZWN1dGVkLiBBbmQgd2l0aGluIGBrZnJlZV9yY3Vfc2hlYWZgLCB3ZSBzZWUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBiZWluZyBjYWxsZWQgd2l0aCBgU0xBQl9GUkVFX0RFRkFVTFRgLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBpbXBvcnRhbnQgYml0LCB3aXRoIGBDT05GSUdfUFJFRU1QVF9SVGAgZW5hYmxlZCwgdGhlIGVudGlyZSBjYWxsIHRvIGBrZnJlZV9yY3Vfc2hlYWZgIGlzIGJ5cGFzc2VkIGluIGBrdmZyZWVfY2FsbF9yY3VgLiBJbnRlcmVzdGluZy4KCk5vdywgaG9sZCBvbi4gSSBuZWVkIHRvIGNsYXJpZnk6IElzIGBQUkVFTVBUX1JUYCBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IHdlIGNhbiB0ZXN0IGhlcmU/IE9yIGlzIHRoZXJlIHNvbWV0aGluZyBlbHNlIGF0IHBsYXksIHBlcmhhcHMgYENPTkZJR19TTFVCYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gYmUgc3VyZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgaW5pdC9LY29uZmlnYCBvciBtYXliZSBga2VybmVsL0tjb25maWcucHJlZW1wdGAgdG8gZmluZCBgUFJFRU1QVF9SVGAuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVFTVBUX1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTkxLVxua2VybmVsL0tjb25maWcucHJlZW1wdDo5Mjpjb25maWcgUFJFRU1QVF9SVFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cdGJvb2wgXCYjMzQ7RnVsbHkgUHJlZW1wdGlibGUgS2VybmVsIChSZWFsLVRpbWUpXCYjMzQ7XG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMDgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTExMC1cdGJvb2wgXCYjMzQ7RW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgcHJlZW1wdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGp1bXAgaW50byBga2VybmVsL0tjb25maWcucHJlZW1wdGAuIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHRoaXMgc3R1ZmYgYXJlIGFyb3VuZCBsaW5lIDkyLiBMZXQgbWUgZ3JhYiBteSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHNlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdGRlcGVuZHMgb24gIUFSQ0hfTk9fUFJFRU1QVFxuICA4MTpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19QUkVFTVBUX0xBWllcbiAgODI6XHRcdHNlbGVjdCBQUkVFTVBUX0JVSUxEIGlmICFQUkVFTVBUX0RZTkFNSUNcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBzY2hlZHVsZXIgZHJpdmVuIHByZWVtcHRpb24gbW9kZWwgdGhhdFxuICA4NTpcdFx0ICBpcyBmdW5kYW1lbnRhbGx5IHNpbWlsYXIgdG8gZnVsbCBwcmVlbXB0aW9uLCBidXQgaXMgbGVzc1xuICA4NjpcdFx0ICBlYWdlciB0byBwcmVlbXB0IFNDSEVEX05PUk1BTCB0YXNrcyBpbiBhbiBhdHRlbXB0IHRvXG4gIDg3Olx0XHQgIHJlZHVjZSBsb2NrIGhvbGRlciBwcmVlbXB0aW9uIGFuZCByZWNvdmVyIHNvbWUgb2YgdGhlIHBlcmZvcm1hbmNlXG4gIDg4Olx0XHQgIGdhaW5zIHNlZW4gZnJvbSB1c2luZyBWb2x1bnRhcnkgcHJlZW1wdGlvbi5cbiAgODk6XHRcbiAgOTA6XHRlbmRjaG9pY2VcbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgUFJFRU1QVF9SVFxuICA5MzpcdFx0Ym9vbCBcJiMzNDtGdWxseSBQcmVlbXB0aWJsZSBLZXJuZWwgKFJlYWwtVGltZSlcJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gRVhQRVJUIFx1MDAyNlx1MDAyNiBBUkNIX1NVUFBPUlRTX1JUIFx1MDAyNlx1MDAyNiAhQ09NUElMRV9URVNUXG4gIDk1Olx0XHRzZWxlY3QgUFJFRU1QVElPTlxuICA5NjpcdFx0aGVscFxuICA5NzpcdFx0ICBUaGlzIG9wdGlvbiB0dXJucyB0aGUga2VybmVsIGludG8gYSByZWFsLXRpbWUga2VybmVsIGJ5IHJlcGxhY2luZ1xuICA5ODpcdFx0ICB2YXJpb3VzIGxvY2tpbmcgcHJpbWl0aXZlcyAoc3BpbmxvY2tzLCByd2xvY2tzLCBldGMuKSB3aXRoXG4gIDk5Olx0XHQgIHByZWVtcHRpYmxlIHByaW9yaXR5LWluaGVyaXRhbmNlIGF3YXJlIHZhcmlhbnRzLCBlbmZvcmNpbmdcbiAxMDA6XHRcdCAgaW50ZXJydXB0IHRocmVhZGluZyBhbmQgaW50cm9kdWNpbmcgbWVjaGFuaXNtcyB0byBicmVhayB1cCBsb25nXG4gMTAxOlx0XHQgIG5vbi1wcmVlbXB0aWJsZSBzZWN0aW9ucy4gVGhpcyBtYWtlcyB0aGUga2VybmVsLCBleGNlcHQgZm9yIHZlcnlcbiAxMDI6XHRcdCAgbG93IGxldmVsIGFuZCBjcml0aWNhbCBjb2RlIHBhdGhzIChlbnRyeSBjb2RlLCBzY2hlZHVsZXIsIGxvd1xuIDEwMzpcdFx0ICBsZXZlbCBpbnRlcnJ1cHQgaGFuZGxpbmcpIGZ1bGx5IHByZWVtcHRpYmxlIGFuZCBicmluZ3MgbW9zdFxuIDEwNDpcdFx0ICBleGVjdXRpb24gY29udGV4dHMgdW5kZXIgc2NoZWR1bGVyIGNvbnRyb2wuXG4gMTA1Olx0XG4gMTA2Olx0XHQgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIHN5c3RlbXMgd2hpY2hcbiAxMDc6XHRcdCAgcmVxdWlyZSByZWFsLXRpbWUgZ3VhcmFudGVlcy5cbiAxMDg6XHRcbiAxMDk6XHRjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXG4gMTEwOlx0XHRib29sIFwmIzM0O0VuZm9yY2Ugc29mdGlycSBzeW5jaHJvbmlzYXRpb24gb24gUFJFRU1QVF9SVFwmIzM0O1xuIDExMTpcdFx0ZGVwZW5kcyBvbiBQUkVFTVBUX1JUXG4gMTEyOlx0XHRoZWxwXG4gMTEzOlx0XHQgIEVuZm9yY2Ugc3luY2hyb25pc2F0aW9uIGFjcm9zcyB0aGUgc29mdGlycXMgY29udGV4dC4gT24gUFJFRU1QVF9SVFxuIDExNDpcdFx0ICB0aGUgc29mdGlycSBpcyBwcmVlbXB0aWJsZS4gVGhpcyBlbmZvcmNlcyB0aGUgc2FtZSBwZXItQ1BVIEJMS1xuIDExNTpcdFx0ICBzZW1hbnRpYyBub24tUFJFRU1QVF9SVCBidWlsZHMgaGF2ZS4gVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZFxuIDExNjpcdFx0ICBiZWNhdXNlIHBlci1DUFUgbG9ja3Mgd2VyZSBhZGRlZCB0byBhdm9pZCB0aGUgcGVyLUNQVSBCS0wuXG4gMTE3Olx0XG4gMTE4Olx0XHQgIFRoaXMgc3dpdGNoIHByb3ZpZGVzIHRoZSBvbGQgYmVoYXZpb3VyIGZvciB0ZXN0aW5nIHJlYXNvbnMuIFNlbGVjdFxuIDExOTpcdFx0ICB0aGlzIGlmIHlvdSBzdXNwZWN0IGFuIGVycm9yIHdpdGggcHJlZW1wdGlibGUgc29mdGlycSBhbmQgd2FudCB0ZXN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjcyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IFNsYWIgRnJlZWluZyBNZWNoYW5pc21zKioKClJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb2RlIGhhbmRsZXMgZnJlZWluZyBtZW1vcnkgc2xhYnMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUga2V5IGNvbnN0YW50cyBvciBtYWNyb3MgaW52b2x2ZWQuIEZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGBTTEFCX0ZSRUVfREVGQVVMVGAgYW5kIGBTTEFCX0ZSRUVfTk9MT0NLYCBhY3R1YWxseSBzaWduaWZ5LiBUaGVpciBuYW1lcyBhcmUgc3VnZ2VzdGl2ZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZWlyIGJlaGF2aW9yIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYF9ERUZBVUxUYCByZXByZXNlbnRzIHRoZSB0eXBpY2FsIHNsYWIgZnJlZWluZyBtZWNoYW5pc20gYW5kIGlmIGBfTk9MT0NLYCBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBzdHJhdGVneS4gTWF5YmUgdGhleSByZWxhdGUgdG8gbG9ja2luZyBzdHJhdGVnaWVzIG9yIGRlZmF1bHQgYmVoYXZpb3JzLgoKVG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLCBJJiMzOTttIGdvaW5nIHRvIGRvIGEgZ2xvYmFsIHNlYXJjaCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgU0xBQl9GUkVFX2Agd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIHBhdHRlcm4gaXMgdXN1YWxseSBoZWxwZnVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhbiBvdmVydmlldyBvZiBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoZXNlIGNvbnN0YW50cyBhcmUgdXRpbGl6ZWQuIFRoaXMgd2lsbCBzaG93IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBob3cgdG8gd29yayB3aXRoIHRoZSBkZWZpbmVkIGJlaGF2aW9yLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIHV0aWxpemF0aW9ucywgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgaG93IHRoZXNlIG1lbW9yeSBzbGFicyBhcmUgbWFuYWdlZCBhbmQgZnJlZWQuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcywgd2hldGhlciBJJiMzOTttIGRlYnVnZ2luZywgb3B0aW1pemluZywgb3Igc2ltcGx5IGdhaW5pbmcgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0xBQl9GUkVFXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jPTI4Mz1zdGF0aWMgdm9pZCBsa2R0bV9CVUREWV9JTklUX09OX0FMTE9DKHZvaWQpXG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYy0zMTUtXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjMxNjpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfRE9VQkxFKHZvaWQpXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMxNy17XG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYy0zMzItXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjMzMzpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfQ1JPU1Modm9pZClcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzM0LXtcbi0tXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM0OC1cbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM6MzQ5OnN0YXRpYyB2b2lkIGxrZHRtX1NMQUJfRlJFRV9QQUdFKHZvaWQpXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM1MC17XG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYz0zNzM9c3RhdGljIHN0cnVjdCBjcmFzaHR5cGUgY3Jhc2h0eXBlc1tdID0ge1xuLS1cbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzgyLVx0Q1JBU0hUWVBFKEJVRERZX0lOSVRfT05fQUxMT0MpLFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODM6XHRDUkFTSFRZUEUoU0xBQl9GUkVFX0RPVUJMRSksXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjM4NDpcdENSQVNIVFlQRShTTEFCX0ZSRUVfQ1JPU1MpLFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODU6XHRDUkFTSFRZUEUoU0xBQl9GUkVFX1BBR0UpLFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYy0zODYtfTtcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmM9NDg0PXZvaWQga2FzYW5faW5pdF9vYmplY3RfbWV0YShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIGNvbnN0IHZvaWQgKm9iamVjdClcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmMtNDk2LVx0ICogdmFsdWUgZm9yIHRoZSBmaXJzdCA4IGJ5dGVzIG9mIGEgbmV3bHkgYWxsb2NhdGVkIG9iamVjdCBpcyBub3Rcbm1tL2thc2FuL2dlbmVyaWMuYzo0OTc6XHQgKiBLQVNBTl9TTEFCX0ZSRUVfTUVUQS5cbm1tL2thc2FuL2dlbmVyaWMuYy00OTgtXHQgKi9cbi0tXG5tbS9rYXNhbi9nZW5lcmljLmM9NTA3PXN0YXRpYyB2b2lkIHJlbGVhc2VfZnJlZV9tZXRhKGNvbnN0IHZvaWQgKm9iamVjdCwgc3RydWN0IGthc2FuX2ZyZWVfbWV0YSAqbWV0YSlcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmMtNTA5LVx0LyogQ2hlY2sgaWYgZnJlZSBtZXRhIGlzIHZhbGlkLiAqL1xubW0va2FzYW4vZ2VuZXJpYy5jOjUxMDpcdGlmICgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhvYmplY3QpICE9IEtBU0FOX1NMQUJfRlJFRV9NRVRBKVxubW0va2FzYW4vZ2VuZXJpYy5jLTUxMS1cdFx0cmV0dXJuO1xuLS1cbm1tL2thc2FuL2dlbmVyaWMuYz01NzM9dm9pZCBrYXNhbl9zYXZlX2ZyZWVfaW5mbyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsIHZvaWQgKm9iamVjdClcbi0tXG5tbS9rYXNhbi9nZW5lcmljLmMtNTg2LVx0LyogTWFyayBmcmVlIG1ldGEgYXMgdmFsaWQuICovXG5tbS9rYXNhbi9nZW5lcmljLmM6NTg3Olx0Kih1OCAqKWthc2FuX21lbV90b19zaGFkb3cob2JqZWN0KSA9IEtBU0FOX1NMQUJfRlJFRV9NRVRBO1xubW0va2FzYW4vZ2VuZXJpYy5jLTU4OC19XG4tLVxubW0va2FzYW4va2FzYW4uaD0xMjQ9c3RhdGljIGlubGluZSBib29sIGthc2FuX3JlcXVpcmVzX21ldGEodm9pZClcbi0tXG5tbS9rYXNhbi9rYXNhbi5oLTE1Ny1cbm1tL2thc2FuL2thc2FuLmg6MTU4OiNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFX01FVEFcdDB4RkEgIC8qIGZyZWVkIHNsYWIgb2JqZWN0IHdpdGggZnJlZSBtZXRhICovXG5tbS9rYXNhbi9rYXNhbi5oLTE1OS0jZGVmaW5lIEtBU0FOX0dMT0JBTF9SRURaT05FXHQweEY5ICAvKiByZWR6b25lIGZvciBnbG9iYWwgdmFyaWFibGUgKi9cbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTI3MD1zdHJ1Y3QgcWxpc3Rfbm9kZSB7XG4tLVxubW0va2FzYW4va2FzYW4uaC0yODYtICogRnJlZSBtZXRhIGlzIGNvbnNpZGVyZWQgdmFsaWQgd2hlbmV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBzaGFkb3cgYnl0ZSB0aGF0XG5tbS9rYXNhbi9rYXNhbi5oOjI4NzogKiBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgOCBieXRlcyBvZiB0aGUgb2JqZWN0IGlzIEtBU0FOX1NMQUJfRlJFRV9NRVRBLlxubW0va2FzYW4va2FzYW4uaC0yODgtICovXG4tLVxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz03ND1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NoYWRvd19idWdfdHlwZShzdHJ1Y3Qga2FzYW5fcmVwb3J0X2luZm8gKmluZm8pXG4tLVxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYy0xMTItXHRjYXNlIEtBU0FOX1NMQUJfRlJFRTpcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmM6MTEzOlx0Y2FzZSBLQVNBTl9TTEFCX0ZSRUVfTUVUQTpcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTE0LVx0XHRidWdfdHlwZSA9IFwmIzM0O3NsYWItdXNlLWFmdGVyLWZyZWVcJiMzNDs7XG4tLVxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz0xNjA9dm9pZCBrYXNhbl9jb21wbGV0ZV9tb2RlX3JlcG9ydF9pbmZvKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcbi0tXG5tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jLTE3NS1cbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmM6MTc2Olx0aWYgKCoodTggKilrYXNhbl9tZW1fdG9fc2hhZG93KGluZm8tXHUwMDNlb2JqZWN0KSA9PSBLQVNBTl9TTEFCX0ZSRUVfTUVUQSkge1xubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYzoxNzc6XHRcdC8qIEZyZWUgbWV0YSBtdXN0IGJlIHByZXNlbnQgd2l0aCBLQVNBTl9TTEFCX0ZSRUVfTUVUQS4gKi9cbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTc4LVx0XHRmcmVlX21ldGEgPSBrYXNhbl9nZXRfZnJlZV9tZXRhKGluZm8tXHUwMDNlY2FjaGUsIGluZm8tXHUwMDNlb2JqZWN0KTtcbi0tXG5tbS9zbGFiLmgtMjYtXG5tbS9zbGFiLmg6Mjc6I2RlZmluZSBTTEFCX0ZSRUVfREVGQVVMVFx0MHgwMCAvKiBubyBmbGFncyAqL1xubW0vc2xhYi5oOjI4OiNkZWZpbmUgU0xBQl9GUkVFX05PTE9DS1x0MHgwMSAvKiBzcGlubmluZyBub3QgYWxsb3dlZCAqL1xubW0vc2xhYi5oLTI5LVxubW0vc2xhYi5oPTMwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRvX2FsbG9jX2ZsYWdzKHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2xhYi5oLTMxLXtcbm1tL3NsYWIuaDozMjpcdGlmIChmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKVxubW0vc2xhYi5oLTMzLVx0XHRyZXR1cm4gU0xBQl9BTExPQ19OT0xPQ0s7XG4tLVxubW0vc2xhYi5oPTQzPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2xhYi5oLTQ0LXtcbm1tL3NsYWIuaDo0NTpcdHJldHVybiAhKGZyZWVfZmxhZ3MgXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spO1xubW0vc2xhYi5oLTQ2LX1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMxNS1cbm1tL3NsYWJfY29tbW9uLmM6MTMxNjpcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcbm1tL3NsYWJfY29tbW9uLmMtMTMxNy1cdFx0Z290byBmYWxsYmFjaztcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTE2NjY9c3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTE2NzktXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbm1tL3NsYWJfY29tbW9uLmM6MTY4MDpcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xubW0vc2xhYl9jb21tb24uYy0xNjgxLVxuLS1cbm1tL3NsdWIuYz0yODQ1PXN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxuLS1cbm1tL3NsdWIuYy0yODU4LVxubW0vc2x1Yi5jOjI4NTk6XHRpZiAodW5saWtlbHkoZnJlZV9mbGFncyBcdTAwMjYgU0xBQl9GUkVFX05PTE9DSykpXG5tbS9zbHViLmMtMjg2MC1cdFx0a2ZyZWVfbm9sb2NrKHNoZWFmKTtcbi0tXG5tbS9zbHViLmM9Mjg2Nz1zdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG5tbS9zbHViLmMtMjg2OC17XG5tbS9zbHViLmM6Mjg2OTpcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xubW0vc2x1Yi5jLTI4NzAtfVxuLS1cbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5tbS9zbHViLmMtNjA5MS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpXG5tbS9zbHViLmM6NjA5MjogKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcbm1tL3NsdWIuYy02MDkzLSAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGtkdG0vdGVzdHMudHh0PTMyPUJVRERZX0lOSVRfT05fQUxMT0MgTWVtb3J5IGFwcGVhcnMgaW5pdGlhbGl6ZWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xrZHRtL3Rlc3RzLnR4dDozMzpTTEFCX0ZSRUVfRE9VQkxFXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzQ6U0xBQl9GUkVFX0NST1NTXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzU6U0xBQl9GUkVFX1BBR0VcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xrZHRtL3Rlc3RzLnR4dC0zNi0jU09GVExPQ0tVUCBIYW5ncyB0aGUgc3lzdGVtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFNMVUIgYW5kIFJDVSBTaGVhdmVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljcy4gTXkgZm9jdXMgaXMgb24gYG1tL3NsYWJfY29tbW9uLmNgIGFuZCBgbW0vc2x1Yi5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIFNMQUIgYW5kIFNMVUIgYWxsb2NhdG9ycyByZXNpZGVzLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgZnJlZWluZyBtZW1vcnksIHNwZWNpZmljYWxseSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgU0xBQl9GUkVFX0RFRkFVTFRgIGFuZCBgU0xBQl9GUkVFX05PTE9DS2AsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIGBrZnJlZV9yY3Vfc2hlYWZgLiBUaGUgbmV3IFNMVUIgc2hlYWYvYmF0Y2hpbmcgZmVhdHVyZSwgSSB0aGluaywgaXMgd2hlcmUgdGhlIGFjdGlvbiBpcy4gVGltZSB0byB0cmFjZSB0aGluZ3MgZG93bi4gSSBzaG91bGQgY2hlY2sgb3V0IGBfX2tmcmVlX3JjdV9zaGVhZmAgaW4gYG1tL3NsdWIuY2AgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgaG93IFNMVUIgc2hlYXZlcyBhcmUgaGFuZGxlZCBkdXJpbmcgbWVtb3J5IHJlbGVhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjEwMDpcdCAqL1xuNjEwMTpcdHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xuNjEwMjpcdFxuNjEwMzpcdGJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXG42MTA0Olx0e1xuNjEwNTpcdFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbjYxMDY6XHRcdHN0cnVjdCBzbGFiX3NoZWFmICpyY3Vfc2hlYWY7XG42MTA3Olx0XHRib29sIGFsbG93X3NwaW4gPSBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGZyZWVfZmxhZ3MpO1xuNjEwODpcdFxuNjEwOTpcdFx0Vk1fV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBhbGxvd19zcGluKTtcbjYxMTA6XHRcbjYxMTE6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG42MTEyOlx0XHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuNjExMzpcdFxuNjExNDpcdFx0aWYgKCFsb2NhbF90cnlsb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpXG42MTE1Olx0XHRcdGdvdG8gZmFpbDtcbjYxMTY6XHRcbjYxMTc6XHRcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbjYxMTg6XHRcbjYxMTk6XHRcdGlmICh1bmxpa2VseSghcGNzLVx1MDAzZXJjdV9mcmVlKSkge1xuNjEyMDpcdFx0XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XG42MTIxOlx0XHRcdHN0cnVjdCBub2RlX2Jhcm4gKmJhcm47XG42MTIyOlx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncyA9IHRvX2FsbG9jX2ZsYWdzKGZyZWVfZmxhZ3MpO1xuNjEyMzpcdFx0XHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcbjYxMjQ6XHRcbjYxMjU6XHRcdFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBmYWxsIGJhY2sgKi9cbjYxMjY6XHRcdFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcbjYxMjc6XHRcdFx0XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbjYxMjg6XHRcdFx0XHRnb3RvIGZhaWw7XG42MTI5Olx0XHRcdH1cbjYxMzA6XHRcbjYxMzE6XHRcdFx0aWYgKHBjcy1cdTAwM2VzcGFyZSBcdTAwMjZcdTAwMjYgcGNzLVx1MDAzZXNwYXJlLVx1MDAzZXNpemUgPT0gMCkge1xuNjEzMjpcdFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IHBjcy1cdTAwM2VzcGFyZTtcbjYxMzM6XHRcdFx0XHRwY3MtXHUwMDNlc3BhcmUgPSBOVUxMO1xuNjEzNDpcdFx0XHRcdGdvdG8gZG9fZnJlZTtcbjYxMzU6XHRcdFx0fVxuNjEzNjpcdFxuNjEzNzpcdFx0XHRiYXJuID0gZ2V0X2Jhcm4ocyk7XG42MTM4Olx0XHRcdGlmICghYmFybikge1xuNjEzOTpcdFx0XHRcdGxvY2FsX3VubG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spO1xuNjE0MDpcdFx0XHRcdGdvdG8gZmFpbDtcbjYxNDE6XHRcdFx0fVxuNjE0MjpcdFxuNjE0MzpcdFx0XHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xuNjE0NDpcdFxuNjE0NTpcdFx0XHRpZiAoZW1wdHkpIHtcbjYxNDY6XHRcdFx0XHRwY3MtXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcbjYxNDc6XHRcdFx0XHRnb3RvIGRvX2ZyZWU7XG42MTQ4Olx0XHRcdH1cbjYxNDk6XHRcbjYxNTA6XHRcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG42MTUxOlx0XG42MTUyOlx0XHRcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7XG42MTUzOlx0XG42MTU0Olx0XHRcdGlmICghZW1wdHkpXG42MTU1Olx0XHRcdFx0Z290byBmYWlsO1xuNjE1NjpcdFxuNjE1NzpcdFx0XHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSkge1xuNjE1ODpcdFx0XHRcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBlbXB0eSwgZnJlZV9mbGFncyk7XG42MTU5Olx0XHRcdFx0Z290byBmYWlsO1xuNjE2MDpcdFx0XHR9XG42MTYxOlx0XG42MTYyOlx0XHRcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbjYxNjM6XHRcbjYxNjQ6XHRcdFx0aWYgKHVubGlrZWx5KHBjcy1cdTAwM2VyY3VfZnJlZSkpXG42MTY1Olx0XHRcdFx0X19mcmVlX2VtcHR5X3NoZWFmKHMsIGVtcHR5LCBmcmVlX2ZsYWdzKTtcbjYxNjY6XHRcdFx0ZWxzZVxuNjE2NzpcdFx0XHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xuNjE2ODpcdFx0fVxuNjE2OTpcdFxuNjE3MDpcdGRvX2ZyZWU6XG42MTcxOlx0XG42MTcyOlx0XHRyY3Vfc2hlYWYgPSBwY3MtXHUwMDNlcmN1X2ZyZWU7XG42MTczOlx0XG42MTc0Olx0XHQvKlxuNjE3NTpcdFx0ICogU2luY2Ugd2UgZmx1c2ggaW1tZWRpYXRlbHkgd2hlbiBzaXplIHJlYWNoZXMgY2FwYWNpdHksIHdlIG5ldmVyIHJlYWNoXG42MTc2Olx0XHQgKiB0aGlzIHdpdGggc2l6ZSBhbHJlYWR5IGF0IGNhcGFjaXR5LCBzbyBubyBPT0Igd3JpdGUgaXMgcG9zc2libGUuXG42MTc3Olx0XHQgKi9cbjYxNzg6XHRcdHJjdV9zaGVhZi1cdTAwM2VvYmplY3RzW3JjdV9zaGVhZi1cdTAwM2VzaXplJiM0MzsmIzQzO10gPSBvYmo7XG42MTc5Olx0XG42MTgwOlx0XHRpZiAobGlrZWx5KHJjdV9zaGVhZi1cdTAwM2VzaXplIFx1MDAzYyBzLVx1MDAzZXNoZWFmX2NhcGFjaXR5KSkge1xuNjE4MTpcdFx0XHRyY3Vfc2hlYWYgPSBOVUxMO1xuNjE4MjpcdFx0fSBlbHNlIHtcbjYxODM6XHRcdFx0cGNzLVx1MDAzZXJjdV9mcmVlID0gTlVMTDtcbjYxODQ6XHRcdFx0cmN1X3NoZWFmLVx1MDAzZW5vZGUgPSBudW1hX25vZGVfaWQoKTtcbjYxODU6XHRcdH1cbjYxODY6XHRcbjYxODc6XHRcdC8qXG42MTg4Olx0XHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xuNjE4OTpcdFx0ICogZmx1c2hfYWxsX3JjdV9zaGVhdmVzKCkgZG9lc24mIzM5O3QgbWlzcyB0aGlzIHNoZWFmXG42MTkwOlx0XHQgKi9cbjYxOTE6XHRcdGlmIChyY3Vfc2hlYWYpIHtcbjYxOTI6XHRcdFx0LypcbjYxOTM6XHRcdFx0ICogV2l0aCAhYWxsb3dfc3Bpbiwgd2UgbWlnaHQgaGF2ZSBpbnRlcnJ1cHRlZCBjYWxsX3JjdSgpJiMzOTtzXG42MTk0Olx0XHRcdCAqIElSUS1kaXNhYmxlZCBjcml0aWNhbCBzZWN0aW9uLiBJZiBJUlFzIGFyZSBub3QgZGlzYWJsZWQsXG42MTk1Olx0XHRcdCAqIHdlIGtub3cgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuXG42MTk2Olx0XHRcdCAqL1xuNjE5NzpcdFx0XHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXHUwMDI2XHUwMDI2IGlycXNfZGlzYWJsZWQoKSkpIHtcbjYxOTg6XHRcdFx0XHRzdHJ1Y3QgZGVmZXJyZWRfcGVyY3B1X3dvcmsgKmRwdztcbjYxOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYF9fa2ZyZWVfcmN1X3NoZWFmYCBoYXMgYSBjb25kaXRpb25hbCB3YXJuaW5nLCBgVk1fV0FSTl9PTl9PTkNFYCwgdGhhdCB0cmlnZ2VycyBpZiBgYWxsb3dfc3BpbmAgKHdoaWNoIGlzIHRydWUgaW4gdGhlIGRlZmF1bHQgc3RhdGUpIGFuZCBgQ09ORklHX1BSRUVNUFRfUlRgIGFyZSBib3RoIGVuYWJsZWQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgbWVtb3J5IGlzIGZyZWVkLCBhbmQgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhdXNlZCBwcm9ibGVtcyB3aXRoIHNsZWVwaW5nIGxvY2tzIHVuZGVyIGBQUkVFTVBUX1JUYCwgc3BlY2lmaWNhbGx5IHdoZW4gYSByYXcgc3BpbmxvY2sgd2FzIGhlbGQuIFRoZSBmaXggYnlwYXNzZXMgdGhlIHByb2JsZW1hdGljIGZ1bmN0aW9uIGVudGlyZWx5IGluIG9uZSBjYXNlIGFuZCBjaGFuZ2VzIHRoZSBmbGFncyBwYXNzZWQgaW4gYW5vdGhlci4KCk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLiBMZXQgbWUgY2hlY2s6IHRoaXMgY2hhbmdlIGlzICpkZWZpbml0ZWx5KiBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBrdmZyZWVfY2FsbF9yY3VgKSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgY29uc3RhbnRseSBleGVjdXRlZCwgc28gYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSB3aGVyZSBmdXp6aW5nIHdpbGwgZXhwb3NlIHBvdGVudGlhbGx5IHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuCgpOb3csIGZvciBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBwcmVmZXIgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGt2ZnJlZV9jYWxsX3JjdWAgKmlzKiBhIHBvdGVudGlhbGx5IGhvdCBmdW5jdGlvbiwgc28gbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoaXMuLi5pdCBpcyBpbmRlZWQgYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uL1JDVSBmcmVlaW5nIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSAqdG9vKiBnZW5lcmFsLiBXaGF0IGRpZCB0aGUgcGF0Y2ggYWN0dWFsbHkgdG91Y2g/IGBrZnJlZV9yY3Vfc2hlYWZgLCBga3ZmcmVlX2NhbGxfcmN1YCwgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AuLi4gV2FpdCwgdGhlcmUmIzM5O3MgYW5vdGhlciBvbmU6IGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbiwgYW5kIGlzICpub3QqIG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgYnV0IGl0IGNhbGxzIGBfX2tmcmVlX3JjdV9zaGVhZmAgd2l0aCBhIGZsYWcgdGhhdCAqd2FzKiBtb2RpZmllZC4KCk9rYXksIHNvIGxldCYjMzk7cyBzZWUsIHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdD8gTG9va2luZyBmb3Igbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLi4uYF9fa2ZyZWVfcmN1X3NoZWFmYCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9zbGFiLmhgLiBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBub3QgbW9kaWZpZWQsIGJ1dCBjYWxsZWQgYnkgdGhlIGNoYW5nZWQgY29kZSwgc28gcGVyaGFwcyBpdCBzaG91bGQgYmUgdGhlcmUgYXMgd2VsbC4gYGt2ZnJlZV9jYWxsX3JjdWAgaXMgbWF5YmUgdG9vIGdlbmVyYWwuCgpTbywgZm9yIG5vdywgbGV0JiMzOTtzIGluY2x1ZGUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgYW5kIHNlZSBpZiBtb3JlIGNhbGxlcnMgYXJlIGF2YWlsYWJsZSBmb3IgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AuCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMTA9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKTtcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTExOnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTExMi1cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTE0OT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTUzLVx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIGt2cmhmKSBcdTAwM2U9IDQwOTYpO1x0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExNTQ6XHRcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcdTAwMjYoKF9fX3ApLVx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE1NS1cdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTI5Nz1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTtcbm1tL3NsYWJfY29tbW9uLmMtMTI5OC1cbm1tL3NsYWJfY29tbW9uLmM6MTI5OTp2b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG5tbS9zbGFiX2NvbW1vbi5jLTEzMDAte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMyMy19XG5tbS9zbGFiX2NvbW1vbi5jOjEzMjQ6RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cbi0tXG5tbS9zbHViLmM9NjAzMT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubW0vc2x1Yi5jLTYwOTAtICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG5tbS9zbHViLmM6NjA5MTogKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpXG5tbS9zbHViLmMtNjA5Mi0gKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX3JjdV9ub2xvY2tgIE1hY3JvKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGludGVybmFscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYGtmcmVlX3JjdV9ub2xvY2tgLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvcmN1cGRhdGUuaGAgZmlsZS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbiB0aGVyZS4gVGhpcyB1c3VhbGx5IGdpdmVzIG1lIHRoZSBxdWlja2VzdCBwYXRoIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gaXQgY29tZXMgdG8gdGhlIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRob3V0IHRoZSBsb2NrLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgdGhhdCBzY2hlZHVsZXMgdGhlIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGFuIG9iamVjdCwgaG9wZWZ1bGx5IGFsb25nc2lkZSBzb21lIGhpbnRzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIGluZnJhc3RydWN0dXJlLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIGFzIEkgZXhwZWN0LCB1c2luZyBpdCBhbmQgaXRzIHZhcmlhbnRzIGlzIGEga2V5IG9wdGltaXphdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbnVhbmNlIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHQgKiBAa3ZyaGY6IHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkIHdpdGhpbiB0aGUgdHlwZSBvZiBAcHRyLlxuMTE0MTpcdCAqXG4xMTQyOlx0ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuMTE0MzpcdCAqIHdpdGhvdXQgYW55IGRlZmVycmVkIHByb2Nlc3NpbmcsIGJ1dCBtYXkgc3RpbGwgZGVmZXIgZnJlZWluZy5cbjExNDQ6XHQgKiBMYXJnZSBrbWFsbG9jIGFuZCB2bWFsbG9jIG9iamVjdHMgYXJlIGFsd2F5cyBkZWZlcnJlZC5cbjExNDU6XHQgKlxuMTE0NjpcdCAqIGtmcmVlX3JjdV9ub2xvY2soKSBzdXBwb3J0cyAyLWFyZyB2YXJpYW50IG9ubHkuXG4xMTQ3Olx0ICovXG4xMTQ4Olx0I2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXHRcdFx0XHRcdFx0XFxcbjExNDk6XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMTE1MDpcdFx0dHlwZW9mIChwdHIpIF9fX3AgPSAocHRyKTtcdFx0XHRcdFx0XHRcXFxuMTE1MTpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjExNTI6XHRcdGlmIChfX19wKSB7XHRcdFx0XHRcdFx0XHRcdFxcXG4xMTUzOlx0XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKihwdHIpKSwga3ZyaGYpIFx1MDAzZT0gNDA5Nik7XHRcdFxcXG4xMTU0Olx0XHRcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcdTAwMjYoKF9fX3ApLVx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcdFxcXG4xMTU1Olx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjExNTY6XHR9IHdoaWxlICgwKVxuMTE1NzpcdFxuMTE1ODpcdC8qXG4xMTU5Olx0ICogUGxhY2UgdGhpcyBhZnRlciBhIGxvY2stYWNxdWlzaXRpb24gcHJpbWl0aXZlIHRvIGd1YXJhbnRlZSB0aGF0XG4xMTYwOlx0ICogYW4gVU5MT0NLJiM0MztMT0NLIHBhaXIgYWN0cyBhcyBhIGZ1bGwgYmFycmllci4gIFRoaXMgZ3VhcmFudGVlIGFwcGxpZXNcbjExNjE6XHQgKiBpZiB0aGUgVU5MT0NLIGFuZCBMT0NLIGFyZSBleGVjdXRlZCBieSB0aGUgc2FtZSBDUFUgb3IgaWYgdGhlXG4xMTYyOlx0ICogVU5MT0NLIGFuZCBMT0NLIG9wZXJhdGUgb24gdGhlIHNhbWUgbG9jayB2YXJpYWJsZS5cbjExNjM6XHQgKi9cbjExNjQ6XHQjaWZkZWYgQ09ORklHX0FSQ0hfV0VBS19SRUxFQVNFX0FDUVVJUkVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBga2ZyZWVfcmN1X25vbG9ja2AgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBrZnJlZV9yY3Vfbm9sb2NrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHBhdHRlcm5zLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGluIG15IGhlYWQ6ICpXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWw/IFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9iamVjdHMgYXJlIGJlaW5nIGZyZWVkIHRoaXMgd2F5PyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGluIHdoaWNoIGBrZnJlZV9yY3Vfbm9sb2NrYCBpcyBwcmVmZXJyZWQgb3ZlciBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgIG9yIHRoZSBzdGFuZGFyZCBga2ZyZWVfcmN1YD8qCgpJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgJiMzNDtubyBsb2NrJiMzNDsgYXBwZW5kYWdlLCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgZm9yIHNwZWNpZmljIHNpdHVhdGlvbnMgd2hlcmUgdGFraW5nIGEgZ2xvYmFsIGxvY2sgaXMgdW5kZXNpcmFibGUgb3IgdW5uZWNlc3NhcnkgZm9yIFJDVS1zYWZlIG1lbW9yeSBkZWFsbG9jYXRpb24uIFRoZXJlZm9yZSwgSSB3YW50IHRvIGxvb2sgZm9yIHNjZW5hcmlvcyB3aGVyZSBsb2NrIGNvbnRlbnRpb24gaXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29kZSBwYXRocyB1c2UgaXQuCgpNeSBicmFpbiYjMzk7cyBhbHJlYWR5IGZpcmluZyB1cCBzZWFyY2ggcXVlcmllcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIGNvZGUsIGxvb2tpbmcgZm9yIGNhbGxzIHRvIGBrZnJlZV9yY3Vfbm9sb2NrYC4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIHVzYWdlLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGFuZCBzeW5jaHJvbml6YXRpb24gY29uc3RyYWludHMgdGhhdCBhcmUgcHJvbXB0aW5nIHRoZSB1c2Ugb2YgYGtmcmVlX3JjdV9ub2xvY2tgLiBXaGF0IHNwZWNpZmljIHRyYWRlLW9mZnMgYXJlIGJlaW5nIG1hZGUgaW4gY2hvb3NpbmcgdGhpcyBmdW5jdGlvbj8gKklzIGl0IHVzZWQgaW4gaW50ZXJydXB0IGNvbnRleHQ/IERvZXMgaXQgaW1wbHkgc3BlY2lmaWMgbWVtb3J5IG9yZGVyaW5nIHJlcXVpcmVtZW50cz8qIEnigJlsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIHVzYWdlIChvciBsYWNrIHRoZXJlb2YpIGFyb3VuZCB0aGUgY2FsbCBzaXRlcy4gVGhpcyBjb250ZXh0IGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQuCgpVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZ2FpbiBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vdGl2YXRpb25zIGJlaGluZCBpdHMgdXNlIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJJiMzOTtsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IG9yIHBvc3NpYmxlIHBpdGZhbGxzIGluIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tmcmVlX3JjdV9ub2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMzA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM3LS8qKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExMzg6ICoga2ZyZWVfcmN1X25vbG9jaygpIC0gYSB2ZXJzaW9uIG9mIGtmcmVlX3JjdSgpIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC5cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM5LSAqIEBwdHI6IHBvaW50ZXIgdG8ga2ZyZWUgZm9yIGRvdWJsZS1hcmd1bWVudCBpbnZvY2F0aW9ucy5cbi0tXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0MS0gKlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oOjExNDI6ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDMtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQ1LSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0NjogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDctICovXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0ODojZGVmaW5lIGtmcmVlX3JjdV9ub2xvY2socHRyLCBrdnJoZilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDktZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5saWIvdGVzdHMvc2x1Yl9rdW5pdC5jPTM0ND1zdGF0aWMgdm9pZCB0ZXN0X25vbG9jayhzdHJ1Y3QgdGVzdF9ub2xvY2tfY29udGV4dCAqY3R4KVxuLS1cbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzU5LVx0aWYgKGNhbl91c2Vfa2ZyZWVfcmN1IFx1MDAyNlx1MDAyNiAoY3R4LVx1MDAzZWNhbGxiYWNrX2NvdW50IFx1MDAyNiAyKSlcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM6MzYwOlx0XHRrZnJlZV9yY3Vfbm9sb2NrKG9ianAsIGt2cmN1KTtcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVx0ZWxzZVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE4Nj12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE4Ny17XG5tbS9zbGFiX2NvbW1vbi5jOjIxODg6XHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xubW0vc2xhYl9jb21tb24uYy0yMTg5LVx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDA1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIGFuZCBTTFVCIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBkbyB3ZSBzdGFydCB3aXRoIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWU/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBjYXVzaW5nIHRoZSBzbG93ZG93bi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aG9zZSBhcm91bmQgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAuIEkgc3VzcGVjdCB0aGlzIG1pZ2h0IGJlIHBsYXlpbmcgYSByb2xlIGluIGhvdyB3ZSYjMzk7cmUgZnJlZWluZyBrZXJuZWwgbWVtb3J5LCBhbmQgYSBiYXRjaGVkIGFwcHJvYWNoIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFkZS1vZmZzLiBBZGRpdGlvbmFsbHksIEkgbmVlZCB0byBjb25zaWRlciBTTFVCIHNoZWF2ZXMuIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFJDVSwgYmF0Y2ggZnJlZWluZywgYW5kIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgYSBjb21tb24gc291cmNlIG9mIHBlcmZvcm1hbmNlIHR3ZWFrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc2hlYXZlcyBvcGVyYXRlLCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIENQVSBhZmZpbml0eSwgYW5kIHdoZXRoZXIgdGhhdCYjMzk7cyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBkaWZmZXJlbnQga25vYnMgYXZhaWxhYmxlIHRvIG1lLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBoZXJlLCB0cmFjaW5nIHRoZSBsaWtlbHkgY29kZSBwYXRocyB0byBpZGVudGlmeSB3aGVyZSB3ZSBjYW4gb3B0aW1pemUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgYSBtdWx0aS1mYWNldGVkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWRlJFRV9SQ1UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMzA9ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQxLSAqXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0MjogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0My0gKiB3aXRob3V0IGFueSBkZWZlcnJlZCBwcm9jZXNzaW5nLCBidXQgbWF5IHN0aWxsIGRlZmVyIGZyZWVpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbmluY2x1ZGUvbGludXgvc2xhYi5oLTE0MzEtXG5pbmNsdWRlL2xpbnV4L3NsYWIuaDoxNDMyOiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaD0yNTQ9c3RydWN0IGNhbGxiYWNrX2hlYWQge1xuLS1cbmluY2x1ZGUvbGludXgvdHlwZXMuaC0yNTktXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmg6MjYwOiNpZmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xuLS1cbm1tL0tjb25maWc9MTY0PWNvbmZpZyBTTFVCXG4tLVxubW0vS2NvbmZpZy0xNjctXG5tbS9LY29uZmlnOjE2ODpjb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG5tbS9LY29uZmlnLTE2OS1cdGRlZl9ib29sIHlcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTMwMi1cbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEKSlcbm1tL3NsYWJfY29tbW9uLmMtMTMwNC1cdFx0Z290byBmYWxsYmFjaztcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cbm1tL3NsYWJfY29tbW9uLmM6MTMyNjojaWZuZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTEzNTU9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzU4LVxubW0vc2xhYl9jb21tb24uYzoxMzU5OiNlbHNlIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cbm1tL3NsYWJfY29tbW9uLmMtMTM2MC1cbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTIyNDI9dm9pZCBfX2luaXQga3ZmcmVlX3JjdV9pbml0KHZvaWQpXG4tLVxubW0vc2xhYl9jb21tb24uYy0yMjk0LVxubW0vc2xhYl9jb21tb24uYzoyMjk1OiNlbmRpZiAvKiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlIHByb2JhYmx5IGluIGBtbS9LY29uZmlnYCwgYW5kLCBnaXZlbiB0aGUgbGlrZWx5IG9yZ2FuaXphdGlvbiwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uIGFyb3VuZCBsaW5lIDE2OC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBpcyBjb3JyZWN0LCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0ZW5kbWVudVxuIDE2MTpcdFxuIDE2MjpcdG1lbnUgXCYjMzQ7U2xhYiBhbGxvY2F0b3Igb3B0aW9uc1wmIzM0O1xuIDE2MzpcdFxuIDE2NDpcdGNvbmZpZyBTTFVCXG4gMTY1Olx0XHRkZWZfYm9vbCB5XG4gMTY2Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAxNjc6XHRcbiAxNjg6XHRjb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG4gMTY5Olx0XHRkZWZfYm9vbCB5XG4gMTcwOlx0XHRkZXBlbmRzIG9uICFTTFVCX1RJTlkgXHUwMDI2XHUwMDI2ICFUSU5ZX1JDVVxuIDE3MTpcdFx0ZGVwZW5kcyBvbiAhUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiAxNzI6XHRcbiAxNzM6XHRjb25maWcgU0xVQl9USU5ZXG4gMTc0Olx0XHRib29sIFwmIzM0O0NvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XCYjMzQ7XG4gMTc1Olx0XHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgIUNPTVBJTEVfVEVTVFxuIDE3NjpcdFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxuIDE3NzpcdFx0aGVscFxuIDE3ODpcdFx0ICAgQ29uZmlndXJlcyB0aGUgc2xhYiBhbGxvY2F0b3IgaW4gYSB3YXkgdG8gYWNoaWV2ZSBtaW5pbWFsIG1lbW9yeVxuIDE3OTpcdFx0ICAgZm9vdHByaW50LCBzYWNyaWZpY2luZyBzY2FsYWJpbGl0eSwgZGVidWdnaW5nIGFuZCBvdGhlciBmZWF0dXJlcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFJlbGF0ZWQgS2VybmVsIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBQUkVFTVBUX1JUIHNpdHVhdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zLCByZWxhdGVkIG9yIG5vdCwgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgdXNlIG9mIHNoZWF2ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkbyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIHVzZSBncmVwIHRvIGxvb2sgZm9yIHRoZSB0ZXJtcyAmIzM0O3NoZWFmJiMzNDsgYW5kICYjMzQ7c2hlYXZlcywmIzM0OyBqdXN0IHRvIGJlIGNvbXByZWhlbnNpdmUgYW5kIGFjY291bnQgZm9yIHNpbmd1bGFyL3BsdXJhbCB2YXJpYXRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBkaXNjb3ZlciBhbnkgYXNzb2NpYXRlZCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IFBSRUVNUFRfUlQgYW5kIHNoZWF2ZXMgaW50ZXJhY3Qgb3IgYXJlIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NoZWFmfHNoZWF2ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2MjggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm1tL3NsYWIuaD0yNDA9c3RydWN0IGttZW1fY2FjaGUge1xubW0vc2xhYi5oOjI0MTpcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzIF9fcGVyY3B1ICpjcHVfc2hlYXZlcztcbm1tL3NsYWIuaC0yNDItXHQvKiBVc2VkIGZvciByZXRyaWV2aW5nIHBhcnRpYWwgc2xhYnMsIGV0Yy4gKi9cbi0tXG5tbS9zbGFiLmgtMjQ4LVx0dW5zaWduZWQgaW50IG9mZnNldDtcdFx0LyogRnJlZSBwb2ludGVyIG9mZnNldCAqL1xubW0vc2xhYi5oOjI0OTpcdHVuc2lnbmVkIGludCBzaGVhZl9jYXBhY2l0eTtcbm1tL3NsYWIuaC0yNTAtXHRzdHJ1Y3Qga21lbV9jYWNoZV9vcmRlcl9vYmplY3RzIG9vO1xuLS1cbm1tL3NsYWIuaC0yOTYtLypcbm1tL3NsYWIuaDoyOTc6ICogRXZlcnkgY2FjaGUgaGFzICFOVUxMIHMtXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxubW0vc2xhYi5oOjI5ODogKiBib290c3RyYXBfc2hlYWYgdGVtcG9yYXJpbHkgZHVyaW5nIGluaXQsIG9yIHBlcm1hbmVudGx5IGZvciB0aGUgYm9vdCBjYWNoZXNcbm1tL3NsYWIuaC0yOTktICogYW5kIGNhY2hlcyB3aXRoIGRlYnVnZ2luZyBlbmFibGVkLCBvciBhbGwgY2FjaGVzIHdpdGggQ09ORklHX1NMVUJfVElOWS4gVGhpc1xubW0vc2xhYi5oOjMwMDogKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cbm1tL3NsYWIuaC0zMDEtICovXG5tbS9zbGFiLmg6MzAyOnN0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9oYXNfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWIuaC0zMDMte1xubW0vc2xhYi5oLTMwNC1cdC8qIFRlc3QgQ09ORklHX1NMVUJfVElOWSBmb3IgY29kZSBlbGltaW5hdGlvbiBwdXJwb3NlcyAqL1xubW0vc2xhYi5oOjMwNTpcdHJldHVybiAhSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSBcdTAwMjZcdTAwMjYgcy1cdTAwM2VzaGVhZl9jYXBhY2l0eTtcbm1tL3NsYWIuaC0zMDYtfVxuLS1cbm1tL3NsYWIuaD00NzM9c3RhdGljIGlubGluZSBib29sIGlzX2ttYWxsb2Nfbm9ybWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsYWIuaC00ODAtXG5tbS9zbGFiLmg6NDgxOmJvb2wgX19rZnJlZV9yY3Vfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iaiwgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpO1xubW0vc2xhYi5oOjQ4Mjp2b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcbm1tL3NsYWIuaDo0ODM6dm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG5tbS9zbGFiLmgtNDg0LVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MzE4PXN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTM0Ni1cdCAqL1xubW0vc2xhYl9jb21tb24uYzozNDc6XHRpZiAoYXJncy1cdTAwM2VzaGVhZl9jYXBhY2l0eSlcbm1tL3NsYWJfY29tbW9uLmMtMzQ4LVx0XHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzE1LVxubW0vc2xhYl9jb21tb24uYzoxMzE2Olx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxubW0vc2xhYl9jb21tb24uYy0xMzE3LVx0XHRnb3RvIGZhbGxiYWNrO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTYyMj1zdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxubW0vc2xhYl9jb21tb24uYzoxNjY2OnN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG5tbS9zbGFiX2NvbW1vbi5jLTE2Njcte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxubW0vc2xhYl9jb21tb24uYzoxNjgwOlx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXG4tLVxubW0vc2xhYl9jb21tb24uYz0yMDEzPXZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzQtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxubW0vc2xhYl9jb21tb24uYy0yMDM2LVx0XHRyZXR1cm47XG4tLVxubW0vc2xhYl9jb21tb24uYz0yMTczPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyKHZvaWQpXG5tbS9zbGFiX2NvbW1vbi5jLTIxNzQte1xubW0vc2xhYl9jb21tb24uYzoyMTc1Olx0Zmx1c2hfYWxsX3JjdV9zaGVhdmVzKCk7XG5tbS9zbGFiX2NvbW1vbi5jLTIxNzYtXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MjE4Nj12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWJfY29tbW9uLmMtMjE4Ny17XG5tbS9zbGFiX2NvbW1vbi5jOjIxODg6XHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xubW0vc2xhYl9jb21tb24uYy0yMTg5LVx0ZGVmZXJyZWRfd29ya19iYXJyaWVyKCk7XG5tbS9zbGFiX2NvbW1vbi5jLTIxOTAtXG5tbS9zbGFiX2NvbW1vbi5jOjIxOTE6XHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpIHtcbm1tL3NsYWJfY29tbW9uLmMtMjE5Mi1cdFx0Y3B1c19yZWFkX2xvY2soKTtcbm1tL3NsYWJfY29tbW9uLmM6MjE5MzpcdFx0Zmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUocyk7XG5tbS9zbGFiX2NvbW1vbi5jLTIxOTQtXHRcdGNwdXNfcmVhZF91bmxvY2soKTtcbi0tXG5tbS9zbHViLmMtNjEtICogICAxLiAgc2xhYl9tdXRleCAoR2xvYmFsIE11dGV4KVxubW0vc2x1Yi5jOjYyOiAqICAgMmEuIGttZW1fY2FjaGUtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayAoTG9jYWwgdHJ5bG9jaylcbm1tL3NsdWIuYy02My0gKiAgIDJiLiBiYXJuLVx1MDAzZWxvY2sgKFNwaW5sb2NrKVxuLS1cbm1tL3NsdWIuYy0xMzItICpcbm1tL3NsdWIuYzoxMzM6ICogICBjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrIChsb2NhbF90cnlsb2NrKVxubW0vc2x1Yi5jLTEzNC0gKlxubW0vc2x1Yi5jOjEzNTogKiAgIFRoaXMgbG9jayBwcm90ZWN0cyBmYXN0cGF0aCBvcGVyYXRpb25zIG9uIHRoZSBwZXJjcHUgc2hlYXZlcy4gT24gIVJUIGl0XG5tbS9zbHViLmMtMTM2LSAqICAgb25seSBkaXNhYmxlcyBwcmVlbXB0aW9uIGFuZCBkb2VzIG5vIGF0b21pYyBvcGVyYXRpb25zLiBBcyBsb25nIGFzIHRoZSBtYWluXG5tbS9zbHViLmM6MTM3OiAqICAgb3Igc3BhcmUgc2hlYWYgY2FuIGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBvciBmcmVlLCB0aGVyZSBpcyBubyBvdGhlclxubW0vc2x1Yi5jLTEzOC0gKiAgIG92ZXJoZWFkLlxuLS1cbm1tL3NsdWIuYy0xNDItICogICBUaGlzIGxvY2sgcHJvdGVjdHMgdGhlIG9wZXJhdGlvbnMgb24gcGVyLU5VTUEtbm9kZSBiYXJuLiBJdCBjYW4gcXVpY2tseVxubW0vc2x1Yi5jOjE0MzogKiAgIHNlcnZlIGFuIGVtcHR5IG9yIGZ1bGwgc2hlYWYgaWYgYXZhaWxhYmxlLCBhbmQgYXZvaWQgbW9yZSBleHBlbnNpdmUgcmVmaWxsXG5tbS9zbHViLmMtMTQ0LSAqICAgb3IgZmx1c2ggb3BlcmF0aW9uLlxuLS1cbm1tL3NsdWIuYy0xNDgtICogICBPYmplY3RzIG1heSBoYXZlIHRvIGJlIGZyZWVkIHRvIHRoZWlyIHNsYWJzIHdoZW4gdGhleSBhcmUgZnJvbSBhIHJlbW90ZVxubW0vc2x1Yi5jOjE0OTogKiAgIG5vZGUgKHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsbGluZyBsb2NhbCBzaGVhdmVzIHdpdGggcmVtb3RlIG9iamVjdHMpXG5tbS9zbHViLmM6MTUwOiAqICAgb3Igd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgZnVsbCBzaGVhdmVzLiBPbiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRpbmdcbm1tL3NsdWIuYy0xNTEtICogICBjbXB4Y2hnX2RvdWJsZSB0aGlzIGlzIGRvbmUgYnkgYSBsb2NrbGVzcyB1cGRhdGUgb2Ygc2xhYiYjMzk7cyBmcmVlbGlzdCBhbmRcbi0tXG5tbS9zbHViLmMtMTY0LSAqXG5tbS9zbHViLmM6MTY1OiAqIFNMVUIgYXNzaWducyB0d28gb2JqZWN0IGFycmF5cyBjYWxsZWQgc2hlYXZlcyBmb3IgY2FjaGluZyBhbGxvY2F0aW9ucyBhbmRcbm1tL3NsdWIuYy0xNjYtICogZnJlZXMgb24gZWFjaCBjcHUsIHdpdGggYSBOVU1BIG5vZGUgc2hhcmVkIGJhcm4gZm9yIGJhbGFuY2luZyBiZXR3ZWVuIGNwdXMuXG5tbS9zbHViLmM6MTY3OiAqIEFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgcHJpbWFyaWx5IHNlcnZlZCBmcm9tIHRoZXNlIHNoZWF2ZXMuXG5tbS9zbHViLmMtMTY4LSAqXG4tLVxubW0vc2x1Yi5jPTM2Mz1lbnVtIHN0YXRfaXRlbSB7XG5tbS9zbHViLmM6MzY0Olx0QUxMT0NfRkFTVFBBVEgsXHRcdC8qIEFsbG9jYXRpb24gZnJvbSBwZXJjcHUgc2hlYXZlcyAqL1xubW0vc2x1Yi5jLTM2NS1cdEFMTE9DX1NMT1dQQVRILFx0XHQvKiBBbGxvY2F0aW9uIGZyb20gcGFydGlhbCBvciBuZXcgc2xhYiAqL1xubW0vc2x1Yi5jOjM2NjpcdEZSRUVfUkNVX1NIRUFGLFx0XHQvKiBGcmVlIHRvIHJjdV9mcmVlIHNoZWFmICovXG5tbS9zbHViLmM6MzY3Olx0RlJFRV9SQ1VfU0hFQUZfRkFJTCxcdC8qIEZhaWxlZCB0byBmcmVlIHRvIGEgcmN1X2ZyZWUgc2hlYWYgKi9cbm1tL3NsdWIuYzozNjg6XHRGUkVFX0ZBU1RQQVRILFx0XHQvKiBGcmVlIHRvIHBlcmNwdSBzaGVhdmVzICovXG5tbS9zbHViLmMtMzY5LVx0RlJFRV9TTE9XUEFUSCxcdFx0LyogRnJlZSB0byBhIHNsYWIgKi9cbi0tXG5tbS9zbHViLmMtMzcyLVx0QUxMT0NfU0xBQixcdFx0LyogTmV3IHNsYWIgYWNxdWlyZWQgZnJvbSBwYWdlIGFsbG9jYXRvciAqL1xubW0vc2x1Yi5jOjM3MzpcdEFMTE9DX05PREVfTUlTTUFUQ0gsXHQvKiBSZXF1ZXN0ZWQgbm9kZSBkaWZmZXJlbnQgZnJvbSBjcHUgc2hlYWYgKi9cbm1tL3NsdWIuYy0zNzQtXHRGUkVFX1NMQUIsXHRcdC8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovXG4tLVxubW0vc2x1Yi5jLTM3Ni1cdENNUFhDSEdfRE9VQkxFX0ZBSUwsXHQvKiBGYWlsdXJlcyBvZiBzbGFiIGZyZWVsaXN0IHVwZGF0ZSAqL1xubW0vc2x1Yi5jOjM3NzpcdFNIRUFGX0ZMVVNILFx0XHQvKiBPYmplY3RzIGZsdXNoZWQgZnJvbSBhIHNoZWFmICovXG5tbS9zbHViLmM6Mzc4Olx0U0hFQUZfUkVGSUxMLFx0XHQvKiBPYmplY3RzIHJlZmlsbGVkIHRvIGEgc2hlYWYgKi9cbm1tL3NsdWIuYzozNzk6XHRTSEVBRl9BTExPQyxcdFx0LyogQWxsb2NhdGlvbiBvZiBhbiBlbXB0eSBzaGVhZiBpbmNsdWRpbmcgb3ZlcnNpemVkIG9uZXMgKi9cbm1tL3NsdWIuYzozODA6XHRTSEVBRl9GUkVFLFx0XHQvKiBGcmVlaW5nIG9mIGFuIGVtcHR5IHNoZWFmIGluY2x1ZGluZyBvdmVyc2l6ZWQgb25lcyAqL1xubW0vc2x1Yi5jOjM4MTpcdEJBUk5fR0VULFx0XHQvKiBHb3QgZnVsbCBzaGVhZiBmcm9tIGJhcm4gKi9cbm1tL3NsdWIuYzozODI6XHRCQVJOX0dFVF9GQUlMLFx0XHQvKiBGYWlsZWQgdG8gZ2V0IGZ1bGwgc2hlYWYgZnJvbSBiYXJuICovXG5tbS9zbHViLmM6MzgzOlx0QkFSTl9QVVQsXHRcdC8qIFB1dCBmdWxsIHNoZWFmIHRvIGJhcm4gKi9cbm1tL3NsdWIuYzozODQ6XHRCQVJOX1BVVF9GQUlMLFx0XHQvKiBGYWlsZWQgdG8gcHV0IGZ1bGwgc2hlYWYgdG8gYmFybiAqL1xubW0vc2x1Yi5jOjM4NTpcdFNIRUFGX1BSRUZJTExfRkFTVCxcdC8qIFNoZWFmIHByZWZpbGwgZ3JhYmJlZCB0aGUgc3BhcmUgc2hlYWYgKi9cbm1tL3NsdWIuYzozODY6XHRTSEVBRl9QUkVGSUxMX1NMT1csXHQvKiBTaGVhZiBwcmVmaWxsIGZvdW5kIG5vIHNwYXJlIHNoZWFmICovXG5tbS9zbHViLmM6Mzg3Olx0U0hFQUZfUFJFRklMTF9PVkVSU0laRSxcdC8qIEFsbG9jYXRpb24gb2Ygb3ZlcnNpemUgc2hlYWYgZm9yIHByZWZpbGwgKi9cbm1tL3NsdWIuYzozODg6XHRTSEVBRl9SRVRVUk5fRkFTVCxcdC8qIFNoZWFmIHJldHVybiByZWF0dGFjaGVkIHNwYXJlIHNoZWFmICovXG5tbS9zbHViLmMtMzg5LVx0U0hFQUZfUkVUVVJOX1NMT1csXHQvKiBTaGVhZiByZXR1cm4gY291bGQgbm90IHJlYXR0YWNoIHNwYXJlICovXG4tLVxubW0vc2x1Yi5jPTQyMT1zdHJ1Y3Qgbm9kZV9iYXJuIHtcbm1tL3NsdWIuYy00MjItXHRzcGlubG9ja190IGxvY2s7XG5tbS9zbHViLmM6NDIzOlx0c3RydWN0IGxpc3RfaGVhZCBzaGVhdmVzX2Z1bGw7XG5tbS9zbHViLmM6NDI0Olx0c3RydWN0IGxpc3RfaGVhZCBzaGVhdmVzX2VtcHR5O1xubW0vc2x1Yi5jLTQyNS1cdHVuc2lnbmVkIGludCBucl9mdWxsO1xuLS1cbm1tL3NsdWIuYy00MjgtXG5tbS9zbHViLmM6NDI5OnN0cnVjdCBzbGFiX3NoZWFmIHtcbm1tL3NsdWIuYy00MzAtXHR1bmlvbiB7XG4tLVxubW0vc2x1Yi5jLTQzNC1cdFx0c3RydWN0IGxsaXN0X25vZGUgbGxub2RlO1xubW0vc2x1Yi5jOjQzNTpcdFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXG5tbS9zbHViLmMtNDM2LVx0XHRzdHJ1Y3Qge1xuLS1cbm1tL3NsdWIuYy00NDItXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbm1tL3NsdWIuYzo0NDM6XHRpbnQgbm9kZTsgLyogb25seSB1c2VkIGZvciByY3Vfc2hlYWYgKi9cbm1tL3NsdWIuYy00NDQtXHR2b2lkICpvYmplY3RzW107XG4tLVxubW0vc2x1Yi5jLTQ0Ni1cbm1tL3NsdWIuYzo0NDc6c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMge1xubW0vc2x1Yi5jLTQ0OC1cdGxvY2FsX3RyeWxvY2tfdCBsb2NrO1xubW0vc2x1Yi5jOjQ0OTpcdHN0cnVjdCBzbGFiX3NoZWFmICptYWluOyAvKiBuZXZlciBOVUxMIHdoZW4gdW5sb2NrZWQgKi9cbm1tL3NsdWIuYzo0NTA6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc3BhcmU7IC8qIGVtcHR5IG9yIGZ1bGwsIG1heSBiZSBOVUxMICovXG5tbS9zbHViLmM6NDUxOlx0c3RydWN0IHNsYWJfc2hlYWYgKnJjdV9mcmVlOyAvKiBmb3IgYmF0Y2hpbmcga2ZyZWVfcmN1KCkgKi9cbm1tL3NsdWIuYy00NTItfTtcbi0tXG5tbS9zbHViLmM9NTA2PXN0YXRpYyBub2RlbWFza190IHNsYWJfYmFybl9ub2Rlcztcbi0tXG5tbS9zbHViLmMtNTA4LS8qXG5tbS9zbHViLmM6NTA5OiAqIFdvcmtxdWV1ZSB1c2VkIGZvciBmbHVzaGluZyBjcHUgYW5kIGtmcmVlX3JjdSBzaGVhdmVzLlxubW0vc2x1Yi5jLTUxMC0gKi9cbi0tXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy0yMDczLS8qXG5tbS9zbHViLmM6MjA3NDogKiBUaGUgYWxsb2NhdGVkIG9iamNnIHBvaW50ZXJzIGFycmF5IG9yIHNoZWFmIGlzIG5vdCBhY2NvdW50ZWQgZGlyZWN0bHkuXG5tbS9zbHViLmMtMjA3NS0gKiBNb3Jlb3ZlciwgaXQgc2hvdWxkIG5vdCBjb21lIGZyb20gRE1BIGJ1ZmZlciBhbmQgaXMgbm90IHJlYWRpbHlcbi0tXG5tbS9zbHViLmM9Mjc5NT1zdGF0aWMgaW5saW5lIHZvaWQgKnNldHVwX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy0yODA2LVxubW0vc2x1Yi5jOjI4MDc6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpfX2FsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXG5tbS9zbHViLmMtMjgwOC1cdFx0XHRcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdW5zaWduZWQgaW50IGNhcGFjaXR5KVxubW0vc2x1Yi5jLTI4MDkte1xubW0vc2x1Yi5jOjI4MTA6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWY7XG5tbS9zbHViLmM6MjgxMTpcdHNpemVfdCBzaGVhZl9zaXplO1xubW0vc2x1Yi5jLTI4MTItXG4tLVxubW0vc2x1Yi5jLTI4MTQtXHQgKiBQcmV2ZW50IHJlY3Vyc2lvbiB0byB0aGUgc2FtZSBjYWNoZSwgb3IgYSBkZWVwIHN0YWNrIG9mIGttYWxsb2NzIG9mXG5tbS9zbHViLmM6MjgxNTpcdCAqIHZhcnlpbmcgc2l6ZXMgKHNoZWFmIGNhcGFjaXR5IG1pZ2h0IGRpZmZlciBmb3IgZWFjaCBrbWFsbG9jIHNpemVcbm1tL3NsdWIuYy0yODE2LVx0ICogYnVja2V0KVxuLS1cbm1tL3NsdWIuYy0yODIwLVxubW0vc2x1Yi5jOjI4MjE6XHRzaGVhZl9zaXplID0gc3RydWN0X3NpemUoc2hlYWYsIG9iamVjdHMsIGNhcGFjaXR5KTtcbm1tL3NsdWIuYzoyODIyOlx0c2hlYWYgPSBrbWFsbG9jX2ZsYWdzKHNoZWFmX3NpemUsIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBOVU1BX05PX05PREUpO1xubW0vc2x1Yi5jLTI4MjMtXG5tbS9zbHViLmM6MjgyNDpcdGlmICh1bmxpa2VseSghc2hlYWYpKVxubW0vc2x1Yi5jLTI4MjUtXHRcdHJldHVybiBOVUxMO1xubW0vc2x1Yi5jLTI4MjYtXG5tbS9zbHViLmM6MjgyNzpcdHNoZWFmLVx1MDAzZWNhY2hlID0gcztcbm1tL3NsdWIuYy0yODI4LVxuLS1cbm1tL3NsdWIuYy0yODMwLVxubW0vc2x1Yi5jOjI4MzE6XHRyZXR1cm4gc2hlYWY7XG5tbS9zbHViLmMtMjgzMi19XG5tbS9zbHViLmMtMjgzMy1cbm1tL3NsdWIuYzoyODM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTI4MzUtXHRcdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmMtMjg0MS1cbm1tL3NsdWIuYzoyODQyOlx0cmV0dXJuIF9fYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncywgcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSk7XG5tbS9zbHViLmMtMjg0My19XG5tbS9zbHViLmMtMjg0NC1cbm1tL3NsdWIuYzoyODQ1OnN0YXRpYyB2b2lkIF9fZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmLFxubW0vc2x1Yi5jLTI4NDYtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yODQ4LVx0Lypcbm1tL3NsdWIuYzoyODQ5Olx0ICogSWYgdGhlIHNoZWFmIHdhcyBjcmVhdGVkIHdpdGggU0xBQl9BTExPQ19OT19SRUNVUlNFIGZsYWcgdGhlbiBpdHNcbm1tL3NsdWIuYy0yODUwLVx0ICogY29ycmVzcG9uZGluZyBleHRlbnNpb24gaXMgTlVMTCBhbmQgYWxsb2NfdGFnX3N1YigpIHdpbGwgdGhyb3cgYVxubW0vc2x1Yi5jLTI4NTEtXHQgKiB3YXJuaW5nLCB0aGVyZWZvcmUgcmVwbGFjZSBOVUxMIHdpdGggQ09ERVRBR19FTVBUWSB0byBpbmRpY2F0ZVxubW0vc2x1Yi5jOjI4NTI6XHQgKiB0aGF0IHRoZSBleHRlbnNpb24gZm9yIHRoaXMgc2hlYWYgaXMgZXhwZWN0ZWQgdG8gYmUgTlVMTC5cbm1tL3NsdWIuYy0yODUzLVx0ICovXG5tbS9zbHViLmMtMjg1NC1cdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0tNQUxMT0MpXG5tbS9zbHViLmM6Mjg1NTpcdFx0bWFya19vYmpfY29kZXRhZ19lbXB0eShzaGVhZik7XG5tbS9zbHViLmMtMjg1Ni1cbm1tL3NsdWIuYzoyODU3Olx0Vk1fV0FSTl9PTl9PTkNFKHNoZWFmLVx1MDAzZXNpemUgXHUwMDNlIDApO1xubW0vc2x1Yi5jLTI4NTgtXG5tbS9zbHViLmMtMjg1OS1cdGlmICh1bmxpa2VseShmcmVlX2ZsYWdzIFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKSlcbm1tL3NsdWIuYzoyODYwOlx0XHRrZnJlZV9ub2xvY2soc2hlYWYpO1xubW0vc2x1Yi5jLTI4NjEtXHRlbHNlXG5tbS9zbHViLmM6Mjg2MjpcdFx0a2ZyZWUoc2hlYWYpO1xubW0vc2x1Yi5jLTI4NjMtXG4tLVxubW0vc2x1Yi5jLTI4NjYtXG5tbS9zbHViLmM6Mjg2NzpzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG5tbS9zbHViLmMtMjg2OC17XG5tbS9zbHViLmM6Mjg2OTpcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xubW0vc2x1Yi5jLTI4NzAtfVxuLS1cbm1tL3NsdWIuYz0yODczPXJlZmlsbF9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy0yODc1LVxubW0vc2x1Yi5jOjI4NzY6c3RhdGljIGludCByZWZpbGxfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcbm1tL3NsdWIuYy0yODc3LVx0XHRcdCBnZnBfdCBnZnApXG5tbS9zbHViLmMtMjg3OC17XG5tbS9zbHViLmM6Mjg3OTpcdGludCB0b19maWxsID0gcy1cdTAwM2VzaGVhZl9jYXBhY2l0eSAtIHNoZWFmLVx1MDAzZXNpemU7XG5tbS9zbHViLmMtMjg4MC1cdGludCBmaWxsZWQ7XG4tLVxubW0vc2x1Yi5jLTI4ODQtXG5tbS9zbHViLmM6Mjg4NTpcdGZpbGxlZCA9IHJlZmlsbF9vYmplY3RzKHMsIFx1MDAyNnNoZWFmLVx1MDAzZW9iamVjdHNbc2hlYWYtXHUwMDNlc2l6ZV0sIGdmcCwgdG9fZmlsbCxcbm1tL3NsdWIuYy0yODg2LVx0XHRcdFx0dG9fZmlsbCk7XG5tbS9zbHViLmMtMjg4Ny1cbm1tL3NsdWIuYzoyODg4Olx0c2hlYWYtXHUwMDNlc2l6ZSAmIzQzOz0gZmlsbGVkO1xubW0vc2x1Yi5jLTI4ODktXG4tLVxubW0vc2x1Yi5jLTI4OTgtLypcbm1tL3NsdWIuYzoyODk5OiAqIE1heGltdW0gbnVtYmVyIG9mIG9iamVjdHMgZnJlZWQgZHVyaW5nIGEgc2luZ2xlIGZsdXNoIG9mIG1haW4gcGNzIHNoZWFmLlxubW0vc2x1Yi5jLTI5MDAtICogVHJhbnNsYXRlcyBkaXJlY3RseSB0byBhbiBvbi1zdGFjayBhcnJheSBzaXplLlxuLS1cbm1tL3NsdWIuYz0yOTA0PXN0YXRpYyB2b2lkIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCk7XG4tLVxubW0vc2x1Yi5jLTI5MDYtLypcbm1tL3NsdWIuYzoyOTA3OiAqIEZyZWUgYWxsIG9iamVjdHMgZnJvbSB0aGUgbWFpbiBzaGVhZi4gSW4gb3JkZXIgdG8gcGVyZm9ybVxubW0vc2x1Yi5jOjI5MDg6ICogX19rbWVtX2NhY2hlX2ZyZWVfYnVsaygpIG91dHNpZGUgb2YgY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaywgd29yayBpbiBiYXRjaGVzIHdoZXJlXG5tbS9zbHViLmMtMjkwOS0gKiBvYmplY3QgcG9pbnRlcnMgYXJlIG1vdmVkIHRvIGEgb24tc3RhY2sgYXJyYXkgdW5kZXIgdGhlIGxvY2suIFRvIGJvdW5kIHRoZVxuLS1cbm1tL3NsdWIuYy0yOTExLSAqXG5tbS9zbHViLmM6MjkxMjogKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayBsb2NrZWQsIHJldHVybnMgd2l0aCB0aGUgbG9ja1xubW0vc2x1Yi5jLTI5MTMtICogdW5sb2NrZWQuXG4tLVxubW0vc2x1Yi5jLTI5MTYtICovXG5tbS9zbHViLmM6MjkxNzpzdGF0aWMgdW5zaWduZWQgaW50IF9fc2hlYWZfZmx1c2hfbWFpbl9iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy0yOTE4LXtcbm1tL3NsdWIuYzoyOTE5Olx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcbm1tL3NsdWIuYy0yOTIwLVx0dW5zaWduZWQgaW50IGJhdGNoLCByZW1haW5pbmc7XG5tbS9zbHViLmMtMjkyMS1cdHZvaWQgKm9iamVjdHNbUENTX0JBVENIX01BWF07XG5tbS9zbHViLmM6MjkyMjpcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcbm1tL3NsdWIuYy0yOTIzLVxubW0vc2x1Yi5jOjI5MjQ6XHRzbGFiX2xvY2tkZXBfYXNzZXJ0X2hlbGQodGhpc19jcHVfcHRyKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpO1xubW0vc2x1Yi5jLTI5MjUtXG5tbS9zbHViLmM6MjkyNjpcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbm1tL3NsdWIuYzoyOTI3Olx0c2hlYWYgPSBwY3MtXHUwMDNlbWFpbjtcbm1tL3NsdWIuYy0yOTI4LVxubW0vc2x1Yi5jOjI5Mjk6XHRiYXRjaCA9IG1pbihQQ1NfQkFUQ0hfTUFYLCBzaGVhZi1cdTAwM2VzaXplKTtcbm1tL3NsdWIuYy0yOTMwLVxubW0vc2x1Yi5jOjI5MzE6XHRzaGVhZi1cdTAwM2VzaXplIC09IGJhdGNoO1xubW0vc2x1Yi5jOjI5MzI6XHRtZW1jcHkob2JqZWN0cywgc2hlYWYtXHUwMDNlb2JqZWN0cyAmIzQzOyBzaGVhZi1cdTAwM2VzaXplLCBiYXRjaCAqIHNpemVvZih2b2lkICopKTtcbm1tL3NsdWIuYy0yOTMzLVxubW0vc2x1Yi5jOjI5MzQ6XHRyZW1haW5pbmcgPSBzaGVhZi1cdTAwM2VzaXplO1xubW0vc2x1Yi5jLTI5MzUtXG5tbS9zbHViLmM6MjkzNjpcdGxvY2FsX3VubG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spO1xubW0vc2x1Yi5jLTI5MzctXG4tLVxubW0vc2x1Yi5jLTI5NDQtXG5tbS9zbHViLmM6Mjk0NTpzdGF0aWMgdm9pZCBzaGVhZl9mbHVzaF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTI5NDYte1xuLS1cbm1tL3NsdWIuYy0yOTQ5LVx0ZG8ge1xubW0vc2x1Yi5jOjI5NTA6XHRcdGxvY2FsX2xvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbm1tL3NsdWIuYy0yOTUxLVxubW0vc2x1Yi5jOjI5NTI6XHRcdHJlbWFpbmluZyA9IF9fc2hlYWZfZmx1c2hfbWFpbl9iYXRjaChzKTtcbm1tL3NsdWIuYy0yOTUzLVxuLS1cbm1tL3NsdWIuYy0yOTU3LS8qXG5tbS9zbHViLmM6Mjk1ODogKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1haW4gc2hlYWYgd2FzIGF0IGxlYXN0IHBhcnRpYWxseSBmbHVzaGVkLlxubW0vc2x1Yi5jLTI5NTktICovXG5tbS9zbHViLmM6Mjk2MDpzdGF0aWMgYm9vbCBzaGVhZl90cnlfZmx1c2hfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy0yOTYxLXtcbi0tXG5tbS9zbHViLmMtMjk2NS1cdGRvIHtcbm1tL3NsdWIuYzoyOTY2Olx0XHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSlcbm1tL3NsdWIuYy0yOTY3LVx0XHRcdHJldHVybiByZXQ7XG4tLVxubW0vc2x1Yi5jLTI5NjktXHRcdHJldCA9IHRydWU7XG5tbS9zbHViLmM6Mjk3MDpcdFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xubW0vc2x1Yi5jLTI5NzEtXG4tLVxubW0vc2x1Yi5jLTI5NzctLypcbm1tL3NsdWIuYzoyOTc4OiAqIEZyZWUgYWxsIG9iamVjdHMgZnJvbSBhIHNoZWFmIHRoYXQmIzM5O3MgdW51c2VkLCBpLmUuIG5vdCBsaW5rZWQgdG8gYW55XG5tbS9zbHViLmM6Mjk3OTogKiBjcHVfc2hlYXZlcywgc28gd2UgbmVlZCBubyBsb2NraW5nIGFuZCBiYXRjaGluZy4gVGhlIGxvY2tpbmcgaXMgYWxzbyBub3Rcbm1tL3NsdWIuYzoyOTgwOiAqIG5lY2Vzc2FyeSB3aGVuIGZsdXNoaW5nIGNwdSYjMzk7cyBzaGVhdmVzIChib3RoIHNwYXJlIGFuZCBtYWluKSBkdXJpbmcgY3B1XG5tbS9zbHViLmMtMjk4MS0gKiBob3RyZW1vdmUgYXMgdGhlIGNwdSBpcyBub3QgZXhlY3V0aW5nIGFueW1vcmUuXG5tbS9zbHViLmMtMjk4Mi0gKi9cbm1tL3NsdWIuYzoyOTgzOnN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX3VudXNlZChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubW0vc2x1Yi5jLTI5ODQte1xubW0vc2x1Yi5jOjI5ODU6XHRpZiAoIXNoZWFmLVx1MDAzZXNpemUpXG5tbS9zbHViLmMtMjk4Ni1cdFx0cmV0dXJuO1xubW0vc2x1Yi5jLTI5ODctXG5tbS9zbHViLmM6Mjk4ODpcdHN0YXRfYWRkKHMsIFNIRUFGX0ZMVVNILCBzaGVhZi1cdTAwM2VzaXplKTtcbm1tL3NsdWIuYy0yOTg5LVxubW0vc2x1Yi5jOjI5OTA6XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNoZWFmLVx1MDAzZXNpemUsIFx1MDAyNnNoZWFmLVx1MDAzZW9iamVjdHNbMF0pO1xubW0vc2x1Yi5jLTI5OTEtXG5tbS9zbHViLmM6Mjk5MjpcdHNoZWFmLVx1MDAzZXNpemUgPSAwO1xubW0vc2x1Yi5jLTI5OTMtfVxubW0vc2x1Yi5jLTI5OTQtXG5tbS9zbHViLmM6Mjk5NTpzdGF0aWMgYm9vbCBfX3JjdV9mcmVlX3NoZWFmX3ByZXBhcmUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmM6Mjk5NjpcdFx0XHRcdCAgICAgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubW0vc2x1Yi5jLTI5OTcte1xubW0vc2x1Yi5jLTI5OTgtXHRib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpO1xubW0vc2x1Yi5jOjI5OTk6XHR2b2lkICoqcCA9IFx1MDAyNnNoZWFmLVx1MDAzZW9iamVjdHNbMF07XG5tbS9zbHViLmMtMzAwMC1cdHVuc2lnbmVkIGludCBpID0gMDtcbi0tXG5tbS9zbHViLmMtMzAwMi1cbm1tL3NsdWIuYzozMDAzOlx0d2hpbGUgKGkgXHUwMDNjIHNoZWFmLVx1MDAzZXNpemUpIHtcbm1tL3NsdWIuYy0zMDA0LVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcbi0tXG5tbS9zbHViLmMtMzAwOS1cdFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCB0cnVlKSkpIHtcbm1tL3NsdWIuYzozMDEwOlx0XHRcdHBbaV0gPSBwWy0tc2hlYWYtXHUwMDNlc2l6ZV07XG5tbS9zbHViLmMtMzAxMS1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9zbHViLmMtMzAyMi1cbm1tL3NsdWIuYzozMDIzOnN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmX25vYmFybihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5tbS9zbHViLmMtMzAyNC17XG5tbS9zbHViLmM6MzAyNTpcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcbm1tL3NsdWIuYy0zMDI2LVx0c3RydWN0IGttZW1fY2FjaGUgKnM7XG5tbS9zbHViLmMtMzAyNy1cbm1tL3NsdWIuYzozMDI4Olx0c2hlYWYgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHNsYWJfc2hlYWYsIHJjdV9oZWFkKTtcbm1tL3NsdWIuYzozMDI5Olx0cyA9IHNoZWFmLVx1MDAzZWNhY2hlO1xubW0vc2x1Yi5jLTMwMzAtXG5tbS9zbHViLmM6MzAzMTpcdF9fcmN1X2ZyZWVfc2hlYWZfcHJlcGFyZShzLCBzaGVhZik7XG5tbS9zbHViLmMtMzAzMi1cbm1tL3NsdWIuYzozMDMzOlx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHNoZWFmKTtcbm1tL3NsdWIuYy0zMDM0LVxubW0vc2x1Yi5jOjMwMzU6XHRmcmVlX2VtcHR5X3NoZWFmKHMsIHNoZWFmKTtcbm1tL3NsdWIuYy0zMDM2LX1cbi0tXG5tbS9zbHViLmMtMzAzOS0gKiBDYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIG1pZ3JhdGlvbiBpcyBkaXNhYmxlZCBpbiBvcmRlciB0byBmdWxseSBmbHVzaFxubW0vc2x1Yi5jOjMwNDA6ICogc2luZ2xlIGNwdSYjMzk7cyBzaGVhdmVzXG5tbS9zbHViLmMtMzA0MS0gKlxuLS1cbm1tL3NsdWIuYz0zMDQ3PXN0YXRpYyB2b2lkIHBjc19mbHVzaF9hbGwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtMzA0OC17XG5tbS9zbHViLmM6MzA0OTpcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5tbS9zbHViLmM6MzA1MDpcdHN0cnVjdCBzbGFiX3NoZWFmICpzcGFyZSwgKnJjdV9mcmVlO1xubW0vc2x1Yi5jLTMwNTEtXG5tbS9zbHViLmM6MzA1MjpcdGxvY2FsX2xvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbm1tL3NsdWIuYzozMDUzOlx0cGNzID0gdGhpc19jcHVfcHRyKHMtXHUwMDNlY3B1X3NoZWF2ZXMpO1xubW0vc2x1Yi5jLTMwNTQtXG4tLVxubW0vc2x1Yi5jLTMwNjAtXG5tbS9zbHViLmM6MzA2MTpcdGxvY2FsX3VubG9jayhcdTAwMjZzLVx1MDAzZWNwdV9zaGVhdmVzLVx1MDAzZWxvY2spO1xubW0vc2x1Yi5jLTMwNjItXG5tbS9zbHViLmMtMzA2My1cdGlmIChzcGFyZSkge1xubW0vc2x1Yi5jOjMwNjQ6XHRcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzcGFyZSk7XG5tbS9zbHViLmM6MzA2NTpcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzcGFyZSk7XG5tbS9zbHViLmMtMzA2Ni1cdH1cbi0tXG5tbS9zbHViLmMtMzA2OC1cdGlmIChyY3VfZnJlZSlcbm1tL3NsdWIuYzozMDY5Olx0XHRjYWxsX3JjdShcdTAwMjZyY3VfZnJlZS1cdTAwM2VyY3VfaGVhZCwgcmN1X2ZyZWVfc2hlYWZfbm9iYXJuKTtcbm1tL3NsdWIuYy0zMDcwLVxubW0vc2x1Yi5jOjMwNzE6XHRzaGVhZl9mbHVzaF9tYWluKHMpO1xubW0vc2x1Yi5jLTMwNzItfVxuLS1cbm1tL3NsdWIuYz0zMDc0PXN0YXRpYyB2b2lkIF9fcGNzX2ZsdXNoX2FsbF9jcHUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHVuc2lnbmVkIGludCBjcHUpXG5tbS9zbHViLmMtMzA3NS17XG5tbS9zbHViLmM6MzA3NjpcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5tbS9zbHViLmMtMzA3Ny1cbm1tL3NsdWIuYzozMDc4Olx0cGNzID0gcGVyX2NwdV9wdHIocy1cdTAwM2VjcHVfc2hlYXZlcywgY3B1KTtcbm1tL3NsdWIuYy0zMDc5LVxubW0vc2x1Yi5jLTMwODAtXHQvKiBUaGUgY3B1IGlzIG5vdCBleGVjdXRpbmcgYW55bW9yZSBzbyB3ZSBkb24mIzM5O3QgbmVlZCBwY3MtXHUwMDNlbG9jayAqL1xubW0vc2x1Yi5jOjMwODE6XHRzaGVhZl9mbHVzaF91bnVzZWQocywgcGNzLVx1MDAzZW1haW4pO1xubW0vc2x1Yi5jLTMwODItXHRpZiAocGNzLVx1MDAzZXNwYXJlKSB7XG5tbS9zbHViLmM6MzA4MzpcdFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHBjcy1cdTAwM2VzcGFyZSk7XG5tbS9zbHViLmM6MzA4NDpcdFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBwY3MtXHUwMDNlc3BhcmUpO1xubW0vc2x1Yi5jLTMwODUtXHRcdHBjcy1cdTAwM2VzcGFyZSA9IE5VTEw7XG4tLVxubW0vc2x1Yi5jLTMwODgtXHRpZiAocGNzLVx1MDAzZXJjdV9mcmVlKSB7XG5tbS9zbHViLmM6MzA4OTpcdFx0Y2FsbF9yY3UoXHUwMDI2cGNzLVx1MDAzZXJjdV9mcmVlLVx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZl9ub2Jhcm4pO1xubW0vc2x1Yi5jLTMwOTAtXHRcdHBjcy1cdTAwM2VyY3VfZnJlZSA9IE5VTEw7XG4tLVxubW0vc2x1Yi5jPTMwOTQ9c3RhdGljIHZvaWQgcGNzX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTMxMDEtXHQgKi9cbm1tL3NsdWIuYzozMTAyOlx0aWYgKCFzLVx1MDAzZWNwdV9zaGVhdmVzKVxubW0vc2x1Yi5jLTMxMDMtXHRcdHJldHVybjtcbm1tL3NsdWIuYy0zMTA0LVxubW0vc2x1Yi5jOjMxMDU6XHQvKiBwY3MtXHUwMDNlbWFpbiBjYW4gb25seSBwb2ludCB0byB0aGUgYm9vdHN0cmFwIHNoZWFmLCBub3RoaW5nIHRvIGZyZWUgKi9cbm1tL3NsdWIuYzozMTA2Olx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcbm1tL3NsdWIuYy0zMTA3LVx0XHRnb3RvIGZyZWVfcGNzO1xuLS1cbm1tL3NsdWIuYy0zMTA5LVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xubW0vc2x1Yi5jOjMxMTA6XHRcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG5tbS9zbHViLmMtMzExMS1cbm1tL3NsdWIuYzozMTEyOlx0XHRwY3MgPSBwZXJfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzLCBjcHUpO1xubW0vc2x1Yi5jLTMxMTMtXG4tLVxubW0vc2x1Yi5jLTMxMjMtXHRcdCAqIHdhcm5pbmdzIGhlcmUgdHJpZ2dlciwgYW5kIHdlIHNob3VsZCByYXRoZXIgbGVhdmUgb2JqZWN0cyBhbmRcbm1tL3NsdWIuYzozMTI0Olx0XHQgKiBzaGVhdmVzIHRvIGxlYWsgaW4gdGhhdCBjYXNlLlxubW0vc2x1Yi5jLTMxMjUtXHRcdCAqL1xuLS1cbm1tL3NsdWIuYy0zMTMwLVx0XHRpZiAoIVdBUk5fT04ocGNzLVx1MDAzZW1haW4tXHUwMDNlc2l6ZSkpIHtcbm1tL3NsdWIuYzozMTMxOlx0XHRcdGZyZWVfZW1wdHlfc2hlYWYocywgcGNzLVx1MDAzZW1haW4pO1xubW0vc2x1Yi5jLTMxMzItXHRcdFx0cGNzLVx1MDAzZW1haW4gPSBOVUxMO1xuLS1cbm1tL3NsdWIuYy0zMTM2LWZyZWVfcGNzOlxubW0vc2x1Yi5jOjMxMzc6XHRmcmVlX3BlcmNwdShzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbm1tL3NsdWIuYzozMTM4Olx0cy1cdTAwM2VjcHVfc2hlYXZlcyA9IE5VTEw7XG5tbS9zbHViLmMtMzEzOS19XG5tbS9zbHViLmMtMzE0MC1cbm1tL3NsdWIuYzozMTQxOnN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqYmFybl9nZXRfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybixcbm1tL3NsdWIuYy0zMTQyLVx0XHRcdFx0XHQgICAgICAgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTMxNDMte1xubW0vc2x1Yi5jOjMxNDQ6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHkgPSBOVUxMO1xubW0vc2x1Yi5jLTMxNDUtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbm1tL3NsdWIuYy0zMTU1LVx0aWYgKGxpa2VseShiYXJuLVx1MDAzZW5yX2VtcHR5KSkge1xubW0vc2x1Yi5jOjMxNTY6XHRcdGVtcHR5ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZiYXJuLVx1MDAzZXNoZWF2ZXNfZW1wdHksXG5tbS9zbHViLmM6MzE1NzpcdFx0XHRcdFx0IHN0cnVjdCBzbGFiX3NoZWFmLCBiYXJuX2xpc3QpO1xubW0vc2x1Yi5jLTMxNTgtXHRcdGxpc3RfZGVsKFx1MDAyNmVtcHR5LVx1MDAzZWJhcm5fbGlzdCk7XG4tLVxubW0vc2x1Yi5jLTMxNjktICogaW50ZW5kZWQgYWN0aW9uIGR1ZSB0byBhIHJhY2Ugb3IgY3B1IG1pZ3JhdGlvbi4gVGh1cyB0aGV5IGRvIG5vdCBjaGVjayB0aGVcbm1tL3NsdWIuYzozMTcwOiAqIGVtcHR5IG9yIGZ1bGwgc2hlYWYgbGltaXRzIGZvciBzaW1wbGljaXR5LlxubW0vc2x1Yi5jLTMxNzEtICovXG5tbS9zbHViLmMtMzE3Mi1cbm1tL3NsdWIuYzozMTczOnN0YXRpYyB2b2lkIGJhcm5fcHV0X2VtcHR5X3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZilcbm1tL3NsdWIuYy0zMTc0LXtcbi0tXG5tbS9zbHViLmMtMzE3OC1cbm1tL3NsdWIuYzozMTc5Olx0bGlzdF9hZGQoXHUwMDI2c2hlYWYtXHUwMDNlYmFybl9saXN0LCBcdTAwMjZiYXJuLVx1MDAzZXNoZWF2ZXNfZW1wdHkpO1xubW0vc2x1Yi5jLTMxODAtXHRiYXJuLVx1MDAzZW5yX2VtcHR5JiM0MzsmIzQzOztcbi0tXG5tbS9zbHViLmMtMzE4NC1cbm1tL3NsdWIuYzozMTg1OnN0YXRpYyB2b2lkIGJhcm5fcHV0X2Z1bGxfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxubW0vc2x1Yi5jLTMxODYte1xuLS1cbm1tL3NsdWIuYy0zMTkwLVxubW0vc2x1Yi5jOjMxOTE6XHRsaXN0X2FkZChcdTAwMjZzaGVhZi1cdTAwM2ViYXJuX2xpc3QsIFx1MDAyNmJhcm4tXHUwMDNlc2hlYXZlc19mdWxsKTtcbm1tL3NsdWIuYy0zMTkyLVx0YmFybi1cdTAwM2Vucl9mdWxsJiM0MzsmIzQzOztcbi0tXG5tbS9zbHViLmMtMzE5Ni1cbm1tL3NsdWIuYzozMTk3OnN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqYmFybl9nZXRfZnVsbF9vcl9lbXB0eV9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuKVxubW0vc2x1Yi5jLTMxOTgte1xubW0vc2x1Yi5jOjMxOTk6XHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYgPSBOVUxMO1xubW0vc2x1Yi5jLTMyMDAtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbm1tL3NsdWIuYy0zMjA3LVx0aWYgKGJhcm4tXHUwMDNlbnJfZnVsbCkge1xubW0vc2x1Yi5jOjMyMDg6XHRcdHNoZWFmID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZiYXJuLVx1MDAzZXNoZWF2ZXNfZnVsbCwgc3RydWN0IHNsYWJfc2hlYWYsXG5tbS9zbHViLmMtMzIwOS1cdFx0XHRcdFx0YmFybl9saXN0KTtcbm1tL3NsdWIuYzozMjEwOlx0XHRsaXN0X2RlbChcdTAwMjZzaGVhZi1cdTAwM2ViYXJuX2xpc3QpO1xubW0vc2x1Yi5jLTMyMTEtXHRcdGJhcm4tXHUwMDNlbnJfZnVsbC0tO1xubW0vc2x1Yi5jLTMyMTItXHR9IGVsc2UgaWYgKGJhcm4tXHUwMDNlbnJfZW1wdHkpIHtcbm1tL3NsdWIuYzozMjEzOlx0XHRzaGVhZiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2YmFybi1cdTAwM2VzaGVhdmVzX2VtcHR5LFxubW0vc2x1Yi5jOjMyMTQ6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2xhYl9zaGVhZiwgYmFybl9saXN0KTtcbm1tL3NsdWIuYzozMjE1Olx0XHRsaXN0X2RlbChcdTAwMjZzaGVhZi1cdTAwM2ViYXJuX2xpc3QpO1xubW0vc2x1Yi5jLTMyMTYtXHRcdGJhcm4tXHUwMDNlbnJfZW1wdHktLTtcbi0tXG5tbS9zbHViLmMtMzIyMC1cbm1tL3NsdWIuYzozMjIxOlx0cmV0dXJuIHNoZWFmO1xubW0vc2x1Yi5jLTMyMjItfVxuLS1cbm1tL3NsdWIuYy0zMjI0LS8qXG5tbS9zbHViLmM6MzIyNTogKiBJZiBhIGZ1bGwgc2hlYWYgaXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYW5kIHB1dCB0aGUgc3VwcGxpZWQgZW1wdHkgb25lIHRvXG5tbS9zbHViLmM6MzIyNjogKiBiYXJuLiBXZSBpZ25vcmUgdGhlIGxpbWl0IG9uIGVtcHR5IHNoZWF2ZXMgYXMgdGhlIG51bWJlciBvZiBzaGVhdmVzIGRvZXNuJiMzOTt0XG5tbS9zbHViLmMtMzIyNy0gKiBjaGFuZ2UuXG5tbS9zbHViLmMtMzIyOC0gKi9cbm1tL3NsdWIuYzozMjI5OnN0YXRpYyBzdHJ1Y3Qgc2xhYl9zaGVhZiAqXG5tbS9zbHViLmM6MzIzMDpiYXJuX3JlcGxhY2VfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5LFxubW0vc2x1Yi5jLTMyMzEtXHRcdFx0IGJvb2wgYWxsb3dfc3Bpbilcbm1tL3NsdWIuYy0zMjMyLXtcbm1tL3NsdWIuYzozMjMzOlx0c3RydWN0IHNsYWJfc2hlYWYgKmZ1bGwgPSBOVUxMO1xubW0vc2x1Yi5jLTMyMzQtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbm1tL3NsdWIuYy0zMjQ0LVx0aWYgKGxpa2VseShiYXJuLVx1MDAzZW5yX2Z1bGwpKSB7XG5tbS9zbHViLmM6MzI0NTpcdFx0ZnVsbCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2YmFybi1cdTAwM2VzaGVhdmVzX2Z1bGwsIHN0cnVjdCBzbGFiX3NoZWFmLFxubW0vc2x1Yi5jLTMyNDYtXHRcdFx0XHRcdGJhcm5fbGlzdCk7XG5tbS9zbHViLmMtMzI0Ny1cdFx0bGlzdF9kZWwoXHUwMDI2ZnVsbC1cdTAwM2ViYXJuX2xpc3QpO1xubW0vc2x1Yi5jOjMyNDg6XHRcdGxpc3RfYWRkKFx1MDAyNmVtcHR5LVx1MDAzZWJhcm5fbGlzdCwgXHUwMDI2YmFybi1cdTAwM2VzaGVhdmVzX2VtcHR5KTtcbm1tL3NsdWIuYy0zMjQ5LVx0XHRiYXJuLVx1MDAzZW5yX2Z1bGwtLTtcbi0tXG5tbS9zbHViLmMtMzI1OC0vKlxubW0vc2x1Yi5jOjMyNTk6ICogSWYgYW4gZW1wdHkgc2hlYWYgaXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYW5kIHB1dCB0aGUgc3VwcGxpZWQgZnVsbCBvbmUgdG9cbm1tL3NsdWIuYzozMjYwOiAqIGJhcm4uIEJ1dCBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgZnVsbCBzaGVhdmVzLCByZWplY3QgdGhpcyB3aXRoIC1FMkJJRy5cbm1tL3NsdWIuYy0zMjYxLSAqL1xubW0vc2x1Yi5jOjMyNjI6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpcbm1tL3NsdWIuYzozMjYzOmJhcm5fcmVwbGFjZV9mdWxsX3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sIHN0cnVjdCBzbGFiX3NoZWFmICpmdWxsLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUkNVIEZyZWVpbmcgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gYG1tL3NsdWIuY2AgYW5kIGBtbS9zbGFiX2NvbW1vbi5jYCB3aXRoIHJlZ2FyZCB0byBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYF9fa2ZyZWVfcmN1X3NoZWFmYCwgYHJjdV9mcmVlX3NoZWFmYCwgYHJjdV9mcmVlX3NoZWFmX25vYmFybmAgaW4gYG1tL3NsdWIuY2AgYW5kIGBrdmZyZWVfY2FsbF9yY3VgLCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCwgYGtmcmVlX3JjdV9zaGVhZmAgaW4gYG1tL3NsYWJfY29tbW9uLmNgLgoKRmlyc3QsIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHF1ZXN0aW9uLiBZZXMsIHRoaXMgaXMgd29ydGggZnV6emluZyBiZWNhdXNlIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBga3ZmcmVlX2NhbGxfcmN1YCBhbmQgYGtmcmVlX3JjdV9zaGVhZmAuIFNwZWNpZmljYWxseSwgdW5kZXIgYFBSRUVNUFRfUlRgLCBpdCBieXBhc3NlcyB0aGUgc2hlYWYtYmFzZWQgYGtmcmVlX3JjdWAgYW5kIHBhc3NlcyBgU0xBQl9GUkVFX0RFRkFVTFRgIHVuZGVyIGAhUFJFRU1QVF9SVGAuCgpOb3csIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGNvbnVuZHJ1bS4gVGhlIGtleSBoZXJlIGlzIGlkZW50aWZ5aW5nICpzcGVjaWZpYyogZnVuY3Rpb25zIGZvciBpbnRlbnNpdmUgZnV6emluZywgd2hpbGUgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgZnV6emluZyB3aWxsIGJlIHNrZXdlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcy4gSSBrbm93IHRoYXQgbWVtb3J5IGFsbG9jYXRpb24vZnJlZSBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgLCBga21hbGxvY2AsIGBjYWxsX3JjdWAsIGBrdmZyZWVfY2FsbF9yY3VgIGFyZSBleHRyZW1lbHkgaG90IHBhdGguIEhvd2V2ZXIsIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgc3BlY2lmaWMgZW50cnlwb2ludCBmb3IgbG9ja2xlc3MgUkNVIGZyZWUuCgpNeSB0aG91Z2h0cyBjaXJjbGUgYXJvdW5kIGBrdmZyZWVfY2FsbF9yY3VgIGFuZCB3aGV0aGVyIGl0IGlzIGEgaG90LXBhdGggZnVuY3Rpb24sIHdoaWNoIGlzIHRyaWNreSBiZWNhdXNlIHdoaWxlIGBrZnJlZWAgYW5kIGBrbWFsbG9jYCBhcmUgZGlyZWN0bHkgY2FsbGVkLCBga3ZmcmVlX2NhbGxfcmN1YCBpcyBjYWxsZWQgd2hlbiBSQ1Ugb2JqZWN0cyBhcmUgcmVjbGFpbWVkLiBUaGlzIGlzIGEgc3VidGxlLCBidXQgaW1wb3J0YW50IGRpc3RpbmN0aW9uLiBJIGNhbiBydWxlIG91dCB0aGUgc3RhdGljIGhlbHBlciBgX19rZnJlZV9yY3Vfc2hlYWZgLiBUaGUga2V5IGlzIGZpbmRpbmcgYSBmdW5jdGlvbiB0aGF0IGJlbmVmaXRzIGZyb20gdGFyZ2V0ZWQgZnV6emluZywgYnV0IGlzbiYjMzk7dCBzbyBnZW5lcmljIHRoYXQgZnV6emluZyBpcyBza2V3ZWQuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGp1c3QgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIHVwZGF0ZWQgY29tbWVudHMgaW4gYG1tL3NsdWIuY2AuIFNvIG15IGJlc3QgYmV0IGlzIGBrdmZyZWVfY2FsbF9yY3VgLCBhcyB0aGUga2V5IEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guCgpGaW5hbGx5LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gVGhlIG1vc3QgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYFBSRUVNUFRfUlRgLCBzaW5jZSB0aGUgY29uZGl0aW9uYWwgY2hhbmdlIGhpbmdlcyBvbiBpdC4gVGhlIHBhdGNoIGFkZHMgYGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgJmFtcDsmYW1wOyBrZnJlZV9yY3Vfc2hlYWYocHRyKSlgIGFuZCBgU0xVQmAgaXMgZGVmYXVsdCB5LCBgS1ZGUkVFX1JDVV9CQVRDSEVEYCBpcyBkZWZhdWx0IHkuIFRoZSBjaGFuZ2VzIGFyZSB0cmlnZ2VyZWQgdW5kZXIgYCFQUkVFTVBUX1JUYC4KClRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFBSRUVNUFRfUlRgLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBFWFBFUlRgIGFuZCBgQVJDSF9TVVBQT1JUU19SVGAuIEFsc28gYEtWRlJFRV9SQ1VfQkFUQ0hFRGAsIGFuZCBgIVNMVUJfVElOWWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY5MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vc2x1Yi5jPTE5Mz1lbnVtIHNsYWJfZmxhZ3Mge1xuLS1cbm1tL3NsdWIuYy0xOTgtXG5tbS9zbHViLmM6MTk5OiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxubW0vc2x1Yi5jLTIwMC0jZGVmaW5lIF9fZmFzdHBhdGhfaW5saW5lIF9fYWx3YXlzX2lubGluZVxuLS1cbm1tL3NsdWIuYy0yMDQtXG5tbS9zbHViLmM6MjA1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jOjIwNjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdfT05cbm1tL3NsdWIuYy0yMDctREVGSU5FX1NUQVRJQ19LRVlfVFJVRShzbHViX2RlYnVnX2VuYWJsZWQpO1xuLS1cbm1tL3NsdWIuYz0yMDk9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc2x1Yl9kZWJ1Z19lbmFibGVkKTtcbm1tL3NsdWIuYy0yMTAtI2VuZGlmXG5tbS9zbHViLmM6MjExOiNlbmRpZlx0XHQvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTIxMi1cbm1tL3NsdWIuYzoyMTM6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmMtMjE0LXN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzdHJpY3RfbnVtYSk7XG4tLVxubW0vc2x1Yi5jLTIxNi1cbm1tL3NsdWIuYzoyMTc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbHViLmM6MjE4OkRFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbm1tL3NsdWIuYy0yMTktXHRcdFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XG4tLVxubW0vc2x1Yi5jPTIzOT1zdHJ1Y3Qgc2xhYl9vYmpfaXRlciB7XG4tLVxubW0vc2x1Yi5jLTI0MS1cdHZvaWQgKnN0YXJ0O1xubW0vc2x1Yi5jOjI0MjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9zbHViLmMtMjQzLVx0dW5zaWduZWQgbG9uZyBmcmVlbGlzdF9jb3VudDtcbi0tXG5tbS9zbHViLmM9MjU0PXZvaWQgKmZpeHVwX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxuLS1cbm1tL3NsdWIuYy0yNzItXG5tbS9zbHViLmM6MjczOiNpZm5kZWYgQ09ORklHX1NMVUJfVElOWVxubW0vc2x1Yi5jLTI3NC0vKlxuLS1cbm1tL3NsdWIuYz0zMjg9c3RydWN0IHRyYWNrIHtcbm1tL3NsdWIuYy0zMjktXHR1bnNpZ25lZCBsb25nIGFkZHI7XHQvKiBDYWxsZWQgZnJvbSBhZGRyZXNzICovXG5tbS9zbHViLmM6MzMwOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTMzMS1cdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbi0tXG5tbS9zbHViLmM9MzQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3N5c2ZzX3Byb2Nlc3NfYWxpYXNlcyh2b2lkKSB7IH1cbi0tXG5tbS9zbHViLmMtMzQ5LVxubW0vc2x1Yi5jOjM1MDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKVxubW0vc2x1Yi5jLTM1MS1zdGF0aWMgdm9pZCBkZWJ1Z2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopO1xuLS1cbm1tL3NsdWIuYz0zNjM9ZW51bSBzdGF0X2l0ZW0ge1xuLS1cbm1tL3NsdWIuYy0zOTItXG5tbS9zbHViLmM6MzkzOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTM5NC1zdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyB7XG4tLVxubW0vc2x1Yi5jPTM5OT1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpXG5tbS9zbHViLmMtNDAwLXtcbm1tL3NsdWIuYzo0MDE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtNDAyLVx0Lypcbi0tXG5tbS9zbHViLmM9NDExPXZvaWQgc3RhdF9hZGQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpLCBpbnQgdilcbm1tL3NsdWIuYy00MTIte1xubW0vc2x1Yi5jOjQxMzojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy00MTQtXHRyYXdfY3B1X2FkZChzLVx1MDAzZWNwdV9zdGF0cy1cdTAwM2VzdGF0W3NpXSwgdik7XG4tLVxubW0vc2x1Yi5jPTQ1Nz1zdHJ1Y3Qga21lbV9jYWNoZV9ub2RlIHtcbi0tXG5tbS9zbHViLmMtNDYwLVx0c3RydWN0IGxpc3RfaGVhZCBwYXJ0aWFsO1xubW0vc2x1Yi5jOjQ2MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy00NjItXHRhdG9taWNfbG9uZ190IG5yX3NsYWJzO1xuLS1cbm1tL3NsdWIuYz01MzE9c3RhdGljIGlubGluZSBmcmVlcHRyX3QgZnJlZWxpc3RfcHRyX2VuY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNTM1LVxubW0vc2x1Yi5jOjUzNjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy01MzctXHRlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpcHRyIF4gcy1cdTAwM2VyYW5kb20gXiBzd2FiKHB0cl9hZGRyKTtcbi0tXG5tbS9zbHViLmM9NTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCAqZnJlZWxpc3RfcHRyX2RlY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNTQ4LVxubW0vc2x1Yi5jOjU0OTojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy01NTAtXHRkZWNvZGVkID0gKHZvaWQgKikocHRyLnYgXiBzLVx1MDAzZXJhbmRvbSBeIHN3YWIocHRyX2FkZHIpKTtcbi0tXG5tbS9zbHViLmM9NTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnJlZXBvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgdm9pZCAqZnApXG4tLVxubW0vc2x1Yi5jLTU3MS1cbm1tL3NsdWIuYzo1NzI6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG5tbS9zbHViLmMtNTczLVx0QlVHX09OKG9iamVjdCA9PSBmcCk7IC8qIG5haXZlIGRldGVjdGlvbiBvZiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uICovXG4tLVxubW0vc2x1Yi5jPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgX19zbGFiX3VwZGF0ZV9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTcwNi1cbm1tL3NsdWIuYzo3MDc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jLTcwOC1cdFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xuLS1cbm1tL3NsdWIuYz03NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcbi0tXG5tbS9zbHViLmMtNzkwLVxubW0vc2x1Yi5jOjc5MTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2x1Yi5jLTc5Mi1cbi0tXG5tbS9zbHViLmM9ODc5PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODg1LVxubW0vc2x1Yi5jOjg4NjojaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG5tbS9zbHViLmMtODg3LXN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmM9OTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3NldF9vYmpfZXh0c19pbl9vYmplY3Qoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTkyMC0gKi9cbm1tL3NsdWIuYzo5MjE6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKSB8fCBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKVxubW0vc2x1Yi5jLTkyMi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpXG4tLVxubW0vc2x1Yi5jPTkyNz1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9hdHRhY2hfa3Byb2JlX2xvY2tlZCh2b2lkKSB7IH1cbi0tXG5tbS9zbHViLmMtOTM0LVxubW0vc2x1Yi5jOjkzNTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05MzYtXG4tLVxubW0vc2x1Yi5jPTk0OT1zdGF0aWMgdm9pZCBfX2ZpbGxfbWFwKHVuc2lnbmVkIGxvbmcgKm9ial9tYXAsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy05NjAtXG5tbS9zbHViLmM6OTYxOiNpZiBJU19FTkFCTEVEKENPTkZJR19LVU5JVClcbm1tL3NsdWIuYy05NjItc3RhdGljIGJvb2wgc2xhYl9hZGRfa3VuaXRfZXJyb3JzKHZvaWQpXG4tLVxubW0vc2x1Yi5jPTEwMDQ9c3RhdGljIGlubGluZSB2b2lkICpyZXN0b3JlX3JlZF9sZWZ0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpwKVxuLS1cbm1tL3NsdWIuYy0xMDE0LSAqL1xubW0vc2x1Yi5jOjEwMTU6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUdfT04pXG5tbS9zbHViLmMtMTAxNi1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xuLS1cbm1tL3NsdWIuYz0xMDU3PXN0YXRpYyBzdHJ1Y3QgdHJhY2sgKmdldF90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LFxuLS1cbm1tL3NsdWIuYy0xMDY2LVxubW0vc2x1Yi5jOjEwNjc6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXG5tbS9zbHViLmMtMTA2OC1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUoZ2ZwX3QgZ2ZwX2ZsYWdzKVxuLS1cbm1tL3NsdWIuYz0xMDg2PXN0YXRpYyB2b2lkIHNldF90cmFja191cGRhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCxcbi0tXG5tbS9zbHViLmMtMTA5MS1cbm1tL3NsdWIuYzoxMDkyOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTEwOTMtXHRwLVx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcbi0tXG5tbS9zbHViLmM9MTEyMD1zdGF0aWMgdm9pZCBwcmludF90cmFjayhjb25zdCBjaGFyICpzLCBzdHJ1Y3QgdHJhY2sgKnQsIHVuc2lnbmVkIGxvbmcgcHJfdGltZSlcbi0tXG5tbS9zbHViLmMtMTEyOC1cdCAgICAgICBzLCAodm9pZCAqKXQtXHUwMDNlYWRkciwgcHJfdGltZSAtIHQtXHUwMDNld2hlbiwgdC1cdTAwM2VjcHUsIHQtXHUwMDNlcGlkKTtcbm1tL3NsdWIuYzoxMTI5OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTExMzAtXHRoYW5kbGUgPSBSRUFEX09OQ0UodC1cdTAwM2VoYW5kbGUpO1xuLS1cbm1tL3NsdWIuYz0xMzIwPXN0YXRpYyB2b2lkIHJlc3RvcmVfYnl0ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHU4IGRhdGEsXG4tLVxubW0vc2x1Yi5jLTEzMjYtXG5tbS9zbHViLmM6MTMyNzojaWZkZWYgQ09ORklHX0tNU0FOXG5tbS9zbHViLmMtMTMyOC0jZGVmaW5lIHBhZF9jaGVja19hdHRyaWJ1dGVzIG5vaW5saW5lIF9fbm9fa21zYW5fY2hlY2tzXG4tLVxubW0vc2x1Yi5jPTEzMzQ9Y2hlY2tfYnl0ZXNfYW5kX3JlcG9ydChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTEzOTctICpcbm1tL3NsdWIuYzoxMzk4OiAqIFtNYW5kYXRvcnkgcGFkZGluZ10gKGlmIENPTkZJR19TTFVCX0RFQlVHIFx1MDAyNlx1MDAyNiBTTEFCX1JFRF9aT05FKVxubW0vc2x1Yi5jLTEzOTktICogICAtIE9uZSBtYW5kYXRvcnkgZGVidWcgd29yZCB0byBndWFyYW50ZWUgYSBtaW5pbXVtIHBvaXNvbmVkIGdhcFxuLS1cbm1tL3NsdWIuYz0xOTA3PXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsdWJfZGVidWcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9zbHViLmMtMTk0MC1cdCAqIHNsYWJfZGVidWcgc2hvdWxkIGJlIHVuY2hhbmdlZCAoMCBvciBERUJVR19ERUZBVUxUX0ZMQUdTLCBkZXBlbmRpbmdcbm1tL3NsdWIuYzoxOTQxOlx0ICogb24gQ09ORklHX1NMVUJfREVCVUdfT04pLiBXZSBjYW4gZXh0ZW5kZWQgdGhhdCB0byBtdWx0aXBsZSBsaXN0cyBhc1xubW0vc2x1Yi5jLTE5NDItXHQgKiBsb25nIGFzIHRoZXJlIGlzIG5vIG9wdGlvbiBzcGVjaWZ5aW5nIGZsYWdzIHdpdGhvdXQgYSBzbGFiIGxpc3QuXG4tLVxubW0vc2x1Yi5jPTE5ODE9c2xhYl9mbGFnc190IGttZW1fY2FjaGVfZmxhZ3Moc2xhYl9mbGFnc190IGZsYWdzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3NsdWIuYy0yMDM0LX1cbm1tL3NsdWIuYzoyMDM1OiNlbHNlIC8qICFDT05GSUdfU0xVQl9ERUJVRyAqL1xubW0vc2x1Yi5jLTIwMzYtc3RhdGljIGlubGluZSB2b2lkIHNldHVwX29iamVjdF9kZWJ1ZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KSB7fVxuLS1cbm1tL3NsdWIuYz0yMDY5PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG5tbS9zbHViLmMtMjA3MC1cdFx0XHRcdFx0XHRcdGludCBvYmplY3RzKSB7fVxubW0vc2x1Yi5jOjIwNzE6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXG5tbS9zbHViLmMtMjA3Mi1cbi0tXG5tbS9zbHViLmMtMjA4NC1cbm1tL3NsdWIuYzoyMDg1OiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG5tbS9zbHViLmMtMjA4Ni1cbm1tL3NsdWIuYzoyMDg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vc2x1Yi5jLTIwODgtXG4tLVxubW0vc2x1Yi5jPTIxMjQ9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjE0OS1cbm1tL3NsdWIuYzoyMTUwOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjE1MS1cbi0tXG5tbS9zbHViLmM9MjE1ND1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMTU2LVxubW0vc2x1Yi5jOjIxNTc6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjE1OC1cbi0tXG5tbS9zbHViLmM9MjE2ND1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIyMDAtXG5tbS9zbHViLmM6MjIwMTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19WTSkpIHtcbm1tL3NsdWIuYy0yMjAyLVx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0c19jYWNoZTtcbi0tXG5tbS9zbHViLmMtMjIxNy1cdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xubW0vc2x1Yi5jOjIyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIyMTktXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4tLVxubW0vc2x1Yi5jPTIyODU9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIzMDEtXG5tbS9zbHViLmM6MjMwMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjMwMy1cdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuLS1cbm1tL3NsdWIuYy0yMzE3LVxubW0vc2x1Yi5jOjIzMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIzMTktXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0tXG5tbS9zbHViLmMtMjMyNS1cbm1tL3NsdWIuYzoyMzI2OiNlbHNlIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbm1tL3NsdWIuYy0yMzI3LVxuLS1cbm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMzUwLVxubW0vc2x1Yi5jOjIzNTE6I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbm1tL3NsdWIuYy0yMzUyLVxubW0vc2x1Yi5jOjIzNTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbHViLmMtMjM1NC1cbi0tXG5tbS9zbHViLmM9MjQ2OT1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcbi0tXG5tbS9zbHViLmMtMjQ4MC1cbm1tL3NsdWIuYzoyNDgxOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9zbHViLmMtMjQ4Mi1cbi0tXG5tbS9zbHViLmM9MjQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcbi0tXG5tbS9zbHViLmMtMjQ5OC1cbm1tL3NsdWIuYzoyNDk5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xubW0vc2x1Yi5jLTI1MDAtXG5tbS9zbHViLmMtMjUwMS1cbm1tL3NsdWIuYzoyNTAyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsdWIuYy0yNTAzLVxuLS1cbm1tL3NsdWIuYz0yNTUzPWJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbi0tXG5tbS9zbHViLmMtMjYxMC1cbm1tL3NsdWIuYzoyNjExOiNlbHNlIC8qIENPTkZJR19NRU1DRyAqL1xubW0vc2x1Yi5jLTI2MTItc3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYz0yNjI1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNjI4LX1cbm1tL3NsdWIuYzoyNjI5OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3NsdWIuYy0yNjMwLVxubW0vc2x1Yi5jOjI2MzE6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTI2MzItc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKTtcbi0tXG5tbS9zbHViLmM9MjYzND1zdHJ1Y3QgcmN1X2RlbGF5ZWRfZnJlZSB7XG4tLVxubW0vc2x1Yi5jLTI2NDQtICogUmV0dXJucyB0cnVlIGlmIGZyZWVpbmcgb2YgdGhlIG9iamVjdCBjYW4gcHJvY2VlZCwgZmFsc2UgaWYgaXRzIHJldXNlXG5tbS9zbHViLmM6MjY0NTogKiB3YXMgZGVsYXllZCBieSBDT05GSUdfU0xVQl9SQ1VfREVCVUcgb3IgS0FTQU4gcXVhcmFudGluZSwgb3IgaXQgd2FzIHJldHVybmVkXG5tbS9zbHViLmMtMjY0Ni0gKiB0byBLRkVOQ0UuXG4tLVxubW0vc2x1Yi5jPTI2Njc9Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxuLS1cbm1tL3NsdWIuYy0yNjk1LVxubW0vc2x1Yi5jOjI2OTY6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTI2OTctXHRpZiAoc3RpbGxfYWNjZXNzaWJsZSkge1xuLS1cbm1tL3NsdWIuYy0yNzE1LVx0fVxubW0vc2x1Yi5jOjI3MTY6I2VuZGlmIC8qIENPTkZJR19TTFVCX1JDVV9ERUJVRyAqL1xubW0vc2x1Yi5jLTI3MTctXG4tLVxubW0vc2x1Yi5jPTMzMzM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhYiAqYWxsb2Nfc2xhYl9wYWdlKGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtMzM2MC1cbm1tL3NsdWIuYzozMzYxOiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9SQU5ET01cbm1tL3NsdWIuYy0zMzYyLS8qIFByZS1pbml0aWFsaXplIHRoZSByYW5kb20gc2VxdWVuY2UgY2FjaGUgKi9cbi0tXG5tbS9zbHViLmM9MzQwOT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9mcmVlbGlzdF9yYW5kb21pemF0aW9uKHZvaWQpIHsgfVxubW0vc2x1Yi5jOjM0MTA6I2VuZGlmIC8qIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTSAqL1xubW0vc2x1Yi5jLTM0MTEtXG4tLVxubW0vc2x1Yi5jPTM0NDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQ4MC1cbm1tL3NsdWIuYzozNDgxOiNpZmRlZiBDT05GSUdfNjRCSVRcbm1tL3NsdWIuYy0zNDgyLVx0aWYgKGNhY2hlX25lZWRzX29iamNnKHMpKVxuLS1cbm1tL3NsdWIuYz0zNjM0PXN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zNjQwLVxubW0vc2x1Yi5jOjM2NDE6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtMzY0Mi1cdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xuLS1cbm1tL3NsdWIuYz0zNjY4PXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV4dF9zbGFiX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMzY3MC17XG5tbS9zbHViLmM6MzY3MTojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9zbHViLmMtMzY3Mi1cdGlmIChpdGVyLVx1MDAzZXJhbmRvbSkge1xuLS1cbm1tL3NsdWIuYz0zNzE4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2l0ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0zNzI0LVxubW0vc2x1Yi5jOjM3MjU6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTM3MjYtXHRpdGVyLVx1MDAzZXJhbmRvbSA9IChzbGFiLVx1MDAzZW9iamVjdHMgXHUwMDNlPSAyIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXJhbmRvbV9zZXEpO1xuLS1cbm1tL3NsdWIuYz0zODg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTM5MTMtXG5tbS9zbHViLmM6MzkxNDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTM5MTUtXHRcdFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzLCBuLCBzbGFiLFxuLS1cbm1tL3NsdWIuYz0zOTUwPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zOTUyLXtcbm1tL3NsdWIuYzozOTUzOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTM5NTQtXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0O1xuLS1cbm1tL3NsdWIuYy00MDE3LVx0fSB3aGlsZSAoYWxsb3dfc3BpbiBcdTAwMjZcdTAwMjYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSk7XG5tbS9zbHViLmM6NDAxODojZW5kaWZcdC8qIENPTkZJR19OVU1BICovXG5tbS9zbHViLmMtNDAxOS1cdHJldHVybiBOVUxMO1xuLS1cbm1tL3NsdWIuYz00MjQ5PXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MjYxLVxubW0vc2x1Yi5jOjQyNjI6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDI2My1zdGF0aWMgaW50IGNvdW50X2ZyZWUoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTQyNzQ9c3RhdGljIGlubGluZSBib29sIGZyZWVfZGVidWdfcHJvY2Vzc2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtNDMyOS19XG5tbS9zbHViLmM6NDMzMDojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy00MzMxLVxubW0vc2x1Yi5jOjQzMzI6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIHx8IGRlZmluZWQoU0xBQl9TVVBQT1JUU19TWVNGUylcbm1tL3NsdWIuYy00MzMzLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcbi0tXG5tbS9zbHViLmMtNDM0NS19XG5tbS9zbHViLmM6NDM0NjojZW5kaWYgLyogQ09ORklHX1NMVUJfREVCVUcgfHwgU0xBQl9TVVBQT1JUU19TWVNGUyAqL1xubW0vc2x1Yi5jLTQzNDctXG5tbS9zbHViLmM6NDM0ODojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy00MzQ5LSNkZWZpbmUgTUFYX1BBUlRJQUxfVE9fU0NBTiAxMDAwMFxuLS1cbm1tL3NsdWIuYz00Mzg3PXNsYWJfb3V0X29mX21lbW9yeShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBuaWQpXG4tLVxubW0vc2x1Yi5jLTQ0MjAtfVxubW0vc2x1Yi5jOjQ0MjE6I2Vsc2UgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cbm1tL3NsdWIuYy00NDIyLXN0YXRpYyBpbmxpbmUgdm9pZFxuLS1cbm1tL3NsdWIuYz00NTMzPXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTQ1ODEtXG5tbS9zbHViLmM6NDU4MjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcbm1tL3NsdWIuYy00NTgzLVx0XHRvYmplY3QgPSBhbGxvY19zaW5nbGVfZnJvbV9uZXdfc2xhYihzLCBzbGFiLCBhYyk7XG4tLVxubW0vc2x1Yi5jPTQ2MDY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxubW0vc2x1Yi5jLTQ2MDcte1xubW0vc2x1Yi5jOjQ2MDg6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmMtNDYwOS1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnN0cmljdF9udW1hKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9zbHViLmM9NDgyNz12b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy00ODMyLVxubW0vc2x1Yi5jOjQ4MzM6XHRub2RlX3JlcXVlc3RlZCA9IElTX0VOQUJMRUQoQ09ORklHX05VTUEpIFx1MDAyNlx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcbm1tL3NsdWIuYy00ODM0LVxuLS1cbm1tL3NsdWIuYz01NzEyPXN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNTcyMi1cbm1tL3NsdWIuYzo1NzIzOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xubW0vc2x1Yi5jLTU3MjQtXHRcdGZyZWVfdG9fcGFydGlhbF9saXN0KHMsIHNsYWIsIGhlYWQsIHRhaWwsIGNudCwgYWRkcik7XG4tLVxubW0vc2x1Yi5jPTYxMDM9Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcbi0tXG5tbS9zbHViLmMtNjEwOC1cbm1tL3NsdWIuYzo2MTA5Olx0Vk1fV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBhbGxvd19zcGluKTtcbm1tL3NsdWIuYy02MTEwLVxubW0vc2x1Yi5jOjYxMTE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxubW0vc2x1Yi5jLTYxMTItXHRcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xuLS1cbm1tL3NsdWIuYy02MjEwLVx0c3RhdChzLCBGUkVFX1JDVV9TSEVBRik7XG5tbS9zbHViLmM6NjIxMTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5tbS9zbHViLmMtNjIxMi1cdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbi0tXG5tbS9zbHViLmMtNjIxNi1cdHN0YXQocywgRlJFRV9SQ1VfU0hFQUZfRkFJTCk7XG5tbS9zbHViLmM6NjIxNzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5tbS9zbHViLmMtNjIxOC1cdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbi0tXG5tbS9zbHViLmM9NjIyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy02MjI2LVxubW0vc2x1Yi5jOjYyMjc6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpKVxubW0vc2x1Yi5jLTYyMjgtXHRcdGdvdG8gY2hlY2tfcGZtZW1hbGxvYztcbi0tXG5tbS9zbHViLmMtNjIzMS1cbm1tL3NsdWIuYzo2MjMyOiNpZmRlZiBDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTXG5tbS9zbHViLmMtNjIzMy1cdC8qXG4tLVxubW0vc2x1Yi5jPTY0OTQ9dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTY1MDktXG5tbS9zbHViLmM6NjUxMDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtNjUxMS0vKiBEbyBub3QgaW5saW5lIHRoZSByYXJlIG1lbWNnIGNoYXJnaW5nIGZhaWxlZCBwYXRoIGludG8gdGhlIGFsbG9jYXRpb24gcGF0aCAqL1xuLS1cbm1tL3NsdWIuYz02NTI1PXZvaWQgc2xhYl9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpoZWFkLFxuLS1cbm1tL3NsdWIuYy02NTM5LVxubW0vc2x1Yi5jOjY1NDA6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTY1NDEtc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuLS1cbm1tL3NsdWIuYy02NTY2LX1cbm1tL3NsdWIuYzo2NTY3OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9SQ1VfREVCVUcgKi9cbm1tL3NsdWIuYy02NTY4LVxubW0vc2x1Yi5jOjY1Njk6I2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmMtNjU3MC12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vc2x1Yi5jPTY2MDc9dm9pZCBrbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpXG4tLVxubW0vc2x1Yi5jLTY2MTItXG5tbS9zbHViLmM6NjYxMzpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEKSB8fFxubW0vc2x1Yi5jLTY2MTQtXHQgICAga21lbV9jYWNoZV9kZWJ1Z19mbGFncyhzLCBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykpIHtcbi0tXG5tbS9zbHViLmM9NjYzMT1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy02NjM0LVxubW0vc2x1Yi5jOjY2MzU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNjYzNi1cdC8qXG4tLVxubW0vc2x1Yi5jPTY2NjA9c3RhdGljIHNpemVfdCBfX2tzaXplKGNvbnN0IHZvaWQgKm9iamVjdClcbi0tXG5tbS9zbHViLmMtNjY3Ny1cbm1tL3NsdWIuYzo2Njc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTY2NzktXHRza2lwX29yaWdfc2l6ZV9jaGVjayhzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIG9iamVjdCk7XG4tLVxubW0vc2x1Yi5jPTcyNTY9X19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbm1tL3NsdWIuYy03MzI5LVxubW0vc2x1Yi5jOjczMzA6I2lmZGVmIENPTkZJR19OVU1BXG5tbS9zbHViLmMtNzMzMS1zdGF0aWMgdW5zaWduZWQgaW50XG4tLVxubW0vc2x1Yi5jPTc0Mjc9c3RhdGljIGJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy03NDMxLVxubW0vc2x1Yi5jOjc0MzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XG5tbS9zbHViLmMtNzQzMy1cdFx0Y29uc3Qgc3RydWN0IHNsYWJfYWxsb2NfY29udGV4dCBhYyA9IHtcbi0tXG5tbS9zbHViLmM9NzU2MD1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWF4X29yZGVyID1cbm1tL3NsdWIuYzo3NTYxOlx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcbm1tL3NsdWIuYy03NTYyLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2x1Yl9taW5fb2JqZWN0cztcbi0tXG5tbS9zbHViLmM9NzY3Mz1pbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxuLS1cbm1tL3NsdWIuYy03Njc3LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bi1cdTAwM2VwYXJ0aWFsKTtcbm1tL3NsdWIuYzo3Njc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc2NzktXHRhdG9taWNfbG9uZ19zZXQoXHUwMDI2bi1cdTAwM2Vucl9zbGFicywgMCk7XG4tLVxubW0vc2x1Yi5jLTc2ODQtXG5tbS9zbHViLmM6NzY4NTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy03Njg2LXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2ttZW1fY2FjaGVfc3RhdHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jPTc3NTQ9c3RhdGljIHZvaWQgZWFybHlfa21lbV9jYWNoZV9ub2RlX2FsbG9jKGludCBub2RlKVxuLS1cbm1tL3NsdWIuYy03Nzc3LVxubW0vc2x1Yi5jOjc3Nzg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzc3OS1cdGluaXRfb2JqZWN0KGttZW1fY2FjaGVfbm9kZSwgbiwgU0xVQl9SRURfQUNUSVZFKTtcbi0tXG5tbS9zbHViLmM9NzgxNj12b2lkIF9fa21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03ODE5LVx0cGNzX2Rlc3Ryb3kocyk7XG5tbS9zbHViLmM6NzgyMDojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy03ODIxLVx0ZnJlZV9wZXJjcHUocy1cdTAwM2VjcHVfc3RhdHMpO1xuLS1cbm1tL3NsdWIuYz03ODY1PXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy03ODcyLVxubW0vc2x1Yi5jOjc4NzM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0RFQlVHX0ZMQUdTKVxubW0vc2x1Yi5jLTc4NzQtXHRcdHJldHVybiAwO1xuLS1cbm1tL3NsdWIuYz03OTE2PXN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy03OTI5LVxubW0vc2x1Yi5jOjc5MzA6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzkzMS1cdC8qXG4tLVxubW0vc2x1Yi5jLTc5OTItXG5tbS9zbHViLmM6Nzk5MzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03OTk0LVx0aWYgKGZsYWdzIFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpIHtcbi0tXG5tbS9zbHViLmMtODAwNy1cdGthc2FuX2NhY2hlX2NyZWF0ZShzLCBcdTAwMjZzaXplLCBcdTAwMjZzLVx1MDAzZWZsYWdzKTtcbm1tL3NsdWIuYzo4MDA4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTgwMDktXHRpZiAoZmxhZ3MgXHUwMDI2IFNMQUJfUkVEX1pPTkUpIHtcbi0tXG5tbS9zbHViLmMtODAzMC1cdGFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIHMtXHUwMDNlYWxpZ24pO1xubW0vc2x1Yi5jOjgwMzE6I2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxubW0vc2x1Yi5jLTgwMzItXHRpZiAoc2xhYl9hcmdzX3VubWVyZ2VhYmxlKGFyZ3MsIHMtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3NsdWIuYz04MDcyPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy04MDczLXtcbm1tL3NsdWIuYzo4MDc0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTgwNzUtXHR2b2lkICphZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLS1cbm1tL3NsdWIuYz04MTM5PWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODg1CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2hlYWYgQ2FwYWNpdHkgYW5kIFJDVSBGcmVlaW5nIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgYGNhbGN1bGF0ZV9zaGVhZl9jYXBhY2l0eWAsIGl0IHNlZW1zIHNoZWF2ZXMgYXJlIGFjdGl2ZSB1bmRlciBub3JtYWwgYENPTkZJR19TTFVCYCBjb25kaXRpb25zLCBwcm92aWRlZCB3ZSBhcmVuJiMzOTt0IHVzaW5nIGBDT05GSUdfU0xVQl9USU5ZYCBvciBzb21lIGRlYnVnIGZsYWdzLiBHb29kLCB0aGF0IHNldHMgdGhlIHN0YWdlLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVxdWlyZW1lbnRzIGZvciBmdXp6aW5nOiBgV29ydGhGdXp6aW5nYCBpcyB0cnVlLCBncmVhdC4gRm9yIGBGb2N1c1N5bWJvbHNgLCB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcmVsYXRlZCB0byBSQ1Ugc2hlYWYgZnJlZWluZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgYF9fa2ZyZWVfcmN1X3NoZWFmYCwgYW5kIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIChvciBldmVuIGBrdmZyZWVfY2FsbF9yY3VgKS4gQnV0IHdhaXQsIGBrdmZyZWVfY2FsbF9yY3VgIGlzIGEgbW9yZSBjb3JlIEFQSSBlbnRyeSBwb2ludC4gU28sIHRoZSBxdWVzdGlvbiBpcywgd2hpY2ggYXJlIGJlc3QgdG8gZm9jdXMgb24/IFRoZSBpbnN0cnVjdGlvbnMgdGVsbCB1cyB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgZmF2b3Jpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFdlbGwsIGBfX2tmcmVlX3JjdV9zaGVhZmAgKmlzKiBub24tc3RhdGljIGFuZCBzcGVjaWZpY2FsbHkgZm9yIFJDVSBzaGVhZiBmcmVlaW5nLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBjaG9pY2UuIEFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZm9yIGxvY2tsZXNzIGtmcmVlIFJDVSB3aGljaCBzZWVtcyBiZXR0ZXIuIE9yLCB3ZSBjb3VsZCBpbmNsdWRlIHRoZSBnZW5lcmljIGBrdmZyZWVfY2FsbF9yY3VgIGVudHJ5cG9pbnQgYXMgd2VsbCwgdG8gYnJvYWRlbiBjb3ZlcmFnZS4gU28sIEkgdGhpbmsgd2UgY2FuIGNvbmZpZGVudGx5IGxpc3QgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgKG9yIGBrdmZyZWVfY2FsbF9yY3VgKS4KCkZpbmFsbHksIGZvciBgRW5hYmxlQ29uZmlnc2AsIHdlIG5lZWQgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgYW5kIGBQUkVFTVBUX1JUYCAoYW5kIGl0cyBgRVhQRVJUYCBkZXBlbmRlbmN5KS4gR290IGl0LgoKT2theSwgdGhhdCBzZWVtcyBsaWtlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFyYW1ldGVycy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVkZSRUVfUkNVX0JBVENIRUQmIzM0OywKICAgICYjMzQ7UFJFRU1QVF9SVCYjMzQ7LAogICAgJiMzNDtFWFBFUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2tmcmVlX3JjdV9zaGVhZiYjMzQ7LAogICAgJiMzNDtrZnJlZV9jYWxsX3JjdV9ub2xvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNMVUIgYWxsb2NhdG9yJiMzOTtzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZGUkVFX1JDVV9CQVRDSEVEJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfUlQmIzM0OywKICAgICYjMzQ7RVhQRVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAgICYjMzQ7a2ZyZWVfY2FsbF9yY3Vfbm9sb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvciYjMzk7cyBSQ1Ugc2hlYWYgZnJlZWluZyBsb2dpYyBpbiBtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMuIEl0IGFkanVzdHMga2ZyZWVfcmN1X3NoZWFmKCkgdG8gYWx3YXlzIHVzZSBTTEFCX0ZSRUVfREVGQVVMVCBhbmQgdXBkYXRlcyBrdmZyZWVfY2FsbF9yY3UoKSB0byBjb21wbGV0ZWx5IGJ5cGFzcyB0aGUgc2hlYWYgbGF5ZXIgdW5kZXIgQ09ORklHX1BSRUVNUFRfUlQgdG8gYXZvaWQgYWNxdWlyaW5nIHNsZWVwaW5nIHdhaXRsb2NrcyB3aGlsZSBob2xkaW5nIHJhdyBzcGlubG9ja3MgKHN1Y2ggYXMgdGFza19zdHJ1Y3Q6OnBpX2xvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIHJlY2xhaW1pbmcgcGF0aHMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAwOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIGxvZ2ljIGluIHNsYWIvc2x1YiAobW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jKSB0byBieXBhc3MgdGhlIHNoZWF2ZXMgbGF5ZXIgaW4ga3ZmcmVlX2NhbGxfcmN1KCkgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBhdm9pZGluZyBsb2NrIG5lc3RpbmcgaXNzdWVzIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgcmF3IHNwaW5sb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDA6MTU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCBiMTliYTFiMzE0ODRjLi43MjIzYTc1OTZkYWJiIDEwMDY0NAotLS0gYS9tbS9zbGFiX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsYWJfY29tbW9uLmMKQEAgLTE2NjcsMTQgJiM0MzsxNjY3LDYgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAlzdHJ1Y3Qgc2xhYiAqc2xhYjsKLQl1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUOwotCi0JLyoKLQkgKiBJdCBpcyBub3Qgc2FmZSB0byBzcGluIG9uIFBSRUVNUFRfUlQgYmVjYXVzZSB0aGUga2VybmVsIG1pZ2h0IGJlCi0JICogaG9sZGluZyBhIHJhdyBzcGlubG9jayBhbmQgc2xhYiBhY3F1aXJlcyBzbGVlcGluZyBsb2Nrcy4KLQkgKi8KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpCi0JCWZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLOwogCiAJaWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xNjg1LDcgJiM0MzsxNjc3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iaikKIAogCXMgPSBzbGFiLSZndDtzbGFiX2NhY2hlOwogCWlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKQotCQlyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBmcmVlX2ZsYWdzKTsKJiM0MzsJCXJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTIwMzQsNyAmIzQzOzIwMjYsMTMgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKQogCWlmICghaGVhZCkKIAkJbWlnaHRfc2xlZXAoKTsKIAotCWlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSkKJiM0MzsJLyoKJiM0MzsJICoga3ZmcmVlX3JjdSgpIGlzIGNhbGxlZCBieSBzZXRfY3B1c19hbGxvd2VkX2ZvcmNlKCkgd2l0aAomIzQzOwkgKiB0YXNrX3N0cnVjdDo6cGlfbG9jayBhY3F1aXJlZC4gT24gUFJFRU1QVF9SVCB0aGUgbG9jYWxfdHJ5bG9jaygpCiYjNDM7CSAqIHVzYWdlIGJlbG93IHdpbGwgYWNxdWlyZSB0aGUgd2FpdGxvY2sgd2hpY2ggbXVzdCBiZSBhdm9pZGVkLgomIzQzOwkgKiBUaGVyZWZvcmUgYXZvaWQgaXQgb24gUFJFRU1QVF9SVC4KJiM0MzsJICovCiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgJmFtcDsmYW1wOyBrZnJlZV9yY3Vfc2hlYWYocHRyKSkKIAkJcmV0dXJuOwogCiAJLy8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJiMzOTt0IHlldCBzY2hlZHVsZSB0aGUgYmF0Y2guCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjliNTZjYjQzOWU3MC4uN2E3ZTkwNmEwZTQ0ZCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtNjA4OCw4ICYjNDM7NjA4OCw5IEBAIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIC8qCiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2UKICAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLAotICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHMKLSAqIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0sgb24gUFJFRU1QVF9SVC4KJiM0MzsgKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpCiYjNDM7ICogYXZvaWRzIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0suIGt2ZnJlZV9jYWxsX3JjdSgpIGlzCiYjNDM7ICogYnlwYXNzaW5nIHRoZSBzaGVhdmVzIGxheWVyIGNvbXBsZXRlbHkgb24gUFJFRU1QVF9SVC4KICAqCiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190CiAgKiB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190LCBldmVuIG9uICFQUkVFTVBUX1JUIHdoZXJlIHNwaW5sb2NrX3QgaXMgYQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTbGFiL1NsdWIgUkNVIEZyZWVpbmcgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBoZXJlLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIGhvdyBga2ZyZWVfcmN1X3NoZWFmKClgIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBsb2NraW5nIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBpbiBhIFBSRUVNUFRfUlQgZW52aXJvbm1lbnQuICBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjaGVjayB0byBzZXQgYGZyZWVfZmxhZ3NgIHRvIGBTTEFCX0ZSRUVfTk9MT0NLYCBpZiBgQ09ORklHX1BSRUVNUFRfUlRgIHdhcyBlbmFibGVkLiBUaGlzIHdhcyB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBuZXN0aW5nIGlzc3VlcyBiZWNhdXNlIGBfX2tmcmVlX3JjdV9zaGVhZigpYCBtaWdodCBhY3F1aXJlIHNsZWVwaW5nIGxvY2tzIHdoaWxlIHJhdyBzcGlubG9ja3MgYXJlIGhlbGQuCgpOb3csIGl0IGxvb2tzIGxpa2UgdGhhdCBjb25kaXRpb25hbCBmbGFnIHNldHRpbmcgaGFzIGJlZW4gcmVtb3ZlZCB3aXRoaW4gdGhlIGBrZnJlZV9yY3Vfc2hlYWZgIGZ1bmN0aW9uIGl0c2VsZi4gSW5zdGVhZCwgaXQmIzM5O3MgYnlwYXNzZWQgaW4gYGt2ZnJlZV9jYWxsX3JjdSgpYC4gVGhlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjYWxsIGBrZnJlZV9yY3Vfc2hlYWYoKWAgYXQgYWxsLiAgRXNzZW50aWFsbHksIG9uIFBSRUVNUFRfUlQsIHdlJiMzOTtyZSBza2lwcGluZyB0aGUgc2hlYWYgY2FjaGluZyBsYXllciBlbnRpcmVseS4gVGhpcyBpcyBsaWtlbHkgdGhlIHByZWZlcnJlZCBzb2x1dGlvbiwgYXMgaXQgZW5zdXJlcyB3ZSBhdm9pZCB0aGUgcmF3IHNwaW5sb2NrIGlzc3VlIHdoZXJlIGEgcHJlZW1wdGlibGUgc3BpbmxvY2sgbWlnaHQgYmUgYWNxdWlyZWQsIGFzIGRlc2NyaWJlZCBieSB0aGUgY29tbWVudCBpbiBgc2x1Yi5jYC4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBhIG5lY2Vzc2FyeSBtZWFzdXJlIGZvciBsb2NrIG5lc3Rpbmcgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBlc3BlY2lhbGx5IHdpdGggdGhlIGBwaV9sb2NrYCBpbiBgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpYC4KCkkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25jZXJucy4gIE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdW5pbml0aWFsaXplZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLCBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBoYW5kbGluZyBvciBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIG5vIG9idmlvdXMgbmV3IHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBwb2ludGVyIHJlYWRzL3dyaXRlcy4gVGhpcyBpcyBwdXJlbHkgYSByZS1hcnJhbmdlbWVudCBvZiBsb2NraW5nIGxvZ2ljIGZvciBSQ1UgZnJlZWluZyBhbmQgdGhlIHNsYWIvc2x1YiBsYXllci4KCkkgd2lsbCBzdGlsbCB3YW50IHRvIHBlcmZvcm0gYSBkZWVwZXIgYW5hbHlzaXMgd2l0aCB0b29scyBsaWtlIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgdG8gYmUgY2VydGFpbiBJIGhhdmUgY292ZXJlZCBhbGwgdGhlIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgYXQgZmlyc3QgZ2xhbmNlLCBJIHdvdWxkIGNvbnNpZGVyIHRoaXMgYSBzYWZlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9yY3Vfc2hlYWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYi5oLTQ4MC1cbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XG5tbS9zbGFiLmgtNDgyLXZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXG4tLVxubW0vc2xhYl9jb21tb24uYy0xMzE1LVxubW0vc2xhYl9jb21tb24uYzoxMzE2Olx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVx1MDAzZXNsYWJfY2FjaGUsIHB0ciwgU0xBQl9GUkVFX05PTE9DSykpKVxubW0vc2xhYl9jb21tb24uYy0xMzE3LVx0XHRnb3RvIGZhbGxiYWNrO1xuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTYyMj1zdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxubW0vc2xhYl9jb21tb24uYzoxNjY2OnN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXG5tbS9zbGFiX2NvbW1vbi5jLTE2Njcte1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxubW0vc2xhYl9jb21tb24uYzoxNjgwOlx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXG4tLVxubW0vc2xhYl9jb21tb24uYz0yMDEzPXZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzQtXHQgKi9cbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxubW0vc2xhYl9jb21tb24uYy0yMDM2LVx0XHRyZXR1cm47XG4tLVxubW0vc2x1Yi5jPTQxNDg9dm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNDE2MC1cdFx0ICogd2UgZG9uJiMzOTt0IGNoZWNrIGlmIHJjdV9mcmVlIHNoZWFmIGV4aXN0cyAtIHJhY2luZ1xubW0vc2x1Yi5jOjQxNjE6XHRcdCAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWlnaHQgaGF2ZSBqdXN0IHJlbW92ZWQgaXQuXG5tbS9zbHViLmMtNDE2Mi1cdFx0ICogYnkgZXhlY3V0aW5nIGZsdXNoX3JjdV9zaGVhZigpIG9uIHRoZSBjcHUgd2UgbWFrZVxubW0vc2x1Yi5jOjQxNjM6XHRcdCAqIHN1cmUgdGhlIF9fa2ZyZWVfcmN1X3NoZWFmKCkgZmluaXNoZWQgaXRzIGNhbGxfcmN1KClcbm1tL3NsdWIuYy00MTY0LVx0XHQgKi9cbi0tXG5tbS9zbHViLmM9NjAzMT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubW0vc2x1Yi5jLTYwODktICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG5tbS9zbHViLmM6NjA5MDogKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcbm1tL3NsdWIuYy02MDkxLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbi0tXG5tbS9zbHViLmMtNjEwMC0gKi9cbm1tL3NsdWIuYzo2MTAxOnN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xubW0vc2x1Yi5jLTYxMDItXG5tbS9zbHViLmM6NjEwMzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxubW0vc2x1Yi5jLTYxMDQte1xuLS1cbm1tL3NsdWIuYy02MTExLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbm1tL3NsdWIuYzo2MTEyOlx0XHRsb2NrX21hcF9hY3F1aXJlX3RyeShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbm1tL3NsdWIuYy02MTEzLVxuLS1cbm1tL3NsdWIuYy02MjExLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbm1tL3NsdWIuYzo2MjEyOlx0XHRsb2NrX21hcF9yZWxlYXNlKFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xubW0vc2x1Yi5jLTYyMTMtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9zbHViLmMtNjIxNy1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG5tbS9zbHViLmM6NjIxODpcdFx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcbm1tL3NsdWIuYy02MjE5LVx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQ2CgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqUkNVIERlYWxsb2NhdGlvbiBDaGFuZ2VzIC0gQXNzZXNzaW5nIHRoZSBSaXNrKioKCkFscmlnaHQsIHNvIHRoZSBtb2RpZmljYXRpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0IGFyZSAqc3BlY2lmaWNhbGx5KiBjZW50ZXJlZCBvbiBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc2xhYiBhbmQgc2x1YiBhbGxvY2F0b3JzLCBhbmQgdGhleSYjMzk7cmUgdGllZCB0byB0aGUgbG9ja2luZyBjb25zdHJhaW50cyB0aGF0IFBSRUVNUFRfUlQga2VybmVscyBpbXBvc2UuIEdvb2QuIEZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4KClRoZSBpbW1lZGlhdGUgcmVsaWVmIGlzIHRoYXQgdGhlcmUmIzM5O3MgKnplcm8qIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoYXQmIzM5O3MgYSBodWdlIHdpbiDigJMgaXQgcmVtb3ZlcyBhIGNsYXNzIG9mIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCYjMzk7cyBnb2luZyB0byBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCBhbnkgdXNlci1zcGFjZSBleHBvc3VyZSBvZiBrZXJuZWwgaW50ZXJuYWxzLCB3aGljaCBrZWVwcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBteSByZWFsIGZvY3VzIHNoaWZ0cyB0byBtZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBjb25jZXJucy4gVGhhbmtmdWxseSwgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGxvY2tpbmcgZXJyb3JzIHRoYXQgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIHdpdGhpbiBzbGFiL3NsdWIuIFRoYXQmIzM5O3MgZmFudGFzdGljLiBUaGF0IGtpbmQgb2YgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGNvdmVyYWdlIHJlYWxseSBidWlsZHMgbXkgY29uZmlkZW5jZS4gSSB0aGluayB3ZeKAmXJlIHdlbGwgcG9zaXRpb25lZCB0byBjYXRjaCBhbnkgZXJyb3JzIGhlcmUuCgpHaXZlbiB0aGUgZXhpc3RpbmcgdGVzdCBpbmZyYXN0cnVjdHVyZSwgaXQgbWVhbnMgdGhhdCBLTVNBTiwgd2hpbGUgdXNlZnVsIGluIHNvbWUgb3RoZXIgYXJlYXMsIGlzIG5vdCByZWFsbHkgbmVlZGVkIGhlcmUuIEtBU0FOIGlzIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIG9uIHRoZSBtZW1vcnkgZnJvbnQsIGFuZCBMT0NLREVQIGVuc3VyZXMgdGhlIGxvY2tpbmcgc2VtYW50aWNzIGFyZSBzb3VuZC4KClRoZXJlZm9yZSwgbGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgYW5kIHByb2NlZWQgd2l0aCBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIGxvZ2ljIGluIHNsYWIvc2x1YiAobW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jKSB0byBieXBhc3MgdGhlIHNoZWF2ZXMgbGF5ZXIgaW4ga3ZmcmVlX2NhbGxfcmN1KCkgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBhdm9pZGluZyBsb2NrIG5lc3RpbmcgaXNzdWVzIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgcmF3IHNwaW5sb2Nrcy5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJDVSBzaGVhZiBkZWFsbG9jYXRpb24gbG9naWMgaW4gc2xhYi9zbHViIChtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMpIHRvIGJ5cGFzcyB0aGUgc2hlYXZlcyBsYXllciBpbiBrdmZyZWVfY2FsbF9yY3UoKSBvbiBQUkVFTVBUX1JUIGtlcm5lbHMsIGF2b2lkaW5nIGxvY2sgbmVzdGluZyBpc3N1ZXMgd2l0aCBzbGVlcGluZyBsb2NrcyB1bmRlciByYXcgc3BpbmxvY2tzLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzbGFiIG1lbW9yeSBmcmVlaW5nIHBhdGhzIGFuZCBQUkVFTVBUX1JUIGxvY2sgY29uc3RyYWludHMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBkZWFkbG9jayBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozMy4yMDczNTI5NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MjA4NTA2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZGUkVFX1JDVV9CQVRDSEVEXCIsXG4gICAgXCJQUkVFTVBUX1JUXCIsXG4gICAgXCJFWFBFUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2tmcmVlX3JjdV9zaGVhZlwiLFxuICAgIFwia2ZyZWVfY2FsbF9yY3Vfbm9sb2NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIGxvZ2ljIGluIHNsYWIvc2x1YiAobW0vc2xhYl9jb21tb24uYyBhbmQgbW0vc2x1Yi5jKSB0byBieXBhc3MgdGhlIHNoZWF2ZXMgbGF5ZXIgaW4ga3ZmcmVlX2NhbGxfcmN1KCkgb24gUFJFRU1QVF9SVCBrZXJuZWxzLCBhdm9pZGluZyBsb2NrIG5lc3RpbmcgaXNzdWVzIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgcmF3IHNwaW5sb2Nrcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBzbGFiIG1lbW9yeSBmcmVlaW5nIHBhdGhzIGFuZCBQUkVFTVBUX1JUIGxvY2sgY29uc3RyYWludHMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3BpZXMgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgbG9ja2luZyBkZWFkbG9jayBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvcidzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6MzMuMjA3MzU3NzExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1ODQzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAwOjE1OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXFxuaW5kZXggYjE5YmExYjMxNDg0Yy4uNzIyM2E3NTk2ZGFiYiAxMDA2NDRcXG4tLS0gYS9tbS9zbGFiX2NvbW1vbi5jXFxuKysrIGIvbW0vc2xhYl9jb21tb24uY1xcbkBAIC0xNjY3LDE0ICsxNjY3LDYgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4gXFx0c3RydWN0IHNsYWIgKnNsYWI7XFxuLVxcdHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzID0gU0xBQl9GUkVFX0RFRkFVTFQ7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJdCBpcyBub3Qgc2FmZSB0byBzcGluIG9uIFBSRUVNUFRfUlQgYmVjYXVzZSB0aGUga2VybmVsIG1pZ2h0IGJlXFxuLVxcdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXFxuLVxcdCAqL1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuLVxcdFxcdGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLO1xcbiBcXG4gXFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTE2ODUsNyArMTY3Nyw3IEBAIHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxuIFxcbiBcXHRzID0gc2xhYi1cXHUwMDNlc2xhYl9jYWNoZTtcXG4gXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxuLVxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIGZyZWVfZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMjAzNCw3ICsyMDI2LDEzIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4gXFx0aWYgKCFoZWFkKVxcbiBcXHRcXHRtaWdodF9zbGVlcCgpO1xcbiBcXG4tXFx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbitcXHQvKlxcbitcXHQgKiBrdmZyZWVfcmN1KCkgaXMgY2FsbGVkIGJ5IHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSB3aXRoXFxuK1xcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcXG4rXFx0ICogdXNhZ2UgYmVsb3cgd2lsbCBhY3F1aXJlIHRoZSB3YWl0bG9jayB3aGljaCBtdXN0IGJlIGF2b2lkZWQuXFxuK1xcdCAqIFRoZXJlZm9yZSBhdm9pZCBpdCBvbiBQUkVFTVBUX1JULlxcbitcXHQgKi9cXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJ3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggZjliNTZjYjQzOWU3MC4uN2E3ZTkwNmEwZTQ0ZCAxMDA2NDRcXG4tLS0gYS9tbS9zbHViLmNcXG4rKysgYi9tbS9zbHViLmNcXG5AQCAtNjA4OCw4ICs2MDg4LDkgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiAvKlxcbiAgKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxuLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzXFxuLSAqIHRoaXMgcHJvYmxlbSBieSBwYXNzaW5nIFNMQUJfRlJFRV9OT0xPQ0sgb24gUFJFRU1QVF9SVC5cXG4rICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbisgKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcXG4rICogYnlwYXNzaW5nIHRoZSBzaGVhdmVzIGxheWVyIGNvbXBsZXRlbHkgb24gUFJFRU1QVF9SVC5cXG4gICpcXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxcbiAgKiB3aGlsZSBob2xkaW5nIHJhd19zcGlubG9ja190LCBldmVuIG9uICFQUkVFTVBUX1JUIHdoZXJlIHNwaW5sb2NrX3QgaXMgYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozNC43MTM4MjQyNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkxODAwOTI0ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiLFxuICAgIFwiUFJFRU1QVF9SVFwiLFxuICAgIFwiRVhQRVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rZnJlZV9yY3Vfc2hlYWZcIixcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvcidzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTdmMzlhZDBkY2VhNDMwZDY3YzEzODAxZGZkMGY5NWNmZjZjYzk3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDA6MTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uY1xuaW5kZXggYjE5YmExYjMxNDg0Yy4uNzIyM2E3NTk2ZGFiYiAxMDA2NDRcbi0tLSBhL21tL3NsYWJfY29tbW9uLmNcbisrKyBiL21tL3NsYWJfY29tbW9uLmNcbkBAIC0xNjY3LDE0ICsxNjY3LDYgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbiB7XG4gXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcbiBcdHN0cnVjdCBzbGFiICpzbGFiO1xuLVx0dW5zaWduZWQgaW50IGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfREVGQVVMVDtcbi1cbi1cdC8qXG4tXHQgKiBJdCBpcyBub3Qgc2FmZSB0byBzcGluIG9uIFBSRUVNUFRfUlQgYmVjYXVzZSB0aGUga2VybmVsIG1pZ2h0IGJlXG4tXHQgKiBob2xkaW5nIGEgcmF3IHNwaW5sb2NrIGFuZCBzbGFiIGFjcXVpcmVzIHNsZWVwaW5nIGxvY2tzLlxuLVx0ICovXG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4tXHRcdGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLO1xuIFxuIFx0aWYgKGlzX3ZtYWxsb2NfYWRkcihvYmopKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTY4NSw3ICsxNjc3LDcgQEAgc3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcbiBcbiBcdHMgPSBzbGFiLVx1MDAzZXNsYWJfY2FjaGU7XG4gXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcbi1cdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgZnJlZV9mbGFncyk7XG4rXHRcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMjAzNCw3ICsyMDI2LDEzIEBAIHZvaWQga3ZmcmVlX2NhbGxfcmN1KHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcbiBcdGlmICghaGVhZClcbiBcdFx0bWlnaHRfc2xlZXAoKTtcbiBcbi1cdGlmIChrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbitcdC8qXG4rXHQgKiBrdmZyZWVfcmN1KCkgaXMgY2FsbGVkIGJ5IHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSB3aXRoXG4rXHQgKiB0YXNrX3N0cnVjdDo6cGlfbG9jayBhY3F1aXJlZC4gT24gUFJFRU1QVF9SVCB0aGUgbG9jYWxfdHJ5bG9jaygpXG4rXHQgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC5cbitcdCAqIFRoZXJlZm9yZSBhdm9pZCBpdCBvbiBQUkVFTVBUX1JULlxuK1x0ICovXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFx1MDAyNlx1MDAyNiBrZnJlZV9yY3Vfc2hlYWYocHRyKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Ly8gUXVldWUgdGhlIG9iamVjdCBidXQgZG9uJ3QgeWV0IHNjaGVkdWxlIHRoZSBiYXRjaC5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IGY5YjU2Y2I0MzllNzAuLjdhN2U5MDZhMGU0NGQgMTAwNjQ0XG4tLS0gYS9tbS9zbHViLmNcbisrKyBiL21tL3NsdWIuY1xuQEAgLTYwODgsOCArNjA4OCw5IEBAIHN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAvKlxuICAqIGt2ZnJlZV9jYWxsX3JjdSgpIGNhbiBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHJhd19zcGlubG9ja190LiBTaW5jZVxuICAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxuLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga3ZmcmVlX2NhbGxfcmN1KCkgYXZvaWRzXG4tICogdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSyBvbiBQUkVFTVBUX1JULlxuKyAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcbisgKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcbisgKiBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgY29tcGxldGVseSBvbiBQUkVFTVBUX1JULlxuICAqXG4gICogSG93ZXZlciwgbG9ja2RlcCBzdGlsbCBjb21wbGFpbnMgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIGFjcXVpcmUgc3BpbmxvY2tfdFxuICAqIHdoaWxlIGhvbGRpbmcgcmF3X3NwaW5sb2NrX3QsIGV2ZW4gb24gIVBSRUVNUFRfUlQgd2hlcmUgc3BpbmxvY2tfdCBpcyBhXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozNC43MTM4MjU2MDdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDc4NDkzNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGtmcmVlX3JjdSBhbmQgUFJFRU1QVF9SVCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgZGlmZiBoaXRzIGBtbS9zbGFiX2NvbW1vbi5jYCBhbmQgYG1tL3NsdWIuY2AsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIHNsYWIgYWxsb2NhdG9yLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBtb2RpZmllcyBga2ZyZWVfcmN1X3NoZWFmKClgIGluIGBtbS9zbGFiX2NvbW1vbi5jYC4gSSBzZWUgdGhleSd2ZSByZW1vdmVkIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGBmcmVlX2ZsYWdzYCBiYXNlZCBvbiBgQ09ORklHX1BSRUVNUFRfUlRgLiBQcmV2aW91c2x5LCBpZiBQUkVFTVBUX1JUIHdhcyBlbmFibGVkLCBpdCB3b3VsZCBzZXQgYGZyZWVfZmxhZ3MgPSBTTEFCX0ZSRUVfTk9MT0NLYC4gTm93LCBpdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBgU0xBQl9GUkVFX0RFRkFVTFRgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSBhcmUgZWxpbWluYXRpbmcgdGhhdCBjb25kaXRpb25hbCBsb2dpYy4gSSBhc3N1bWUgdGhpcyBjaGFuZ2UgaXMgYmVpbmcgbWFkZSB0byBmaXggYSBsb2NraW5nIGlzc3VlLCBvciBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuXG5UaGUgb3RoZXIgY2hhbmdlIGluIGBtbS9zbGFiX2NvbW1vbi5jYCBpcyBpbiBga3ZmcmVlX2NhbGxfcmN1KClgLiBUaGVyZSdzIGEgY2hlY2sgdGhhdCB1c2VzIGBrZnJlZV9yY3Vfc2hlYWYoKWAgYW5kIGlmIGBDT05GSUdfUFJFRU1QVF9SVGAgaXMgbm90IGVuYWJsZWQsIHRoZW4gaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSByY3UgbWVjaGFuaXNtLiBQcmV2aW91c2x5LCBga3ZmcmVlX2NhbGxfcmN1KClgIHdhcyB1c2luZyB0aGUgYGxvY2FsX3RyeWxvY2soKWAgY2FsbCBpbiBjb25qdW5jdGlvbiB3aXRoIGB0YXNrX3N0cnVjdDo6cGlfbG9ja2AgYW5kIHRoZSBuZXcgY29kZSBzZWVtcyB0byBhdm9pZCB0aGUgbG9jYWxfdHJ5bG9jayBjYWxsLiBJJ20gZ3Vlc3NpbmcgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGhhZCBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyBvciBjb250ZW50aW9uIGlzc3VlIG9uIFBSRUVNUFRfUlQgc3lzdGVtcyB3aGVuIGB0YXNrX3N0cnVjdDo6cGlfbG9ja2Agd2FzIGhlbGQsIGJlY2F1c2Ugb2YgdGhlIGB3YWl0bG9ja2AgbG9jayB0aGF0J3MgdXNlZCBieSB0aGUgYGxvY2FsX3RyeWxvY2soKWAgY2FsbCBpbiBga2ZyZWVfcmN1X3NoZWFmKClgLiBUaGUgY29tbWVudHMgc3VwcG9ydCB0aGlzLlxuXG5JbiBgbW0vc2x1Yi5jYCwgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gY29tbWVudHMsIHByb2JhYmx5IHRvIHByb3ZpZGUgY29udGV4dCBhcm91bmQgdGhlIGNoYW5nZXMgaW4gYG1tL3NsYWJfY29tbW9uLmNgLlxuXG5JIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZSByZWFzb25zIGJlaGluZCB0aGlzIHBhdGNoLCBidXQgaXQgc2VlbXMgbGlrZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbG9ja2luZyBwcm9ibGVtIG9uIFBSRUVNUFRfUlQgc3lzdGVtcyB3aGVuIGZyZWVpbmcgc2xhYiBvYmplY3RzIHZpYSBSQ1UuIEknbGwgbmVlZCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGJ5IGxvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIGluY2x1ZGluZyB0aGUgcG9zc2libGUgbG9jayBkZXBlbmRlbmN5IGdyYXBocyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzAsIk91dHB1dFRva2VucyI6NzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTozOS43OTIzMjU1NzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc2xhYl9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjYwOlxcdFxcdCAqIFRoaXMgbGlzdCBpcyBuYW1lZCBcXFwiQ2hhbm5lbCAzXFxcIi5cXG4xNjYxOlxcdFxcdCAqL1xcbjE2NjI6XFx0XFx0aWYgKGhlYWQgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT05fT05DRSghcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3VfZnVsbChcXHUwMDI2aGVhZF9ncF9zbmFwKSkpXFxuMTY2MzpcXHRcXHRcXHRrdmZyZWVfcmN1X2xpc3QoaGVhZCk7XFxuMTY2NDpcXHR9XFxuMTY2NTpcXHRcXG4xNjY2OlxcdHN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxuMTY2NzpcXHR7XFxuMTY2ODpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG4xNjY5OlxcdFxcdHN0cnVjdCBzbGFiICpzbGFiO1xcbjE2NzA6XFx0XFxuMTY3MTpcXHRcXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXFxuMTY3MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTY3MzpcXHRcXG4xNjc0OlxcdFxcdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcXG4xNjc1OlxcdFxcdGlmICh1bmxpa2VseSghc2xhYikpXFxuMTY3NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTY3NzpcXHRcXG4xNjc4OlxcdFxcdHMgPSBzbGFiLVxcdTAwM2VzbGFiX2NhY2hlO1xcbjE2Nzk6XFx0XFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxuMTY4MDpcXHRcXHRcXHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxuMTY4MTpcXHRcXG4xNjgyOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xNjgzOlxcdH1cXG4xNjg0OlxcdFxcbjE2ODU6XFx0c3RhdGljIGJvb2xcXG4xNjg2OlxcdG5lZWRfb2ZmbG9hZF9rcmMoc3RydWN0IGtmcmVlX3JjdV9jcHUgKmtyY3ApXFxuMTY4NzpcXHR7XFxuMTY4ODpcXHRcXHRpbnQgaTtcXG4xNjg5OlxcdFxcbjE2OTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZSRUVfTl9DSEFOTkVMUzsgaSsrKVxcbjE2OTE6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZrcmNwLVxcdTAwM2VidWxrX2hlYWRbaV0pKVxcbjE2OTI6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTY5MzpcXHRcXG4xNjk0OlxcdFxcdHJldHVybiAhIVJFQURfT05DRShrcmNwLVxcdTAwM2VoZWFkKTtcXG4xNjk1OlxcdH1cXG4xNjk2OlxcdFxcbjE2OTc6XFx0c3RhdGljIGJvb2xcXG4xNjk4OlxcdG5lZWRfd2FpdF9mb3Jfa3J3cF93b3JrKHN0cnVjdCBrZnJlZV9yY3VfY3B1X3dvcmsgKmtyd3ApXFxuMTY5OTpcXHR7XFxuMTcwMDpcXHRcXHRpbnQgaTtcXG4xNzAxOlxcdFxcbjE3MDI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEZSRUVfTl9DSEFOTkVMUzsgaSsrKVxcbjE3MDM6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZrcndwLVxcdTAwM2VidWxrX2hlYWRfZnJlZVtpXSkpXFxuMTcwNDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNzA1OlxcdFxcbjE3MDY6XFx0XFx0cmV0dXJuICEha3J3cC1cXHUwMDNlaGVhZF9mcmVlO1xcbjE3MDc6XFx0fVxcbjE3MDg6XFx0XFxuMTcwOTpcXHRzdGF0aWMgaW50IGtyY19jb3VudChzdHJ1Y3Qga2ZyZWVfcmN1X2NwdSAqa3JjcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6MzkuNzkyNTA2NTE3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsYWJfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHQgKiBQbGVhc2Ugbm90ZSB0aGVyZSBpcyBhIGxpbWl0YXRpb24gZm9yIHRoZSBoZWFkLWxlc3NcXG4yMDIxOlxcdFxcdCAqIHZhcmlhbnQsIHRoYXQgaXMgd2h5IHRoZXJlIGlzIGEgY2xlYXIgcnVsZSBmb3Igc3VjaFxcbjIwMjI6XFx0XFx0ICogb2JqZWN0czogaXQgY2FuIGJlIHVzZWQgZnJvbSBtaWdodF9zbGVlcCgpIGNvbnRleHRcXG4yMDIzOlxcdFxcdCAqIG9ubHkuIEZvciBvdGhlciBwbGFjZXMgcGxlYXNlIGVtYmVkIGFuIHJjdV9oZWFkIHRvXFxuMjAyNDpcXHRcXHQgKiB5b3VyIGRhdGEuXFxuMjAyNTpcXHRcXHQgKi9cXG4yMDI2OlxcdFxcdGlmICghaGVhZClcXG4yMDI3OlxcdFxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMjAyODpcXHRcXG4yMDI5OlxcdFxcdC8qXFxuMjAzMDpcXHRcXHQgKiBrdmZyZWVfcmN1KCkgaXMgY2FsbGVkIGJ5IHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKSB3aXRoXFxuMjAzMTpcXHRcXHQgKiB0YXNrX3N0cnVjdDo6cGlfbG9jayBhY3F1aXJlZC4gT24gUFJFRU1QVF9SVCB0aGUgbG9jYWxfdHJ5bG9jaygpXFxuMjAzMjpcXHRcXHQgKiB1c2FnZSBiZWxvdyB3aWxsIGFjcXVpcmUgdGhlIHdhaXRsb2NrIHdoaWNoIG11c3QgYmUgYXZvaWRlZC5cXG4yMDMzOlxcdFxcdCAqIFRoZXJlZm9yZSBhdm9pZCBpdCBvbiBQUkVFTVBUX1JULlxcbjIwMzQ6XFx0XFx0ICovXFxuMjAzNTpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbjIwMzY6XFx0XFx0XFx0cmV0dXJuO1xcbjIwMzc6XFx0XFxuMjAzODpcXHRcXHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24ndCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxcbjIwMzk6XFx0XFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHB0cikpIHtcXG4yMDQwOlxcdFxcdFxcdC8vIFByb2JhYmxlIGRvdWJsZSBrZnJlZV9yY3UoKSwganVzdCBsZWFrLlxcbjIwNDE6XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCIlcygpOiBEb3VibGUtZnJlZWQgY2FsbC4gcmN1X2hlYWQgJXBcXFxcblxcXCIsXFxuMjA0MjpcXHRcXHRcXHRcXHQgIF9fZnVuY19fLCBoZWFkKTtcXG4yMDQzOlxcdFxcbjIwNDQ6XFx0XFx0XFx0Ly8gTWFyayBhcyBzdWNjZXNzIGFuZCBsZWF2ZS5cXG4yMDQ1OlxcdFxcdFxcdHJldHVybjtcXG4yMDQ2OlxcdFxcdH1cXG4yMDQ3OlxcdFxcbjIwNDg6XFx0XFx0a2FzYW5fcmVjb3JkX2F1eF9zdGFjayhwdHIpO1xcbjIwNDk6XFx0XFx0c3VjY2VzcyA9IGFkZF9wdHJfdG9fYnVsa19rcmNfbG9jayhcXHUwMDI2a3JjcCwgXFx1MDAyNmZsYWdzLCBwdHIsICFoZWFkKTtcXG4yMDUwOlxcdFxcdGlmICghc3VjY2Vzcykge1xcbjIwNTE6XFx0XFx0XFx0cnVuX3BhZ2VfY2FjaGVfd29ya2VyKGtyY3ApO1xcbjIwNTI6XFx0XFxuMjA1MzpcXHRcXHRcXHRpZiAoaGVhZCA9PSBOVUxMKVxcbjIwNTQ6XFx0XFx0XFx0XFx0Ly8gSW5saW5lIGlmIGt2ZnJlZV9yY3Uob25lX2FyZykgY2FsbC5cXG4yMDU1OlxcdFxcdFxcdFxcdGdvdG8gdW5sb2NrX3JldHVybjtcXG4yMDU2OlxcdFxcbjIwNTc6XFx0XFx0XFx0aGVhZC1cXHUwMDNlbmV4dCA9IGtyY3AtXFx1MDAzZWhlYWQ7XFxuMjA1ODpcXHRcXHRcXHRXUklURV9PTkNFKGtyY3AtXFx1MDAzZWhlYWQsIGhlYWQpO1xcbjIwNTk6XFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2a3JjcC1cXHUwMDNlaGVhZF9jb3VudCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE1OjM5Ljc5MjYzNjk3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDIzMjE1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBfX2tmcmVlX3JjdV9zaGVhZmAgaW4gbW0vc2x1Yi5jKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBfX2tmcmVlX3JjdV9zaGVhZmAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGluIGBtbS9zbHViLmNgLCBzbyBpdCdzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIFNMVUIgYWxsb2NhdG9yLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBkZWFscyB3aXRoIGZyZWVpbmcgb2JqZWN0cyBpbiBhIGRlbGF5ZWQgb3IgUkNVLXNhZmUgbWFubmVyLiBUaGUgbmFtZSBcInNoZWFmXCIgc3VnZ2VzdHMgYSBncm91cGluZyBvciBjb2xsZWN0aW9uIG9mIG9iamVjdHMgYmVpbmcgaGFuZGxlZCB0b2dldGhlciwgbGlrZWx5IHRvIGltcHJvdmUgZWZmaWNpZW5jeSBvciBhdG9taWMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFJDVSBtZWNoYW5pc20gdG8gZW5zdXJlIHNhZmUgY29uY3VycmVudCBtZW1vcnkgZGVhbGxvY2F0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBob3cgaXQgYWRkcyBmcmVlZCBvYmplY3RzIHRvIHNvbWUgUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZSBhbmQgaG93IHRoZSBhY3R1YWwgZnJlZWluZyBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciB0aGUgZ3JhY2UgcGVyaW9kLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZCBhbmQgaG93IGl0IGRlYWxzIHdpdGggTlVNQSBjb25zaWRlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB3ZSdyZSBmcmVlaW5nIG9iamVjdHMgdGhhdCBtaWdodCBiZSBzY2F0dGVyZWQgYWNyb3NzIGRpZmZlcmVudCBtZW1vcnkgbm9kZXMuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGhvbGQgdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NDIuNDk0OTYxMTEzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODU1MjI2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rZnJlZV9yY3Vfc2hlYWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiLmgtNDgwLVxcbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XFxubW0vc2xhYi5oLTQ4Mi12b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXFxubW0vc2xhYl9jb21tb24uYzoxMzE2OlxcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXFxubW0vc2xhYl9jb21tb24uYy0xMzE3LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE2NjY9c3RhdGljIGJvb2wga2ZyZWVfcmN1X3NoZWFmKHZvaWQgKm9iailcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XFx0XFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cXG4tLVxcbm1tL3NsdWIuYz00MTQ4PXZvaWQgZmx1c2hfcmN1X3NoZWF2ZXNfb25fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNDE2MC1cXHRcXHQgKiB3ZSBkb24ndCBjaGVjayBpZiByY3VfZnJlZSBzaGVhZiBleGlzdHMgLSByYWNpbmdcXG5tbS9zbHViLmM6NDE2MTpcXHRcXHQgKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1pZ2h0IGhhdmUganVzdCByZW1vdmVkIGl0Llxcbm1tL3NsdWIuYy00MTYyLVxcdFxcdCAqIGJ5IGV4ZWN1dGluZyBmbHVzaF9yY3Vfc2hlYWYoKSBvbiB0aGUgY3B1IHdlIG1ha2VcXG5tbS9zbHViLmM6NDE2MzpcXHRcXHQgKiBzdXJlIHRoZSBfX2tmcmVlX3JjdV9zaGVhZigpIGZpbmlzaGVkIGl0cyBjYWxsX3JjdSgpXFxubW0vc2x1Yi5jLTQxNjQtXFx0XFx0ICovXFxuLS1cXG5tbS9zbHViLmM9NjAzMT1zdGF0aWMgdm9pZCByY3VfZnJlZV9zaGVhZihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjA4OS0gKiBrdmZyZWVfY2FsbF9yY3UoKSBjYW4gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSByYXdfc3BpbmxvY2tfdC4gU2luY2VcXG5tbS9zbHViLmM6NjA5MDogKiBfX2tmcmVlX3JjdV9zaGVhZigpIG1heSBhY3F1aXJlIGEgc3BpbmxvY2tfdCAoc2xlZXBpbmcgbG9jayBvbiBQUkVFTVBUX1JUKSxcXG5tbS9zbHViLmMtNjA5MS0gKiB0aGlzIHdvdWxkIHZpb2xhdGUgbG9jayBuZXN0aW5nIHJ1bGVzLiBUaGVyZWZvcmUsIGtmcmVlX2NhbGxfcmN1X25vbG9jaygpXFxuLS1cXG5tbS9zbHViLmM9NjEwMT1zdGF0aWMgREVGSU5FX1dBSVRfT1ZFUlJJREVfTUFQKGtmcmVlX3JjdV9zaGVhZl9tYXAsIExEX1dBSVRfQ09ORklHKTtcXG5tbS9zbHViLmMtNjEwMi1cXG5tbS9zbHViLmM6NjEwMzpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbm1tL3NsdWIuYy02MTA0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NDQuMTgwNDg4MDE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3Mzc5MTg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBncmFiIHRoZSBjb21taXQgZGV0YWlscyB1c2luZyBgZ2l0IGxvZyAtMWAgb3IgYGdpdCBzaG93YCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2VkLiBIbW0sIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhYm91dCBga3ZmcmVlX2NhbGxfcmN1KClgLCB3aGljaCByaW5ncyBhIGJlbGwgYXMgYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiByZWxhdGVkIHRvIFJDVS1iYXNlZCBtZW1vcnkgZnJlZWluZy4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQganVzdGlmaWVzIGZ1enppbmc/XG5cbkxldCdzIGNhcmVmdWxseSBwaWNrIGFwYXJ0IHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyBQUkVFTVBUX1JUIGlzIGFmZmVjdGVkLiBCZWZvcmUgdGhlIHBhdGNoLCBga2ZyZWVfcmN1X3NoZWFmYCBpbiBQUkVFTVBUX1JUIGNhbGxlZCBgX19rZnJlZV9yY3Vfc2hlYWZgIHdpdGggYSBzcGVjaWZpYyBmbGFnLiBOb3csIHdpdGggdGhlIHBhdGNoLCBga3ZmcmVlX2NhbGxfcmN1KClgICpjb21wbGV0ZWx5KiBieXBhc3NlcyBga2ZyZWVfcmN1X3NoZWFmYC4gVGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBmb3IgIVBSRUVNUFRfUlQuICBBaGEhIEluIG5vbi1SVCBidWlsZHMsIHRoZSBga2ZyZWVfcmN1X3NoZWFmYCBpcyBzdGlsbCB1c2VkIGFuZCBwYXNzZXMgYSBkZWZhdWx0IGZsYWcgdG8gdGhlIHNhbWUgaW50ZXJuYWwgZnVuY3Rpb24uXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbjogaXMgYGt2ZnJlZV9jYWxsX3JjdWAgYSBob3QgcGF0aD8gR2l2ZW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggbWVtb3J5IGZyZWVpbmcsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBJdCdzIGNhbGxlZCBldmVyeXdoZXJlLlxuXG5CdXQsIGlzIHRoaXMganVzdCBhbiBpbnRlcm5hbCBtbSBsb2NraW5nIGZpeCwgYW4gUlQgd29ya2Fyb3VuZCwgb3IgaXMgaXQgc29tZXRoaW5nIGZ1enotd29ydGh5PyBUaW1lIHRvIHB1bGwgb3V0IHRoZSBcIldvcnRoRnV6emluZ1wiIGd1aWRlbGluZXMuXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgaXQncyBub3QgYSBkb2N1bWVudGF0aW9uIGNoYW5nZSwgbm90IHB1cmVseSBsb2dnaW5nLCBubyBjb25zdGFudCBjaGFuZ2VzLCBkb2Vzbid0IHNlZW0gbGlrZSB1bnJlYWNoYWJsZSBjb2RlLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGVhcmRvd24uICBUaGUgZ3VpZGVsaW5lcyBzdGF0ZTogXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cblNpbmNlIHRoaXMgKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgdGhhdCBtZWFucyB3ZSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyBjb21lcyB0aGUgbmV4dCBjcml0aWNhbCBzdGVwOiBpZGVudGlmeWluZyBgRm9jdXNTeW1ib2xzYC4gVGhlIGluc3RydWN0aW9ucyBzYXk6IFwiRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cIlxuXG5Pa2F5LCBzbyB3aGF0IGZ1bmN0aW9ucyB3ZXJlIGFjdHVhbGx5IG1vZGlmaWVkIG9yIGludHJvZHVjZWQ/IExvb2tpbmcgYXQgYG1tL3NsYWJfY29tbW9uLmNgLCB3ZSBoYXZlIGBrZnJlZV9yY3Vfc2hlYWZgICh3aGljaCBpcyBzdGF0aWMpIGFuZCBga3ZmcmVlX2NhbGxfcmN1YCAobm9uLXN0YXRpYywgZXhwb3J0ZWQg4oCTIGB2b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpYCkuXG5cblRoZSBxdWVzdGlvbiBpcywgaXMgYGt2ZnJlZV9jYWxsX3JjdWAgYSBcImdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25cIj8gT3IgaXMgdGhlcmUgYSBzcGVjaWZpYyBlbnRyeSBwb2ludD8gT3Igc2hvdWxkIGBGb2N1c1N5bWJvbHNgIGJlIGVtcHR5PyBDYW4gYEZvY3VzU3ltYm9sc2AgYmUgZW1wdHkgaWYgYWxsIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgb3Igc3RhdGljPyBMZXQncyByZS1yZWFkIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBpbnN0cnVjdGlvbnM6IFwiQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cIlxuXG5SaWdodCEgTGV0IG1lIHRoaW5rLi4uIHdoYXQgYXJlIHRoZSByZWxldmFudCBlbnRyeXBvaW50cyBmb3IgYGtmcmVlX3JjdWAsIGBrdmZyZWVfcmN1YCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2A/IEl0J3MgdGltZSB0byBkaWcgaW50byBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgIHRvIGZpbmQgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTo1MC43NTQyODI4MjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMjI3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2ZyZWVfY2FsbF9yY3Vfbm9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbGFiX2NvbW1vbi5jPTEyOTc9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7XFxubW0vc2xhYl9jb21tb24uYy0xMjk4LVxcbm1tL3NsYWJfY29tbW9uLmM6MTI5OTp2b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxubW0vc2xhYl9jb21tb24uYy0xMzAwLXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMyMy19XFxubW0vc2xhYl9jb21tb24uYzoxMzI0OkVYUE9SVF9TWU1CT0xfR1BMKGtmcmVlX2NhbGxfcmN1X25vbG9jayk7XFxubW0vc2xhYl9jb21tb24uYy0xMzI1LVxcbi0tXFxubW0vc2x1Yi5jPTYwMzE9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTYwOTAtICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jOjYwOTE6ICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbm1tL3NsdWIuYy02MDkyLSAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTo1MC44MDI1MDgyMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2Nzg4MzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgd2l0aCBSQ1UgYW5kIEtmcmVlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gbWVtb3J5IGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIGludGVyYWN0aW9uIG9mIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCBga3ZmcmVlX2NhbGxfcmN1YC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRob3NlIHR3byBmdW5jdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIG51YW5jZXMsIGhvdyB0aGV5IGJlaGF2ZSwgYW5kIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjYXNlcyB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gSSBhbSBnb2luZyB0byBzZWUgaG93IHRoZXkncmUgYmVpbmcgdXNlZCBhbmQgd2hlcmUgdGhleSd2ZSBiZWVuIG1vZGlmaWVkLlxuXG5CZXlvbmQgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwZXJzcGVjdGl2ZS4gTGV0J3Mgc2VlIHdoYXQgb3RoZXIgZmlsZXMgaGF2ZSBiZWVuIGFmZmVjdGVkIGluIHRoZSBtb3N0IHJlY2VudCBIRUFEIGNvbW1pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBBcmUgdGhlc2UgaXNvbGF0ZWQgbW9kaWZpY2F0aW9ucyBvciBwYXJ0IG9mIHNvbWV0aGluZyBiaWdnZXI/IFdoYXQncyB0aGUgY29udGV4dD8gRGV0ZXJtaW5pbmcgd2hhdCBvdGhlciBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgbWlnaHQgZ2l2ZSBtZSBpbnNpZ2h0IGludG8gYSBsYXJnZXIgc3lzdGVtLWxldmVsIGNoYW5nZSBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGUgbGFyZ2VyIHBpY3R1cmUgd2lsbCBob3BlZnVsbHkgZXhwb3NlIGFueSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9mIGNoYW5nZXMgdGhhdCBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNTo1NC40NzAzOTM5NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODg3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdV9zaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiLmgtNDgwLVxcbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XFxubW0vc2xhYi5oLTQ4Mi12b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXFxubW0vc2xhYl9jb21tb24uYzoxMzE2OlxcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXFxubW0vc2xhYl9jb21tb24uYy0xMzE3LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE2MjI9c3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxcbm1tL3NsYWJfY29tbW9uLmM6MTY2NjpzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbm1tL3NsYWJfY29tbW9uLmMtMTY2Ny17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2NzktXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxubW0vc2xhYl9jb21tb24uYzoxNjgwOlxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIwMTM9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMDM0LVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbm1tL3NsYWJfY29tbW9uLmMtMjAzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTQxNjAtXFx0XFx0ICogd2UgZG9uJ3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXFxubW0vc2x1Yi5jOjQxNjE6XFx0XFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cXG5tbS9zbHViLmMtNDE2Mi1cXHRcXHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXFxubW0vc2x1Yi5jOjQxNjM6XFx0XFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxcbm1tL3NsdWIuYy00MTY0LVxcdFxcdCAqL1xcbi0tXFxubW0vc2x1Yi5jPTYwMzE9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTYwODktICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXFxubW0vc2x1Yi5jOjYwOTA6ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbi0tXFxubW0vc2x1Yi5jLTYxMDAtICovXFxubW0vc2x1Yi5jOjYxMDE6c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYxMDItXFxubW0vc2x1Yi5jOjYxMDM6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjEwNC17XFxuLS1cXG5tbS9zbHViLmMtNjExMS1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MTEyOlxcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG5tbS9zbHViLmMtNjExMy1cXG4tLVxcbm1tL3NsdWIuYy02MjExLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jOjYyMTI6XFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxubW0vc2x1Yi5jLTYyMTMtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9zbHViLmMtNjIxNy1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MjE4OlxcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xcbm1tL3NsdWIuYy02MjE5LVxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NTQuNTE5Mjk3ODExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NTI3NjkwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUkVFTVBUX1JUIGFuZCBrdmZyZWVfY2FsbF9yY3UgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgQ09ORklHX1BSRUVNUFRfUlRgIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBjb2RlIHRvIGZ1bmN0aW9uIGEgY2VydGFpbiB3YXksIG9yIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIHBhdGguIFNvLCBsZXQncyBnZXQgaW50byBpdC5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBhdCBga3ZmcmVlX2NhbGxfcmN1YC4gVGhlIGNvZGUgY2hlY2tzIGAhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVClgIGFuZCwgaWYgdHJ1ZSwgY2FsbHMgYGtmcmVlX3JjdV9zaGVhZihwdHIpYC4gVGhhdCBtZWFucywgaW4gYSBzdGFuZGFyZCBrZXJuZWwsIHdpdGhvdXQgYFBSRUVNUFRfUlRgLCBga2ZyZWVfcmN1X3NoZWFmYCAqaXMqIGV4ZWN1dGVkLiBBbmQgd2l0aGluIGBrZnJlZV9yY3Vfc2hlYWZgLCB3ZSBzZWUgYF9fa2ZyZWVfcmN1X3NoZWFmYCBiZWluZyBjYWxsZWQgd2l0aCBgU0xBQl9GUkVFX0RFRkFVTFRgLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBpbXBvcnRhbnQgYml0LCB3aXRoIGBDT05GSUdfUFJFRU1QVF9SVGAgZW5hYmxlZCwgdGhlIGVudGlyZSBjYWxsIHRvIGBrZnJlZV9yY3Vfc2hlYWZgIGlzIGJ5cGFzc2VkIGluIGBrdmZyZWVfY2FsbF9yY3VgLiBJbnRlcmVzdGluZy5cblxuTm93LCBob2xkIG9uLiBJIG5lZWQgdG8gY2xhcmlmeTogSXMgYFBSRUVNUFRfUlRgIGEgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgd2UgY2FuIHRlc3QgaGVyZT8gT3IgaXMgdGhlcmUgc29tZXRoaW5nIGVsc2UgYXQgcGxheSwgcGVyaGFwcyBgQ09ORklHX1NMVUJgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB0byBiZSBzdXJlLiBJJ2xsIHN0YXJ0IHdpdGggYGluaXQvS2NvbmZpZ2Agb3IgbWF5YmUgYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgIHRvIGZpbmQgYFBSRUVNUFRfUlRgLiBMZXQncyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2OTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTU6NTkuNDcyMDY5MTMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzYwNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVFTVBUX1JUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHQ9OTA9ZW5kY2hvaWNlXFxua2VybmVsL0tjb25maWcucHJlZW1wdC05MS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjkyOmNvbmZpZyBQUkVFTVBUX1JUXFxua2VybmVsL0tjb25maWcucHJlZW1wdC05My1cXHRib29sIFxcXCJGdWxseSBQcmVlbXB0aWJsZSBLZXJuZWwgKFJlYWwtVGltZSlcXFwiXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTEwOC1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjEwOTpjb25maWcgUFJFRU1QVF9SVF9ORUVEU19CSF9MT0NLXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xMTAtXFx0Ym9vbCBcXFwiRW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjowMS4wOTM4MzU1OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3Mzg0MDMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBwcmVlbXB0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJIHNob3VsZCBqdW1wIGludG8gYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGlzIHN0dWZmIGFyZSBhcm91bmQgbGluZSA5Mi4gTGV0IG1lIGdyYWIgbXkgZWRpdG9yIGFuZCB0YWtlIGEgbG9vaywgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MDQuNzY3Njc4MDA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9OT19QUkVFTVBUXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbiAgODI6XFx0XFx0c2VsZWN0IFBSRUVNUFRfQlVJTEQgaWYgIVBSRUVNUFRfRFlOQU1JQ1xcbiAgODM6XFx0XFx0aGVscFxcbiAgODQ6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNjaGVkdWxlciBkcml2ZW4gcHJlZW1wdGlvbiBtb2RlbCB0aGF0XFxuICA4NTpcXHRcXHQgIGlzIGZ1bmRhbWVudGFsbHkgc2ltaWxhciB0byBmdWxsIHByZWVtcHRpb24sIGJ1dCBpcyBsZXNzXFxuICA4NjpcXHRcXHQgIGVhZ2VyIHRvIHByZWVtcHQgU0NIRURfTk9STUFMIHRhc2tzIGluIGFuIGF0dGVtcHQgdG9cXG4gIDg3OlxcdFxcdCAgcmVkdWNlIGxvY2sgaG9sZGVyIHByZWVtcHRpb24gYW5kIHJlY292ZXIgc29tZSBvZiB0aGUgcGVyZm9ybWFuY2VcXG4gIDg4OlxcdFxcdCAgZ2FpbnMgc2VlbiBmcm9tIHVzaW5nIFZvbHVudGFyeSBwcmVlbXB0aW9uLlxcbiAgODk6XFx0XFxuICA5MDpcXHRlbmRjaG9pY2VcXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFBSRUVNUFRfUlRcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkZ1bGx5IFByZWVtcHRpYmxlIEtlcm5lbCAoUmVhbC1UaW1lKVxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gRVhQRVJUIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAgOTU6XFx0XFx0c2VsZWN0IFBSRUVNUFRJT05cXG4gIDk2OlxcdFxcdGhlbHBcXG4gIDk3OlxcdFxcdCAgVGhpcyBvcHRpb24gdHVybnMgdGhlIGtlcm5lbCBpbnRvIGEgcmVhbC10aW1lIGtlcm5lbCBieSByZXBsYWNpbmdcXG4gIDk4OlxcdFxcdCAgdmFyaW91cyBsb2NraW5nIHByaW1pdGl2ZXMgKHNwaW5sb2Nrcywgcndsb2NrcywgZXRjLikgd2l0aFxcbiAgOTk6XFx0XFx0ICBwcmVlbXB0aWJsZSBwcmlvcml0eS1pbmhlcml0YW5jZSBhd2FyZSB2YXJpYW50cywgZW5mb3JjaW5nXFxuIDEwMDpcXHRcXHQgIGludGVycnVwdCB0aHJlYWRpbmcgYW5kIGludHJvZHVjaW5nIG1lY2hhbmlzbXMgdG8gYnJlYWsgdXAgbG9uZ1xcbiAxMDE6XFx0XFx0ICBub24tcHJlZW1wdGlibGUgc2VjdGlvbnMuIFRoaXMgbWFrZXMgdGhlIGtlcm5lbCwgZXhjZXB0IGZvciB2ZXJ5XFxuIDEwMjpcXHRcXHQgIGxvdyBsZXZlbCBhbmQgY3JpdGljYWwgY29kZSBwYXRocyAoZW50cnkgY29kZSwgc2NoZWR1bGVyLCBsb3dcXG4gMTAzOlxcdFxcdCAgbGV2ZWwgaW50ZXJydXB0IGhhbmRsaW5nKSBmdWxseSBwcmVlbXB0aWJsZSBhbmQgYnJpbmdzIG1vc3RcXG4gMTA0OlxcdFxcdCAgZXhlY3V0aW9uIGNvbnRleHRzIHVuZGVyIHNjaGVkdWxlciBjb250cm9sLlxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIHN5c3RlbXMgd2hpY2hcXG4gMTA3OlxcdFxcdCAgcmVxdWlyZSByZWFsLXRpbWUgZ3VhcmFudGVlcy5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0Y29uZmlnIFBSRUVNUFRfUlRfTkVFRFNfQkhfTE9DS1xcbiAxMTA6XFx0XFx0Ym9vbCBcXFwiRW5mb3JjZSBzb2Z0aXJxIHN5bmNocm9uaXNhdGlvbiBvbiBQUkVFTVBUX1JUXFxcIlxcbiAxMTE6XFx0XFx0ZGVwZW5kcyBvbiBQUkVFTVBUX1JUXFxuIDExMjpcXHRcXHRoZWxwXFxuIDExMzpcXHRcXHQgIEVuZm9yY2Ugc3luY2hyb25pc2F0aW9uIGFjcm9zcyB0aGUgc29mdGlycXMgY29udGV4dC4gT24gUFJFRU1QVF9SVFxcbiAxMTQ6XFx0XFx0ICB0aGUgc29mdGlycSBpcyBwcmVlbXB0aWJsZS4gVGhpcyBlbmZvcmNlcyB0aGUgc2FtZSBwZXItQ1BVIEJMS1xcbiAxMTU6XFx0XFx0ICBzZW1hbnRpYyBub24tUFJFRU1QVF9SVCBidWlsZHMgaGF2ZS4gVGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZFxcbiAxMTY6XFx0XFx0ICBiZWNhdXNlIHBlci1DUFUgbG9ja3Mgd2VyZSBhZGRlZCB0byBhdm9pZCB0aGUgcGVyLUNQVSBCS0wuXFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdCAgVGhpcyBzd2l0Y2ggcHJvdmlkZXMgdGhlIG9sZCBiZWhhdmlvdXIgZm9yIHRlc3RpbmcgcmVhc29ucy4gU2VsZWN0XFxuIDExOTpcXHRcXHQgIHRoaXMgaWYgeW91IHN1c3BlY3QgYW4gZXJyb3Igd2l0aCBwcmVlbXB0aWJsZSBzb2Z0aXJxIGFuZCB3YW50IHRlc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MDQuNzY3NzUxMjE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NTUwOTc5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFNsYWIgRnJlZWluZyBNZWNoYW5pc21zKipcblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaGFuZGxlcyBmcmVlaW5nIG1lbW9yeSBzbGFicy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGtleSBjb25zdGFudHMgb3IgbWFjcm9zIGludm9sdmVkLiBGaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gd2hhdCBgU0xBQl9GUkVFX0RFRkFVTFRgIGFuZCBgU0xBQl9GUkVFX05PTE9DS2AgYWN0dWFsbHkgc2lnbmlmeS4gVGhlaXIgbmFtZXMgYXJlIHN1Z2dlc3RpdmUsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGVpciBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYF9ERUZBVUxUYCByZXByZXNlbnRzIHRoZSB0eXBpY2FsIHNsYWIgZnJlZWluZyBtZWNoYW5pc20gYW5kIGlmIGBfTk9MT0NLYCBzdWdnZXN0cyBzb21lIG9wdGltaXphdGlvbiBzdHJhdGVneS4gTWF5YmUgdGhleSByZWxhdGUgdG8gbG9ja2luZyBzdHJhdGVnaWVzIG9yIGRlZmF1bHQgYmVoYXZpb3JzLlxuXG5UbyBnZXQgYSBicm9hZGVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBkbyBhIGdsb2JhbCBzZWFyY2ggZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gYFNMQUJfRlJFRV9gIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoZSBwYXR0ZXJuIGlzIHVzdWFsbHkgaGVscGZ1bC4gVGhpcyB3aWxsIGdpdmUgbWUgYW4gb3ZlcnZpZXcgb2YgYWxsIGluc3RhbmNlcyB3aGVyZSB0aGVzZSBjb25zdGFudHMgYXJlIHV0aWxpemVkLiBUaGlzIHdpbGwgc2hvdyBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBob3cgdG8gd29yayB3aXRoIHRoZSBkZWZpbmVkIGJlaGF2aW9yLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgdXRpbGl6YXRpb25zLCBhbGxvd2luZyBtZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiBob3cgdGhlc2UgbWVtb3J5IHNsYWJzIGFyZSBtYW5hZ2VkIGFuZCBmcmVlZC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLCB3aGV0aGVyIEknbSBkZWJ1Z2dpbmcsIG9wdGltaXppbmcsIG9yIHNpbXBseSBnYWluaW5nIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjEyLjcyMjg1MDg4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDI1OTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTTEFCX0ZSRUVfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM9MjgzPXN0YXRpYyB2b2lkIGxrZHRtX0JVRERZX0lOSVRfT05fQUxMT0Modm9pZClcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzE1LVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM6MzE2OnN0YXRpYyB2b2lkIGxrZHRtX1NMQUJfRlJFRV9ET1VCTEUodm9pZClcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMxNy17XFxuLS1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMzMi1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjMzMzpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfQ1JPU1Modm9pZClcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTMzNC17XFxuLS1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM0OC1cXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjM0OTpzdGF0aWMgdm9pZCBsa2R0bV9TTEFCX0ZSRUVfUEFHRSh2b2lkKVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzUwLXtcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmM9MzczPXN0YXRpYyBzdHJ1Y3QgY3Jhc2h0eXBlIGNyYXNodHlwZXNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9oZWFwLmMtMzgyLVxcdENSQVNIVFlQRShCVUREWV9JTklUX09OX0FMTE9DKSxcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jOjM4MzpcXHRDUkFTSFRZUEUoU0xBQl9GUkVFX0RPVUJMRSksXFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODQ6XFx0Q1JBU0hUWVBFKFNMQUJfRlJFRV9DUk9TUyksXFxuZHJpdmVycy9taXNjL2xrZHRtL2hlYXAuYzozODU6XFx0Q1JBU0hUWVBFKFNMQUJfRlJFRV9QQUdFKSxcXG5kcml2ZXJzL21pc2MvbGtkdG0vaGVhcC5jLTM4Ni19O1xcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jPTQ4ND12b2lkIGthc2FuX2luaXRfb2JqZWN0X21ldGEoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBjb25zdCB2b2lkICpvYmplY3QpXFxuLS1cXG5tbS9rYXNhbi9nZW5lcmljLmMtNDk2LVxcdCAqIHZhbHVlIGZvciB0aGUgZmlyc3QgOCBieXRlcyBvZiBhIG5ld2x5IGFsbG9jYXRlZCBvYmplY3QgaXMgbm90XFxubW0va2FzYW4vZ2VuZXJpYy5jOjQ5NzpcXHQgKiBLQVNBTl9TTEFCX0ZSRUVfTUVUQS5cXG5tbS9rYXNhbi9nZW5lcmljLmMtNDk4LVxcdCAqL1xcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jPTUwNz1zdGF0aWMgdm9pZCByZWxlYXNlX2ZyZWVfbWV0YShjb25zdCB2b2lkICpvYmplY3QsIHN0cnVjdCBrYXNhbl9mcmVlX21ldGEgKm1ldGEpXFxuLS1cXG5tbS9rYXNhbi9nZW5lcmljLmMtNTA5LVxcdC8qIENoZWNrIGlmIGZyZWUgbWV0YSBpcyB2YWxpZC4gKi9cXG5tbS9rYXNhbi9nZW5lcmljLmM6NTEwOlxcdGlmICgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhvYmplY3QpICE9IEtBU0FOX1NMQUJfRlJFRV9NRVRBKVxcbm1tL2thc2FuL2dlbmVyaWMuYy01MTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jPTU3Mz12b2lkIGthc2FuX3NhdmVfZnJlZV9pbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0va2FzYW4vZ2VuZXJpYy5jLTU4Ni1cXHQvKiBNYXJrIGZyZWUgbWV0YSBhcyB2YWxpZC4gKi9cXG5tbS9rYXNhbi9nZW5lcmljLmM6NTg3OlxcdCoodTggKilrYXNhbl9tZW1fdG9fc2hhZG93KG9iamVjdCkgPSBLQVNBTl9TTEFCX0ZSRUVfTUVUQTtcXG5tbS9rYXNhbi9nZW5lcmljLmMtNTg4LX1cXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9MTI0PXN0YXRpYyBpbmxpbmUgYm9vbCBrYXNhbl9yZXF1aXJlc19tZXRhKHZvaWQpXFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oLTE1Ny1cXG5tbS9rYXNhbi9rYXNhbi5oOjE1ODojZGVmaW5lIEtBU0FOX1NMQUJfRlJFRV9NRVRBXFx0MHhGQSAgLyogZnJlZWQgc2xhYiBvYmplY3Qgd2l0aCBmcmVlIG1ldGEgKi9cXG5tbS9rYXNhbi9rYXNhbi5oLTE1OS0jZGVmaW5lIEtBU0FOX0dMT0JBTF9SRURaT05FXFx0MHhGOSAgLyogcmVkem9uZSBmb3IgZ2xvYmFsIHZhcmlhYmxlICovXFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oPTI3MD1zdHJ1Y3QgcWxpc3Rfbm9kZSB7XFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oLTI4Ni0gKiBGcmVlIG1ldGEgaXMgY29uc2lkZXJlZCB2YWxpZCB3aGVuZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNoYWRvdyBieXRlIHRoYXRcXG5tbS9rYXNhbi9rYXNhbi5oOjI4NzogKiBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgOCBieXRlcyBvZiB0aGUgb2JqZWN0IGlzIEtBU0FOX1NMQUJfRlJFRV9NRVRBLlxcbm1tL2thc2FuL2thc2FuLmgtMjg4LSAqL1xcbi0tXFxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz03ND1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3NoYWRvd19idWdfdHlwZShzdHJ1Y3Qga2FzYW5fcmVwb3J0X2luZm8gKmluZm8pXFxuLS1cXG5tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jLTExMi1cXHRjYXNlIEtBU0FOX1NMQUJfRlJFRTpcXG5tbS9rYXNhbi9yZXBvcnRfZ2VuZXJpYy5jOjExMzpcXHRjYXNlIEtBU0FOX1NMQUJfRlJFRV9NRVRBOlxcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTE0LVxcdFxcdGJ1Z190eXBlID0gXFxcInNsYWItdXNlLWFmdGVyLWZyZWVcXFwiO1xcbi0tXFxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYz0xNjA9dm9pZCBrYXNhbl9jb21wbGV0ZV9tb2RlX3JlcG9ydF9pbmZvKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG4tLVxcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTc1LVxcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmM6MTc2OlxcdGlmICgqKHU4ICopa2FzYW5fbWVtX3RvX3NoYWRvdyhpbmZvLVxcdTAwM2VvYmplY3QpID09IEtBU0FOX1NMQUJfRlJFRV9NRVRBKSB7XFxubW0va2FzYW4vcmVwb3J0X2dlbmVyaWMuYzoxNzc6XFx0XFx0LyogRnJlZSBtZXRhIG11c3QgYmUgcHJlc2VudCB3aXRoIEtBU0FOX1NMQUJfRlJFRV9NRVRBLiAqL1xcbm1tL2thc2FuL3JlcG9ydF9nZW5lcmljLmMtMTc4LVxcdFxcdGZyZWVfbWV0YSA9IGthc2FuX2dldF9mcmVlX21ldGEoaW5mby1cXHUwMDNlY2FjaGUsIGluZm8tXFx1MDAzZW9iamVjdCk7XFxuLS1cXG5tbS9zbGFiLmgtMjYtXFxubW0vc2xhYi5oOjI3OiNkZWZpbmUgU0xBQl9GUkVFX0RFRkFVTFRcXHQweDAwIC8qIG5vIGZsYWdzICovXFxubW0vc2xhYi5oOjI4OiNkZWZpbmUgU0xBQl9GUkVFX05PTE9DS1xcdDB4MDEgLyogc3Bpbm5pbmcgbm90IGFsbG93ZWQgKi9cXG5tbS9zbGFiLmgtMjktXFxubW0vc2xhYi5oPTMwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRvX2FsbG9jX2ZsYWdzKHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbm1tL3NsYWIuaC0zMS17XFxubW0vc2xhYi5oOjMyOlxcdGlmIChmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSylcXG5tbS9zbGFiLmgtMzMtXFx0XFx0cmV0dXJuIFNMQUJfQUxMT0NfTk9MT0NLO1xcbi0tXFxubW0vc2xhYi5oPTQzPXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGNvbnN0IHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbm1tL3NsYWIuaC00NC17XFxubW0vc2xhYi5oOjQ1OlxcdHJldHVybiAhKGZyZWVfZmxhZ3MgXFx1MDAyNiBTTEFCX0ZSRUVfTk9MT0NLKTtcXG5tbS9zbGFiLmgtNDYtfVxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMxNS1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XFx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXFx0XFx0Z290byBmYWxsYmFjaztcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTY2Nj1zdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNjc5LVxcdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxcbm1tL3NsYWJfY29tbW9uLmM6MTY4MDpcXHRcXHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBTTEFCX0ZSRUVfREVGQVVMVCk7XFxubW0vc2xhYl9jb21tb24uYy0xNjgxLVxcbi0tXFxubW0vc2x1Yi5jPTI4NDU9c3RhdGljIHZvaWQgX19mcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxuLS1cXG5tbS9zbHViLmMtMjg1OC1cXG5tbS9zbHViLmM6Mjg1OTpcXHRpZiAodW5saWtlbHkoZnJlZV9mbGFncyBcXHUwMDI2IFNMQUJfRlJFRV9OT0xPQ0spKVxcbm1tL3NsdWIuYy0yODYwLVxcdFxcdGtmcmVlX25vbG9jayhzaGVhZik7XFxuLS1cXG5tbS9zbHViLmM9Mjg2Nz1zdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxubW0vc2x1Yi5jLTI4Njgte1xcbm1tL3NsdWIuYzoyODY5OlxcdF9fZnJlZV9lbXB0eV9zaGVhZihzLCBzaGVhZiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xcbm1tL3NsdWIuYy0yODcwLX1cXG4tLVxcbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02MDkxLSAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcXG5tbS9zbHViLmM6NjA5MjogKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcXG5tbS9zbHViLmMtNjA5My0gKiBieXBhc3NpbmcgdGhlIHNoZWF2ZXMgbGF5ZXIgY29tcGxldGVseSBvbiBQUkVFTVBUX1JULlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGtkdG0vdGVzdHMudHh0PTMyPUJVRERZX0lOSVRfT05fQUxMT0MgTWVtb3J5IGFwcGVhcnMgaW5pdGlhbGl6ZWRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzM6U0xBQl9GUkVFX0RPVUJMRVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xrZHRtL3Rlc3RzLnR4dDozNDpTTEFCX0ZSRUVfQ1JPU1NcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQ6MzU6U0xBQl9GUkVFX1BBR0VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sa2R0bS90ZXN0cy50eHQtMzYtI1NPRlRMT0NLVVAgSGFuZ3MgdGhlIHN5c3RlbVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjoxNC4xODcxMTc0MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM1NDE2NDUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBTTFVCIGFuZCBSQ1UgU2hlYXZlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gc29tZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWNzLiBNeSBmb2N1cyBpcyBvbiBgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBtbS9zbHViLmNgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBTTEFCIGFuZCBTTFVCIGFsbG9jYXRvcnMgcmVzaWRlcywgcmlnaHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGZyZWVpbmcgbWVtb3J5LCBzcGVjaWZpY2FsbHkgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYFNMQUJfRlJFRV9ERUZBVUxUYCBhbmQgYFNMQUJfRlJFRV9OT0xPQ0tgLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byBga2ZyZWVfcmN1X3NoZWFmYC4gVGhlIG5ldyBTTFVCIHNoZWFmL2JhdGNoaW5nIGZlYXR1cmUsIEkgdGhpbmssIGlzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIFRpbWUgdG8gdHJhY2UgdGhpbmdzIGRvd24uIEkgc2hvdWxkIGNoZWNrIG91dCBgX19rZnJlZV9yY3Vfc2hlYWZgIGluIGBtbS9zbHViLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGhvdyBTTFVCIHNoZWF2ZXMgYXJlIGhhbmRsZWQgZHVyaW5nIG1lbW9yeSByZWxlYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjoyMS41NDEyODM4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY0MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjEwMDpcXHQgKi9cXG42MTAxOlxcdHN0YXRpYyBERUZJTkVfV0FJVF9PVkVSUklERV9NQVAoa2ZyZWVfcmN1X3NoZWFmX21hcCwgTERfV0FJVF9DT05GSUcpO1xcbjYxMDI6XFx0XFxuNjEwMzpcXHRib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKVxcbjYxMDQ6XFx0e1xcbjYxMDU6XFx0XFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcXG42MTA2OlxcdFxcdHN0cnVjdCBzbGFiX3NoZWFmICpyY3Vfc2hlYWY7XFxuNjEwNzpcXHRcXHRib29sIGFsbG93X3NwaW4gPSBmcmVlX2ZsYWdzX2FsbG93X3NwaW5uaW5nKGZyZWVfZmxhZ3MpO1xcbjYxMDg6XFx0XFxuNjEwOTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbik7XFxuNjExMDpcXHRcXG42MTExOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxuNjExMjpcXHRcXHRcXHRsb2NrX21hcF9hY3F1aXJlX3RyeShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuNjExMzpcXHRcXG42MTE0OlxcdFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKVxcbjYxMTU6XFx0XFx0XFx0Z290byBmYWlsO1xcbjYxMTY6XFx0XFxuNjExNzpcXHRcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbjYxMTg6XFx0XFxuNjExOTpcXHRcXHRpZiAodW5saWtlbHkoIXBjcy1cXHUwMDNlcmN1X2ZyZWUpKSB7XFxuNjEyMDpcXHRcXHRcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHk7XFxuNjEyMTpcXHRcXHRcXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xcbjYxMjI6XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzID0gdG9fYWxsb2NfZmxhZ3MoZnJlZV9mbGFncyk7XFxuNjEyMzpcXHRcXHRcXHRnZnBfdCBnZnAgPSBhbGxvd19zcGluID8gR0ZQX05PV0FJVCA6IF9fR0ZQX05PV0FSTjtcXG42MTI0OlxcdFxcbjYxMjU6XFx0XFx0XFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBmYWxsIGJhY2sgKi9cXG42MTI2OlxcdFxcdFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxuNjEyNzpcXHRcXHRcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG42MTI4OlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG42MTI5OlxcdFxcdFxcdH1cXG42MTMwOlxcdFxcbjYxMzE6XFx0XFx0XFx0aWYgKHBjcy1cXHUwMDNlc3BhcmUgXFx1MDAyNlxcdTAwMjYgcGNzLVxcdTAwM2VzcGFyZS1cXHUwMDNlc2l6ZSA9PSAwKSB7XFxuNjEzMjpcXHRcXHRcXHRcXHRwY3MtXFx1MDAzZXJjdV9mcmVlID0gcGNzLVxcdTAwM2VzcGFyZTtcXG42MTMzOlxcdFxcdFxcdFxcdHBjcy1cXHUwMDNlc3BhcmUgPSBOVUxMO1xcbjYxMzQ6XFx0XFx0XFx0XFx0Z290byBkb19mcmVlO1xcbjYxMzU6XFx0XFx0XFx0fVxcbjYxMzY6XFx0XFxuNjEzNzpcXHRcXHRcXHRiYXJuID0gZ2V0X2Jhcm4ocyk7XFxuNjEzODpcXHRcXHRcXHRpZiAoIWJhcm4pIHtcXG42MTM5OlxcdFxcdFxcdFxcdGxvY2FsX3VubG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spO1xcbjYxNDA6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjYxNDE6XFx0XFx0XFx0fVxcbjYxNDI6XFx0XFxuNjE0MzpcXHRcXHRcXHRlbXB0eSA9IGJhcm5fZ2V0X2VtcHR5X3NoZWFmKGJhcm4sIGFsbG93X3NwaW4pO1xcbjYxNDQ6XFx0XFxuNjE0NTpcXHRcXHRcXHRpZiAoZW1wdHkpIHtcXG42MTQ2OlxcdFxcdFxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBlbXB0eTtcXG42MTQ3OlxcdFxcdFxcdFxcdGdvdG8gZG9fZnJlZTtcXG42MTQ4OlxcdFxcdFxcdH1cXG42MTQ5OlxcdFxcbjYxNTA6XFx0XFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuNjE1MTpcXHRcXG42MTUyOlxcdFxcdFxcdGVtcHR5ID0gYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncyk7XFxuNjE1MzpcXHRcXG42MTU0OlxcdFxcdFxcdGlmICghZW1wdHkpXFxuNjE1NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNjE1NjpcXHRcXG42MTU3OlxcdFxcdFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKSB7XFxuNjE1ODpcXHRcXHRcXHRcXHRfX2ZyZWVfZW1wdHlfc2hlYWYocywgZW1wdHksIGZyZWVfZmxhZ3MpO1xcbjYxNTk6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjYxNjA6XFx0XFx0XFx0fVxcbjYxNjE6XFx0XFxuNjE2MjpcXHRcXHRcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbjYxNjM6XFx0XFxuNjE2NDpcXHRcXHRcXHRpZiAodW5saWtlbHkocGNzLVxcdTAwM2VyY3VfZnJlZSkpXFxuNjE2NTpcXHRcXHRcXHRcXHRfX2ZyZWVfZW1wdHlfc2hlYWYocywgZW1wdHksIGZyZWVfZmxhZ3MpO1xcbjYxNjY6XFx0XFx0XFx0ZWxzZVxcbjYxNjc6XFx0XFx0XFx0XFx0cGNzLVxcdTAwM2VyY3VfZnJlZSA9IGVtcHR5O1xcbjYxNjg6XFx0XFx0fVxcbjYxNjk6XFx0XFxuNjE3MDpcXHRkb19mcmVlOlxcbjYxNzE6XFx0XFxuNjE3MjpcXHRcXHRyY3Vfc2hlYWYgPSBwY3MtXFx1MDAzZXJjdV9mcmVlO1xcbjYxNzM6XFx0XFxuNjE3NDpcXHRcXHQvKlxcbjYxNzU6XFx0XFx0ICogU2luY2Ugd2UgZmx1c2ggaW1tZWRpYXRlbHkgd2hlbiBzaXplIHJlYWNoZXMgY2FwYWNpdHksIHdlIG5ldmVyIHJlYWNoXFxuNjE3NjpcXHRcXHQgKiB0aGlzIHdpdGggc2l6ZSBhbHJlYWR5IGF0IGNhcGFjaXR5LCBzbyBubyBPT0Igd3JpdGUgaXMgcG9zc2libGUuXFxuNjE3NzpcXHRcXHQgKi9cXG42MTc4OlxcdFxcdHJjdV9zaGVhZi1cXHUwMDNlb2JqZWN0c1tyY3Vfc2hlYWYtXFx1MDAzZXNpemUrK10gPSBvYmo7XFxuNjE3OTpcXHRcXG42MTgwOlxcdFxcdGlmIChsaWtlbHkocmN1X3NoZWFmLVxcdTAwM2VzaXplIFxcdTAwM2Mgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHkpKSB7XFxuNjE4MTpcXHRcXHRcXHRyY3Vfc2hlYWYgPSBOVUxMO1xcbjYxODI6XFx0XFx0fSBlbHNlIHtcXG42MTgzOlxcdFxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBOVUxMO1xcbjYxODQ6XFx0XFx0XFx0cmN1X3NoZWFmLVxcdTAwM2Vub2RlID0gbnVtYV9ub2RlX2lkKCk7XFxuNjE4NTpcXHRcXHR9XFxuNjE4NjpcXHRcXG42MTg3OlxcdFxcdC8qXFxuNjE4ODpcXHRcXHQgKiB3ZSBmbHVzaCBiZWZvcmUgbG9jYWxfdW5sb2NrIHRvIG1ha2Ugc3VyZSBhIHJhY2luZ1xcbjYxODk6XFx0XFx0ICogZmx1c2hfYWxsX3JjdV9zaGVhdmVzKCkgZG9lc24ndCBtaXNzIHRoaXMgc2hlYWZcXG42MTkwOlxcdFxcdCAqL1xcbjYxOTE6XFx0XFx0aWYgKHJjdV9zaGVhZikge1xcbjYxOTI6XFx0XFx0XFx0LypcXG42MTkzOlxcdFxcdFxcdCAqIFdpdGggIWFsbG93X3NwaW4sIHdlIG1pZ2h0IGhhdmUgaW50ZXJydXB0ZWQgY2FsbF9yY3UoKSdzXFxuNjE5NDpcXHRcXHRcXHQgKiBJUlEtZGlzYWJsZWQgY3JpdGljYWwgc2VjdGlvbi4gSWYgSVJRcyBhcmUgbm90IGRpc2FibGVkLFxcbjYxOTU6XFx0XFx0XFx0ICogd2Uga25vdyB0aGF0J3Mgbm90IHRoZSBjYXNlLlxcbjYxOTY6XFx0XFx0XFx0ICovXFxuNjE5NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWFsbG93X3NwaW4gXFx1MDAyNlxcdTAwMjYgaXJxc19kaXNhYmxlZCgpKSkge1xcbjYxOTg6XFx0XFx0XFx0XFx0c3RydWN0IGRlZmVycmVkX3BlcmNwdV93b3JrICpkcHc7XFxuNjE5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MjEuNTQyNDUyNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU2NTgzMDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgX19rZnJlZV9yY3Vfc2hlYWZgIGhhcyBhIGNvbmRpdGlvbmFsIHdhcm5pbmcsIGBWTV9XQVJOX09OX09OQ0VgLCB0aGF0IHRyaWdnZXJzIGlmIGBhbGxvd19zcGluYCAod2hpY2ggaXMgdHJ1ZSBpbiB0aGUgZGVmYXVsdCBzdGF0ZSkgYW5kIGBDT05GSUdfUFJFRU1QVF9SVGAgYXJlIGJvdGggZW5hYmxlZC4gVGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBtZW1vcnkgaXMgZnJlZWQsIGFuZCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gY2F1c2VkIHByb2JsZW1zIHdpdGggc2xlZXBpbmcgbG9ja3MgdW5kZXIgYFBSRUVNUFRfUlRgLCBzcGVjaWZpY2FsbHkgd2hlbiBhIHJhdyBzcGlubG9jayB3YXMgaGVsZC4gVGhlIGZpeCBieXBhc3NlcyB0aGUgcHJvYmxlbWF0aWMgZnVuY3Rpb24gZW50aXJlbHkgaW4gb25lIGNhc2UgYW5kIGNoYW5nZXMgdGhlIGZsYWdzIHBhc3NlZCBpbiBhbm90aGVyLlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhhdCdzIHRoZSByZWFsIHF1ZXN0aW9uLiBMZXQgbWUgY2hlY2s6IHRoaXMgY2hhbmdlIGlzICpkZWZpbml0ZWx5KiBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vc2xhYl9jb21tb24uY2AgYW5kIGBrdmZyZWVfY2FsbF9yY3VgKSwgYW5kIGl0J3MgcmVhY2hhYmxlIGFuZCBjb25zdGFudGx5IGV4ZWN1dGVkLCBzbyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoaXMgaXMgYSBjbGVhciBjYXNlIHdoZXJlIGZ1enppbmcgd2lsbCBleHBvc2UgcG90ZW50aWFsbHkgc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gTGV0J3Mgc2VlLi4uIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBwcmVmZXIgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGt2ZnJlZV9jYWxsX3JjdWAgKmlzKiBhIHBvdGVudGlhbGx5IGhvdCBmdW5jdGlvbiwgc28gbGV0J3MgdGhpbmsgYWJvdXQgdGhpcy4uLml0IGlzIGluZGVlZCBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24vUkNVIGZyZWVpbmcgZnVuY3Rpb24sIHNvIGl0J3MgcHJvYmFibHkgKnRvbyogZ2VuZXJhbC4gV2hhdCBkaWQgdGhlIHBhdGNoIGFjdHVhbGx5IHRvdWNoPyBga2ZyZWVfcmN1X3NoZWFmYCwgYGt2ZnJlZV9jYWxsX3JjdWAsIGBfX2tmcmVlX3JjdV9zaGVhZmAgYW5kIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLi4uIFdhaXQsIHRoZXJlJ3MgYW5vdGhlciBvbmU6IGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbiwgYW5kIGlzICpub3QqIG1vZGlmaWVkIGluIHRoZSBwYXRjaCwgYnV0IGl0IGNhbGxzIGBfX2tmcmVlX3JjdV9zaGVhZmAgd2l0aCBhIGZsYWcgdGhhdCAqd2FzKiBtb2RpZmllZC5cblxuT2theSwgc28gbGV0J3Mgc2VlLCB3aGljaCBzaG91bGQgYmUgaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3Q/IExvb2tpbmcgZm9yIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4uLmBfX2tmcmVlX3JjdV9zaGVhZmAgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBJdCdzIG5vbi1zdGF0aWMsIGRlZmluZWQgaW4gYG1tL3NsdWIuY2AgYW5kIGRlY2xhcmVkIGluIGBtbS9zbGFiLmhgLiBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBub3QgbW9kaWZpZWQsIGJ1dCBjYWxsZWQgYnkgdGhlIGNoYW5nZWQgY29kZSwgc28gcGVyaGFwcyBpdCBzaG91bGQgYmUgdGhlcmUgYXMgd2VsbC4gYGt2ZnJlZV9jYWxsX3JjdWAgaXMgbWF5YmUgdG9vIGdlbmVyYWwuXG5cblNvLCBmb3Igbm93LCBsZXQncyBpbmNsdWRlIGBfX2tmcmVlX3JjdV9zaGVhZmAgYW5kIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGFuZCBzZWUgaWYgbW9yZSBjYWxsZXJzIGFyZSBhdmFpbGFibGUgZm9yIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzE0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjI5LjEwODI4Njc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NDU3MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTExMD12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpO1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTExOnZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cik7XFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTE0OT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNTMtXFx0XFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHR5cGVvZigqKHB0cikpLCBrdnJoZikgXFx1MDAzZT0gNDA5Nik7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTU0OlxcdFxcdGtmcmVlX2NhbGxfcmN1X25vbG9jayhcXHUwMDI2KChfX19wKS1cXHUwMDNla3ZyaGYpLCAodm9pZCAqKSAoX19fcCkpO1xcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE1NS1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk3PUVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTI5OC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEyOTk6dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbm1tL3NsYWJfY29tbW9uLmMtMTMwMC17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjMtfVxcbm1tL3NsYWJfY29tbW9uLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChrZnJlZV9jYWxsX3JjdV9ub2xvY2spO1xcbm1tL3NsYWJfY29tbW9uLmMtMTMyNS1cXG4tLVxcbm1tL3NsdWIuYz02MDMxPXN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3NsdWIuYy02MDkwLSAqIF9fa2ZyZWVfcmN1X3NoZWFmKCkgbWF5IGFjcXVpcmUgYSBzcGlubG9ja190IChzbGVlcGluZyBsb2NrIG9uIFBSRUVNUFRfUlQpLFxcbm1tL3NsdWIuYzo2MDkxOiAqIHRoaXMgd291bGQgdmlvbGF0ZSBsb2NrIG5lc3RpbmcgcnVsZXMuIFRoZXJlZm9yZSwga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKClcXG5tbS9zbHViLmMtNjA5Mi0gKiBhdm9pZHMgdGhpcyBwcm9ibGVtIGJ5IHBhc3NpbmcgU0xBQl9GUkVFX05PTE9DSy4ga3ZmcmVlX2NhbGxfcmN1KCkgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MzAuNTg0NzQ3NzI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODI1NzMzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBga2ZyZWVfcmN1X25vbG9ja2AgTWFjcm8qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbnRlcm5hbHMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBrZnJlZV9yY3Vfbm9sb2NrYCwgc28gbGV0J3Mgc3RhcnQgYnkgY3JhY2tpbmcgb3BlbiB0aGUgYGluY2x1ZGUvbGludXgvcmN1cGRhdGUuaGAgZmlsZS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBtYWNybyBkZWZpbml0aW9uIHRoZXJlLiBUaGlzIHVzdWFsbHkgZ2l2ZXMgbWUgdGhlIHF1aWNrZXN0IHBhdGggdG8gdW5kZXJzdGFuZCB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIGl0IGNvbWVzIHRvIHRoZSBtZW1vcnkgcmVjbGFtYXRpb24gd2l0aG91dCB0aGUgbG9jay4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgdGhhdCBzY2hlZHVsZXMgdGhlIFJDVS1iYXNlZCBmcmVlaW5nIG9mIGFuIG9iamVjdCwgaG9wZWZ1bGx5IGFsb25nc2lkZSBzb21lIGhpbnRzIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUkNVIGluZnJhc3RydWN0dXJlLiBIb3BlZnVsbHkgdGhlIGltcGxlbWVudGF0aW9uIGlzIGFzIEkgZXhwZWN0LCB1c2luZyBpdCBhbmQgaXRzIHZhcmlhbnRzIGlzIGEga2V5IG9wdGltaXphdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBpdHMgbnVhbmNlIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyOTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjozNC40NjczMjQwNzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcmN1cGRhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTQwOlxcdCAqIEBrdnJoZjogdGhlIG5hbWUgb2YgdGhlIHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgd2l0aGluIHRoZSB0eXBlIG9mIEBwdHIuXFxuMTE0MTpcXHQgKlxcbjExNDI6XFx0ICogV2l0aCBLVkZSRUVfUkNVX0JBVENIRUQsIGtmcmVlX3JjdV9ub2xvY2soKSB0cmllcyBoYXJkIHRvIGZyZWUgb2JqZWN0c1xcbjExNDM6XFx0ICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbjExNDQ6XFx0ICogTGFyZ2Uga21hbGxvYyBhbmQgdm1hbGxvYyBvYmplY3RzIGFyZSBhbHdheXMgZGVmZXJyZWQuXFxuMTE0NTpcXHQgKlxcbjExNDY6XFx0ICoga2ZyZWVfcmN1X25vbG9jaygpIHN1cHBvcnRzIDItYXJnIHZhcmlhbnQgb25seS5cXG4xMTQ3OlxcdCAqL1xcbjExNDg6XFx0I2RlZmluZSBrZnJlZV9yY3Vfbm9sb2NrKHB0ciwga3ZyaGYpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNDk6XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4xMTUwOlxcdFxcdHR5cGVvZiAocHRyKSBfX19wID0gKHB0cik7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNTI6XFx0XFx0aWYgKF9fX3ApIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMTE1MzpcXHRcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIGt2cmhmKSBcXHUwMDNlPSA0MDk2KTtcXHRcXHRcXFxcXFxuMTE1NDpcXHRcXHRcXHRrZnJlZV9jYWxsX3JjdV9ub2xvY2soXFx1MDAyNigoX19fcCktXFx1MDAzZWt2cmhmKSwgKHZvaWQgKikgKF9fX3ApKTtcXHRcXFxcXFxuMTE1NTpcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjExNTY6XFx0fSB3aGlsZSAoMClcXG4xMTU3OlxcdFxcbjExNTg6XFx0LypcXG4xMTU5OlxcdCAqIFBsYWNlIHRoaXMgYWZ0ZXIgYSBsb2NrLWFjcXVpc2l0aW9uIHByaW1pdGl2ZSB0byBndWFyYW50ZWUgdGhhdFxcbjExNjA6XFx0ICogYW4gVU5MT0NLK0xPQ0sgcGFpciBhY3RzIGFzIGEgZnVsbCBiYXJyaWVyLiAgVGhpcyBndWFyYW50ZWUgYXBwbGllc1xcbjExNjE6XFx0ICogaWYgdGhlIFVOTE9DSyBhbmQgTE9DSyBhcmUgZXhlY3V0ZWQgYnkgdGhlIHNhbWUgQ1BVIG9yIGlmIHRoZVxcbjExNjI6XFx0ICogVU5MT0NLIGFuZCBMT0NLIG9wZXJhdGUgb24gdGhlIHNhbWUgbG9jayB2YXJpYWJsZS5cXG4xMTYzOlxcdCAqL1xcbjExNjQ6XFx0I2lmZGVmIENPTkZJR19BUkNIX1dFQUtfUkVMRUFTRV9BQ1FVSVJFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjM0LjQ2NzQzNzg0NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjAxNDAwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBga2ZyZWVfcmN1X25vbG9ja2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBga2ZyZWVfcmN1X25vbG9ja2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSBwYXR0ZXJucy4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGluIG15IGhlYWQ6ICpXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBrZXJuZWw/IFdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9iamVjdHMgYXJlIGJlaW5nIGZyZWVkIHRoaXMgd2F5PyBXaGF0J3MgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGtmcmVlX3JjdV9ub2xvY2tgIGlzIHByZWZlcnJlZCBvdmVyIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGBrZnJlZWAgb3IgdGhlIHN0YW5kYXJkIGBrZnJlZV9yY3VgPypcblxuSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgXCJubyBsb2NrXCIgYXBwZW5kYWdlLCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgZm9yIHNwZWNpZmljIHNpdHVhdGlvbnMgd2hlcmUgdGFraW5nIGEgZ2xvYmFsIGxvY2sgaXMgdW5kZXNpcmFibGUgb3IgdW5uZWNlc3NhcnkgZm9yIFJDVS1zYWZlIG1lbW9yeSBkZWFsbG9jYXRpb24uIFRoZXJlZm9yZSwgSSB3YW50IHRvIGxvb2sgZm9yIHNjZW5hcmlvcyB3aGVyZSBsb2NrIGNvbnRlbnRpb24gaXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb2RlIHBhdGhzIHVzZSBpdC5cblxuTXkgYnJhaW4ncyBhbHJlYWR5IGZpcmluZyB1cCBzZWFyY2ggcXVlcmllcyByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBzb3VyY2UgY29kZSwgbG9va2luZyBmb3IgY2FsbHMgdG8gYGtmcmVlX3JjdV9ub2xvY2tgLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSB0cmFpbCBvZiB1c2FnZS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBhbmQgc3luY2hyb25pemF0aW9uIGNvbnN0cmFpbnRzIHRoYXQgYXJlIHByb21wdGluZyB0aGUgdXNlIG9mIGBrZnJlZV9yY3Vfbm9sb2NrYC4gV2hhdCBzcGVjaWZpYyB0cmFkZS1vZmZzIGFyZSBiZWluZyBtYWRlIGluIGNob29zaW5nIHRoaXMgZnVuY3Rpb24/ICpJcyBpdCB1c2VkIGluIGludGVycnVwdCBjb250ZXh0PyBEb2VzIGl0IGltcGx5IHNwZWNpZmljIG1lbW9yeSBvcmRlcmluZyByZXF1aXJlbWVudHM/KiBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSAob3IgbGFjayB0aGVyZW9mKSBhcm91bmQgdGhlIGNhbGwgc2l0ZXMuIFRoaXMgY29udGV4dCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW50LlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZ2FpbiBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1vdGl2YXRpb25zIGJlaGluZCBpdHMgdXNlIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEknbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCBvciBwb3NzaWJsZSBwaXRmYWxscyBpbiBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MzguMDY4ODQwOTc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMjI1MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdV9ub2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oPTExMzA9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTM3LS8qKlxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTM4OiAqIGtmcmVlX3JjdV9ub2xvY2soKSAtIGEgdmVyc2lvbiBvZiBrZnJlZV9yY3UoKSB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExMzktICogQHB0cjogcG9pbnRlciB0byBrZnJlZSBmb3IgZG91YmxlLWFyZ3VtZW50IGludm9jYXRpb25zLlxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDEtICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0MjogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDMtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDUtICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0NjogKiBrZnJlZV9yY3Vfbm9sb2NrKCkgc3VwcG9ydHMgMi1hcmcgdmFyaWFudCBvbmx5LlxcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaC0xMTQ3LSAqL1xcbmluY2x1ZGUvbGludXgvcmN1cGRhdGUuaDoxMTQ4OiNkZWZpbmUga2ZyZWVfcmN1X25vbG9jayhwdHIsIGt2cmhmKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgtMTE0OS1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubGliL3Rlc3RzL3NsdWJfa3VuaXQuYz0zNDQ9c3RhdGljIHZvaWQgdGVzdF9ub2xvY2soc3RydWN0IHRlc3Rfbm9sb2NrX2NvbnRleHQgKmN0eClcXG4tLVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzU5LVxcdGlmIChjYW5fdXNlX2tmcmVlX3JjdSBcXHUwMDI2XFx1MDAyNiAoY3R4LVxcdTAwM2VjYWxsYmFja19jb3VudCBcXHUwMDI2IDIpKVxcbmxpYi90ZXN0cy9zbHViX2t1bml0LmM6MzYwOlxcdFxcdGtmcmVlX3JjdV9ub2xvY2sob2JqcCwga3ZyY3UpO1xcbmxpYi90ZXN0cy9zbHViX2t1bml0LmMtMzYxLVxcdGVsc2VcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjE4Nj12b2lkIGt2ZnJlZV9yY3VfYmFycmllcl9vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbGFiX2NvbW1vbi5jLTIxODcte1xcbm1tL3NsYWJfY29tbW9uLmM6MjE4ODpcXHQvKiBrZnJlZV9yY3Vfbm9sb2NrKCkgbWlnaHQgaGF2ZSBkZWZlcnJlZCBmcmVlcyBldmVuIHdpdGhvdXQgc2hlYXZlcyAqL1xcbm1tL3NsYWJfY29tbW9uLmMtMjE4OS1cXHRkZWZlcnJlZF93b3JrX2JhcnJpZXIoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6MzkuNTEwMDcwNjI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4OTk3NTczMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBhbmQgU0xVQiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIGRvIHdlIHN0YXJ0IHdpdGggdGhpcyBwZXJmb3JtYW5jZSBpc3N1ZT8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhlIHNsb3dkb3duLiBMZXQncyBkaWcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhvc2UgYXJvdW5kIGBLVkZSRUVfUkNVX0JBVENIRURgLiBJIHN1c3BlY3QgdGhpcyBtaWdodCBiZSBwbGF5aW5nIGEgcm9sZSBpbiBob3cgd2UncmUgZnJlZWluZyBrZXJuZWwgbWVtb3J5LCBhbmQgYSBiYXRjaGVkIGFwcHJvYWNoIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgdW5kZXIgbG9hZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRyYWRlLW9mZnMuIEFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGNvbnNpZGVyIFNMVUIgc2hlYXZlcy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gUkNVLCBiYXRjaCBmcmVlaW5nLCBhbmQgdGhlIFNMVUIgYWxsb2NhdG9yJ3MgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBwZXJmb3JtYW5jZSB0d2Vha3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHNoZWF2ZXMgb3BlcmF0ZSwgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBDUFUgYWZmaW5pdHksIGFuZCB3aGV0aGVyIHRoYXQncyBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGRpZmZlcmVudCBrbm9icyBhdmFpbGFibGUgdG8gbWUuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUsIHRyYWNpbmcgdGhlIGxpa2VseSBjb2RlIHBhdGhzIHRvIGlkZW50aWZ5IHdoZXJlIHdlIGNhbiBvcHRpbWl6ZS4gSSBzdXNwZWN0IHRoaXMgd2lsbCBiZSBhIG11bHRpLWZhY2V0ZWQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNjo0My40MDk4MzA1ODFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjgwOTE3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZGUkVFX1JDVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg9MTEzMD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDEtICpcXG5pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmg6MTE0MjogKiBXaXRoIEtWRlJFRV9SQ1VfQkFUQ0hFRCwga2ZyZWVfcmN1X25vbG9jaygpIHRyaWVzIGhhcmQgdG8gZnJlZSBvYmplY3RzXFxuaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oLTExNDMtICogd2l0aG91dCBhbnkgZGVmZXJyZWQgcHJvY2Vzc2luZywgYnV0IG1heSBzdGlsbCBkZWZlciBmcmVlaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9zbGFiLmg9MTQzMD11bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xNDMxLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjE0MzI6I2lmbmRlZiBDT05GSUdfS1ZGUkVFX1JDVV9CQVRDSEVEXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTQzMy1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfcmN1X3NjaGVkdWxlcl9ydW5uaW5nKHZvaWQpIHsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC90eXBlcy5oPTI1ND1zdHJ1Y3QgY2FsbGJhY2tfaGVhZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjU5LVxcbmluY2x1ZGUvbGludXgvdHlwZXMuaDoyNjA6I2lmZGVmIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRURcXG5pbmNsdWRlL2xpbnV4L3R5cGVzLmgtMjYxLXN0cnVjdCBrdmZyZWVfcmN1X2hlYWQge1xcbi0tXFxubW0vS2NvbmZpZz0xNjQ9Y29uZmlnIFNMVUJcXG4tLVxcbm1tL0tjb25maWctMTY3LVxcbm1tL0tjb25maWc6MTY4OmNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG5tbS9LY29uZmlnLTE2OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEyOTk9dm9pZCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xMzAyLVxcbm1tL3NsYWJfY29tbW9uLmM6MTMwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCkpXFxubW0vc2xhYl9jb21tb24uYy0xMzA0LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTEzMjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMjUtXFxubW0vc2xhYl9jb21tb24uYzoxMzI2OiNpZm5kZWYgQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL3NsYWJfY29tbW9uLmMtMTMyNy1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTM1NT12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTM1OC1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzNTk6I2Vsc2UgLyogQ09ORklHX0tWRlJFRV9SQ1VfQkFUQ0hFRCAqL1xcbm1tL3NsYWJfY29tbW9uLmMtMTM2MC1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjI0Mj12b2lkIF9faW5pdCBrdmZyZWVfcmN1X2luaXQodm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMjI5NC1cXG5tbS9zbGFiX2NvbW1vbi5jOjIyOTU6I2VuZGlmIC8qIENPTkZJR19LVkZSRUVfUkNVX0JBVENIRUQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6NDQuODc3OTI2NzM4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MjExOTQ1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYXJlIHByb2JhYmx5IGluIGBtbS9LY29uZmlnYCwgYW5kLCBnaXZlbiB0aGUgbGlrZWx5IG9yZ2FuaXphdGlvbiwgSSdtIGdvaW5nIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gYXJvdW5kIGxpbmUgMTY4LiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGludGVyZXN0ZWQgaW4gaXMgZGVmaW5lZC4gTGV0J3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjQ5LjQ5OTEyMzQwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ZW5kbWVudVxcbiAxNjE6XFx0XFxuIDE2MjpcXHRtZW51IFxcXCJTbGFiIGFsbG9jYXRvciBvcHRpb25zXFxcIlxcbiAxNjM6XFx0XFxuIDE2NDpcXHRjb25maWcgU0xVQlxcbiAxNjU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAxNjY6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuIDE2NzpcXHRcXG4gMTY4OlxcdGNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4gMTY5OlxcdFxcdGRlZl9ib29sIHlcXG4gMTcwOlxcdFxcdGRlcGVuZHMgb24gIVNMVUJfVElOWSBcXHUwMDI2XFx1MDAyNiAhVElOWV9SQ1VcXG4gMTcxOlxcdFxcdGRlcGVuZHMgb24gIVJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBTTFVCX1RJTllcXG4gMTc0OlxcdFxcdGJvb2wgXFxcIkNvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbiAxNzY6XFx0XFx0c2VsZWN0IFNMQUJfTUVSR0VfREVGQVVMVFxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICAgQ29uZmlndXJlcyB0aGUgc2xhYiBhbGxvY2F0b3IgaW4gYSB3YXkgdG8gYWNoaWV2ZSBtaW5pbWFsIG1lbW9yeVxcbiAxNzk6XFx0XFx0ICAgZm9vdHByaW50LCBzYWNyaWZpY2luZyBzY2FsYWJpbGl0eSwgZGVidWdnaW5nIGFuZCBvdGhlciBmZWF0dXJlcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6NDkuNDk5MjY0MjY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjY0MzU3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBSZWxhdGVkIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFBSRUVNUFRfUlQgc2l0dWF0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMsIHJlbGF0ZWQgb3Igbm90LCB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSB1c2Ugb2Ygc2hlYXZlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gdXNlIGdyZXAgdG8gbG9vayBmb3IgdGhlIHRlcm1zIFwic2hlYWZcIiBhbmQgXCJzaGVhdmVzLFwiIGp1c3QgdG8gYmUgY29tcHJlaGVuc2l2ZSBhbmQgYWNjb3VudCBmb3Igc2luZ3VsYXIvcGx1cmFsIHZhcmlhdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGRpc2NvdmVyIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgUFJFRU1QVF9SVCBhbmQgc2hlYXZlcyBpbnRlcmFjdCBvciBhcmUgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NDMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE2OjUxLjU2NTcwMjk3MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MjAxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hlYWZ8c2hlYXZlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjI4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9zbGFiLmg9MjQwPXN0cnVjdCBrbWVtX2NhY2hlIHtcXG5tbS9zbGFiLmg6MjQxOlxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzIF9fcGVyY3B1ICpjcHVfc2hlYXZlcztcXG5tbS9zbGFiLmgtMjQyLVxcdC8qIFVzZWQgZm9yIHJldHJpZXZpbmcgcGFydGlhbCBzbGFicywgZXRjLiAqL1xcbi0tXFxubW0vc2xhYi5oLTI0OC1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcdFxcdC8qIEZyZWUgcG9pbnRlciBvZmZzZXQgKi9cXG5tbS9zbGFiLmg6MjQ5OlxcdHVuc2lnbmVkIGludCBzaGVhZl9jYXBhY2l0eTtcXG5tbS9zbGFiLmgtMjUwLVxcdHN0cnVjdCBrbWVtX2NhY2hlX29yZGVyX29iamVjdHMgb287XFxuLS1cXG5tbS9zbGFiLmgtMjk2LS8qXFxubW0vc2xhYi5oOjI5NzogKiBFdmVyeSBjYWNoZSBoYXMgIU5VTEwgcy1cXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxcbm1tL3NsYWIuaDoyOTg6ICogYm9vdHN0cmFwX3NoZWFmIHRlbXBvcmFyaWx5IGR1cmluZyBpbml0LCBvciBwZXJtYW5lbnRseSBmb3IgdGhlIGJvb3QgY2FjaGVzXFxubW0vc2xhYi5oLTI5OS0gKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXFxubW0vc2xhYi5oOjMwMDogKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cXG5tbS9zbGFiLmgtMzAxLSAqL1xcbm1tL3NsYWIuaDozMDI6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0zMDMte1xcbm1tL3NsYWIuaC0zMDQtXFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXFxubW0vc2xhYi5oOjMwNTpcXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHk7XFxubW0vc2xhYi5oLTMwNi19XFxuLS1cXG5tbS9zbGFiLmg9NDczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19rbWFsbG9jX25vcm1hbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsYWIuaC00ODAtXFxubW0vc2xhYi5oOjQ4MTpib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmosIHVuc2lnbmVkIGludCBmcmVlX2ZsYWdzKTtcXG5tbS9zbGFiLmg6NDgyOnZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpO1xcbm1tL3NsYWIuaDo0ODM6dm9pZCBmbHVzaF9yY3Vfc2hlYXZlc19vbl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XFxubW0vc2xhYi5oLTQ4NC1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MzE4PXN0cnVjdCBrbWVtX2NhY2hlICpfX2ttZW1fY2FjaGVfY3JlYXRlX2FyZ3MoY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMzQ2LVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MzQ3OlxcdGlmIChhcmdzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSlcXG5tbS9zbGFiX2NvbW1vbi5jLTM0OC1cXHRcXHRmbGFncyB8PSBTTEFCX05PX01FUkdFO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0xMjk5PXZvaWQga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrKHN0cnVjdCBrdmZyZWVfcmN1X2hlYWQgKmhlYWQsIHZvaWQgKnB0cilcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTMxNS1cXG5tbS9zbGFiX2NvbW1vbi5jOjEzMTY6XFx0aWYgKHVubGlrZWx5KCFfX2tmcmVlX3JjdV9zaGVhZihzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBwdHIsIFNMQUJfRlJFRV9OT0xPQ0spKSlcXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTctXFx0XFx0Z290byBmYWxsYmFjaztcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTYyMj1zdGF0aWMgdm9pZCBrZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2NjUtXFxubW0vc2xhYl9jb21tb24uYzoxNjY2OnN0YXRpYyBib29sIGtmcmVlX3JjdV9zaGVhZih2b2lkICpvYmopXFxubW0vc2xhYl9jb21tb24uYy0xNjY3LXtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTY3OS1cXHRpZiAobGlrZWx5KCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSB8fCBzbGFiX25pZChzbGFiKSA9PSBudW1hX21lbV9pZCgpKSlcXG5tbS9zbGFiX2NvbW1vbi5jOjE2ODA6XFx0XFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xcbm1tL3NsYWJfY29tbW9uLmMtMTY4MS1cXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjAxMz12b2lkIGt2ZnJlZV9jYWxsX3JjdShzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTIwMzQtXFx0ICovXFxubW0vc2xhYl9jb21tb24uYzoyMDM1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXFx1MDAyNlxcdTAwMjYga2ZyZWVfcmN1X3NoZWFmKHB0cikpXFxubW0vc2xhYl9jb21tb24uYy0yMDM2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MjE3Mz12b2lkIGt2ZnJlZV9yY3VfYmFycmllcih2b2lkKVxcbm1tL3NsYWJfY29tbW9uLmMtMjE3NC17XFxubW0vc2xhYl9jb21tb24uYzoyMTc1OlxcdGZsdXNoX2FsbF9yY3Vfc2hlYXZlcygpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjE3Ni1cXHRfX2t2ZnJlZV9yY3VfYmFycmllcigpO1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMTg2PXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWJfY29tbW9uLmMtMjE4Ny17XFxubW0vc2xhYl9jb21tb24uYzoyMTg4OlxcdC8qIGtmcmVlX3JjdV9ub2xvY2soKSBtaWdodCBoYXZlIGRlZmVycmVkIGZyZWVzIGV2ZW4gd2l0aG91dCBzaGVhdmVzICovXFxubW0vc2xhYl9jb21tb24uYy0yMTg5LVxcdGRlZmVycmVkX3dvcmtfYmFycmllcigpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjE5MC1cXG5tbS9zbGFiX2NvbW1vbi5jOjIxOTE6XFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XFxubW0vc2xhYl9jb21tb24uYy0yMTkyLVxcdFxcdGNwdXNfcmVhZF9sb2NrKCk7XFxubW0vc2xhYl9jb21tb24uYzoyMTkzOlxcdFxcdGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHMpO1xcbm1tL3NsYWJfY29tbW9uLmMtMjE5NC1cXHRcXHRjcHVzX3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS9zbHViLmMtNjEtICogICAxLiAgc2xhYl9tdXRleCAoR2xvYmFsIE11dGV4KVxcbm1tL3NsdWIuYzo2MjogKiAgIDJhLiBrbWVtX2NhY2hlLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayAoTG9jYWwgdHJ5bG9jaylcXG5tbS9zbHViLmMtNjMtICogICAyYi4gYmFybi1cXHUwMDNlbG9jayAoU3BpbmxvY2spXFxuLS1cXG5tbS9zbHViLmMtMTMyLSAqXFxubW0vc2x1Yi5jOjEzMzogKiAgIGNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrIChsb2NhbF90cnlsb2NrKVxcbm1tL3NsdWIuYy0xMzQtICpcXG5tbS9zbHViLmM6MTM1OiAqICAgVGhpcyBsb2NrIHByb3RlY3RzIGZhc3RwYXRoIG9wZXJhdGlvbnMgb24gdGhlIHBlcmNwdSBzaGVhdmVzLiBPbiAhUlQgaXRcXG5tbS9zbHViLmMtMTM2LSAqICAgb25seSBkaXNhYmxlcyBwcmVlbXB0aW9uIGFuZCBkb2VzIG5vIGF0b21pYyBvcGVyYXRpb25zLiBBcyBsb25nIGFzIHRoZSBtYWluXFxubW0vc2x1Yi5jOjEzNzogKiAgIG9yIHNwYXJlIHNoZWFmIGNhbiBoYW5kbGUgdGhlIGFsbG9jYXRpb24gb3IgZnJlZSwgdGhlcmUgaXMgbm8gb3RoZXJcXG5tbS9zbHViLmMtMTM4LSAqICAgb3ZlcmhlYWQuXFxuLS1cXG5tbS9zbHViLmMtMTQyLSAqICAgVGhpcyBsb2NrIHByb3RlY3RzIHRoZSBvcGVyYXRpb25zIG9uIHBlci1OVU1BLW5vZGUgYmFybi4gSXQgY2FuIHF1aWNrbHlcXG5tbS9zbHViLmM6MTQzOiAqICAgc2VydmUgYW4gZW1wdHkgb3IgZnVsbCBzaGVhZiBpZiBhdmFpbGFibGUsIGFuZCBhdm9pZCBtb3JlIGV4cGVuc2l2ZSByZWZpbGxcXG5tbS9zbHViLmMtMTQ0LSAqICAgb3IgZmx1c2ggb3BlcmF0aW9uLlxcbi0tXFxubW0vc2x1Yi5jLTE0OC0gKiAgIE9iamVjdHMgbWF5IGhhdmUgdG8gYmUgZnJlZWQgdG8gdGhlaXIgc2xhYnMgd2hlbiB0aGV5IGFyZSBmcm9tIGEgcmVtb3RlXFxubW0vc2x1Yi5jOjE0OTogKiAgIG5vZGUgKHdoZXJlIHdlIHdhbnQgdG8gYXZvaWQgZmlsbGluZyBsb2NhbCBzaGVhdmVzIHdpdGggcmVtb3RlIG9iamVjdHMpXFxubW0vc2x1Yi5jOjE1MDogKiAgIG9yIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IGZ1bGwgc2hlYXZlcy4gT24gYXJjaGl0ZWN0dXJlcyBzdXBwb3J0aW5nXFxubW0vc2x1Yi5jLTE1MS0gKiAgIGNtcHhjaGdfZG91YmxlIHRoaXMgaXMgZG9uZSBieSBhIGxvY2tsZXNzIHVwZGF0ZSBvZiBzbGFiJ3MgZnJlZWxpc3QgYW5kXFxuLS1cXG5tbS9zbHViLmMtMTY0LSAqXFxubW0vc2x1Yi5jOjE2NTogKiBTTFVCIGFzc2lnbnMgdHdvIG9iamVjdCBhcnJheXMgY2FsbGVkIHNoZWF2ZXMgZm9yIGNhY2hpbmcgYWxsb2NhdGlvbnMgYW5kXFxubW0vc2x1Yi5jLTE2Ni0gKiBmcmVlcyBvbiBlYWNoIGNwdSwgd2l0aCBhIE5VTUEgbm9kZSBzaGFyZWQgYmFybiBmb3IgYmFsYW5jaW5nIGJldHdlZW4gY3B1cy5cXG5tbS9zbHViLmM6MTY3OiAqIEFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgcHJpbWFyaWx5IHNlcnZlZCBmcm9tIHRoZXNlIHNoZWF2ZXMuXFxubW0vc2x1Yi5jLTE2OC0gKlxcbi0tXFxubW0vc2x1Yi5jPTM2Mz1lbnVtIHN0YXRfaXRlbSB7XFxubW0vc2x1Yi5jOjM2NDpcXHRBTExPQ19GQVNUUEFUSCxcXHRcXHQvKiBBbGxvY2F0aW9uIGZyb20gcGVyY3B1IHNoZWF2ZXMgKi9cXG5tbS9zbHViLmMtMzY1LVxcdEFMTE9DX1NMT1dQQVRILFxcdFxcdC8qIEFsbG9jYXRpb24gZnJvbSBwYXJ0aWFsIG9yIG5ldyBzbGFiICovXFxubW0vc2x1Yi5jOjM2NjpcXHRGUkVFX1JDVV9TSEVBRixcXHRcXHQvKiBGcmVlIHRvIHJjdV9mcmVlIHNoZWFmICovXFxubW0vc2x1Yi5jOjM2NzpcXHRGUkVFX1JDVV9TSEVBRl9GQUlMLFxcdC8qIEZhaWxlZCB0byBmcmVlIHRvIGEgcmN1X2ZyZWUgc2hlYWYgKi9cXG5tbS9zbHViLmM6MzY4OlxcdEZSRUVfRkFTVFBBVEgsXFx0XFx0LyogRnJlZSB0byBwZXJjcHUgc2hlYXZlcyAqL1xcbm1tL3NsdWIuYy0zNjktXFx0RlJFRV9TTE9XUEFUSCxcXHRcXHQvKiBGcmVlIHRvIGEgc2xhYiAqL1xcbi0tXFxubW0vc2x1Yi5jLTM3Mi1cXHRBTExPQ19TTEFCLFxcdFxcdC8qIE5ldyBzbGFiIGFjcXVpcmVkIGZyb20gcGFnZSBhbGxvY2F0b3IgKi9cXG5tbS9zbHViLmM6MzczOlxcdEFMTE9DX05PREVfTUlTTUFUQ0gsXFx0LyogUmVxdWVzdGVkIG5vZGUgZGlmZmVyZW50IGZyb20gY3B1IHNoZWFmICovXFxubW0vc2x1Yi5jLTM3NC1cXHRGUkVFX1NMQUIsXFx0XFx0LyogU2xhYiBmcmVlZCB0byB0aGUgcGFnZSBhbGxvY2F0b3IgKi9cXG4tLVxcbm1tL3NsdWIuYy0zNzYtXFx0Q01QWENIR19ET1VCTEVfRkFJTCxcXHQvKiBGYWlsdXJlcyBvZiBzbGFiIGZyZWVsaXN0IHVwZGF0ZSAqL1xcbm1tL3NsdWIuYzozNzc6XFx0U0hFQUZfRkxVU0gsXFx0XFx0LyogT2JqZWN0cyBmbHVzaGVkIGZyb20gYSBzaGVhZiAqL1xcbm1tL3NsdWIuYzozNzg6XFx0U0hFQUZfUkVGSUxMLFxcdFxcdC8qIE9iamVjdHMgcmVmaWxsZWQgdG8gYSBzaGVhZiAqL1xcbm1tL3NsdWIuYzozNzk6XFx0U0hFQUZfQUxMT0MsXFx0XFx0LyogQWxsb2NhdGlvbiBvZiBhbiBlbXB0eSBzaGVhZiBpbmNsdWRpbmcgb3ZlcnNpemVkIG9uZXMgKi9cXG5tbS9zbHViLmM6MzgwOlxcdFNIRUFGX0ZSRUUsXFx0XFx0LyogRnJlZWluZyBvZiBhbiBlbXB0eSBzaGVhZiBpbmNsdWRpbmcgb3ZlcnNpemVkIG9uZXMgKi9cXG5tbS9zbHViLmM6MzgxOlxcdEJBUk5fR0VULFxcdFxcdC8qIEdvdCBmdWxsIHNoZWFmIGZyb20gYmFybiAqL1xcbm1tL3NsdWIuYzozODI6XFx0QkFSTl9HRVRfRkFJTCxcXHRcXHQvKiBGYWlsZWQgdG8gZ2V0IGZ1bGwgc2hlYWYgZnJvbSBiYXJuICovXFxubW0vc2x1Yi5jOjM4MzpcXHRCQVJOX1BVVCxcXHRcXHQvKiBQdXQgZnVsbCBzaGVhZiB0byBiYXJuICovXFxubW0vc2x1Yi5jOjM4NDpcXHRCQVJOX1BVVF9GQUlMLFxcdFxcdC8qIEZhaWxlZCB0byBwdXQgZnVsbCBzaGVhZiB0byBiYXJuICovXFxubW0vc2x1Yi5jOjM4NTpcXHRTSEVBRl9QUkVGSUxMX0ZBU1QsXFx0LyogU2hlYWYgcHJlZmlsbCBncmFiYmVkIHRoZSBzcGFyZSBzaGVhZiAqL1xcbm1tL3NsdWIuYzozODY6XFx0U0hFQUZfUFJFRklMTF9TTE9XLFxcdC8qIFNoZWFmIHByZWZpbGwgZm91bmQgbm8gc3BhcmUgc2hlYWYgKi9cXG5tbS9zbHViLmM6Mzg3OlxcdFNIRUFGX1BSRUZJTExfT1ZFUlNJWkUsXFx0LyogQWxsb2NhdGlvbiBvZiBvdmVyc2l6ZSBzaGVhZiBmb3IgcHJlZmlsbCAqL1xcbm1tL3NsdWIuYzozODg6XFx0U0hFQUZfUkVUVVJOX0ZBU1QsXFx0LyogU2hlYWYgcmV0dXJuIHJlYXR0YWNoZWQgc3BhcmUgc2hlYWYgKi9cXG5tbS9zbHViLmMtMzg5LVxcdFNIRUFGX1JFVFVSTl9TTE9XLFxcdC8qIFNoZWFmIHJldHVybiBjb3VsZCBub3QgcmVhdHRhY2ggc3BhcmUgKi9cXG4tLVxcbm1tL3NsdWIuYz00MjE9c3RydWN0IG5vZGVfYmFybiB7XFxubW0vc2x1Yi5jLTQyMi1cXHRzcGlubG9ja190IGxvY2s7XFxubW0vc2x1Yi5jOjQyMzpcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNoZWF2ZXNfZnVsbDtcXG5tbS9zbHViLmM6NDI0OlxcdHN0cnVjdCBsaXN0X2hlYWQgc2hlYXZlc19lbXB0eTtcXG5tbS9zbHViLmMtNDI1LVxcdHVuc2lnbmVkIGludCBucl9mdWxsO1xcbi0tXFxubW0vc2x1Yi5jLTQyOC1cXG5tbS9zbHViLmM6NDI5OnN0cnVjdCBzbGFiX3NoZWFmIHtcXG5tbS9zbHViLmMtNDMwLVxcdHVuaW9uIHtcXG4tLVxcbm1tL3NsdWIuYy00MzQtXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgbGxub2RlO1xcbm1tL3NsdWIuYzo0MzU6XFx0XFx0Lyogb25seSB1c2VkIGZvciBwcmVmaWxsZWQgc2hlYWZzICovXFxubW0vc2x1Yi5jLTQzNi1cXHRcXHRzdHJ1Y3Qge1xcbi0tXFxubW0vc2x1Yi5jLTQ0Mi1cXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG5tbS9zbHViLmM6NDQzOlxcdGludCBub2RlOyAvKiBvbmx5IHVzZWQgZm9yIHJjdV9zaGVhZiAqL1xcbm1tL3NsdWIuYy00NDQtXFx0dm9pZCAqb2JqZWN0c1tdO1xcbi0tXFxubW0vc2x1Yi5jLTQ0Ni1cXG5tbS9zbHViLmM6NDQ3OnN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzIHtcXG5tbS9zbHViLmMtNDQ4LVxcdGxvY2FsX3RyeWxvY2tfdCBsb2NrO1xcbm1tL3NsdWIuYzo0NDk6XFx0c3RydWN0IHNsYWJfc2hlYWYgKm1haW47IC8qIG5ldmVyIE5VTEwgd2hlbiB1bmxvY2tlZCAqL1xcbm1tL3NsdWIuYzo0NTA6XFx0c3RydWN0IHNsYWJfc2hlYWYgKnNwYXJlOyAvKiBlbXB0eSBvciBmdWxsLCBtYXkgYmUgTlVMTCAqL1xcbm1tL3NsdWIuYzo0NTE6XFx0c3RydWN0IHNsYWJfc2hlYWYgKnJjdV9mcmVlOyAvKiBmb3IgYmF0Y2hpbmcga2ZyZWVfcmN1KCkgKi9cXG5tbS9zbHViLmMtNDUyLX07XFxuLS1cXG5tbS9zbHViLmM9NTA2PXN0YXRpYyBub2RlbWFza190IHNsYWJfYmFybl9ub2RlcztcXG4tLVxcbm1tL3NsdWIuYy01MDgtLypcXG5tbS9zbHViLmM6NTA5OiAqIFdvcmtxdWV1ZSB1c2VkIGZvciBmbHVzaGluZyBjcHUgYW5kIGtmcmVlX3JjdSBzaGVhdmVzLlxcbm1tL3NsdWIuYy01MTAtICovXFxuLS1cXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTIwNzMtLypcXG5tbS9zbHViLmM6MjA3NDogKiBUaGUgYWxsb2NhdGVkIG9iamNnIHBvaW50ZXJzIGFycmF5IG9yIHNoZWFmIGlzIG5vdCBhY2NvdW50ZWQgZGlyZWN0bHkuXFxubW0vc2x1Yi5jLTIwNzUtICogTW9yZW92ZXIsIGl0IHNob3VsZCBub3QgY29tZSBmcm9tIERNQSBidWZmZXIgYW5kIGlzIG5vdCByZWFkaWx5XFxuLS1cXG5tbS9zbHViLmM9Mjc5NT1zdGF0aWMgaW5saW5lIHZvaWQgKnNldHVwX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTI4MDYtXFxubW0vc2x1Yi5jOjI4MDc6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpfX2FsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnAsXFxubW0vc2x1Yi5jLTI4MDgtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB1bnNpZ25lZCBpbnQgY2FwYWNpdHkpXFxubW0vc2x1Yi5jLTI4MDkte1xcbm1tL3NsdWIuYzoyODEwOlxcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcXG5tbS9zbHViLmM6MjgxMTpcXHRzaXplX3Qgc2hlYWZfc2l6ZTtcXG5tbS9zbHViLmMtMjgxMi1cXG4tLVxcbm1tL3NsdWIuYy0yODE0LVxcdCAqIFByZXZlbnQgcmVjdXJzaW9uIHRvIHRoZSBzYW1lIGNhY2hlLCBvciBhIGRlZXAgc3RhY2sgb2Yga21hbGxvY3Mgb2ZcXG5tbS9zbHViLmM6MjgxNTpcXHQgKiB2YXJ5aW5nIHNpemVzIChzaGVhZiBjYXBhY2l0eSBtaWdodCBkaWZmZXIgZm9yIGVhY2gga21hbGxvYyBzaXplXFxubW0vc2x1Yi5jLTI4MTYtXFx0ICogYnVja2V0KVxcbi0tXFxubW0vc2x1Yi5jLTI4MjAtXFxubW0vc2x1Yi5jOjI4MjE6XFx0c2hlYWZfc2l6ZSA9IHN0cnVjdF9zaXplKHNoZWFmLCBvYmplY3RzLCBjYXBhY2l0eSk7XFxubW0vc2x1Yi5jOjI4MjI6XFx0c2hlYWYgPSBrbWFsbG9jX2ZsYWdzKHNoZWFmX3NpemUsIGdmcCB8IF9fR0ZQX1pFUk8sIGFsbG9jX2ZsYWdzLCBOVU1BX05PX05PREUpO1xcbm1tL3NsdWIuYy0yODIzLVxcbm1tL3NsdWIuYzoyODI0OlxcdGlmICh1bmxpa2VseSghc2hlYWYpKVxcbm1tL3NsdWIuYy0yODI1LVxcdFxcdHJldHVybiBOVUxMO1xcbm1tL3NsdWIuYy0yODI2LVxcbm1tL3NsdWIuYzoyODI3OlxcdHNoZWFmLVxcdTAwM2VjYWNoZSA9IHM7XFxubW0vc2x1Yi5jLTI4MjgtXFxuLS1cXG5tbS9zbHViLmMtMjgzMC1cXG5tbS9zbHViLmM6MjgzMTpcXHRyZXR1cm4gc2hlYWY7XFxubW0vc2x1Yi5jLTI4MzItfVxcbm1tL3NsdWIuYy0yODMzLVxcbm1tL3NsdWIuYzoyODM0OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYWJfc2hlYWYgKmFsbG9jX2VtcHR5X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yODM1LVxcdFxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI4NDEtXFxubW0vc2x1Yi5jOjI4NDI6XFx0cmV0dXJuIF9fYWxsb2NfZW1wdHlfc2hlYWYocywgZ2ZwLCBhbGxvY19mbGFncywgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHkpO1xcbm1tL3NsdWIuYy0yODQzLX1cXG5tbS9zbHViLmMtMjg0NC1cXG5tbS9zbHViLmM6Mjg0NTpzdGF0aWMgdm9pZCBfX2ZyZWVfZW1wdHlfc2hlYWYoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZixcXG5tbS9zbHViLmMtMjg0Ni1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGZyZWVfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjg0OC1cXHQvKlxcbm1tL3NsdWIuYzoyODQ5OlxcdCAqIElmIHRoZSBzaGVhZiB3YXMgY3JlYXRlZCB3aXRoIFNMQUJfQUxMT0NfTk9fUkVDVVJTRSBmbGFnIHRoZW4gaXRzXFxubW0vc2x1Yi5jLTI4NTAtXFx0ICogY29ycmVzcG9uZGluZyBleHRlbnNpb24gaXMgTlVMTCBhbmQgYWxsb2NfdGFnX3N1YigpIHdpbGwgdGhyb3cgYVxcbm1tL3NsdWIuYy0yODUxLVxcdCAqIHdhcm5pbmcsIHRoZXJlZm9yZSByZXBsYWNlIE5VTEwgd2l0aCBDT0RFVEFHX0VNUFRZIHRvIGluZGljYXRlXFxubW0vc2x1Yi5jOjI4NTI6XFx0ICogdGhhdCB0aGUgZXh0ZW5zaW9uIGZvciB0aGlzIHNoZWFmIGlzIGV4cGVjdGVkIHRvIGJlIE5VTEwuXFxubW0vc2x1Yi5jLTI4NTMtXFx0ICovXFxubW0vc2x1Yi5jLTI4NTQtXFx0aWYgKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9LTUFMTE9DKVxcbm1tL3NsdWIuYzoyODU1OlxcdFxcdG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoc2hlYWYpO1xcbm1tL3NsdWIuYy0yODU2LVxcbm1tL3NsdWIuYzoyODU3OlxcdFZNX1dBUk5fT05fT05DRShzaGVhZi1cXHUwMDNlc2l6ZSBcXHUwMDNlIDApO1xcbm1tL3NsdWIuYy0yODU4LVxcbm1tL3NsdWIuYy0yODU5LVxcdGlmICh1bmxpa2VseShmcmVlX2ZsYWdzIFxcdTAwMjYgU0xBQl9GUkVFX05PTE9DSykpXFxubW0vc2x1Yi5jOjI4NjA6XFx0XFx0a2ZyZWVfbm9sb2NrKHNoZWFmKTtcXG5tbS9zbHViLmMtMjg2MS1cXHRlbHNlXFxubW0vc2x1Yi5jOjI4NjI6XFx0XFx0a2ZyZWUoc2hlYWYpO1xcbm1tL3NsdWIuYy0yODYzLVxcbi0tXFxubW0vc2x1Yi5jLTI4NjYtXFxubW0vc2x1Yi5jOjI4Njc6c3RhdGljIHZvaWQgZnJlZV9lbXB0eV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0yODY4LXtcXG5tbS9zbHViLmM6Mjg2OTpcXHRfX2ZyZWVfZW1wdHlfc2hlYWYocywgc2hlYWYsIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG5tbS9zbHViLmMtMjg3MC19XFxuLS1cXG5tbS9zbHViLmM9Mjg3Mz1yZWZpbGxfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy0yODc1LVxcbm1tL3NsdWIuYzoyODc2OnN0YXRpYyBpbnQgcmVmaWxsX3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYsXFxubW0vc2x1Yi5jLTI4NzctXFx0XFx0XFx0IGdmcF90IGdmcClcXG5tbS9zbHViLmMtMjg3OC17XFxubW0vc2x1Yi5jOjI4Nzk6XFx0aW50IHRvX2ZpbGwgPSBzLVxcdTAwM2VzaGVhZl9jYXBhY2l0eSAtIHNoZWFmLVxcdTAwM2VzaXplO1xcbm1tL3NsdWIuYy0yODgwLVxcdGludCBmaWxsZWQ7XFxuLS1cXG5tbS9zbHViLmMtMjg4NC1cXG5tbS9zbHViLmM6Mjg4NTpcXHRmaWxsZWQgPSByZWZpbGxfb2JqZWN0cyhzLCBcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbc2hlYWYtXFx1MDAzZXNpemVdLCBnZnAsIHRvX2ZpbGwsXFxubW0vc2x1Yi5jLTI4ODYtXFx0XFx0XFx0XFx0dG9fZmlsbCk7XFxubW0vc2x1Yi5jLTI4ODctXFxubW0vc2x1Yi5jOjI4ODg6XFx0c2hlYWYtXFx1MDAzZXNpemUgKz0gZmlsbGVkO1xcbm1tL3NsdWIuYy0yODg5LVxcbi0tXFxubW0vc2x1Yi5jLTI4OTgtLypcXG5tbS9zbHViLmM6Mjg5OTogKiBNYXhpbXVtIG51bWJlciBvZiBvYmplY3RzIGZyZWVkIGR1cmluZyBhIHNpbmdsZSBmbHVzaCBvZiBtYWluIHBjcyBzaGVhZi5cXG5tbS9zbHViLmMtMjkwMC0gKiBUcmFuc2xhdGVzIGRpcmVjdGx5IHRvIGFuIG9uLXN0YWNrIGFycmF5IHNpemUuXFxuLS1cXG5tbS9zbHViLmM9MjkwND1zdGF0aWMgdm9pZCBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApO1xcbi0tXFxubW0vc2x1Yi5jLTI5MDYtLypcXG5tbS9zbHViLmM6MjkwNzogKiBGcmVlIGFsbCBvYmplY3RzIGZyb20gdGhlIG1haW4gc2hlYWYuIEluIG9yZGVyIHRvIHBlcmZvcm1cXG5tbS9zbHViLmM6MjkwODogKiBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKCkgb3V0c2lkZSBvZiBjcHVfc2hlYXZlcy1cXHUwMDNlbG9jaywgd29yayBpbiBiYXRjaGVzIHdoZXJlXFxubW0vc2x1Yi5jLTI5MDktICogb2JqZWN0IHBvaW50ZXJzIGFyZSBtb3ZlZCB0byBhIG9uLXN0YWNrIGFycmF5IHVuZGVyIHRoZSBsb2NrLiBUbyBib3VuZCB0aGVcXG4tLVxcbm1tL3NsdWIuYy0yOTExLSAqXFxubW0vc2x1Yi5jOjI5MTI6ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayBsb2NrZWQsIHJldHVybnMgd2l0aCB0aGUgbG9ja1xcbm1tL3NsdWIuYy0yOTEzLSAqIHVubG9ja2VkLlxcbi0tXFxubW0vc2x1Yi5jLTI5MTYtICovXFxubW0vc2x1Yi5jOjI5MTc6c3RhdGljIHVuc2lnbmVkIGludCBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTI5MTgte1xcbm1tL3NsdWIuYzoyOTE5OlxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XFxubW0vc2x1Yi5jLTI5MjAtXFx0dW5zaWduZWQgaW50IGJhdGNoLCByZW1haW5pbmc7XFxubW0vc2x1Yi5jLTI5MjEtXFx0dm9pZCAqb2JqZWN0c1tQQ1NfQkFUQ0hfTUFYXTtcXG5tbS9zbHViLmM6MjkyMjpcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWY7XFxubW0vc2x1Yi5jLTI5MjMtXFxubW0vc2x1Yi5jOjI5MjQ6XFx0c2xhYl9sb2NrZGVwX2Fzc2VydF9oZWxkKHRoaXNfY3B1X3B0cihcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKTtcXG5tbS9zbHViLmMtMjkyNS1cXG5tbS9zbHViLmM6MjkyNjpcXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMpO1xcbm1tL3NsdWIuYzoyOTI3OlxcdHNoZWFmID0gcGNzLVxcdTAwM2VtYWluO1xcbm1tL3NsdWIuYy0yOTI4LVxcbm1tL3NsdWIuYzoyOTI5OlxcdGJhdGNoID0gbWluKFBDU19CQVRDSF9NQVgsIHNoZWFmLVxcdTAwM2VzaXplKTtcXG5tbS9zbHViLmMtMjkzMC1cXG5tbS9zbHViLmM6MjkzMTpcXHRzaGVhZi1cXHUwMDNlc2l6ZSAtPSBiYXRjaDtcXG5tbS9zbHViLmM6MjkzMjpcXHRtZW1jcHkob2JqZWN0cywgc2hlYWYtXFx1MDAzZW9iamVjdHMgKyBzaGVhZi1cXHUwMDNlc2l6ZSwgYmF0Y2ggKiBzaXplb2Yodm9pZCAqKSk7XFxubW0vc2x1Yi5jLTI5MzMtXFxubW0vc2x1Yi5jOjI5MzQ6XFx0cmVtYWluaW5nID0gc2hlYWYtXFx1MDAzZXNpemU7XFxubW0vc2x1Yi5jLTI5MzUtXFxubW0vc2x1Yi5jOjI5MzY6XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxubW0vc2x1Yi5jLTI5MzctXFxuLS1cXG5tbS9zbHViLmMtMjk0NC1cXG5tbS9zbHViLmM6Mjk0NTpzdGF0aWMgdm9pZCBzaGVhZl9mbHVzaF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0yOTQ2LXtcXG4tLVxcbm1tL3NsdWIuYy0yOTQ5LVxcdGRvIHtcXG5tbS9zbHViLmM6Mjk1MDpcXHRcXHRsb2NhbF9sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxubW0vc2x1Yi5jLTI5NTEtXFxubW0vc2x1Yi5jOjI5NTI6XFx0XFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xcbm1tL3NsdWIuYy0yOTUzLVxcbi0tXFxubW0vc2x1Yi5jLTI5NTctLypcXG5tbS9zbHViLmM6Mjk1ODogKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1haW4gc2hlYWYgd2FzIGF0IGxlYXN0IHBhcnRpYWxseSBmbHVzaGVkLlxcbm1tL3NsdWIuYy0yOTU5LSAqL1xcbm1tL3NsdWIuYzoyOTYwOnN0YXRpYyBib29sIHNoZWFmX3RyeV9mbHVzaF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0yOTYxLXtcXG4tLVxcbm1tL3NsdWIuYy0yOTY1LVxcdGRvIHtcXG5tbS9zbHViLmM6Mjk2NjpcXHRcXHRpZiAoIWxvY2FsX3RyeWxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKSlcXG5tbS9zbHViLmMtMjk2Ny1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubW0vc2x1Yi5jLTI5NjktXFx0XFx0cmV0ID0gdHJ1ZTtcXG5tbS9zbHViLmM6Mjk3MDpcXHRcXHRyZW1haW5pbmcgPSBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2gocyk7XFxubW0vc2x1Yi5jLTI5NzEtXFxuLS1cXG5tbS9zbHViLmMtMjk3Ny0vKlxcbm1tL3NsdWIuYzoyOTc4OiAqIEZyZWUgYWxsIG9iamVjdHMgZnJvbSBhIHNoZWFmIHRoYXQncyB1bnVzZWQsIGkuZS4gbm90IGxpbmtlZCB0byBhbnlcXG5tbS9zbHViLmM6Mjk3OTogKiBjcHVfc2hlYXZlcywgc28gd2UgbmVlZCBubyBsb2NraW5nIGFuZCBiYXRjaGluZy4gVGhlIGxvY2tpbmcgaXMgYWxzbyBub3RcXG5tbS9zbHViLmM6Mjk4MDogKiBuZWNlc3Nhcnkgd2hlbiBmbHVzaGluZyBjcHUncyBzaGVhdmVzIChib3RoIHNwYXJlIGFuZCBtYWluKSBkdXJpbmcgY3B1XFxubW0vc2x1Yi5jLTI5ODEtICogaG90cmVtb3ZlIGFzIHRoZSBjcHUgaXMgbm90IGV4ZWN1dGluZyBhbnltb3JlLlxcbm1tL3NsdWIuYy0yOTgyLSAqL1xcbm1tL3NsdWIuYzoyOTgzOnN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX3VudXNlZChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0yOTg0LXtcXG5tbS9zbHViLmM6Mjk4NTpcXHRpZiAoIXNoZWFmLVxcdTAwM2VzaXplKVxcbm1tL3NsdWIuYy0yOTg2LVxcdFxcdHJldHVybjtcXG5tbS9zbHViLmMtMjk4Ny1cXG5tbS9zbHViLmM6Mjk4ODpcXHRzdGF0X2FkZChzLCBTSEVBRl9GTFVTSCwgc2hlYWYtXFx1MDAzZXNpemUpO1xcbm1tL3NsdWIuYy0yOTg5LVxcbm1tL3NsdWIuYzoyOTkwOlxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2hlYWYtXFx1MDAzZXNpemUsIFxcdTAwMjZzaGVhZi1cXHUwMDNlb2JqZWN0c1swXSk7XFxubW0vc2x1Yi5jLTI5OTEtXFxubW0vc2x1Yi5jOjI5OTI6XFx0c2hlYWYtXFx1MDAzZXNpemUgPSAwO1xcbm1tL3NsdWIuYy0yOTkzLX1cXG5tbS9zbHViLmMtMjk5NC1cXG5tbS9zbHViLmM6Mjk5NTpzdGF0aWMgYm9vbCBfX3JjdV9mcmVlX3NoZWFmX3ByZXBhcmUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jOjI5OTY6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXFxubW0vc2x1Yi5jLTI5OTcte1xcbm1tL3NsdWIuYy0yOTk4LVxcdGJvb2wgaW5pdCA9IHNsYWJfd2FudF9pbml0X29uX2ZyZWUocyk7XFxubW0vc2x1Yi5jOjI5OTk6XFx0dm9pZCAqKnAgPSBcXHUwMDI2c2hlYWYtXFx1MDAzZW9iamVjdHNbMF07XFxubW0vc2x1Yi5jLTMwMDAtXFx0dW5zaWduZWQgaW50IGkgPSAwO1xcbi0tXFxubW0vc2x1Yi5jLTMwMDItXFxubW0vc2x1Yi5jOjMwMDM6XFx0d2hpbGUgKGkgXFx1MDAzYyBzaGVhZi1cXHUwMDNlc2l6ZSkge1xcbm1tL3NsdWIuYy0zMDA0LVxcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xcbi0tXFxubW0vc2x1Yi5jLTMwMDktXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCB0cnVlKSkpIHtcXG5tbS9zbHViLmM6MzAxMDpcXHRcXHRcXHRwW2ldID0gcFstLXNoZWFmLVxcdTAwM2VzaXplXTtcXG5tbS9zbHViLmMtMzAxMS1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3NsdWIuYy0zMDIyLVxcbm1tL3NsdWIuYzozMDIzOnN0YXRpYyB2b2lkIHJjdV9mcmVlX3NoZWFmX25vYmFybihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxubW0vc2x1Yi5jLTMwMjQte1xcbm1tL3NsdWIuYzozMDI1OlxcdHN0cnVjdCBzbGFiX3NoZWFmICpzaGVhZjtcXG5tbS9zbHViLmMtMzAyNi1cXHRzdHJ1Y3Qga21lbV9jYWNoZSAqcztcXG5tbS9zbHViLmMtMzAyNy1cXG5tbS9zbHViLmM6MzAyODpcXHRzaGVhZiA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc2xhYl9zaGVhZiwgcmN1X2hlYWQpO1xcbm1tL3NsdWIuYzozMDI5OlxcdHMgPSBzaGVhZi1cXHUwMDNlY2FjaGU7XFxubW0vc2x1Yi5jLTMwMzAtXFxubW0vc2x1Yi5jOjMwMzE6XFx0X19yY3VfZnJlZV9zaGVhZl9wcmVwYXJlKHMsIHNoZWFmKTtcXG5tbS9zbHViLmMtMzAzMi1cXG5tbS9zbHViLmM6MzAzMzpcXHRzaGVhZl9mbHVzaF91bnVzZWQocywgc2hlYWYpO1xcbm1tL3NsdWIuYy0zMDM0LVxcbm1tL3NsdWIuYzozMDM1OlxcdGZyZWVfZW1wdHlfc2hlYWYocywgc2hlYWYpO1xcbm1tL3NsdWIuYy0zMDM2LX1cXG4tLVxcbm1tL3NsdWIuYy0zMDM5LSAqIENhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgbWlncmF0aW9uIGlzIGRpc2FibGVkIGluIG9yZGVyIHRvIGZ1bGx5IGZsdXNoXFxubW0vc2x1Yi5jOjMwNDA6ICogc2luZ2xlIGNwdSdzIHNoZWF2ZXNcXG5tbS9zbHViLmMtMzA0MS0gKlxcbi0tXFxubW0vc2x1Yi5jPTMwNDc9c3RhdGljIHZvaWQgcGNzX2ZsdXNoX2FsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtMzA0OC17XFxubW0vc2x1Yi5jOjMwNDk6XFx0c3RydWN0IHNsdWJfcGVyY3B1X3NoZWF2ZXMgKnBjcztcXG5tbS9zbHViLmM6MzA1MDpcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqc3BhcmUsICpyY3VfZnJlZTtcXG5tbS9zbHViLmMtMzA1MS1cXG5tbS9zbHViLmM6MzA1MjpcXHRsb2NhbF9sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxubW0vc2x1Yi5jOjMwNTM6XFx0cGNzID0gdGhpc19jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzKTtcXG5tbS9zbHViLmMtMzA1NC1cXG4tLVxcbm1tL3NsdWIuYy0zMDYwLVxcbm1tL3NsdWIuYzozMDYxOlxcdGxvY2FsX3VubG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spO1xcbm1tL3NsdWIuYy0zMDYyLVxcbm1tL3NsdWIuYy0zMDYzLVxcdGlmIChzcGFyZSkge1xcbm1tL3NsdWIuYzozMDY0OlxcdFxcdHNoZWFmX2ZsdXNoX3VudXNlZChzLCBzcGFyZSk7XFxubW0vc2x1Yi5jOjMwNjU6XFx0XFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBzcGFyZSk7XFxubW0vc2x1Yi5jLTMwNjYtXFx0fVxcbi0tXFxubW0vc2x1Yi5jLTMwNjgtXFx0aWYgKHJjdV9mcmVlKVxcbm1tL3NsdWIuYzozMDY5OlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZyY3VfZnJlZS1cXHUwMDNlcmN1X2hlYWQsIHJjdV9mcmVlX3NoZWFmX25vYmFybik7XFxubW0vc2x1Yi5jLTMwNzAtXFxubW0vc2x1Yi5jOjMwNzE6XFx0c2hlYWZfZmx1c2hfbWFpbihzKTtcXG5tbS9zbHViLmMtMzA3Mi19XFxuLS1cXG5tbS9zbHViLmM9MzA3ND1zdGF0aWMgdm9pZCBfX3Bjc19mbHVzaF9hbGxfY3B1KHN0cnVjdCBrbWVtX2NhY2hlICpzLCB1bnNpZ25lZCBpbnQgY3B1KVxcbm1tL3NsdWIuYy0zMDc1LXtcXG5tbS9zbHViLmM6MzA3NjpcXHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzO1xcbm1tL3NsdWIuYy0zMDc3LVxcbm1tL3NsdWIuYzozMDc4OlxcdHBjcyA9IHBlcl9jcHVfcHRyKHMtXFx1MDAzZWNwdV9zaGVhdmVzLCBjcHUpO1xcbm1tL3NsdWIuYy0zMDc5LVxcbm1tL3NsdWIuYy0zMDgwLVxcdC8qIFRoZSBjcHUgaXMgbm90IGV4ZWN1dGluZyBhbnltb3JlIHNvIHdlIGRvbid0IG5lZWQgcGNzLVxcdTAwM2Vsb2NrICovXFxubW0vc2x1Yi5jOjMwODE6XFx0c2hlYWZfZmx1c2hfdW51c2VkKHMsIHBjcy1cXHUwMDNlbWFpbik7XFxubW0vc2x1Yi5jLTMwODItXFx0aWYgKHBjcy1cXHUwMDNlc3BhcmUpIHtcXG5tbS9zbHViLmM6MzA4MzpcXHRcXHRzaGVhZl9mbHVzaF91bnVzZWQocywgcGNzLVxcdTAwM2VzcGFyZSk7XFxubW0vc2x1Yi5jOjMwODQ6XFx0XFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBwY3MtXFx1MDAzZXNwYXJlKTtcXG5tbS9zbHViLmMtMzA4NS1cXHRcXHRwY3MtXFx1MDAzZXNwYXJlID0gTlVMTDtcXG4tLVxcbm1tL3NsdWIuYy0zMDg4LVxcdGlmIChwY3MtXFx1MDAzZXJjdV9mcmVlKSB7XFxubW0vc2x1Yi5jOjMwODk6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBjcy1cXHUwMDNlcmN1X2ZyZWUtXFx1MDAzZXJjdV9oZWFkLCByY3VfZnJlZV9zaGVhZl9ub2Jhcm4pO1xcbm1tL3NsdWIuYy0zMDkwLVxcdFxcdHBjcy1cXHUwMDNlcmN1X2ZyZWUgPSBOVUxMO1xcbi0tXFxubW0vc2x1Yi5jPTMwOTQ9c3RhdGljIHZvaWQgcGNzX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMzEwMS1cXHQgKi9cXG5tbS9zbHViLmM6MzEwMjpcXHRpZiAoIXMtXFx1MDAzZWNwdV9zaGVhdmVzKVxcbm1tL3NsdWIuYy0zMTAzLVxcdFxcdHJldHVybjtcXG5tbS9zbHViLmMtMzEwNC1cXG5tbS9zbHViLmM6MzEwNTpcXHQvKiBwY3MtXFx1MDAzZW1haW4gY2FuIG9ubHkgcG9pbnQgdG8gdGhlIGJvb3RzdHJhcCBzaGVhZiwgbm90aGluZyB0byBmcmVlICovXFxubW0vc2x1Yi5jOjMxMDY6XFx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcXG5tbS9zbHViLmMtMzEwNy1cXHRcXHRnb3RvIGZyZWVfcGNzO1xcbi0tXFxubW0vc2x1Yi5jLTMxMDktXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbm1tL3NsdWIuYzozMTEwOlxcdFxcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XFxubW0vc2x1Yi5jLTMxMTEtXFxubW0vc2x1Yi5jOjMxMTI6XFx0XFx0cGNzID0gcGVyX2NwdV9wdHIocy1cXHUwMDNlY3B1X3NoZWF2ZXMsIGNwdSk7XFxubW0vc2x1Yi5jLTMxMTMtXFxuLS1cXG5tbS9zbHViLmMtMzEyMy1cXHRcXHQgKiB3YXJuaW5ncyBoZXJlIHRyaWdnZXIsIGFuZCB3ZSBzaG91bGQgcmF0aGVyIGxlYXZlIG9iamVjdHMgYW5kXFxubW0vc2x1Yi5jOjMxMjQ6XFx0XFx0ICogc2hlYXZlcyB0byBsZWFrIGluIHRoYXQgY2FzZS5cXG5tbS9zbHViLmMtMzEyNS1cXHRcXHQgKi9cXG4tLVxcbm1tL3NsdWIuYy0zMTMwLVxcdFxcdGlmICghV0FSTl9PTihwY3MtXFx1MDAzZW1haW4tXFx1MDAzZXNpemUpKSB7XFxubW0vc2x1Yi5jOjMxMzE6XFx0XFx0XFx0ZnJlZV9lbXB0eV9zaGVhZihzLCBwY3MtXFx1MDAzZW1haW4pO1xcbm1tL3NsdWIuYy0zMTMyLVxcdFxcdFxcdHBjcy1cXHUwMDNlbWFpbiA9IE5VTEw7XFxuLS1cXG5tbS9zbHViLmMtMzEzNi1mcmVlX3BjczpcXG5tbS9zbHViLmM6MzEzNzpcXHRmcmVlX3BlcmNwdShzLVxcdTAwM2VjcHVfc2hlYXZlcyk7XFxubW0vc2x1Yi5jOjMxMzg6XFx0cy1cXHUwMDNlY3B1X3NoZWF2ZXMgPSBOVUxMO1xcbm1tL3NsdWIuYy0zMTM5LX1cXG5tbS9zbHViLmMtMzE0MC1cXG5tbS9zbHViLmM6MzE0MTpzdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKmJhcm5fZ2V0X2VtcHR5X3NoZWFmKHN0cnVjdCBub2RlX2Jhcm4gKmJhcm4sXFxubW0vc2x1Yi5jLTMxNDItXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMzE0My17XFxubW0vc2x1Yi5jOjMxNDQ6XFx0c3RydWN0IHNsYWJfc2hlYWYgKmVtcHR5ID0gTlVMTDtcXG5tbS9zbHViLmMtMzE0NS1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxubW0vc2x1Yi5jLTMxNTUtXFx0aWYgKGxpa2VseShiYXJuLVxcdTAwM2Vucl9lbXB0eSkpIHtcXG5tbS9zbHViLmM6MzE1NjpcXHRcXHRlbXB0eSA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZW1wdHksXFxubW0vc2x1Yi5jOjMxNTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiX3NoZWFmLCBiYXJuX2xpc3QpO1xcbm1tL3NsdWIuYy0zMTU4LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZlbXB0eS1cXHUwMDNlYmFybl9saXN0KTtcXG4tLVxcbm1tL3NsdWIuYy0zMTY5LSAqIGludGVuZGVkIGFjdGlvbiBkdWUgdG8gYSByYWNlIG9yIGNwdSBtaWdyYXRpb24uIFRodXMgdGhleSBkbyBub3QgY2hlY2sgdGhlXFxubW0vc2x1Yi5jOjMxNzA6ICogZW1wdHkgb3IgZnVsbCBzaGVhZiBsaW1pdHMgZm9yIHNpbXBsaWNpdHkuXFxubW0vc2x1Yi5jLTMxNzEtICovXFxubW0vc2x1Yi5jLTMxNzItXFxubW0vc2x1Yi5jOjMxNzM6c3RhdGljIHZvaWQgYmFybl9wdXRfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0zMTc0LXtcXG4tLVxcbm1tL3NsdWIuYy0zMTc4LVxcbm1tL3NsdWIuYzozMTc5OlxcdGxpc3RfYWRkKFxcdTAwMjZzaGVhZi1cXHUwMDNlYmFybl9saXN0LCBcXHUwMDI2YmFybi1cXHUwMDNlc2hlYXZlc19lbXB0eSk7XFxubW0vc2x1Yi5jLTMxODAtXFx0YmFybi1cXHUwMDNlbnJfZW1wdHkrKztcXG4tLVxcbm1tL3NsdWIuYy0zMTg0LVxcbm1tL3NsdWIuYzozMTg1OnN0YXRpYyB2b2lkIGJhcm5fcHV0X2Z1bGxfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybiwgc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbm1tL3NsdWIuYy0zMTg2LXtcXG4tLVxcbm1tL3NsdWIuYy0zMTkwLVxcbm1tL3NsdWIuYzozMTkxOlxcdGxpc3RfYWRkKFxcdTAwMjZzaGVhZi1cXHUwMDNlYmFybl9saXN0LCBcXHUwMDI2YmFybi1cXHUwMDNlc2hlYXZlc19mdWxsKTtcXG5tbS9zbHViLmMtMzE5Mi1cXHRiYXJuLVxcdTAwM2Vucl9mdWxsKys7XFxuLS1cXG5tbS9zbHViLmMtMzE5Ni1cXG5tbS9zbHViLmM6MzE5NzpzdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKmJhcm5fZ2V0X2Z1bGxfb3JfZW1wdHlfc2hlYWYoc3RydWN0IG5vZGVfYmFybiAqYmFybilcXG5tbS9zbHViLmMtMzE5OC17XFxubW0vc2x1Yi5jOjMxOTk6XFx0c3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmID0gTlVMTDtcXG5tbS9zbHViLmMtMzIwMC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxubW0vc2x1Yi5jLTMyMDctXFx0aWYgKGJhcm4tXFx1MDAzZW5yX2Z1bGwpIHtcXG5tbS9zbHViLmM6MzIwODpcXHRcXHRzaGVhZiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZnVsbCwgc3RydWN0IHNsYWJfc2hlYWYsXFxubW0vc2x1Yi5jLTMyMDktXFx0XFx0XFx0XFx0XFx0YmFybl9saXN0KTtcXG5tbS9zbHViLmM6MzIxMDpcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2hlYWYtXFx1MDAzZWJhcm5fbGlzdCk7XFxubW0vc2x1Yi5jLTMyMTEtXFx0XFx0YmFybi1cXHUwMDNlbnJfZnVsbC0tO1xcbm1tL3NsdWIuYy0zMjEyLVxcdH0gZWxzZSBpZiAoYmFybi1cXHUwMDNlbnJfZW1wdHkpIHtcXG5tbS9zbHViLmM6MzIxMzpcXHRcXHRzaGVhZiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZW1wdHksXFxubW0vc2x1Yi5jOjMyMTQ6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiX3NoZWFmLCBiYXJuX2xpc3QpO1xcbm1tL3NsdWIuYzozMjE1OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZzaGVhZi1cXHUwMDNlYmFybl9saXN0KTtcXG5tbS9zbHViLmMtMzIxNi1cXHRcXHRiYXJuLVxcdTAwM2Vucl9lbXB0eS0tO1xcbi0tXFxubW0vc2x1Yi5jLTMyMjAtXFxubW0vc2x1Yi5jOjMyMjE6XFx0cmV0dXJuIHNoZWFmO1xcbm1tL3NsdWIuYy0zMjIyLX1cXG4tLVxcbm1tL3NsdWIuYy0zMjI0LS8qXFxubW0vc2x1Yi5jOjMyMjU6ICogSWYgYSBmdWxsIHNoZWFmIGlzIGF2YWlsYWJsZSwgcmV0dXJuIGl0IGFuZCBwdXQgdGhlIHN1cHBsaWVkIGVtcHR5IG9uZSB0b1xcbm1tL3NsdWIuYzozMjI2OiAqIGJhcm4uIFdlIGlnbm9yZSB0aGUgbGltaXQgb24gZW1wdHkgc2hlYXZlcyBhcyB0aGUgbnVtYmVyIG9mIHNoZWF2ZXMgZG9lc24ndFxcbm1tL3NsdWIuYy0zMjI3LSAqIGNoYW5nZS5cXG5tbS9zbHViLmMtMzIyOC0gKi9cXG5tbS9zbHViLmM6MzIyOTpzdGF0aWMgc3RydWN0IHNsYWJfc2hlYWYgKlxcbm1tL3NsdWIuYzozMjMwOmJhcm5fcmVwbGFjZV9lbXB0eV9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZW1wdHksXFxubW0vc2x1Yi5jLTMyMzEtXFx0XFx0XFx0IGJvb2wgYWxsb3dfc3BpbilcXG5tbS9zbHViLmMtMzIzMi17XFxubW0vc2x1Yi5jOjMyMzM6XFx0c3RydWN0IHNsYWJfc2hlYWYgKmZ1bGwgPSBOVUxMO1xcbm1tL3NsdWIuYy0zMjM0LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5tbS9zbHViLmMtMzI0NC1cXHRpZiAobGlrZWx5KGJhcm4tXFx1MDAzZW5yX2Z1bGwpKSB7XFxubW0vc2x1Yi5jOjMyNDU6XFx0XFx0ZnVsbCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZnVsbCwgc3RydWN0IHNsYWJfc2hlYWYsXFxubW0vc2x1Yi5jLTMyNDYtXFx0XFx0XFx0XFx0XFx0YmFybl9saXN0KTtcXG5tbS9zbHViLmMtMzI0Ny1cXHRcXHRsaXN0X2RlbChcXHUwMDI2ZnVsbC1cXHUwMDNlYmFybl9saXN0KTtcXG5tbS9zbHViLmM6MzI0ODpcXHRcXHRsaXN0X2FkZChcXHUwMDI2ZW1wdHktXFx1MDAzZWJhcm5fbGlzdCwgXFx1MDAyNmJhcm4tXFx1MDAzZXNoZWF2ZXNfZW1wdHkpO1xcbm1tL3NsdWIuYy0zMjQ5LVxcdFxcdGJhcm4tXFx1MDAzZW5yX2Z1bGwtLTtcXG4tLVxcbm1tL3NsdWIuYy0zMjU4LS8qXFxubW0vc2x1Yi5jOjMyNTk6ICogSWYgYW4gZW1wdHkgc2hlYWYgaXMgYXZhaWxhYmxlLCByZXR1cm4gaXQgYW5kIHB1dCB0aGUgc3VwcGxpZWQgZnVsbCBvbmUgdG9cXG5tbS9zbHViLmM6MzI2MDogKiBiYXJuLiBCdXQgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGZ1bGwgc2hlYXZlcywgcmVqZWN0IHRoaXMgd2l0aCAtRTJCSUcuXFxubW0vc2x1Yi5jLTMyNjEtICovXFxubW0vc2x1Yi5jOjMyNjI6c3RhdGljIHN0cnVjdCBzbGFiX3NoZWFmICpcXG5tbS9zbHViLmM6MzI2MzpiYXJuX3JlcGxhY2VfZnVsbF9zaGVhZihzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuLCBzdHJ1Y3Qgc2xhYl9zaGVhZiAqZnVsbCxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTY6NTEuNjE1MTI5NDJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzODQ2NjUyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJDVSBGcmVlaW5nIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiBgbW0vc2x1Yi5jYCBhbmQgYG1tL3NsYWJfY29tbW9uLmNgIHdpdGggcmVnYXJkIHRvIGZ1enppbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgX19rZnJlZV9yY3Vfc2hlYWZgLCBgcmN1X2ZyZWVfc2hlYWZgLCBgcmN1X2ZyZWVfc2hlYWZfbm9iYXJuYCBpbiBgbW0vc2x1Yi5jYCBhbmQgYGt2ZnJlZV9jYWxsX3JjdWAsIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgLCBga2ZyZWVfcmN1X3NoZWFmYCBpbiBgbW0vc2xhYl9jb21tb24uY2AuXG5cbkZpcnN0LCB0aGUgXCJXb3J0aEZ1enppbmdcIiBxdWVzdGlvbi4gWWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcgYmVjYXVzZSB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIGBrZnJlZV9yY3Vfc2hlYWZgLiBTcGVjaWZpY2FsbHksIHVuZGVyIGBQUkVFTVBUX1JUYCwgaXQgYnlwYXNzZXMgdGhlIHNoZWFmLWJhc2VkIGBrZnJlZV9yY3VgIGFuZCBwYXNzZXMgYFNMQUJfRlJFRV9ERUZBVUxUYCB1bmRlciBgIVBSRUVNUFRfUlRgLlxuXG5Ob3csIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGNvbnVuZHJ1bS4gVGhlIGtleSBoZXJlIGlzIGlkZW50aWZ5aW5nICpzcGVjaWZpYyogZnVuY3Rpb25zIGZvciBpbnRlbnNpdmUgZnV6emluZywgd2hpbGUgYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgZnV6emluZyB3aWxsIGJlIHNrZXdlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIHdvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcy4gSSBrbm93IHRoYXQgbWVtb3J5IGFsbG9jYXRpb24vZnJlZSBmdW5jdGlvbnMgbGlrZSBga2ZyZWVgLCBga21hbGxvY2AsIGBjYWxsX3JjdWAsIGBrdmZyZWVfY2FsbF9yY3VgIGFyZSBleHRyZW1lbHkgaG90IHBhdGguIEhvd2V2ZXIsIGBrZnJlZV9jYWxsX3JjdV9ub2xvY2tgIGlzIGEgc3BlY2lmaWMgZW50cnlwb2ludCBmb3IgbG9ja2xlc3MgUkNVIGZyZWUuXG5cbk15IHRob3VnaHRzIGNpcmNsZSBhcm91bmQgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIHdoZXRoZXIgaXQgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgd2hpY2ggaXMgdHJpY2t5IGJlY2F1c2Ugd2hpbGUgYGtmcmVlYCBhbmQgYGttYWxsb2NgIGFyZSBkaXJlY3RseSBjYWxsZWQsIGBrdmZyZWVfY2FsbF9yY3VgIGlzIGNhbGxlZCB3aGVuIFJDVSBvYmplY3RzIGFyZSByZWNsYWltZWQuIFRoaXMgaXMgYSBzdWJ0bGUsIGJ1dCBpbXBvcnRhbnQgZGlzdGluY3Rpb24uIEkgY2FuIHJ1bGUgb3V0IHRoZSBzdGF0aWMgaGVscGVyIGBfX2tmcmVlX3JjdV9zaGVhZmAuIFRoZSBrZXkgaXMgZmluZGluZyBhIGZ1bmN0aW9uIHRoYXQgYmVuZWZpdHMgZnJvbSB0YXJnZXRlZCBmdXp6aW5nLCBidXQgaXNuJ3Qgc28gZ2VuZXJpYyB0aGF0IGZ1enppbmcgaXMgc2tld2VkLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBtb2RpZmllZCBjb2RlIGlzIGp1c3QgYGt2ZnJlZV9jYWxsX3JjdWAgYW5kIHVwZGF0ZWQgY29tbWVudHMgaW4gYG1tL3NsdWIuY2AuIFNvIG15IGJlc3QgYmV0IGlzIGBrdmZyZWVfY2FsbF9yY3VgLCBhcyB0aGUga2V5IEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guXG5cbkZpbmFsbHksIHdoYXQgYWJvdXQgYEVuYWJsZUNvbmZpZ3NgPyBUaGUgbW9zdCByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgUFJFRU1QVF9SVGAsIHNpbmNlIHRoZSBjb25kaXRpb25hbCBjaGFuZ2UgaGluZ2VzIG9uIGl0LiBUaGUgcGF0Y2ggYWRkcyBgaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcdTAwMjZcdTAwMjYga2ZyZWVfcmN1X3NoZWFmKHB0cikpYCBhbmQgYFNMVUJgIGlzIGRlZmF1bHQgeSwgYEtWRlJFRV9SQ1VfQkFUQ0hFRGAgaXMgZGVmYXVsdCB5LiBUaGUgY2hhbmdlcyBhcmUgdHJpZ2dlcmVkIHVuZGVyIGAhUFJFRU1QVF9SVGAuXG5cblRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFBSRUVNUFRfUlRgLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBFWFBFUlRgIGFuZCBgQVJDSF9TVVBQT1JUU19SVGAuIEFsc28gYEtWRlJFRV9SQ1VfQkFUQ0hFRGAsIGFuZCBgIVNMVUJfVElOWWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzowMS45OTk3OTc0MTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTI5NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjkxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5tbS9zbHViLmM9MTkzPWVudW0gc2xhYl9mbGFncyB7XFxuLS1cXG5tbS9zbHViLmMtMTk4LVxcbm1tL3NsdWIuYzoxOTk6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXFxubW0vc2x1Yi5jLTIwMC0jZGVmaW5lIF9fZmFzdHBhdGhfaW5saW5lIF9fYWx3YXlzX2lubGluZVxcbi0tXFxubW0vc2x1Yi5jLTIwNC1cXG5tbS9zbHViLmM6MjA1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYzoyMDY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OXFxubW0vc2x1Yi5jLTIwNy1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuLS1cXG5tbS9zbHViLmM9MjA5PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxubW0vc2x1Yi5jLTIxMC0jZW5kaWZcXG5tbS9zbHViLmM6MjExOiNlbmRpZlxcdFxcdC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTIxMi1cXG5tbS9zbHViLmM6MjEzOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy0yMTQtc3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHN0cmljdF9udW1hKTtcXG4tLVxcbm1tL3NsdWIuYy0yMTYtXFxubW0vc2x1Yi5jOjIxNzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9zbHViLmM6MjE4OkRFRklORV9TVEFUSUNfS0VZX01BWUJFKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcXG5tbS9zbHViLmMtMjE5LVxcdFxcdFxcdHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbi0tXFxubW0vc2x1Yi5jPTIzOT1zdHJ1Y3Qgc2xhYl9vYmpfaXRlciB7XFxuLS1cXG5tbS9zbHViLmMtMjQxLVxcdHZvaWQgKnN0YXJ0O1xcbm1tL3NsdWIuYzoyNDI6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0yNDMtXFx0dW5zaWduZWQgbG9uZyBmcmVlbGlzdF9jb3VudDtcXG4tLVxcbm1tL3NsdWIuYz0yNTQ9dm9pZCAqZml4dXBfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMjcyLVxcbm1tL3NsdWIuYzoyNzM6I2lmbmRlZiBDT05GSUdfU0xVQl9USU5ZXFxubW0vc2x1Yi5jLTI3NC0vKlxcbi0tXFxubW0vc2x1Yi5jPTMyOD1zdHJ1Y3QgdHJhY2sge1xcbm1tL3NsdWIuYy0zMjktXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcdC8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi9cXG5tbS9zbHViLmM6MzMwOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy0zMzEtXFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbi0tXFxubW0vc2x1Yi5jPTM0Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9zeXNmc19wcm9jZXNzX2FsaWFzZXModm9pZCkgeyB9XFxuLS1cXG5tbS9zbHViLmMtMzQ5LVxcbm1tL3NsdWIuYzozNTA6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TTFVCX0RFQlVHKVxcbm1tL3NsdWIuYy0zNTEtc3RhdGljIHZvaWQgZGVidWdmc19zbGFiX2FkZChzdHJ1Y3Qga21lbV9jYWNoZSAqKTtcXG4tLVxcbm1tL3NsdWIuYz0zNjM9ZW51bSBzdGF0X2l0ZW0ge1xcbi0tXFxubW0vc2x1Yi5jLTM5Mi1cXG5tbS9zbHViLmM6MzkzOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy0zOTQtc3RydWN0IGttZW1fY2FjaGVfc3RhdHMge1xcbi0tXFxubW0vc2x1Yi5jPTM5OT1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2kpXFxubW0vc2x1Yi5jLTQwMC17XFxubW0vc2x1Yi5jOjQwMTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtNDAyLVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NDExPXZvaWQgc3RhdF9hZGQoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpLCBpbnQgdilcXG5tbS9zbHViLmMtNDEyLXtcXG5tbS9zbHViLmM6NDEzOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy00MTQtXFx0cmF3X2NwdV9hZGQocy1cXHUwMDNlY3B1X3N0YXRzLVxcdTAwM2VzdGF0W3NpXSwgdik7XFxuLS1cXG5tbS9zbHViLmM9NDU3PXN0cnVjdCBrbWVtX2NhY2hlX25vZGUge1xcbi0tXFxubW0vc2x1Yi5jLTQ2MC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpYWw7XFxubW0vc2x1Yi5jOjQ2MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNDYyLVxcdGF0b21pY19sb25nX3QgbnJfc2xhYnM7XFxuLS1cXG5tbS9zbHViLmM9NTMxPXN0YXRpYyBpbmxpbmUgZnJlZXB0cl90IGZyZWVsaXN0X3B0cl9lbmNvZGUoY29uc3Qgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNTM1LVxcbm1tL3NsdWIuYzo1MzY6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vc2x1Yi5jLTUzNy1cXHRlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpcHRyIF4gcy1cXHUwMDNlcmFuZG9tIF4gc3dhYihwdHJfYWRkcik7XFxuLS1cXG5tbS9zbHViLmM9NTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCAqZnJlZWxpc3RfcHRyX2RlY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy01NDgtXFxubW0vc2x1Yi5jOjU0OTojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9zbHViLmMtNTUwLVxcdGRlY29kZWQgPSAodm9pZCAqKShwdHIudiBeIHMtXFx1MDAzZXJhbmRvbSBeIHN3YWIocHRyX2FkZHIpKTtcXG4tLVxcbm1tL3NsdWIuYz01Njg9c3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCB2b2lkICpmcClcXG4tLVxcbm1tL3NsdWIuYy01NzEtXFxubW0vc2x1Yi5jOjU3MjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9zbHViLmMtNTczLVxcdEJVR19PTihvYmplY3QgPT0gZnApOyAvKiBuYWl2ZSBkZXRlY3Rpb24gb2YgZG91YmxlIGZyZWUgb3IgY29ycnVwdGlvbiAqL1xcbi0tXFxubW0vc2x1Yi5jPTcwMj1zdGF0aWMgaW5saW5lIGJvb2wgX19zbGFiX3VwZGF0ZV9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtNzA2LVxcbm1tL3NsdWIuYzo3MDc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG5tbS9zbHViLmMtNzA4LVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTtcXG4tLVxcbm1tL3NsdWIuYz03NzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG4tLVxcbm1tL3NsdWIuYy03OTAtXFxubW0vc2x1Yi5jOjc5MTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxcbm1tL3NsdWIuYy03OTItXFxuLS1cXG5tbS9zbHViLmM9ODc5PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy04ODUtXFxubW0vc2x1Yi5jOjg4NjojaWYgZGVmaW5lZChDT05GSUdfU0xBQl9PQkpfRVhUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG5tbS9zbHViLmMtODg3LXN0YXRpYyB1bnNpZ25lZCBpbnQgb2JqX2V4dHNfb2Zmc2V0X2luX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYz05MTI9c3RhdGljIGlubGluZSB2b2lkIHNsYWJfc2V0X29ial9leHRzX2luX29iamVjdChzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy05MjAtICovXFxubW0vc2x1Yi5jOjkyMTojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfVk0pIHx8IGRlZmluZWQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpXFxubW0vc2x1Yi5jLTkyMi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpXFxuLS1cXG5tbS9zbHViLmM9OTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2F0dGFjaF9rcHJvYmVfbG9ja2VkKHZvaWQpIHsgfVxcbi0tXFxubW0vc2x1Yi5jLTkzNC1cXG5tbS9zbHViLmM6OTM1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy05MzYtXFxuLS1cXG5tbS9zbHViLmM9OTQ5PXN0YXRpYyB2b2lkIF9fZmlsbF9tYXAodW5zaWduZWQgbG9uZyAqb2JqX21hcCwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtOTYwLVxcbm1tL3NsdWIuYzo5NjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0tVTklUKVxcbm1tL3NsdWIuYy05NjItc3RhdGljIGJvb2wgc2xhYl9hZGRfa3VuaXRfZXJyb3JzKHZvaWQpXFxuLS1cXG5tbS9zbHViLmM9MTAwND1zdGF0aWMgaW5saW5lIHZvaWQgKnJlc3RvcmVfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMTAxNC0gKi9cXG5tbS9zbHViLmM6MTAxNTojaWYgZGVmaW5lZChDT05GSUdfU0xVQl9ERUJVR19PTilcXG5tbS9zbHViLmMtMTAxNi1zdGF0aWMgc2xhYl9mbGFnc190IHNsdWJfZGVidWcgPSBERUJVR19ERUZBVUxUX0ZMQUdTO1xcbi0tXFxubW0vc2x1Yi5jPTEwNTc9c3RhdGljIHN0cnVjdCB0cmFjayAqZ2V0X3RyYWNrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsXFxuLS1cXG5tbS9zbHViLmMtMTA2Ni1cXG5tbS9zbHViLmM6MTA2NzojaWZkZWYgQ09ORklHX1NUQUNLREVQT1RcXG5tbS9zbHViLmMtMTA2OC1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUoZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTEwODY9c3RhdGljIHZvaWQgc2V0X3RyYWNrX3VwZGF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTEwOTEtXFxubW0vc2x1Yi5jOjEwOTI6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXFxubW0vc2x1Yi5jLTEwOTMtXFx0cC1cXHUwMDNlaGFuZGxlID0gaGFuZGxlO1xcbi0tXFxubW0vc2x1Yi5jPTExMjA9c3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0LCB1bnNpZ25lZCBsb25nIHByX3RpbWUpXFxuLS1cXG5tbS9zbHViLmMtMTEyOC1cXHQgICAgICAgcywgKHZvaWQgKil0LVxcdTAwM2VhZGRyLCBwcl90aW1lIC0gdC1cXHUwMDNld2hlbiwgdC1cXHUwMDNlY3B1LCB0LVxcdTAwM2VwaWQpO1xcbm1tL3NsdWIuYzoxMTI5OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy0xMTMwLVxcdGhhbmRsZSA9IFJFQURfT05DRSh0LVxcdTAwM2VoYW5kbGUpO1xcbi0tXFxubW0vc2x1Yi5jPTEzMjA9c3RhdGljIHZvaWQgcmVzdG9yZV9ieXRlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbWVzc2FnZSwgdTggZGF0YSxcXG4tLVxcbm1tL3NsdWIuYy0xMzI2LVxcbm1tL3NsdWIuYzoxMzI3OiNpZmRlZiBDT05GSUdfS01TQU5cXG5tbS9zbHViLmMtMTMyOC0jZGVmaW5lIHBhZF9jaGVja19hdHRyaWJ1dGVzIG5vaW5saW5lIF9fbm9fa21zYW5fY2hlY2tzXFxuLS1cXG5tbS9zbHViLmM9MTMzND1jaGVja19ieXRlc19hbmRfcmVwb3J0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0xMzk3LSAqXFxubW0vc2x1Yi5jOjEzOTg6ICogW01hbmRhdG9yeSBwYWRkaW5nXSAoaWYgQ09ORklHX1NMVUJfREVCVUcgXFx1MDAyNlxcdTAwMjYgU0xBQl9SRURfWk9ORSlcXG5tbS9zbHViLmMtMTM5OS0gKiAgIC0gT25lIG1hbmRhdG9yeSBkZWJ1ZyB3b3JkIHRvIGd1YXJhbnRlZSBhIG1pbmltdW0gcG9pc29uZWQgZ2FwXFxuLS1cXG5tbS9zbHViLmM9MTkwNz1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9zbHViX2RlYnVnKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9zbHViLmMtMTk0MC1cXHQgKiBzbGFiX2RlYnVnIHNob3VsZCBiZSB1bmNoYW5nZWQgKDAgb3IgREVCVUdfREVGQVVMVF9GTEFHUywgZGVwZW5kaW5nXFxubW0vc2x1Yi5jOjE5NDE6XFx0ICogb24gQ09ORklHX1NMVUJfREVCVUdfT04pLiBXZSBjYW4gZXh0ZW5kZWQgdGhhdCB0byBtdWx0aXBsZSBsaXN0cyBhc1xcbm1tL3NsdWIuYy0xOTQyLVxcdCAqIGxvbmcgYXMgdGhlcmUgaXMgbm8gb3B0aW9uIHNwZWNpZnlpbmcgZmxhZ3Mgd2l0aG91dCBhIHNsYWIgbGlzdC5cXG4tLVxcbm1tL3NsdWIuYz0xOTgxPXNsYWJfZmxhZ3NfdCBrbWVtX2NhY2hlX2ZsYWdzKHNsYWJfZmxhZ3NfdCBmbGFncywgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm1tL3NsdWIuYy0yMDM0LX1cXG5tbS9zbHViLmM6MjAzNTojZWxzZSAvKiAhQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtMjAzNi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfb2JqZWN0X2RlYnVnKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpIHt9XFxuLS1cXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxcbm1tL3NsdWIuYy0yMDcwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBvYmplY3RzKSB7fVxcbm1tL3NsdWIuYzoyMDcxOiNlbmRpZiAvKiBDT05GSUdfU0xVQl9ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMDcyLVxcbi0tXFxubW0vc2x1Yi5jLTIwODQtXFxubW0vc2x1Yi5jOjIwODU6I2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcXG5tbS9zbHViLmMtMjA4Ni1cXG5tbS9zbHViLmM6MjA4NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9zbHViLmMtMjA4OC1cXG4tLVxcbm1tL3NsdWIuYz0yMTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjE0OS1cXG5tbS9zbHViLmM6MjE1MDojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTUxLVxcbi0tXFxubW0vc2x1Yi5jPTIxNTQ9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy0yMTU2LVxcbm1tL3NsdWIuYzoyMTU3OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL3NsdWIuYy0yMTU4LVxcbi0tXFxubW0vc2x1Yi5jPTIxNjQ9aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIyMDAtXFxubW0vc2x1Yi5jOjIyMDE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1ZNKSkge1xcbm1tL3NsdWIuYy0yMjAyLVxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpleHRzX2NhY2hlO1xcbi0tXFxubW0vc2x1Yi5jLTIyMTctXFx0bmV3X2V4dHMgPSAodW5zaWduZWQgbG9uZyl2ZWM7XFxubW0vc2x1Yi5jOjIyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yMjE5LVxcdG5ld19leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4tLVxcbm1tL3NsdWIuYz0yMjg1PXN0YXRpYyB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMDEtXFxubW0vc2x1Yi5jOjIzMDI6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yMzAzLVxcdFxcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4tLVxcbm1tL3NsdWIuYy0yMzE3LVxcbm1tL3NsdWIuYzoyMzE4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjMxOS1cXHRcXHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuLS1cXG5tbS9zbHViLmMtMjMyNS1cXG5tbS9zbHViLmM6MjMyNjojZWxzZSAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxubW0vc2x1Yi5jLTIzMjctXFxuLS1cXG5tbS9zbHViLmM9MjM0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMzUwLVxcbm1tL3NsdWIuYzoyMzUxOiNlbmRpZiAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxubW0vc2x1Yi5jLTIzNTItXFxubW0vc2x1Yi5jOjIzNTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzNTQtXFxuLS1cXG5tbS9zbHViLmM9MjQ2OT1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDgwLVxcbm1tL3NsdWIuYzoyNDgxOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0ODItXFxuLS1cXG5tbS9zbHViLmM9MjQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDk4LVxcbm1tL3NsdWIuYzoyNDk5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3NsdWIuYy0yNTAwLVxcbm1tL3NsdWIuYy0yNTAxLVxcbm1tL3NsdWIuYzoyNTAyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjUwMy1cXG4tLVxcbm1tL3NsdWIuYz0yNTUzPWJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy0yNjEwLVxcbm1tL3NsdWIuYzoyNjExOiNlbHNlIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3NsdWIuYy0yNjEyLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYz0yNjI1PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI2MjgtfVxcbm1tL3NsdWIuYzoyNjI5OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5tbS9zbHViLmMtMjYzMC1cXG5tbS9zbHViLmM6MjYzMTojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXFxubW0vc2x1Yi5jLTI2MzItc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKTtcXG4tLVxcbm1tL3NsdWIuYz0yNjM0PXN0cnVjdCByY3VfZGVsYXllZF9mcmVlIHtcXG4tLVxcbm1tL3NsdWIuYy0yNjQ0LSAqIFJldHVybnMgdHJ1ZSBpZiBmcmVlaW5nIG9mIHRoZSBvYmplY3QgY2FuIHByb2NlZWQsIGZhbHNlIGlmIGl0cyByZXVzZVxcbm1tL3NsdWIuYzoyNjQ1OiAqIHdhcyBkZWxheWVkIGJ5IENPTkZJR19TTFVCX1JDVV9ERUJVRyBvciBLQVNBTiBxdWFyYW50aW5lLCBvciBpdCB3YXMgcmV0dXJuZWRcXG5tbS9zbHViLmMtMjY0Ni0gKiB0byBLRkVOQ0UuXFxuLS1cXG5tbS9zbHViLmM9MjY2Nz1ib29sIHNsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICp4LCBib29sIGluaXQsXFxuLS1cXG5tbS9zbHViLmMtMjY5NS1cXG5tbS9zbHViLmM6MjY5NjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXFxubW0vc2x1Yi5jLTI2OTctXFx0aWYgKHN0aWxsX2FjY2Vzc2libGUpIHtcXG4tLVxcbm1tL3NsdWIuYy0yNzE1LVxcdH1cXG5tbS9zbHViLmM6MjcxNjojZW5kaWYgLyogQ09ORklHX1NMVUJfUkNVX0RFQlVHICovXFxubW0vc2x1Yi5jLTI3MTctXFxuLS1cXG5tbS9zbHViLmM9MzMzMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTMzNjAtXFxubW0vc2x1Yi5jOjMzNjE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zMzYyLS8qIFByZS1pbml0aWFsaXplIHRoZSByYW5kb20gc2VxdWVuY2UgY2FjaGUgKi9cXG4tLVxcbm1tL3NsdWIuYz0zNDA5PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2ZyZWVsaXN0X3JhbmRvbWl6YXRpb24odm9pZCkgeyB9XFxubW0vc2x1Yi5jOjM0MTA6I2VuZGlmIC8qIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTSAqL1xcbm1tL3NsdWIuYy0zNDExLVxcbi0tXFxubW0vc2x1Yi5jPTM0NDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDgwLVxcbm1tL3NsdWIuYzozNDgxOiNpZmRlZiBDT05GSUdfNjRCSVRcXG5tbS9zbHViLmMtMzQ4Mi1cXHRpZiAoY2FjaGVfbmVlZHNfb2JqY2cocykpXFxuLS1cXG5tbS9zbHViLmM9MzYzND1zdGF0aWMgdm9pZCAqYWxsb2Nfc2luZ2xlX2Zyb21fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zNjQwLVxcbm1tL3NsdWIuYzozNjQxOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy0zNjQyLVxcdGlmIChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSB7XFxuLS1cXG5tbS9zbHViLmM9MzY2OD1zdGF0aWMgaW5saW5lIHZvaWQgKm5leHRfc2xhYl9vYmooc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMzY3MC17XFxubW0vc2x1Yi5jOjM2NzE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zNjcyLVxcdGlmIChpdGVyLVxcdTAwM2VyYW5kb20pIHtcXG4tLVxcbm1tL3NsdWIuYz0zNzE4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2l0ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTM3MjQtXFxubW0vc2x1Yi5jOjM3MjU6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zNzI2LVxcdGl0ZXItXFx1MDAzZXJhbmRvbSA9IChzbGFiLVxcdTAwM2VvYmplY3RzIFxcdTAwM2U9IDIgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlcmFuZG9tX3NlcSk7XFxuLS1cXG5tbS9zbHViLmM9Mzg4NT1zdGF0aWMgdm9pZCAqZ2V0X2Zyb21fcGFydGlhbF9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTM5MTMtXFxubW0vc2x1Yi5jOjM5MTQ6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgfHwga21lbV9jYWNoZV9kZWJ1ZyhzKSkge1xcbm1tL3NsdWIuYy0zOTE1LVxcdFxcdFxcdG9iamVjdCA9IGFsbG9jX3NpbmdsZV9mcm9tX3BhcnRpYWwocywgbiwgc2xhYixcXG4tLVxcbm1tL3NsdWIuYz0zOTUwPXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM5NTIte1xcbm1tL3NsdWIuYzozOTUzOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy0zOTU0LVxcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7XFxuLS1cXG5tbS9zbHViLmMtNDAxNy1cXHR9IHdoaWxlIChhbGxvd19zcGluIFxcdTAwMjZcXHUwMDI2IHJlYWRfbWVtc19hbGxvd2VkX3JldHJ5KGNwdXNldF9tZW1zX2Nvb2tpZSkpO1xcbm1tL3NsdWIuYzo0MDE4OiNlbmRpZlxcdC8qIENPTkZJR19OVU1BICovXFxubW0vc2x1Yi5jLTQwMTktXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9zbHViLmM9NDI0OT1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm1tL3NsdWIuYy00MjYxLVxcbm1tL3NsdWIuYzo0MjYyOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MjYzLXN0YXRpYyBpbnQgY291bnRfZnJlZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz00Mjc0PXN0YXRpYyBpbmxpbmUgYm9vbCBmcmVlX2RlYnVnX3Byb2Nlc3Npbmcoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNDMyOS19XFxubW0vc2x1Yi5jOjQzMzA6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHICovXFxubW0vc2x1Yi5jLTQzMzEtXFxubW0vc2x1Yi5jOjQzMzI6I2lmIGRlZmluZWQoQ09ORklHX1NMVUJfREVCVUcpIHx8IGRlZmluZWQoU0xBQl9TVVBQT1JUU19TWVNGUylcXG5tbS9zbHViLmMtNDMzMy1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sXFxuLS1cXG5tbS9zbHViLmMtNDM0NS19XFxubW0vc2x1Yi5jOjQzNDY6I2VuZGlmIC8qIENPTkZJR19TTFVCX0RFQlVHIHx8IFNMQUJfU1VQUE9SVFNfU1lTRlMgKi9cXG5tbS9zbHViLmMtNDM0Ny1cXG5tbS9zbHViLmM6NDM0ODojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNDM0OS0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcXG4tLVxcbm1tL3NsdWIuYz00Mzg3PXNsYWJfb3V0X29mX21lbW9yeShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBuaWQpXFxuLS1cXG5tbS9zbHViLmMtNDQyMC19XFxubW0vc2x1Yi5jOjQ0MjE6I2Vsc2UgLyogQ09ORklHX1NMVUJfREVCVUcgKi9cXG5tbS9zbHViLmMtNDQyMi1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbm1tL3NsdWIuYz00NTMzPXN0YXRpYyB2b2lkICpfX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDU4MS1cXG5tbS9zbHViLmM6NDU4MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBrbWVtX2NhY2hlX2RlYnVnKHMpKSB7XFxubW0vc2x1Yi5jLTQ1ODMtXFx0XFx0b2JqZWN0ID0gYWxsb2Nfc2luZ2xlX2Zyb21fbmV3X3NsYWIocywgc2xhYiwgYWMpO1xcbi0tXFxubW0vc2x1Yi5jPTQ2MDY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXBwbHlfc3RyaWN0X251bWFfcG9saWN5KGludCBub2RlKVxcbm1tL3NsdWIuYy00NjA3LXtcXG5tbS9zbHViLmM6NDYwODojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmMtNDYwOS1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c3RyaWN0X251bWEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9zbHViLmM9NDgyNz12b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTQ4MzItXFxubW0vc2x1Yi5jOjQ4MzM6XFx0bm9kZV9yZXF1ZXN0ZWQgPSBJU19FTkFCTEVEKENPTkZJR19OVU1BKSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IE5VTUFfTk9fTk9ERTtcXG5tbS9zbHViLmMtNDgzNC1cXG4tLVxcbm1tL3NsdWIuYz01NzEyPXN0YXRpYyB2b2lkIF9fc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy01NzIyLVxcbm1tL3NsdWIuYzo1NzIzOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNTcyNC1cXHRcXHRmcmVlX3RvX3BhcnRpYWxfbGlzdChzLCBzbGFiLCBoZWFkLCB0YWlsLCBjbnQsIGFkZHIpO1xcbi0tXFxubW0vc2x1Yi5jPTYxMDM9Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG4tLVxcbm1tL3NsdWIuYy02MTA4LVxcbm1tL3NsdWIuYzo2MTA5OlxcdFZNX1dBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGluKTtcXG5tbS9zbHViLmMtNjExMC1cXG5tbS9zbHViLmM6NjExMTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYy02MTEyLVxcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG4tLVxcbm1tL3NsdWIuYy02MjEwLVxcdHN0YXQocywgRlJFRV9SQ1VfU0hFQUYpO1xcbm1tL3NsdWIuYzo2MjExOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jLTYyMTItXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuLS1cXG5tbS9zbHViLmMtNjIxNi1cXHRzdGF0KHMsIEZSRUVfUkNVX1NIRUFGX0ZBSUwpO1xcbm1tL3NsdWIuYzo2MjE3OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jLTYyMTgtXFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxuLS1cXG5tbS9zbHViLmM9NjIyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTYyMjYtXFxubW0vc2x1Yi5jOjYyMjc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19OVU1BKSlcXG5tbS9zbHViLmMtNjIyOC1cXHRcXHRnb3RvIGNoZWNrX3BmbWVtYWxsb2M7XFxuLS1cXG5tbS9zbHViLmMtNjIzMS1cXG5tbS9zbHViLmM6NjIzMjojaWZkZWYgQ09ORklHX0hBVkVfTUVNT1JZTEVTU19OT0RFU1xcbm1tL3NsdWIuYy02MjMzLVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NjQ5ND12b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcXG4tLVxcbm1tL3NsdWIuYy02NTA5LVxcbm1tL3NsdWIuYzo2NTEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtNjUxMS0vKiBEbyBub3QgaW5saW5lIHRoZSByYXJlIG1lbWNnIGNoYXJnaW5nIGZhaWxlZCBwYXRoIGludG8gdGhlIGFsbG9jYXRpb24gcGF0aCAqL1xcbi0tXFxubW0vc2x1Yi5jPTY1MjU9dm9pZCBzbGFiX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKmhlYWQsXFxuLS1cXG5tbS9zbHViLmMtNjUzOS1cXG5tbS9zbHViLmM6NjU0MDojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXFxubW0vc2x1Yi5jLTY1NDEtc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTY1NjYtfVxcbm1tL3NsdWIuYzo2NTY3OiNlbmRpZiAvKiBDT05GSUdfU0xVQl9SQ1VfREVCVUcgKi9cXG5tbS9zbHViLmMtNjU2OC1cXG5tbS9zbHViLmM6NjU2OTojaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5tbS9zbHViLmMtNjU3MC12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9zbHViLmM9NjYwNz12b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeClcXG4tLVxcbm1tL3NsdWIuYy02NjEyLVxcbm1tL3NsdWIuYzo2NjEzOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEKSB8fFxcbm1tL3NsdWIuYy02NjE0LVxcdCAgICBrbWVtX2NhY2hlX2RlYnVnX2ZsYWdzKHMsIFNMQUJfQ09OU0lTVEVOQ1lfQ0hFQ0tTKSkge1xcbi0tXFxubW0vc2x1Yi5jPTY2MzE9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy02NjM0LVxcbm1tL3NsdWIuYzo2NjM1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy02NjM2LVxcdC8qXFxuLS1cXG5tbS9zbHViLmM9NjY2MD1zdGF0aWMgc2l6ZV90IF9fa3NpemUoY29uc3Qgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTY2NzctXFxubW0vc2x1Yi5jOjY2Nzg6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTY2NzktXFx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgb2JqZWN0KTtcXG4tLVxcbm1tL3NsdWIuYz03MjU2PV9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbm1tL3NsdWIuYy03MzI5LVxcbm1tL3NsdWIuYzo3MzMwOiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy03MzMxLXN0YXRpYyB1bnNpZ25lZCBpbnRcXG4tLVxcbm1tL3NsdWIuYz03NDI3PXN0YXRpYyBib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy03NDMxLVxcbm1tL3NsdWIuYzo3NDMyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpIHx8IGttZW1fY2FjaGVfZGVidWcocykpIHtcXG5tbS9zbHViLmMtNzQzMy1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2xhYl9hbGxvY19jb250ZXh0IGFjID0ge1xcbi0tXFxubW0vc2x1Yi5jPTc1NjA9c3RhdGljIHVuc2lnbmVkIGludCBzbHViX21heF9vcmRlciA9XFxubW0vc2x1Yi5jOjc1NjE6XFx0SVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSA/IDEgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9zbHViLmMtNzU2Mi1zdGF0aWMgdW5zaWduZWQgaW50IHNsdWJfbWluX29iamVjdHM7XFxuLS1cXG5tbS9zbHViLmM9NzY3Mz1pbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuKVxcbi0tXFxubW0vc2x1Yi5jLTc2NzctXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm4tXFx1MDAzZXBhcnRpYWwpO1xcbm1tL3NsdWIuYzo3Njc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03Njc5LVxcdGF0b21pY19sb25nX3NldChcXHUwMDI2bi1cXHUwMDNlbnJfc2xhYnMsIDApO1xcbi0tXFxubW0vc2x1Yi5jLTc2ODQtXFxubW0vc2x1Yi5jOjc2ODU6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTc2ODYtc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYz03NzU0PXN0YXRpYyB2b2lkIGVhcmx5X2ttZW1fY2FjaGVfbm9kZV9hbGxvYyhpbnQgbm9kZSlcXG4tLVxcbm1tL3NsdWIuYy03Nzc3LVxcbm1tL3NsdWIuYzo3Nzc4OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03Nzc5LVxcdGluaXRfb2JqZWN0KGttZW1fY2FjaGVfbm9kZSwgbiwgU0xVQl9SRURfQUNUSVZFKTtcXG4tLVxcbm1tL3NsdWIuYz03ODE2PXZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtNzgxOS1cXHRwY3NfZGVzdHJveShzKTtcXG5tbS9zbHViLmM6NzgyMDojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtNzgyMS1cXHRmcmVlX3BlcmNwdShzLVxcdTAwM2VjcHVfc3RhdHMpO1xcbi0tXFxubW0vc2x1Yi5jPTc4NjU9c3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2hlYWZfY2FwYWNpdHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtNzg3Mi1cXG5tbS9zbHViLmM6Nzg3MzpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU0xVQl9USU5ZKSB8fCBzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfREVCVUdfRkxBR1MpXFxubW0vc2x1Yi5jLTc4NzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9zbHViLmM9NzkxNj1zdGF0aWMgaW50IGNhbGN1bGF0ZV9zaXplcyhzdHJ1Y3Qga21lbV9jYWNoZV9hcmdzICphcmdzLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy03OTI5LVxcbm1tL3NsdWIuYzo3OTMwOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTMxLVxcdC8qXFxuLS1cXG5tbS9zbHViLmMtNzk5Mi1cXG5tbS9zbHViLmM6Nzk5MzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzk5NC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1NUT1JFX1VTRVIpIHtcXG4tLVxcbm1tL3NsdWIuYy04MDA3LVxcdGthc2FuX2NhY2hlX2NyZWF0ZShzLCBcXHUwMDI2c2l6ZSwgXFx1MDAyNnMtXFx1MDAzZWZsYWdzKTtcXG5tbS9zbHViLmM6ODAwODojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODAwOS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBTTEFCX1JFRF9aT05FKSB7XFxuLS1cXG5tbS9zbHViLmMtODAzMC1cXHRhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBzLVxcdTAwM2VhbGlnbik7XFxubW0vc2x1Yi5jOjgwMzE6I2lmIGRlZmluZWQoQ09ORklHX1NMQUJfT0JKX0VYVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXFxubW0vc2x1Yi5jLTgwMzItXFx0aWYgKHNsYWJfYXJnc191bm1lcmdlYWJsZShhcmdzLCBzLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3NsdWIuYz04MDcyPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtODA3My17XFxubW0vc2x1Yi5jOjgwNzQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTgwNzUtXFx0dm9pZCAqYWRkciA9IHNsYWJfYWRkcmVzcyhzbGFiKTtcXG4tLVxcbm1tL3NsdWIuYz04MTM5PWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTc6MDIuMDQ2OTMwNzU0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTUxNjUyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNoZWFmIENhcGFjaXR5IGFuZCBSQ1UgRnJlZWluZyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHJlZ2FyZGluZyBgY2FsY3VsYXRlX3NoZWFmX2NhcGFjaXR5YCwgaXQgc2VlbXMgc2hlYXZlcyBhcmUgYWN0aXZlIHVuZGVyIG5vcm1hbCBgQ09ORklHX1NMVUJgIGNvbmRpdGlvbnMsIHByb3ZpZGVkIHdlIGFyZW4ndCB1c2luZyBgQ09ORklHX1NMVUJfVElOWWAgb3Igc29tZSBkZWJ1ZyBmbGFncy4gR29vZCwgdGhhdCBzZXRzIHRoZSBzdGFnZS5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZXF1aXJlbWVudHMgZm9yIGZ1enppbmc6IGBXb3J0aEZ1enppbmdgIGlzIHRydWUsIGdyZWF0LiBGb3IgYEZvY3VzU3ltYm9sc2AsIHdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUkNVIHNoZWFmIGZyZWVpbmcuIEluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGBfX2tmcmVlX3JjdV9zaGVhZmAsIGFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCAob3IgZXZlbiBga3ZmcmVlX2NhbGxfcmN1YCkuIEJ1dCB3YWl0LCBga3ZmcmVlX2NhbGxfcmN1YCBpcyBhIG1vcmUgY29yZSBBUEkgZW50cnkgcG9pbnQuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoaWNoIGFyZSBiZXN0IHRvIGZvY3VzIG9uPyBUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgdXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBXZWxsLCBgX19rZnJlZV9yY3Vfc2hlYWZgICppcyogbm9uLXN0YXRpYyBhbmQgc3BlY2lmaWNhbGx5IGZvciBSQ1Ugc2hlYWYgZnJlZWluZywgc28gdGhhdCdzIGEgZ29vZCBjaG9pY2UuIEFuZCBga2ZyZWVfY2FsbF9yY3Vfbm9sb2NrYCBpcyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZm9yIGxvY2tsZXNzIGtmcmVlIFJDVSB3aGljaCBzZWVtcyBiZXR0ZXIuIE9yLCB3ZSBjb3VsZCBpbmNsdWRlIHRoZSBnZW5lcmljIGBrdmZyZWVfY2FsbF9yY3VgIGVudHJ5cG9pbnQgYXMgd2VsbCwgdG8gYnJvYWRlbiBjb3ZlcmFnZS4gU28sIEkgdGhpbmsgd2UgY2FuIGNvbmZpZGVudGx5IGxpc3QgYF9fa2ZyZWVfcmN1X3NoZWFmYCBhbmQgYGtmcmVlX2NhbGxfcmN1X25vbG9ja2AgKG9yIGBrdmZyZWVfY2FsbF9yY3VgKS5cblxuRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgd2UgbmVlZCBgS1ZGUkVFX1JDVV9CQVRDSEVEYCBhbmQgYFBSRUVNUFRfUlRgIChhbmQgaXRzIGBFWFBFUlRgIGRlcGVuZGVuY3kpLiBHb3QgaXQuXG5cbk9rYXksIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhcmFtZXRlcnMuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg4NSwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTc6MDYuNDQyMDk3ODQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2NDc5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWRlJFRV9SQ1VfQkFUQ0hFRFwiLFxuICAgIFwiUFJFRU1QVF9SVFwiLFxuICAgIFwiRVhQRVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rZnJlZV9yY3Vfc2hlYWZcIixcbiAgICBcImtmcmVlX2NhbGxfcmN1X25vbG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTTFVCIGFsbG9jYXRvcidzIFJDVSBzaGVhZiBmcmVlaW5nIGxvZ2ljIGluIG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYy4gSXQgYWRqdXN0cyBrZnJlZV9yY3Vfc2hlYWYoKSB0byBhbHdheXMgdXNlIFNMQUJfRlJFRV9ERUZBVUxUIGFuZCB1cGRhdGVzIGt2ZnJlZV9jYWxsX3JjdSgpIHRvIGNvbXBsZXRlbHkgYnlwYXNzIHRoZSBzaGVhZiBsYXllciB1bmRlciBDT05GSUdfUFJFRU1QVF9SVCB0byBhdm9pZCBhY3F1aXJpbmcgc2xlZXBpbmcgd2FpdGxvY2tzIHdoaWxlIGhvbGRpbmcgcmF3IHNwaW5sb2NrcyAoc3VjaCBhcyB0YXNrX3N0cnVjdDo6cGlfbG9jaykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBSQ1UgcmVjbGFpbWluZyBwYXRocyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVkZSRUVfUkNVX0JBVENIRURcIixcbiAgICBcIlBSRUVNUFRfUlRcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa2ZyZWVfcmN1X3NoZWFmXCIsXG4gICAgXCJrZnJlZV9jYWxsX3JjdV9ub2xvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0xVQiBhbGxvY2F0b3IncyBSQ1Ugc2hlYWYgZnJlZWluZyBsb2dpYyBpbiBtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMuIEl0IGFkanVzdHMga2ZyZWVfcmN1X3NoZWFmKCkgdG8gYWx3YXlzIHVzZSBTTEFCX0ZSRUVfREVGQVVMVCBhbmQgdXBkYXRlcyBrdmZyZWVfY2FsbF9yY3UoKSB0byBjb21wbGV0ZWx5IGJ5cGFzcyB0aGUgc2hlYWYgbGF5ZXIgdW5kZXIgQ09ORklHX1BSRUVNUFRfUlQgdG8gYXZvaWQgYWNxdWlyaW5nIHNsZWVwaW5nIHdhaXRsb2NrcyB3aGlsZSBob2xkaW5nIHJhdyBzcGlubG9ja3MgKHN1Y2ggYXMgdGFza19zdHJ1Y3Q6OnBpX2xvY2spLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUkNVIHJlY2xhaW1pbmcgcGF0aHMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE3OjA2LjUxNDc1MzMxM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTM0NDA1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzowNi41MTUxOTYwMzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTMxMjk5NDA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUkNVIHNoZWFmIGRlYWxsb2NhdGlvbiBsb2dpYyBpbiBzbGFiL3NsdWIgKG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYykgdG8gYnlwYXNzIHRoZSBzaGVhdmVzIGxheWVyIGluIGt2ZnJlZV9jYWxsX3JjdSgpIG9uIFBSRUVNUFRfUlQga2VybmVscywgYXZvaWRpbmcgbG9jayBuZXN0aW5nIGlzc3VlcyB3aXRoIHNsZWVwaW5nIGxvY2tzIHVuZGVyIHJhdyBzcGlubG9ja3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhN2YzOWFkMGRjZWE0MzBkNjdjMTM4MDFkZmQwZjk1Y2ZmNmNjOTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMDoxNTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsYWJfY29tbW9uLmMgYi9tbS9zbGFiX2NvbW1vbi5jXG5pbmRleCBiMTliYTFiMzE0ODRjLi43MjIzYTc1OTZkYWJiIDEwMDY0NFxuLS0tIGEvbW0vc2xhYl9jb21tb24uY1xuKysrIGIvbW0vc2xhYl9jb21tb24uY1xuQEAgLTE2NjcsMTQgKzE2NjcsNiBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBrbWVtX2NhY2hlICpzO1xuIFx0c3RydWN0IHNsYWIgKnNsYWI7XG4tXHR1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9ERUZBVUxUO1xuLVxuLVx0Lypcbi1cdCAqIEl0IGlzIG5vdCBzYWZlIHRvIHNwaW4gb24gUFJFRU1QVF9SVCBiZWNhdXNlIHRoZSBrZXJuZWwgbWlnaHQgYmVcbi1cdCAqIGhvbGRpbmcgYSByYXcgc3BpbmxvY2sgYW5kIHNsYWIgYWNxdWlyZXMgc2xlZXBpbmcgbG9ja3MuXG4tXHQgKi9cbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbi1cdFx0ZnJlZV9mbGFncyA9IFNMQUJfRlJFRV9OT0xPQ0s7XG4gXG4gXHRpZiAoaXNfdm1hbGxvY19hZGRyKG9iaikpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC0xNjg1LDcgKzE2NzcsNyBAQCBzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxuIFxuIFx0cyA9IHNsYWItXHUwMDNlc2xhYl9jYWNoZTtcbiBcdGlmIChsaWtlbHkoIUlTX0VOQUJMRUQoQ09ORklHX05VTUEpIHx8IHNsYWJfbmlkKHNsYWIpID09IG51bWFfbWVtX2lkKCkpKVxuLVx0XHRyZXR1cm4gX19rZnJlZV9yY3Vfc2hlYWYocywgb2JqLCBmcmVlX2ZsYWdzKTtcbitcdFx0cmV0dXJuIF9fa2ZyZWVfcmN1X3NoZWFmKHMsIG9iaiwgU0xBQl9GUkVFX0RFRkFVTFQpO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0yMDM0LDcgKzIwMjYsMTMgQEAgdm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxuIFx0aWYgKCFoZWFkKVxuIFx0XHRtaWdodF9zbGVlcCgpO1xuIFxuLVx0aWYgKGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuK1x0LypcbitcdCAqIGt2ZnJlZV9yY3UoKSBpcyBjYWxsZWQgYnkgc2V0X2NwdXNfYWxsb3dlZF9mb3JjZSgpIHdpdGhcbitcdCAqIHRhc2tfc3RydWN0OjpwaV9sb2NrIGFjcXVpcmVkLiBPbiBQUkVFTVBUX1JUIHRoZSBsb2NhbF90cnlsb2NrKClcbitcdCAqIHVzYWdlIGJlbG93IHdpbGwgYWNxdWlyZSB0aGUgd2FpdGxvY2sgd2hpY2ggbXVzdCBiZSBhdm9pZGVkLlxuK1x0ICogVGhlcmVmb3JlIGF2b2lkIGl0IG9uIFBSRUVNUFRfUlQuXG4rXHQgKi9cbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkgXHUwMDI2XHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvLyBRdWV1ZSB0aGUgb2JqZWN0IGJ1dCBkb24ndCB5ZXQgc2NoZWR1bGUgdGhlIGJhdGNoLlxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggZjliNTZjYjQzOWU3MC4uN2E3ZTkwNmEwZTQ0ZCAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNjA4OCw4ICs2MDg4LDkgQEAgc3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIC8qXG4gICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXG4gICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXG4tICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrdmZyZWVfY2FsbF9yY3UoKSBhdm9pZHNcbi0gKiB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLIG9uIFBSRUVNUFRfUlQuXG4rICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxuKyAqIGF2b2lkcyB0aGlzIHByb2JsZW0gYnkgcGFzc2luZyBTTEFCX0ZSRUVfTk9MT0NLLiBrdmZyZWVfY2FsbF9yY3UoKSBpc1xuKyAqIGJ5cGFzc2luZyB0aGUgc2hlYXZlcyBsYXllciBjb21wbGV0ZWx5IG9uIFBSRUVNUFRfUlQuXG4gICpcbiAgKiBIb3dldmVyLCBsb2NrZGVwIHN0aWxsIGNvbXBsYWlucyB0aGF0IGl0IGlzIGludmFsaWQgdG8gYWNxdWlyZSBzcGlubG9ja190XG4gICogd2hpbGUgaG9sZGluZyByYXdfc3BpbmxvY2tfdCwgZXZlbiBvbiAhUFJFRU1QVF9SVCB3aGVyZSBzcGlubG9ja190IGlzIGFcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAwOjE3OjA2LjUxNTE5Njk2M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODk3OTczMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2xhYi9TbHViIFJDVSBGcmVlaW5nIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBhcm91bmQgaG93IGBrZnJlZV9yY3Vfc2hlYWYoKWAgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IGxvY2tpbmcgbWVjaGFuaXNtcywgcGFydGljdWxhcmx5IGluIGEgUFJFRU1QVF9SVCBlbnZpcm9ubWVudC4gIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIHRvIHNldCBgZnJlZV9mbGFnc2AgdG8gYFNMQUJfRlJFRV9OT0xPQ0tgIGlmIGBDT05GSUdfUFJFRU1QVF9SVGAgd2FzIGVuYWJsZWQuIFRoaXMgd2FzIHRvIGF2b2lkIHBvdGVudGlhbCBsb2NrIG5lc3RpbmcgaXNzdWVzIGJlY2F1c2UgYF9fa2ZyZWVfcmN1X3NoZWFmKClgIG1pZ2h0IGFjcXVpcmUgc2xlZXBpbmcgbG9ja3Mgd2hpbGUgcmF3IHNwaW5sb2NrcyBhcmUgaGVsZC5cblxuTm93LCBpdCBsb29rcyBsaWtlIHRoYXQgY29uZGl0aW9uYWwgZmxhZyBzZXR0aW5nIGhhcyBiZWVuIHJlbW92ZWQgd2l0aGluIHRoZSBga2ZyZWVfcmN1X3NoZWFmYCBmdW5jdGlvbiBpdHNlbGYuIEluc3RlYWQsIGl0J3MgYnlwYXNzZWQgaW4gYGt2ZnJlZV9jYWxsX3JjdSgpYC4gVGhlIGxvZ2ljIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGBpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpYCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjYWxsIGBrZnJlZV9yY3Vfc2hlYWYoKWAgYXQgYWxsLiAgRXNzZW50aWFsbHksIG9uIFBSRUVNUFRfUlQsIHdlJ3JlIHNraXBwaW5nIHRoZSBzaGVhZiBjYWNoaW5nIGxheWVyIGVudGlyZWx5LiBUaGlzIGlzIGxpa2VseSB0aGUgcHJlZmVycmVkIHNvbHV0aW9uLCBhcyBpdCBlbnN1cmVzIHdlIGF2b2lkIHRoZSByYXcgc3BpbmxvY2sgaXNzdWUgd2hlcmUgYSBwcmVlbXB0aWJsZSBzcGlubG9jayBtaWdodCBiZSBhY3F1aXJlZCwgYXMgZGVzY3JpYmVkIGJ5IHRoZSBjb21tZW50IGluIGBzbHViLmNgLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgYSBuZWNlc3NhcnkgbWVhc3VyZSBmb3IgbG9jayBuZXN0aW5nIG9uIFBSRUVNUFRfUlQga2VybmVscywgZXNwZWNpYWxseSB3aXRoIHRoZSBgcGlfbG9ja2AgaW4gYHNldF9jcHVzX2FsbG93ZWRfZm9yY2UoKWAuXG5cbkkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGNvbmNlcm5zLiAgTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1bmluaXRpYWxpemVkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UsIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGhhbmRsaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgbm8gb2J2aW91cyBuZXcgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHBvaW50ZXIgcmVhZHMvd3JpdGVzLiBUaGlzIGlzIHB1cmVseSBhIHJlLWFycmFuZ2VtZW50IG9mIGxvY2tpbmcgbG9naWMgZm9yIFJDVSBmcmVlaW5nIGFuZCB0aGUgc2xhYi9zbHViIGxheWVyLlxuXG5JIHdpbGwgc3RpbGwgd2FudCB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIHdpdGggdG9vbHMgbGlrZSBgcmVhZC1maWxlYCBhbmQgYGdyZXBwZXJgIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGNvdmVyZWQgYWxsIHRoZSBkZXRhaWxzIGFuZCBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIGF0IGZpcnN0IGdsYW5jZSwgSSB3b3VsZCBjb25zaWRlciB0aGlzIGEgc2FmZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzoxNi40MTMxNzIxODVaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjU2OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3JjdV9zaGVhZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTQ3Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfa21hbGxvY19ub3JtYWwoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbGFiLmgtNDgwLVxcbm1tL3NsYWIuaDo0ODE6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncyk7XFxubW0vc2xhYi5oLTQ4Mi12b2lkIGZsdXNoX2FsbF9yY3Vfc2hlYXZlcyh2b2lkKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmM9MTI5OT12b2lkIGtmcmVlX2NhbGxfcmN1X25vbG9jayhzdHJ1Y3Qga3ZmcmVlX3JjdV9oZWFkICpoZWFkLCB2b2lkICpwdHIpXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTEzMTUtXFxubW0vc2xhYl9jb21tb24uYzoxMzE2OlxcdGlmICh1bmxpa2VseSghX19rZnJlZV9yY3Vfc2hlYWYoc2xhYi1cXHUwMDNlc2xhYl9jYWNoZSwgcHRyLCBTTEFCX0ZSRUVfTk9MT0NLKSkpXFxubW0vc2xhYl9jb21tb24uYy0xMzE3LVxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE2MjI9c3RhdGljIHZvaWQga2ZyZWVfcmN1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xNjY1LVxcbm1tL3NsYWJfY29tbW9uLmM6MTY2NjpzdGF0aWMgYm9vbCBrZnJlZV9yY3Vfc2hlYWYodm9pZCAqb2JqKVxcbm1tL3NsYWJfY29tbW9uLmMtMTY2Ny17XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE2NzktXFx0aWYgKGxpa2VseSghSVNfRU5BQkxFRChDT05GSUdfTlVNQSkgfHwgc2xhYl9uaWQoc2xhYikgPT0gbnVtYV9tZW1faWQoKSkpXFxubW0vc2xhYl9jb21tb24uYzoxNjgwOlxcdFxcdHJldHVybiBfX2tmcmVlX3JjdV9zaGVhZihzLCBvYmosIFNMQUJfRlJFRV9ERUZBVUxUKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTE2ODEtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTIwMTM9dm9pZCBrdmZyZWVfY2FsbF9yY3Uoc3RydWN0IGt2ZnJlZV9yY3VfaGVhZCAqaGVhZCwgdm9pZCAqcHRyKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0yMDM0LVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6MjAzNTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpIFxcdTAwMjZcXHUwMDI2IGtmcmVlX3JjdV9zaGVhZihwdHIpKVxcbm1tL3NsYWJfY29tbW9uLmMtMjAzNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9zbHViLmM9NDE0OD12b2lkIGZsdXNoX3JjdV9zaGVhdmVzX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTQxNjAtXFx0XFx0ICogd2UgZG9uJ3QgY2hlY2sgaWYgcmN1X2ZyZWUgc2hlYWYgZXhpc3RzIC0gcmFjaW5nXFxubW0vc2x1Yi5jOjQxNjE6XFx0XFx0ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtaWdodCBoYXZlIGp1c3QgcmVtb3ZlZCBpdC5cXG5tbS9zbHViLmMtNDE2Mi1cXHRcXHQgKiBieSBleGVjdXRpbmcgZmx1c2hfcmN1X3NoZWFmKCkgb24gdGhlIGNwdSB3ZSBtYWtlXFxubW0vc2x1Yi5jOjQxNjM6XFx0XFx0ICogc3VyZSB0aGUgX19rZnJlZV9yY3Vfc2hlYWYoKSBmaW5pc2hlZCBpdHMgY2FsbF9yY3UoKVxcbm1tL3NsdWIuYy00MTY0LVxcdFxcdCAqL1xcbi0tXFxubW0vc2x1Yi5jPTYwMzE9c3RhdGljIHZvaWQgcmN1X2ZyZWVfc2hlYWYoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxubW0vc2x1Yi5jLTYwODktICoga3ZmcmVlX2NhbGxfcmN1KCkgY2FuIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGEgcmF3X3NwaW5sb2NrX3QuIFNpbmNlXFxubW0vc2x1Yi5jOjYwOTA6ICogX19rZnJlZV9yY3Vfc2hlYWYoKSBtYXkgYWNxdWlyZSBhIHNwaW5sb2NrX3QgKHNsZWVwaW5nIGxvY2sgb24gUFJFRU1QVF9SVCksXFxubW0vc2x1Yi5jLTYwOTEtICogdGhpcyB3b3VsZCB2aW9sYXRlIGxvY2sgbmVzdGluZyBydWxlcy4gVGhlcmVmb3JlLCBrZnJlZV9jYWxsX3JjdV9ub2xvY2soKVxcbi0tXFxubW0vc2x1Yi5jLTYxMDAtICovXFxubW0vc2x1Yi5jOjYxMDE6c3RhdGljIERFRklORV9XQUlUX09WRVJSSURFX01BUChrZnJlZV9yY3Vfc2hlYWZfbWFwLCBMRF9XQUlUX0NPTkZJRyk7XFxubW0vc2x1Yi5jLTYxMDItXFxubW0vc2x1Yi5jOjYxMDM6Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqLCB1bnNpZ25lZCBpbnQgZnJlZV9mbGFncylcXG5tbS9zbHViLmMtNjEwNC17XFxuLS1cXG5tbS9zbHViLmMtNjExMS1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MTEyOlxcdFxcdGxvY2tfbWFwX2FjcXVpcmVfdHJ5KFxcdTAwMjZrZnJlZV9yY3Vfc2hlYWZfbWFwKTtcXG5tbS9zbHViLmMtNjExMy1cXG4tLVxcbm1tL3NsdWIuYy02MjExLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXFxubW0vc2x1Yi5jOjYyMTI6XFx0XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2a2ZyZWVfcmN1X3NoZWFmX21hcCk7XFxubW0vc2x1Yi5jLTYyMTMtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9zbHViLmMtNjIxNy1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbm1tL3NsdWIuYzo2MjE4OlxcdFxcdGxvY2tfbWFwX3JlbGVhc2UoXFx1MDAyNmtmcmVlX3JjdV9zaGVhZl9tYXApO1xcbm1tL3NsdWIuYy02MjE5LVxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDA6MTc6MTYuNDc0NDMxNjU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNTM3NDA0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipSQ1UgRGVhbGxvY2F0aW9uIENoYW5nZXMgLSBBc3Nlc3NpbmcgdGhlIFJpc2sqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgbW9kaWZpY2F0aW9ucyB3ZSdyZSBsb29raW5nIGF0IGFyZSAqc3BlY2lmaWNhbGx5KiBjZW50ZXJlZCBvbiBSQ1Ugc2hlYWYgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc2xhYiBhbmQgc2x1YiBhbGxvY2F0b3JzLCBhbmQgdGhleSdyZSB0aWVkIHRvIHRoZSBsb2NraW5nIGNvbnN0cmFpbnRzIHRoYXQgUFJFRU1QVF9SVCBrZXJuZWxzIGltcG9zZS4gR29vZC4gRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLlxuXG5UaGUgaW1tZWRpYXRlIHJlbGllZiBpcyB0aGF0IHRoZXJlJ3MgKnplcm8qIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoYXQncyBhIGh1Z2Ugd2luIOKAkyBpdCByZW1vdmVzIGEgY2xhc3Mgb2YgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyByaWdodCBvZmYgdGhlIGJhdC4gRnVydGhlcm1vcmUsIHRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBnb2luZyB0byBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlLiBPa2F5LCBzbyB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGFueSB1c2VyLXNwYWNlIGV4cG9zdXJlIG9mIGtlcm5lbCBpbnRlcm5hbHMsIHdoaWNoIGtlZXBzIHRoaW5ncyBzdHJhaWdodGZvcndhcmQuXG5cbk5vdywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgbXkgcmVhbCBmb2N1cyBzaGlmdHMgdG8gbWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgY29uY2VybnMuIFRoYW5rZnVsbHksIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBjYXRjaCBhbnkgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBsb2NraW5nIGVycm9ycyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSB3aXRoaW4gc2xhYi9zbHViLiBUaGF0J3MgZmFudGFzdGljLiBUaGF0IGtpbmQgb2YgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIGNvdmVyYWdlIHJlYWxseSBidWlsZHMgbXkgY29uZmlkZW5jZS4gSSB0aGluayB3ZeKAmXJlIHdlbGwgcG9zaXRpb25lZCB0byBjYXRjaCBhbnkgZXJyb3JzIGhlcmUuXG5cbkdpdmVuIHRoZSBleGlzdGluZyB0ZXN0IGluZnJhc3RydWN0dXJlLCBpdCBtZWFucyB0aGF0IEtNU0FOLCB3aGlsZSB1c2VmdWwgaW4gc29tZSBvdGhlciBhcmVhcywgaXMgbm90IHJlYWxseSBuZWVkZWQgaGVyZS4gS0FTQU4gaXMgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb24gdGhlIG1lbW9yeSBmcm9udCwgYW5kIExPQ0tERVAgZW5zdXJlcyB0aGUgbG9ja2luZyBzZW1hbnRpY3MgYXJlIHNvdW5kLlxuXG5UaGVyZWZvcmUsIGxldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgYW5kIHByb2NlZWQgd2l0aCBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQ2LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMDoxNzoyMS44MjgxNzQ4NThaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJDVSBzaGVhZiBkZWFsbG9jYXRpb24gbG9naWMgaW4gc2xhYi9zbHViIChtbS9zbGFiX2NvbW1vbi5jIGFuZCBtbS9zbHViLmMpIHRvIGJ5cGFzcyB0aGUgc2hlYXZlcyBsYXllciBpbiBrdmZyZWVfY2FsbF9yY3UoKSBvbiBQUkVFTVBUX1JUIGtlcm5lbHMsIGF2b2lkaW5nIGxvY2sgbmVzdGluZyBpc3N1ZXMgd2l0aCBzbGVlcGluZyBsb2NrcyB1bmRlciByYXcgc3BpbmxvY2tzLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIHNsYWIgbWVtb3J5IGZyZWVpbmcgcGF0aHMgYW5kIFBSRUVNUFRfUlQgbG9jayBjb25zdHJhaW50cy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcGllcyB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBsb2NraW5nIGRlYWRsb2NrIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUkNVIHNoZWFmIGRlYWxsb2NhdGlvbiBsb2dpYyBpbiBzbGFiL3NsdWIgKG1tL3NsYWJfY29tbW9uLmMgYW5kIG1tL3NsdWIuYykgdG8gYnlwYXNzIHRoZSBzaGVhdmVzIGxheWVyIGluIGt2ZnJlZV9jYWxsX3JjdSgpIG9uIFBSRUVNUFRfUlQga2VybmVscywgYXZvaWRpbmcgbG9jayBuZXN0aW5nIGlzc3VlcyB3aXRoIHNsZWVwaW5nIGxvY2tzIHVuZGVyIHJhdyBzcGlubG9ja3MuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggc2xhYiBtZW1vcnkgZnJlZWluZyBwYXRocyBhbmQgUFJFRU1QVF9SVCBsb2NrIGNvbnN0cmFpbnRzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29waWVzIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGxvY2tpbmcgZGVhZGxvY2sgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowp76h8[1] Phase: Succeeded StartedAt: 2026-09-01 00:17:33 +0000 UTC FinishedAt: 2026-09-01 00:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 00:17:33 +0000 UTC FinishedAt: 2026-09-01 00:17:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2] Phase: Succeeded StartedAt: 2026-09-01 00:17:33 +0000 UTC FinishedAt: 2026-09-01 04:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 00:17:33 +0000 UTC FinishedAt: 2026-09-01 04:00:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 00:17:33 +0000 UTC FinishedAt: 2026-09-01 00:17:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 00:17:33 +0000 UTC FinishedAt: 2026-09-01 00:17:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowp76h8/series-workflowp76h8-convert-artifact-1838543705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 00:17:43 +0000 UTC FinishedAt: 2026-09-01 00:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 00:17:43 +0000 UTC FinishedAt: 2026-09-01 00:32:51 +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:*d90676dc-157f-45d6-b6c7-3d8d8f23f2af,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-workflowp76h8/series-workflowp76h8-convert-artifact-1838543705/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": "f34d89b8-8f5c-4eeb-b0af-7cd23338a9ce", "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-workflowp76h8/series-workflowp76h8-build-action-2836009975/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 00:17:43 +0000 UTC FinishedAt: 2026-09-01 00:32:41 +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:*d90676dc-157f-45d6-b6c7-3d8d8f23f2af,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-workflowp76h8/series-workflowp76h8-convert-artifact-1838543705/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": "f34d89b8-8f5c-4eeb-b0af-7cd23338a9ce", "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-workflowp76h8/series-workflowp76h8-build-action-2836009975/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 00:32:51 +0000 UTC FinishedAt: 2026-09-01 00:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 00:32:51 +0000 UTC FinishedAt: 2026-09-01 00:32:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 00:32:51 +0000 UTC FinishedAt: 2026-09-01 00:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 00:32:51 +0000 UTC FinishedAt: 2026-09-01 00:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowp76h8/series-workflowp76h8-convert-artifact-2190803244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 00:33:01 +0000 UTC FinishedAt: 2026-09-01 00:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 00:33:01 +0000 UTC FinishedAt: 2026-09-01 00:34:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f34d89b8-8f5c-4eeb-b0af-7cd23338a9ce,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-workflowp76h8/series-workflowp76h8-build-action-2836009975/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-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 00:35:05 +0000 UTC FinishedAt: 2026-09-01 00:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 00:35:05 +0000 UTC FinishedAt: 2026-09-01 00:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 00:35:05 +0000 UTC FinishedAt: 2026-09-01 00:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 00:35:05 +0000 UTC FinishedAt: 2026-09-01 00:52: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:*d90676dc-157f-45d6-b6c7-3d8d8f23f2af,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-workflowp76h8/series-workflowp76h8-convert-artifact-2190803244/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": "31b0dd61-d811-4b9d-b23c-7d927644ac42", "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-workflowp76h8/series-workflowp76h8-build-action-4021716936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 00:35:05 +0000 UTC FinishedAt: 2026-09-01 00:52:27 +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:*d90676dc-157f-45d6-b6c7-3d8d8f23f2af,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-workflowp76h8/series-workflowp76h8-convert-artifact-2190803244/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": "31b0dd61-d811-4b9d-b23c-7d927644ac42", "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-workflowp76h8/series-workflowp76h8-build-action-4021716936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 00:52:37 +0000 UTC FinishedAt: 2026-09-01 00:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 00:52:37 +0000 UTC FinishedAt: 2026-09-01 00:52:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 00:52:37 +0000 UTC FinishedAt: 2026-09-01 00:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 00:52:37 +0000 UTC FinishedAt: 2026-09-01 00:54:25 +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:*31b0dd61-d811-4b9d-b23c-7d927644ac42,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-workflowp76h8/series-workflowp76h8-build-action-4021716936/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-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 04:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 04:00:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f34d89b8-8f5c-4eeb-b0af-7cd23338a9ce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*31b0dd61-d811-4b9d-b23c-7d927644ac42,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-workflowp76h8/series-workflowp76h8-build-action-2836009975/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-workflowp76h8/series-workflowp76h8-build-action-4021716936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 00:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 00:54:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp76h8/series-workflowp76h8-convert-artifact-120810517/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 00:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 00:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 00:54:35 +0000 UTC FinishedAt: 2026-09-01 00:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 00:54:45 +0000 UTC FinishedAt: 2026-09-01 04:00:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp76h8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__kfree_rcu_sheaf","kfree_call_rcu_nolock"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVFREE_RCU_BATCHED","PREEMPT_RT","EXPERT"],"series_id":"f6f82155-3726-4ce9-9236-69092a1e3e1a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 00:54:45 +0000 UTC FinishedAt: 2026-09-01 04:00:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f34d89b8-8f5c-4eeb-b0af-7cd23338a9ce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*31b0dd61-d811-4b9d-b23c-7d927644ac42,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-workflowp76h8/series-workflowp76h8-build-action-2836009975/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-workflowp76h8/series-workflowp76h8-build-action-4021716936/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-workflowp76h8/series-workflowp76h8-convert-artifact-120810517/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,}