Name: series-workflowth4vx Phase: Succeeded StartedAt: 2026-09-08 07:57:32 +0000 UTC FinishedAt: 2026-09-08 11:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[0] Phase: Succeeded StartedAt: 2026-09-08 07:57:32 +0000 UTC FinishedAt: 2026-09-08 08:03:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 07:57:32 +0000 UTC FinishedAt: 2026-09-08 08:03:05 +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": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "13471fa8-c35c-44d2-a0a3-20013775b4e0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "em_cmpxchg8b", "emulator_cmpxchg_emulated", "x86_emulate_insn", "x86_emulate_instruction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtX2NtcHhjaGc4YiYjMzQ7LAogICAgJiMzNDtlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkJiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc24mIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgdXNlciBzcGFjZSBjb21wYXJlLWFuZC1zd2FwIChfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtIHVzaW5nIGNtcHhjaGcxNmIpIGFuZCBhZGRzIENNUFhDSEcxNkIgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGluIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxuMS4gQWRkaW5nIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBpbmxpbmUgYXNzZW1ibHkgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAgdG8gYXRvbWljYWxseSBjb21wYXJlIGFuZCBzd2FwIDEyOC1iaXQgdmFsdWVzIGF0IHVzZXIgYWRkcmVzc2VzLlxuMi4gVXBkYXRpbmcgYHN0cnVjdCBvcGVyYW5kYCBpbiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgd2l0aGluIGV4aXN0aW5nIHVuaW9ucy5cbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Uga2VybmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cdTAwM2Vkc3QudmFsMTI4YCwgYG9sZGAsIGBuZXdgLCBndWVzdCByZWdpc3RlciB2YWx1ZXMpIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgaW5pdGlhbGl6ZWQgZHVyaW5nIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBleGVjdXRpb24uXG4tIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZ3MgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciAxMjgtYml0IENNUFhDSEcxNkIgZW11bGF0aW9uIHRvIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBpbXBsZW1lbnRzIGEgbmV3IDEyOC1iaXQgdXNlciBjbXB4Y2hnIGlubGluZSBhc3NlbWJseSBwcmltaXRpdmUgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20pIG9uIHg4Nl82NC4gSXQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24gaW4gZW1fY21weGNoZzhiIGFuZCBtb2RpZmllcyBvcGVyYW5kIGhhbmRsaW5nIGluIHg4Nl9lbXVsYXRlX2luc24gYW5kIGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIHZpYSBzdGFuZGFyZCBLVk0gZ3Vlc3QgZW11bGF0aW9uIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiOWU3NDhhNjg5MDI3MTE0OWUyMTFhMjAyMTA1MDA2ZTFkZWU3MWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzo1OToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDNhMGRkM2MyYjIzM2UuLjk0ODkzN2EyNGNjNTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuQEAgLTQwNyw2ICYjNDM7NDA3LDI3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHVubGlrZWx5KCFzdWNjZXNzKSlcdFx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoc3VjY2Vzcyk7XHRcdFx0XHRcdH0pXG4mIzQzOyNlbHNlIC8vICFDT05GSUdfWDg2XzMyXG4mIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbiYjNDM7XHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpO1x0XHRcdFx0XFxcbiYjNDM7XHRhc21fZ290b19vdXRwdXQoXCYjMzQ7XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7MTogXCYjMzQ7IExPQ0tfUFJFRklYIFwmIzM0O2NtcHhjaGcxNmIgJVtwdHJdXFxuXCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHQgICAgIF9BU01fRVhUQUJMRV9VQSgxYiwgJWxbbGFiZWxdKVx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PUBjY3pcJiMzNDsgKHN1Y2Nlc3MpLFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDsmIzQzO2FcJiMzNDsgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFwmIzM0OyYjNDM7ZFwmIzM0OyAoX19vbGRfaGlnaCksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFtwdHJdIFwmIzM0OyYjNDM7bVwmIzM0OyAoKl9wdHIpXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFwmIzM0O2JcJiMzNDsgKCh1NjQpX19uZXcpLFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtjXCYjMzQ7ICgodTY0KSgodTEyOClfX25ldyBcdTAwM2VcdTAwM2UgNjQpKVx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgOiBsYWJlbCk7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQqX29sZCA9ICgodTEyOClfX29sZF9oaWdoIFx1MDAzY1x1MDAzYyA2NCkgfCBfX29sZF9sb3c7XHRcdFxcXG4mIzQzO1x0bGlrZWx5KHN1Y2Nlc3MpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbkBAIC00NjMsNiAmIzQzOzQ4NCwzMiBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuJiM0MzsjZWxzZSAvLyFDT05GSUdfWDg2XzMyXG4mIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbiYjNDM7XHRpbnQgX19yZXN1bHQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpO1x0XHRcdFx0XFxcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7MTogXCYjMzQ7IExPQ0tfUFJFRklYIFwmIzM0O2NtcHhjaGcxNmIgJVtwdHJdXFxuXCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHQgICAgIFwmIzM0O21vdiAkMCwgJVtyZXN1bHRdXFxuXFx0XCYjMzQ7XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICBcJiMzNDtzZXR6ICViW3Jlc3VsdF1cXG5cJiMzNDtcdFx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIFwmIzM0OzI6XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgX0FTTV9FWFRBQkxFX1RZUEVfUkVHKDFiLCAyYiwgRVhfVFlQRV9FRkFVTFRfUkVHLFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICVbcmVzdWx0XSlcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFtyZXN1bHRdIFwmIzM0Oz1xXCYjMzQ7IChfX3Jlc3VsdCksXHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDsmIzQzO2FcJiMzNDsgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFwmIzM0OyYjNDM7ZFwmIzM0OyAoX19vbGRfaGlnaCksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFtwdHJdIFwmIzM0OyYjNDM7bVwmIzM0OyAoKl9wdHIpXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFwmIzM0O2JcJiMzNDsgKCh1NjQpX19uZXcpLFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtjXCYjMzQ7ICgodTY0KSgodTEyOClfX25ldyBcdTAwM2VcdTAwM2UgNjQpKVx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgKHVubGlrZWx5KF9fcmVzdWx0IFx1MDAzYyAwKSlcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGdvdG8gbGFiZWw7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAodW5saWtlbHkoIV9fcmVzdWx0KSlcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXHUwMDNjXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcdFx0XFxcbiYjNDM7XHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbiBcbkBAIC01NTEsMTEgJiM0Mzs1OTgsMTggQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTtcbiBcbi0jaWZuZGVmIENPTkZJR19YODZfMzJcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfMzJcbiYjNDM7LypcbiYjNDM7ICogQWx3YXlzIGZhaWwgb24gMzIgYml0IGFyY2ggb3IgNjQgYXJjaCB3aXRob3V0IDEyOCBiaXQgY21weGNoZyBzdXBwb3J0XG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKSAoeyBCVUlMRF9CVUdfT04oMSk7IDA7IH0pXG4mIzQzOyNlbHNlXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXHRcdFxcXG4gXHRfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O3FcJiMzNDssIFwmIzM0O3JcJiMzNDssIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKVxuJiM0MztcbiAjZW5kaWZcbiBcbiYjNDM7XG4gLypcbiAgKiBGb3JjZSB0aGUgcG9pbnRlciB0byB1XHUwMDNjc2l6ZVx1MDAzZSB0byBtYXRjaCB0aGUgc2l6ZSBleHBlY3RlZCBieSB0aGUgYXNtIGhlbHBlci5cbiAgKiBjbGFuZy9MTFZNIGNvbXBpbGVzIGFsbCBjYXNlcyBhbmQgb25seSBkaXNjYXJkcyB0aGUgdW51c2VkIHBhdGhzIGFmdGVyXG5AQCAtNTgwLDYgJiM0Mzs2MzQsMTQgQEAgZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XG4gXHRjYXNlIDg6XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbSgoX19mb3JjZSB1NjQgKikoX3B0ciksIChfb2xkcCksXFxcbiBcdFx0XHRcdFx0XHQgKF9udmFsKSwgX2xhYmVsKTtcdFx0XFxcbiBcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FzZSAxNjpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1gxNikpXHRcdFx0XHRcXFxuJiM0MztcdFx0XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oXHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdChfX2ZvcmNlIHUxMjggKikoX3B0ciksXHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdChfb2xkcCksIChfbnZhbCksIF9sYWJlbCk7XHRcdFxcXG4mIzQzO1x0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdF9fcmV0ID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1x0XHRcdFx0XFxcbiBcdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X19yZXQ7XHRcdFx0XHRcdFx0fSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuaW5kZXggYzFiMjEyODIxODdmMy4uNTM1ODQyMzM2ZDc2NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcbkBAIC0yMTg0LDI0ICYjNDM7MjE4NCwzNiBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dSMjbWJpdHMgb2xkID0gX19jLVx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRCVUlMRF9CVUdfT04ocmJpdHMgKiAyICE9IG1iaXRzKTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgKCgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHxcdFx0XFxcbiYjNDM7XHQgICAgKCh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgcmJpdHMpICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkRYKSkpIHtcdFx0XFxcbiYjNDM7XHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCk7XHRcdFx0XFxcbiYjNDM7XHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgcmJpdHMpO1x0XHRcdFxcXG4mIzQzO1x0XHRfX2MtXHUwMDNlZWZsYWdzIFx1MDAyNj0gflg4Nl9FRkxBR1NfWkY7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0X19jLVx1MDAzZWRzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpIFx1MDAzY1x1MDAzYyByYml0cykgfFx0XFxcbiYjNDM7XHRcdFx0XHRcdCh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkJYKTtcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdF9fYy1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0fVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9IHdoaWxlICgwKVxuJiM0MztcbiBzdGF0aWMgaW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbiB7XG4tXHR1NjQgb2xkID0gY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NDtcbi1cbi1cdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKDggJiM0MzsgISEoY3R4dC1cdTAwM2VyZXhfYml0cyBcdTAwMjYgUkVYX1cpICogOCAhPSBjdHh0LVx1MDAzZWRzdC5ieXRlcykpXG4gXHRcdHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTtcbiBcbi1cdGlmICgoKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8XG4tXHQgICAgKCh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDMyKSAhPSAodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkRYKSkpIHtcbi1cdFx0KnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkFYKSA9ICh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDApO1xuLVx0XHQqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0XHRjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1xuLVx0fSBlbHNlIHtcbi1cdFx0Y3R4dC1cdTAwM2Vkc3QudmFsNjQgPSAoKHU2NClyZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkNYKSBcdTAwM2NcdTAwM2MgMzIpIHxcbi1cdFx0XHQodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkJYKTtcbi1cbi1cdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcbi1cdH1cbiYjNDM7XHRpZiAoIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykpXG4mIzQzO1x0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDMyLCA2NCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KTtcbiYjNDM7I2VuZGlmXG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbiB9XG4gXG5AQCAtNTQxNCw4ICYjNDM7NTQyNiwxNCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBjaGVja19pbnRlcmNlcHRzKVxuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuIFx0fVxuLVx0LyogQ29weSBmdWxsIDY0LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbi1cdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbiYjNDM7XHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0XG4mIzQzO1x0aWYgKGN0eHQtXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxuJiM0MztcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7XG4mIzQzO1x0ZWxzZVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbiBcbiBzcGVjaWFsX2luc246XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuaW5kZXggM2UzNzVhZjE1YzAzNS4uODk5MTE4NDUyMzNkYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuQEAgLTI2Myw2ICYjNDM7MjYzLDkgQEAgc3RydWN0IG9wZXJhbmQge1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nIG9yaWdfdmFsO1xuIFx0XHR1NjQgb3JpZ192YWw2NDtcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRcdHUxMjggb3JpZ192YWwxMjg7XG4mIzQzOyNlbmRpZlxuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0dW5zaWduZWQgbG9uZyAqcmVnO1xuQEAgLTI3Niw2ICYjNDM7Mjc5LDkgQEAgc3RydWN0IG9wZXJhbmQge1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nIHZhbDtcbiBcdFx0dTY0IHZhbDY0O1xuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NFxuJiM0MztcdFx0dTEyOCB2YWwxMjg7XG4mIzQzOyNlbmRpZlxuIFx0XHRjaGFyIHZhbHB0cltzaXplb2YoYXZ4MjU2X3QpXTtcbiBcdFx0c3NlMTI4X3QgdmVjX3ZhbDtcbiBcdFx0YXZ4MjU2X3QgdmVjX3ZhbDI7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li42MGJlMTZmMDVkNzk0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC01MjcxLDcgJiM0Mzs1MjcxLDcgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuIFx0aW50IHI7XG4gXG4gXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xuLVx0aWYgKGJ5dGVzIFx1MDAzZSA4IHx8IChieXRlcyBcdTAwMjYgKGJ5dGVzIC0gMSkpKVxuJiM0MztcdGlmIChieXRlcyBcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbiBcdFx0Z290byBlbXVsX3dyaXRlO1xuIFxuIFx0Z3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpO1xuQEAgLTUzMTEsNiAmIzQzOzUzMTEsMTEgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuIFx0Y2FzZSA4OlxuIFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xuIFx0XHRicmVhaztcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRjYXNlIDE2OlxuJiM0MztcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTEyOCwgaHZhLCBvbGQsIG5ldyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRCVUcoKTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbV9jbXB4Y2hnOGImIzM0OywKICAgICYjMzQ7ZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnNuJiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ZTc0OGE2ODkwMjcxMTQ5ZTIxMWEyMDIxMDUwMDZlMWRlZTcxZjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjU5OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDNhMGRkM2MyYjIzM2UuLjk0ODkzN2EyNGNjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTQwNyw2ICYjNDM7NDA3LDI3IEBAIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHVubGlrZWx5KCFzdWNjZXNzKSkJCQkJCQlcCiAJCSpfb2xkID0gX19vbGQ7CQkJCQkJXAogCWxpa2VseShzdWNjZXNzKTsJCQkJCX0pCiYjNDM7I2Vsc2UgLy8gIUNPTkZJR19YODZfMzIKJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKQkoewlcCiYjNDM7CWJvb2wgc3VjY2VzczsJCQkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpOwkJXAomIzQzOwl1NjQgX19vbGRfbG93ID0gKHU2NCkqX29sZDsJCQkJCVwKJiM0MzsJdTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCAmZ3Q7Jmd0OyA2NCk7CQkJCVwKJiM0MzsJX190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTsJCQkJXAomIzQzOwlhc21fZ290b19vdXRwdXQoJiMzNDtcbiYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICAmIzM0OzE6ICYjMzQ7IExPQ0tfUFJFRklYICYjMzQ7Y21weGNoZzE2YiAlW3B0cl1cbiYjMzQ7CQlcCiYjNDM7CQkgICAgIF9BU01fRVhUQUJMRV9VQSgxYiwgJWxbbGFiZWxdKQkJCVwKJiM0MzsJCSAgICAgOiAmIzM0Oz1AY2N6JiMzNDsgKHN1Y2Nlc3MpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDsmIzQzO2EmIzM0OyAoX19vbGRfbG93KSwJCQkJXAomIzQzOwkJICAgICAgICYjMzQ7JiM0MztkJiMzNDsgKF9fb2xkX2hpZ2gpLAkJCQlcCiYjNDM7CQkgICAgICAgW3B0cl0gJiMzNDsmIzQzO20mIzM0OyAoKl9wdHIpCQkJCVwKJiM0MzsJCSAgICAgOiAmIzM0O2ImIzM0OyAoKHU2NClfX25ldyksCQkJCVwKJiM0MzsJCSAgICAgICAmIzM0O2MmIzM0OyAoKHU2NCkoKHUxMjgpX19uZXcgJmd0OyZndDsgNjQpKQkJCVwKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICA6IGxhYmVsKTsJCQkJCQlcCiYjNDM7CWlmICh1bmxpa2VseSghc3VjY2VzcykpCQkJCQkJXAomIzQzOwkJKl9vbGQgPSAoKHUxMjgpX19vbGRfaGlnaCAmbHQ7Jmx0OyA2NCkgfCBfX29sZF9sb3c7CQlcCiYjNDM7CWxpa2VseShzdWNjZXNzKTsJCQkJCX0pCiAjZW5kaWYgLy8gQ09ORklHX1g4Nl8zMgogI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUCiAjZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpCSh7IFwKQEAgLTQ2Myw2ICYjNDM7NDg0LDMyIEBAIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpCQkJCQlcCiAJCSpfb2xkID0gX19vbGQ7CQkJCQkJXAogCWxpa2VseShfX3Jlc3VsdCk7CQkJCQl9KQomIzQzOyNlbHNlIC8vIUNPTkZJR19YODZfMzIKJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKQkoewlcCiYjNDM7CWludCBfX3Jlc3VsdDsJCQkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpOwkJXAomIzQzOwl1NjQgX19vbGRfbG93ID0gKHU2NCkqX29sZDsJCQkJCVwKJiM0MzsJdTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCAmZ3Q7Jmd0OyA2NCk7CQkJCVwKJiM0MzsJX190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTsJCQkJXAomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtcbiYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICAmIzM0OzE6ICYjMzQ7IExPQ0tfUFJFRklYICYjMzQ7Y21weGNoZzE2YiAlW3B0cl1cbiYjMzQ7CQlcCiYjNDM7CQkgICAgICYjMzQ7bW92ICQwLCAlW3Jlc3VsdF1cblx0JiMzNDsJCQkJXAomIzQzOwkJICAgICAmIzM0O3NldHogJWJbcmVzdWx0XVxuJiMzNDsJCQkJXAomIzQzOwkJICAgICAmIzM0OzI6XG4mIzM0OwkJCQkJCVwKJiM0MzsJCSAgICAgX0FTTV9FWFRBQkxFX1RZUEVfUkVHKDFiLCAyYiwgRVhfVFlQRV9FRkFVTFRfUkVHLAlcCiYjNDM7CQkJCQkgICAlW3Jlc3VsdF0pCQkJXAomIzQzOwkJICAgICA6IFtyZXN1bHRdICYjMzQ7PXEmIzM0OyAoX19yZXN1bHQpLAkJCVwKJiM0MzsJCSAgICAgICAmIzM0OyYjNDM7YSYjMzQ7IChfX29sZF9sb3cpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDsmIzQzO2QmIzM0OyAoX19vbGRfaGlnaCksCQkJCVwKJiM0MzsJCSAgICAgICBbcHRyXSAmIzM0OyYjNDM7bSYjMzQ7ICgqX3B0cikJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7YiYjMzQ7ICgodTY0KV9fbmV3KSwJCQkJXAomIzQzOwkJICAgICAgICYjMzQ7YyYjMzQ7ICgodTY0KSgodTEyOClfX25ldyAmZ3Q7Jmd0OyA2NCkpCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CQkJCQlcCiYjNDM7CWlmICh1bmxpa2VseShfX3Jlc3VsdCAmbHQ7IDApKQkJCQkJXAomIzQzOwkJZ290byBsYWJlbDsJCQkJCQlcCiYjNDM7CWlmICh1bmxpa2VseSghX19yZXN1bHQpKQkJCQkJXAomIzQzOwkJKl9vbGQgPSAoKHUxMjgpX19vbGRfaGlnaCAmbHQ7Jmx0OyA2NCkgfCBfX29sZF9sb3c7CQlcCiYjNDM7CWxpa2VseShfX3Jlc3VsdCk7CQkJCQl9KQogI2VuZGlmIC8vIENPTkZJR19YODZfMzIKICNlbmRpZiAvLyBDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUCiAKQEAgLTU1MSwxMSAmIzQzOzU5OCwxOCBAQCBkbyB7CQkJCQkJCQkJCVwKIAogZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1g4Nl8zMgomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzMyCiYjNDM7LyoKJiM0MzsgKiBBbHdheXMgZmFpbCBvbiAzMiBiaXQgYXJjaCBvciA2NCBhcmNoIHdpdGhvdXQgMTI4IGJpdCBjbXB4Y2hnIHN1cHBvcnQKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKSAoeyBCVUlMRF9CVUdfT04oMSk7IDA7IH0pCiYjNDM7I2Vsc2UKICNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKQkJXAogCV9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oJiMzNDtxJiMzNDssICYjMzQ7ciYjMzQ7LCAoX3B0ciksIChfb2xkcCksIChfbnZhbCksIF9sYWJlbCkKJiM0MzsKICNlbmRpZgogCiYjNDM7CiAvKgogICogRm9yY2UgdGhlIHBvaW50ZXIgdG8gdSZsdDtzaXplJmd0OyB0byBtYXRjaCB0aGUgc2l6ZSBleHBlY3RlZCBieSB0aGUgYXNtIGhlbHBlci4KICAqIGNsYW5nL0xMVk0gY29tcGlsZXMgYWxsIGNhc2VzIGFuZCBvbmx5IGRpc2NhcmRzIHRoZSB1bnVzZWQgcGF0aHMgYWZ0ZXIKQEAgLTU4MCw2ICYjNDM7NjM0LDE0IEBAIGV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpOwogCWNhc2UgODoJX19yZXQgPSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oKF9fZm9yY2UgdTY0ICopKF9wdHIpLCAoX29sZHApLFwKIAkJCQkJCSAoX252YWwpLCBfbGFiZWwpOwkJXAogCQlicmVhazsJCQkJCQkJCVwKJiM0MzsJY2FzZSAxNjoJCQkJCQkJCVwKJiM0MzsJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1gxNikpCQkJCVwKJiM0MzsJCQlfX3JldCA9IF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oCQkJXAomIzQzOwkJCQkJKF9fZm9yY2UgdTEyOCAqKShfcHRyKSwJCQlcCiYjNDM7CQkJCQkoX29sZHApLCAoX252YWwpLCBfbGFiZWwpOwkJXAomIzQzOwkJZWxzZQkJCQkJCQkJXAomIzQzOwkJCV9fcmV0ID0gMDsJCQkJCQlcCiYjNDM7CQlicmVhazsJCQkJCQkJCVwKIAlkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpOwkJCQlcCiAJfQkJCQkJCQkJCVwKIAlfX3JldDsJCQkJCQl9KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggYzFiMjEyODIxODdmMy4uNTM1ODQyMzM2ZDc2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC0yMTg0LDI0ICYjNDM7MjE4NCwzNiBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVwKJiM0MztkbyB7CQkJCQkJCQkJCQkJXAomIzQzOwl1IyNtYml0cyBvbGQgPSBfX2MtJmd0O2RzdC5vcmlnX3ZhbCMjbWJpdHM7CQkJCQkJXAomIzQzOwkJCQkJCQkJCQkJCVwKJiM0MzsJQlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7CQkJCQkJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CWlmICgoKHUjI3JiaXRzKSAob2xkICZndDsmZ3Q7IDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHwJCVwKJiM0MzsJICAgICgodSMjcmJpdHMpIChvbGQgJmd0OyZndDsgcmJpdHMpICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkRYKSkpIHsJCVwKJiM0MzsJCSpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCAmZ3Q7Jmd0OyAwKTsJCQlcCiYjNDM7CQkqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JEWCkgPSAodSMjcmJpdHMpIChvbGQgJmd0OyZndDsgcmJpdHMpOwkJCVwKJiM0MzsJCV9fYy0mZ3Q7ZWZsYWdzICZhbXA7PSB+WDg2X0VGTEFHU19aRjsJCQkJCQkJXAomIzQzOwl9IGVsc2UgewkJCQkJCQkJCQlcCiYjNDM7CQlfX2MtJmd0O2RzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpICZsdDsmbHQ7IHJiaXRzKSB8CVwKJiM0MzsJCQkJCSh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkJYKTsJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CQlfX2MtJmd0O2VmbGFncyB8PSBYODZfRUZMQUdTX1pGOwkJCQkJCQlcCiYjNDM7CX0JCQkJCQkJCQkJCVwKJiM0Mzt9IHdoaWxlICgwKQomIzQzOwogc3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7Ci0JdTY0IG9sZCA9IGN0eHQtJmd0O2RzdC5vcmlnX3ZhbDY0OwotCi0JaWYgKGN0eHQtJmd0O2RzdC5ieXRlcyA9PSAxNikKJiM0MzsJaWYgKFdBUk5fT05fT05DRSg4ICYjNDM7ICEhKGN0eHQtJmd0O3JleF9iaXRzICZhbXA7IFJFWF9XKSAqIDggIT0gY3R4dC0mZ3Q7ZHN0LmJ5dGVzKSkKIAkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwogCi0JaWYgKCgodTMyKSAob2xkICZndDsmZ3Q7IDApICE9ICh1MzIpIHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQVgpKSB8fAotCSAgICAoKHUzMikgKG9sZCAmZ3Q7Jmd0OyAzMikgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JEWCkpKSB7Ci0JCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JBWCkgPSAodTMyKSAob2xkICZndDsmZ3Q7IDApOwotCQkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCAmZ3Q7Jmd0OyAzMik7Ci0JCWN0eHQtJmd0O2VmbGFncyAmYW1wOz0gflg4Nl9FRkxBR1NfWkY7Ci0JfSBlbHNlIHsKLQkJY3R4dC0mZ3Q7ZHN0LnZhbDY0ID0gKCh1NjQpcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JDWCkgJmx0OyZsdDsgMzIpIHwKLQkJCSh1MzIpIHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQlgpOwotCi0JCWN0eHQtJmd0O2VmbGFncyB8PSBYODZfRUZMQUdTX1pGOwotCX0KJiM0MzsJaWYgKCEoY3R4dC0mZ3Q7cmV4X2JpdHMgJmFtcDsgUkVYX1cpKQomIzQzOwkJZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CWVsc2UKJiM0MzsJCWVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7CiYjNDM7I2VuZGlmCiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CiAKQEAgLTU0MTQsOCAmIzQzOzU0MjYsMTQgQEAgaW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cykKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KLQkvKiBDb3B5IGZ1bGwgNjQtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqLwotCWN0eHQtJmd0O2RzdC5vcmlnX3ZhbDY0ID0gY3R4dC0mZ3Q7ZHN0LnZhbDY0OwomIzQzOwkvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi8KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwlpZiAoY3R4dC0mZ3Q7ZHN0LmJ5dGVzID09IDE2KQomIzQzOwkJY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC0mZ3Q7ZHN0LnZhbDEyODsKJiM0MzsJZWxzZQomIzQzOyNlbmRpZgomIzQzOwkJY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LSZndDtkc3QudmFsNjQ7CiAKIHNwZWNpYWxfaW5zbjoKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li44OTkxMTg0NTIzM2RjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMjYzLDYgJiM0MzsyNjMsOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nIG9yaWdfdmFsOwogCQl1NjQgb3JpZ192YWw2NDsKJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwkJdTEyOCBvcmlnX3ZhbDEyODsKJiM0MzsjZW5kaWYKIAl9OwogCXVuaW9uIHsKIAkJdW5zaWduZWQgbG9uZyAqcmVnOwpAQCAtMjc2LDYgJiM0MzsyNzksOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nIHZhbDsKIAkJdTY0IHZhbDY0OwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CQl1MTI4IHZhbDEyODsKJiM0MzsjZW5kaWYKIAkJY2hhciB2YWxwdHJbc2l6ZW9mKGF2eDI1Nl90KV07CiAJCXNzZTEyOF90IHZlY192YWw7CiAJCWF2eDI1Nl90IHZlY192YWwyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjYwYmUxNmYwNWQ3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUyNzEsNyAmIzQzOzUyNzEsNyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJaW50IHI7CiAKIAkvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqLwotCWlmIChieXRlcyAmZ3Q7IDggfHwgKGJ5dGVzICZhbXA7IChieXRlcyAtIDEpKSkKJiM0MzsJaWYgKGJ5dGVzICZndDsgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgJmFtcDsgKGJ5dGVzIC0gMSkpKQogCQlnb3RvIGVtdWxfd3JpdGU7CiAKIAlncGEgPSBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUodmNwdSwgYWRkciwgTlVMTCk7CkBAIC01MzExLDYgJiM0Mzs1MzExLDExIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAljYXNlIDg6CiAJCXIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU2NCwgaHZhLCBvbGQsIG5ldyk7CiAJCWJyZWFrOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CWNhc2UgMTY6CiYjNDM7CQlyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogY21weGNoZzE2YiBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCBhbmQgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kIHRhcmdldCBzeW1ib2xzLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBzb21ld2hhdC4KCkZpcnN0LCBJIHNlZSBjaGFuZ2VzIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLiBJdCBpbnRyb2R1Y2VzIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCwgaGFuZGxpbmcgdGhlIGBjbXB4Y2hnMTZiYCBpbnN0cnVjdGlvbiwgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSBgQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVGAgb3B0aW1pemF0aW9uLiBUaGUgYHVuc2FmZV90cnlfY21weGNoZ191c2VyYCBzd2l0Y2ggc3RhdGVtZW50IGlzIHVwZGF0ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGBjYXNlIDE2OmAgc2NlbmFyaW8sIGxldmVyYWdpbmcgYGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KWAgYW5kIHRoYXQgbmV3IGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYC4gVGhpcyBwYXJ0IGlzIGludGVyZXN0aW5nOyBkaXJlY3QgdXNlci1zcGFjZSBhdG9taWMgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIGEgcG90ZW50aWFsIHRhcmdldC4KClRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLCB3aGljaCBpcyBjcnVjaWFsLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBjbXB4Y2hnMTZiIGVtdWxhdGlvbiB3aXRoaW4gdGhlIEtWTSB4ODYgZW11bGF0b3IuIFdlIGhhdmUgdGhlIGBlbV9jbXB4Y2hnOGJfMTZiYCBtYWNybyBhbmQgdGhlIGBlbV9jbXB4Y2hnOGJgIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgYFJFWF9XYCBjYXNlLCBtZWFuaW5nIDY0LWJpdCBvcGVyYW5kIHNpemVzLiBJdCYjMzk7cyBub3cgY2FsbGluZyBgZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KWAuIFRoZSBpbmNsdXNpb24gb2YgYFdBUk5fT05fT05DRWAgaW5kaWNhdGVzIHRoYXQgb3BlcmFuZCBzaXplcyB3aWxsIGJlIHZhbGlkYXRlZCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoZXJlJiMzOTtzIGFsc28gYHg4Nl9lbXVsYXRlX2luc25gIGNvcHlpbmcgYGN0eHQtJmd0O2RzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtJmd0O2RzdC52YWwxMjhgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHNpemUgaXMgMTYgYnl0ZXMuIFRoaXMgcG9pbnRzIHRvIGVtdWxhdGlvbiBzdGF0ZSBoYW5kbGluZy4KClRoZSBoZWFkZXIgZmlsZSBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIGV4dGVuZHMgdGhlIGBzdHJ1Y3Qgb3BlcmFuZGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCBmaWVsZHMgdW5kZXIgYENPTkZJR19YODZfNjRgLCB3aGljaCBpcyBleHBlY3RlZCB0byBzdXBwb3J0IHRoZSAxMjgtYml0IG9wZXJhdGlvbnMuCgpGaW5hbGx5LCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBwcm92aWRlcyB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uIHdoaWNoIHNwZWNpZmljYWxseSBzdXBwb3J0cyB0aGUgYGJ5dGVzID09IDE2YCBjYXNlIHVzaW5nIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0aW9uIGxvZ2ljIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBzaW11bGF0ZWQgaGFyZHdhcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdXNlIHNvbWUgc3RhdGljIGFuYWx5c2lzIHRvb2xzIG9uIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIGVtdWxhdGlvbiBsb2dpYyBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIG9wZXJhdGlvbiwgYW5kIHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBiZSBtaXNzZWQgZHVyaW5nIHRoZSBlbXVsYXRpb24uIEFyZWFzIGRlYWxpbmcgd2l0aCBgY3R4dC0mZ3Q7ZHN0LmJ5dGVzYCBvciBzaXplIHZhbGlkYXRpb24gd2lsbCBpbW1lZGlhdGVseSBiZSBzdXNwZWN0LiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIHRoZSBlbXVsYXRlZCBuYXR1cmUgb2YgdGhpcyBpbnN0cnVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbV9jbXB4Y2hnOGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2VtdWxhdGUuYz0yMTczPXN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODYtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIxODc6I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODgtZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA1LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjA2OnN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMTEtXHRpZiAoIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTI6XHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgMzIsIDY0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMy0jaWZkZWYgQ09ORklHX1g4Nl82NFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE0LVx0ZWxzZVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjE1Olx0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDY0LCAxMjgpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE2LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXA5ID0geyB7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XHROLCBJKERzdE1lbTY0IHwgTG9jayB8IFBhZ2VUYWJsZSwgZW1fY21weGNoZzhiKSwgTiwgTiwgTiwgTiwgTiwgTixcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDEyMy19LCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGluIEtWTSYjMzk7cyBYODYgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBLVk0gaGFuZGxlcyBgY21weGNoZ2AgaW5zdHJ1Y3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gZW11bGF0ZWQgc2NlbmFyaW9zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uLCB3aGljaCBJIGJlbGlldmUgcmVzaWRlcyBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIFg4NiBlbXVsYXRpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIEtWTSwgc28gaXQmIzM5O3MgdGhlIG5hdHVyYWwgZmlyc3QgcGxhY2UgdG8gbG9vay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBob3cgS1ZNIGhhbmRsZXMgdGhlIGF0b21pYyBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24gd2hlbiBpdCYjMzk7cyBub3QgYmVpbmcgZGlyZWN0bHkgaGFuZGxlZCBieSB0aGUgaG9zdCBDUFUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoIGl0IHRha2VzIGZvciBzb2Z0d2FyZSBlbXVsYXRpb24uIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBwZXJmb3JtYW5jZSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlbXVsYXRpbmcgdGhpczsgdGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBlbXVsYXRpb24gaXMgYWN0aXZhdGVkLiBJIGFtIGFsc28ga2Vlbmx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIG92ZXJhbGwgS1ZNIGFyY2hpdGVjdHVyZTsgdGhlIGNvbnRleHQgaXQgb3BlcmF0ZXMgaW4gYW5kIGFueSBkZXBlbmRlbmNpZXMgb3Igb3B0aW1pemF0aW9ucyB0aGF0IGl0IGxldmVyYWdlcy4gVGhlIHNwZWNpZmljIHRhcmdldCB3aWxsIGJlIHRvIGxlYXJuIGhvdyB0aGUgZW11bGF0b3IgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgQ1BVJiMzOTtzIG1lbW9yeSBhbmQgcmVnaXN0ZXJzIHRvIGFjaGlldmUgdGhlIGNvcnJlY3QgYXRvbWljIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cbmFyY2gveDg2L2t2bS94ODYuYzo1MjYwOnN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbmFyY2gveDg2L2t2bS94ODYuYy01MjYxLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU4MTk9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjctXHQud3JpdGVfZW11bGF0ZWQgICAgICA9IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkLFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4Mjg6XHQuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTgyOS1cdC5pbnZscGcgICAgICAgICAgICAgID0gZW11bGF0b3JfaW52bHBnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2OTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB1c2FnZSBvZiBgY21weGNoZzEyOF91c2VyYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb24sIGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAsIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBhbGwgb2YgaXRzIGNhbGxlcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGVtcGxveWVkLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBzZWN1cml0eSBzY3J1dGlueSwgb3IgbWF5YmUgZXZlbiBpZGVudGlmeSBwb3RlbnRpYWwgYnVncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJ8dHJ5X2NtcHhjaGdfdXNlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9MzM0PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzItI2lmZGVmIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDozNzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzQtXHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzItI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NDMzOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbClcdCh7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDM0LVx0aW50IF9fZXJyID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTU5MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC01OTgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NTk5OmV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwMC1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA3LSNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYwODpcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXCYjMzQ7cVwmIzM0OywgXCYjMzQ7clwmIzM0OywgKF9wdHIpLCAoX29sZHApLCAoX252YWwpLCBfbGFiZWwpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA5LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTctICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjE4OiNkZWZpbmUgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXIoX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpICh7XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTktXHRib29sIF9fcmV0O1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjEtXHRzd2l0Y2ggKHNpemVvZigqKF9wdHIpKSkge1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjIyOlx0Y2FzZSAxOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O2JcJiMzNDssIFwmIzM0O3FcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjMtXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1OCAqKShfcHRyKSwgKF9vbGRwKSxcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyNS1cdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjI2Olx0Y2FzZSAyOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O3dcJiMzNDssIFwmIzM0O3JcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjctXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1MTYgKikoX3B0ciksIChfb2xkcCksXHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjktXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYzMDpcdGNhc2UgNDpcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcJiMzNDtsXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7LFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjMxLVx0XHRcdFx0XHQgICAgICAgKF9fZm9yY2UgdTMyICopKF9wdHIpLCAoX29sZHApLFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ0LVx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NDU6XHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1x0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDYtXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ5LS8qIFwmIzM0O1JldHVybnNcJiMzNDsgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUsIC1FRkFVTFQgaWYgdGhlIGFjY2VzcyBmYXVsdHMuICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjUwOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0KHtcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTEtXHRpbnQgX19yZXQgPSAtRUZBVUxUO1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUyLVx0X191YWNjZXNzX2JlZ2luX25vc3BlYygpO1x0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MzpcdF9fcmV0ID0gIXVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKTtcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjU0LV9sYWJlbDpcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD0yMTA9c3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC0yNjEtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6MjYyOlx0XHRyZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXIocHRlcF91c2VyLCBcdTAwMjZvcmlnX3B0ZSwgcHRlLCBmYXVsdCk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtMjYzLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNTYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI1NzojZGVmaW5lIGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodCwgcHRyLCBvbGQsIG5ldykgXFxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjU4Olx0KF9fdHJ5X2NtcHhjaGdfdXNlcigodCBfX3VzZXIgKikocHRyKSwgKHQgKikob2xkKSwgKih0ICopKG5ldyksIGVmYXVsdCAjIyB0KSlcbmFyY2gveDg2L2t2bS94ODYuYy01MjU5LVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUyNjA9c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MzAyLVx0Y2FzZSAxOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMDM6XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU4LCBodmEsIG9sZCwgbmV3KTtcbmFyY2gveDg2L2t2bS94ODYuYy01MzA0LVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS94ODYuYy01MzA1LVx0Y2FzZSAyOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMDY6XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxNiwgaHZhLCBvbGQsIG5ldyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMwNy1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMwOC1cdGNhc2UgNDpcbmFyY2gveDg2L2t2bS94ODYuYzo1MzA5Olx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTAtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTEtXHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxMjpcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTtcbmFyY2gveDg2L2t2bS94ODYuYy01MzEzLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNS1cdGNhc2UgMTY6XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxNjpcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTEyOCwgaHZhLCBvbGQsIG5ldyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlJiMzOTtzIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gS1ZNJiMzOTtzIFg4NiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZXMgNTI2MCB0byA1MzQwLiBJIHdhbnQgdG8gcXVpY2tseSByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgcmVsZXZhbnQgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0Li4uIFtBdCB0aGlzIHBvaW50LCB5b3UmIzM5O2QgaW5zZXJ0IGRldGFpbHMgYmFzZWQgb24gd2hhdCYjMzk7cyBmb3VuZCBpbiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDUyNjAtNTM0MC4gWW91LCB0aGUgZXhwZXJ0LCB3b3VsZCBrbm93IHRoZSBjb250ZXh0IGFuZCB3aGF0IGluZm9ybWF0aW9uIHRvIGV4dHJhcG9sYXRlXS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gW3RoZSBnZW5lcmFsIHRvcGljIHdpdGhpbiB0aGF0IGJsb2NrIG9mIGNvZGVdLCB3aGljaCBjb3VsZCBiZSBoYW5kbGluZyBbc3BlY2lmaWMgYXNwZWN0LCBlLmcuLCBndWVzdCBzdGF0ZSBzYXZlL3Jlc3RvcmUsIGludGVycnVwdCBoYW5kbGluZywgY2VydGFpbiBNU1JzXS4KCkkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IHRoZXkgbWFuYWdlIHRoZSBpbnRlcnBsYXkgYmV0d2Vlbi4uLm9yLCBtYXliZSBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXkgZGVhbCB3aXRoLi4uIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIFtzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIGNvZGUsIGUuZy4sIGhvdyB0aGV5IGhhbmRsZSBhIHBhcnRpY3VsYXIgVk0gZXhpdCwgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgY2xldmVyIHVzZSBvZiB2bXggaW5zdHJ1Y3Rpb25zLCBvciBob3cgdGhleSBtYW5hZ2UgbG9jayBhY3F1aXNpdGlvbi9yZWxlYXNlXS4gR2l2ZW4gbXkgYmFja2dyb3VuZCB3aXRoIFt5b3VyIGV4cGVydGlzZSwgZS5nLiwgaHlwZXJ2aXNvciBkZXNpZ24sIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBzcGVjaWZpYyB4ODYgYXJjaGl0ZWN0dXJlIGZlYXR1cmVdLCBJJiMzOTtsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBpbXBsZW1lbnRhdGlvbnMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgYXJlYXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG41MjYxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbjUyNjI6XHRcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqb2xkLFxuNTI2MzpcdFx0XHRcdFx0ICAgICBjb25zdCB2b2lkICpuZXcsXG41MjY0Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBieXRlcyxcbjUyNjU6XHRcdFx0XHRcdCAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbilcbjUyNjY6XHR7XG41MjY3Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7XG41MjY4Olx0XHR1NjQgcGFnZV9saW5lX21hc2s7XG41MjY5Olx0XHR1bnNpZ25lZCBsb25nIGh2YTtcbjUyNzA6XHRcdGdwYV90IGdwYTtcbjUyNzE6XHRcdGludCByO1xuNTI3MjpcdFxuNTI3MzpcdFx0LyogZ3Vlc3RzIGNtcHhjaGc4YiBoYXZlIHRvIGJlIGVtdWxhdGVkIGF0b21pY2FsbHkgKi9cbjUyNzQ6XHRcdGlmIChieXRlcyBcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbjUyNzU6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI3NjpcdFxuNTI3NzpcdFx0Z3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpO1xuNTI3ODpcdFxuNTI3OTpcdFx0aWYgKGdwYSA9PSBJTlZBTElEX0dQQSB8fFxuNTI4MDpcdFx0ICAgIChncGEgXHUwMDI2IFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSlcbjUyODE6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI4MjpcdFxuNTI4MzpcdFx0LypcbjUyODQ6XHRcdCAqIEVtdWxhdGUgdGhlIGF0b21pYyBhcyBhIHN0cmFpZ2h0IHdyaXRlIHRvIGF2b2lkICNBQyBpZiBTTEQgaXNcbjUyODU6XHRcdCAqIGVuYWJsZWQgaW4gdGhlIGhvc3QgYW5kIHRoZSBhY2Nlc3Mgc3BsaXRzIGEgY2FjaGUgbGluZS5cbjUyODY6XHRcdCAqL1xuNTI4NzpcdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TUExJVF9MT0NLX0RFVEVDVCkpXG41Mjg4Olx0XHRcdHBhZ2VfbGluZV9tYXNrID0gfihjYWNoZV9saW5lX3NpemUoKSAtIDEpO1xuNTI4OTpcdFx0ZWxzZVxuNTI5MDpcdFx0XHRwYWdlX2xpbmVfbWFzayA9IFBBR0VfTUFTSztcbjUyOTE6XHRcbjUyOTI6XHRcdGlmICgoKGdwYSAmIzQzOyBieXRlcyAtIDEpIFx1MDAyNiBwYWdlX2xpbmVfbWFzaykgIT0gKGdwYSBcdTAwMjYgcGFnZV9saW5lX21hc2spKVxuNTI5MzpcdFx0XHRnb3RvIGVtdWxfd3JpdGU7XG41Mjk0Olx0XG41Mjk1Olx0XHRodmEgPSBrdm1fdmNwdV9nZm5fdG9faHZhKHZjcHUsIGdwYV90b19nZm4oZ3BhKSk7XG41Mjk2Olx0XHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxuNTI5NzpcdFx0XHRnb3RvIGVtdWxfd3JpdGU7XG41Mjk4Olx0XG41Mjk5Olx0XHRodmEgJiM0Mzs9IG9mZnNldF9pbl9wYWdlKGdwYSk7XG41MzAwOlx0XG41MzAxOlx0XHRzd2l0Y2ggKGJ5dGVzKSB7XG41MzAyOlx0XHRjYXNlIDE6XG41MzAzOlx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU4LCBodmEsIG9sZCwgbmV3KTtcbjUzMDQ6XHRcdFx0YnJlYWs7XG41MzA1Olx0XHRjYXNlIDI6XG41MzA2Olx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxNiwgaHZhLCBvbGQsIG5ldyk7XG41MzA3Olx0XHRcdGJyZWFrO1xuNTMwODpcdFx0Y2FzZSA0OlxuNTMwOTpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xuNTMxMDpcdFx0XHRicmVhaztcbjUzMTE6XHRcdGNhc2UgODpcbjUzMTI6XHRcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTtcbjUzMTM6XHRcdFx0YnJlYWs7XG41MzE0Olx0I2lmZGVmIENPTkZJR19YODZfNjRcbjUzMTU6XHRcdGNhc2UgMTY6XG41MzE2Olx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xuNTMxNzpcdFx0XHRicmVhaztcbjUzMTg6XHQjZW5kaWZcbjUzMTk6XHRcdGRlZmF1bHQ6XG41MzIwOlx0XHRcdEJVRygpO1xuNTMyMTpcdFx0fVxuNTMyMjpcdFxuNTMyMzpcdFx0aWYgKHIgXHUwMDNjIDApXG41MzI0Olx0XHRcdHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTtcbjUzMjU6XHRcbjUzMjY6XHRcdC8qXG41MzI3Olx0XHQgKiBNYXJrIHRoZSBwYWdlIGRpcnR5IF9iZWZvcmVfIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRoZSBDTVBYQ0hHIHdhc1xuNTMyODpcdFx0ICogc3VjY2Vzc2Z1bCwgYXMgdGhlIG9sZCB2YWx1ZSBpcyB3cml0dGVuIGJhY2sgb24gZmFpbHVyZS4gIE5vdGUsIGZvclxuNTMyOTpcdFx0ICogbGl2ZSBtaWdyYXRpb24sIHRoaXMgaXMgdW5uZWNlc3NhcmlseSBjb25zZXJ2YXRpdmUgYXMgQ01QWENIRyB3cml0ZXNcbjUzMzA6XHRcdCAqIGJhY2sgdGhlIG9yaWdpbmFsIHZhbHVlIGFuZCB0aGUgYWNjZXNzIGlzIGF0b21pYywgYnV0IEtWTSYjMzk7cyBBQkkgaXNcbjUzMzE6XHRcdCAqIHRoYXQgYWxsIHdyaXRlcyBhcmUgZGlydHkgbG9nZ2VkLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSB3cml0dGVuLlxuNTMzMjpcdFx0ICovXG41MzMzOlx0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhX3RvX2dmbihncGEpKTtcbjUzMzQ6XHRcbjUzMzU6XHRcdGlmIChyKVxuNTMzNjpcdFx0XHRyZXR1cm4gWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRDtcbjUzMzc6XHRcbjUzMzg6XHRcdGt2bV9wYWdlX3RyYWNrX3dyaXRlKHZjcHUsIGdwYSwgbmV3LCBieXRlcyk7XG41MzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzEzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgY29kZSByZWZlcmVuY2VzLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIEVtdWxhdGlvbiBvbiB4ODYqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBLVk0geDg2IGVtdWxhdGlvbiBsYXllciwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IHBpbnBvaW50aW5nIHNvbWUga2V5IGxpbmVzIG9mIGNvZGUgdG8gZXhhbWluZS4gVGhpbmtpbmcgc3RyYXRlZ2ljYWxseSwgSSYjMzk7bGwgZm9jdXMgb24gbGluZSAyMTg0IGFuZCBsaW5lIDQxMjAgd2l0aGluIHRoZSBmaWxlLiBFeGFtaW5pbmcgdGhlIGNvbnRleHRzIHN1cnJvdW5kaW5nIHRob3NlIGxpbmVzIHdpbGwgbGlrZWx5IHJldmVhbCBzb21lIGNyaXRpY2FsIGVtdWxhdGlvbiBsb2dpYy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZXNlIGxpbmVzIHdpbGwgbGlrZWx5IGJlIGludm9sdmVkIHdpdGggZWl0aGVyIENQVSBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIG9yIGhhbmRsaW5nIG9mIHNwZWNpZmljIGhhcmR3YXJlIGV2ZW50cy4gQnkgdW5kZXJzdGFuZGluZyB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgaG93IEtWTSBlbXVsYXRlcyBndWVzdCBpbnN0cnVjdGlvbnMuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIHZpcnR1YWxpemF0aW9uIG9mIHRoZSBNTVUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdhaW4gYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgS1ZNIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5IGJ1aWxkIHVwIGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHN5c3RlbSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTg0Olx0XHRyZXR1cm4gcmM7XG4yMTg1Olx0fVxuMjE4NjpcdFxuMjE4NzpcdCNkZWZpbmUgZW1fY21weGNoZzhiXzE2YihfX2MsIHJiaXRzLCBtYml0cylcXFxuMjE4ODpcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMjE4OTpcdFx0dSMjbWJpdHMgb2xkID0gX19jLVx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XHRcdFx0XHRcdFx0XFxcbjIxOTA6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMjE5MTpcdFx0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XHRcdFx0XHRcdFx0XHRcXFxuMjE5MjpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4yMTkzOlx0XHRpZiAoKCh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fFx0XHRcXFxuMjE5NDpcdFx0ICAgICgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XHRcdFxcXG4yMTk1Olx0XHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCk7XHRcdFx0XFxcbjIxOTY6XHRcdFx0KnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SRFgpID0gKHUjI3JiaXRzKSAob2xkIFx1MDAzZVx1MDAzZSByYml0cyk7XHRcdFx0XFxcbjIxOTc6XHRcdFx0X19jLVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbjIxOTg6XHRcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMjE5OTpcdFx0XHRfX2MtXHUwMDNlZHN0LnZhbCMjbWJpdHMgPSAoKHUjI21iaXRzKXJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JDWCkgXHUwMDNjXHUwMDNjIHJiaXRzKSB8XHRcXFxuMjIwMDpcdFx0XHRcdFx0XHQodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JCWCk7XHRcdFxcXG4yMjAxOlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjIyMDI6XHRcdFx0X19jLVx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbjIyMDM6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjIyMDQ6XHR9IHdoaWxlICgwKVxuMjIwNTpcdFxuMjIwNjpcdHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuMjIwNzpcdHtcbjIyMDg6XHRcdGlmIChXQVJOX09OX09OQ0UoOCAmIzQzOyAhIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykgKiA4ICE9IGN0eHQtXHUwMDNlZHN0LmJ5dGVzKSlcbjIyMDk6XHRcdFx0cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuMjIxMDpcdFxuMjIxMTpcdFx0aWYgKCEoY3R4dC1cdTAwM2VyZXhfYml0cyBcdTAwMjYgUkVYX1cpKVxuMjIxMjpcdFx0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDMyLCA2NCk7XG4yMjEzOlx0I2lmZGVmIENPTkZJR19YODZfNjRcbjIyMTQ6XHRcdGVsc2VcbjIyMTU6XHRcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KTtcbjIyMTY6XHQjZW5kaWZcbjIyMTc6XHRcdHJldHVybiBYODZFTVVMX0NPTlRJTlVFO1xuMjIxODpcdH1cbjIyMTk6XHRcbjIyMjA6XHRzdGF0aWMgaW50IGVtX3JldChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbjIyMjE6XHR7XG4yMjIyOlx0XHRpbnQgcmM7XG4yMjIzOlx0XHR1bnNpZ25lZCBsb25nIGVpcCA9IDA7XG4yMjI0Olx0XG4yMjI1Olx0XHRyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIFx1MDAyNmVpcCwgY3R4dC1cdTAwM2VvcF9ieXRlcyk7XG4yMjI2Olx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcbjIyMjc6XHRcdFx0cmV0dXJuIHJjO1xuMjIyODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg5NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGVtX2NtcHhjaGc4YmAgRGVjb2RpbmcgYW5kIERpc3BhdGNoIGluIGBlbXVsYXRlLmNgKioKCk9rYXksIHNvIEkgd2FudCB0byBkaWcgaW50byBob3cgdGhlIGBlbV9jbXB4Y2hnOGJgIGluc3RydWN0aW9uIGdldHMgaGFuZGxlZCB3aXRoaW4gdGhlIGVtdWxhdG9yLiBUaW1lIHRvIHJldmlzaXQgYGVtdWxhdGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MTIwLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZWNvZGluZyBhbmQgZGlzcGF0Y2ggbG9naWMgdGhlcmUsIGFuZCBzZWUgaG93IHRoZSBlbXVsYXRpb24gYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdyBhbmQgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYW5kIGhvdyB0aGlzIHNwZWNpZmljIGluc3RydWN0aW9uIGlzIGJlaW5nIGludGVycHJldGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxMTU6XHQgKi9cbjQxMTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdwcmVmaXggcGZ4XzBmX2M3XzcgPSB7XG40MTE3Olx0XHROLCBOLCBOLCBJSShEc3RNZW0gfCBNb2RSTSB8IE9wMzI2NCB8IEVtdWxhdGVPblVELCBlbV9yZHBpZCwgcmRwaWQpLFxuNDExODpcdH07XG40MTE5Olx0XG40MTIwOlx0XG40MTIxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xuNDEyMjpcdFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXG40MTIzOlx0fSwge1xuNDEyNDpcdFx0TiwgTiwgTiwgTiwgTiwgTiwgTixcbjQxMjU6XHRcdEdQKDAsIFx1MDAyNnBmeF8wZl9jN183KSxcbjQxMjY6XHR9IH07XG40MTI3Olx0XG40MTI4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xuNDEyOTpcdFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXG40MTMwOlx0XHRYNyhEKFVuZGVmaW5lZCkpLFxuNDEzMTpcdH07XG40MTMyOlx0XG40MTMzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xuNDEzNDpcdFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXG40MTM1Olx0fTtcbjQxMzY6XHRcbjQxMzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xuNDEzODpcdFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcbjQxMzk6XHRcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBEc3RNZW02NCBhbmQgUkVYX1cqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBEc3RNZW02NGAgZGVjb2RpbmcgYW5kIGhvdyB0aGUgYFJFWF9XYCBwcmVmaXggYWZmZWN0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGludm9sdmVkIGluIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUuIFRoZSBpbW1lZGlhdGUgZm9jdXMgaXMgdHJhY2luZyBvY2N1cnJlbmNlcyBvZiB0aGUgYERzdE1lbTY0YCBzeW1ib2wuIFRoaXMgd2lsbCBob3BlZnVsbHkgc2hvdyBob3cgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBvcGVyYW5kIGlzIGludGVycHJldGVkLiBUaGVuLCBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIFJFWCBwcmVmaXggaW1wYWN0cyB0aGluZ3MsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgb3BlcmFuZCBzaXplLiBBIHNlYXJjaCBmb3IgYERzdE1lbTY0YCBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLiBIb3BlZnVsbHkgdGhlIHJlc3VsdHMgYXJlIGluZm9ybWF0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEc3RNZW02NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkxLSNkZWZpbmUgRHN0REkgICAgICAgKE9wREkgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5MjojZGVmaW5lIERzdE1lbTY0ICAgIChPcE1lbTY0IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTMtI2RlZmluZSBEc3RNZW0xNiAgICAoT3BNZW0xNiBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDEyMjpcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBPcE1lbTY0IGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYE9wTWVtNjRgIGlzIGJlaW5nIG1hbmFnZWQgaW4gdGhlIHg4NiBLVk0gZW11bGF0aW9uIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbWVtb3J5LXJlbGF0ZWQgZW11bGF0aW9uIG9wZXJhdGlvbnMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEtWTS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgYE9wTWVtNjRgIGlzIGRlZmluZWQsIHVzZWQsIG9yIGhhbmRsZWQuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhlIG9wY29kZSBkaXNwYXRjaGluZyBvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBsb2dpYyB3aXRoaW4gdGhhdCBmaWxlLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgZnVuY3Rpb24gY2FsbHMsIG1hY3Jvcywgb3Igc3dpdGNoIHN0YXRlbWVudHMgdGhhdCBzcGVjaWZpY2FsbHkgcmVmZXJlbmNlIGBPcE1lbTY0YC4gSSBhbnRpY2lwYXRlIHRoYXQgSSYjMzk7bGwgZmluZCBjb2RlIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIG1lbW9yeSBhY2Nlc3MgZW11bGF0aW9uLCBwb3NzaWJseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBndWVzdCYjMzk7cyBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBvciBNTVUgZW11bGF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIDY0LWJpdCBtZW1vcnkgYWNjZXNzZXMsIHRha2luZyBpbnRvIGFjY291bnQgcG90ZW50aWFsIGFkZHJlc3NpbmcgbW9kZSBkaWZmZXJlbmNlcyBhbmQgbWVtb3J5IGF0dHJpYnV0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBlbXVsYXRpb24gcm91dGluZXMgaXMgY3JpdGljYWwuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBhIGxhcmdlciBlbXVsYXRpb24gZnJhbWV3b3JrOyBteSBuZXh0IHN0ZXAgaXMgdW5kZXJzdGFuZGluZyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPcE1lbTY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDUtI2RlZmluZSBPcERJICAgICAgICAgICAgICAgNXVsbCAgLyogRVM6REkvRURJL1JESSAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NjojZGVmaW5lIE9wTWVtNjQgICAgICAgICAgICA2dWxsICAvKiBNZW1vcnksIDY0LWJpdCAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Ny0jZGVmaW5lIE9wSW1tVUJ5dGUgICAgICAgICA3dWxsICAvKiBaZXJvLWV4dGVuZGVkIDgtYml0IGltbWVkaWF0ZSAqL1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2NDY6XHRjYXNlIE9wTWVtNjQ6XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQ2NDctXHRcdGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXMgPSAoY3R4dC1cdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgQ01QWENIRzE2QmAgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGBDTVBYQ0hHMTZCYCBpbnN0cnVjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2l0dWF0aW9uIHdoZXJlIHdlIGhhdmUgdGhlIFJFWC5XIHByZWZpeCwgd2hpY2ggc2lnbmlmaWVzIDY0LWJpdCBvcGVyYW5kIHNpemUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgbWVtb3J5IG9wZXJhdGlvbiBzaXplLCBgY3R4dC0mZ3Q7bWVtb3AuYnl0ZXNgLCB3aGljaCBnZXRzIHNldCBiYXNlZCBvbiBgY3R4dC0mZ3Q7b3BfYnl0ZXNgLiBXaGVuIGBvcF9ieXRlc2AgaXMgOCBkdWUgdG8gdGhlIFJFWC5XIHByZWZpeCwgYG1lbW9wLmJ5dGVzYCBiZWNvbWVzIDE2LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIDE2LWJ5dGUgY29tcGFyZS1hbmQtZXhjaGFuZ2Ugb3BlcmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGlzIGhhcHBlbmluZyBjb3JyZWN0bHkuCgpHaXZlbiB0aGF0IGB4ODZfZW11bGF0ZV9pbnNuYCBlbXVsYXRlcyBgQ01QWENIRzE2QmAg4oCTIHdoaWNoIGlzIG9wY29kZSBgMEYgQzcgLzFgIHdpdGggUkVYLlcg4oCTIEkgd2FudCB0byBwaW5wb2ludCB0aGUgbG9naWMgdGhhdCYjMzk7cyBkb2luZyB0aGUgYWN0dWFsIGVtdWxhdGlvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24gdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGUgZW11bGF0aW9uIHRvIGJlIGFyb3VuZCBsaW5lcyA1NDEwLTU0NDAsIHNvIGxldCYjMzk7cyBjaGVjayB0aGVyZSB0byBzZWUgaG93IHRoZSByZWdpc3RlcnMgYW5kIG1lbW9yeSBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQsIHZlcmlmeWluZyB0aGF0IHRoZSBhcHByb3ByaWF0ZSAxNi1ieXRlIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQgd2hlbiBSRVguVyBpcyBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MTA6XHRcdFx0XHRnb3RvIGRvbmU7XG41NDExOlx0XHR9XG41NDEyOlx0XG41NDEzOlx0XHRpZiAoKGN0eHQtXHUwMDNlZCBcdTAwMjYgRHN0TWFzaykgPT0gSW1wbGljaXRPcHMpXG41NDE0Olx0XHRcdGdvdG8gc3BlY2lhbF9pbnNuO1xuNTQxNTpcdFxuNTQxNjpcdFxuNTQxNzpcdFx0aWYgKChjdHh0LVx1MDAzZWRzdC50eXBlID09IE9QX01FTSkgXHUwMDI2XHUwMDI2ICEoY3R4dC1cdTAwM2VkIFx1MDAyNiBNb3YpKSB7XG41NDE4Olx0XHRcdC8qIG9wdGltaXNhdGlvbiAtIGF2b2lkIHNsb3cgZW11bGF0ZWQgcmVhZCBpZiBNb3YgKi9cbjU0MTk6XHRcdFx0cmMgPSBzZWdtZW50ZWRfcmVhZChjdHh0LCBjdHh0LVx1MDAzZWRzdC5hZGRyLm1lbSxcbjU0MjA6XHRcdFx0XHRcdCAgIFx1MDAyNmN0eHQtXHUwMDNlZHN0LnZhbCwgY3R4dC1cdTAwM2Vkc3QuYnl0ZXMpO1xuNTQyMTpcdFx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkge1xuNTQyMjpcdFx0XHRcdGlmICghKGN0eHQtXHUwMDNlZCBcdTAwMjYgTm9Xcml0ZSkgXHUwMDI2XHUwMDI2XG41NDIzOlx0XHRcdFx0ICAgIHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUIFx1MDAyNlx1MDAyNlxuNTQyNDpcdFx0XHRcdCAgICBjdHh0LVx1MDAzZWV4Y2VwdGlvbi52ZWN0b3IgPT0gUEZfVkVDVE9SKVxuNTQyNTpcdFx0XHRcdFx0Y3R4dC1cdTAwM2VleGNlcHRpb24uZXJyb3JfY29kZSB8PSBQRkVSUl9XUklURV9NQVNLO1xuNTQyNjpcdFx0XHRcdGdvdG8gZG9uZTtcbjU0Mjc6XHRcdFx0fVxuNTQyODpcdFx0fVxuNTQyOTpcdFx0LyogQ29weSBmdWxsIDY0LzEyOC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXG41NDMwOlx0XG41NDMxOlx0I2lmZGVmIENPTkZJR19YODZfNjRcbjU0MzI6XHRcdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbjU0MzM6XHRcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7XG41NDM0Olx0XHRlbHNlXG41NDM1Olx0I2VuZGlmXG41NDM2Olx0XHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbjU0Mzc6XHRcbjU0Mzg6XHRzcGVjaWFsX2luc246XG41NDM5Olx0XG41NDQwOlx0XHRpZiAodW5saWtlbHkoY2hlY2tfaW50ZXJjZXB0cykgXHUwMDI2XHUwMDI2IChjdHh0LVx1MDAzZWQgXHUwMDI2IEludGVyY2VwdCkpIHtcbjU0NDE6XHRcdFx0cmMgPSBlbXVsYXRvcl9jaGVja19pbnRlcmNlcHQoY3R4dCwgY3R4dC1cdTAwM2VpbnRlcmNlcHQsXG41NDQyOlx0XHRcdFx0XHRcdCAgICAgIFg4Nl9JQ1BUX1BPU1RfTUVNQUNDRVNTKTtcbjU0NDM6XHRcdFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXG41NDQ0Olx0XHRcdFx0Z290byBkb25lO1xuNTQ0NTpcdFx0fVxuNTQ0NjpcdFxuNTQ0NzpcdFx0aWYgKGN0eHQtXHUwMDNlcmVwX3ByZWZpeCBcdTAwMjZcdTAwMjYgKGN0eHQtXHUwMDNlZCBcdTAwMjYgU3RyaW5nKSlcbjU0NDg6XHRcdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19SRjtcbjU0NDk6XHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEluc3RydWN0aW9uIEVtdWxhdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBLVk0mIzM5O3MgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCB3aGljaCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIGl0cyBvcGVyYXRpb24uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBwYXJ0IHRoYXQga2lja3MgaW4gdmlhIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX1JVTmAgd2hlbiB0aGUgZ3Vlc3QgZW5jb3VudGVycyBNTUlPLCB1bmhhbmRsZWQgVk0gZXhpdHMsIG9yIGludmFsaWQgc3RhdGVzLiBTeXprYWxsZXIsIGEgdG9vbCBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aCwgYWxyZWFkeSBoZWF2aWx5IGxldmVyYWdlcyB0aGVzZSBpb2N0bHMgdG8gdGVzdCBLVk0sIGNyZWF0aW5nIFZNcywgbWFuaXB1bGF0aW5nIHZDUFVzLCBzZXR0aW5nIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMg4oCTIGVmZmVjdGl2ZWx5IHB1dHRpbmcgdGhlIGVtdWxhdG9yIHRocm91Z2ggaXRzIHBhY2VzLiBJdCBmcmVxdWVudGx5IGVtcGxveXMgaW9jdGxzIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsKEtWTV9SVU4pYCBmb3IgdGhpcyBwdXJwb3NlLgoKVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhlIHNwZWNpZmljIGNvZGUgaW4gYGVtX2NtcHhjaGc4YmAgYW5kIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCByZWFjaGFibGUgYW5kIGZ1enphYmxlPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFdlIGtub3cgdGhpcyBiZWNhdXNlIFN5emthbGxlciBhbHJlYWR5IGhpdHMgdGhpcyBhcmVhIHRocm91Z2ggaXRzIGV4dGVuc2l2ZSBLVk0gZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBwcmVzZW5jZSBvZiB0aGUgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uLCBzcGVjaWZpY2FsbHkgYFdBUk5fT05fT05DRSg4ICYjNDM7ICEhKGN0eHQtJmd0O3JleF9iaXRzICZhbXA7IFJFWF9XKSAqIDggIT0gY3R4dC0mZ3Q7ZHN0LmJ5dGVzKWAgaW4gYGVtX2NtcHhjaGc4YmAsIGlzIGEgdmVyeSBwb3NpdGl2ZSBzaWduLiBBc3NlcnRpb25zIGFyZSBleGNlbGxlbnQgdGFyZ2V0cy4gQWxzbywgdGhlIGFkZGVkIGlubGluZSBhc3NlbWJseSBmb3IgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGluIGB1YWNjZXNzLmhgIGFuZCBpdHMgdXNlIGluIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBzdHJlbmd0aGVucyB0aGUgY2FzZS4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgaW5kaWNhdGVzIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBjb3JlIHVhY2Nlc3MgZnVuY3Rpb25hbGl0eS4KCklzIHRoaXMgV29ydGhGdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCBjaGVja3MgYWxsIHRoZSBib3hlczoKCiogICAqKkNvcmUgU3Vic3lzdGVtOioqIEtWTSBpdHNlbGYgYW5kIHRoZSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IuIEFsc28sIHRoZSB1YWNjZXNzIGF0b21pYyBoZWxwZXIgb24gdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYsIHdoaWNoIGlzIGEgY3JpdGljYWwgcGllY2UuCiogICAqKkxvZ2ljIE1vZGlmaWNhdGlvbjoqKiBJdCYjMzk7cyBub3QganVzdCBhIHJlZmFjdG9yaW5nOyBpdCYjMzk7cyBhY3RpdmVseSBtb2RpZnlpbmcgdGhlIGxvZ2ljLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIDEyOC1iaXQgYGNtcHhjaGdgIGluc3RydWN0aW9uIChgY21weGNoZzE2YmApLCBhbmQgaW50cm9kdWNpbmcgaW5saW5lIGFzc2VtYmx5IHRvIGB1YWNjZXNzYC4gQW5kIG9mIGNvdXJzZSB0aGUgYWRkZWQgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGluIGBlbV9jbXB4Y2hnOGJgIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IGVtdWxhdGluZyBndWVzdCBpbnN0cnVjdGlvbnMuCgpDb25maWd1cmF0aW9uIHdpc2UsIHdlJiMzOTtyZSBsb29raW5nIGF0IEtWTSwgc3BlY2lmaWNhbGx5IGBDT05GSUdfS1ZNYCBiZWluZyB0aGUga2V5IGNvbmZpZyBpdGVtLiBXZSBtaWdodCBuZWVkIHRvIGxvb2sgYXQgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBidXQgYENPTkZJR19LVk1gIGlzIHRoZSBtYWluIG9uZS4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtWTSB4ODYgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGdldHRpbmcgY29tcGlsZWQgaW50byB0aGUgS1ZNIHg4NiBtb2R1bGUuIFRoZSB1c3VhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBpcyB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG9iamVjdCBmaWxlcyBhbmQgaG93IHRoZWlyIGluY2x1c2lvbiBpcyBnb3Zlcm5lZCBieSB2YXJpb3VzIEtjb25maWcgb3B0aW9ucy4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgYmFrZWQgaW4sIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIG9yIGV2ZW4gZXhjbHVkZWQgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIHdoZW4gdHJvdWJsZXNob290aW5nIHNwZWNpZmljIEtWTSBpc3N1ZXMgb3IsIG1vcmUgZ2VuZXJhbGx5LCBpZiBJIHdhbnQgdG8gY29udHJpYnV0ZSB0byB0aGUgS1ZNIHg4NiBjb2RlIG9yIHRhaWxvciBhIGJ1aWxkIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBnb2Fscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cbiAgIDQ6XHRjY2ZsYWdzLSQoQ09ORklHX0tWTV9XRVJST1IpICYjNDM7PSAtV2Vycm9yXG4gICA1Olx0XG4gICA2Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgNzpcdFxuICAgODpcdGt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuICAgOTpcdFx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuICAxMDpcdFxuICAxMTpcdGt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG4gIDEyOlx0a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiAgMTM6XHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4gIDE0Olx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbiAgMTU6XHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuICAxNjpcdFxuICAxNzpcdGt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4gIDE4Olx0XHRcdFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cbiAgMTk6XHRcbiAgMjA6XHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXHQmIzQzOz0gdm14L3NneC5vXG4gIDIxOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAyMjpcdGt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuICAyMzpcdFxuICAyNDpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG4gIDI1Olx0XG4gIDI2Olx0a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbiAgMjc6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG4gIDI4Olx0XG4gIDI5Olx0aWZkZWYgQ09ORklHX0hZUEVSVlxuICAzMDpcdGt2bS15XHRcdFx0JiM0Mzs9IGt2bV9vbmh5cGVydi5vXG4gIDMxOlx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbiAgMzI6XHRrdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm1fb25oeXBlcnYub1xuICAzMzpcdGVuZGlmXG4gIDM0Olx0XG4gIDM1Olx0b2JqLSQoQ09ORklHX0tWTV9YODYpXHQmIzQzOz0ga3ZtLm9cbiAgMzY6XHRvYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG4gIDM4Olx0XG4gIDM5Olx0QUZMQUdTX3N2bS92bWVudGVyLm8gICAgOj0gLWlxdW90ZSAkKG9iailcbiAgNDA6XHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBCdWlsZCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBwcm9jZXNzIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBga3ZtLXkgJiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyAuLi5gIGlzIGdvaW5nIHRvIGdldCBidWlsdCBpZiBlaXRoZXIgYENPTkZJR19LVk1fWDg2YCBvciBqdXN0IHBsYWluIGBDT05GSUdfS1ZNYCBhcmUgZW5hYmxlZCwgYnV0IG9ubHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYW4gSW50ZWwgb3IgQU1EIHZpcnR1YWwgbWFjaGluZSwgd2hpY2ggbWVhbnMgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFsc28gY29tZSBpbnRvIHBsYXkuIFNvLCByaWdodCBvZmYgdGhlIGJhdCwgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIGFyZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0LiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgc3ltYm9scy4gSSYjMzk7bGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqYXJlbiYjMzk7dCogc3RhdGljIHdpdGhpbiB0aGUgY2hhbmdlZCBmaWxlcy4gVGhhdCBnaXZlcyBtZSBhIGNsdWUgYWJvdXQgZXhwb3J0ZWQgZnVuY3Rpb25hbGl0eS4KCkZpcnN0IHVwLCBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIEkgc2VlIGB4ODZfZW11bGF0ZV9pbnNuYCBpcyBub24tc3RhdGljLiBHb29kLCB0aGF0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IEtWTS4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYGVtX2NtcHhjaGc4YmAsIHdoaWNoIGlzIHN0YXRpYywgYnV0IGdldHMgY2FsbGVkIGZyb20gdGhlIGltcG9ydGFudCBgeDg2X2VtdWxhdGVfaW5zbmAgc28gaXQmIzM5O3MgcmVsZXZhbnQgdG8gaG93IHRoZSBlbXVsYXRpb24gd29ya3MuCgpOZXh0LCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSGVyZSBJIHNlZSBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgZW11bGF0ZV9vcHMuY21weGNoZ19lbXVsYXRlZGAsIHNvIGl0JiMzOTtzIGNsZWFybHkgaW52b2x2ZWQgaW4gaG93IHNvbWV0aGluZyBpcyBlbXVsYXRlZC4gVGhhdCYjMzk7cyBhIGtleSBsaW5lIG9mIGlucXVpcnkuIFRoZW4sIHRoZXJlJiMzOTtzIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYW5kIG1heWJlIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIgYXMgdGhlIGVudHJ5IHBvaW50cyBpbiBgeDg2LmNgLiBJJiMzOTtsbCBuZWVkIHRvIGNoYXNlIGRvd24gdGhlIGNhbGxlcnMgb2YgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGFuZCB0aG9zZSB4ODYgZW11bGF0b3IgZW50cnlwb2ludHMgaW4gYHg4Ni5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ODZfZW11bGF0ZV9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDg2Mz1pbnQgeDg2X2RlY29kZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4sIGludCBlbXVsYXRpb25fdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUxNDMtXHRcdCAqIFRoZXNlIGFyZSBjb3BpZWQgdW5jb25kaXRpb25hbGx5IGhlcmUsIGFuZCBjaGVja2VkIHVuY29uZGl0aW9uYWxseVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1MTQ0Olx0XHQgKiBpbiB4ODZfZW11bGF0ZV9pbnNuLlxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01MTQ1LVx0XHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTUyNjg9dm9pZCBpbml0X2RlY29kZV9jYWNoZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUyODQtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjUyODU6aW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cylcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTI4Ni17XG4tLVxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmg9NTQxPXZvaWQgaW5pdF9kZWNvZGVfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpO1xuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmg6NTQyOmludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpO1xuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtNTQzLWludCBlbXVsYXRvcl90YXNrX3N3aXRjaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMzNT1pbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NDc1LVx0ICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjQ3NjpcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjQ3Ny1cdFx0XHRcdCAgICEoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX05PX0RFQ09ERSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYzNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBDYWxsZXJzIGZvciBUaG9yb3VnaG5lc3MqKgoKT2theSwgc28gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoYXQgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGFsbCB0aGUgcGxhY2VzIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vYCBkaXJlY3RvcnkuIEV2ZW4gdGhvdWdoIEkgaGF2ZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBpdCYjMzk7cyBhbHdheXMgd29ydGggZG91YmxlLWNoZWNraW5nIOKAkyBlc3BlY2lhbGx5IGluIHRoaXMgY3JpdGljYWwgYXJlYSDigJMgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBUaGlzIGtpbmQgb2YgbWV0aWN1bG91c25lc3MgaXMgZXNzZW50aWFsOyBhIHNpbXBsZSBvdmVyc2lnaHQgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHkgYnVncyBkb3duIHRoZSBsaW5lLiBJdOKAmXMgYWJvdXQgYmVpbmcgcHJlY2lzZSBhbmQgbGVhdmluZyBubyBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21weGNoZ19lbXVsYXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTEzNDQ9c3RhdGljIGludCBzZWdtZW50ZWRfY21weGNoZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTEzNTQtXHRcdHJldHVybiByYztcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTM1NTpcdHJldHVybiBjdHh0LVx1MDAzZW9wcy1cdTAwM2VjbXB4Y2hnX2VtdWxhdGVkKGN0eHQsIGxpbmVhciwgb3JpZ19kYXRhLCBkYXRhLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzU2LVx0XHRcdFx0XHQgICBzaXplLCBcdTAwMjZjdHh0LVx1MDAzZWV4Y2VwdGlvbik7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xNTE3PXN0YXRpYyBpbnQgX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3MTItXHRcdHNlZ19kZXNjLnR5cGUgfD0gMjsgLyogYnVzeSAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxNzEzOlx0XHRyZXQgPSBjdHh0LVx1MDAzZW9wcy1cdTAwM2VjbXB4Y2hnX2VtdWxhdGVkKGN0eHQsIGRlc2NfYWRkciwgXHUwMDI2b2xkX2Rlc2MsIFx1MDAyNnNlZ19kZXNjLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzE0LVx0XHRcdFx0XHRcdCAgc2l6ZW9mKHNlZ19kZXNjKSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24pO1xuLS1cbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTEwOT1zdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHtcbi0tXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaC0xODEtXHQvKlxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmg6MTgyOlx0ICogY21weGNoZ19lbXVsYXRlZDogRW11bGF0ZSBhbiBhdG9taWMgKExPQ0tlZCkgQ01QWENIRyBvcGVyYXRpb24gb24gYW5cbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE4My1cdCAqICAgICAgICAgICAgICAgICAgIGVtdWxhdGVkL3NwZWNpYWwgbWVtb3J5IGFyZWEuXG4tLVxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMTg4LVx0ICovXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaDoxODk6XHRpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE5MC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTI0Mj1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MjU5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyNjA6c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNjEtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTgyNy1cdC53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTgyODpcdC5jbXB4Y2hnX2VtdWxhdGVkICAgID0gZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI5LVx0LmludmxwZyAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pbnZscGcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzE0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBFbXVsYXRpb24gV3JpdGViYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd3JpdGViYWNrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGVtdWxhdGlvbiBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBlbXVsYXRlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgYHdyaXRlYmFja2AgdXNlcyBgc2VnbWVudGVkX2NtcHhjaGdgIGZvciB0aG9zZSBsb2NrZWQgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcgY2hvaWNlISYjMzQ7IEkga25vdyB0aGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSB4ODYtc3BlY2lmaWMgcGFydCwgYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLCBhbmQgY29uZmlybSB0aGlzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBhdG9taWNpdHkgZ3VhcmFudGVlcyB0aGV5IGFyZSB1c2luZyBpbiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWdtZW50ZWRfY21weGNoZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTEzMjk9c3RhdGljIGludCBzZWdtZW50ZWRfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzQzLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxMzQ0OnN0YXRpYyBpbnQgc2VnbWVudGVkX2NtcHhjaGcoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTEzNDUtXHRcdFx0ICAgICBzdHJ1Y3Qgc2VnbWVudGVkX2FkZHJlc3MgYWRkcixcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTE3NTU9c3RhdGljIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBvcGVyYW5kICpvcClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NjItXHRcdGlmIChjdHh0LVx1MDAzZWxvY2tfcHJlZml4KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxNzYzOlx0XHRcdHJldHVybiBzZWdtZW50ZWRfY21weGNoZyhjdHh0LFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzY0LVx0XHRcdFx0XHRcdCBvcC1cdTAwM2VhZGRyLm1lbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMTcKCQkJCQkJCW91dHB1dDogMjIzCgkJCQkJCQl0aG91Z2h0czogOTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDTVBYQ0hHMTZCIEVtdWxhdGlvbiAtIEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBhdGNoLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBDTVBYQ0hHMTZCIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0sIHdoaWNoIGlzIGEga25vd24gYXJlYSBmb3IgY29tcGxleCBpbnRlcmFjdGlvbnMuCgpGaXJzdCwgSSBsb29rZWQgYXQgdGhlIGB3cml0ZWJhY2tgIGZ1bmN0aW9uLiBUaGlzIHBvaW50cyB0byBgc2VnbWVudGVkX2NtcHhjaGdgIGFuZCB0aGVuIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgQ01QWENIRyBlbXVsYXRpb24gcGF0aC4gIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCB1bHRpbWF0ZWx5IGNhbGxzIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCB3aGljaCB0aGVuIGNhbGxzIGBfX3RyeV9jbXB4Y2hnX3VzZXJgIC0mZ3Q7IGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAgYW5kIGZpbmFsbHkgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gLCB3aGljaCBpcyB0aGUgaW5saW5lIGFzc2VtYmx5IHRoYXQgaW1wbGVtZW50cyBgY21weGNoZzE2YmAuICBUaGlzIGFsc28gc2hvd3MgdGhhdCBgY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC0mZ3Q7ZHN0LnZhbDEyODtgIGdldHMgc2V0IGR1cmluZyB0aGUgcHJvY2VzcyB3aGVuIGBjdHh0LSZndDtkc3QuYnl0ZXMgPT0gMTZgLgoKTXkga2V5IHN5bWJvbHMgZm9yIGFuYWx5c2lzIGFyZSBub3c6IGBlbV9jbXB4Y2hnOGJgLCBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAsIGB4ODZfZW11bGF0ZV9pbnNuYCwgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuIGBlbV9jbXB4Y2hnOGJgIGhhbmRsZXMgYm90aCBgY21weGNoZzhiYCBhbmQgYGNtcHhjaGcxNmJgLiAgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGlzIGV4cGxpY2l0bHkgZm9yIGVtdWxhdGVkIENNUFhDSEcgb3BlcmF0aW9ucy4gYHg4Nl9lbXVsYXRlX2luc25gIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFyZSB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludHMgaW50byB0aGUgS1ZNIGluc3RydWN0aW9uIGVtdWxhdG9yLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSSBxdWlja2x5IGlkZW50aWZpZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuICBJIGFsc28gY2hlY2tlZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQuIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCByZXF1aXJlcyBgWDg2X0ZFQVRVUkVfQ1gxNmAsIGFuZCBpdCYjMzk7cyBnYXRlZCBieSBgQ09ORklHX1g4Nl82NGAuICBUaGUgdGFyZ2V0IGlzIEFNRDY0LgoKQmFzZWQgb24gdGhpcywgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIENNUFhDSEcxNkIuIEl0IGludHJvZHVjZXMgbmV3IGlubGluZSBhc3NlbWJseSwgYWRkcyBhc3NlcnRpb25zIG9uIHg4Nl82NCwgYW5kIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZXhpc3RpbmcgZW11bGF0aW9uIHJvdXRpbmVzLiBUaGlzIG1ha2VzIGl0IHdvcnRoIGZ1enppbmcgYXMgdGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgZW11bGF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbV9jbXB4Y2hnOGImIzM0OywKICAgICYjMzQ7ZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnNuJiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1fY21weGNoZzhiJiMzNDssCiAgICAmIzM0O2VtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zbiYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciAxMjgtYml0IENNUFhDSEcxNkIgZW11bGF0aW9uIHRvIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBpbXBsZW1lbnRzIGEgbmV3IDEyOC1iaXQgdXNlciBjbXB4Y2hnIGlubGluZSBhc3NlbWJseSBwcmltaXRpdmUgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20pIG9uIHg4Nl82NC4gSXQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24gaW4gZW1fY21weGNoZzhiIGFuZCBtb2RpZmllcyBvcGVyYW5kIGhhbmRsaW5nIGluIHg4Nl9lbXVsYXRlX2luc24gYW5kIGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIHZpYSBzdGFuZGFyZCBLVk0gZ3Vlc3QgZW11bGF0aW9uIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgdXNlciBzcGFjZSBjb21wYXJlLWFuZC1zd2FwIChfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtIHVzaW5nIGNtcHhjaGcxNmIpIGFuZCBhZGRzIENNUFhDSEcxNkIgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGluIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxuMS4gQWRkaW5nIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBpbmxpbmUgYXNzZW1ibHkgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAgdG8gYXRvbWljYWxseSBjb21wYXJlIGFuZCBzd2FwIDEyOC1iaXQgdmFsdWVzIGF0IHVzZXIgYWRkcmVzc2VzLlxuMi4gVXBkYXRpbmcgYHN0cnVjdCBvcGVyYW5kYCBpbiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgd2l0aGluIGV4aXN0aW5nIHVuaW9ucy5cbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Uga2VybmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cdTAwM2Vkc3QudmFsMTI4YCwgYG9sZGAsIGBuZXdgLCBndWVzdCByZWdpc3RlciB2YWx1ZXMpIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgaW5pdGlhbGl6ZWQgZHVyaW5nIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBleGVjdXRpb24uXG4tIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZ3MgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjllNzQ4YTY4OTAyNzExNDllMjExYTIwMjEwNTAwNmUxZGVlNzFmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDc6NTk6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggM2EwZGQzYzJiMjMzZS4uOTQ4OTM3YTI0Y2M1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNDA3LDYgJiM0Mzs0MDcsMjcgQEAgZG8gewkJCQkJCQkJCVwKIAlpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKQkJCQkJCVwKIAkJKl9vbGQgPSBfX29sZDsJCQkJCQlcCiAJbGlrZWx5KHN1Y2Nlc3MpOwkJCQkJfSkKJiM0MzsjZWxzZSAvLyAhQ09ORklHX1g4Nl8zMgomIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpCSh7CVwKJiM0MzsJYm9vbCBzdWNjZXNzOwkJCQkJCQlcCiYjNDM7CV9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7CQlcCiYjNDM7CXU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkOwkJCQkJXAomIzQzOwl1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkICZndDsmZ3Q7IDY0KTsJCQkJXAomIzQzOwlfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpOwkJCQlcCiYjNDM7CWFzbV9nb3RvX291dHB1dCgmIzM0O1xuJiMzNDsJCQkJCQlcCiYjNDM7CQkgICAgICYjMzQ7MTogJiMzNDsgTE9DS19QUkVGSVggJiMzNDtjbXB4Y2hnMTZiICVbcHRyXVxuJiMzNDsJCVwKJiM0MzsJCSAgICAgX0FTTV9FWFRBQkxFX1VBKDFiLCAlbFtsYWJlbF0pCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7PUBjY3omIzM0OyAoc3VjY2VzcyksCQkJCVwKJiM0MzsJCSAgICAgICAmIzM0OyYjNDM7YSYjMzQ7IChfX29sZF9sb3cpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDsmIzQzO2QmIzM0OyAoX19vbGRfaGlnaCksCQkJCVwKJiM0MzsJCSAgICAgICBbcHRyXSAmIzM0OyYjNDM7bSYjMzQ7ICgqX3B0cikJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7YiYjMzQ7ICgodTY0KV9fbmV3KSwJCQkJXAomIzQzOwkJICAgICAgICYjMzQ7YyYjMzQ7ICgodTY0KSgodTEyOClfX25ldyAmZ3Q7Jmd0OyA2NCkpCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDsJCQkJCQlcCiYjNDM7CQkgICAgIDogbGFiZWwpOwkJCQkJCVwKJiM0MzsJaWYgKHVubGlrZWx5KCFzdWNjZXNzKSkJCQkJCQlcCiYjNDM7CQkqX29sZCA9ICgodTEyOClfX29sZF9oaWdoICZsdDsmbHQ7IDY0KSB8IF9fb2xkX2xvdzsJCVwKJiM0MzsJbGlrZWx5KHN1Y2Nlc3MpOwkJCQkJfSkKICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyCiAjZWxzZSAgLy8gIUNPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVQKICNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbCkJKHsgXApAQCAtNDYzLDYgJiM0Mzs0ODQsMzIgQEAgZG8gewkJCQkJCQkJCVwKIAlpZiAodW5saWtlbHkoIV9fcmVzdWx0KSkJCQkJCVwKIAkJKl9vbGQgPSBfX29sZDsJCQkJCQlcCiAJbGlrZWx5KF9fcmVzdWx0KTsJCQkJCX0pCiYjNDM7I2Vsc2UgLy8hQ09ORklHX1g4Nl8zMgomIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpCSh7CVwKJiM0MzsJaW50IF9fcmVzdWx0OwkJCQkJCQlcCiYjNDM7CV9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7CQlcCiYjNDM7CXU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkOwkJCQkJXAomIzQzOwl1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkICZndDsmZ3Q7IDY0KTsJCQkJXAomIzQzOwlfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpOwkJCQlcCiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O1xuJiMzNDsJCQkJCQlcCiYjNDM7CQkgICAgICYjMzQ7MTogJiMzNDsgTE9DS19QUkVGSVggJiMzNDtjbXB4Y2hnMTZiICVbcHRyXVxuJiMzNDsJCVwKJiM0MzsJCSAgICAgJiMzNDttb3YgJDAsICVbcmVzdWx0XVxuXHQmIzM0OwkJCQlcCiYjNDM7CQkgICAgICYjMzQ7c2V0eiAlYltyZXN1bHRdXG4mIzM0OwkJCQlcCiYjNDM7CQkgICAgICYjMzQ7MjpcbiYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICBfQVNNX0VYVEFCTEVfVFlQRV9SRUcoMWIsIDJiLCBFWF9UWVBFX0VGQVVMVF9SRUcsCVwKJiM0MzsJCQkJCSAgICVbcmVzdWx0XSkJCQlcCiYjNDM7CQkgICAgIDogW3Jlc3VsdF0gJiMzNDs9cSYjMzQ7IChfX3Jlc3VsdCksCQkJXAomIzQzOwkJICAgICAgICYjMzQ7JiM0MzthJiMzNDsgKF9fb2xkX2xvdyksCQkJCVwKJiM0MzsJCSAgICAgICAmIzM0OyYjNDM7ZCYjMzQ7IChfX29sZF9oaWdoKSwJCQkJXAomIzQzOwkJICAgICAgIFtwdHJdICYjMzQ7JiM0MzttJiMzNDsgKCpfcHRyKQkJCQlcCiYjNDM7CQkgICAgIDogJiMzNDtiJiMzNDsgKCh1NjQpX19uZXcpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDtjJiMzNDsgKCh1NjQpKCh1MTI4KV9fbmV3ICZndDsmZ3Q7IDY0KSkJCQlcCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsJCQkJCVwKJiM0MzsJaWYgKHVubGlrZWx5KF9fcmVzdWx0ICZsdDsgMCkpCQkJCQlcCiYjNDM7CQlnb3RvIGxhYmVsOwkJCQkJCVwKJiM0MzsJaWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpCQkJCQlcCiYjNDM7CQkqX29sZCA9ICgodTEyOClfX29sZF9oaWdoICZsdDsmbHQ7IDY0KSB8IF9fb2xkX2xvdzsJCVwKJiM0MzsJbGlrZWx5KF9fcmVzdWx0KTsJCQkJCX0pCiAjZW5kaWYgLy8gQ09ORklHX1g4Nl8zMgogI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVQKIApAQCAtNTUxLDExICYjNDM7NTk4LDE4IEBAIGRvIHsJCQkJCQkJCQkJXAogCiBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTsKIAotI2lmbmRlZiBDT05GSUdfWDg2XzMyCiYjNDM7I2lmZGVmIENPTkZJR19YODZfMzIKJiM0MzsvKgomIzQzOyAqIEFsd2F5cyBmYWlsIG9uIDMyIGJpdCBhcmNoIG9yIDY0IGFyY2ggd2l0aG91dCAxMjggYml0IGNtcHhjaGcgc3VwcG9ydAomIzQzOyAqLwomIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpICh7IEJVSUxEX0JVR19PTigxKTsgMDsgfSkKJiM0MzsjZWxzZQogI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpCQlcCiAJX190cnlfY21weGNoZ191c2VyX2FzbSgmIzM0O3EmIzM0OywgJiMzNDtyJiMzNDssIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKQomIzQzOwogI2VuZGlmCiAKJiM0MzsKIC8qCiAgKiBGb3JjZSB0aGUgcG9pbnRlciB0byB1Jmx0O3NpemUmZ3Q7IHRvIG1hdGNoIHRoZSBzaXplIGV4cGVjdGVkIGJ5IHRoZSBhc20gaGVscGVyLgogICogY2xhbmcvTExWTSBjb21waWxlcyBhbGwgY2FzZXMgYW5kIG9ubHkgZGlzY2FyZHMgdGhlIHVudXNlZCBwYXRocyBhZnRlcgpAQCAtNTgwLDYgJiM0Mzs2MzQsMTQgQEAgZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7CiAJY2FzZSA4OglfX3JldCA9IF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbSgoX19mb3JjZSB1NjQgKikoX3B0ciksIChfb2xkcCksXAogCQkJCQkJIChfbnZhbCksIF9sYWJlbCk7CQlcCiAJCWJyZWFrOwkJCQkJCQkJXAomIzQzOwljYXNlIDE2OgkJCQkJCQkJXAomIzQzOwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KSkJCQkJXAomIzQzOwkJCV9fcmV0ID0gX190cnlfY21weGNoZzEyOF91c2VyX2FzbSgJCQlcCiYjNDM7CQkJCQkoX19mb3JjZSB1MTI4ICopKF9wdHIpLAkJCVwKJiM0MzsJCQkJCShfb2xkcCksIChfbnZhbCksIF9sYWJlbCk7CQlcCiYjNDM7CQllbHNlCQkJCQkJCQlcCiYjNDM7CQkJX19yZXQgPSAwOwkJCQkJCVwKJiM0MzsJCWJyZWFrOwkJCQkJCQkJXAogCWRlZmF1bHQ6IF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKCk7CQkJCVwKIAl9CQkJCQkJCQkJXAogCV9fcmV0OwkJCQkJCX0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwppbmRleCBjMWIyMTI4MjE4N2YzLi41MzU4NDIzMzZkNzY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKQEAgLTIxODQsMjQgJiM0MzsyMTg0LDM2IEBAIHN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIAlyZXR1cm4gcmM7CiB9CiAKJiM0MzsjZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXAomIzQzO2RvIHsJCQkJCQkJCQkJCQlcCiYjNDM7CXUjI21iaXRzIG9sZCA9IF9fYy0mZ3Q7ZHN0Lm9yaWdfdmFsIyNtYml0czsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQkJXAomIzQzOwlCVUlMRF9CVUdfT04ocmJpdHMgKiAyICE9IG1iaXRzKTsJCQkJCQkJXAomIzQzOwkJCQkJCQkJCQkJCVwKJiM0MzsJaWYgKCgodSMjcmJpdHMpIChvbGQgJmd0OyZndDsgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fAkJXAomIzQzOwkgICAgKCh1IyNyYml0cykgKG9sZCAmZ3Q7Jmd0OyByYml0cykgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SRFgpKSkgewkJXAomIzQzOwkJKnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SQVgpID0gKHUjI3JiaXRzKSAob2xkICZndDsmZ3Q7IDApOwkJCVwKJiM0MzsJCSpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCAmZ3Q7Jmd0OyByYml0cyk7CQkJXAomIzQzOwkJX19jLSZndDtlZmxhZ3MgJmFtcDs9IH5YODZfRUZMQUdTX1pGOwkJCQkJCQlcCiYjNDM7CX0gZWxzZSB7CQkJCQkJCQkJCVwKJiM0MzsJCV9fYy0mZ3Q7ZHN0LnZhbCMjbWJpdHMgPSAoKHUjI21iaXRzKXJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JDWCkgJmx0OyZsdDsgcmJpdHMpIHwJXAomIzQzOwkJCQkJKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpOwkJXAomIzQzOwkJCQkJCQkJCQkJCVwKJiM0MzsJCV9fYy0mZ3Q7ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7CQkJCQkJCVwKJiM0MzsJfQkJCQkJCQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiBzdGF0aWMgaW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLQl1NjQgb2xkID0gY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsNjQ7Ci0KLQlpZiAoY3R4dC0mZ3Q7ZHN0LmJ5dGVzID09IDE2KQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKDggJiM0MzsgISEoY3R4dC0mZ3Q7cmV4X2JpdHMgJmFtcDsgUkVYX1cpICogOCAhPSBjdHh0LSZndDtkc3QuYnl0ZXMpKQogCQlyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiAKLQlpZiAoKCh1MzIpIChvbGQgJmd0OyZndDsgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8Ci0JICAgICgodTMyKSAob2xkICZndDsmZ3Q7IDMyKSAhPSAodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkRYKSkpIHsKLQkJKnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkFYKSA9ICh1MzIpIChvbGQgJmd0OyZndDsgMCk7Ci0JCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JEWCkgPSAodTMyKSAob2xkICZndDsmZ3Q7IDMyKTsKLQkJY3R4dC0mZ3Q7ZWZsYWdzICZhbXA7PSB+WDg2X0VGTEFHU19aRjsKLQl9IGVsc2UgewotCQljdHh0LSZndDtkc3QudmFsNjQgPSAoKHU2NClyZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkNYKSAmbHQ7Jmx0OyAzMikgfAotCQkJKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JCWCk7Ci0KLQkJY3R4dC0mZ3Q7ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7Ci0JfQomIzQzOwlpZiAoIShjdHh0LSZndDtyZXhfYml0cyAmYW1wOyBSRVhfVykpCiYjNDM7CQllbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDMyLCA2NCk7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJZWxzZQomIzQzOwkJZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KTsKJiM0MzsjZW5kaWYKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIApAQCAtNTQxNCw4ICYjNDM7NTQyNiwxNCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBjaGVja19pbnRlcmNlcHRzKQogCQkJZ290byBkb25lOwogCQl9CiAJfQotCS8qIENvcHkgZnVsbCA2NC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovCi0JY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LSZndDtkc3QudmFsNjQ7CiYjNDM7CS8qIENvcHkgZnVsbCA2NC8xMjgtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqLwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CWlmIChjdHh0LSZndDtkc3QuYnl0ZXMgPT0gMTYpCiYjNDM7CQljdHh0LSZndDtkc3Qub3JpZ192YWwxMjggPSBjdHh0LSZndDtkc3QudmFsMTI4OwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQljdHh0LSZndDtkc3Qub3JpZ192YWw2NCA9IGN0eHQtJmd0O2RzdC52YWw2NDsKIAogc3BlY2lhbF9pbnNuOgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oCmluZGV4IDNlMzc1YWYxNWMwMzUuLjg5OTExODQ1MjMzZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oCkBAIC0yNjMsNiAmIzQzOzI2Myw5IEBAIHN0cnVjdCBvcGVyYW5kIHsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgb3JpZ192YWw7CiAJCXU2NCBvcmlnX3ZhbDY0OwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CQl1MTI4IG9yaWdfdmFsMTI4OwomIzQzOyNlbmRpZgogCX07CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nICpyZWc7CkBAIC0yNzYsNiAmIzQzOzI3OSw5IEBAIHN0cnVjdCBvcGVyYW5kIHsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgdmFsOwogCQl1NjQgdmFsNjQ7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJCXUxMjggdmFsMTI4OwomIzQzOyNlbmRpZgogCQljaGFyIHZhbHB0cltzaXplb2YoYXZ4MjU2X3QpXTsKIAkJc3NlMTI4X3QgdmVjX3ZhbDsKIAkJYXZ4MjU2X3QgdmVjX3ZhbDI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uNjBiZTE2ZjA1ZDc5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNTI3MSw3ICYjNDM7NTI3MSw3IEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAlpbnQgcjsKIAogCS8qIGd1ZXN0cyBjbXB4Y2hnOGIgaGF2ZSB0byBiZSBlbXVsYXRlZCBhdG9taWNhbGx5ICovCi0JaWYgKGJ5dGVzICZndDsgOCB8fCAoYnl0ZXMgJmFtcDsgKGJ5dGVzIC0gMSkpKQomIzQzOwlpZiAoYnl0ZXMgJmd0OyAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIHx8IChieXRlcyAmYW1wOyAoYnl0ZXMgLSAxKSkpCiAJCWdvdG8gZW11bF93cml0ZTsKIAogCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTsKQEAgLTUzMTEsNiAmIzQzOzUzMTEsMTEgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCWNhc2UgODoKIAkJciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTsKIAkJYnJlYWs7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJY2FzZSAxNjoKJiM0MzsJCXIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd2FycmFudCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZXhwZXJ0IGV5ZSBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgbmV3IGBjbXB4Y2hnMTZiYCBpbXBsZW1lbnRhdGlvbiBmb3IgeDg2XzY0LCBhcyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggMTI4LWJpdCBhdG9taWMgb3BlcmF0aW9ucywgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAsIHdoaWNoIGlzIGNydWNpYWwuIEl0JiMzOTtzIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiB1c2luZyBgY21weGNoZzE2YmAgZm9yIHVzZXItc3BhY2UgbWVtb3J5IG9wZXJhdGlvbnMuIFRoZSBgdHJ5X2NtcHhjaGdfdXNlcmAgZXh0ZW5zaW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgaGFuZGxlcyB0aGUgYGNhc2UgMTY6YCBzY2VuYXJpbyBpZiB0aGUgQ1BVIHN1cHBvcnRzIGl0LiBTbyBmYXIsIHNvIGdvb2QsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGVyLgoKVGhlIEtWTSBzaWRlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBDTVBYQ0hHMTZCYCBlbXVsYXRpb24gaXMgZXhwZWN0ZWQuIFRoZSBgZW1fY21weGNoZzhiXzE2YmAgbWFjcm8gc2VlbXMgdG8gdW5pZnkgdGhlIGhhbmRsaW5nIG9mIDgtIGFuZCAxNi1ieXRlIGNtcHhjaGcgb3BlcmF0aW9ucy4gVGhlIHVwZGF0ZSB0byBgZW1fY21weGNoZzhiYCB0byBjYWxsIGBlbV9jbXB4Y2hnOGJfMTZiYCB3aGVuIGBSRVhfV2AgaXMgc2V0IGlzIHRoZSBjcml0aWNhbCBwb2ludCBmb3IgZGV0ZWN0aW5nIGEgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkYXRhZmxvdy4gVGhlIGFkZGl0aW9uIG9mIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIChhcyBgdTEyOGApIHRvIGBzdHJ1Y3Qgb3BlcmFuZGAgaW4gYGt2bV9lbXVsYXRlLmhgIGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGltcGxpZXMgdGhlc2UgdmFsdWVzIGFyZSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCBwb3RlbnRpYWxseSByZWFkIGZyb20gbWVtb3J5LgoKRmluYWxseSwgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIEkgc2VlIHRoYXQgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIG5vdyBzdXBwb3J0cyBvcGVyYW5kcyB1cCB0byAxNiBieXRlcy4gVGhlIGFkZGVkIGBjYXNlIDE2YCBpbiBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgaGFuZGxlcyB0aGUgMTI4LWJpdCBjbXB4Y2hnIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGFuIGlzc3VlLgoKTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZCBvcGVyYW5kIGZldGNoaW5nIGluIGJvdGggYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgaW4gdGhvc2UgYXJlYXMgdG8gc2VlIHdoZXJlIHRoZXNlIG5ldyAxMjgtYml0IHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQsIHVzZWQsIGFuZCwgY3J1Y2lhbGx5LCAqcG90ZW50aWFsbHkqIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdvdWxkIGxpa2VseSBtYW5pZmVzdC4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gbWlnaHQgYmUgbmVjZXNzYXJ5IGRlcGVuZGluZyBvbiB3aGF0IEkgZGlzY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNTktXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI2MS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODI3LVx0LndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODI4Olx0LmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjktXHQuaW52bHBnICAgICAgICAgICAgICA9IGVtdWxhdG9yX2ludmxwZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBjbXB4Y2hnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGBjbXB4Y2hnYCBlbXVsYXRpb24gd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgbWVtb3J5LiBMZXQmIzM5O3MgemVybyBpbiBvbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhcm91bmQgbGluZSA1MjYwOyB0aGF0JiMzOTtzIHdoZXJlIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCBzaG91bGQgYmUuIE15IGtleSBxdWVzdGlvbjogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBtYW5hZ2UgdG8gZW11bGF0ZSB0aGUgYXRvbWljIGNvbXBhcmUtYW5kLWV4Y2hhbmdlIG9wZXJhdGlvbiAqc2FmZWx5KiBhbmQgZWZmaWNpZW50bHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IHJlc2lkaW5nIGluIHVzZXIgc3BhY2U/IEkgbmVlZCB0byB0cmFjayBob3cgb3BlcmFuZCBtZW1vcnkgaXMgcGFzc2VkIHRocm91Z2ggdGhlIGNvZGUuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGd1YXJhbnRlZXMsIGFuZCBhbnkgbmVjZXNzYXJ5IGNoZWNrcyB0byBlbnN1cmUgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMgYXMgZXhwZWN0ZWQgd2l0aG91dCBjYXVzaW5nIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFjY2VzcyBtZXRob2RzLCBhbnkgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB1c2VyIG1lbW9yeSBhY2Nlc3MsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgZW1wbG95ZWQuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGVsZWdhbmNlIChvciBsYWNrIHRoZXJlb2YpIG9mIHRoZSB4ODYgYGNtcHhjaGdgIGVtdWxhdGlvbiBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIG9yIGFyZWFzIHdoZXJlIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nIGNvdWxkIGJlIGludHJvZHVjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjYwOlx0c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuNTI2MTpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG41MjYyOlx0XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKm9sZCxcbjUyNjM6XHRcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqbmV3LFxuNTI2NDpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXG41MjY1Olx0XHRcdFx0XHQgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pXG41MjY2Olx0e1xuNTI2NzpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZW11bF90b192Y3B1KGN0eHQpO1xuNTI2ODpcdFx0dTY0IHBhZ2VfbGluZV9tYXNrO1xuNTI2OTpcdFx0dW5zaWduZWQgbG9uZyBodmE7XG41MjcwOlx0XHRncGFfdCBncGE7XG41MjcxOlx0XHRpbnQgcjtcbjUyNzI6XHRcbjUyNzM6XHRcdC8qIGd1ZXN0cyBjbXB4Y2hnOGIgaGF2ZSB0byBiZSBlbXVsYXRlZCBhdG9taWNhbGx5ICovXG41Mjc0Olx0XHRpZiAoYnl0ZXMgXHUwMDNlIDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgfHwgKGJ5dGVzIFx1MDAyNiAoYnl0ZXMgLSAxKSkpXG41Mjc1Olx0XHRcdGdvdG8gZW11bF93cml0ZTtcbjUyNzY6XHRcbjUyNzc6XHRcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcbjUyNzg6XHRcbjUyNzk6XHRcdGlmIChncGEgPT0gSU5WQUxJRF9HUEEgfHxcbjUyODA6XHRcdCAgICAoZ3BhIFx1MDAyNiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpXG41MjgxOlx0XHRcdGdvdG8gZW11bF93cml0ZTtcbjUyODI6XHRcbjUyODM6XHRcdC8qXG41Mjg0Olx0XHQgKiBFbXVsYXRlIHRoZSBhdG9taWMgYXMgYSBzdHJhaWdodCB3cml0ZSB0byBhdm9pZCAjQUMgaWYgU0xEIGlzXG41Mjg1Olx0XHQgKiBlbmFibGVkIGluIHRoZSBob3N0IGFuZCB0aGUgYWNjZXNzIHNwbGl0cyBhIGNhY2hlIGxpbmUuXG41Mjg2Olx0XHQgKi9cbjUyODc6XHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKVxuNTI4ODpcdFx0XHRwYWdlX2xpbmVfbWFzayA9IH4oY2FjaGVfbGluZV9zaXplKCkgLSAxKTtcbjUyODk6XHRcdGVsc2VcbjUyOTA6XHRcdFx0cGFnZV9saW5lX21hc2sgPSBQQUdFX01BU0s7XG41MjkxOlx0XG41MjkyOlx0XHRpZiAoKChncGEgJiM0MzsgYnl0ZXMgLSAxKSBcdTAwMjYgcGFnZV9saW5lX21hc2spICE9IChncGEgXHUwMDI2IHBhZ2VfbGluZV9tYXNrKSlcbjUyOTM6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI5NDpcdFxuNTI5NTpcdFx0aHZhID0ga3ZtX3ZjcHVfZ2ZuX3RvX2h2YSh2Y3B1LCBncGFfdG9fZ2ZuKGdwYSkpO1xuNTI5NjpcdFx0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbjUyOTc6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI5ODpcdFxuNTI5OTpcdFx0aHZhICYjNDM7PSBvZmZzZXRfaW5fcGFnZShncGEpO1xuNTMwMDpcdFxuNTMwMTpcdFx0c3dpdGNoIChieXRlcykge1xuNTMwMjpcdFx0Y2FzZSAxOlxuNTMwMzpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1OCwgaHZhLCBvbGQsIG5ldyk7XG41MzA0Olx0XHRcdGJyZWFrO1xuNTMwNTpcdFx0Y2FzZSAyOlxuNTMwNjpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xuNTMwNzpcdFx0XHRicmVhaztcbjUzMDg6XHRcdGNhc2UgNDpcbjUzMDk6XHRcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTMyLCBodmEsIG9sZCwgbmV3KTtcbjUzMTA6XHRcdFx0YnJlYWs7XG41MzExOlx0XHRjYXNlIDg6XG41MzEyOlx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU2NCwgaHZhLCBvbGQsIG5ldyk7XG41MzEzOlx0XHRcdGJyZWFrO1xuNTMxNDpcdCNpZmRlZiBDT05GSUdfWDg2XzY0XG41MzE1Olx0XHRjYXNlIDE2OlxuNTMxNjpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTtcbjUzMTc6XHRcdFx0YnJlYWs7XG41MzE4Olx0I2VuZGlmXG41MzE5Olx0XHRkZWZhdWx0OlxuNTMyMDpcdFx0XHRCVUcoKTtcbjUzMjE6XHRcdH1cbjUzMjI6XHRcbjUzMjM6XHRcdGlmIChyIFx1MDAzYyAwKVxuNTMyNDpcdFx0XHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBFbXVsYXRvciBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBiZWluZyB1c2VkLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBhdG9taWNzLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaXJjbGUgYmFjayBhbmQgcmVhbGx5IHNjcnV0aW5pemUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgY29uY3VycmVudCBlbnZpcm9ubWVudCBsaWtlIGFuIGVtdWxhdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgbGV2ZXJhZ2luZyBjb21wYXJlLWFuZC1zd2FwIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgYWNjZXNzaW5nIHNoYXJlZCBlbXVsYXRvciByZXNvdXJjZXMuIEl0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgdGhhdCB0aGUgZXhlY3V0aW9uIGlzbiYjMzk7dCBjb3JydXB0ZWQgYnkgcmFjZSBjb25kaXRpb25zLiBJIGNhbuKAmXQgYWZmb3JkIHRvIG1ha2UgYXNzdW1wdGlvbnMgaGVyZSwgc28gYmV0dGVyIHRvIGRvdWJsZS1jaGVjayBub3cgcmF0aGVyIHRoYW4gcmlzayBhIHN1YnRsZSBidWcgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1Ni1cbmFyY2gveDg2L2t2bS94ODYuYzo1MjU3OiNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih0LCBwdHIsIG9sZCwgbmV3KSBcXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNTgtXHQoX190cnlfY21weGNoZ191c2VyKCh0IF9fdXNlciAqKShwdHIpLCAodCAqKShvbGQpLCAqKHQgKikobmV3KSwgZWZhdWx0ICMjIHQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIHVzZXItc3BhY2UgY29tcGFyZS1hbmQtZXhjaGFuZ2UgZnVuY3Rpb25hbGl0eS4gTXkgaW50dWl0aW9uIHNheXMgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGNydWNpYWwgZm9yIGltcGxlbWVudGluZyBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgaW4gbXVsdGl0aHJlYWRlZCB1c2VyIGFwcGxpY2F0aW9ucy4KClRoZXJlZm9yZSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBpbnNwZWN0IGB0cnlfY21weGNoZ191c2VyYCBhbmQgYF9fdHJ5X2NtcHhjaGdfdXNlcmAgd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBpbnRlcmZhY2Ugd2l0aCB0aGUgaGFyZHdhcmUmIzM5O3MgYXRvbWljIGluc3RydWN0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG9yZGVyaW5nLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCBleGNlcHRpb24gaGFuZGxpbmcgd2l0aGluIHRoZSB1c2VyIGNvbnRleHQuIFRoaXMgZGVlcGVyIGRpdmUgd2lsbCBsaWtlbHkgcmV2ZWFsIGNydWNpYWwgZGV0YWlscyBhYm91dCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NtcHhjaGdfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9MzM0PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzItI2lmZGVmIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDozNzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzQtXHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzItI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NDMzOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbClcdCh7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDM0LVx0aW50IF9fZXJyID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTU5MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC01OTgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NTk5OmV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwMC1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA3LSNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYwODpcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXCYjMzQ7cVwmIzM0OywgXCYjMzQ7clwmIzM0OywgKF9wdHIpLCAoX29sZHApLCAoX252YWwpLCBfbGFiZWwpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA5LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTctICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjE4OiNkZWZpbmUgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXIoX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpICh7XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTktXHRib29sIF9fcmV0O1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjEtXHRzd2l0Y2ggKHNpemVvZigqKF9wdHIpKSkge1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjIyOlx0Y2FzZSAxOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O2JcJiMzNDssIFwmIzM0O3FcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjMtXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1OCAqKShfcHRyKSwgKF9vbGRwKSxcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyNS1cdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjI2Olx0Y2FzZSAyOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O3dcJiMzNDssIFwmIzM0O3JcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjctXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1MTYgKikoX3B0ciksIChfb2xkcCksXHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjktXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYzMDpcdGNhc2UgNDpcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcJiMzNDtsXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7LFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjMxLVx0XHRcdFx0XHQgICAgICAgKF9fZm9yY2UgdTMyICopKF9wdHIpLCAoX29sZHApLFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ0LVx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NDU6XHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1x0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDYtXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ5LS8qIFwmIzM0O1JldHVybnNcJiMzNDsgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUsIC1FRkFVTFQgaWYgdGhlIGFjY2VzcyBmYXVsdHMuICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjUwOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0KHtcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTEtXHRpbnQgX19yZXQgPSAtRUZBVUxUO1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUyLVx0X191YWNjZXNzX2JlZ2luX25vc3BlYygpO1x0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MzpcdF9fcmV0ID0gIXVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKTtcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjU0LV9sYWJlbDpcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBlbV9jbXB4Y2hnOGJgIEltcGxlbWVudGF0aW9uIGluIEtWTSYjMzk7cyBYODYgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgaG93IGBlbV9jbXB4Y2hnOGJgIGlzIGhhbmRsZWQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdGhlIGRlY29kaW5nIGFuZCBjYWxsIGZsb3cuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUgZW11bGF0aW9uIG9mIHRoZSBDTVBYQ0hHOEIgKG9yIENNUFhDSEcxNkIpIGluc3RydWN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcnBsYXkgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgcmVnaXN0ZXJzIGFuZCBtZW1vcnksIGFuZCBJJiMzOTttIGVhZ2VyIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGlzc3VlcyBpbiB0aGUgZW11bGF0aW9uLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW5zdHJ1Y3Rpb24mIzM5O3Mgb3BlcmFuZCBzaXplLCB0aGUgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aS10aHJlYWRlZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGltZSB0byBnZXQgZG93biB0byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1fY21weGNoZzhiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2VtdWxhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTIxNzM9c3RhdGljIGludCBlbV9jYWxsX25lYXJfYWJzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4Ni1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjE4NzojZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4OC1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMDUtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMDY6c3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMDcte1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMS1cdGlmICghKGN0eHQtXHUwMDNlcmV4X2JpdHMgXHUwMDI2IFJFWF9XKSlcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjIxMjpcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjEzLSNpZmRlZiBDT05GSUdfWDg2XzY0XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMTQtXHRlbHNlXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTU6XHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMTYtI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDEyMjpcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBFbXVsYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGdyb3VwOWAgaGFuZGxlciB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgdGhlIGVtdWxhdGlvbiBvZiB0aG9zZSBtb3JlIGNvbXBsZXggeDg2IGluc3RydWN0aW9ucyB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9uLCBvciBwb3RlbnRpYWxseSBhIHNvbWV3aGF0IHVudXN1YWwgaW5zdHJ1Y3Rpb24sIGJhc2VkIG9uIHRoZSBgZ3JvdXA5YCBuYW1pbmcgY29udmVudGlvbi4gR2l2ZW4gdGhlIGZpbGUgbG9jYXRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIGRlY29kZWQsIHRoZSBhc3NvY2lhdGVkIHJlZ2lzdGVycyB1cGRhdGVkLCBhbmQgYW55IG5lY2Vzc2FyeSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgSSBhbSBhbHNvIGRlYWxpbmcgd2l0aCBob3cgdGhlIGhhcmR3YXJlIGludGVyYWN0cyB3aXRoIHRoZXNlIGluc3RydWN0aW9ucyBhbmQgaG93IHRvIHNpbXVsYXRlIHRoYXQgb24gc29mdHdhcmUuIEkga25vdyBpdCYjMzk7cyBnb2luZyB0byBiZSBhIGRlZXAgZGl2ZS4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcywgdGhlIGNvbnRyb2wgZmxvdywgYW5kIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBqdW1wIG91dC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRlY2huaXF1ZXMgdGhlIG9yaWdpbmFsIGF1dGhvcnMgdXNlZCB0byBoYW5kbGUgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTIwOlx0XG40MTIxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xuNDEyMjpcdFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXG40MTIzOlx0fSwge1xuNDEyNDpcdFx0TiwgTiwgTiwgTiwgTiwgTiwgTixcbjQxMjU6XHRcdEdQKDAsIFx1MDAyNnBmeF8wZl9jN183KSxcbjQxMjY6XHR9IH07XG40MTI3Olx0XG40MTI4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xuNDEyOTpcdFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXG40MTMwOlx0XHRYNyhEKFVuZGVmaW5lZCkpLFxuNDEzMTpcdH07XG40MTMyOlx0XG40MTMzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xuNDEzNDpcdFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXG40MTM1Olx0fTtcbjQxMzY6XHRcbjQxMzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xuNDEzODpcdFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcbjQxMzk6XHRcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgT3BlcmFuZCBEZWNvZGluZyBpbiBLVk0mIzM5O3MgeDg2IEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgb3BlcmFuZCBkZWNvZGluZyBsb2dpYyBmb3IgYERzdE1lbTY0YCwgYERzdE1lbTE2YCwgYW5kIHJlbGF0ZWQgbWVtb3J5IGRlc3RpbmF0aW9uIG9wZXJhbmRzIHdpdGhpbiB0aGUgS1ZNIHg4NiBlbXVsYXRpb24gbGF5ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaXZlIGludG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIHRoZSBpbnN0cnVjdGlvbiYjMzk7cyBlbmNvZGluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBpbiBtZW1vcnkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgbWVtb3J5IGl0c2VsZi4gVGhpcyBpcyBwcm9iYWJseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgZW11bGF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBJIGltYWdpbmUgdGhlcmUmIzM5O3MgYSBnb29kIGNodW5rIG9mIGNvZGUgZGVkaWNhdGVkIHRvIGhhbmRsaW5nIGRpZmZlcmVudCBhZGRyZXNzaW5nIG1vZGVzLCBzZWdtZW50IHJlZ2lzdGVycywgYW5kIG9wZXJhbmQgc2l6ZXMgd2l0aGluIHRoYXQgZW11bGF0aW9uIGZpbGUuIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IHBhcnNpbmcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RzdE1lbTY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2VtdWxhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkxLSNkZWZpbmUgRHN0REkgICAgICAgKE9wREkgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5MjojZGVmaW5lIERzdE1lbTY0ICAgIChPcE1lbTY0IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTMtI2RlZmluZSBEc3RNZW0xNiAgICAoT3BNZW0xNiBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDEyMjpcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYE9wTWVtNjRgIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYE9wTWVtNjRgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIG9wY29kZSBpcyBwcm9jZXNzZWQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGdsb2JhbCBzZWFyY2ggb3IgbWF5YmUgYSBxdWljayBncmVwIHRvIGxvY2F0ZSBhbGwgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCB1c2FnZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgbW9kdWxlcyByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIG9yIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMgb2YgdGhpcyB0eXBlLiBNeSBnb2FsIGlzIHRvIG1hcCB0aGUgcGF0aCBvZiB0aGlzIG9wZXJhdGlvbjogZnJvbSBwYXJzaW5nIHRvIHNlbWFudGljIGFuYWx5c2lzLCBjb2RlIGdlbmVyYXRpb24gKGlmIGFwcGxpY2FibGUpLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBydW50aW1lIGV4ZWN1dGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLCBvZiBjb3Vyc2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09wTWVtNjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDUtI2RlZmluZSBPcERJICAgICAgICAgICAgICAgNXVsbCAgLyogRVM6REkvRURJL1JESSAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NjojZGVmaW5lIE9wTWVtNjQgICAgICAgICAgICA2dWxsICAvKiBNZW1vcnksIDY0LWJpdCAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Ny0jZGVmaW5lIE9wSW1tVUJ5dGUgICAgICAgICA3dWxsICAvKiBaZXJvLWV4dGVuZGVkIDgtYml0IGltbWVkaWF0ZSAqL1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2NDY6XHRjYXNlIE9wTWVtNjQ6XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQ2NDctXHRcdGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXMgPSAoY3R4dC1cdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEVtdWxhdGlvbiBJc3N1ZXMgaW4gS1ZNIHg4NioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgeDg2IGVtdWxhdGlvbiBpbiBLVk0uIE15IGh1bmNoIGlzIHRlbGxpbmcgbWUgdG8gc3RhcnQgYXJvdW5kIGxpbmUgNDY0Niwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYC4gVGhhdCBhcmVhIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBpbiB0aGF0IHZpY2luaXR5LCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUsIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludC4gQWxzbywgSSBiZXR0ZXIgY2hlY2sgb3V0IGB4ODZfZW11bGF0ZV9pbnNuYCBhcm91bmQgbGluZSA1NDE0IGluIHRoZSBzYW1lIGZpbGUuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIGFuIGlzc3VlIHdpdGhpbiB0aGF0IHNwZWNpZmljIGluc3RydWN0aW9uIGVtdWxhdGlvbiBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZmxvdywgY29uc2lkZXIgdGhlIGlucHV0cywgYW5kIGxvb2sgZm9yIGFueSBkaXNjcmVwYW5jaWVzIG9yIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB3ZSBnb3QgdG8gdGhlIHByb2JsZW0sIGFuZCBzZWUgaWYgSSBjYW4gbmFycm93IGRvd24gYSByb290IGNhdXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjQwOlx0XHRcdCpvcCA9IGN0eHQtXHUwMDNlbWVtb3A7XG40NjQxOlx0XHRcdGN0eHQtXHUwMDNlbWVtb3BwID0gb3A7XG40NjQyOlx0XHRcdGlmIChjdHh0LVx1MDAzZWQgXHUwMDI2IEJpdE9wKVxuNDY0MzpcdFx0XHRcdGZldGNoX2JpdF9vcGVyYW5kKGN0eHQpO1xuNDY0NDpcdFx0XHRvcC1cdTAwM2VvcmlnX3ZhbCA9IG9wLVx1MDAzZXZhbDtcbjQ2NDU6XHRcdFx0YnJlYWs7XG40NjQ2Olx0XHRjYXNlIE9wTWVtNjQ6XG40NjQ3Olx0XHRcdGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXMgPSAoY3R4dC1cdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcbjQ2NDg6XHRcdFx0Z290byBtZW1fY29tbW9uO1xuNDY0OTpcdFx0Y2FzZSBPcEFjYzpcbjQ2NTA6XHRcdFx0b3AtXHUwMDNldHlwZSA9IE9QX1JFRztcbjQ2NTE6XHRcdFx0b3AtXHUwMDNlYnl0ZXMgPSAoY3R4dC1cdTAwM2VkIFx1MDAyNiBCeXRlT3ApID8gMSA6IGN0eHQtXHUwMDNlb3BfYnl0ZXM7XG40NjUyOlx0XHRcdG9wLVx1MDAzZWFkZHIucmVnID0gcmVnX3JtdyhjdHh0LCBWQ1BVX1JFR1NfUkFYKTtcbjQ2NTM6XHRcdFx0ZmV0Y2hfcmVnaXN0ZXJfb3BlcmFuZChvcCk7XG40NjU0Olx0XHRcdGJyZWFrO1xuNDY1NTpcdFx0Y2FzZSBPcEFjY0xvOlxuNDY1NjpcdFx0XHRvcC1cdTAwM2V0eXBlID0gT1BfUkVHO1xuNDY1NzpcdFx0XHRvcC1cdTAwM2VieXRlcyA9IChjdHh0LVx1MDAzZWQgXHUwMDI2IEJ5dGVPcCkgPyAyIDogY3R4dC1cdTAwM2VvcF9ieXRlcztcbjQ2NTg6XHRcdFx0b3AtXHUwMDNlYWRkci5yZWcgPSByZWdfcm13KGN0eHQsIFZDUFVfUkVHU19SQVgpO1xuNDY1OTpcdFx0XHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcbjQ2NjA6XHRcdFx0YnJlYWs7XG40NjYxOlx0XHRjYXNlIE9wQWNjSGk6XG40NjYyOlx0XHRcdGlmIChjdHh0LVx1MDAzZWQgXHUwMDI2IEJ5dGVPcCkge1xuNDY2MzpcdFx0XHRcdG9wLVx1MDAzZXR5cGUgPSBPUF9OT05FO1xuNDY2NDpcdFx0XHRcdGJyZWFrO1xuNDY2NTpcdFx0XHR9XG40NjY2Olx0XHRcdG9wLVx1MDAzZXR5cGUgPSBPUF9SRUc7XG40NjY3Olx0XHRcdG9wLVx1MDAzZWJ5dGVzID0gY3R4dC1cdTAwM2VvcF9ieXRlcztcbjQ2Njg6XHRcdFx0b3AtXHUwMDNlYWRkci5yZWcgPSByZWdfcm13KGN0eHQsIFZDUFVfUkVHU19SRFgpO1xuNDY2OTpcdFx0XHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIE9wZXJhbmQgTWVtb3J5IEZldGNoIGluIHg4NiBFbXVsYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB3aGVyZSB0aGUgb3BlcmFuZCBtZW1vcnkgZmV0Y2ggaGFwcGVucyB3aXRoaW4gdGhlIGB4ODZfZW11bGF0ZV9pbnNuYCBmdW5jdGlvbi4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZXNlIGVtdWxhdG9ycywgdGhhdCBpdCBzaG91bGQgYmUgc29tZXdoZXJlIGluIHRoZSBhcmVhIHRoYXQgZGVhbHMgd2l0aCBvcGVyYW5kIGFjY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggbGluZSA1NDAwIGFuZCBnbyB1cCB0byBhcm91bmQgbGluZSA1NDQwLiBUaGF0IHJhbmdlIGlzIHVzdWFsbHkgd2hlcmUgdGhlIG1lbW9yeSByZWFkcyBhbmQgd3JpdGVzIGFzc29jaWF0ZWQgd2l0aCBpbnN0cnVjdGlvbiBvcGVyYW5kIGhhbmRsaW5nIGFyZSBoYW5kbGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG9wZXJhbmQgZmV0Y2ggbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZS4gSXQmIzM5O3MgdGltZSB0byBnZXQgaGFuZHMtb24gYW5kIHRyYWNlIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MDA6XHRcdFx0XHRcdCAgICBjdHh0LVx1MDAzZXNyYy52YWxwdHIsIGN0eHQtXHUwMDNlc3JjLmJ5dGVzKTtcbjU0MDE6XHRcdFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXG41NDAyOlx0XHRcdFx0Z290byBkb25lO1xuNTQwMzpcdFx0XHRjdHh0LVx1MDAzZXNyYy5vcmlnX3ZhbDY0ID0gY3R4dC1cdTAwM2VzcmMudmFsNjQ7XG41NDA0Olx0XHR9XG41NDA1Olx0XG41NDA2Olx0XHRpZiAoY3R4dC1cdTAwM2VzcmMyLnR5cGUgPT0gT1BfTUVNKSB7XG41NDA3Olx0XHRcdHJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgY3R4dC1cdTAwM2VzcmMyLmFkZHIubWVtLFxuNTQwODpcdFx0XHRcdFx0ICAgIFx1MDAyNmN0eHQtXHUwMDNlc3JjMi52YWwsIGN0eHQtXHUwMDNlc3JjMi5ieXRlcyk7XG41NDA5Olx0XHRcdGlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKVxuNTQxMDpcdFx0XHRcdGdvdG8gZG9uZTtcbjU0MTE6XHRcdH1cbjU0MTI6XHRcbjU0MTM6XHRcdGlmICgoY3R4dC1cdTAwM2VkIFx1MDAyNiBEc3RNYXNrKSA9PSBJbXBsaWNpdE9wcylcbjU0MTQ6XHRcdFx0Z290byBzcGVjaWFsX2luc247XG41NDE1Olx0XG41NDE2Olx0XG41NDE3Olx0XHRpZiAoKGN0eHQtXHUwMDNlZHN0LnR5cGUgPT0gT1BfTUVNKSBcdTAwMjZcdTAwMjYgIShjdHh0LVx1MDAzZWQgXHUwMDI2IE1vdikpIHtcbjU0MTg6XHRcdFx0Lyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkIGlmIE1vdiAqL1xuNTQxOTpcdFx0XHRyYyA9IHNlZ21lbnRlZF9yZWFkKGN0eHQsIGN0eHQtXHUwMDNlZHN0LmFkZHIubWVtLFxuNTQyMDpcdFx0XHRcdFx0ICAgXHUwMDI2Y3R4dC1cdTAwM2Vkc3QudmFsLCBjdHh0LVx1MDAzZWRzdC5ieXRlcyk7XG41NDIxOlx0XHRcdGlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKSB7XG41NDIyOlx0XHRcdFx0aWYgKCEoY3R4dC1cdTAwM2VkIFx1MDAyNiBOb1dyaXRlKSBcdTAwMjZcdTAwMjZcbjU0MjM6XHRcdFx0XHQgICAgcmMgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQgXHUwMDI2XHUwMDI2XG41NDI0Olx0XHRcdFx0ICAgIGN0eHQtXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9PSBQRl9WRUNUT1IpXG41NDI1Olx0XHRcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5lcnJvcl9jb2RlIHw9IFBGRVJSX1dSSVRFX01BU0s7XG41NDI2Olx0XHRcdFx0Z290byBkb25lO1xuNTQyNzpcdFx0XHR9XG41NDI4Olx0XHR9XG41NDI5Olx0XHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbjU0MzA6XHRcbjU0MzE6XHQjaWZkZWYgQ09ORklHX1g4Nl82NFxuNTQzMjpcdFx0aWYgKGN0eHQtXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxuNTQzMzpcdFx0XHRjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtXHUwMDNlZHN0LnZhbDEyODtcbjU0MzQ6XHRcdGVsc2VcbjU0MzU6XHQjZW5kaWZcbjU0MzY6XHRcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NCA9IGN0eHQtXHUwMDNlZHN0LnZhbDY0O1xuNTQzNzpcdFxuNTQzODpcdHNwZWNpYWxfaW5zbjpcbjU0Mzk6XHRcbjU0NDA6XHRcdGlmICh1bmxpa2VseShjaGVja19pbnRlcmNlcHRzKSBcdTAwMjZcdTAwMjYgKGN0eHQtXHUwMDNlZCBcdTAwMjYgSW50ZXJjZXB0KSkge1xuNTQ0MTpcdFx0XHRyYyA9IGVtdWxhdG9yX2NoZWNrX2ludGVyY2VwdChjdHh0LCBjdHh0LVx1MDAzZWludGVyY2VwdCxcbjU0NDI6XHRcdFx0XHRcdFx0ICAgICAgWDg2X0lDUFRfUE9TVF9NRU1BQ0NFU1MpO1xuNTQ0MzpcdFx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcbjU0NDQ6XHRcdFx0XHRnb3RvIGRvbmU7XG41NDQ1Olx0XHR9XG41NDQ2Olx0XG41NDQ3Olx0XHRpZiAoY3R4dC1cdTAwM2VyZXBfcHJlZml4IFx1MDAyNlx1MDAyNiAoY3R4dC1cdTAwM2VkIFx1MDAyNiBTdHJpbmcpKVxuNTQ0ODpcdFx0XHRjdHh0LVx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1JGO1xuNTQ0OTpcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFdyaXRlYmFjayBpbiBJbnN0cnVjdGlvbiBFbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB4ODZfZW11bGF0ZV9pbnNuYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgaXQgaGFuZGxlcyB3cml0ZWJhY2ssIHBhcnRpY3VsYXJseSBmb3IgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MgaGVyZSwgd2hlcmUgYW5kIGhvdyB0aGUgcmVzdWx0cyBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24gYXJlIHVsdGltYXRlbHkgd3JpdHRlbiBiYWNrLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCByZWxhdGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kLCBhbmQgZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGhpbiB0aGUgZW11bGF0aW9uIGZyYW1ld29yaywgd2hlcmUgaXQmIzM5O3MgbW9kaWZpZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBlbXVsYXRpb24gaGFuZGxlcyB0aGUgZGV0YWlsczsgSSYjMzk7bGwgc2NhbiBmdXJ0aGVyIGRvd24gdGhlIGNvZGUsIHRvd2FyZHMgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24gdGhhdCBtYW5hZ2Ugb3BlcmFuZCBpbnRlcmFjdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgbG9naWMgZm9yIGRlYWxpbmcgd2l0aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnMuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBjcnVjaWFsIHBoYXNlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZWJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTY2LS8qIGZyZWU6IDQzLTQ0ICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE2NzojZGVmaW5lIE5vV3JpdGUgICAgICgodTY0KTEgXHUwMDNjXHUwMDNjIDQ1KSAgLyogTm8gd3JpdGViYWNrICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE2OC0jZGVmaW5lIFNyY1dyaXRlICAgICgodTY0KTEgXHUwMDNjXHUwMDNjIDQ2KSAgLyogV3JpdGUgYmFjayBzcmMgb3BlcmFuZCAqL1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MjQzPWVudW0gcmV4X2JpdHMge1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjQ5LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyNTA6c3RhdGljIHZvaWQgd3JpdGViYWNrX3JlZ2lzdGVycyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjUxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTk4MT1zdGF0aWMgaW50IGVtX2JzZl9jKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05ODIte1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5ODM6XHQvKiBJZiBzcmMgaXMgemVybywgZG8gbm90IHdyaXRlYmFjaywgYnV0IHVwZGF0ZSBmbGFncyAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05ODQtXHRpZiAoY3R4dC1cdTAwM2VzcmMudmFsID09IDApXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz05ODk9c3RhdGljIGludCBlbV9ic3JfYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTkwLXtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6OTkxOlx0LyogSWYgc3JjIGlzIHplcm8sIGRvIG5vdCB3cml0ZWJhY2ssIGJ1dCB1cGRhdGUgZmxhZ3MgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTkyLVx0aWYgKGN0eHQtXHUwMDNlc3JjLnZhbCA9PSAwKVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MTc1MD1zdGF0aWMgdm9pZCB3cml0ZV9yZWdpc3Rlcl9vcGVyYW5kKHN0cnVjdCBvcGVyYW5kICpvcClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NTQtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE3NTU6c3RhdGljIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBvcGVyYW5kICpvcClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTc1Ni17XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzkyLVx0Y2FzZSBPUF9OT05FOlxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxNzkzOlx0XHQvKiBubyB3cml0ZWJhY2sgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTc5NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xODEyPXN0YXRpYyBpbnQgZW1fcHVzaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxMy17XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE4MTQ6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxNS1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MjA0OD1pbnQgZW11bGF0ZV9pbnRfcmVhbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGlycSlcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIwNTQtXHRpZiAocmMgPT0gWDg2RU1VTF9DT05USU5VRSlcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjA1NTpcdFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjA1Ni1cdHJldHVybiByYztcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTI5ODM9aW50IGVtdWxhdG9yX3Rhc2tfc3dpdGNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjk5Ny1cdFx0Y3R4dC1cdTAwM2VlaXAgPSBjdHh0LVx1MDAzZV9laXA7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjI5OTg6XHRcdHdyaXRlYmFja19yZWdpc3RlcnMoY3R4dCk7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTI5OTktXHR9XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMjYyPXN0YXRpYyBpbnQgZW1fY3Jfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMjY5LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozMjcwOlx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMyNzEtXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTMyODY9c3RhdGljIGludCBlbV9kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMzMDItXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzMDM6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzMwNC1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM2Mz1zdGF0aWMgaW50IGVtX21vdl9zcmVnX3JtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzM3Mi1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzM3MzpcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzc0LVx0Y3R4dC1cdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMzgzPXN0YXRpYyBpbnQgZW1fbGxkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMzODYtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzODc6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzM4OC1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM5Nz1zdGF0aWMgaW50IGVtX2x0cihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MDAtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0MDE6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQwMi1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQwNj1zdGF0aWMgaW50IGVtX2ludmxwZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MTUtXHRcdGN0eHQtXHUwMDNlb3BzLVx1MDAzZWludmxwZyhjdHh0LCBsaW5lYXIpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDE2Olx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MTctXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM0MzE9c3RhdGljIGludCBlbV9oeXBlcmNhbGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDM5LVx0Y3R4dC1cdTAwM2VfZWlwID0gY3R4dC1cdTAwM2VlaXA7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0NDA6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQ0MS1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQ0NT1zdGF0aWMgaW50IGVtdWxhdGVfc3RvcmVfZGVzY19wdHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDYxLVx0fVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDYyOlx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0NjMtXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM0Nzg9c3RhdGljIGludCBlbV9sZ2R0X2xpZHQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgbGdkdClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0OTctXHRcdGN0eHQtXHUwMDNlb3BzLVx1MDAzZXNldF9pZHQoY3R4dCwgXHUwMDI2ZGVzY19wdHIpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDk4Olx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0OTktXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM1NjQ9c3RhdGljIGludCBlbV9vdXQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNTY3LVx0XHRcdFx0ICAgIFx1MDAyNmN0eHQtXHUwMDNlc3JjLnZhbCwgMSk7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM1Njg6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzU2OS1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDYyNT1zdGF0aWMgaW50IGRlY29kZV9vcGVyYW5kKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qgb3BlcmFuZCAqb3AsXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Nzc5LVx0ZGVmYXVsdDpcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDc4MDpcdFx0b3AtXHUwMDNldHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NzgxLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTUyODU9aW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cylcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0NTUtXHRcdFx0Z290byBkb25lO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NDU2Olx0XHRnb3RvIHdyaXRlYmFjaztcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTQ1Ny1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0OTctXHRcdHJjID0gam1wX3JlbChjdHh0LCBjdHh0LVx1MDAzZXNyYy52YWwpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NDk4Olx0XHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0OTktXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUyNS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTUyNjp3cml0ZWJhY2s6XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MjctXHRpZiAoY3R4dC1cdTAwM2VkIFx1MDAyNiBTcmNXcml0ZSkge1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTI4LVx0XHRCVUdfT04oY3R4dC1cdTAwM2VzcmMudHlwZSA9PSBPUF9NRU0gfHwgY3R4dC1cdTAwM2VzcmMudHlwZSA9PSBPUF9NRU1fU1RSKTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTUyOTpcdFx0cmMgPSB3cml0ZWJhY2soY3R4dCwgXHUwMDI2Y3R4dC1cdTAwM2VzcmMpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTMwLVx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MzMtXHRpZiAoIShjdHh0LVx1MDAzZWQgXHUwMDI2IE5vV3JpdGUpKSB7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU1MzQ6XHRcdHJjID0gd3JpdGViYWNrKGN0eHQsIFx1MDAyNmN0eHQtXHUwMDNlZHN0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUzNS1cdFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTcyLVx0XHRcdFx0Y3R4dC1cdTAwM2VtZW1fcmVhZC5lbmQgPSAwO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTczOlx0XHRcdFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3NC1cdFx0XHRcdHJldHVybiBFTVVMQVRJT05fUkVTVEFSVDtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3NS1cdFx0XHR9XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU1NzY6XHRcdFx0Z290byBkb25lOyAvKiBza2lwIHJpcCB3cml0ZWJhY2sgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3Ny1cdFx0fVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU5NC1cdGlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTk1Olx0XHR3cml0ZWJhY2tfcmVnaXN0ZXJzKGN0eHQpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTk2LVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYxOC1cdFx0ZWxzZSBpZiAoY3R4dC1cdTAwM2VvcF9ieXRlcyAhPSA0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NjE5Olx0XHRcdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBubyB3cml0ZWJhY2sgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYyMC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NjQ2LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NjQ3Olx0Z290byB3cml0ZWJhY2s7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NDgtXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01NjUzPXZvaWQgZW11bGF0b3JfaW52YWxpZGF0ZV9yZWdpc3Rlcl9jYWNoZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NTctXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NTg6dm9pZCBlbXVsYXRvcl93cml0ZWJhY2tfcmVnaXN0ZXJfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NTkte1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NjYwOlx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTY2MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBGdW5jdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AqKgoKQWxyaWdodCwgbXkgZm9jdXMgaXMgbm93IG9uIHRoYXQgd3JpdGViYWNrIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAxNzU1IHdpdGhpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBoeXBlcnZpc29yIGlzIGhhbmRsaW5nIHdyaXRlYmFja3MgZm9yIGVtdWxhdGVkIGRldmljZXMgb3Igb3BlcmF0aW9ucyBvbiB4ODYuIE15IHVuZGVyc3RhbmRpbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgdGhlIGNvcnJlY3RuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyB3cml0dGVuLCB3aGVyZSBpdCYjMzk7cyBiZWluZyB3cml0dGVuIHRvLCBhbmQgdGhlIGxvZ2ljIGdvdmVybmluZyB0aGF0IHdyaXRlIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgYSBidWcgY291bGQgcmVhciBpdHMgaGVhZC4gVGhpcyBpcyB0aGUgYmVkcm9jayBmb3IgdGhlIGVtdWxhdG9yLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byBnZXQgdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG5haWxlZCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTU6XHRzdGF0aWMgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wKVxuMTc1NjpcdHtcbjE3NTc6XHRcdHN3aXRjaCAob3AtXHUwMDNldHlwZSkge1xuMTc1ODpcdFx0Y2FzZSBPUF9SRUc6XG4xNzU5Olx0XHRcdHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQob3ApO1xuMTc2MDpcdFx0XHRicmVhaztcbjE3NjE6XHRcdGNhc2UgT1BfTUVNOlxuMTc2MjpcdFx0XHRpZiAoY3R4dC1cdTAwM2Vsb2NrX3ByZWZpeClcbjE3NjM6XHRcdFx0XHRyZXR1cm4gc2VnbWVudGVkX2NtcHhjaGcoY3R4dCxcbjE3NjQ6XHRcdFx0XHRcdFx0XHQgb3AtXHUwMDNlYWRkci5tZW0sXG4xNzY1Olx0XHRcdFx0XHRcdFx0IFx1MDAyNm9wLVx1MDAzZW9yaWdfdmFsLFxuMTc2NjpcdFx0XHRcdFx0XHRcdCBcdTAwMjZvcC1cdTAwM2V2YWwsXG4xNzY3Olx0XHRcdFx0XHRcdFx0IG9wLVx1MDAzZWJ5dGVzKTtcbjE3Njg6XHRcdFx0ZWxzZVxuMTc2OTpcdFx0XHRcdHJldHVybiBzZWdtZW50ZWRfd3JpdGUoY3R4dCxcbjE3NzA6XHRcdFx0XHRcdFx0ICAgICAgIG9wLVx1MDAzZWFkZHIubWVtLFxuMTc3MTpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2b3AtXHUwMDNldmFsLFxuMTc3MjpcdFx0XHRcdFx0XHQgICAgICAgb3AtXHUwMDNlYnl0ZXMpO1xuMTc3MzpcdFx0Y2FzZSBPUF9NRU1fU1RSOlxuMTc3NDpcdFx0XHRyZXR1cm4gc2VnbWVudGVkX3dyaXRlKGN0eHQsXG4xNzc1Olx0XHRcdFx0XHQgICAgICAgb3AtXHUwMDNlYWRkci5tZW0sXG4xNzc2Olx0XHRcdFx0XHQgICAgICAgb3AtXHUwMDNlZGF0YSxcbjE3Nzc6XHRcdFx0XHRcdCAgICAgICBvcC1cdTAwM2VieXRlcyAqIG9wLVx1MDAzZWNvdW50KTtcbjE3Nzg6XHRcdGNhc2UgT1BfWE1NOlxuMTc3OTpcdFx0XHRpZiAoIShjdHh0LVx1MDAzZWQgXHUwMDI2IEF2eCkpIHtcbjE3ODA6XHRcdFx0XHRrdm1fd3JpdGVfc3NlX3JlZyhvcC1cdTAwM2VhZGRyLnhtbSwgXHUwMDI2b3AtXHUwMDNldmVjX3ZhbCk7XG4xNzgxOlx0XHRcdFx0YnJlYWs7XG4xNzgyOlx0XHRcdH1cbjE3ODM6XHRcdFx0LyogZnVsbCBZTU0gd3JpdGUgYnV0IHdpdGggaGlnaCBieXRlcyBjbGVhcmVkICovXG4xNzg0Olx0XHRcdG1lbXNldChvcC1cdTAwM2V2YWxwdHIgJiM0MzsgMTYsIDAsIDE2KTtcbjE3ODU6XHRcdFx0ZmFsbHRocm91Z2g7XG4xNzg2Olx0XHRjYXNlIE9QX1lNTTpcbjE3ODc6XHRcdFx0a3ZtX3dyaXRlX2F2eF9yZWcob3AtXHUwMDNlYWRkci54bW0sIFx1MDAyNm9wLVx1MDAzZXZlY192YWwyKTtcbjE3ODg6XHRcdFx0YnJlYWs7XG4xNzg5Olx0XHRjYXNlIE9QX01NOlxuMTc5MDpcdFx0XHRrdm1fd3JpdGVfbW14X3JlZyhvcC1cdTAwM2VhZGRyLm1tLCBcdTAwMjZvcC1cdTAwM2VtbV92YWwpO1xuMTc5MTpcdFx0XHRicmVhaztcbjE3OTI6XHRcdGNhc2UgT1BfTk9ORTpcbjE3OTM6XHRcdFx0Lyogbm8gd3JpdGViYWNrICovXG4xNzk0Olx0XHRcdGJyZWFrO1xuMTc5NTpcdFx0ZGVmYXVsdDpcbjE3OTY6XHRcdFx0YnJlYWs7XG4xNzk3Olx0XHR9XG4xNzk4Olx0XHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbjE3OTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTU2CgkJCQkJCQlvdXRwdXQ6IDQwMgoJCQkJCQkJdGhvdWdodHM6IDI2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBjbXB4Y2hnMTZiIEVtdWxhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyAxMjgtYml0IGNvbXBhcmUtYW5kLWV4Y2hhbmdlIChjbXB4Y2hnMTZiKSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZm9yIHVzZXItc3BhY2UgbWVtb3J5IGFjY2VzcyB3aXRoaW4gdGhlIEtWTSBlbXVsYXRvci4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmxpbmUgYXNzZW1ibHkgaW52b2x2ZWQuCgpNeSBhbmFseXNpcyBzdGFydGVkIGJ5IHRyYWNpbmcgdGhlIGRhdGEgZmxvdy4gV2UmIzM5O3ZlIGdvdCBgc2VnbWVudGVkX2NtcHhjaGdgIHVzaW5nIGEgYHN0cnVjdCBvcGVyYW5kYCB3aGljaCBjb250YWlucyB1bmlvbnMgZm9yIHZhcmlvdXMgdmFsdWUgc2l6ZXMgKDgsIDE2LCAzMiBieXRlcyBhbmQgdmVjdG9yIHJlZ2lzdGVycykuIENyaXRpY2FsbHksIGZvciAxNi1ieXRlIG9wZXJhdGlvbnMsIGBvcmlnX3ZhbDEyOGAgaXMgaW5pdGlhbGl6ZWQsIHBvdGVudGlhbGx5IHdpdGggYSB1c2VyIG1lbW9yeSBjb3B5IGZyb20gdGhlIGd1ZXN0LiBUaGUgaW5saW5lIGFzc2VtYmx5IGluIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBoYW5kbGVzIHRoZSBhY3R1YWwgYXRvbWljIG9wZXJhdGlvbi4gVGhlIGltcG9ydGFudCB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgdmFsdWUgKGBfb2xkYCksIHRoZSBuZXcgdmFsdWUgKGBfbmV3YCksIGFuZCB0aGUgbWVtb3J5IGFkZHJlc3MgKGBfcHRyYCkgYXJlIGFsbCBleHBsaWNpdGx5IHBhc3NlZC4KCk5vdywgY2hlY2tpbmcgdGhlIGFzc2VtYmx5IGl0c2VsZiwgd2hldGhlciB3aXRoIG9yIHdpdGhvdXQgdGllZCBvdXRwdXQsIHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgcmVkIGZsYWdzIGZvciBLTVNBTi4gVGhlIGlucHV0IG9wZXJhbmRzIGFyZSBmdWxseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgYXNzZW1ibHkgaXMgZXhlY3V0ZWQuIFRoZSB2YWx1ZXMgYXJlIHJlYWQgaW50byByZWdpc3RlcnMgYW5kLCBjcnVjaWFsbHksIHdyaXR0ZW4gYmFjayB1c2luZyB0aGUgYXRvbWljIGBjbXB4Y2hnMTZiYCBpbnN0cnVjdGlvbi4gVGhlcmUmIzM5O3Mgbm8gY3JlYXRpb24gb2YgbmV3IG1lbW9yeSByZWdpb25zLCBubyBwYXNzaW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEsIGp1c3QgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBleGlzdGluZywgZXhwbGljaXRseS1tYW5hZ2VkIHZhbHVlcyB3aXRoaW4gZ3Vlc3QgbWVtb3J5LgoKTG9va2luZyBhdCB0aGUgZW11bGF0aW9uIGxvZ2ljIGluIGBrdm0vZW11bGF0ZS5jYCwgYGVtX2NtcHhjaGc4Yl8xNmJgIGhhbmRsZXMgdGhlIGVtdWxhdGlvbi4gYGN0eHQtJmd0O2RzdC5vcmlnX3ZhbDEyOGAgaG9sZHMgdGhlIG9yaWdpbmFsIHZhbHVlLCByZWFkIHZpYSBgc2VnbWVudGVkX3JlYWRgLiBVcG9uIGNvbXBhcmUsIGBjdHh0LSZndDtkc3QudmFsMTI4YCBpcyB1cGRhdGVkLiBCb3RoIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIGFyZSBpbml0aWFsaXplZCBieSByZWFkcyBvZiBndWVzdCBtZW1vcnkgb3IgcmVnaXN0ZXIgdmFsdWVzLiBBbmQgYHg4Nl9lbXVsYXRlX2luc25gIGp1c3QgY29waWVzIHRoZW0uIEFsbCBvcGVyYXRpb25zIHNlZW0gdG8gaW52b2x2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHZhbHVlcy4KCkZpbmFsbHksIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBjYWxscyBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgZm9yIHRoZSAxMjgtYml0IGNhc2UuIFRoaXMgZnVuY3Rpb24gaXMgc3VwcGxpZWQgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzIChgb2xkYCBhbmQgYG5ld2ApIGFuZCB0aGUgdGFyZ2V0IG1lbW9yeSBhZGRyZXNzLiBOb3RoaW5nIGluZGljYXRlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgb3IgYW4gaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlLgoKQWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSwgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBtaWdodCBiZSByZWxhdGVkIHRvIGluc3RydWN0aW9uIGRlY29kaW5nLCBsb2NrIHByZWZpeCB1c2FnZSwgYm91bmRhcnkgYWxpZ25tZW50LCBvciByZWdpc3RlciB3cml0ZXMuIFRoZXNlIGFyZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGZvciBlbXVsYXRpb24gYW5kIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIGxvY2tkZXApIGFuZCBhcmUgb3V0c2lkZSBLTVNBTiYjMzk7cyBwdXJ2aWV3LiBJJiMzOTttIGNvbnZpbmNlZCB0aGF0IHRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhIEtNU0FOLXJlbGV2YW50IHJpc2suCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZTpcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cbjIuIFVwZGF0aW5nIGBzdHJ1Y3Qgb3BlcmFuZGAgaW4gYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCB0byBpbmNsdWRlIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIHdpdGhpbiBleGlzdGluZyB1bmlvbnMuXG4zLiBVcGRhdGluZyBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byByZWFkIGd1ZXN0IG1lbW9yeSwgY29tcGFyZSBhZ2FpbnN0IFJEWDpSQVgsIHVwZGF0ZSBSQ1g6UkJYIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciB3cml0ZSBvbGQgdmFsdWVzIHRvIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGUgdXNlci1zcGFjZSBjbXB4Y2hnLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGtlcm5lbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6XG4tIEFsbCB2YWx1ZXMgb3BlcmF0ZWQgdXBvbiAoYGN0eHQtXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxuLSBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmdzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbi0gQW55IGJ1Z3MgaW4gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYWdpbmcsIG9yIHJlZ2lzdGVyIG1hbmFnZW1lbnQgd291bGQgYmUgZnVuY3Rpb25hbC9sb2dpY2FsIGlzc3VlcyBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy9LQVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgMTI4LWJpdCB1c2VyIHNwYWNlIGNvbXBhcmUtYW5kLXN3YXAgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20gdXNpbmcgY21weGNoZzE2YikgYW5kIGFkZHMgQ01QWENIRzE2QiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IuXG5cblRoZSBjaGFuZ2VzIGludm9sdmU6XG4xLiBBZGRpbmcgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGlubGluZSBhc3NlbWJseSBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYCB0byBhdG9taWNhbGx5IGNvbXBhcmUgYW5kIHN3YXAgMTI4LWJpdCB2YWx1ZXMgYXQgdXNlciBhZGRyZXNzZXMuXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxuMy4gVXBkYXRpbmcgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AgdG8gcmVhZCBndWVzdCBtZW1vcnksIGNvbXBhcmUgYWdhaW5zdCBSRFg6UkFYLCB1cGRhdGUgUkNYOlJCWCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgb3Igd3JpdGUgb2xkIHZhbHVlcyB0byByZWdpc3RlcnMsIGFuZCBleGVjdXRlIHVzZXItc3BhY2UgY21weGNoZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxuLSBBbGwgdmFsdWVzIG9wZXJhdGVkIHVwb24gKGBjdHh0LVx1MDAzZWRzdC52YWwxMjhgLCBgb2xkYCwgYG5ld2AsIGd1ZXN0IHJlZ2lzdGVyIHZhbHVlcykgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGFuZCBpbml0aWFsaXplZCBkdXJpbmcgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGV4ZWN1dGlvbi5cbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4tIEFueSBidWdzIGluIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgcGFnaW5nLCBvciByZWdpc3RlciBtYW5hZ2VtZW50IHdvdWxkIGJlIGZ1bmN0aW9uYWwvbG9naWNhbCBpc3N1ZXMgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMvS0FTQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjU5OjE0LjY5MDQ2MTI1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODY4ODc2NjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtX2NtcHhjaGc4YlwiLFxuICAgIFwiZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zblwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgMTI4LWJpdCB1c2VyIHNwYWNlIGNvbXBhcmUtYW5kLXN3YXAgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20gdXNpbmcgY21weGNoZzE2YikgYW5kIGFkZHMgQ01QWENIRzE2QiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZTpcXG4xLiBBZGRpbmcgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGlubGluZSBhc3NlbWJseSBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYCB0byBhdG9taWNhbGx5IGNvbXBhcmUgYW5kIHN3YXAgMTI4LWJpdCB2YWx1ZXMgYXQgdXNlciBhZGRyZXNzZXMuXFxuMi4gVXBkYXRpbmcgYHN0cnVjdCBvcGVyYW5kYCBpbiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgd2l0aGluIGV4aXN0aW5nIHVuaW9ucy5cXG4zLiBVcGRhdGluZyBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byByZWFkIGd1ZXN0IG1lbW9yeSwgY29tcGFyZSBhZ2FpbnN0IFJEWDpSQVgsIHVwZGF0ZSBSQ1g6UkJYIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciB3cml0ZSBvbGQgdmFsdWVzIHRvIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGUgdXNlci1zcGFjZSBjbXB4Y2hnLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Uga2VybmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIEFsbCB2YWx1ZXMgb3BlcmF0ZWQgdXBvbiAoYGN0eHQtXFx1MDAzZWRzdC52YWwxMjhgLCBgb2xkYCwgYG5ld2AsIGd1ZXN0IHJlZ2lzdGVyIHZhbHVlcykgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGFuZCBpbml0aWFsaXplZCBkdXJpbmcgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGV4ZWN1dGlvbi5cXG4tIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZ3MgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gQW55IGJ1Z3MgaW4gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYWdpbmcsIG9yIHJlZ2lzdGVyIG1hbmFnZW1lbnQgd291bGQgYmUgZnVuY3Rpb25hbC9sb2dpY2FsIGlzc3VlcyBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy9LQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MTQuNjkwNDY2Mzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIwOTk5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiOWU3NDhhNjg5MDI3MTE0OWUyMTFhMjAyMTA1MDA2ZTFkZWU3MWY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDc6NTk6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXFxuaW5kZXggM2EwZGQzYzJiMjMzZS4uOTQ4OTM3YTI0Y2M1MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG5AQCAtNDA3LDYgKzQwNywyNyBAQCBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0Kl9vbGQgPSBfX29sZDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGxpa2VseShzdWNjZXNzKTtcXHRcXHRcXHRcXHRcXHR9KVxcbisjZWxzZSAvLyAhQ09ORklHX1g4Nl8zMlxcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7XFx0XFxcXFxcbitcXHRib29sIHN1Y2Nlc3M7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1xcdFxcdFxcXFxcXG4rXFx0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFxcdTAwM2VcXHUwMDNlIDY0KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc21fZ290b19vdXRwdXQoXFxcIlxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiMTogXFxcIiBMT0NLX1BSRUZJWCBcXFwiY21weGNoZzE2YiAlW3B0cl1cXFxcblxcXCJcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgX0FTTV9FWFRBQkxFX1VBKDFiLCAlbFtsYWJlbF0pXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgIDogXFxcIj1AY2N6XFxcIiAoc3VjY2VzcyksXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICAgXFxcIithXFxcIiAoX19vbGRfbG93KSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgICBcXFwiK2RcXFwiIChfX29sZF9oaWdoKSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgICBbcHRyXSBcXFwiK21cXFwiICgqX3B0cilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgOiBcXFwiYlxcXCIgKCh1NjQpX19uZXcpLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFxcXCJjXFxcIiAoKHU2NCkoKHUxMjgpX19uZXcgXFx1MDAzZVxcdTAwM2UgNjQpKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgIDogbGFiZWwpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KCFzdWNjZXNzKSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXFx1MDAzY1xcdTAwM2MgNjQpIHwgX19vbGRfbG93O1xcdFxcdFxcXFxcXG4rXFx0bGlrZWx5KHN1Y2Nlc3MpO1xcdFxcdFxcdFxcdFxcdH0pXFxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXFxuICNlbHNlICAvLyAhQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxcbiAjZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXFx0KHsgXFxcXFxcbkBAIC00NjMsNiArNDg0LDMyIEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0Kl9vbGQgPSBfX29sZDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGxpa2VseShfX3Jlc3VsdCk7XFx0XFx0XFx0XFx0XFx0fSlcXG4rI2Vsc2UgLy8hQ09ORklHX1g4Nl8zMlxcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7XFx0XFxcXFxcbitcXHRpbnQgX19yZXN1bHQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1xcdFxcdFxcXFxcXG4rXFx0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFxcdTAwM2VcXHUwMDNlIDY0KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc20gdm9sYXRpbGUoXFxcIlxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiMTogXFxcIiBMT0NLX1BSRUZJWCBcXFwiY21weGNoZzE2YiAlW3B0cl1cXFxcblxcXCJcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgXFxcIm1vdiAkMCwgJVtyZXN1bHRdXFxcXG5cXFxcdFxcXCJcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgXFxcInNldHogJWJbcmVzdWx0XVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiMjpcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgX0FTTV9FWFRBQkxFX1RZUEVfUkVHKDFiLCAyYiwgRVhfVFlQRV9FRkFVTFRfUkVHLFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgJVtyZXN1bHRdKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFtyZXN1bHRdIFxcXCI9cVxcXCIgKF9fcmVzdWx0KSxcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgICBcXFwiK2FcXFwiIChfX29sZF9sb3cpLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFxcXCIrZFxcXCIgKF9fb2xkX2hpZ2gpLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFtwdHJdIFxcXCIrbVxcXCIgKCpfcHRyKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFxcXCJiXFxcIiAoKHU2NClfX25ldyksXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICAgXFxcImNcXFwiICgodTY0KSgodTEyOClfX25ldyBcXHUwMDNlXFx1MDAzZSA2NCkpXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KF9fcmVzdWx0IFxcdTAwM2MgMCkpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRnb3RvIGxhYmVsO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQqX29sZCA9ICgodTEyOClfX29sZF9oaWdoIFxcdTAwM2NcXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcXHRcXHRcXFxcXFxuK1xcdGxpa2VseShfX3Jlc3VsdCk7XFx0XFx0XFx0XFx0XFx0fSlcXG4gI2VuZGlmIC8vIENPTkZJR19YODZfMzJcXG4gI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcXG4gXFxuQEAgLTU1MSwxMSArNTk4LDE4IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcbiBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTtcXG4gXFxuLSNpZm5kZWYgQ09ORklHX1g4Nl8zMlxcbisjaWZkZWYgQ09ORklHX1g4Nl8zMlxcbisvKlxcbisgKiBBbHdheXMgZmFpbCBvbiAzMiBiaXQgYXJjaCBvciA2NCBhcmNoIHdpdGhvdXQgMTI4IGJpdCBjbXB4Y2hnIHN1cHBvcnRcXG4rICovXFxuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpICh7IEJVSUxEX0JVR19PTigxKTsgMDsgfSlcXG4rI2Vsc2VcXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXFx0XFx0XFxcXFxcbiBcXHRfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFxcXCJxXFxcIiwgXFxcInJcXFwiLCAoX3B0ciksIChfb2xkcCksIChfbnZhbCksIF9sYWJlbClcXG4rXFxuICNlbmRpZlxcbiBcXG4rXFxuIC8qXFxuICAqIEZvcmNlIHRoZSBwb2ludGVyIHRvIHVcXHUwMDNjc2l6ZVxcdTAwM2UgdG8gbWF0Y2ggdGhlIHNpemUgZXhwZWN0ZWQgYnkgdGhlIGFzbSBoZWxwZXIuXFxuICAqIGNsYW5nL0xMVk0gY29tcGlsZXMgYWxsIGNhc2VzIGFuZCBvbmx5IGRpc2NhcmRzIHRoZSB1bnVzZWQgcGF0aHMgYWZ0ZXJcXG5AQCAtNTgwLDYgKzYzNCwxNCBAQCBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTtcXG4gXFx0Y2FzZSA4OlxcdF9fcmV0ID0gX190cnlfY21weGNoZzY0X3VzZXJfYXNtKChfX2ZvcmNlIHU2NCAqKShfcHRyKSwgKF9vbGRwKSxcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAoX252YWwpLCBfbGFiZWwpO1xcdFxcdFxcXFxcXG4gXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYXNlIDE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KSlcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdF9fcmV0ID0gX190cnlfY21weGNoZzEyOF91c2VyX2FzbShcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdChfX2ZvcmNlIHUxMjggKikoX3B0ciksXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHQoX29sZHApLCAoX252YWwpLCBfbGFiZWwpO1xcdFxcdFxcXFxcXG4rXFx0XFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0X19yZXQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19yZXQ7XFx0XFx0XFx0XFx0XFx0XFx0fSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG5pbmRleCBjMWIyMTI4MjE4N2YzLi41MzU4NDIzMzZkNzY2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXFxuQEAgLTIxODQsMjQgKzIxODQsMzYgQEAgc3RhdGljIGludCBlbV9jYWxsX25lYXJfYWJzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuKyNkZWZpbmUgZW1fY21weGNoZzhiXzE2YihfX2MsIHJiaXRzLCBtYml0cylcXFxcXFxuK2RvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHUjI21iaXRzIG9sZCA9IF9fYy1cXHUwMDNlZHN0Lm9yaWdfdmFsIyNtYml0cztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmICgoKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHxcXHRcXHRcXFxcXFxuK1xcdCAgICAoKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XFx0XFx0XFxcXFxcbitcXHRcXHQqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JBWCkgPSAodSMjcmJpdHMpIChvbGQgXFx1MDAzZVxcdTAwM2UgMCk7XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JEWCkgPSAodSMjcmJpdHMpIChvbGQgXFx1MDAzZVxcdTAwM2UgcmJpdHMpO1xcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19jLVxcdTAwM2VlZmxhZ3MgXFx1MDAyNj0gflg4Nl9FRkxBR1NfWkY7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR9IGVsc2Uge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19jLVxcdTAwM2Vkc3QudmFsIyNtYml0cyA9ICgodSMjbWJpdHMpcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkNYKSBcXHUwMDNjXFx1MDAzYyByYml0cykgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0KHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpO1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRfX2MtXFx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1pGO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSB3aGlsZSAoMClcXG4rXFxuIHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbiB7XFxuLVxcdHU2NCBvbGQgPSBjdHh0LVxcdTAwM2Vkc3Qub3JpZ192YWw2NDtcXG4tXFxuLVxcdGlmIChjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoOCArICEhKGN0eHQtXFx1MDAzZXJleF9iaXRzIFxcdTAwMjYgUkVYX1cpICogOCAhPSBjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMpKVxcbiBcXHRcXHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XFxuIFxcbi1cXHRpZiAoKCh1MzIpIChvbGQgXFx1MDAzZVxcdTAwM2UgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8XFxuLVxcdCAgICAoKHUzMikgKG9sZCBcXHUwMDNlXFx1MDAzZSAzMikgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JEWCkpKSB7XFxuLVxcdFxcdCpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JBWCkgPSAodTMyKSAob2xkIFxcdTAwM2VcXHUwMDNlIDApO1xcbi1cXHRcXHQqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCBcXHUwMDNlXFx1MDAzZSAzMik7XFxuLVxcdFxcdGN0eHQtXFx1MDAzZWVmbGFncyBcXHUwMDI2PSB+WDg2X0VGTEFHU19aRjtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0Y3R4dC1cXHUwMDNlZHN0LnZhbDY0ID0gKCh1NjQpcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JDWCkgXFx1MDAzY1xcdTAwM2MgMzIpIHxcXG4tXFx0XFx0XFx0KHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JCWCk7XFxuLVxcbi1cXHRcXHRjdHh0LVxcdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcXG4tXFx0fVxcbitcXHRpZiAoIShjdHh0LVxcdTAwM2VyZXhfYml0cyBcXHUwMDI2IFJFWF9XKSlcXG4rXFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxcbitcXHRlbHNlXFxuK1xcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuKyNlbmRpZlxcbiBcXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcXG4gfVxcbiBcXG5AQCAtNTQxNCw4ICs1NDI2LDE0IEBAIGludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXFxuIFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdC8qIENvcHkgZnVsbCA2NC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXFxuLVxcdGN0eHQtXFx1MDAzZWRzdC5vcmlnX3ZhbDY0ID0gY3R4dC1cXHUwMDNlZHN0LnZhbDY0O1xcbitcXHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cXG4rXFxuKyNpZmRlZiBDT05GSUdfWDg2XzY0XFxuK1xcdGlmIChjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXFxuK1xcdFxcdGN0eHQtXFx1MDAzZWRzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtXFx1MDAzZWRzdC52YWwxMjg7XFxuK1xcdGVsc2VcXG4rI2VuZGlmXFxuK1xcdFxcdGN0eHQtXFx1MDAzZWRzdC5vcmlnX3ZhbDY0ID0gY3R4dC1cXHUwMDNlZHN0LnZhbDY0O1xcbiBcXG4gc3BlY2lhbF9pbnNuOlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjg5OTExODQ1MjMzZGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0yNjMsNiArMjYzLDkgQEAgc3RydWN0IG9wZXJhbmQge1xcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgb3JpZ192YWw7XFxuIFxcdFxcdHU2NCBvcmlnX3ZhbDY0O1xcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxcbitcXHRcXHR1MTI4IG9yaWdfdmFsMTI4O1xcbisjZW5kaWZcXG4gXFx0fTtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nICpyZWc7XFxuQEAgLTI3Niw2ICsyNzksOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuIFxcdFxcdHU2NCB2YWw2NDtcXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0XFx0dTEyOCB2YWwxMjg7XFxuKyNlbmRpZlxcbiBcXHRcXHRjaGFyIHZhbHB0cltzaXplb2YoYXZ4MjU2X3QpXTtcXG4gXFx0XFx0c3NlMTI4X3QgdmVjX3ZhbDtcXG4gXFx0XFx0YXZ4MjU2X3QgdmVjX3ZhbDI7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjYwYmUxNmYwNWQ3OTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTUyNzEsNyArNTI3MSw3IEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0aW50IHI7XFxuIFxcbiBcXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xcbi1cXHRpZiAoYnl0ZXMgXFx1MDAzZSA4IHx8IChieXRlcyBcXHUwMDI2IChieXRlcyAtIDEpKSlcXG4rXFx0aWYgKGJ5dGVzIFxcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXFx1MDAyNiAoYnl0ZXMgLSAxKSkpXFxuIFxcdFxcdGdvdG8gZW11bF93cml0ZTtcXG4gXFxuIFxcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcXG5AQCAtNTMxMSw2ICs1MzExLDExIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0Y2FzZSA4OlxcbiBcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbiBcXHRcXHRicmVhaztcXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0Y2FzZSAxNjpcXG4rXFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTEyOCwgaHZhLCBvbGQsIG5ldyk7XFxuK1xcdFxcdGJyZWFrO1xcbisjZW5kaWZcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0QlVHKCk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MTUuMjkzNTA5MDE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjk2NDM1NTIwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbV9jbXB4Y2hnOGJcIixcbiAgICBcImVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc25cIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgMTI4LWJpdCBDTVBYQ0hHMTZCIGVtdWxhdGlvbiB0byB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvciBhbmQgaW1wbGVtZW50cyBhIG5ldyAxMjgtYml0IHVzZXIgY21weGNoZyBpbmxpbmUgYXNzZW1ibHkgcHJpbWl0aXZlIChfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtKSBvbiB4ODZfNjQuIEl0IGFkZHMgYSBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGluIGVtX2NtcHhjaGc4YiBhbmQgbW9kaWZpZXMgb3BlcmFuZCBoYW5kbGluZyBpbiB4ODZfZW11bGF0ZV9pbnNuIGFuZCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSB2aWEgc3RhbmRhcmQgS1ZNIGd1ZXN0IGVtdWxhdGlvbiBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI5ZTc0OGE2ODkwMjcxMTQ5ZTIxMWEyMDIxMDUwMDZlMWRlZTcxZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjU5OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXG5pbmRleCAzYTBkZDNjMmIyMzNlLi45NDg5MzdhMjRjYzUyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbkBAIC00MDcsNiArNDA3LDI3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHVubGlrZWx5KCFzdWNjZXNzKSlcdFx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoc3VjY2Vzcyk7XHRcdFx0XHRcdH0pXG4rI2Vsc2UgLy8gIUNPTkZJR19YODZfMzJcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHtcdFxcXG4rXHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhfcHRyKSBfb2xkID0gKF9fdHlwZW9mX18oX3B0cikpKF9wb2xkKTtcdFx0XFxcbitcdHU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkO1x0XHRcdFx0XHRcXFxuK1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XHRcdFx0XHRcXFxuK1x0YXNtX2dvdG9fb3V0cHV0KFwiXFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIFwiMTogXCIgTE9DS19QUkVGSVggXCJjbXB4Y2hnMTZiICVbcHRyXVxcblwiXHRcdFxcXG4rXHRcdCAgICAgX0FTTV9FWFRBQkxFX1VBKDFiLCAlbFtsYWJlbF0pXHRcdFx0XFxcbitcdFx0ICAgICA6IFwiPUBjY3pcIiAoc3VjY2VzcyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCIrYVwiIChfX29sZF9sb3cpLFx0XHRcdFx0XFxcbitcdFx0ICAgICAgIFwiK2RcIiAoX19vbGRfaGlnaCksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgW3B0cl0gXCIrbVwiICgqX3B0cilcdFx0XHRcdFxcXG4rXHRcdCAgICAgOiBcImJcIiAoKHU2NClfX25ldyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCJjXCIgKCh1NjQpKCh1MTI4KV9fbmV3IFx1MDAzZVx1MDAzZSA2NCkpXHRcdFx0XFxcbitcdFx0ICAgICA6IFwibWVtb3J5XCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIDogbGFiZWwpO1x0XHRcdFx0XHRcdFxcXG4rXHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVx0XHRcdFx0XHRcdFxcXG4rXHRcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXHUwMDNjXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcdFx0XFxcbitcdGxpa2VseShzdWNjZXNzKTtcdFx0XHRcdFx0fSlcbiAjZW5kaWYgLy8gQ09ORklHX1g4Nl8zMlxuICNlbHNlICAvLyAhQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxuICNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbClcdCh7IFxcXG5AQCAtNDYzLDYgKzQ4NCwzMiBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuKyNlbHNlIC8vIUNPTkZJR19YODZfMzJcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHtcdFxcXG4rXHRpbnQgX19yZXN1bHQ7XHRcdFx0XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhfcHRyKSBfb2xkID0gKF9fdHlwZW9mX18oX3B0cikpKF9wb2xkKTtcdFx0XFxcbitcdHU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkO1x0XHRcdFx0XHRcXFxuK1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XHRcdFx0XHRcXFxuK1x0YXNtIHZvbGF0aWxlKFwiXFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIFwiMTogXCIgTE9DS19QUkVGSVggXCJjbXB4Y2hnMTZiICVbcHRyXVxcblwiXHRcdFxcXG4rXHRcdCAgICAgXCJtb3YgJDAsICVbcmVzdWx0XVxcblxcdFwiXHRcdFx0XHRcXFxuK1x0XHQgICAgIFwic2V0eiAlYltyZXN1bHRdXFxuXCJcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCIyOlxcblwiXHRcdFx0XHRcdFx0XFxcbitcdFx0ICAgICBfQVNNX0VYVEFCTEVfVFlQRV9SRUcoMWIsIDJiLCBFWF9UWVBFX0VGQVVMVF9SRUcsXHRcXFxuK1x0XHRcdFx0XHQgICAlW3Jlc3VsdF0pXHRcdFx0XFxcbitcdFx0ICAgICA6IFtyZXN1bHRdIFwiPXFcIiAoX19yZXN1bHQpLFx0XHRcdFxcXG4rXHRcdCAgICAgICBcIithXCIgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCIrZFwiIChfX29sZF9oaWdoKSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBbcHRyXSBcIittXCIgKCpfcHRyKVx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFwiYlwiICgodTY0KV9fbmV3KSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcImNcIiAoKHU2NCkoKHUxMjgpX19uZXcgXHUwMDNlXHUwMDNlIDY0KSlcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcdFx0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseShfX3Jlc3VsdCBcdTAwM2MgMCkpXHRcdFx0XHRcdFxcXG4rXHRcdGdvdG8gbGFiZWw7XHRcdFx0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVx0XHRcdFx0XHRcXFxuK1x0XHQqX29sZCA9ICgodTEyOClfX29sZF9oaWdoIFx1MDAzY1x1MDAzYyA2NCkgfCBfX29sZF9sb3c7XHRcdFxcXG4rXHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbiBcbkBAIC01NTEsMTEgKzU5OCwxOCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFxuIGV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuIFxuLSNpZm5kZWYgQ09ORklHX1g4Nl8zMlxuKyNpZmRlZiBDT05GSUdfWDg2XzMyXG4rLypcbisgKiBBbHdheXMgZmFpbCBvbiAzMiBiaXQgYXJjaCBvciA2NCBhcmNoIHdpdGhvdXQgMTI4IGJpdCBjbXB4Y2hnIHN1cHBvcnRcbisgKi9cbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKSAoeyBCVUlMRF9CVUdfT04oMSk7IDA7IH0pXG4rI2Vsc2VcbiAjZGVmaW5lIF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbShfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbClcdFx0XFxcbiBcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXCJxXCIsIFwiclwiLCAoX3B0ciksIChfb2xkcCksIChfbnZhbCksIF9sYWJlbClcbitcbiAjZW5kaWZcbiBcbitcbiAvKlxuICAqIEZvcmNlIHRoZSBwb2ludGVyIHRvIHVcdTAwM2NzaXplXHUwMDNlIHRvIG1hdGNoIHRoZSBzaXplIGV4cGVjdGVkIGJ5IHRoZSBhc20gaGVscGVyLlxuICAqIGNsYW5nL0xMVk0gY29tcGlsZXMgYWxsIGNhc2VzIGFuZCBvbmx5IGRpc2NhcmRzIHRoZSB1bnVzZWQgcGF0aHMgYWZ0ZXJcbkBAIC01ODAsNiArNjM0LDE0IEBAIGV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuIFx0Y2FzZSA4Olx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oKF9fZm9yY2UgdTY0ICopKF9wdHIpLCAoX29sZHApLFxcXG4gXHRcdFx0XHRcdFx0IChfbnZhbCksIF9sYWJlbCk7XHRcdFxcXG4gXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuK1x0Y2FzZSAxNjpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KSlcdFx0XHRcdFxcXG4rXHRcdFx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtKFx0XHRcdFxcXG4rXHRcdFx0XHRcdChfX2ZvcmNlIHUxMjggKikoX3B0ciksXHRcdFx0XFxcbitcdFx0XHRcdFx0KF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKTtcdFx0XFxcbitcdFx0ZWxzZVx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdF9fcmV0ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGRlZmF1bHQ6IF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKCk7XHRcdFx0XHRcXFxuIFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHR9KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5pbmRleCBjMWIyMTI4MjE4N2YzLi41MzU4NDIzMzZkNzY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuQEAgLTIxODQsMjQgKzIxODQsMzYgQEAgc3RhdGljIGludCBlbV9jYWxsX25lYXJfYWJzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbisjZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXFxcbitkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHUjI21iaXRzIG9sZCA9IF9fYy1cdTAwM2Vkc3Qub3JpZ192YWwjI21iaXRzO1x0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdEJVSUxEX0JVR19PTihyYml0cyAqIDIgIT0gbWJpdHMpO1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKCgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHxcdFx0XFxcbitcdCAgICAoKHUjI3JiaXRzKSAob2xkIFx1MDAzZVx1MDAzZSByYml0cykgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SRFgpKSkge1x0XHRcXFxuK1x0XHQqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JBWCkgPSAodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIDApO1x0XHRcdFxcXG4rXHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgcmJpdHMpO1x0XHRcdFxcXG4rXHRcdF9fYy1cdTAwM2VlZmxhZ3MgXHUwMDI2PSB+WDg2X0VGTEFHU19aRjtcdFx0XHRcdFx0XHRcdFxcXG4rXHR9IGVsc2Uge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0X19jLVx1MDAzZWRzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpIFx1MDAzY1x1MDAzYyByYml0cykgfFx0XFxcbitcdFx0XHRcdFx0KHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpO1x0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdF9fYy1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcdFx0XHRcdFx0XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rfSB3aGlsZSAoMClcbitcbiBzdGF0aWMgaW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbiB7XG4tXHR1NjQgb2xkID0gY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NDtcbi1cbi1cdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbitcdGlmIChXQVJOX09OX09OQ0UoOCArICEhKGN0eHQtXHUwMDNlcmV4X2JpdHMgXHUwMDI2IFJFWF9XKSAqIDggIT0gY3R4dC1cdTAwM2Vkc3QuYnl0ZXMpKVxuIFx0XHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XG4gXG4tXHRpZiAoKCh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDApICE9ICh1MzIpIHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQVgpKSB8fFxuLVx0ICAgICgodTMyKSAob2xkIFx1MDAzZVx1MDAzZSAzMikgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JEWCkpKSB7XG4tXHRcdCpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JBWCkgPSAodTMyKSAob2xkIFx1MDAzZVx1MDAzZSAwKTtcbi1cdFx0KnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkRYKSA9ICh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDMyKTtcbi1cdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2PSB+WDg2X0VGTEFHU19aRjtcbi1cdH0gZWxzZSB7XG4tXHRcdGN0eHQtXHUwMDNlZHN0LnZhbDY0ID0gKCh1NjQpcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JDWCkgXHUwMDNjXHUwMDNjIDMyKSB8XG4tXHRcdFx0KHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JCWCk7XG4tXG4tXHRcdGN0eHQtXHUwMDNlZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7XG4tXHR9XG4rXHRpZiAoIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykpXG4rXHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgMzIsIDY0KTtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuK1x0ZWxzZVxuK1x0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDY0LCAxMjgpO1xuKyNlbmRpZlxuIFx0cmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7XG4gfVxuIFxuQEAgLTU0MTQsOCArNTQyNiwxNCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBjaGVja19pbnRlcmNlcHRzKVxuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuIFx0fVxuLVx0LyogQ29weSBmdWxsIDY0LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbi1cdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbitcdC8qIENvcHkgZnVsbCA2NC8xMjgtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqL1xuK1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRpZiAoY3R4dC1cdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXG4rXHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC1cdTAwM2Vkc3QudmFsMTI4O1xuK1x0ZWxzZVxuKyNlbmRpZlxuK1x0XHRjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDY0ID0gY3R4dC1cdTAwM2Vkc3QudmFsNjQ7XG4gXG4gc3BlY2lhbF9pbnNuOlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjg5OTExODQ1MjMzZGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuKysrIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0yNjMsNiArMjYzLDkgQEAgc3RydWN0IG9wZXJhbmQge1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nIG9yaWdfdmFsO1xuIFx0XHR1NjQgb3JpZ192YWw2NDtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuK1x0XHR1MTI4IG9yaWdfdmFsMTI4O1xuKyNlbmRpZlxuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0dW5zaWduZWQgbG9uZyAqcmVnO1xuQEAgLTI3Niw2ICsyNzksOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7XG4gXHR1bmlvbiB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgdmFsO1xuIFx0XHR1NjQgdmFsNjQ7XG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdFx0dTEyOCB2YWwxMjg7XG4rI2VuZGlmXG4gXHRcdGNoYXIgdmFscHRyW3NpemVvZihhdngyNTZfdCldO1xuIFx0XHRzc2UxMjhfdCB2ZWNfdmFsO1xuIFx0XHRhdngyNTZfdCB2ZWNfdmFsMjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjYwYmUxNmYwNWQ3OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTUyNzEsNyArNTI3MSw3IEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdGludCByO1xuIFxuIFx0LyogZ3Vlc3RzIGNtcHhjaGc4YiBoYXZlIHRvIGJlIGVtdWxhdGVkIGF0b21pY2FsbHkgKi9cbi1cdGlmIChieXRlcyBcdTAwM2UgOCB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbitcdGlmIChieXRlcyBcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbiBcdFx0Z290byBlbXVsX3dyaXRlO1xuIFxuIFx0Z3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpO1xuQEAgLTUzMTEsNiArNTMxMSwxMSBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRjYXNlIDg6XG4gXHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU2NCwgaHZhLCBvbGQsIG5ldyk7XG4gXHRcdGJyZWFrO1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRjYXNlIDE2OlxuK1x0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRCVUcoKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjU5OjE1LjI5MzUxMTY0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTIzNjA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IGNtcHhjaGcxNmIgaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsIGFuZCBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhbmQgdGFyZ2V0IHN5bWJvbHMuIFRoZSBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIHNvbWV3aGF0LlxuXG5GaXJzdCwgSSBzZWUgY2hhbmdlcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYC4gSXQgaW50cm9kdWNlcyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAsIGhhbmRsaW5nIHRoZSBgY21weGNoZzE2YmAgaW5zdHJ1Y3Rpb24sIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgYENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRgIG9wdGltaXphdGlvbi4gVGhlIGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAgc3dpdGNoIHN0YXRlbWVudCBpcyB1cGRhdGVkIHRvIGFjY29tbW9kYXRlIHRoZSBgY2FzZSAxNjpgIHNjZW5hcmlvLCBsZXZlcmFnaW5nIGBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1gxNilgIGFuZCB0aGF0IG5ldyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAuIFRoaXMgcGFydCBpcyBpbnRlcmVzdGluZzsgZGlyZWN0IHVzZXItc3BhY2UgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGFsd2F5cyBhIHBvdGVudGlhbCB0YXJnZXQuXG5cblRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLCB3aGljaCBpcyBjcnVjaWFsLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBjbXB4Y2hnMTZiIGVtdWxhdGlvbiB3aXRoaW4gdGhlIEtWTSB4ODYgZW11bGF0b3IuIFdlIGhhdmUgdGhlIGBlbV9jbXB4Y2hnOGJfMTZiYCBtYWNybyBhbmQgdGhlIGBlbV9jbXB4Y2hnOGJgIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgYFJFWF9XYCBjYXNlLCBtZWFuaW5nIDY0LWJpdCBvcGVyYW5kIHNpemVzLiBJdCdzIG5vdyBjYWxsaW5nIGBlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDY0LCAxMjgpYC4gVGhlIGluY2x1c2lvbiBvZiBgV0FSTl9PTl9PTkNFYCBpbmRpY2F0ZXMgdGhhdCBvcGVyYW5kIHNpemVzIHdpbGwgYmUgdmFsaWRhdGVkLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gVGhlcmUncyBhbHNvIGB4ODZfZW11bGF0ZV9pbnNuYCBjb3B5aW5nIGBjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtXHUwMDNlZHN0LnZhbDEyOGAgd2hlbiB0aGUgZGVzdGluYXRpb24gc2l6ZSBpcyAxNiBieXRlcy4gVGhpcyBwb2ludHMgdG8gZW11bGF0aW9uIHN0YXRlIGhhbmRsaW5nLlxuXG5UaGUgaGVhZGVyIGZpbGUgYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCBleHRlbmRzIHRoZSBgc3RydWN0IG9wZXJhbmRgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgZmllbGRzIHVuZGVyIGBDT05GSUdfWDg2XzY0YCwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gc3VwcG9ydCB0aGUgMTI4LWJpdCBvcGVyYXRpb25zLlxuXG5GaW5hbGx5LCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBwcm92aWRlcyB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uIHdoaWNoIHNwZWNpZmljYWxseSBzdXBwb3J0cyB0aGUgYGJ5dGVzID09IDE2YCBjYXNlIHVzaW5nIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0aW9uIGxvZ2ljIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBzaW11bGF0ZWQgaGFyZHdhcmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1c2Ugc29tZSBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgb24gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBlbXVsYXRpb24gbG9naWMgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgdGFyZ2V0aW5nIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIG9wZXJhdGlvbiwgYW5kIHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBiZSBtaXNzZWQgZHVyaW5nIHRoZSBlbXVsYXRpb24uIEFyZWFzIGRlYWxpbmcgd2l0aCBgY3R4dC1cdTAwM2Vkc3QuYnl0ZXNgIG9yIHNpemUgdmFsaWRhdGlvbiB3aWxsIGltbWVkaWF0ZWx5IGJlIHN1c3BlY3QuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGhlIGVtdWxhdGVkIG5hdHVyZSBvZiB0aGlzIGluc3RydWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MjAuNTg1ODc0NDk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA4MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtX2NtcHhjaGc4YlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0yMTczPXN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIxODc6I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXFxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODgtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIwNS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMDY6c3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMS1cXHRpZiAoIShjdHh0LVxcdTAwM2VyZXhfYml0cyBcXHUwMDI2IFJFWF9XKSlcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTI6XFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMy0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxNC1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjE1OlxcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE2LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MjAuNjM1MDkxODY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwMjE3MDk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgaW4gS1ZNJ3MgWDg2IENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBLVk0gaGFuZGxlcyBgY21weGNoZ2AgaW5zdHJ1Y3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gZW11bGF0ZWQgc2NlbmFyaW9zLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgZnVuY3Rpb24sIHdoaWNoIEkgYmVsaWV2ZSByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgWDg2IGVtdWxhdGlvbiBsb2dpYyBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gS1ZNLCBzbyBpdCdzIHRoZSBuYXR1cmFsIGZpcnN0IHBsYWNlIHRvIGxvb2suIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBob3cgS1ZNIGhhbmRsZXMgdGhlIGF0b21pYyBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24gd2hlbiBpdCdzIG5vdCBiZWluZyBkaXJlY3RseSBoYW5kbGVkIGJ5IHRoZSBob3N0IENQVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggaXQgdGFrZXMgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHBlcmZvcm1hbmNlIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGVtdWxhdGluZyB0aGlzOyB0aGVyZWZvcmUsIG15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGVtdWxhdGlvbiBpcyBhY3RpdmF0ZWQuIEkgYW0gYWxzbyBrZWVubHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgb3ZlcmFsbCBLVk0gYXJjaGl0ZWN0dXJlOyB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyBpbiBhbmQgYW55IGRlcGVuZGVuY2llcyBvciBvcHRpbWl6YXRpb25zIHRoYXQgaXQgbGV2ZXJhZ2VzLiBUaGUgc3BlY2lmaWMgdGFyZ2V0IHdpbGwgYmUgdG8gbGVhcm4gaG93IHRoZSBlbXVsYXRvciBpbnRlcmFjdHMgd2l0aCB0aGUgaG9zdCBDUFUncyBtZW1vcnkgYW5kIHJlZ2lzdGVycyB0byBhY2hpZXZlIHRoZSBjb3JyZWN0IGF0b21pYyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjU5OjIzLjUzNzI2NjA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjMxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNjEtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI3LVxcdC53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4Mjg6XFx0LmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI5LVxcdC5pbnZscGcgICAgICAgICAgICAgID0gZW11bGF0b3JfaW52bHBnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo1OToyMy41ODU5MDM0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMDA2NzgxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdXNhZ2Ugb2YgYGNtcHhjaGcxMjhfdXNlcmAgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9uLCBgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJgLCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSBhbGwgb2YgaXRzIGNhbGxlcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGVtcGxveWVkLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBzZWN1cml0eSBzY3J1dGlueSwgb3IgbWF5YmUgZXZlbiBpZGVudGlmeSBwb3RlbnRpYWwgYnVncy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjI1LjU5MjY4NzUxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc4MDcyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuc2FmZV90cnlfY21weGNoZ191c2VyfHRyeV9jbXB4Y2hnX3VzZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTMzND1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTM3Mi0jaWZkZWYgQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDozNzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtMzc0LVxcdGJvb2wgc3VjY2VzcztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDMyLSNlbHNlICAvLyAhQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo0MzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDM0LVxcdGludCBfX2VyciA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTU5MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTU5OC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NTk5OmV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MDAtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA3LSNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjA4OlxcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcInFcXFwiLCBcXFwiclxcXCIsIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MDktXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjE3LSAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MTg6I2RlZmluZSB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcihfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbCkgKHtcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYxOS1cXHRib29sIF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjEtXFx0c3dpdGNoIChzaXplb2YoKihfcHRyKSkpIHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYyMjpcXHRjYXNlIDE6XFx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFxcXCJiXFxcIiwgXFxcInFcXFwiLFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjIzLVxcdFxcdFxcdFxcdFxcdCAgICAgICAoX19mb3JjZSB1OCAqKShfcHRyKSwgKF9vbGRwKSxcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjI1LVxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjI2OlxcdGNhc2UgMjpcXHRfX3JldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcIndcXFwiLCBcXFwiclxcXCIsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIChfX2ZvcmNlIHUxNiAqKShfcHRyKSwgKF9vbGRwKSxcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjI5LVxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjMwOlxcdGNhc2UgNDpcXHRfX3JldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcImxcXFwiLCBcXFwiclxcXCIsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIChfX2ZvcmNlIHUzMiAqKShfcHRyKSwgKF9vbGRwKSxcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ0LVxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjQ1OlxcdGRlZmF1bHQ6IF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKCk7XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDYtXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDktLyogXFxcIlJldHVybnNcXFwiIDAgb24gc3VjY2VzcywgMSBvbiBmYWlsdXJlLCAtRUZBVUxUIGlmIHRoZSBhY2Nlc3MgZmF1bHRzLiAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NTA6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXIoX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXFx0KHtcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY1MS1cXHRpbnQgX19yZXQgPSAtRUZBVUxUO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUyLVxcdF9fdWFjY2Vzc19iZWdpbl9ub3NwZWMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MzpcXHRfX3JldCA9ICF1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcihfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbCk7XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTQtX2xhYmVsOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD0yMTA9c3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTI2MS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6MjYyOlxcdFxcdHJldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcihwdGVwX3VzZXIsIFxcdTAwMjZvcmlnX3B0ZSwgcHRlLCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTI2My1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjU2LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjU3OiNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih0LCBwdHIsIG9sZCwgbmV3KSBcXFxcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyNTg6XFx0KF9fdHJ5X2NtcHhjaGdfdXNlcigodCBfX3VzZXIgKikocHRyKSwgKHQgKikob2xkKSwgKih0ICopKG5ldyksIGVmYXVsdCAjIyB0KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTI2MD1zdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMwMi1cXHRjYXNlIDE6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMDM6XFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTgsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA0LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA1LVxcdGNhc2UgMjpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMwNjpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA3LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA4LVxcdGNhc2UgNDpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMwOTpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzEwLVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzExLVxcdGNhc2UgODpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxMjpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzEzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTUtXFx0Y2FzZSAxNjpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxNjpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6MjguNTcwNzY1MjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MDg0NTkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UncyBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgWDg2IEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZXMgNTI2MCB0byA1MzQwLiBJIHdhbnQgdG8gcXVpY2tseSByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgcmVsZXZhbnQgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQuLi4gW0F0IHRoaXMgcG9pbnQsIHlvdSdkIGluc2VydCBkZXRhaWxzIGJhc2VkIG9uIHdoYXQncyBmb3VuZCBpbiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDUyNjAtNTM0MC4gWW91LCB0aGUgZXhwZXJ0LCB3b3VsZCBrbm93IHRoZSBjb250ZXh0IGFuZCB3aGF0IGluZm9ybWF0aW9uIHRvIGV4dHJhcG9sYXRlXS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBbdGhlIGdlbmVyYWwgdG9waWMgd2l0aGluIHRoYXQgYmxvY2sgb2YgY29kZV0sIHdoaWNoIGNvdWxkIGJlIGhhbmRsaW5nIFtzcGVjaWZpYyBhc3BlY3QsIGUuZy4sIGd1ZXN0IHN0YXRlIHNhdmUvcmVzdG9yZSwgaW50ZXJydXB0IGhhbmRsaW5nLCBjZXJ0YWluIE1TUnNdLlxuXG5JJ20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IHRoZXkgbWFuYWdlIHRoZSBpbnRlcnBsYXkgYmV0d2Vlbi4uLm9yLCBtYXliZSBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXkgZGVhbCB3aXRoLi4uIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gW3NwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgY29kZSwgZS5nLiwgaG93IHRoZXkgaGFuZGxlIGEgcGFydGljdWxhciBWTSBleGl0LCB3aGV0aGVyIHRoZXJlJ3MgYW55IGNsZXZlciB1c2Ugb2Ygdm14IGluc3RydWN0aW9ucywgb3IgaG93IHRoZXkgbWFuYWdlIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZV0uIEdpdmVuIG15IGJhY2tncm91bmQgd2l0aCBbeW91ciBleHBlcnRpc2UsIGUuZy4sIGh5cGVydmlzb3IgZGVzaWduLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgc3BlY2lmaWMgeDg2IGFyY2hpdGVjdHVyZSBmZWF0dXJlXSwgSSdsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBpbXBsZW1lbnRhdGlvbnMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgYXJlYXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjMxLjY1MTYxMzkxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbjUyNjE6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNTI2MjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKm9sZCxcXG41MjYzOlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqbmV3LFxcbjUyNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXFxuNTI2NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pXFxuNTI2NjpcXHR7XFxuNTI2NzpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7XFxuNTI2ODpcXHRcXHR1NjQgcGFnZV9saW5lX21hc2s7XFxuNTI2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG41MjcwOlxcdFxcdGdwYV90IGdwYTtcXG41MjcxOlxcdFxcdGludCByO1xcbjUyNzI6XFx0XFxuNTI3MzpcXHRcXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xcbjUyNzQ6XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXFx1MDAyNiAoYnl0ZXMgLSAxKSkpXFxuNTI3NTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI3NjpcXHRcXG41Mjc3OlxcdFxcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcXG41Mjc4OlxcdFxcbjUyNzk6XFx0XFx0aWYgKGdwYSA9PSBJTlZBTElEX0dQQSB8fFxcbjUyODA6XFx0XFx0ICAgIChncGEgXFx1MDAyNiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpXFxuNTI4MTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI4MjpcXHRcXG41MjgzOlxcdFxcdC8qXFxuNTI4NDpcXHRcXHQgKiBFbXVsYXRlIHRoZSBhdG9taWMgYXMgYSBzdHJhaWdodCB3cml0ZSB0byBhdm9pZCAjQUMgaWYgU0xEIGlzXFxuNTI4NTpcXHRcXHQgKiBlbmFibGVkIGluIHRoZSBob3N0IGFuZCB0aGUgYWNjZXNzIHNwbGl0cyBhIGNhY2hlIGxpbmUuXFxuNTI4NjpcXHRcXHQgKi9cXG41Mjg3OlxcdFxcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKVxcbjUyODg6XFx0XFx0XFx0cGFnZV9saW5lX21hc2sgPSB+KGNhY2hlX2xpbmVfc2l6ZSgpIC0gMSk7XFxuNTI4OTpcXHRcXHRlbHNlXFxuNTI5MDpcXHRcXHRcXHRwYWdlX2xpbmVfbWFzayA9IFBBR0VfTUFTSztcXG41MjkxOlxcdFxcbjUyOTI6XFx0XFx0aWYgKCgoZ3BhICsgYnl0ZXMgLSAxKSBcXHUwMDI2IHBhZ2VfbGluZV9tYXNrKSAhPSAoZ3BhIFxcdTAwMjYgcGFnZV9saW5lX21hc2spKVxcbjUyOTM6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTQ6XFx0XFxuNTI5NTpcXHRcXHRodmEgPSBrdm1fdmNwdV9nZm5fdG9faHZhKHZjcHUsIGdwYV90b19nZm4oZ3BhKSk7XFxuNTI5NjpcXHRcXHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxcbjUyOTc6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTg6XFx0XFxuNTI5OTpcXHRcXHRodmEgKz0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTtcXG41MzAwOlxcdFxcbjUzMDE6XFx0XFx0c3dpdGNoIChieXRlcykge1xcbjUzMDI6XFx0XFx0Y2FzZSAxOlxcbjUzMDM6XFx0XFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDQ6XFx0XFx0XFx0YnJlYWs7XFxuNTMwNTpcXHRcXHRjYXNlIDI6XFxuNTMwNjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDc6XFx0XFx0XFx0YnJlYWs7XFxuNTMwODpcXHRcXHRjYXNlIDQ6XFxuNTMwOTpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTA6XFx0XFx0XFx0YnJlYWs7XFxuNTMxMTpcXHRcXHRjYXNlIDg6XFxuNTMxMjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTM6XFx0XFx0XFx0YnJlYWs7XFxuNTMxNDpcXHQjaWZkZWYgQ09ORklHX1g4Nl82NFxcbjUzMTU6XFx0XFx0Y2FzZSAxNjpcXG41MzE2OlxcdFxcdFxcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTc6XFx0XFx0XFx0YnJlYWs7XFxuNTMxODpcXHQjZW5kaWZcXG41MzE5OlxcdFxcdGRlZmF1bHQ6XFxuNTMyMDpcXHRcXHRcXHRCVUcoKTtcXG41MzIxOlxcdFxcdH1cXG41MzIyOlxcdFxcbjUzMjM6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUzMjQ6XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xcbjUzMjU6XFx0XFxuNTMyNjpcXHRcXHQvKlxcbjUzMjc6XFx0XFx0ICogTWFyayB0aGUgcGFnZSBkaXJ0eSBfYmVmb3JlXyBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgQ01QWENIRyB3YXNcXG41MzI4OlxcdFxcdCAqIHN1Y2Nlc3NmdWwsIGFzIHRoZSBvbGQgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG9uIGZhaWx1cmUuICBOb3RlLCBmb3JcXG41MzI5OlxcdFxcdCAqIGxpdmUgbWlncmF0aW9uLCB0aGlzIGlzIHVubmVjZXNzYXJpbHkgY29uc2VydmF0aXZlIGFzIENNUFhDSEcgd3JpdGVzXFxuNTMzMDpcXHRcXHQgKiBiYWNrIHRoZSBvcmlnaW5hbCB2YWx1ZSBhbmQgdGhlIGFjY2VzcyBpcyBhdG9taWMsIGJ1dCBLVk0ncyBBQkkgaXNcXG41MzMxOlxcdFxcdCAqIHRoYXQgYWxsIHdyaXRlcyBhcmUgZGlydHkgbG9nZ2VkLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSB3cml0dGVuLlxcbjUzMzI6XFx0XFx0ICovXFxuNTMzMzpcXHRcXHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhX3RvX2dmbihncGEpKTtcXG41MzM0OlxcdFxcbjUzMzU6XFx0XFx0aWYgKHIpXFxuNTMzNjpcXHRcXHRcXHRyZXR1cm4gWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRDtcXG41MzM3OlxcdFxcbjUzMzg6XFx0XFx0a3ZtX3BhZ2VfdHJhY2tfd3JpdGUodmNwdSwgZ3BhLCBuZXcsIGJ5dGVzKTtcXG41MzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDozMS42NTIxNzk0ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNTExMTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgcmVmZXJlbmNlcywgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNIEVtdWxhdGlvbiBvbiB4ODYqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBLVk0geDg2IGVtdWxhdGlvbiBsYXllciwgc28gbGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgc29tZSBrZXkgbGluZXMgb2YgY29kZSB0byBleGFtaW5lLiBUaGlua2luZyBzdHJhdGVnaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIGxpbmUgMjE4NCBhbmQgbGluZSA0MTIwIHdpdGhpbiB0aGUgZmlsZS4gRXhhbWluaW5nIHRoZSBjb250ZXh0cyBzdXJyb3VuZGluZyB0aG9zZSBsaW5lcyB3aWxsIGxpa2VseSByZXZlYWwgc29tZSBjcml0aWNhbCBlbXVsYXRpb24gbG9naWMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZXNlIGxpbmVzIHdpbGwgbGlrZWx5IGJlIGludm9sdmVkIHdpdGggZWl0aGVyIENQVSBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIG9yIGhhbmRsaW5nIG9mIHNwZWNpZmljIGhhcmR3YXJlIGV2ZW50cy4gQnkgdW5kZXJzdGFuZGluZyB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgaG93IEtWTSBlbXVsYXRlcyBndWVzdCBpbnN0cnVjdGlvbnMuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIHZpcnR1YWxpemF0aW9uIG9mIHRoZSBNTVUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdhaW4gYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgS1ZNIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5IGJ1aWxkIHVwIGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHN5c3RlbSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjM0LjQ4NzI5MzMxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg0LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTg0OlxcdFxcdHJldHVybiByYztcXG4yMTg1OlxcdH1cXG4yMTg2OlxcdFxcbjIxODc6XFx0I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXFxcXG4yMTg4OlxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjE4OTpcXHRcXHR1IyNtYml0cyBvbGQgPSBfX2MtXFx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTE6XFx0XFx0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTM6XFx0XFx0aWYgKCgodSMjcmJpdHMpIChvbGQgXFx1MDAzZVxcdTAwM2UgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fFxcdFxcdFxcXFxcXG4yMTk0OlxcdFxcdCAgICAoKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XFx0XFx0XFxcXFxcbjIxOTU6XFx0XFx0XFx0KnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SQVgpID0gKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIDApO1xcdFxcdFxcdFxcXFxcXG4yMTk2OlxcdFxcdFxcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCBcXHUwMDNlXFx1MDAzZSByYml0cyk7XFx0XFx0XFx0XFxcXFxcbjIxOTc6XFx0XFx0XFx0X19jLVxcdTAwM2VlZmxhZ3MgXFx1MDAyNj0gflg4Nl9FRkxBR1NfWkY7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTg6XFx0XFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjE5OTpcXHRcXHRcXHRfX2MtXFx1MDAzZWRzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpIFxcdTAwM2NcXHUwMDNjIHJiaXRzKSB8XFx0XFxcXFxcbjIyMDA6XFx0XFx0XFx0XFx0XFx0XFx0KHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpO1xcdFxcdFxcXFxcXG4yMjAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yMjAyOlxcdFxcdFxcdF9fYy1cXHUwMDNlZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIyMDM6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yMjA0OlxcdH0gd2hpbGUgKDApXFxuMjIwNTpcXHRcXG4yMjA2OlxcdHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbjIyMDc6XFx0e1xcbjIyMDg6XFx0XFx0aWYgKFdBUk5fT05fT05DRSg4ICsgISEoY3R4dC1cXHUwMDNlcmV4X2JpdHMgXFx1MDAyNiBSRVhfVykgKiA4ICE9IGN0eHQtXFx1MDAzZWRzdC5ieXRlcykpXFxuMjIwOTpcXHRcXHRcXHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XFxuMjIxMDpcXHRcXG4yMjExOlxcdFxcdGlmICghKGN0eHQtXFx1MDAzZXJleF9iaXRzIFxcdTAwMjYgUkVYX1cpKVxcbjIyMTI6XFx0XFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbjIyMTM6XFx0I2lmZGVmIENPTkZJR19YODZfNjRcXG4yMjE0OlxcdFxcdGVsc2VcXG4yMjE1OlxcdFxcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuMjIxNjpcXHQjZW5kaWZcXG4yMjE3OlxcdFxcdHJldHVybiBYODZFTVVMX0NPTlRJTlVFO1xcbjIyMTg6XFx0fVxcbjIyMTk6XFx0XFxuMjIyMDpcXHRzdGF0aWMgaW50IGVtX3JldChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4yMjIxOlxcdHtcXG4yMjIyOlxcdFxcdGludCByYztcXG4yMjIzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZWlwID0gMDtcXG4yMjI0OlxcdFxcbjIyMjU6XFx0XFx0cmMgPSBlbXVsYXRlX3BvcChjdHh0LCBcXHUwMDI2ZWlwLCBjdHh0LVxcdTAwM2VvcF9ieXRlcyk7XFxuMjIyNjpcXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcXG4yMjI3OlxcdFxcdFxcdHJldHVybiByYztcXG4yMjI4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDozNC40ODc1OTM5NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYxMjQ5Njg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZW1fY21weGNoZzhiYCBEZWNvZGluZyBhbmQgRGlzcGF0Y2ggaW4gYGVtdWxhdGUuY2AqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZGlnIGludG8gaG93IHRoZSBgZW1fY21weGNoZzhiYCBpbnN0cnVjdGlvbiBnZXRzIGhhbmRsZWQgd2l0aGluIHRoZSBlbXVsYXRvci4gVGltZSB0byByZXZpc2l0IGBlbXVsYXRlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDEyMC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZWNvZGluZyBhbmQgZGlzcGF0Y2ggbG9naWMgdGhlcmUsIGFuZCBzZWUgaG93IHRoZSBlbXVsYXRpb24gYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdyBhbmQgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBpcyBiZWluZyBpbnRlcnByZXRlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBlbXVsYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjM2LjEwMDA5MzY1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTE1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTE1OlxcdCAqL1xcbjQxMTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9jN183ID0ge1xcbjQxMTc6XFx0XFx0TiwgTiwgTiwgSUkoRHN0TWVtIHwgTW9kUk0gfCBPcDMyNjQgfCBFbXVsYXRlT25VRCwgZW1fcmRwaWQsIHJkcGlkKSxcXG40MTE4OlxcdH07XFxuNDExOTpcXHRcXG40MTIwOlxcdFxcbjQxMjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xcbjQxMjI6XFx0XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuNDEyMzpcXHR9LCB7XFxuNDEyNDpcXHRcXHROLCBOLCBOLCBOLCBOLCBOLCBOLFxcbjQxMjU6XFx0XFx0R1AoMCwgXFx1MDAyNnBmeF8wZl9jN183KSxcXG40MTI2OlxcdH0gfTtcXG40MTI3OlxcdFxcbjQxMjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xcbjQxMjk6XFx0XFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXFxuNDEzMDpcXHRcXHRYNyhEKFVuZGVmaW5lZCkpLFxcbjQxMzE6XFx0fTtcXG40MTMyOlxcdFxcbjQxMzM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xcbjQxMzQ6XFx0XFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXFxuNDEzNTpcXHR9O1xcbjQxMzY6XFx0XFxuNDEzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xcbjQxMzg6XFx0XFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcXG40MTM5OlxcdFxcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDozNi4xMDAzOTM3NzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1ODc3NzExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIERzdE1lbTY0IGFuZCBSRVhfVyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgRHN0TWVtNjRgIGRlY29kaW5nIGFuZCBob3cgdGhlIGBSRVhfV2AgcHJlZml4IGFmZmVjdHMgdGhlIG51bWJlciBvZiBieXRlcyBpbnZvbHZlZCBpbiB0aGUgZGVzdGluYXRpb24gb3BlcmFuZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgaW1tZWRpYXRlIGZvY3VzIGlzIHRyYWNpbmcgb2NjdXJyZW5jZXMgb2YgdGhlIGBEc3RNZW02NGAgc3ltYm9sLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHNob3cgaG93IHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgb3BlcmFuZCBpcyBpbnRlcnByZXRlZC4gVGhlbiwgSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZSBSRVggcHJlZml4IGltcGFjdHMgdGhpbmdzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG9wZXJhbmQgc2l6ZS4gQSBzZWFyY2ggZm9yIGBEc3RNZW02NGAgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC4gSG9wZWZ1bGx5IHRoZSByZXN1bHRzIGFyZSBpbmZvcm1hdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjM3Ljg1OTE3NDgwOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTEwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRHN0TWVtNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6MzcuOTA1NDkxMjQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzQyNTQxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE9wTWVtNjQgaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBPcE1lbTY0YCBpcyBiZWluZyBtYW5hZ2VkIGluIHRoZSB4ODYgS1ZNIGVtdWxhdGlvbiBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbWVtb3J5LXJlbGF0ZWQgZW11bGF0aW9uIG9wZXJhdGlvbnMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEtWTS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgT3BNZW02NGAgaXMgZGVmaW5lZCwgdXNlZCwgb3IgaGFuZGxlZC4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHdpbGwgYmUgcGFydCBvZiB0aGUgb3Bjb2RlIGRpc3BhdGNoaW5nIG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGxvZ2ljIHdpdGhpbiB0aGF0IGZpbGUuIEnigJlsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbiBjYWxscywgbWFjcm9zLCBvciBzd2l0Y2ggc3RhdGVtZW50cyB0aGF0IHNwZWNpZmljYWxseSByZWZlcmVuY2UgYE9wTWVtNjRgLiBJIGFudGljaXBhdGUgdGhhdCBJJ2xsIGZpbmQgY29kZSByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBtZW1vcnkgYWNjZXNzIGVtdWxhdGlvbiwgcG9zc2libHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ3Vlc3QncyBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBvciBNTVUgZW11bGF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIDY0LWJpdCBtZW1vcnkgYWNjZXNzZXMsIHRha2luZyBpbnRvIGFjY291bnQgcG90ZW50aWFsIGFkZHJlc3NpbmcgbW9kZSBkaWZmZXJlbmNlcyBhbmQgbWVtb3J5IGF0dHJpYnV0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBlbXVsYXRpb24gcm91dGluZXMgaXMgY3JpdGljYWwuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgbGFyZ2VyIGVtdWxhdGlvbiBmcmFtZXdvcms7IG15IG5leHQgc3RlcCBpcyB1bmRlcnN0YW5kaW5nIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDEzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NDAuMjc5NzQ3OTExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0NzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPcE1lbTY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQ1LSNkZWZpbmUgT3BESSAgICAgICAgICAgICAgIDV1bGwgIC8qIEVTOkRJL0VESS9SREkgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2OiNkZWZpbmUgT3BNZW02NCAgICAgICAgICAgIDZ1bGwgIC8qIE1lbW9yeSwgNjQtYml0ICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Ny0jZGVmaW5lIE9wSW1tVUJ5dGUgICAgICAgICA3dWxsICAvKiBaZXJvLWV4dGVuZGVkIDgtYml0IGltbWVkaWF0ZSAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05MS0jZGVmaW5lIERzdERJICAgICAgIChPcERJIFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6OTI6I2RlZmluZSBEc3RNZW02NCAgICAoT3BNZW02NCBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkzLSNkZWZpbmUgRHN0TWVtMTYgICAgKE9wTWVtMTYgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NjQ1LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDY0NjpcXHRjYXNlIE9wTWVtNjQ6XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NjQ3LVxcdFxcdGN0eHQtXFx1MDAzZW1lbW9wLmJ5dGVzID0gKGN0eHQtXFx1MDAzZW9wX2J5dGVzID09IDgpID8gMTYgOiA4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo0MC4zMjc3MDA5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU0MzE3NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENNUFhDSEcxNkJgIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSdyZSBoYW5kbGluZyBgQ01QWENIRzE2QmAgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHNpdHVhdGlvbiB3aGVyZSB3ZSBoYXZlIHRoZSBSRVguVyBwcmVmaXgsIHdoaWNoIHNpZ25pZmllcyA2NC1iaXQgb3BlcmFuZCBzaXplLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlIG1lbW9yeSBvcGVyYXRpb24gc2l6ZSwgYGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXNgLCB3aGljaCBnZXRzIHNldCBiYXNlZCBvbiBgY3R4dC1cdTAwM2VvcF9ieXRlc2AuIFdoZW4gYG9wX2J5dGVzYCBpcyA4IGR1ZSB0byB0aGUgUkVYLlcgcHJlZml4LCBgbWVtb3AuYnl0ZXNgIGJlY29tZXMgMTYsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgMTYtYnl0ZSBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaGFwcGVuaW5nIGNvcnJlY3RseS5cblxuR2l2ZW4gdGhhdCBgeDg2X2VtdWxhdGVfaW5zbmAgZW11bGF0ZXMgYENNUFhDSEcxNkJgIOKAkyB3aGljaCBpcyBvcGNvZGUgYDBGIEM3IC8xYCB3aXRoIFJFWC5XIOKAkyBJIHdhbnQgdG8gcGlucG9pbnQgdGhlIGxvZ2ljIHRoYXQncyBkb2luZyB0aGUgYWN0dWFsIGVtdWxhdGlvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24gdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgZXhwZWN0IHRoZSBlbXVsYXRpb24gdG8gYmUgYXJvdW5kIGxpbmVzIDU0MTAtNTQ0MCwgc28gbGV0J3MgY2hlY2sgdGhlcmUgdG8gc2VlIGhvdyB0aGUgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCB2ZXJpZnlpbmcgdGhhdCB0aGUgYXBwcm9wcmlhdGUgMTYtYnl0ZSBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkIHdoZW4gUkVYLlcgaXMgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NDMuNTgyMDQxNDMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTA6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbjU0MTE6XFx0XFx0fVxcbjU0MTI6XFx0XFxuNTQxMzpcXHRcXHRpZiAoKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBEc3RNYXNrKSA9PSBJbXBsaWNpdE9wcylcXG41NDE0OlxcdFxcdFxcdGdvdG8gc3BlY2lhbF9pbnNuO1xcbjU0MTU6XFx0XFxuNTQxNjpcXHRcXG41NDE3OlxcdFxcdGlmICgoY3R4dC1cXHUwMDNlZHN0LnR5cGUgPT0gT1BfTUVNKSBcXHUwMDI2XFx1MDAyNiAhKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBNb3YpKSB7XFxuNTQxODpcXHRcXHRcXHQvKiBvcHRpbWlzYXRpb24gLSBhdm9pZCBzbG93IGVtdWxhdGVkIHJlYWQgaWYgTW92ICovXFxuNTQxOTpcXHRcXHRcXHRyYyA9IHNlZ21lbnRlZF9yZWFkKGN0eHQsIGN0eHQtXFx1MDAzZWRzdC5hZGRyLm1lbSxcXG41NDIwOlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjdHh0LVxcdTAwM2Vkc3QudmFsLCBjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMpO1xcbjU0MjE6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpIHtcXG41NDIyOlxcdFxcdFxcdFxcdGlmICghKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBOb1dyaXRlKSBcXHUwMDI2XFx1MDAyNlxcbjU0MjM6XFx0XFx0XFx0XFx0ICAgIHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUIFxcdTAwMjZcXHUwMDI2XFxuNTQyNDpcXHRcXHRcXHRcXHQgICAgY3R4dC1cXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9PSBQRl9WRUNUT1IpXFxuNTQyNTpcXHRcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VleGNlcHRpb24uZXJyb3JfY29kZSB8PSBQRkVSUl9XUklURV9NQVNLO1xcbjU0MjY6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbjU0Mjc6XFx0XFx0XFx0fVxcbjU0Mjg6XFx0XFx0fVxcbjU0Mjk6XFx0XFx0LyogQ29weSBmdWxsIDY0LzEyOC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXFxuNTQzMDpcXHRcXG41NDMxOlxcdCNpZmRlZiBDT05GSUdfWDg2XzY0XFxuNTQzMjpcXHRcXHRpZiAoY3R4dC1cXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxcbjU0MzM6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC1cXHUwMDNlZHN0LnZhbDEyODtcXG41NDM0OlxcdFxcdGVsc2VcXG41NDM1OlxcdCNlbmRpZlxcbjU0MzY6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVxcdTAwM2Vkc3QudmFsNjQ7XFxuNTQzNzpcXHRcXG41NDM4OlxcdHNwZWNpYWxfaW5zbjpcXG41NDM5OlxcdFxcbjU0NDA6XFx0XFx0aWYgKHVubGlrZWx5KGNoZWNrX2ludGVyY2VwdHMpIFxcdTAwMjZcXHUwMDI2IChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgSW50ZXJjZXB0KSkge1xcbjU0NDE6XFx0XFx0XFx0cmMgPSBlbXVsYXRvcl9jaGVja19pbnRlcmNlcHQoY3R4dCwgY3R4dC1cXHUwMDNlaW50ZXJjZXB0LFxcbjU0NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgWDg2X0lDUFRfUE9TVF9NRU1BQ0NFU1MpO1xcbjU0NDM6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuNTQ0NDpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQ0NTpcXHRcXHR9XFxuNTQ0NjpcXHRcXG41NDQ3OlxcdFxcdGlmIChjdHh0LVxcdTAwM2VyZXBfcHJlZml4IFxcdTAwMjZcXHUwMDI2IChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgU3RyaW5nKSlcXG41NDQ4OlxcdFxcdFxcdGN0eHQtXFx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1JGO1xcbjU0NDk6XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo0My41ODIyODExNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1NTY4MzEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gSW5zdHJ1Y3Rpb24gRW11bGF0aW9uIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBLVk0ncyBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHdoaWNoIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgdG8gaXRzIG9wZXJhdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgcGFydCB0aGF0IGtpY2tzIGluIHZpYSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9SVU5gIHdoZW4gdGhlIGd1ZXN0IGVuY291bnRlcnMgTU1JTywgdW5oYW5kbGVkIFZNIGV4aXRzLCBvciBpbnZhbGlkIHN0YXRlcy4gU3l6a2FsbGVyLCBhIHRvb2wgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aCwgYWxyZWFkeSBoZWF2aWx5IGxldmVyYWdlcyB0aGVzZSBpb2N0bHMgdG8gdGVzdCBLVk0sIGNyZWF0aW5nIFZNcywgbWFuaXB1bGF0aW5nIHZDUFVzLCBzZXR0aW5nIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMg4oCTIGVmZmVjdGl2ZWx5IHB1dHRpbmcgdGhlIGVtdWxhdG9yIHRocm91Z2ggaXRzIHBhY2VzLiBJdCBmcmVxdWVudGx5IGVtcGxveXMgaW9jdGxzIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsKEtWTV9SVU4pYCBmb3IgdGhpcyBwdXJwb3NlLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBpcyB0aGUgc3BlY2lmaWMgY29kZSBpbiBgZW1fY21weGNoZzhiYCBhbmQgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIHJlYWNoYWJsZSBhbmQgZnV6emFibGU/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcyEgV2Uga25vdyB0aGlzIGJlY2F1c2UgU3l6a2FsbGVyIGFscmVhZHkgaGl0cyB0aGlzIGFyZWEgdGhyb3VnaCBpdHMgZXh0ZW5zaXZlIEtWTSBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIHByZXNlbmNlIG9mIHRoZSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24sIHNwZWNpZmljYWxseSBgV0FSTl9PTl9PTkNFKDggKyAhIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykgKiA4ICE9IGN0eHQtXHUwMDNlZHN0LmJ5dGVzKWAgaW4gYGVtX2NtcHhjaGc4YmAsIGlzIGEgdmVyeSBwb3NpdGl2ZSBzaWduLiBBc3NlcnRpb25zIGFyZSBleGNlbGxlbnQgdGFyZ2V0cy4gQWxzbywgdGhlIGFkZGVkIGlubGluZSBhc3NlbWJseSBmb3IgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGluIGB1YWNjZXNzLmhgIGFuZCBpdHMgdXNlIGluIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBzdHJlbmd0aGVucyB0aGUgY2FzZS4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgaW5kaWNhdGVzIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBjb3JlIHVhY2Nlc3MgZnVuY3Rpb25hbGl0eS5cblxuSXMgdGhpcyBXb3J0aEZ1enppbmc/IEFic29sdXRlbHkhIEl0IGNoZWNrcyBhbGwgdGhlIGJveGVzOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbToqKiBLVk0gaXRzZWxmIGFuZCB0aGUgeDg2IGluc3RydWN0aW9uIGVtdWxhdG9yLiBBbHNvLCB0aGUgdWFjY2VzcyBhdG9taWMgaGVscGVyIG9uIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBpZWNlLlxuKiAgICoqTG9naWMgTW9kaWZpY2F0aW9uOioqIEl0J3Mgbm90IGp1c3QgYSByZWZhY3RvcmluZzsgaXQncyBhY3RpdmVseSBtb2RpZnlpbmcgdGhlIGxvZ2ljLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIDEyOC1iaXQgYGNtcHhjaGdgIGluc3RydWN0aW9uIChgY21weGNoZzE2YmApLCBhbmQgaW50cm9kdWNpbmcgaW5saW5lIGFzc2VtYmx5IHRvIGB1YWNjZXNzYC4gQW5kIG9mIGNvdXJzZSB0aGUgYWRkZWQgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGluIGBlbV9jbXB4Y2hnOGJgIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IGVtdWxhdGluZyBndWVzdCBpbnN0cnVjdGlvbnMuXG5cbkNvbmZpZ3VyYXRpb24gd2lzZSwgd2UncmUgbG9va2luZyBhdCBLVk0sIHNwZWNpZmljYWxseSBgQ09ORklHX0tWTWAgYmVpbmcgdGhlIGtleSBjb25maWcgaXRlbS4gV2UgbWlnaHQgbmVlZCB0byBsb29rIGF0IGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCwgYnV0IGBDT05GSUdfS1ZNYCBpcyB0aGUgbWFpbiBvbmUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjQ4LjczNzk2NzAzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NjMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NDguNzg0NDM0NjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTkxODQ5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0geDg2IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgZ2V0dGluZyBjb21waWxlZCBpbnRvIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGlzIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBvYmplY3QgZmlsZXMgYW5kIGhvdyB0aGVpciBpbmNsdXNpb24gaXMgZ292ZXJuZWQgYnkgdmFyaW91cyBLY29uZmlnIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGJha2VkIGluLCBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBldmVuIGV4Y2x1ZGVkIGJhc2VkIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCB3aGVuIHRyb3VibGVzaG9vdGluZyBzcGVjaWZpYyBLVk0gaXNzdWVzIG9yLCBtb3JlIGdlbmVyYWxseSwgaWYgSSB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gdGhlIEtWTSB4ODYgY29kZSBvciB0YWlsb3IgYSBidWlsZCBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgZ29hbHMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBNYWtlZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo1MC41ODM2MjI2NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjY2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cXG4gICA0OlxcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgKz0gLVdlcnJvclxcbiAgIDU6XFx0XFxuICAgNjpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgNzpcXHRcXG4gICA4OlxcdGt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRrdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuICAxMjpcXHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuICAxMzpcXHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG4gIDE0OlxcdGt2bS0kKENPTkZJR19LVk1fWEVOKVxcdCs9IHhlbi5vXFxuICAxNTpcXHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4gIDE5OlxcdFxcbiAgMjA6XFx0a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbiAgMjE6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMjI6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbiAgMjU6XFx0XFxuICAyNjpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbiAgMjc6XFx0a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRpZmRlZiBDT05GSUdfSFlQRVJWXFxuICAzMDpcXHRrdm0teVxcdFxcdFxcdCs9IGt2bV9vbmh5cGVydi5vXFxuICAzMTpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG4gIDMyOlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm1fb25oeXBlcnYub1xcbiAgMzM6XFx0ZW5kaWZcXG4gIDM0OlxcdFxcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9YODYpXFx0Kz0ga3ZtLm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19LVk1fQU1EKVxcdCs9IGt2bS1hbWQub1xcbiAgMzg6XFx0XFxuICAzOTpcXHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbiAgNDA6XFx0JChvYmopL3N2bS92bWVudGVyLm86ICQob2JqKS9rdm0tYXNtLW9mZnNldHMuaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo1MC41ODM2OTU5MzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxNzg1MzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQnVpbGQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHByb2Nlc3MgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBrdm0teSArPSB4ODYubyBlbXVsYXRlLm8gLi4uYCBpcyBnb2luZyB0byBnZXQgYnVpbHQgaWYgZWl0aGVyIGBDT05GSUdfS1ZNX1g4NmAgb3IganVzdCBwbGFpbiBgQ09ORklHX0tWTWAgYXJlIGVuYWJsZWQsIGJ1dCBvbmx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYW4gSW50ZWwgb3IgQU1EIHZpcnR1YWwgbWFjaGluZSwgd2hpY2ggbWVhbnMgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFsc28gY29tZSBpbnRvIHBsYXkuIFNvLCByaWdodCBvZmYgdGhlIGJhdCwgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIGFyZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0LiBJJ2xsIGZvY3VzIG9uIHRoZSBzeW1ib2xzLiBJJ2xsIHNwZWNpZmljYWxseSBsb29rIGF0IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciwgbW9yZSBpbXBvcnRhbnRseSwgKmFyZW4ndCogc3RhdGljIHdpdGhpbiB0aGUgY2hhbmdlZCBmaWxlcy4gVGhhdCBnaXZlcyBtZSBhIGNsdWUgYWJvdXQgZXhwb3J0ZWQgZnVuY3Rpb25hbGl0eS5cblxuRmlyc3QgdXAsIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYC4gSSBzZWUgYHg4Nl9lbXVsYXRlX2luc25gIGlzIG5vbi1zdGF0aWMuIEdvb2QsIHRoYXQncyBleHBvcnRlZCBhbmQgdXNlZCBieSBLVk0uIEFuZCB0aGVyZSdzIGFsc28gYGVtX2NtcHhjaGc4YmAsIHdoaWNoIGlzIHN0YXRpYywgYnV0IGdldHMgY2FsbGVkIGZyb20gdGhlIGltcG9ydGFudCBgeDg2X2VtdWxhdGVfaW5zbmAgc28gaXQncyByZWxldmFudCB0byBob3cgdGhlIGVtdWxhdGlvbiB3b3Jrcy5cblxuTmV4dCwgYGFyY2gveDg2L2t2bS94ODYuY2AuIEhlcmUgSSBzZWUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGBlbXVsYXRlX29wcy5jbXB4Y2hnX2VtdWxhdGVkYCwgc28gaXQncyBjbGVhcmx5IGludm9sdmVkIGluIGhvdyBzb21ldGhpbmcgaXMgZW11bGF0ZWQuIFRoYXQncyBhIGtleSBsaW5lIG9mIGlucXVpcnkuIFRoZW4sIHRoZXJlJ3MgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBhbmQgbWF5YmUgYGt2bV9lbXVsYXRlX2luc3RydWN0aW9uYCBvciBzb21ldGhpbmcgc2ltaWxhciBhcyB0aGUgZW50cnkgcG9pbnRzIGluIGB4ODYuY2AuIEknbGwgbmVlZCB0byBjaGFzZSBkb3duIHRoZSBjYWxsZXJzIG9mIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBhbmQgdGhvc2UgeDg2IGVtdWxhdG9yIGVudHJ5cG9pbnRzIGluIGB4ODYuY2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NTUuMTAxNTUyNDk3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc5NTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ODZfZW11bGF0ZV9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ4NjM9aW50IHg4Nl9kZWNvZGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuLCBpbnQgZW11bGF0aW9uX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUxNDMtXFx0XFx0ICogVGhlc2UgYXJlIGNvcGllZCB1bmNvbmRpdGlvbmFsbHkgaGVyZSwgYW5kIGNoZWNrZWQgdW5jb25kaXRpb25hbGx5XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1MTQ0OlxcdFxcdCAqIGluIHg4Nl9lbXVsYXRlX2luc24uXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01MTQ1LVxcdFxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01MjY4PXZvaWQgaW5pdF9kZWNvZGVfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUyODQtXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1Mjg1OmludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01Mjg2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTU0MT12b2lkIGluaXRfZGVjb2RlX2NhY2hlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaDo1NDI6aW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cyk7XFxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtNTQzLWludCBlbXVsYXRvcl90YXNrX3N3aXRjaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02MzM1PWludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjQ3NS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjQ3NjpcXHRyID0geDg2X2VtdWxhdGVfaW5zbihjdHh0LCBpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NzctXFx0XFx0XFx0XFx0ICAgIShlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX05PX0RFQ09ERSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo1NS4xNDkzNTM3ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE4ODAwODcwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBDYWxsZXJzIGZvciBUaG9yb3VnaG5lc3MqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gYWJvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBhbGwgdGhlIHBsYWNlcyBpdCdzIGNhbGxlZCB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vYCBkaXJlY3RvcnkuIEV2ZW4gdGhvdWdoIEkgaGF2ZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBpdCdzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcg4oCTIGVzcGVjaWFsbHkgaW4gdGhpcyBjcml0aWNhbCBhcmVhIOKAkyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gVGhpcyBraW5kIG9mIG1ldGljdWxvdXNuZXNzIGlzIGVzc2VudGlhbDsgYSBzaW1wbGUgb3ZlcnNpZ2h0IGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MgZG93biB0aGUgbGluZS4gSXTigJlzIGFib3V0IGJlaW5nIHByZWNpc2UgYW5kIGxlYXZpbmcgbm8gc3RvbmUgdW50dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDE6NTcuMDI5NDQzNjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjE0NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtcHhjaGdfZW11bGF0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MTM0ND1zdGF0aWMgaW50IHNlZ21lbnRlZF9jbXB4Y2hnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzU0LVxcdFxcdHJldHVybiByYztcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjEzNTU6XFx0cmV0dXJuIGN0eHQtXFx1MDAzZW9wcy1cXHUwMDNlY21weGNoZ19lbXVsYXRlZChjdHh0LCBsaW5lYXIsIG9yaWdfZGF0YSwgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTEzNTYtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSwgXFx1MDAyNmN0eHQtXFx1MDAzZWV4Y2VwdGlvbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTE1MTc9c3RhdGljIGludCBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzEyLVxcdFxcdHNlZ19kZXNjLnR5cGUgfD0gMjsgLyogYnVzeSAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTcxMzpcXHRcXHRyZXQgPSBjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZWNtcHhjaGdfZW11bGF0ZWQoY3R4dCwgZGVzY19hZGRyLCBcXHUwMDI2b2xkX2Rlc2MsIFxcdTAwMjZzZWdfZGVzYyxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3MTQtXFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc2VnX2Rlc2MpLCBcXHUwMDI2Y3R4dC1cXHUwMDNlZXhjZXB0aW9uKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTEwOT1zdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE4MS1cXHQvKlxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oOjE4MjpcXHQgKiBjbXB4Y2hnX2VtdWxhdGVkOiBFbXVsYXRlIGFuIGF0b21pYyAoTE9DS2VkKSBDTVBYQ0hHIG9wZXJhdGlvbiBvbiBhblxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE4My1cXHQgKiAgICAgICAgICAgICAgICAgICBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLlxcbi0tXFxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMTg4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oOjE4OTpcXHRpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaC0xOTAtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjU5LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjYwOnN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI2MS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01ODE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjctXFx0LndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTgyODpcXHQuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjktXFx0LmludmxwZyAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pbnZscGcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAxOjU3LjEyMDY2MjcyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjY5NTk4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEVtdWxhdGlvbiBXcml0ZWJhY2sgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd3JpdGViYWNrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGVtdWxhdGlvbiBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBlbXVsYXRlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYHdyaXRlYmFja2AgdXNlcyBgc2VnbWVudGVkX2NtcHhjaGdgIGZvciB0aG9zZSBsb2NrZWQgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcgY2hvaWNlIVwiIEkga25vdyB0aGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQncyBoZWFkIG92ZXIgdG8gdGhlIHg4Ni1zcGVjaWZpYyBwYXJ0LCBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AsIGFuZCBjb25maXJtIHRoaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGF0b21pY2l0eSBndWFyYW50ZWVzIHRoZXkgYXJlIHVzaW5nIGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDE6NTguNzkwMjY1NTE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODkwMzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWdtZW50ZWRfY21weGNoZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xMzI5PXN0YXRpYyBpbnQgc2VnbWVudGVkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzQzLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTM0NDpzdGF0aWMgaW50IHNlZ21lbnRlZF9jbXB4Y2hnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTM0NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBzZWdtZW50ZWRfYWRkcmVzcyBhZGRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xNzU1PXN0YXRpYyBpbnQgd3JpdGViYWNrKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qgb3BlcmFuZCAqb3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NjItXFx0XFx0aWYgKGN0eHQtXFx1MDAzZWxvY2tfcHJlZml4KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTc2MzpcXHRcXHRcXHRyZXR1cm4gc2VnbWVudGVkX2NtcHhjaGcoY3R4dCxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NjQtXFx0XFx0XFx0XFx0XFx0XFx0IG9wLVxcdTAwM2VhZGRyLm1lbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDE6NTguODY5MTc0NjMzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NDczNzY1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIENNUFhDSEcxNkIgRW11bGF0aW9uIC0gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBhdGNoLiBJJ20gZm9jdXNpbmcgb24gdGhlIENNUFhDSEcxNkIgaW1wbGVtZW50YXRpb24gd2l0aGluIEtWTSwgd2hpY2ggaXMgYSBrbm93biBhcmVhIGZvciBjb21wbGV4IGludGVyYWN0aW9ucy5cblxuRmlyc3QsIEkgbG9va2VkIGF0IHRoZSBgd3JpdGViYWNrYCBmdW5jdGlvbi4gVGhpcyBwb2ludHMgdG8gYHNlZ21lbnRlZF9jbXB4Y2hnYCBhbmQgdGhlbiBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIENNUFhDSEcgZW11bGF0aW9uIHBhdGguICBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgdWx0aW1hdGVseSBjYWxscyBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgd2hpY2ggdGhlbiBjYWxscyBgX190cnlfY21weGNoZ191c2VyYCAtXHUwMDNlIGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAgYW5kIGZpbmFsbHkgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gLCB3aGljaCBpcyB0aGUgaW5saW5lIGFzc2VtYmx5IHRoYXQgaW1wbGVtZW50cyBgY21weGNoZzE2YmAuICBUaGlzIGFsc28gc2hvd3MgdGhhdCBgY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7YCBnZXRzIHNldCBkdXJpbmcgdGhlIHByb2Nlc3Mgd2hlbiBgY3R4dC1cdTAwM2Vkc3QuYnl0ZXMgPT0gMTZgLlxuXG5NeSBrZXkgc3ltYm9scyBmb3IgYW5hbHlzaXMgYXJlIG5vdzogYGVtX2NtcHhjaGc4YmAsIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCwgYHg4Nl9lbXVsYXRlX2luc25gLCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYC4gYGVtX2NtcHhjaGc4YmAgaGFuZGxlcyBib3RoIGBjbXB4Y2hnOGJgIGFuZCBgY21weGNoZzE2YmAuICBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgaXMgZXhwbGljaXRseSBmb3IgZW11bGF0ZWQgQ01QWENIRyBvcGVyYXRpb25zLiBgeDg2X2VtdWxhdGVfaW5zbmAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIHRoZSBnZW5lcmFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBLVk0gaW5zdHJ1Y3Rpb24gZW11bGF0b3IuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQuIEkgcXVpY2tseSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgLiAgSSBhbHNvIGNoZWNrZWQgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAgdG8gc2VlIGhvdyBpdCdzIHVzZWQuIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCByZXF1aXJlcyBgWDg2X0ZFQVRVUkVfQ1gxNmAsIGFuZCBpdCdzIGdhdGVkIGJ5IGBDT05GSUdfWDg2XzY0YC4gIFRoZSB0YXJnZXQgaXMgQU1ENjQuXG5cbkJhc2VkIG9uIHRoaXMsIEkndmUgY29uZmlybWVkIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIENNUFhDSEcxNkIuIEl0IGludHJvZHVjZXMgbmV3IGlubGluZSBhc3NlbWJseSwgYWRkcyBhc3NlcnRpb25zIG9uIHg4Nl82NCwgYW5kIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZXhpc3RpbmcgZW11bGF0aW9uIHJvdXRpbmVzLiBUaGlzIG1ha2VzIGl0IHdvcnRoIGZ1enppbmcgYXMgdGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgZW11bGF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjE3LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjowNC44MTY1NTQwNDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1MDM5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1fY21weGNoZzhiXCIsXG4gICAgXCJlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkXCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnNuXCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtX2NtcHhjaGc4YlwiLFxuICAgIFwiZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zblwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciAxMjgtYml0IENNUFhDSEcxNkIgZW11bGF0aW9uIHRvIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBpbXBsZW1lbnRzIGEgbmV3IDEyOC1iaXQgdXNlciBjbXB4Y2hnIGlubGluZSBhc3NlbWJseSBwcmltaXRpdmUgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20pIG9uIHg4Nl82NC4gSXQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24gaW4gZW1fY21weGNoZzhiIGFuZCBtb2RpZmllcyBvcGVyYW5kIGhhbmRsaW5nIGluIHg4Nl9lbXVsYXRlX2luc24gYW5kIGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIHZpYSBzdGFuZGFyZCBLVk0gZ3Vlc3QgZW11bGF0aW9uIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjA0LjkzNzA2NDkwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0NDIxNDg1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjowNC45Mzc1MTg2NDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODQ0MTY4NzY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxcbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxcbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjllNzQ4YTY4OTAyNzExNDllMjExYTIwMjEwNTAwNmUxZGVlNzFmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6NTk6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDNhMGRkM2MyYjIzM2UuLjk0ODkzN2EyNGNjNTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuQEAgLTQwNyw2ICs0MDcsMjcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVx0XHRcdFx0XHRcdFxcXG4gXHRcdCpfb2xkID0gX19vbGQ7XHRcdFx0XHRcdFx0XFxcbiBcdGxpa2VseShzdWNjZXNzKTtcdFx0XHRcdFx0fSlcbisjZWxzZSAvLyAhQ09ORklHX1g4Nl8zMlxuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbitcdGJvb2wgc3VjY2VzcztcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1x0XHRcXFxuK1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4rXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFx1MDAzZVx1MDAzZSA2NCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTtcdFx0XHRcdFxcXG4rXHRhc21fZ290b19vdXRwdXQoXCJcXG5cIlx0XHRcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCIxOiBcIiBMT0NLX1BSRUZJWCBcImNtcHhjaGcxNmIgJVtwdHJdXFxuXCJcdFx0XFxcbitcdFx0ICAgICBfQVNNX0VYVEFCTEVfVUEoMWIsICVsW2xhYmVsXSlcdFx0XHRcXFxuK1x0XHQgICAgIDogXCI9QGNjelwiIChzdWNjZXNzKSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcIithXCIgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCIrZFwiIChfX29sZF9oaWdoKSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBbcHRyXSBcIittXCIgKCpfcHRyKVx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFwiYlwiICgodTY0KV9fbmV3KSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcImNcIiAoKHU2NCkoKHUxMjgpX19uZXcgXHUwMDNlXHUwMDNlIDY0KSlcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJtZW1vcnlcIlx0XHRcdFx0XHRcdFxcXG4rXHRcdCAgICAgOiBsYWJlbCk7XHRcdFx0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseSghc3VjY2VzcykpXHRcdFx0XHRcdFx0XFxcbitcdFx0Kl9vbGQgPSAoKHUxMjgpX19vbGRfaGlnaCBcdTAwM2NcdTAwM2MgNjQpIHwgX19vbGRfbG93O1x0XHRcXFxuK1x0bGlrZWx5KHN1Y2Nlc3MpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbkBAIC00NjMsNiArNDg0LDMyIEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpXHRcdFx0XHRcdFxcXG4gXHRcdCpfb2xkID0gX19vbGQ7XHRcdFx0XHRcdFx0XFxcbiBcdGxpa2VseShfX3Jlc3VsdCk7XHRcdFx0XHRcdH0pXG4rI2Vsc2UgLy8hQ09ORklHX1g4Nl8zMlxuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbitcdGludCBfX3Jlc3VsdDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1x0XHRcXFxuK1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4rXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFx1MDAzZVx1MDAzZSA2NCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTtcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUoXCJcXG5cIlx0XHRcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCIxOiBcIiBMT0NLX1BSRUZJWCBcImNtcHhjaGcxNmIgJVtwdHJdXFxuXCJcdFx0XFxcbitcdFx0ICAgICBcIm1vdiAkMCwgJVtyZXN1bHRdXFxuXFx0XCJcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCJzZXR6ICViW3Jlc3VsdF1cXG5cIlx0XHRcdFx0XFxcbitcdFx0ICAgICBcIjI6XFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIF9BU01fRVhUQUJMRV9UWVBFX1JFRygxYiwgMmIsIEVYX1RZUEVfRUZBVUxUX1JFRyxcdFxcXG4rXHRcdFx0XHRcdCAgICVbcmVzdWx0XSlcdFx0XHRcXFxuK1x0XHQgICAgIDogW3Jlc3VsdF0gXCI9cVwiIChfX3Jlc3VsdCksXHRcdFx0XFxcbitcdFx0ICAgICAgIFwiK2FcIiAoX19vbGRfbG93KSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcIitkXCIgKF9fb2xkX2hpZ2gpLFx0XHRcdFx0XFxcbitcdFx0ICAgICAgIFtwdHJdIFwiK21cIiAoKl9wdHIpXHRcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJiXCIgKCh1NjQpX19uZXcpLFx0XHRcdFx0XFxcbitcdFx0ICAgICAgIFwiY1wiICgodTY0KSgodTEyOClfX25ldyBcdTAwM2VcdTAwM2UgNjQpKVx0XHRcdFxcXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1x0XHRcdFx0XHRcXFxuK1x0aWYgKHVubGlrZWx5KF9fcmVzdWx0IFx1MDAzYyAwKSlcdFx0XHRcdFx0XFxcbitcdFx0Z290byBsYWJlbDtcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpXHRcdFx0XHRcdFxcXG4rXHRcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXHUwMDNjXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcdFx0XFxcbitcdGxpa2VseShfX3Jlc3VsdCk7XHRcdFx0XHRcdH0pXG4gI2VuZGlmIC8vIENPTkZJR19YODZfMzJcbiAjZW5kaWYgLy8gQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxuIFxuQEAgLTU1MSwxMSArNTk4LDE4IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXG4gZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XG4gXG4tI2lmbmRlZiBDT05GSUdfWDg2XzMyXG4rI2lmZGVmIENPTkZJR19YODZfMzJcbisvKlxuKyAqIEFsd2F5cyBmYWlsIG9uIDMyIGJpdCBhcmNoIG9yIDY0IGFyY2ggd2l0aG91dCAxMjggYml0IGNtcHhjaGcgc3VwcG9ydFxuKyAqL1xuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpICh7IEJVSUxEX0JVR19PTigxKTsgMDsgfSlcbisjZWxzZVxuICNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0XHRcXFxuIFx0X190cnlfY21weGNoZ191c2VyX2FzbShcInFcIiwgXCJyXCIsIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKVxuK1xuICNlbmRpZlxuIFxuK1xuIC8qXG4gICogRm9yY2UgdGhlIHBvaW50ZXIgdG8gdVx1MDAzY3NpemVcdTAwM2UgdG8gbWF0Y2ggdGhlIHNpemUgZXhwZWN0ZWQgYnkgdGhlIGFzbSBoZWxwZXIuXG4gICogY2xhbmcvTExWTSBjb21waWxlcyBhbGwgY2FzZXMgYW5kIG9ubHkgZGlzY2FyZHMgdGhlIHVudXNlZCBwYXRocyBhZnRlclxuQEAgLTU4MCw2ICs2MzQsMTQgQEAgZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XG4gXHRjYXNlIDg6XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbSgoX19mb3JjZSB1NjQgKikoX3B0ciksIChfb2xkcCksXFxcbiBcdFx0XHRcdFx0XHQgKF9udmFsKSwgX2xhYmVsKTtcdFx0XFxcbiBcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRjYXNlIDE2Olx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NYMTYpKVx0XHRcdFx0XFxcbitcdFx0XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oXHRcdFx0XFxcbitcdFx0XHRcdFx0KF9fZm9yY2UgdTEyOCAqKShfcHRyKSxcdFx0XHRcXFxuK1x0XHRcdFx0XHQoX29sZHApLCAoX252YWwpLCBfbGFiZWwpO1x0XHRcXFxuK1x0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0X19yZXQgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZGVmYXVsdDogX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUoKTtcdFx0XHRcdFxcXG4gXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdH0pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcbmluZGV4IGMxYjIxMjgyMTg3ZjMuLjUzNTg0MjMzNmQ3NjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5AQCAtMjE4NCwyNCArMjE4NCwzNiBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuKyNkZWZpbmUgZW1fY21weGNoZzhiXzE2YihfX2MsIHJiaXRzLCBtYml0cylcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0dSMjbWJpdHMgb2xkID0gX19jLVx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRpZiAoKCh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fFx0XHRcXFxuK1x0ICAgICgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XHRcdFxcXG4rXHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCk7XHRcdFx0XFxcbitcdFx0KnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SRFgpID0gKHUjI3JiaXRzKSAob2xkIFx1MDAzZVx1MDAzZSByYml0cyk7XHRcdFx0XFxcbitcdFx0X19jLVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbitcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRfX2MtXHUwMDNlZHN0LnZhbCMjbWJpdHMgPSAoKHUjI21iaXRzKXJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JDWCkgXHUwMDNjXHUwMDNjIHJiaXRzKSB8XHRcXFxuK1x0XHRcdFx0XHQodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JCWCk7XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0X19jLVx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbitcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbit9IHdoaWxlICgwKVxuK1xuIHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuIHtcbi1cdHU2NCBvbGQgPSBjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDY0O1xuLVxuLVx0aWYgKGN0eHQtXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxuK1x0aWYgKFdBUk5fT05fT05DRSg4ICsgISEoY3R4dC1cdTAwM2VyZXhfYml0cyBcdTAwMjYgUkVYX1cpICogOCAhPSBjdHh0LVx1MDAzZWRzdC5ieXRlcykpXG4gXHRcdHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTtcbiBcbi1cdGlmICgoKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8XG4tXHQgICAgKCh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDMyKSAhPSAodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkRYKSkpIHtcbi1cdFx0KnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkFYKSA9ICh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDApO1xuLVx0XHQqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0XHRjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1xuLVx0fSBlbHNlIHtcbi1cdFx0Y3R4dC1cdTAwM2Vkc3QudmFsNjQgPSAoKHU2NClyZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkNYKSBcdTAwM2NcdTAwM2MgMzIpIHxcbi1cdFx0XHQodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkJYKTtcbi1cbi1cdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcbi1cdH1cbitcdGlmICghKGN0eHQtXHUwMDNlcmV4X2JpdHMgXHUwMDI2IFJFWF9XKSlcbitcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRlbHNlXG4rXHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XG4rI2VuZGlmXG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbiB9XG4gXG5AQCAtNTQxNCw4ICs1NDI2LDE0IEBAIGludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXG4gXHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4gXHR9XG4tXHQvKiBDb3B5IGZ1bGwgNjQtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqL1xuLVx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NCA9IGN0eHQtXHUwMDNlZHN0LnZhbDY0O1xuK1x0LyogQ29weSBmdWxsIDY0LzEyOC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXG4rXG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbitcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7XG4rXHRlbHNlXG4rI2VuZGlmXG4rXHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbiBcbiBzcGVjaWFsX2luc246XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuaW5kZXggM2UzNzVhZjE1YzAzNS4uODk5MTE4NDUyMzNkYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuQEAgLTI2Myw2ICsyNjMsOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7XG4gXHR1bmlvbiB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgb3JpZ192YWw7XG4gXHRcdHU2NCBvcmlnX3ZhbDY0O1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRcdHUxMjggb3JpZ192YWwxMjg7XG4rI2VuZGlmXG4gXHR9O1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nICpyZWc7XG5AQCAtMjc2LDYgKzI3OSw5IEBAIHN0cnVjdCBvcGVyYW5kIHtcbiBcdHVuaW9uIHtcbiBcdFx0dW5zaWduZWQgbG9uZyB2YWw7XG4gXHRcdHU2NCB2YWw2NDtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuK1x0XHR1MTI4IHZhbDEyODtcbisjZW5kaWZcbiBcdFx0Y2hhciB2YWxwdHJbc2l6ZW9mKGF2eDI1Nl90KV07XG4gXHRcdHNzZTEyOF90IHZlY192YWw7XG4gXHRcdGF2eDI1Nl90IHZlY192YWwyO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uNjBiZTE2ZjA1ZDc5NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTI3MSw3ICs1MjcxLDcgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuIFx0aW50IHI7XG4gXG4gXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xuLVx0aWYgKGJ5dGVzIFx1MDAzZSA4IHx8IChieXRlcyBcdTAwMjYgKGJ5dGVzIC0gMSkpKVxuK1x0aWYgKGJ5dGVzIFx1MDAzZSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIHx8IChieXRlcyBcdTAwMjYgKGJ5dGVzIC0gMSkpKVxuIFx0XHRnb3RvIGVtdWxfd3JpdGU7XG4gXG4gXHRncGEgPSBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUodmNwdSwgYWRkciwgTlVMTCk7XG5AQCAtNTMxMSw2ICs1MzExLDExIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdGNhc2UgODpcbiBcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTtcbiBcdFx0YnJlYWs7XG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGNhc2UgMTY6XG4rXHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbiBcdGRlZmF1bHQ6XG4gXHRcdEJVRygpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MDQuOTM3NTE5Njc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNzcxMjkxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBleHBlcnQgZXllIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBuZXcgYGNtcHhjaGcxNmJgIGltcGxlbWVudGF0aW9uIGZvciB4ODZfNjQsIGFzIGl0J3MgZGVhbGluZyB3aXRoIDEyOC1iaXQgYXRvbWljIG9wZXJhdGlvbnMsIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi5cblxuRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAsIHdoaWNoIGlzIGNydWNpYWwuIEl0J3MgdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIHVzaW5nIGBjbXB4Y2hnMTZiYCBmb3IgdXNlci1zcGFjZSBtZW1vcnkgb3BlcmF0aW9ucy4gVGhlIGB0cnlfY21weGNoZ191c2VyYCBleHRlbnNpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBoYW5kbGVzIHRoZSBgY2FzZSAxNjpgIHNjZW5hcmlvIGlmIHRoZSBDUFUgc3VwcG9ydHMgaXQuIFNvIGZhciwgc28gZ29vZCwgYnV0IEknbGwgbmVlZCB0byBsb29rIGRlZXBlci5cblxuVGhlIEtWTSBzaWRlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBDTVBYQ0hHMTZCYCBlbXVsYXRpb24gaXMgZXhwZWN0ZWQuIFRoZSBgZW1fY21weGNoZzhiXzE2YmAgbWFjcm8gc2VlbXMgdG8gdW5pZnkgdGhlIGhhbmRsaW5nIG9mIDgtIGFuZCAxNi1ieXRlIGNtcHhjaGcgb3BlcmF0aW9ucy4gVGhlIHVwZGF0ZSB0byBgZW1fY21weGNoZzhiYCB0byBjYWxsIGBlbV9jbXB4Y2hnOGJfMTZiYCB3aGVuIGBSRVhfV2AgaXMgc2V0IGlzIHRoZSBjcml0aWNhbCBwb2ludCBmb3IgZGV0ZWN0aW5nIGEgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkYXRhZmxvdy4gVGhlIGFkZGl0aW9uIG9mIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIChhcyBgdTEyOGApIHRvIGBzdHJ1Y3Qgb3BlcmFuZGAgaW4gYGt2bV9lbXVsYXRlLmhgIGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGltcGxpZXMgdGhlc2UgdmFsdWVzIGFyZSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCBwb3RlbnRpYWxseSByZWFkIGZyb20gbWVtb3J5LlxuXG5GaW5hbGx5LCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgSSBzZWUgdGhhdCBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgbm93IHN1cHBvcnRzIG9wZXJhbmRzIHVwIHRvIDE2IGJ5dGVzLiBUaGUgYWRkZWQgYGNhc2UgMTZgIGluIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCBoYW5kbGVzIHRoZSAxMjgtYml0IGNtcHhjaGcgZGlyZWN0bHksIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gaXNzdWUuXG5cbk5vdywgdGhlIGNydWNpYWwgc3RlcDogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmQgb3BlcmFuZCBmZXRjaGluZyBpbiBib3RoIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjb2RlIGluIHRob3NlIGFyZWFzIHRvIHNlZSB3aGVyZSB0aGVzZSBuZXcgMTI4LWJpdCB2YWx1ZXMgYXJlIGluaXRpYWxpemVkLCB1c2VkLCBhbmQsIGNydWNpYWxseSwgKnBvdGVudGlhbGx5KiB1bmluaXRpYWxpemVkLiBUaGlzIGlzIHdoZXJlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIG1pZ2h0IGJlIG5lY2Vzc2FyeSBkZXBlbmRpbmcgb24gd2hhdCBJIGRpc2NvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MTMuMTE0NjUyODE1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4MDcwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNjEtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI3LVxcdC53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4Mjg6XFx0LmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI5LVxcdC5pbnZscGcgICAgICAgICAgICAgID0gZW11bGF0b3JfaW52bHBnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoxMy4yMjc0NjQ4MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNTA0MTY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IGNtcHhjaGcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBgY21weGNoZ2AgZW11bGF0aW9uIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgbWVtb3J5LiBMZXQncyB6ZXJvIGluIG9uIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGFyb3VuZCBsaW5lIDUyNjA7IHRoYXQncyB3aGVyZSBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgc2hvdWxkIGJlLiBNeSBrZXkgcXVlc3Rpb246IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gbWFuYWdlIHRvIGVtdWxhdGUgdGhlIGF0b21pYyBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24gKnNhZmVseSogYW5kIGVmZmljaWVudGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSByZXNpZGluZyBpbiB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gdHJhY2sgaG93IG9wZXJhbmQgbWVtb3J5IGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBjb2RlLiBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGd1YXJhbnRlZXMsIGFuZCBhbnkgbmVjZXNzYXJ5IGNoZWNrcyB0byBlbnN1cmUgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMgYXMgZXhwZWN0ZWQgd2l0aG91dCBjYXVzaW5nIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWNjZXNzIG1ldGhvZHMsIGFueSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIHVzZXIgbWVtb3J5IGFjY2VzcywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZC4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgZWxlZ2FuY2UgKG9yIGxhY2sgdGhlcmVvZikgb2YgdGhlIHg4NiBgY21weGNoZ2AgZW11bGF0aW9uIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgYXJlYXMgd2hlcmUgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgY291bGQgYmUgaW50cm9kdWNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjE2LjE1MjUwOTAxMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbjUyNjE6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNTI2MjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKm9sZCxcXG41MjYzOlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqbmV3LFxcbjUyNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXFxuNTI2NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pXFxuNTI2NjpcXHR7XFxuNTI2NzpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7XFxuNTI2ODpcXHRcXHR1NjQgcGFnZV9saW5lX21hc2s7XFxuNTI2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG41MjcwOlxcdFxcdGdwYV90IGdwYTtcXG41MjcxOlxcdFxcdGludCByO1xcbjUyNzI6XFx0XFxuNTI3MzpcXHRcXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xcbjUyNzQ6XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXFx1MDAyNiAoYnl0ZXMgLSAxKSkpXFxuNTI3NTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI3NjpcXHRcXG41Mjc3OlxcdFxcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcXG41Mjc4OlxcdFxcbjUyNzk6XFx0XFx0aWYgKGdwYSA9PSBJTlZBTElEX0dQQSB8fFxcbjUyODA6XFx0XFx0ICAgIChncGEgXFx1MDAyNiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpXFxuNTI4MTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI4MjpcXHRcXG41MjgzOlxcdFxcdC8qXFxuNTI4NDpcXHRcXHQgKiBFbXVsYXRlIHRoZSBhdG9taWMgYXMgYSBzdHJhaWdodCB3cml0ZSB0byBhdm9pZCAjQUMgaWYgU0xEIGlzXFxuNTI4NTpcXHRcXHQgKiBlbmFibGVkIGluIHRoZSBob3N0IGFuZCB0aGUgYWNjZXNzIHNwbGl0cyBhIGNhY2hlIGxpbmUuXFxuNTI4NjpcXHRcXHQgKi9cXG41Mjg3OlxcdFxcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKVxcbjUyODg6XFx0XFx0XFx0cGFnZV9saW5lX21hc2sgPSB+KGNhY2hlX2xpbmVfc2l6ZSgpIC0gMSk7XFxuNTI4OTpcXHRcXHRlbHNlXFxuNTI5MDpcXHRcXHRcXHRwYWdlX2xpbmVfbWFzayA9IFBBR0VfTUFTSztcXG41MjkxOlxcdFxcbjUyOTI6XFx0XFx0aWYgKCgoZ3BhICsgYnl0ZXMgLSAxKSBcXHUwMDI2IHBhZ2VfbGluZV9tYXNrKSAhPSAoZ3BhIFxcdTAwMjYgcGFnZV9saW5lX21hc2spKVxcbjUyOTM6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTQ6XFx0XFxuNTI5NTpcXHRcXHRodmEgPSBrdm1fdmNwdV9nZm5fdG9faHZhKHZjcHUsIGdwYV90b19nZm4oZ3BhKSk7XFxuNTI5NjpcXHRcXHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxcbjUyOTc6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTg6XFx0XFxuNTI5OTpcXHRcXHRodmEgKz0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTtcXG41MzAwOlxcdFxcbjUzMDE6XFx0XFx0c3dpdGNoIChieXRlcykge1xcbjUzMDI6XFx0XFx0Y2FzZSAxOlxcbjUzMDM6XFx0XFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDQ6XFx0XFx0XFx0YnJlYWs7XFxuNTMwNTpcXHRcXHRjYXNlIDI6XFxuNTMwNjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDc6XFx0XFx0XFx0YnJlYWs7XFxuNTMwODpcXHRcXHRjYXNlIDQ6XFxuNTMwOTpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTA6XFx0XFx0XFx0YnJlYWs7XFxuNTMxMTpcXHRcXHRjYXNlIDg6XFxuNTMxMjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTM6XFx0XFx0XFx0YnJlYWs7XFxuNTMxNDpcXHQjaWZkZWYgQ09ORklHX1g4Nl82NFxcbjUzMTU6XFx0XFx0Y2FzZSAxNjpcXG41MzE2OlxcdFxcdFxcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTc6XFx0XFx0XFx0YnJlYWs7XFxuNTMxODpcXHQjZW5kaWZcXG41MzE5OlxcdFxcdGRlZmF1bHQ6XFxuNTMyMDpcXHRcXHRcXHRCVUcoKTtcXG41MzIxOlxcdFxcdH1cXG41MzIyOlxcdFxcbjUzMjM6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUzMjQ6XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoxNi4xNTMzNDAyMDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDIxMjI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgRW11bGF0b3IgQ29uY3VycmVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGJlaW5nIHVzZWQuIEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgYXRvbWljcywgYnV0IEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlYWxseSBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXJgIGZ1bmN0aW9uLiBUaGF0J3MgYSBjcml0aWNhbCBwaWVjZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgY29uY3VycmVudCBlbnZpcm9ubWVudCBsaWtlIGFuIGVtdWxhdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGxldmVyYWdpbmcgY29tcGFyZS1hbmQtc3dhcCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzIGFjY2Vzc2luZyBzaGFyZWQgZW11bGF0b3IgcmVzb3VyY2VzLiBJdCdzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgdGhhdCB0aGUgZXhlY3V0aW9uIGlzbid0IGNvcnJ1cHRlZCBieSByYWNlIGNvbmRpdGlvbnMuIEkgY2Fu4oCZdCBhZmZvcmQgdG8gbWFrZSBhc3N1bXB0aW9ucyBoZXJlLCBzbyBiZXR0ZXIgdG8gZG91YmxlLWNoZWNrIG5vdyByYXRoZXIgdGhhbiByaXNrIGEgc3VidGxlIGJ1ZyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MTguMjY3NTU1MDNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjUxMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1Ni1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI1NzojZGVmaW5lIGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodCwgcHRyLCBvbGQsIG5ldykgXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYy01MjU4LVxcdChfX3RyeV9jbXB4Y2hnX3VzZXIoKHQgX191c2VyICopKHB0ciksICh0ICopKG9sZCksICoodCAqKShuZXcpLCBlZmF1bHQgIyMgdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjE4LjMzNzIxMTE3OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTEyNTU4OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIHVzZXItc3BhY2UgY29tcGFyZS1hbmQtZXhjaGFuZ2UgZnVuY3Rpb25hbGl0eS4gTXkgaW50dWl0aW9uIHNheXMgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGNydWNpYWwgZm9yIGltcGxlbWVudGluZyBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgaW4gbXVsdGl0aHJlYWRlZCB1c2VyIGFwcGxpY2F0aW9ucy5cblxuVGhlcmVmb3JlLCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgaW5zcGVjdCBgdHJ5X2NtcHhjaGdfdXNlcmAgYW5kIGBfX3RyeV9jbXB4Y2hnX3VzZXJgIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBpbnRlcmZhY2Ugd2l0aCB0aGUgaGFyZHdhcmUncyBhdG9taWMgaW5zdHJ1Y3Rpb25zIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgcmVsYXRlZCB0byBtZW1vcnkgb3JkZXJpbmcsIGNhY2hlIGNvaGVyZW5jeSwgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhlIHVzZXIgY29udGV4dC4gVGhpcyBkZWVwZXIgZGl2ZSB3aWxsIGxpa2VseSByZXZlYWwgY3J1Y2lhbCBkZXRhaWxzIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MjEuNDQ5NzczMzk0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjAwNDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY21weGNoZ191c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9MzM0PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtMzcyLSNpZmRlZiBDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjM3MzojZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXFx0KHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzQtXFx0Ym9vbCBzdWNjZXNzO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzItI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjQzMzojZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXFx0KHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzQtXFx0aW50IF9fZXJyID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9NTkwPWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNTk4LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo1OTk6ZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwMC1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MDctI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MDg6XFx0X190cnlfY21weGNoZ191c2VyX2FzbShcXFwicVxcXCIsIFxcXCJyXFxcIiwgKF9wdHIpLCAoX29sZHApLCAoX252YWwpLCBfbGFiZWwpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwOS1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTctICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYxODojZGVmaW5lIHVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKSAoe1xcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjE5LVxcdGJvb2wgX19yZXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyMS1cXHRzd2l0Y2ggKHNpemVvZigqKF9wdHIpKSkge1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjIyOlxcdGNhc2UgMTpcXHRfX3JldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcImJcXFwiLCBcXFwicVxcXCIsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIChfX2ZvcmNlIHU4ICopKF9wdHIpLCAoX29sZHApLFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjUtXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MjY6XFx0Y2FzZSAyOlxcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcXFwid1xcXCIsIFxcXCJyXFxcIixcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgKF9fZm9yY2UgdTE2ICopKF9wdHIpLCAoX29sZHApLFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjktXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MzA6XFx0Y2FzZSA0OlxcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcXFwibFxcXCIsIFxcXCJyXFxcIixcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYzMS1cXHRcXHRcXHRcXHRcXHQgICAgICAgKF9fZm9yY2UgdTMyICopKF9wdHIpLCAoX29sZHApLFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDQtXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NDU6XFx0ZGVmYXVsdDogX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUoKTtcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY0Ni1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY0OS0vKiBcXFwiUmV0dXJuc1xcXCIgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUsIC1FRkFVTFQgaWYgdGhlIGFjY2VzcyBmYXVsdHMuICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MDojZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcihfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbClcXHQoe1xcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUxLVxcdGludCBfX3JldCA9IC1FRkFVTFQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTItXFx0X191YWNjZXNzX2JlZ2luX25vc3BlYygpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjUzOlxcdF9fcmV0ID0gIXVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKTtcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY1NC1fbGFiZWw6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoyMS41MjE3ODM2OTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExOTcyOTM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGVtX2NtcHhjaGc4YmAgSW1wbGVtZW50YXRpb24gaW4gS1ZNJ3MgWDg2IEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgYGVtX2NtcHhjaGc4YmAgaXMgaGFuZGxlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB0aGUgZGVjb2RpbmcgYW5kIGNhbGwgZmxvdy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBlbXVsYXRpb24gb2YgdGhlIENNUFhDSEc4QiAob3IgQ01QWENIRzE2QikgaW5zdHJ1Y3Rpb24gaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVycGxheSB3aXRoIHRoZSBndWVzdCdzIHJlZ2lzdGVycyBhbmQgbWVtb3J5LCBhbmQgSSdtIGVhZ2VyIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGlzc3VlcyBpbiB0aGUgZW11bGF0aW9uLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW5zdHJ1Y3Rpb24ncyBvcGVyYW5kIHNpemUsIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI0LjY0MTUxNTY3OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4OTY4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW1fY21weGNoZzhiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0yMTczPXN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIxODc6I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXFxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODgtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIwNS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMDY6c3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMS1cXHRpZiAoIShjdHh0LVxcdTAwM2VyZXhfYml0cyBcXHUwMDI2IFJFWF9XKSlcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTI6XFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMy0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxNC1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjE1OlxcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE2LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MjQuNzM0NDE3ODQ2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTA4NDQ1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0geDg2IEVtdWxhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBncm91cDlgIGhhbmRsZXIgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc3BlY2lmaWNhbGx5IHRoZSBlbXVsYXRpb24gb2YgdGhvc2UgbW9yZSBjb21wbGV4IHg4NiBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIHNldCBleHRlbnNpb24sIG9yIHBvdGVudGlhbGx5IGEgc29tZXdoYXQgdW51c3VhbCBpbnN0cnVjdGlvbiwgYmFzZWQgb24gdGhlIGBncm91cDlgIG5hbWluZyBjb252ZW50aW9uLiBHaXZlbiB0aGUgZmlsZSBsb2NhdGlvbiwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBkZWNvZGVkLCB0aGUgYXNzb2NpYXRlZCByZWdpc3RlcnMgdXBkYXRlZCwgYW5kIGFueSBuZWNlc3NhcnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGd1ZXN0J3MgbWVtb3J5LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBJIGFtIGFsc28gZGVhbGluZyB3aXRoIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlc2UgaW5zdHJ1Y3Rpb25zIGFuZCBob3cgdG8gc2ltdWxhdGUgdGhhdCBvbiBzb2Z0d2FyZS4gSSBrbm93IGl0J3MgZ29pbmcgdG8gYmUgYSBkZWVwIGRpdmUuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcywgdGhlIGNvbnRyb2wgZmxvdywgYW5kIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBqdW1wIG91dC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGVjaG5pcXVlcyB0aGUgb3JpZ2luYWwgYXV0aG9ycyB1c2VkIHRvIGhhbmRsZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI3LjU4NTI2NTM2NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTIwOlxcdFxcbjQxMjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xcbjQxMjI6XFx0XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuNDEyMzpcXHR9LCB7XFxuNDEyNDpcXHRcXHROLCBOLCBOLCBOLCBOLCBOLCBOLFxcbjQxMjU6XFx0XFx0R1AoMCwgXFx1MDAyNnBmeF8wZl9jN183KSxcXG40MTI2OlxcdH0gfTtcXG40MTI3OlxcdFxcbjQxMjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xcbjQxMjk6XFx0XFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXFxuNDEzMDpcXHRcXHRYNyhEKFVuZGVmaW5lZCkpLFxcbjQxMzE6XFx0fTtcXG40MTMyOlxcdFxcbjQxMzM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xcbjQxMzQ6XFx0XFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXFxuNDEzNTpcXHR9O1xcbjQxMzY6XFx0XFxuNDEzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xcbjQxMzg6XFx0XFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcXG40MTM5OlxcdFxcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoyNy41ODU3MjE1OTVaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxMzE5MDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyBPcGVyYW5kIERlY29kaW5nIGluIEtWTSdzIHg4NiBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgb3BlcmFuZCBkZWNvZGluZyBsb2dpYyBmb3IgYERzdE1lbTY0YCwgYERzdE1lbTE2YCwgYW5kIHJlbGF0ZWQgbWVtb3J5IGRlc3RpbmF0aW9uIG9wZXJhbmRzIHdpdGhpbiB0aGUgS1ZNIHg4NiBlbXVsYXRpb24gbGF5ZXIuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRpdmUgaW50byBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgcm91dGluZXMgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyB0aGUgaW5zdHJ1Y3Rpb24ncyBlbmNvZGluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBpbiBtZW1vcnkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgbWVtb3J5IGl0c2VsZi4gVGhpcyBpcyBwcm9iYWJseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgZW11bGF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBJIGltYWdpbmUgdGhlcmUncyBhIGdvb2QgY2h1bmsgb2YgY29kZSBkZWRpY2F0ZWQgdG8gaGFuZGxpbmcgZGlmZmVyZW50IGFkZHJlc3NpbmcgbW9kZXMsIHNlZ21lbnQgcmVnaXN0ZXJzLCBhbmQgb3BlcmFuZCBzaXplcyB3aXRoaW4gdGhhdCBlbXVsYXRpb24gZmlsZS4gSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcGFyc2luZyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI5LjU5ODkxNjAyNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5Mjc1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRHN0TWVtNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkxLSNkZWZpbmUgRHN0REkgICAgICAgKE9wREkgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5MjojZGVmaW5lIERzdE1lbTY0ICAgIChPcE1lbTY0IFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTMtI2RlZmluZSBEc3RNZW0xNiAgICAoT3BNZW0xNiBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXA5ID0geyB7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MTIyOlxcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDEyMy19LCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI5LjY3NDg0OTc4NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgyMjE5NDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgYE9wTWVtNjRgIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgT3BNZW02NGAuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyBvcGNvZGUgaXMgcHJvY2Vzc2VkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCBvciBtYXliZSBhIHF1aWNrIGdyZXAgdG8gbG9jYXRlIGFsbCB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYW5kIHVzYWdlcy4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIG1vZHVsZXMgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyBvciBleGVjdXRpbmcgaW5zdHJ1Y3Rpb25zIG9mIHRoaXMgdHlwZS4gTXkgZ29hbCBpcyB0byBtYXAgdGhlIHBhdGggb2YgdGhpcyBvcGVyYXRpb246IGZyb20gcGFyc2luZyB0byBzZW1hbnRpYyBhbmFseXNpcywgY29kZSBnZW5lcmF0aW9uIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gcnVudGltZSBleGVjdXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLCBvZiBjb3Vyc2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzEuNTU3MDgzNDk3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzcyMDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPcE1lbTY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NS0jZGVmaW5lIE9wREkgICAgICAgICAgICAgICA1dWxsICAvKiBFUzpESS9FREkvUkRJICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NjojZGVmaW5lIE9wTWVtNjQgICAgICAgICAgICA2dWxsICAvKiBNZW1vcnksIDY0LWJpdCAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDctI2RlZmluZSBPcEltbVVCeXRlICAgICAgICAgN3VsbCAgLyogWmVyby1leHRlbmRlZCA4LWJpdCBpbW1lZGlhdGUgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00NjI1PXN0YXRpYyBpbnQgZGVjb2RlX29wZXJhbmQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBvcGVyYW5kICpvcCxcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0NS1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2NDY6XFx0Y2FzZSBPcE1lbTY0OlxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0Ny1cXHRcXHRjdHh0LVxcdTAwM2VtZW1vcC5ieXRlcyA9IChjdHh0LVxcdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzEuNjM0ODE0NDQ1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjg1OTc3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRW11bGF0aW9uIElzc3VlcyBpbiBLVk0geDg2KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHg4NiBlbXVsYXRpb24gaW4gS1ZNLiBNeSBodW5jaCBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDQ2NDYsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBpbiB0aGF0IHZpY2luaXR5LCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gcGlucG9pbnQuIEFsc28sIEkgYmV0dGVyIGNoZWNrIG91dCBgeDg2X2VtdWxhdGVfaW5zbmAgYXJvdW5kIGxpbmUgNTQxNCBpbiB0aGUgc2FtZSBmaWxlLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBpbnN0cnVjdGlvbiBlbXVsYXRpb24gZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjYXVzaW5nIHRoaXMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZmxvdywgY29uc2lkZXIgdGhlIGlucHV0cywgYW5kIGxvb2sgZm9yIGFueSBkaXNjcmVwYW5jaWVzIG9yIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHdlIGdvdCB0byB0aGUgcHJvYmxlbSwgYW5kIHNlZSBpZiBJIGNhbiBuYXJyb3cgZG93biBhIHJvb3QgY2F1c2UuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzQuMDAzNDE1MjExWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2NDA6XFx0XFx0XFx0Km9wID0gY3R4dC1cXHUwMDNlbWVtb3A7XFxuNDY0MTpcXHRcXHRcXHRjdHh0LVxcdTAwM2VtZW1vcHAgPSBvcDtcXG40NjQyOlxcdFxcdFxcdGlmIChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgQml0T3ApXFxuNDY0MzpcXHRcXHRcXHRcXHRmZXRjaF9iaXRfb3BlcmFuZChjdHh0KTtcXG40NjQ0OlxcdFxcdFxcdG9wLVxcdTAwM2VvcmlnX3ZhbCA9IG9wLVxcdTAwM2V2YWw7XFxuNDY0NTpcXHRcXHRcXHRicmVhaztcXG40NjQ2OlxcdFxcdGNhc2UgT3BNZW02NDpcXG40NjQ3OlxcdFxcdFxcdGN0eHQtXFx1MDAzZW1lbW9wLmJ5dGVzID0gKGN0eHQtXFx1MDAzZW9wX2J5dGVzID09IDgpID8gMTYgOiA4O1xcbjQ2NDg6XFx0XFx0XFx0Z290byBtZW1fY29tbW9uO1xcbjQ2NDk6XFx0XFx0Y2FzZSBPcEFjYzpcXG40NjUwOlxcdFxcdFxcdG9wLVxcdTAwM2V0eXBlID0gT1BfUkVHO1xcbjQ2NTE6XFx0XFx0XFx0b3AtXFx1MDAzZWJ5dGVzID0gKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBCeXRlT3ApID8gMSA6IGN0eHQtXFx1MDAzZW9wX2J5dGVzO1xcbjQ2NTI6XFx0XFx0XFx0b3AtXFx1MDAzZWFkZHIucmVnID0gcmVnX3JtdyhjdHh0LCBWQ1BVX1JFR1NfUkFYKTtcXG40NjUzOlxcdFxcdFxcdGZldGNoX3JlZ2lzdGVyX29wZXJhbmQob3ApO1xcbjQ2NTQ6XFx0XFx0XFx0YnJlYWs7XFxuNDY1NTpcXHRcXHRjYXNlIE9wQWNjTG86XFxuNDY1NjpcXHRcXHRcXHRvcC1cXHUwMDNldHlwZSA9IE9QX1JFRztcXG40NjU3OlxcdFxcdFxcdG9wLVxcdTAwM2VieXRlcyA9IChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgQnl0ZU9wKSA/IDIgOiBjdHh0LVxcdTAwM2VvcF9ieXRlcztcXG40NjU4OlxcdFxcdFxcdG9wLVxcdTAwM2VhZGRyLnJlZyA9IHJlZ19ybXcoY3R4dCwgVkNQVV9SRUdTX1JBWCk7XFxuNDY1OTpcXHRcXHRcXHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcXG40NjYwOlxcdFxcdFxcdGJyZWFrO1xcbjQ2NjE6XFx0XFx0Y2FzZSBPcEFjY0hpOlxcbjQ2NjI6XFx0XFx0XFx0aWYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBCeXRlT3ApIHtcXG40NjYzOlxcdFxcdFxcdFxcdG9wLVxcdTAwM2V0eXBlID0gT1BfTk9ORTtcXG40NjY0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ2NjU6XFx0XFx0XFx0fVxcbjQ2NjY6XFx0XFx0XFx0b3AtXFx1MDAzZXR5cGUgPSBPUF9SRUc7XFxuNDY2NzpcXHRcXHRcXHRvcC1cXHUwMDNlYnl0ZXMgPSBjdHh0LVxcdTAwM2VvcF9ieXRlcztcXG40NjY4OlxcdFxcdFxcdG9wLVxcdTAwM2VhZGRyLnJlZyA9IHJlZ19ybXcoY3R4dCwgVkNQVV9SRUdTX1JEWCk7XFxuNDY2OTpcXHRcXHRcXHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzQuMDAzOTE3MDExWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODU5Mjg5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgT3BlcmFuZCBNZW1vcnkgRmV0Y2ggaW4geDg2IEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgdGhlIG9wZXJhbmQgbWVtb3J5IGZldGNoIGhhcHBlbnMgd2l0aGluIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24uIEknbSB0aGlua2luZywgYmFzZWQgb24gdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZXNlIGVtdWxhdG9ycywgdGhhdCBpdCBzaG91bGQgYmUgc29tZXdoZXJlIGluIHRoZSBhcmVhIHRoYXQgZGVhbHMgd2l0aCBvcGVyYW5kIGFjY2Vzcy4gTGV0J3Mgc3RhcnQgd2l0aCBsaW5lIDU0MDAgYW5kIGdvIHVwIHRvIGFyb3VuZCBsaW5lIDU0NDAuIFRoYXQgcmFuZ2UgaXMgdXN1YWxseSB3aGVyZSB0aGUgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMgYXNzb2NpYXRlZCB3aXRoIGluc3RydWN0aW9uIG9wZXJhbmQgaGFuZGxpbmcgYXJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpdmUgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgb3BlcmFuZCBmZXRjaCBsb2dpYyBpcyBpbXBsZW1lbnRlZCBoZXJlLiBJdCdzIHRpbWUgdG8gZ2V0IGhhbmRzLW9uIGFuZCB0cmFjZSB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjM2LjA4OTg0OTM3MVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjAyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDAwOlxcdFxcdFxcdFxcdFxcdCAgICBjdHh0LVxcdTAwM2VzcmMudmFscHRyLCBjdHh0LVxcdTAwM2VzcmMuYnl0ZXMpO1xcbjU0MDE6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuNTQwMjpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQwMzpcXHRcXHRcXHRjdHh0LVxcdTAwM2VzcmMub3JpZ192YWw2NCA9IGN0eHQtXFx1MDAzZXNyYy52YWw2NDtcXG41NDA0OlxcdFxcdH1cXG41NDA1OlxcdFxcbjU0MDY6XFx0XFx0aWYgKGN0eHQtXFx1MDAzZXNyYzIudHlwZSA9PSBPUF9NRU0pIHtcXG41NDA3OlxcdFxcdFxcdHJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgY3R4dC1cXHUwMDNlc3JjMi5hZGRyLm1lbSxcXG41NDA4OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3R4dC1cXHUwMDNlc3JjMi52YWwsIGN0eHQtXFx1MDAzZXNyYzIuYnl0ZXMpO1xcbjU0MDk6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuNTQxMDpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQxMTpcXHRcXHR9XFxuNTQxMjpcXHRcXG41NDEzOlxcdFxcdGlmICgoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IERzdE1hc2spID09IEltcGxpY2l0T3BzKVxcbjU0MTQ6XFx0XFx0XFx0Z290byBzcGVjaWFsX2luc247XFxuNTQxNTpcXHRcXG41NDE2OlxcdFxcbjU0MTc6XFx0XFx0aWYgKChjdHh0LVxcdTAwM2Vkc3QudHlwZSA9PSBPUF9NRU0pIFxcdTAwMjZcXHUwMDI2ICEoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IE1vdikpIHtcXG41NDE4OlxcdFxcdFxcdC8qIG9wdGltaXNhdGlvbiAtIGF2b2lkIHNsb3cgZW11bGF0ZWQgcmVhZCBpZiBNb3YgKi9cXG41NDE5OlxcdFxcdFxcdHJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgY3R4dC1cXHUwMDNlZHN0LmFkZHIubWVtLFxcbjU0MjA6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmN0eHQtXFx1MDAzZWRzdC52YWwsIGN0eHQtXFx1MDAzZWRzdC5ieXRlcyk7XFxuNTQyMTpcXHRcXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkge1xcbjU0MjI6XFx0XFx0XFx0XFx0aWYgKCEoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IE5vV3JpdGUpIFxcdTAwMjZcXHUwMDI2XFxuNTQyMzpcXHRcXHRcXHRcXHQgICAgcmMgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQgXFx1MDAyNlxcdTAwMjZcXG41NDI0OlxcdFxcdFxcdFxcdCAgICBjdHh0LVxcdTAwM2VleGNlcHRpb24udmVjdG9yID09IFBGX1ZFQ1RPUilcXG41NDI1OlxcdFxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi5lcnJvcl9jb2RlIHw9IFBGRVJSX1dSSVRFX01BU0s7XFxuNTQyNjpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQyNzpcXHRcXHRcXHR9XFxuNTQyODpcXHRcXHR9XFxuNTQyOTpcXHRcXHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cXG41NDMwOlxcdFxcbjU0MzE6XFx0I2lmZGVmIENPTkZJR19YODZfNjRcXG41NDMyOlxcdFxcdGlmIChjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXFxuNTQzMzpcXHRcXHRcXHRjdHh0LVxcdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVxcdTAwM2Vkc3QudmFsMTI4O1xcbjU0MzQ6XFx0XFx0ZWxzZVxcbjU0MzU6XFx0I2VuZGlmXFxuNTQzNjpcXHRcXHRcXHRjdHh0LVxcdTAwM2Vkc3Qub3JpZ192YWw2NCA9IGN0eHQtXFx1MDAzZWRzdC52YWw2NDtcXG41NDM3OlxcdFxcbjU0Mzg6XFx0c3BlY2lhbF9pbnNuOlxcbjU0Mzk6XFx0XFxuNTQ0MDpcXHRcXHRpZiAodW5saWtlbHkoY2hlY2tfaW50ZXJjZXB0cykgXFx1MDAyNlxcdTAwMjYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBJbnRlcmNlcHQpKSB7XFxuNTQ0MTpcXHRcXHRcXHRyYyA9IGVtdWxhdG9yX2NoZWNrX2ludGVyY2VwdChjdHh0LCBjdHh0LVxcdTAwM2VpbnRlcmNlcHQsXFxuNTQ0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBYODZfSUNQVF9QT1NUX01FTUFDQ0VTUyk7XFxuNTQ0MzpcXHRcXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcXG41NDQ0OlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG41NDQ1OlxcdFxcdH1cXG41NDQ2OlxcdFxcbjU0NDc6XFx0XFx0aWYgKGN0eHQtXFx1MDAzZXJlcF9wcmVmaXggXFx1MDAyNlxcdTAwMjYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBTdHJpbmcpKVxcbjU0NDg6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZWZsYWdzIHw9IFg4Nl9FRkxBR1NfUkY7XFxuNTQ0OTpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjM2LjA5MDUxMjkzMVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA1Nzk1MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBXcml0ZWJhY2sgaW4gSW5zdHJ1Y3Rpb24gRW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHg4Nl9lbXVsYXRlX2luc25gIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBpdCBoYW5kbGVzIHdyaXRlYmFjaywgcGFydGljdWxhcmx5IGZvciB0aGUgZGVzdGluYXRpb24gb3BlcmFuZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBoZXJlLCB3aGVyZSBhbmQgaG93IHRoZSByZXN1bHRzIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbiBhcmUgdWx0aW1hdGVseSB3cml0dGVuIGJhY2suIEknbSB0aGlua2luZyBJIHNob3VsZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggcmVsYXRlZCB0byB0aGUgZGVzdGluYXRpb24gb3BlcmFuZCwgYW5kIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoaW4gdGhlIGVtdWxhdGlvbiBmcmFtZXdvcmssIHdoZXJlIGl0J3MgbW9kaWZpZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCdzIHNlZSBob3cgdGhlIGVtdWxhdGlvbiBoYW5kbGVzIHRoZSBkZXRhaWxzOyBJJ2xsIHNjYW4gZnVydGhlciBkb3duIHRoZSBjb2RlLCB0b3dhcmRzIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgYHg4Nl9lbXVsYXRlX2luc25gIGZ1bmN0aW9uIHRoYXQgbWFuYWdlIG9wZXJhbmQgaW50ZXJhY3Rpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgbG9naWMgZm9yIGRlYWxpbmcgd2l0aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnMuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBjcnVjaWFsIHBoYXNlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzguMzk2MzEyMjI3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1MTIwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGViYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNjYtLyogZnJlZTogNDMtNDQgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE2NzojZGVmaW5lIE5vV3JpdGUgICAgICgodTY0KTEgXFx1MDAzY1xcdTAwM2MgNDUpICAvKiBObyB3cml0ZWJhY2sgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE2OC0jZGVmaW5lIFNyY1dyaXRlICAgICgodTY0KTEgXFx1MDAzY1xcdTAwM2MgNDYpICAvKiBXcml0ZSBiYWNrIHNyYyBvcGVyYW5kICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTI0Mz1lbnVtIHJleF9iaXRzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjQ5LVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjUwOnN0YXRpYyB2b2lkIHdyaXRlYmFja19yZWdpc3RlcnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yNTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz05ODE9c3RhdGljIGludCBlbV9ic2ZfYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk4Mi17XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5ODM6XFx0LyogSWYgc3JjIGlzIHplcm8sIGRvIG5vdCB3cml0ZWJhY2ssIGJ1dCB1cGRhdGUgZmxhZ3MgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk4NC1cXHRpZiAoY3R4dC1cXHUwMDNlc3JjLnZhbCA9PSAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz05ODk9c3RhdGljIGludCBlbV9ic3JfYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk5MC17XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5OTE6XFx0LyogSWYgc3JjIGlzIHplcm8sIGRvIG5vdCB3cml0ZWJhY2ssIGJ1dCB1cGRhdGUgZmxhZ3MgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk5Mi1cXHRpZiAoY3R4dC1cXHUwMDNlc3JjLnZhbCA9PSAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xNzUwPXN0YXRpYyB2b2lkIHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQoc3RydWN0IG9wZXJhbmQgKm9wKVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzU0LVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTc1NTpzdGF0aWMgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wKVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTc1Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3OTItXFx0Y2FzZSBPUF9OT05FOlxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTc5MzpcXHRcXHQvKiBubyB3cml0ZWJhY2sgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3OTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTE4MTI9c3RhdGljIGludCBlbV9wdXNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxMy17XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxODE0OlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxNS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTIwNDg9aW50IGVtdWxhdGVfaW50X3JlYWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBpcnEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIwNTQtXFx0aWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMDU1OlxcdFxcdHdyaXRlYmFja19yZWdpc3RlcnMoY3R4dCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMDU2LVxcdHJldHVybiByYztcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9Mjk4Mz1pbnQgZW11bGF0b3JfdGFza19zd2l0Y2goc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTI5OTctXFx0XFx0Y3R4dC1cXHUwMDNlZWlwID0gY3R4dC1cXHUwMDNlX2VpcDtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjI5OTg6XFx0XFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTI5OTktXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMjYyPXN0YXRpYyBpbnQgZW1fY3Jfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMyNjktXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozMjcwOlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzI3MS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTMyODY9c3RhdGljIGludCBlbV9kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzMwMi1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzMDM6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzA0LVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM2Mz1zdGF0aWMgaW50IGVtX21vdl9zcmVnX3JtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzcyLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzM3MzpcXHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMzNzQtXFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMzgzPXN0YXRpYyBpbnQgZW1fbGxkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzM4Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzODc6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzg4LVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM5Nz1zdGF0aWMgaW50IGVtX2x0cihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQwMC1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0MDE6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDAyLVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQwNj1zdGF0aWMgaW50IGVtX2ludmxwZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQxNS1cXHRcXHRjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZWludmxwZyhjdHh0LCBsaW5lYXIpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzQxNjpcXHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MTctXFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zNDMxPXN0YXRpYyBpbnQgZW1faHlwZXJjYWxsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDM5LVxcdGN0eHQtXFx1MDAzZV9laXAgPSBjdHh0LVxcdTAwM2VlaXA7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDQwOlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQ0MS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM0NDU9c3RhdGljIGludCBlbXVsYXRlX3N0b3JlX2Rlc2NfcHRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDYxLVxcdH1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0NjI6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDYzLVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQ3OD1zdGF0aWMgaW50IGVtX2xnZHRfbGlkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBsZ2R0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDk3LVxcdFxcdGN0eHQtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X2lkdChjdHh0LCBcXHUwMDI2ZGVzY19wdHIpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzQ5ODpcXHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0OTktXFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zNTY0PXN0YXRpYyBpbnQgZW1fb3V0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNTY3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3R4dC1cXHUwMDNlc3JjLnZhbCwgMSk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNTY4OlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzU2OS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Nzc5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NzgwOlxcdFxcdG9wLVxcdTAwM2V0eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NzgxLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01Mjg1PWludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0NTUtXFx0XFx0XFx0Z290byBkb25lO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTQ1NjpcXHRcXHRnb3RvIHdyaXRlYmFjaztcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0NTctXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NDk3LVxcdFxcdHJjID0gam1wX3JlbChjdHh0LCBjdHh0LVxcdTAwM2VzcmMudmFsKTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU0OTg6XFx0XFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0OTktXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MjUtXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTI2OndyaXRlYmFjazpcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MjctXFx0aWYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBTcmNXcml0ZSkge1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUyOC1cXHRcXHRCVUdfT04oY3R4dC1cXHUwMDNlc3JjLnR5cGUgPT0gT1BfTUVNIHx8IGN0eHQtXFx1MDAzZXNyYy50eXBlID09IE9QX01FTV9TVFIpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTUyOTpcXHRcXHRyYyA9IHdyaXRlYmFjayhjdHh0LCBcXHUwMDI2Y3R4dC1cXHUwMDNlc3JjKTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MzAtXFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MzMtXFx0aWYgKCEoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IE5vV3JpdGUpKSB7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTM0OlxcdFxcdHJjID0gd3JpdGViYWNrKGN0eHQsIFxcdTAwMjZjdHh0LVxcdTAwM2Vkc3QpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUzNS1cXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3Mi1cXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VtZW1fcmVhZC5lbmQgPSAwO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTU3MzpcXHRcXHRcXHRcXHR3cml0ZWJhY2tfcmVnaXN0ZXJzKGN0eHQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3NC1cXHRcXHRcXHRcXHRyZXR1cm4gRU1VTEFUSU9OX1JFU1RBUlQ7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTc1LVxcdFxcdFxcdH1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU1NzY6XFx0XFx0XFx0Z290byBkb25lOyAvKiBza2lwIHJpcCB3cml0ZWJhY2sgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1NzctXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTk0LVxcdGlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTU5NTpcXHRcXHR3cml0ZWJhY2tfcmVnaXN0ZXJzKGN0eHQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU5Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYxOC1cXHRcXHRlbHNlIGlmIChjdHh0LVxcdTAwM2VvcF9ieXRlcyAhPSA0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTYxOTpcXHRcXHRcXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7IC8qIG5vIHdyaXRlYmFjayAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYyMC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTY0Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NDc6XFx0Z290byB3cml0ZWJhY2s7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NjQ4LVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01NjUzPXZvaWQgZW11bGF0b3JfaW52YWxpZGF0ZV9yZWdpc3Rlcl9jYWNoZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTY1Ny1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NTg6dm9pZCBlbXVsYXRvcl93cml0ZWJhY2tfcmVnaXN0ZXJfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NjU5LXtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NjA6XFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjozOC41Mjc4Mjk2NTVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkzMjE4MDc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgV3JpdGViYWNrIEZ1bmN0aW9uIGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCoqXG5cbkFscmlnaHQsIG15IGZvY3VzIGlzIG5vdyBvbiB0aGF0IHdyaXRlYmFjayBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGF0IGxpbmUgMTc1NSB3aXRoaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBoeXBlcnZpc29yIGlzIGhhbmRsaW5nIHdyaXRlYmFja3MgZm9yIGVtdWxhdGVkIGRldmljZXMgb3Igb3BlcmF0aW9ucyBvbiB4ODYuIE15IHVuZGVyc3RhbmRpbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgdGhlIGNvcnJlY3RuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyB3cml0dGVuLCB3aGVyZSBpdCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGFuZCB0aGUgbG9naWMgZ292ZXJuaW5nIHRoYXQgd3JpdGUgcHJvY2Vzcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgcG90ZW50aWFsIGFyZWFzIHdoZXJlIGEgYnVnIGNvdWxkIHJlYXIgaXRzIGhlYWQuIFRoaXMgaXMgdGhlIGJlZHJvY2sgZm9yIHRoZSBlbXVsYXRvciwgc28gaXQncyBjcml0aWNhbCB0byBnZXQgdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG5haWxlZCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY0MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjQxLjQ2MDA0NDg0MloiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzU1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzU1OlxcdHN0YXRpYyBpbnQgd3JpdGViYWNrKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qgb3BlcmFuZCAqb3ApXFxuMTc1NjpcXHR7XFxuMTc1NzpcXHRcXHRzd2l0Y2ggKG9wLVxcdTAwM2V0eXBlKSB7XFxuMTc1ODpcXHRcXHRjYXNlIE9QX1JFRzpcXG4xNzU5OlxcdFxcdFxcdHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQob3ApO1xcbjE3NjA6XFx0XFx0XFx0YnJlYWs7XFxuMTc2MTpcXHRcXHRjYXNlIE9QX01FTTpcXG4xNzYyOlxcdFxcdFxcdGlmIChjdHh0LVxcdTAwM2Vsb2NrX3ByZWZpeClcXG4xNzYzOlxcdFxcdFxcdFxcdHJldHVybiBzZWdtZW50ZWRfY21weGNoZyhjdHh0LFxcbjE3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG9wLVxcdTAwM2VhZGRyLm1lbSxcXG4xNzY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3AtXFx1MDAzZW9yaWdfdmFsLFxcbjE3NjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZvcC1cXHUwMDNldmFsLFxcbjE3Njc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG9wLVxcdTAwM2VieXRlcyk7XFxuMTc2ODpcXHRcXHRcXHRlbHNlXFxuMTc2OTpcXHRcXHRcXHRcXHRyZXR1cm4gc2VnbWVudGVkX3dyaXRlKGN0eHQsXFxuMTc3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgb3AtXFx1MDAzZWFkZHIubWVtLFxcbjE3NzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZvcC1cXHUwMDNldmFsLFxcbjE3NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wLVxcdTAwM2VieXRlcyk7XFxuMTc3MzpcXHRcXHRjYXNlIE9QX01FTV9TVFI6XFxuMTc3NDpcXHRcXHRcXHRyZXR1cm4gc2VnbWVudGVkX3dyaXRlKGN0eHQsXFxuMTc3NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgb3AtXFx1MDAzZWFkZHIubWVtLFxcbjE3NzY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wLVxcdTAwM2VkYXRhLFxcbjE3Nzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wLVxcdTAwM2VieXRlcyAqIG9wLVxcdTAwM2Vjb3VudCk7XFxuMTc3ODpcXHRcXHRjYXNlIE9QX1hNTTpcXG4xNzc5OlxcdFxcdFxcdGlmICghKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBBdngpKSB7XFxuMTc4MDpcXHRcXHRcXHRcXHRrdm1fd3JpdGVfc3NlX3JlZyhvcC1cXHUwMDNlYWRkci54bW0sIFxcdTAwMjZvcC1cXHUwMDNldmVjX3ZhbCk7XFxuMTc4MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNzgyOlxcdFxcdFxcdH1cXG4xNzgzOlxcdFxcdFxcdC8qIGZ1bGwgWU1NIHdyaXRlIGJ1dCB3aXRoIGhpZ2ggYnl0ZXMgY2xlYXJlZCAqL1xcbjE3ODQ6XFx0XFx0XFx0bWVtc2V0KG9wLVxcdTAwM2V2YWxwdHIgKyAxNiwgMCwgMTYpO1xcbjE3ODU6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTc4NjpcXHRcXHRjYXNlIE9QX1lNTTpcXG4xNzg3OlxcdFxcdFxcdGt2bV93cml0ZV9hdnhfcmVnKG9wLVxcdTAwM2VhZGRyLnhtbSwgXFx1MDAyNm9wLVxcdTAwM2V2ZWNfdmFsMik7XFxuMTc4ODpcXHRcXHRcXHRicmVhaztcXG4xNzg5OlxcdFxcdGNhc2UgT1BfTU06XFxuMTc5MDpcXHRcXHRcXHRrdm1fd3JpdGVfbW14X3JlZyhvcC1cXHUwMDNlYWRkci5tbSwgXFx1MDAyNm9wLVxcdTAwM2VtbV92YWwpO1xcbjE3OTE6XFx0XFx0XFx0YnJlYWs7XFxuMTc5MjpcXHRcXHRjYXNlIE9QX05PTkU6XFxuMTc5MzpcXHRcXHRcXHQvKiBubyB3cml0ZWJhY2sgKi9cXG4xNzk0OlxcdFxcdFxcdGJyZWFrO1xcbjE3OTU6XFx0XFx0ZGVmYXVsdDpcXG4xNzk2OlxcdFxcdFxcdGJyZWFrO1xcbjE3OTc6XFx0XFx0fVxcbjE3OTg6XFx0XFx0cmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7XFxuMTc5OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjQxLjQ2MDUxNjExMloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTkxODY2MDIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIGNtcHhjaGcxNmIgRW11bGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIDEyOC1iaXQgY29tcGFyZS1hbmQtZXhjaGFuZ2UgKGNtcHhjaGcxNmIpIHN1cHBvcnQsIHNwZWNpZmljYWxseSBmb3IgdXNlci1zcGFjZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgS1ZNIGVtdWxhdG9yLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gd291bGQgY2F0Y2gsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGlubGluZSBhc3NlbWJseSBpbnZvbHZlZC5cblxuTXkgYW5hbHlzaXMgc3RhcnRlZCBieSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIFdlJ3ZlIGdvdCBgc2VnbWVudGVkX2NtcHhjaGdgIHVzaW5nIGEgYHN0cnVjdCBvcGVyYW5kYCB3aGljaCBjb250YWlucyB1bmlvbnMgZm9yIHZhcmlvdXMgdmFsdWUgc2l6ZXMgKDgsIDE2LCAzMiBieXRlcyBhbmQgdmVjdG9yIHJlZ2lzdGVycykuIENyaXRpY2FsbHksIGZvciAxNi1ieXRlIG9wZXJhdGlvbnMsIGBvcmlnX3ZhbDEyOGAgaXMgaW5pdGlhbGl6ZWQsIHBvdGVudGlhbGx5IHdpdGggYSB1c2VyIG1lbW9yeSBjb3B5IGZyb20gdGhlIGd1ZXN0LiBUaGUgaW5saW5lIGFzc2VtYmx5IGluIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBoYW5kbGVzIHRoZSBhY3R1YWwgYXRvbWljIG9wZXJhdGlvbi4gVGhlIGltcG9ydGFudCB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgdmFsdWUgKGBfb2xkYCksIHRoZSBuZXcgdmFsdWUgKGBfbmV3YCksIGFuZCB0aGUgbWVtb3J5IGFkZHJlc3MgKGBfcHRyYCkgYXJlIGFsbCBleHBsaWNpdGx5IHBhc3NlZC5cblxuTm93LCBjaGVja2luZyB0aGUgYXNzZW1ibHkgaXRzZWxmLCB3aGV0aGVyIHdpdGggb3Igd2l0aG91dCB0aWVkIG91dHB1dCwgdGhlcmUgYXJlbid0IGFueSBvYnZpb3VzIHJlZCBmbGFncyBmb3IgS01TQU4uIFRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGFzc2VtYmx5IGlzIGV4ZWN1dGVkLiBUaGUgdmFsdWVzIGFyZSByZWFkIGludG8gcmVnaXN0ZXJzIGFuZCwgY3J1Y2lhbGx5LCB3cml0dGVuIGJhY2sgdXNpbmcgdGhlIGF0b21pYyBgY21weGNoZzE2YmAgaW5zdHJ1Y3Rpb24uIFRoZXJlJ3Mgbm8gY3JlYXRpb24gb2YgbmV3IG1lbW9yeSByZWdpb25zLCBubyBwYXNzaW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEsIGp1c3QgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBleGlzdGluZywgZXhwbGljaXRseS1tYW5hZ2VkIHZhbHVlcyB3aXRoaW4gZ3Vlc3QgbWVtb3J5LlxuXG5Mb29raW5nIGF0IHRoZSBlbXVsYXRpb24gbG9naWMgaW4gYGt2bS9lbXVsYXRlLmNgLCBgZW1fY21weGNoZzhiXzE2YmAgaGFuZGxlcyB0aGUgZW11bGF0aW9uLiBgY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjhgIGhvbGRzIHRoZSBvcmlnaW5hbCB2YWx1ZSwgcmVhZCB2aWEgYHNlZ21lbnRlZF9yZWFkYC4gVXBvbiBjb21wYXJlLCBgY3R4dC1cdTAwM2Vkc3QudmFsMTI4YCBpcyB1cGRhdGVkLiBCb3RoIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIGFyZSBpbml0aWFsaXplZCBieSByZWFkcyBvZiBndWVzdCBtZW1vcnkgb3IgcmVnaXN0ZXIgdmFsdWVzLiBBbmQgYHg4Nl9lbXVsYXRlX2luc25gIGp1c3QgY29waWVzIHRoZW0uIEFsbCBvcGVyYXRpb25zIHNlZW0gdG8gaW52b2x2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHZhbHVlcy5cblxuRmluYWxseSwgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGNhbGxzIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCBmb3IgdGhlIDEyOC1iaXQgY2FzZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwbGllZCBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBvbGRgIGFuZCBgbmV3YCkgYW5kIHRoZSB0YXJnZXQgbWVtb3J5IGFkZHJlc3MuIE5vdGhpbmcgaW5kaWNhdGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCBvciBhbiBpbmZvcm1hdGlvbiBsZWFrIHRvIHVzZXIgc3BhY2UuXG5cbkFmdGVyIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUsIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2RlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgbWlnaHQgYmUgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBkZWNvZGluZywgbG9jayBwcmVmaXggdXNhZ2UsIGJvdW5kYXJ5IGFsaWdubWVudCwgb3IgcmVnaXN0ZXIgd3JpdGVzLiBUaGVzZSBhcmUgc3RhbmRhcmQgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBmb3IgZW11bGF0aW9uIGFuZCB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBsb2NrZGVwKSBhbmQgYXJlIG91dHNpZGUgS01TQU4ncyBwdXJ2aWV3LiBJJ20gY29udmluY2VkIHRoYXQgdGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgS01TQU4tcmVsZXZhbnQgcmlzay5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NTYsIk91dHB1dFRva2VucyI6NDAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjUzLjM3OTE4MDc2OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxcbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxcbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxcbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxcbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 07:57:32 +0000 UTC FinishedAt: 2026-09-08 08:02:55 +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": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "13471fa8-c35c-44d2-a0a3-20013775b4e0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "em_cmpxchg8b", "emulator_cmpxchg_emulated", "x86_emulate_insn", "x86_emulate_instruction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtX2NtcHhjaGc4YiYjMzQ7LAogICAgJiMzNDtlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkJiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc24mIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgdXNlciBzcGFjZSBjb21wYXJlLWFuZC1zd2FwIChfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtIHVzaW5nIGNtcHhjaGcxNmIpIGFuZCBhZGRzIENNUFhDSEcxNkIgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGluIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxuMS4gQWRkaW5nIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBpbmxpbmUgYXNzZW1ibHkgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAgdG8gYXRvbWljYWxseSBjb21wYXJlIGFuZCBzd2FwIDEyOC1iaXQgdmFsdWVzIGF0IHVzZXIgYWRkcmVzc2VzLlxuMi4gVXBkYXRpbmcgYHN0cnVjdCBvcGVyYW5kYCBpbiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgd2l0aGluIGV4aXN0aW5nIHVuaW9ucy5cbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Uga2VybmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cdTAwM2Vkc3QudmFsMTI4YCwgYG9sZGAsIGBuZXdgLCBndWVzdCByZWdpc3RlciB2YWx1ZXMpIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgaW5pdGlhbGl6ZWQgZHVyaW5nIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBleGVjdXRpb24uXG4tIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZ3MgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciAxMjgtYml0IENNUFhDSEcxNkIgZW11bGF0aW9uIHRvIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBpbXBsZW1lbnRzIGEgbmV3IDEyOC1iaXQgdXNlciBjbXB4Y2hnIGlubGluZSBhc3NlbWJseSBwcmltaXRpdmUgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20pIG9uIHg4Nl82NC4gSXQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24gaW4gZW1fY21weGNoZzhiIGFuZCBtb2RpZmllcyBvcGVyYW5kIGhhbmRsaW5nIGluIHg4Nl9lbXVsYXRlX2luc24gYW5kIGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIHZpYSBzdGFuZGFyZCBLVk0gZ3Vlc3QgZW11bGF0aW9uIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiOWU3NDhhNjg5MDI3MTE0OWUyMTFhMjAyMTA1MDA2ZTFkZWU3MWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzo1OToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDNhMGRkM2MyYjIzM2UuLjk0ODkzN2EyNGNjNTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuQEAgLTQwNyw2ICYjNDM7NDA3LDI3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHVubGlrZWx5KCFzdWNjZXNzKSlcdFx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoc3VjY2Vzcyk7XHRcdFx0XHRcdH0pXG4mIzQzOyNlbHNlIC8vICFDT05GSUdfWDg2XzMyXG4mIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbiYjNDM7XHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpO1x0XHRcdFx0XFxcbiYjNDM7XHRhc21fZ290b19vdXRwdXQoXCYjMzQ7XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7MTogXCYjMzQ7IExPQ0tfUFJFRklYIFwmIzM0O2NtcHhjaGcxNmIgJVtwdHJdXFxuXCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHQgICAgIF9BU01fRVhUQUJMRV9VQSgxYiwgJWxbbGFiZWxdKVx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PUBjY3pcJiMzNDsgKHN1Y2Nlc3MpLFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDsmIzQzO2FcJiMzNDsgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFwmIzM0OyYjNDM7ZFwmIzM0OyAoX19vbGRfaGlnaCksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFtwdHJdIFwmIzM0OyYjNDM7bVwmIzM0OyAoKl9wdHIpXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFwmIzM0O2JcJiMzNDsgKCh1NjQpX19uZXcpLFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtjXCYjMzQ7ICgodTY0KSgodTEyOClfX25ldyBcdTAwM2VcdTAwM2UgNjQpKVx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgOiBsYWJlbCk7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHQqX29sZCA9ICgodTEyOClfX29sZF9oaWdoIFx1MDAzY1x1MDAzYyA2NCkgfCBfX29sZF9sb3c7XHRcdFxcXG4mIzQzO1x0bGlrZWx5KHN1Y2Nlc3MpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbkBAIC00NjMsNiAmIzQzOzQ4NCwzMiBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuJiM0MzsjZWxzZSAvLyFDT05GSUdfWDg2XzMyXG4mIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbiYjNDM7XHRpbnQgX19yZXN1bHQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdF9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbiYjNDM7XHRfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpO1x0XHRcdFx0XFxcbiYjNDM7XHRhc20gdm9sYXRpbGUoXCYjMzQ7XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgXCYjMzQ7MTogXCYjMzQ7IExPQ0tfUFJFRklYIFwmIzM0O2NtcHhjaGcxNmIgJVtwdHJdXFxuXCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHQgICAgIFwmIzM0O21vdiAkMCwgJVtyZXN1bHRdXFxuXFx0XCYjMzQ7XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICBcJiMzNDtzZXR6ICViW3Jlc3VsdF1cXG5cJiMzNDtcdFx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIFwmIzM0OzI6XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgX0FTTV9FWFRBQkxFX1RZUEVfUkVHKDFiLCAyYiwgRVhfVFlQRV9FRkFVTFRfUkVHLFx0XFxcbiYjNDM7XHRcdFx0XHRcdCAgICVbcmVzdWx0XSlcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFtyZXN1bHRdIFwmIzM0Oz1xXCYjMzQ7IChfX3Jlc3VsdCksXHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDsmIzQzO2FcJiMzNDsgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFwmIzM0OyYjNDM7ZFwmIzM0OyAoX19vbGRfaGlnaCksXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAgIFtwdHJdIFwmIzM0OyYjNDM7bVwmIzM0OyAoKl9wdHIpXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICA6IFwmIzM0O2JcJiMzNDsgKCh1NjQpX19uZXcpLFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtjXCYjMzQ7ICgodTY0KSgodTEyOClfX25ldyBcdTAwM2VcdTAwM2UgNjQpKVx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgKHVubGlrZWx5KF9fcmVzdWx0IFx1MDAzYyAwKSlcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGdvdG8gbGFiZWw7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAodW5saWtlbHkoIV9fcmVzdWx0KSlcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXHUwMDNjXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcdFx0XFxcbiYjNDM7XHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbiBcbkBAIC01NTEsMTEgJiM0Mzs1OTgsMTggQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcbiBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTtcbiBcbi0jaWZuZGVmIENPTkZJR19YODZfMzJcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfMzJcbiYjNDM7LypcbiYjNDM7ICogQWx3YXlzIGZhaWwgb24gMzIgYml0IGFyY2ggb3IgNjQgYXJjaCB3aXRob3V0IDEyOCBiaXQgY21weGNoZyBzdXBwb3J0XG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKSAoeyBCVUlMRF9CVUdfT04oMSk7IDA7IH0pXG4mIzQzOyNlbHNlXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXHRcdFxcXG4gXHRfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O3FcJiMzNDssIFwmIzM0O3JcJiMzNDssIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKVxuJiM0MztcbiAjZW5kaWZcbiBcbiYjNDM7XG4gLypcbiAgKiBGb3JjZSB0aGUgcG9pbnRlciB0byB1XHUwMDNjc2l6ZVx1MDAzZSB0byBtYXRjaCB0aGUgc2l6ZSBleHBlY3RlZCBieSB0aGUgYXNtIGhlbHBlci5cbiAgKiBjbGFuZy9MTFZNIGNvbXBpbGVzIGFsbCBjYXNlcyBhbmQgb25seSBkaXNjYXJkcyB0aGUgdW51c2VkIHBhdGhzIGFmdGVyXG5AQCAtNTgwLDYgJiM0Mzs2MzQsMTQgQEAgZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XG4gXHRjYXNlIDg6XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbSgoX19mb3JjZSB1NjQgKikoX3B0ciksIChfb2xkcCksXFxcbiBcdFx0XHRcdFx0XHQgKF9udmFsKSwgX2xhYmVsKTtcdFx0XFxcbiBcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0Y2FzZSAxNjpcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1gxNikpXHRcdFx0XHRcXFxuJiM0MztcdFx0XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oXHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdChfX2ZvcmNlIHUxMjggKikoX3B0ciksXHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdChfb2xkcCksIChfbnZhbCksIF9sYWJlbCk7XHRcdFxcXG4mIzQzO1x0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdF9fcmV0ID0gMDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1x0XHRcdFx0XFxcbiBcdH1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X19yZXQ7XHRcdFx0XHRcdFx0fSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuaW5kZXggYzFiMjEyODIxODdmMy4uNTM1ODQyMzM2ZDc2NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcbkBAIC0yMTg0LDI0ICYjNDM7MjE4NCwzNiBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXFxcbiYjNDM7ZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dSMjbWJpdHMgb2xkID0gX19jLVx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRCVUlMRF9CVUdfT04ocmJpdHMgKiAyICE9IG1iaXRzKTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0aWYgKCgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHxcdFx0XFxcbiYjNDM7XHQgICAgKCh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgcmJpdHMpICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkRYKSkpIHtcdFx0XFxcbiYjNDM7XHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCk7XHRcdFx0XFxcbiYjNDM7XHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgcmJpdHMpO1x0XHRcdFxcXG4mIzQzO1x0XHRfX2MtXHUwMDNlZWZsYWdzIFx1MDAyNj0gflg4Nl9FRkxBR1NfWkY7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0X19jLVx1MDAzZWRzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpIFx1MDAzY1x1MDAzYyByYml0cykgfFx0XFxcbiYjNDM7XHRcdFx0XHRcdCh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkJYKTtcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdF9fYy1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0fVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9IHdoaWxlICgwKVxuJiM0MztcbiBzdGF0aWMgaW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbiB7XG4tXHR1NjQgb2xkID0gY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NDtcbi1cbi1cdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKDggJiM0MzsgISEoY3R4dC1cdTAwM2VyZXhfYml0cyBcdTAwMjYgUkVYX1cpICogOCAhPSBjdHh0LVx1MDAzZWRzdC5ieXRlcykpXG4gXHRcdHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTtcbiBcbi1cdGlmICgoKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8XG4tXHQgICAgKCh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDMyKSAhPSAodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkRYKSkpIHtcbi1cdFx0KnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkFYKSA9ICh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDApO1xuLVx0XHQqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0XHRjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1xuLVx0fSBlbHNlIHtcbi1cdFx0Y3R4dC1cdTAwM2Vkc3QudmFsNjQgPSAoKHU2NClyZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkNYKSBcdTAwM2NcdTAwM2MgMzIpIHxcbi1cdFx0XHQodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkJYKTtcbi1cbi1cdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcbi1cdH1cbiYjNDM7XHRpZiAoIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykpXG4mIzQzO1x0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDMyLCA2NCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KTtcbiYjNDM7I2VuZGlmXG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbiB9XG4gXG5AQCAtNTQxNCw4ICYjNDM7NTQyNiwxNCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBjaGVja19pbnRlcmNlcHRzKVxuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuIFx0fVxuLVx0LyogQ29weSBmdWxsIDY0LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbi1cdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbiYjNDM7XHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0XG4mIzQzO1x0aWYgKGN0eHQtXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxuJiM0MztcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7XG4mIzQzO1x0ZWxzZVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbiBcbiBzcGVjaWFsX2luc246XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuaW5kZXggM2UzNzVhZjE1YzAzNS4uODk5MTE4NDUyMzNkYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuQEAgLTI2Myw2ICYjNDM7MjYzLDkgQEAgc3RydWN0IG9wZXJhbmQge1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nIG9yaWdfdmFsO1xuIFx0XHR1NjQgb3JpZ192YWw2NDtcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRcdHUxMjggb3JpZ192YWwxMjg7XG4mIzQzOyNlbmRpZlxuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0dW5zaWduZWQgbG9uZyAqcmVnO1xuQEAgLTI3Niw2ICYjNDM7Mjc5LDkgQEAgc3RydWN0IG9wZXJhbmQge1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nIHZhbDtcbiBcdFx0dTY0IHZhbDY0O1xuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NFxuJiM0MztcdFx0dTEyOCB2YWwxMjg7XG4mIzQzOyNlbmRpZlxuIFx0XHRjaGFyIHZhbHB0cltzaXplb2YoYXZ4MjU2X3QpXTtcbiBcdFx0c3NlMTI4X3QgdmVjX3ZhbDtcbiBcdFx0YXZ4MjU2X3QgdmVjX3ZhbDI7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li42MGJlMTZmMDVkNzk0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC01MjcxLDcgJiM0Mzs1MjcxLDcgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuIFx0aW50IHI7XG4gXG4gXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xuLVx0aWYgKGJ5dGVzIFx1MDAzZSA4IHx8IChieXRlcyBcdTAwMjYgKGJ5dGVzIC0gMSkpKVxuJiM0MztcdGlmIChieXRlcyBcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbiBcdFx0Z290byBlbXVsX3dyaXRlO1xuIFxuIFx0Z3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpO1xuQEAgLTUzMTEsNiAmIzQzOzUzMTEsMTEgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuIFx0Y2FzZSA4OlxuIFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xuIFx0XHRicmVhaztcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRjYXNlIDE2OlxuJiM0MztcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTEyOCwgaHZhLCBvbGQsIG5ldyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRCVUcoKTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbV9jbXB4Y2hnOGImIzM0OywKICAgICYjMzQ7ZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnNuJiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ZTc0OGE2ODkwMjcxMTQ5ZTIxMWEyMDIxMDUwMDZlMWRlZTcxZjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjU5OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDNhMGRkM2MyYjIzM2UuLjk0ODkzN2EyNGNjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTQwNyw2ICYjNDM7NDA3LDI3IEBAIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHVubGlrZWx5KCFzdWNjZXNzKSkJCQkJCQlcCiAJCSpfb2xkID0gX19vbGQ7CQkJCQkJXAogCWxpa2VseShzdWNjZXNzKTsJCQkJCX0pCiYjNDM7I2Vsc2UgLy8gIUNPTkZJR19YODZfMzIKJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKQkoewlcCiYjNDM7CWJvb2wgc3VjY2VzczsJCQkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpOwkJXAomIzQzOwl1NjQgX19vbGRfbG93ID0gKHU2NCkqX29sZDsJCQkJCVwKJiM0MzsJdTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCAmZ3Q7Jmd0OyA2NCk7CQkJCVwKJiM0MzsJX190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTsJCQkJXAomIzQzOwlhc21fZ290b19vdXRwdXQoJiMzNDtcbiYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICAmIzM0OzE6ICYjMzQ7IExPQ0tfUFJFRklYICYjMzQ7Y21weGNoZzE2YiAlW3B0cl1cbiYjMzQ7CQlcCiYjNDM7CQkgICAgIF9BU01fRVhUQUJMRV9VQSgxYiwgJWxbbGFiZWxdKQkJCVwKJiM0MzsJCSAgICAgOiAmIzM0Oz1AY2N6JiMzNDsgKHN1Y2Nlc3MpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDsmIzQzO2EmIzM0OyAoX19vbGRfbG93KSwJCQkJXAomIzQzOwkJICAgICAgICYjMzQ7JiM0MztkJiMzNDsgKF9fb2xkX2hpZ2gpLAkJCQlcCiYjNDM7CQkgICAgICAgW3B0cl0gJiMzNDsmIzQzO20mIzM0OyAoKl9wdHIpCQkJCVwKJiM0MzsJCSAgICAgOiAmIzM0O2ImIzM0OyAoKHU2NClfX25ldyksCQkJCVwKJiM0MzsJCSAgICAgICAmIzM0O2MmIzM0OyAoKHU2NCkoKHUxMjgpX19uZXcgJmd0OyZndDsgNjQpKQkJCVwKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICA6IGxhYmVsKTsJCQkJCQlcCiYjNDM7CWlmICh1bmxpa2VseSghc3VjY2VzcykpCQkJCQkJXAomIzQzOwkJKl9vbGQgPSAoKHUxMjgpX19vbGRfaGlnaCAmbHQ7Jmx0OyA2NCkgfCBfX29sZF9sb3c7CQlcCiYjNDM7CWxpa2VseShzdWNjZXNzKTsJCQkJCX0pCiAjZW5kaWYgLy8gQ09ORklHX1g4Nl8zMgogI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUCiAjZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpCSh7IFwKQEAgLTQ2Myw2ICYjNDM7NDg0LDMyIEBAIGRvIHsJCQkJCQkJCQlcCiAJaWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpCQkJCQlcCiAJCSpfb2xkID0gX19vbGQ7CQkJCQkJXAogCWxpa2VseShfX3Jlc3VsdCk7CQkJCQl9KQomIzQzOyNlbHNlIC8vIUNPTkZJR19YODZfMzIKJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKQkoewlcCiYjNDM7CWludCBfX3Jlc3VsdDsJCQkJCQkJXAomIzQzOwlfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpOwkJXAomIzQzOwl1NjQgX19vbGRfbG93ID0gKHU2NCkqX29sZDsJCQkJCVwKJiM0MzsJdTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCAmZ3Q7Jmd0OyA2NCk7CQkJCVwKJiM0MzsJX190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTsJCQkJXAomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtcbiYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICAmIzM0OzE6ICYjMzQ7IExPQ0tfUFJFRklYICYjMzQ7Y21weGNoZzE2YiAlW3B0cl1cbiYjMzQ7CQlcCiYjNDM7CQkgICAgICYjMzQ7bW92ICQwLCAlW3Jlc3VsdF1cblx0JiMzNDsJCQkJXAomIzQzOwkJICAgICAmIzM0O3NldHogJWJbcmVzdWx0XVxuJiMzNDsJCQkJXAomIzQzOwkJICAgICAmIzM0OzI6XG4mIzM0OwkJCQkJCVwKJiM0MzsJCSAgICAgX0FTTV9FWFRBQkxFX1RZUEVfUkVHKDFiLCAyYiwgRVhfVFlQRV9FRkFVTFRfUkVHLAlcCiYjNDM7CQkJCQkgICAlW3Jlc3VsdF0pCQkJXAomIzQzOwkJICAgICA6IFtyZXN1bHRdICYjMzQ7PXEmIzM0OyAoX19yZXN1bHQpLAkJCVwKJiM0MzsJCSAgICAgICAmIzM0OyYjNDM7YSYjMzQ7IChfX29sZF9sb3cpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDsmIzQzO2QmIzM0OyAoX19vbGRfaGlnaCksCQkJCVwKJiM0MzsJCSAgICAgICBbcHRyXSAmIzM0OyYjNDM7bSYjMzQ7ICgqX3B0cikJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7YiYjMzQ7ICgodTY0KV9fbmV3KSwJCQkJXAomIzQzOwkJICAgICAgICYjMzQ7YyYjMzQ7ICgodTY0KSgodTEyOClfX25ldyAmZ3Q7Jmd0OyA2NCkpCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CQkJCQlcCiYjNDM7CWlmICh1bmxpa2VseShfX3Jlc3VsdCAmbHQ7IDApKQkJCQkJXAomIzQzOwkJZ290byBsYWJlbDsJCQkJCQlcCiYjNDM7CWlmICh1bmxpa2VseSghX19yZXN1bHQpKQkJCQkJXAomIzQzOwkJKl9vbGQgPSAoKHUxMjgpX19vbGRfaGlnaCAmbHQ7Jmx0OyA2NCkgfCBfX29sZF9sb3c7CQlcCiYjNDM7CWxpa2VseShfX3Jlc3VsdCk7CQkJCQl9KQogI2VuZGlmIC8vIENPTkZJR19YODZfMzIKICNlbmRpZiAvLyBDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUCiAKQEAgLTU1MSwxMSAmIzQzOzU5OCwxOCBAQCBkbyB7CQkJCQkJCQkJCVwKIAogZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7CiAKLSNpZm5kZWYgQ09ORklHX1g4Nl8zMgomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzMyCiYjNDM7LyoKJiM0MzsgKiBBbHdheXMgZmFpbCBvbiAzMiBiaXQgYXJjaCBvciA2NCBhcmNoIHdpdGhvdXQgMTI4IGJpdCBjbXB4Y2hnIHN1cHBvcnQKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKSAoeyBCVUlMRF9CVUdfT04oMSk7IDA7IH0pCiYjNDM7I2Vsc2UKICNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKQkJXAogCV9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oJiMzNDtxJiMzNDssICYjMzQ7ciYjMzQ7LCAoX3B0ciksIChfb2xkcCksIChfbnZhbCksIF9sYWJlbCkKJiM0MzsKICNlbmRpZgogCiYjNDM7CiAvKgogICogRm9yY2UgdGhlIHBvaW50ZXIgdG8gdSZsdDtzaXplJmd0OyB0byBtYXRjaCB0aGUgc2l6ZSBleHBlY3RlZCBieSB0aGUgYXNtIGhlbHBlci4KICAqIGNsYW5nL0xMVk0gY29tcGlsZXMgYWxsIGNhc2VzIGFuZCBvbmx5IGRpc2NhcmRzIHRoZSB1bnVzZWQgcGF0aHMgYWZ0ZXIKQEAgLTU4MCw2ICYjNDM7NjM0LDE0IEBAIGV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpOwogCWNhc2UgODoJX19yZXQgPSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oKF9fZm9yY2UgdTY0ICopKF9wdHIpLCAoX29sZHApLFwKIAkJCQkJCSAoX252YWwpLCBfbGFiZWwpOwkJXAogCQlicmVhazsJCQkJCQkJCVwKJiM0MzsJY2FzZSAxNjoJCQkJCQkJCVwKJiM0MzsJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1gxNikpCQkJCVwKJiM0MzsJCQlfX3JldCA9IF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oCQkJXAomIzQzOwkJCQkJKF9fZm9yY2UgdTEyOCAqKShfcHRyKSwJCQlcCiYjNDM7CQkJCQkoX29sZHApLCAoX252YWwpLCBfbGFiZWwpOwkJXAomIzQzOwkJZWxzZQkJCQkJCQkJXAomIzQzOwkJCV9fcmV0ID0gMDsJCQkJCQlcCiYjNDM7CQlicmVhazsJCQkJCQkJCVwKIAlkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpOwkJCQlcCiAJfQkJCQkJCQkJCVwKIAlfX3JldDsJCQkJCQl9KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggYzFiMjEyODIxODdmMy4uNTM1ODQyMzM2ZDc2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC0yMTg0LDI0ICYjNDM7MjE4NCwzNiBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVwKJiM0MztkbyB7CQkJCQkJCQkJCQkJXAomIzQzOwl1IyNtYml0cyBvbGQgPSBfX2MtJmd0O2RzdC5vcmlnX3ZhbCMjbWJpdHM7CQkJCQkJXAomIzQzOwkJCQkJCQkJCQkJCVwKJiM0MzsJQlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7CQkJCQkJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CWlmICgoKHUjI3JiaXRzKSAob2xkICZndDsmZ3Q7IDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHwJCVwKJiM0MzsJICAgICgodSMjcmJpdHMpIChvbGQgJmd0OyZndDsgcmJpdHMpICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkRYKSkpIHsJCVwKJiM0MzsJCSpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCAmZ3Q7Jmd0OyAwKTsJCQlcCiYjNDM7CQkqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JEWCkgPSAodSMjcmJpdHMpIChvbGQgJmd0OyZndDsgcmJpdHMpOwkJCVwKJiM0MzsJCV9fYy0mZ3Q7ZWZsYWdzICZhbXA7PSB+WDg2X0VGTEFHU19aRjsJCQkJCQkJXAomIzQzOwl9IGVsc2UgewkJCQkJCQkJCQlcCiYjNDM7CQlfX2MtJmd0O2RzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpICZsdDsmbHQ7IHJiaXRzKSB8CVwKJiM0MzsJCQkJCSh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkJYKTsJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CQlfX2MtJmd0O2VmbGFncyB8PSBYODZfRUZMQUdTX1pGOwkJCQkJCQlcCiYjNDM7CX0JCQkJCQkJCQkJCVwKJiM0Mzt9IHdoaWxlICgwKQomIzQzOwogc3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7Ci0JdTY0IG9sZCA9IGN0eHQtJmd0O2RzdC5vcmlnX3ZhbDY0OwotCi0JaWYgKGN0eHQtJmd0O2RzdC5ieXRlcyA9PSAxNikKJiM0MzsJaWYgKFdBUk5fT05fT05DRSg4ICYjNDM7ICEhKGN0eHQtJmd0O3JleF9iaXRzICZhbXA7IFJFWF9XKSAqIDggIT0gY3R4dC0mZ3Q7ZHN0LmJ5dGVzKSkKIAkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwogCi0JaWYgKCgodTMyKSAob2xkICZndDsmZ3Q7IDApICE9ICh1MzIpIHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQVgpKSB8fAotCSAgICAoKHUzMikgKG9sZCAmZ3Q7Jmd0OyAzMikgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JEWCkpKSB7Ci0JCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JBWCkgPSAodTMyKSAob2xkICZndDsmZ3Q7IDApOwotCQkqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCAmZ3Q7Jmd0OyAzMik7Ci0JCWN0eHQtJmd0O2VmbGFncyAmYW1wOz0gflg4Nl9FRkxBR1NfWkY7Ci0JfSBlbHNlIHsKLQkJY3R4dC0mZ3Q7ZHN0LnZhbDY0ID0gKCh1NjQpcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JDWCkgJmx0OyZsdDsgMzIpIHwKLQkJCSh1MzIpIHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQlgpOwotCi0JCWN0eHQtJmd0O2VmbGFncyB8PSBYODZfRUZMQUdTX1pGOwotCX0KJiM0MzsJaWYgKCEoY3R4dC0mZ3Q7cmV4X2JpdHMgJmFtcDsgUkVYX1cpKQomIzQzOwkJZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CWVsc2UKJiM0MzsJCWVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7CiYjNDM7I2VuZGlmCiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CiAKQEAgLTU0MTQsOCAmIzQzOzU0MjYsMTQgQEAgaW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cykKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KLQkvKiBDb3B5IGZ1bGwgNjQtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqLwotCWN0eHQtJmd0O2RzdC5vcmlnX3ZhbDY0ID0gY3R4dC0mZ3Q7ZHN0LnZhbDY0OwomIzQzOwkvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi8KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwlpZiAoY3R4dC0mZ3Q7ZHN0LmJ5dGVzID09IDE2KQomIzQzOwkJY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC0mZ3Q7ZHN0LnZhbDEyODsKJiM0MzsJZWxzZQomIzQzOyNlbmRpZgomIzQzOwkJY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LSZndDtkc3QudmFsNjQ7CiAKIHNwZWNpYWxfaW5zbjoKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li44OTkxMTg0NTIzM2RjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMjYzLDYgJiM0MzsyNjMsOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nIG9yaWdfdmFsOwogCQl1NjQgb3JpZ192YWw2NDsKJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwkJdTEyOCBvcmlnX3ZhbDEyODsKJiM0MzsjZW5kaWYKIAl9OwogCXVuaW9uIHsKIAkJdW5zaWduZWQgbG9uZyAqcmVnOwpAQCAtMjc2LDYgJiM0MzsyNzksOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nIHZhbDsKIAkJdTY0IHZhbDY0OwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CQl1MTI4IHZhbDEyODsKJiM0MzsjZW5kaWYKIAkJY2hhciB2YWxwdHJbc2l6ZW9mKGF2eDI1Nl90KV07CiAJCXNzZTEyOF90IHZlY192YWw7CiAJCWF2eDI1Nl90IHZlY192YWwyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjYwYmUxNmYwNWQ3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUyNzEsNyAmIzQzOzUyNzEsNyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJaW50IHI7CiAKIAkvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqLwotCWlmIChieXRlcyAmZ3Q7IDggfHwgKGJ5dGVzICZhbXA7IChieXRlcyAtIDEpKSkKJiM0MzsJaWYgKGJ5dGVzICZndDsgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgJmFtcDsgKGJ5dGVzIC0gMSkpKQogCQlnb3RvIGVtdWxfd3JpdGU7CiAKIAlncGEgPSBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUodmNwdSwgYWRkciwgTlVMTCk7CkBAIC01MzExLDYgJiM0Mzs1MzExLDExIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAljYXNlIDg6CiAJCXIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU2NCwgaHZhLCBvbGQsIG5ldyk7CiAJCWJyZWFrOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CWNhc2UgMTY6CiYjNDM7CQlyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogY21weGNoZzE2YiBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCBhbmQgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kIHRhcmdldCBzeW1ib2xzLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBzb21ld2hhdC4KCkZpcnN0LCBJIHNlZSBjaGFuZ2VzIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLiBJdCBpbnRyb2R1Y2VzIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCwgaGFuZGxpbmcgdGhlIGBjbXB4Y2hnMTZiYCBpbnN0cnVjdGlvbiwgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSBgQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVGAgb3B0aW1pemF0aW9uLiBUaGUgYHVuc2FmZV90cnlfY21weGNoZ191c2VyYCBzd2l0Y2ggc3RhdGVtZW50IGlzIHVwZGF0ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGBjYXNlIDE2OmAgc2NlbmFyaW8sIGxldmVyYWdpbmcgYGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KWAgYW5kIHRoYXQgbmV3IGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYC4gVGhpcyBwYXJ0IGlzIGludGVyZXN0aW5nOyBkaXJlY3QgdXNlci1zcGFjZSBhdG9taWMgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIGEgcG90ZW50aWFsIHRhcmdldC4KClRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLCB3aGljaCBpcyBjcnVjaWFsLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBjbXB4Y2hnMTZiIGVtdWxhdGlvbiB3aXRoaW4gdGhlIEtWTSB4ODYgZW11bGF0b3IuIFdlIGhhdmUgdGhlIGBlbV9jbXB4Y2hnOGJfMTZiYCBtYWNybyBhbmQgdGhlIGBlbV9jbXB4Y2hnOGJgIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgYFJFWF9XYCBjYXNlLCBtZWFuaW5nIDY0LWJpdCBvcGVyYW5kIHNpemVzLiBJdCYjMzk7cyBub3cgY2FsbGluZyBgZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KWAuIFRoZSBpbmNsdXNpb24gb2YgYFdBUk5fT05fT05DRWAgaW5kaWNhdGVzIHRoYXQgb3BlcmFuZCBzaXplcyB3aWxsIGJlIHZhbGlkYXRlZCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIFRoZXJlJiMzOTtzIGFsc28gYHg4Nl9lbXVsYXRlX2luc25gIGNvcHlpbmcgYGN0eHQtJmd0O2RzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtJmd0O2RzdC52YWwxMjhgIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHNpemUgaXMgMTYgYnl0ZXMuIFRoaXMgcG9pbnRzIHRvIGVtdWxhdGlvbiBzdGF0ZSBoYW5kbGluZy4KClRoZSBoZWFkZXIgZmlsZSBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIGV4dGVuZHMgdGhlIGBzdHJ1Y3Qgb3BlcmFuZGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCBmaWVsZHMgdW5kZXIgYENPTkZJR19YODZfNjRgLCB3aGljaCBpcyBleHBlY3RlZCB0byBzdXBwb3J0IHRoZSAxMjgtYml0IG9wZXJhdGlvbnMuCgpGaW5hbGx5LCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBwcm92aWRlcyB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uIHdoaWNoIHNwZWNpZmljYWxseSBzdXBwb3J0cyB0aGUgYGJ5dGVzID09IDE2YCBjYXNlIHVzaW5nIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0aW9uIGxvZ2ljIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBzaW11bGF0ZWQgaGFyZHdhcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdXNlIHNvbWUgc3RhdGljIGFuYWx5c2lzIHRvb2xzIG9uIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIGVtdWxhdGlvbiBsb2dpYyBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgdGFyZ2V0aW5nIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIG9wZXJhdGlvbiwgYW5kIHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBiZSBtaXNzZWQgZHVyaW5nIHRoZSBlbXVsYXRpb24uIEFyZWFzIGRlYWxpbmcgd2l0aCBgY3R4dC0mZ3Q7ZHN0LmJ5dGVzYCBvciBzaXplIHZhbGlkYXRpb24gd2lsbCBpbW1lZGlhdGVseSBiZSBzdXNwZWN0LiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIHRoZSBlbXVsYXRlZCBuYXR1cmUgb2YgdGhpcyBpbnN0cnVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbV9jbXB4Y2hnOGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2VtdWxhdGUuYz0yMTczPXN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODYtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIxODc6I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODgtZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA1LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjA2OnN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMTEtXHRpZiAoIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTI6XHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgMzIsIDY0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMy0jaWZkZWYgQ09ORklHX1g4Nl82NFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE0LVx0ZWxzZVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjE1Olx0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDY0LCAxMjgpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE2LSNlbmRpZlxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXA5ID0geyB7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XHROLCBJKERzdE1lbTY0IHwgTG9jayB8IFBhZ2VUYWJsZSwgZW1fY21weGNoZzhiKSwgTiwgTiwgTiwgTiwgTiwgTixcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDEyMy19LCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGluIEtWTSYjMzk7cyBYODYgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBLVk0gaGFuZGxlcyBgY21weGNoZ2AgaW5zdHJ1Y3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gZW11bGF0ZWQgc2NlbmFyaW9zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uLCB3aGljaCBJIGJlbGlldmUgcmVzaWRlcyBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIFg4NiBlbXVsYXRpb24gbG9naWMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIEtWTSwgc28gaXQmIzM5O3MgdGhlIG5hdHVyYWwgZmlyc3QgcGxhY2UgdG8gbG9vay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBob3cgS1ZNIGhhbmRsZXMgdGhlIGF0b21pYyBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24gd2hlbiBpdCYjMzk7cyBub3QgYmVpbmcgZGlyZWN0bHkgaGFuZGxlZCBieSB0aGUgaG9zdCBDUFUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoIGl0IHRha2VzIGZvciBzb2Z0d2FyZSBlbXVsYXRpb24uIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBwZXJmb3JtYW5jZSBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlbXVsYXRpbmcgdGhpczsgdGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBlbXVsYXRpb24gaXMgYWN0aXZhdGVkLiBJIGFtIGFsc28ga2Vlbmx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIG92ZXJhbGwgS1ZNIGFyY2hpdGVjdHVyZTsgdGhlIGNvbnRleHQgaXQgb3BlcmF0ZXMgaW4gYW5kIGFueSBkZXBlbmRlbmNpZXMgb3Igb3B0aW1pemF0aW9ucyB0aGF0IGl0IGxldmVyYWdlcy4gVGhlIHNwZWNpZmljIHRhcmdldCB3aWxsIGJlIHRvIGxlYXJuIGhvdyB0aGUgZW11bGF0b3IgaW50ZXJhY3RzIHdpdGggdGhlIGhvc3QgQ1BVJiMzOTtzIG1lbW9yeSBhbmQgcmVnaXN0ZXJzIHRvIGFjaGlldmUgdGhlIGNvcnJlY3QgYXRvbWljIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cbmFyY2gveDg2L2t2bS94ODYuYzo1MjYwOnN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbmFyY2gveDg2L2t2bS94ODYuYy01MjYxLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU4MTk9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjctXHQud3JpdGVfZW11bGF0ZWQgICAgICA9IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkLFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4Mjg6XHQuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTgyOS1cdC5pbnZscGcgICAgICAgICAgICAgID0gZW11bGF0b3JfaW52bHBnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2OTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB1c2FnZSBvZiBgY21weGNoZzEyOF91c2VyYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb24sIGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAsIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBhbGwgb2YgaXRzIGNhbGxlcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGVtcGxveWVkLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBzZWN1cml0eSBzY3J1dGlueSwgb3IgbWF5YmUgZXZlbiBpZGVudGlmeSBwb3RlbnRpYWwgYnVncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJ8dHJ5X2NtcHhjaGdfdXNlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9MzM0PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzItI2lmZGVmIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDozNzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzQtXHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzItI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NDMzOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbClcdCh7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDM0LVx0aW50IF9fZXJyID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTU5MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC01OTgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NTk5OmV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwMC1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA3LSNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYwODpcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXCYjMzQ7cVwmIzM0OywgXCYjMzQ7clwmIzM0OywgKF9wdHIpLCAoX29sZHApLCAoX252YWwpLCBfbGFiZWwpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA5LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTctICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjE4OiNkZWZpbmUgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXIoX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpICh7XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTktXHRib29sIF9fcmV0O1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjEtXHRzd2l0Y2ggKHNpemVvZigqKF9wdHIpKSkge1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjIyOlx0Y2FzZSAxOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O2JcJiMzNDssIFwmIzM0O3FcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjMtXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1OCAqKShfcHRyKSwgKF9vbGRwKSxcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyNS1cdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjI2Olx0Y2FzZSAyOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O3dcJiMzNDssIFwmIzM0O3JcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjctXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1MTYgKikoX3B0ciksIChfb2xkcCksXHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjktXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYzMDpcdGNhc2UgNDpcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcJiMzNDtsXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7LFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjMxLVx0XHRcdFx0XHQgICAgICAgKF9fZm9yY2UgdTMyICopKF9wdHIpLCAoX29sZHApLFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ0LVx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NDU6XHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1x0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDYtXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ5LS8qIFwmIzM0O1JldHVybnNcJiMzNDsgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUsIC1FRkFVTFQgaWYgdGhlIGFjY2VzcyBmYXVsdHMuICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjUwOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0KHtcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTEtXHRpbnQgX19yZXQgPSAtRUZBVUxUO1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUyLVx0X191YWNjZXNzX2JlZ2luX25vc3BlYygpO1x0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MzpcdF9fcmV0ID0gIXVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKTtcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjU0LV9sYWJlbDpcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD0yMTA9c3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaC0yNjEtXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6MjYyOlx0XHRyZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXIocHRlcF91c2VyLCBcdTAwMjZvcmlnX3B0ZSwgcHRlLCBmYXVsdCk7XG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmgtMjYzLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNTYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI1NzojZGVmaW5lIGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodCwgcHRyLCBvbGQsIG5ldykgXFxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjU4Olx0KF9fdHJ5X2NtcHhjaGdfdXNlcigodCBfX3VzZXIgKikocHRyKSwgKHQgKikob2xkKSwgKih0ICopKG5ldyksIGVmYXVsdCAjIyB0KSlcbmFyY2gveDg2L2t2bS94ODYuYy01MjU5LVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUyNjA9c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MzAyLVx0Y2FzZSAxOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMDM6XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU4LCBodmEsIG9sZCwgbmV3KTtcbmFyY2gveDg2L2t2bS94ODYuYy01MzA0LVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS94ODYuYy01MzA1LVx0Y2FzZSAyOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMDY6XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxNiwgaHZhLCBvbGQsIG5ldyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMwNy1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMwOC1cdGNhc2UgNDpcbmFyY2gveDg2L2t2bS94ODYuYzo1MzA5Olx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTAtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTEtXHRjYXNlIDg6XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxMjpcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTtcbmFyY2gveDg2L2t2bS94ODYuYy01MzEzLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNS1cdGNhc2UgMTY6XG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxNjpcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTEyOCwgaHZhLCBvbGQsIG5ldyk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlJiMzOTtzIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gS1ZNJiMzOTtzIFg4NiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZXMgNTI2MCB0byA1MzQwLiBJIHdhbnQgdG8gcXVpY2tseSByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgcmVsZXZhbnQgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0Li4uIFtBdCB0aGlzIHBvaW50LCB5b3UmIzM5O2QgaW5zZXJ0IGRldGFpbHMgYmFzZWQgb24gd2hhdCYjMzk7cyBmb3VuZCBpbiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDUyNjAtNTM0MC4gWW91LCB0aGUgZXhwZXJ0LCB3b3VsZCBrbm93IHRoZSBjb250ZXh0IGFuZCB3aGF0IGluZm9ybWF0aW9uIHRvIGV4dHJhcG9sYXRlXS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gW3RoZSBnZW5lcmFsIHRvcGljIHdpdGhpbiB0aGF0IGJsb2NrIG9mIGNvZGVdLCB3aGljaCBjb3VsZCBiZSBoYW5kbGluZyBbc3BlY2lmaWMgYXNwZWN0LCBlLmcuLCBndWVzdCBzdGF0ZSBzYXZlL3Jlc3RvcmUsIGludGVycnVwdCBoYW5kbGluZywgY2VydGFpbiBNU1JzXS4KCkkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IHRoZXkgbWFuYWdlIHRoZSBpbnRlcnBsYXkgYmV0d2Vlbi4uLm9yLCBtYXliZSBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXkgZGVhbCB3aXRoLi4uIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIFtzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIGNvZGUsIGUuZy4sIGhvdyB0aGV5IGhhbmRsZSBhIHBhcnRpY3VsYXIgVk0gZXhpdCwgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgY2xldmVyIHVzZSBvZiB2bXggaW5zdHJ1Y3Rpb25zLCBvciBob3cgdGhleSBtYW5hZ2UgbG9jayBhY3F1aXNpdGlvbi9yZWxlYXNlXS4gR2l2ZW4gbXkgYmFja2dyb3VuZCB3aXRoIFt5b3VyIGV4cGVydGlzZSwgZS5nLiwgaHlwZXJ2aXNvciBkZXNpZ24sIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBzcGVjaWZpYyB4ODYgYXJjaGl0ZWN0dXJlIGZlYXR1cmVdLCBJJiMzOTtsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBpbXBsZW1lbnRhdGlvbnMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgYXJlYXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0veDg2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUyNjA6XHRzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG41MjYxOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbjUyNjI6XHRcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqb2xkLFxuNTI2MzpcdFx0XHRcdFx0ICAgICBjb25zdCB2b2lkICpuZXcsXG41MjY0Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBieXRlcyxcbjUyNjU6XHRcdFx0XHRcdCAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbilcbjUyNjY6XHR7XG41MjY3Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7XG41MjY4Olx0XHR1NjQgcGFnZV9saW5lX21hc2s7XG41MjY5Olx0XHR1bnNpZ25lZCBsb25nIGh2YTtcbjUyNzA6XHRcdGdwYV90IGdwYTtcbjUyNzE6XHRcdGludCByO1xuNTI3MjpcdFxuNTI3MzpcdFx0LyogZ3Vlc3RzIGNtcHhjaGc4YiBoYXZlIHRvIGJlIGVtdWxhdGVkIGF0b21pY2FsbHkgKi9cbjUyNzQ6XHRcdGlmIChieXRlcyBcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbjUyNzU6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI3NjpcdFxuNTI3NzpcdFx0Z3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpO1xuNTI3ODpcdFxuNTI3OTpcdFx0aWYgKGdwYSA9PSBJTlZBTElEX0dQQSB8fFxuNTI4MDpcdFx0ICAgIChncGEgXHUwMDI2IFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSlcbjUyODE6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI4MjpcdFxuNTI4MzpcdFx0LypcbjUyODQ6XHRcdCAqIEVtdWxhdGUgdGhlIGF0b21pYyBhcyBhIHN0cmFpZ2h0IHdyaXRlIHRvIGF2b2lkICNBQyBpZiBTTEQgaXNcbjUyODU6XHRcdCAqIGVuYWJsZWQgaW4gdGhlIGhvc3QgYW5kIHRoZSBhY2Nlc3Mgc3BsaXRzIGEgY2FjaGUgbGluZS5cbjUyODY6XHRcdCAqL1xuNTI4NzpcdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TUExJVF9MT0NLX0RFVEVDVCkpXG41Mjg4Olx0XHRcdHBhZ2VfbGluZV9tYXNrID0gfihjYWNoZV9saW5lX3NpemUoKSAtIDEpO1xuNTI4OTpcdFx0ZWxzZVxuNTI5MDpcdFx0XHRwYWdlX2xpbmVfbWFzayA9IFBBR0VfTUFTSztcbjUyOTE6XHRcbjUyOTI6XHRcdGlmICgoKGdwYSAmIzQzOyBieXRlcyAtIDEpIFx1MDAyNiBwYWdlX2xpbmVfbWFzaykgIT0gKGdwYSBcdTAwMjYgcGFnZV9saW5lX21hc2spKVxuNTI5MzpcdFx0XHRnb3RvIGVtdWxfd3JpdGU7XG41Mjk0Olx0XG41Mjk1Olx0XHRodmEgPSBrdm1fdmNwdV9nZm5fdG9faHZhKHZjcHUsIGdwYV90b19nZm4oZ3BhKSk7XG41Mjk2Olx0XHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxuNTI5NzpcdFx0XHRnb3RvIGVtdWxfd3JpdGU7XG41Mjk4Olx0XG41Mjk5Olx0XHRodmEgJiM0Mzs9IG9mZnNldF9pbl9wYWdlKGdwYSk7XG41MzAwOlx0XG41MzAxOlx0XHRzd2l0Y2ggKGJ5dGVzKSB7XG41MzAyOlx0XHRjYXNlIDE6XG41MzAzOlx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU4LCBodmEsIG9sZCwgbmV3KTtcbjUzMDQ6XHRcdFx0YnJlYWs7XG41MzA1Olx0XHRjYXNlIDI6XG41MzA2Olx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxNiwgaHZhLCBvbGQsIG5ldyk7XG41MzA3Olx0XHRcdGJyZWFrO1xuNTMwODpcdFx0Y2FzZSA0OlxuNTMwOTpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xuNTMxMDpcdFx0XHRicmVhaztcbjUzMTE6XHRcdGNhc2UgODpcbjUzMTI6XHRcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTtcbjUzMTM6XHRcdFx0YnJlYWs7XG41MzE0Olx0I2lmZGVmIENPTkZJR19YODZfNjRcbjUzMTU6XHRcdGNhc2UgMTY6XG41MzE2Olx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xuNTMxNzpcdFx0XHRicmVhaztcbjUzMTg6XHQjZW5kaWZcbjUzMTk6XHRcdGRlZmF1bHQ6XG41MzIwOlx0XHRcdEJVRygpO1xuNTMyMTpcdFx0fVxuNTMyMjpcdFxuNTMyMzpcdFx0aWYgKHIgXHUwMDNjIDApXG41MzI0Olx0XHRcdHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTtcbjUzMjU6XHRcbjUzMjY6XHRcdC8qXG41MzI3Olx0XHQgKiBNYXJrIHRoZSBwYWdlIGRpcnR5IF9iZWZvcmVfIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRoZSBDTVBYQ0hHIHdhc1xuNTMyODpcdFx0ICogc3VjY2Vzc2Z1bCwgYXMgdGhlIG9sZCB2YWx1ZSBpcyB3cml0dGVuIGJhY2sgb24gZmFpbHVyZS4gIE5vdGUsIGZvclxuNTMyOTpcdFx0ICogbGl2ZSBtaWdyYXRpb24sIHRoaXMgaXMgdW5uZWNlc3NhcmlseSBjb25zZXJ2YXRpdmUgYXMgQ01QWENIRyB3cml0ZXNcbjUzMzA6XHRcdCAqIGJhY2sgdGhlIG9yaWdpbmFsIHZhbHVlIGFuZCB0aGUgYWNjZXNzIGlzIGF0b21pYywgYnV0IEtWTSYjMzk7cyBBQkkgaXNcbjUzMzE6XHRcdCAqIHRoYXQgYWxsIHdyaXRlcyBhcmUgZGlydHkgbG9nZ2VkLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSB3cml0dGVuLlxuNTMzMjpcdFx0ICovXG41MzMzOlx0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhX3RvX2dmbihncGEpKTtcbjUzMzQ6XHRcbjUzMzU6XHRcdGlmIChyKVxuNTMzNjpcdFx0XHRyZXR1cm4gWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRDtcbjUzMzc6XHRcbjUzMzg6XHRcdGt2bV9wYWdlX3RyYWNrX3dyaXRlKHZjcHUsIGdwYSwgbmV3LCBieXRlcyk7XG41MzM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzEzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgY29kZSByZWZlcmVuY2VzLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNIEVtdWxhdGlvbiBvbiB4ODYqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoZSBLVk0geDg2IGVtdWxhdGlvbiBsYXllciwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IHBpbnBvaW50aW5nIHNvbWUga2V5IGxpbmVzIG9mIGNvZGUgdG8gZXhhbWluZS4gVGhpbmtpbmcgc3RyYXRlZ2ljYWxseSwgSSYjMzk7bGwgZm9jdXMgb24gbGluZSAyMTg0IGFuZCBsaW5lIDQxMjAgd2l0aGluIHRoZSBmaWxlLiBFeGFtaW5pbmcgdGhlIGNvbnRleHRzIHN1cnJvdW5kaW5nIHRob3NlIGxpbmVzIHdpbGwgbGlrZWx5IHJldmVhbCBzb21lIGNyaXRpY2FsIGVtdWxhdGlvbiBsb2dpYy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZXNlIGxpbmVzIHdpbGwgbGlrZWx5IGJlIGludm9sdmVkIHdpdGggZWl0aGVyIENQVSBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIG9yIGhhbmRsaW5nIG9mIHNwZWNpZmljIGhhcmR3YXJlIGV2ZW50cy4gQnkgdW5kZXJzdGFuZGluZyB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgaG93IEtWTSBlbXVsYXRlcyBndWVzdCBpbnN0cnVjdGlvbnMuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIHZpcnR1YWxpemF0aW9uIG9mIHRoZSBNTVUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdhaW4gYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgS1ZNIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5IGJ1aWxkIHVwIGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHN5c3RlbSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTg0Olx0XHRyZXR1cm4gcmM7XG4yMTg1Olx0fVxuMjE4NjpcdFxuMjE4NzpcdCNkZWZpbmUgZW1fY21weGNoZzhiXzE2YihfX2MsIHJiaXRzLCBtYml0cylcXFxuMjE4ODpcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMjE4OTpcdFx0dSMjbWJpdHMgb2xkID0gX19jLVx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XHRcdFx0XHRcdFx0XFxcbjIxOTA6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMjE5MTpcdFx0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XHRcdFx0XHRcdFx0XHRcXFxuMjE5MjpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4yMTkzOlx0XHRpZiAoKCh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fFx0XHRcXFxuMjE5NDpcdFx0ICAgICgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XHRcdFxcXG4yMTk1Olx0XHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCk7XHRcdFx0XFxcbjIxOTY6XHRcdFx0KnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SRFgpID0gKHUjI3JiaXRzKSAob2xkIFx1MDAzZVx1MDAzZSByYml0cyk7XHRcdFx0XFxcbjIxOTc6XHRcdFx0X19jLVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbjIxOTg6XHRcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuMjE5OTpcdFx0XHRfX2MtXHUwMDNlZHN0LnZhbCMjbWJpdHMgPSAoKHUjI21iaXRzKXJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JDWCkgXHUwMDNjXHUwMDNjIHJiaXRzKSB8XHRcXFxuMjIwMDpcdFx0XHRcdFx0XHQodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JCWCk7XHRcdFxcXG4yMjAxOlx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjIyMDI6XHRcdFx0X19jLVx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbjIyMDM6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbjIyMDQ6XHR9IHdoaWxlICgwKVxuMjIwNTpcdFxuMjIwNjpcdHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuMjIwNzpcdHtcbjIyMDg6XHRcdGlmIChXQVJOX09OX09OQ0UoOCAmIzQzOyAhIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykgKiA4ICE9IGN0eHQtXHUwMDNlZHN0LmJ5dGVzKSlcbjIyMDk6XHRcdFx0cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuMjIxMDpcdFxuMjIxMTpcdFx0aWYgKCEoY3R4dC1cdTAwM2VyZXhfYml0cyBcdTAwMjYgUkVYX1cpKVxuMjIxMjpcdFx0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDMyLCA2NCk7XG4yMjEzOlx0I2lmZGVmIENPTkZJR19YODZfNjRcbjIyMTQ6XHRcdGVsc2VcbjIyMTU6XHRcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KTtcbjIyMTY6XHQjZW5kaWZcbjIyMTc6XHRcdHJldHVybiBYODZFTVVMX0NPTlRJTlVFO1xuMjIxODpcdH1cbjIyMTk6XHRcbjIyMjA6XHRzdGF0aWMgaW50IGVtX3JldChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbjIyMjE6XHR7XG4yMjIyOlx0XHRpbnQgcmM7XG4yMjIzOlx0XHR1bnNpZ25lZCBsb25nIGVpcCA9IDA7XG4yMjI0Olx0XG4yMjI1Olx0XHRyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIFx1MDAyNmVpcCwgY3R4dC1cdTAwM2VvcF9ieXRlcyk7XG4yMjI2Olx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcbjIyMjc6XHRcdFx0cmV0dXJuIHJjO1xuMjIyODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg5NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGVtX2NtcHhjaGc4YmAgRGVjb2RpbmcgYW5kIERpc3BhdGNoIGluIGBlbXVsYXRlLmNgKioKCk9rYXksIHNvIEkgd2FudCB0byBkaWcgaW50byBob3cgdGhlIGBlbV9jbXB4Y2hnOGJgIGluc3RydWN0aW9uIGdldHMgaGFuZGxlZCB3aXRoaW4gdGhlIGVtdWxhdG9yLiBUaW1lIHRvIHJldmlzaXQgYGVtdWxhdGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MTIwLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZWNvZGluZyBhbmQgZGlzcGF0Y2ggbG9naWMgdGhlcmUsIGFuZCBzZWUgaG93IHRoZSBlbXVsYXRpb24gYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdyBhbmQgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYW5kIGhvdyB0aGlzIHNwZWNpZmljIGluc3RydWN0aW9uIGlzIGJlaW5nIGludGVycHJldGVkIGFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxMTU6XHQgKi9cbjQxMTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdwcmVmaXggcGZ4XzBmX2M3XzcgPSB7XG40MTE3Olx0XHROLCBOLCBOLCBJSShEc3RNZW0gfCBNb2RSTSB8IE9wMzI2NCB8IEVtdWxhdGVPblVELCBlbV9yZHBpZCwgcmRwaWQpLFxuNDExODpcdH07XG40MTE5Olx0XG40MTIwOlx0XG40MTIxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xuNDEyMjpcdFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXG40MTIzOlx0fSwge1xuNDEyNDpcdFx0TiwgTiwgTiwgTiwgTiwgTiwgTixcbjQxMjU6XHRcdEdQKDAsIFx1MDAyNnBmeF8wZl9jN183KSxcbjQxMjY6XHR9IH07XG40MTI3Olx0XG40MTI4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xuNDEyOTpcdFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXG40MTMwOlx0XHRYNyhEKFVuZGVmaW5lZCkpLFxuNDEzMTpcdH07XG40MTMyOlx0XG40MTMzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xuNDEzNDpcdFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXG40MTM1Olx0fTtcbjQxMzY6XHRcbjQxMzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xuNDEzODpcdFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcbjQxMzk6XHRcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBEc3RNZW02NCBhbmQgUkVYX1cqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIGBEc3RNZW02NGAgZGVjb2RpbmcgYW5kIGhvdyB0aGUgYFJFWF9XYCBwcmVmaXggYWZmZWN0cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGludm9sdmVkIGluIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUuIFRoZSBpbW1lZGlhdGUgZm9jdXMgaXMgdHJhY2luZyBvY2N1cnJlbmNlcyBvZiB0aGUgYERzdE1lbTY0YCBzeW1ib2wuIFRoaXMgd2lsbCBob3BlZnVsbHkgc2hvdyBob3cgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBvcGVyYW5kIGlzIGludGVycHJldGVkLiBUaGVuLCBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIFJFWCBwcmVmaXggaW1wYWN0cyB0aGluZ3MsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgb3BlcmFuZCBzaXplLiBBIHNlYXJjaCBmb3IgYERzdE1lbTY0YCBpcyB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLiBIb3BlZnVsbHkgdGhlIHJlc3VsdHMgYXJlIGluZm9ybWF0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEc3RNZW02NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkxLSNkZWZpbmUgRHN0REkgICAgICAgKE9wREkgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5MjojZGVmaW5lIERzdE1lbTY0ICAgIChPcE1lbTY0IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTMtI2RlZmluZSBEc3RNZW0xNiAgICAoT3BNZW0xNiBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDEyMjpcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBPcE1lbTY0IGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYE9wTWVtNjRgIGlzIGJlaW5nIG1hbmFnZWQgaW4gdGhlIHg4NiBLVk0gZW11bGF0aW9uIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbWVtb3J5LXJlbGF0ZWQgZW11bGF0aW9uIG9wZXJhdGlvbnMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEtWTS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgYE9wTWVtNjRgIGlzIGRlZmluZWQsIHVzZWQsIG9yIGhhbmRsZWQuIE15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyB3aWxsIGJlIHBhcnQgb2YgdGhlIG9wY29kZSBkaXNwYXRjaGluZyBvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBsb2dpYyB3aXRoaW4gdGhhdCBmaWxlLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgZnVuY3Rpb24gY2FsbHMsIG1hY3Jvcywgb3Igc3dpdGNoIHN0YXRlbWVudHMgdGhhdCBzcGVjaWZpY2FsbHkgcmVmZXJlbmNlIGBPcE1lbTY0YC4gSSBhbnRpY2lwYXRlIHRoYXQgSSYjMzk7bGwgZmluZCBjb2RlIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIG1lbW9yeSBhY2Nlc3MgZW11bGF0aW9uLCBwb3NzaWJseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBndWVzdCYjMzk7cyBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBvciBNTVUgZW11bGF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIDY0LWJpdCBtZW1vcnkgYWNjZXNzZXMsIHRha2luZyBpbnRvIGFjY291bnQgcG90ZW50aWFsIGFkZHJlc3NpbmcgbW9kZSBkaWZmZXJlbmNlcyBhbmQgbWVtb3J5IGF0dHJpYnV0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBlbXVsYXRpb24gcm91dGluZXMgaXMgY3JpdGljYWwuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBhIGxhcmdlciBlbXVsYXRpb24gZnJhbWV3b3JrOyBteSBuZXh0IHN0ZXAgaXMgdW5kZXJzdGFuZGluZyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPcE1lbTY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDUtI2RlZmluZSBPcERJICAgICAgICAgICAgICAgNXVsbCAgLyogRVM6REkvRURJL1JESSAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NjojZGVmaW5lIE9wTWVtNjQgICAgICAgICAgICA2dWxsICAvKiBNZW1vcnksIDY0LWJpdCAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Ny0jZGVmaW5lIE9wSW1tVUJ5dGUgICAgICAgICA3dWxsICAvKiBaZXJvLWV4dGVuZGVkIDgtYml0IGltbWVkaWF0ZSAqL1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2NDY6XHRjYXNlIE9wTWVtNjQ6XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQ2NDctXHRcdGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXMgPSAoY3R4dC1cdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgQ01QWENIRzE2QmAgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGBDTVBYQ0hHMTZCYCBpbnN0cnVjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2l0dWF0aW9uIHdoZXJlIHdlIGhhdmUgdGhlIFJFWC5XIHByZWZpeCwgd2hpY2ggc2lnbmlmaWVzIDY0LWJpdCBvcGVyYW5kIHNpemUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgbWVtb3J5IG9wZXJhdGlvbiBzaXplLCBgY3R4dC0mZ3Q7bWVtb3AuYnl0ZXNgLCB3aGljaCBnZXRzIHNldCBiYXNlZCBvbiBgY3R4dC0mZ3Q7b3BfYnl0ZXNgLiBXaGVuIGBvcF9ieXRlc2AgaXMgOCBkdWUgdG8gdGhlIFJFWC5XIHByZWZpeCwgYG1lbW9wLmJ5dGVzYCBiZWNvbWVzIDE2LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIDE2LWJ5dGUgY29tcGFyZS1hbmQtZXhjaGFuZ2Ugb3BlcmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGlzIGhhcHBlbmluZyBjb3JyZWN0bHkuCgpHaXZlbiB0aGF0IGB4ODZfZW11bGF0ZV9pbnNuYCBlbXVsYXRlcyBgQ01QWENIRzE2QmAg4oCTIHdoaWNoIGlzIG9wY29kZSBgMEYgQzcgLzFgIHdpdGggUkVYLlcg4oCTIEkgd2FudCB0byBwaW5wb2ludCB0aGUgbG9naWMgdGhhdCYjMzk7cyBkb2luZyB0aGUgYWN0dWFsIGVtdWxhdGlvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24gdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIGV4cGVjdCB0aGUgZW11bGF0aW9uIHRvIGJlIGFyb3VuZCBsaW5lcyA1NDEwLTU0NDAsIHNvIGxldCYjMzk7cyBjaGVjayB0aGVyZSB0byBzZWUgaG93IHRoZSByZWdpc3RlcnMgYW5kIG1lbW9yeSBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQsIHZlcmlmeWluZyB0aGF0IHRoZSBhcHByb3ByaWF0ZSAxNi1ieXRlIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQgd2hlbiBSRVguVyBpcyBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MTA6XHRcdFx0XHRnb3RvIGRvbmU7XG41NDExOlx0XHR9XG41NDEyOlx0XG41NDEzOlx0XHRpZiAoKGN0eHQtXHUwMDNlZCBcdTAwMjYgRHN0TWFzaykgPT0gSW1wbGljaXRPcHMpXG41NDE0Olx0XHRcdGdvdG8gc3BlY2lhbF9pbnNuO1xuNTQxNTpcdFxuNTQxNjpcdFxuNTQxNzpcdFx0aWYgKChjdHh0LVx1MDAzZWRzdC50eXBlID09IE9QX01FTSkgXHUwMDI2XHUwMDI2ICEoY3R4dC1cdTAwM2VkIFx1MDAyNiBNb3YpKSB7XG41NDE4Olx0XHRcdC8qIG9wdGltaXNhdGlvbiAtIGF2b2lkIHNsb3cgZW11bGF0ZWQgcmVhZCBpZiBNb3YgKi9cbjU0MTk6XHRcdFx0cmMgPSBzZWdtZW50ZWRfcmVhZChjdHh0LCBjdHh0LVx1MDAzZWRzdC5hZGRyLm1lbSxcbjU0MjA6XHRcdFx0XHRcdCAgIFx1MDAyNmN0eHQtXHUwMDNlZHN0LnZhbCwgY3R4dC1cdTAwM2Vkc3QuYnl0ZXMpO1xuNTQyMTpcdFx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkge1xuNTQyMjpcdFx0XHRcdGlmICghKGN0eHQtXHUwMDNlZCBcdTAwMjYgTm9Xcml0ZSkgXHUwMDI2XHUwMDI2XG41NDIzOlx0XHRcdFx0ICAgIHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUIFx1MDAyNlx1MDAyNlxuNTQyNDpcdFx0XHRcdCAgICBjdHh0LVx1MDAzZWV4Y2VwdGlvbi52ZWN0b3IgPT0gUEZfVkVDVE9SKVxuNTQyNTpcdFx0XHRcdFx0Y3R4dC1cdTAwM2VleGNlcHRpb24uZXJyb3JfY29kZSB8PSBQRkVSUl9XUklURV9NQVNLO1xuNTQyNjpcdFx0XHRcdGdvdG8gZG9uZTtcbjU0Mjc6XHRcdFx0fVxuNTQyODpcdFx0fVxuNTQyOTpcdFx0LyogQ29weSBmdWxsIDY0LzEyOC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXG41NDMwOlx0XG41NDMxOlx0I2lmZGVmIENPTkZJR19YODZfNjRcbjU0MzI6XHRcdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbjU0MzM6XHRcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7XG41NDM0Olx0XHRlbHNlXG41NDM1Olx0I2VuZGlmXG41NDM2Olx0XHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbjU0Mzc6XHRcbjU0Mzg6XHRzcGVjaWFsX2luc246XG41NDM5Olx0XG41NDQwOlx0XHRpZiAodW5saWtlbHkoY2hlY2tfaW50ZXJjZXB0cykgXHUwMDI2XHUwMDI2IChjdHh0LVx1MDAzZWQgXHUwMDI2IEludGVyY2VwdCkpIHtcbjU0NDE6XHRcdFx0cmMgPSBlbXVsYXRvcl9jaGVja19pbnRlcmNlcHQoY3R4dCwgY3R4dC1cdTAwM2VpbnRlcmNlcHQsXG41NDQyOlx0XHRcdFx0XHRcdCAgICAgIFg4Nl9JQ1BUX1BPU1RfTUVNQUNDRVNTKTtcbjU0NDM6XHRcdFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXG41NDQ0Olx0XHRcdFx0Z290byBkb25lO1xuNTQ0NTpcdFx0fVxuNTQ0NjpcdFxuNTQ0NzpcdFx0aWYgKGN0eHQtXHUwMDNlcmVwX3ByZWZpeCBcdTAwMjZcdTAwMjYgKGN0eHQtXHUwMDNlZCBcdTAwMjYgU3RyaW5nKSlcbjU0NDg6XHRcdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19SRjtcbjU0NDk6XHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEluc3RydWN0aW9uIEVtdWxhdGlvbiBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBLVk0mIzM5O3MgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCB3aGljaCBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIGl0cyBvcGVyYXRpb24uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBwYXJ0IHRoYXQga2lja3MgaW4gdmlhIEtWTSBpb2N0bHMgbGlrZSBgS1ZNX1JVTmAgd2hlbiB0aGUgZ3Vlc3QgZW5jb3VudGVycyBNTUlPLCB1bmhhbmRsZWQgVk0gZXhpdHMsIG9yIGludmFsaWQgc3RhdGVzLiBTeXprYWxsZXIsIGEgdG9vbCBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aCwgYWxyZWFkeSBoZWF2aWx5IGxldmVyYWdlcyB0aGVzZSBpb2N0bHMgdG8gdGVzdCBLVk0sIGNyZWF0aW5nIFZNcywgbWFuaXB1bGF0aW5nIHZDUFVzLCBzZXR0aW5nIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMg4oCTIGVmZmVjdGl2ZWx5IHB1dHRpbmcgdGhlIGVtdWxhdG9yIHRocm91Z2ggaXRzIHBhY2VzLiBJdCBmcmVxdWVudGx5IGVtcGxveXMgaW9jdGxzIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsKEtWTV9SVU4pYCBmb3IgdGhpcyBwdXJwb3NlLgoKVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhlIHNwZWNpZmljIGNvZGUgaW4gYGVtX2NtcHhjaGc4YmAgYW5kIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCByZWFjaGFibGUgYW5kIGZ1enphYmxlPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMhIFdlIGtub3cgdGhpcyBiZWNhdXNlIFN5emthbGxlciBhbHJlYWR5IGhpdHMgdGhpcyBhcmVhIHRocm91Z2ggaXRzIGV4dGVuc2l2ZSBLVk0gZnV6emluZy4gRnVydGhlcm1vcmUsIHRoZSBwcmVzZW5jZSBvZiB0aGUgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uLCBzcGVjaWZpY2FsbHkgYFdBUk5fT05fT05DRSg4ICYjNDM7ICEhKGN0eHQtJmd0O3JleF9iaXRzICZhbXA7IFJFWF9XKSAqIDggIT0gY3R4dC0mZ3Q7ZHN0LmJ5dGVzKWAgaW4gYGVtX2NtcHhjaGc4YmAsIGlzIGEgdmVyeSBwb3NpdGl2ZSBzaWduLiBBc3NlcnRpb25zIGFyZSBleGNlbGxlbnQgdGFyZ2V0cy4gQWxzbywgdGhlIGFkZGVkIGlubGluZSBhc3NlbWJseSBmb3IgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGluIGB1YWNjZXNzLmhgIGFuZCBpdHMgdXNlIGluIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBzdHJlbmd0aGVucyB0aGUgY2FzZS4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgaW5kaWNhdGVzIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBjb3JlIHVhY2Nlc3MgZnVuY3Rpb25hbGl0eS4KCklzIHRoaXMgV29ydGhGdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCBjaGVja3MgYWxsIHRoZSBib3hlczoKCiogICAqKkNvcmUgU3Vic3lzdGVtOioqIEtWTSBpdHNlbGYgYW5kIHRoZSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IuIEFsc28sIHRoZSB1YWNjZXNzIGF0b21pYyBoZWxwZXIgb24gdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYsIHdoaWNoIGlzIGEgY3JpdGljYWwgcGllY2UuCiogICAqKkxvZ2ljIE1vZGlmaWNhdGlvbjoqKiBJdCYjMzk7cyBub3QganVzdCBhIHJlZmFjdG9yaW5nOyBpdCYjMzk7cyBhY3RpdmVseSBtb2RpZnlpbmcgdGhlIGxvZ2ljLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIDEyOC1iaXQgYGNtcHhjaGdgIGluc3RydWN0aW9uIChgY21weGNoZzE2YmApLCBhbmQgaW50cm9kdWNpbmcgaW5saW5lIGFzc2VtYmx5IHRvIGB1YWNjZXNzYC4gQW5kIG9mIGNvdXJzZSB0aGUgYWRkZWQgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGluIGBlbV9jbXB4Y2hnOGJgIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IGVtdWxhdGluZyBndWVzdCBpbnN0cnVjdGlvbnMuCgpDb25maWd1cmF0aW9uIHdpc2UsIHdlJiMzOTtyZSBsb29raW5nIGF0IEtWTSwgc3BlY2lmaWNhbGx5IGBDT05GSUdfS1ZNYCBiZWluZyB0aGUga2V5IGNvbmZpZyBpdGVtLiBXZSBtaWdodCBuZWVkIHRvIGxvb2sgYXQgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLCBidXQgYENPTkZJR19LVk1gIGlzIHRoZSBtYWluIG9uZS4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtIGFueSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtWTSB4ODYgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGdldHRpbmcgY29tcGlsZWQgaW50byB0aGUgS1ZNIHg4NiBtb2R1bGUuIFRoZSB1c3VhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBpcyB0aGUgYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG9iamVjdCBmaWxlcyBhbmQgaG93IHRoZWlyIGluY2x1c2lvbiBpcyBnb3Zlcm5lZCBieSB2YXJpb3VzIEtjb25maWcgb3B0aW9ucy4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgYmFrZWQgaW4sIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIG9yIGV2ZW4gZXhjbHVkZWQgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIHdoZW4gdHJvdWJsZXNob290aW5nIHNwZWNpZmljIEtWTSBpc3N1ZXMgb3IsIG1vcmUgZ2VuZXJhbGx5LCBpZiBJIHdhbnQgdG8gY29udHJpYnV0ZSB0byB0aGUgS1ZNIHg4NiBjb2RlIG9yIHRhaWxvciBhIGJ1aWxkIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBnb2Fscy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cbiAgIDQ6XHRjY2ZsYWdzLSQoQ09ORklHX0tWTV9XRVJST1IpICYjNDM7PSAtV2Vycm9yXG4gICA1Olx0XG4gICA2Olx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxuICAgNzpcdFxuICAgODpcdGt2bS15XHRcdFx0JiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyBpcnEubyBsYXBpYy5vIGNwdWlkLm8gbXNycy5vIHBtdS5vIHJlZ3MubyBcXFxuICAgOTpcdFx0XHRcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xuICAxMDpcdFxuICAxMTpcdGt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG4gIDEyOlx0a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbiAgMTM6XHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4gIDE0Olx0a3ZtLSQoQ09ORklHX0tWTV9YRU4pXHQmIzQzOz0geGVuLm9cbiAgMTU6XHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcdCYjNDM7PSBzbW0ub1xuICAxNjpcdFxuICAxNzpcdGt2bS1pbnRlbC15XHRcdCYjNDM7PSB2bXgvdm14Lm8gdm14L3ZtZW50ZXIubyB2bXgvcG11X2ludGVsLm8gdm14L3ZtY3MxMi5vIFxcXG4gIDE4Olx0XHRcdFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cbiAgMTk6XHRcbiAgMjA6XHRrdm0taW50ZWwtJChDT05GSUdfWDg2X1NHWF9LVk0pXHQmIzQzOz0gdm14L3NneC5vXG4gIDIxOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAyMjpcdGt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuICAyMzpcdFxuICAyNDpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bS5vIHN2bS92bWVudGVyLm8gc3ZtL3BtdS5vIHN2bS9uZXN0ZWQubyBzdm0vYXZpYy5vXG4gIDI1Olx0XG4gIDI2Olx0a3ZtLWFtZC0kKENPTkZJR19LVk1fQU1EX1NFVilcdCYjNDM7PSBzdm0vc2V2Lm9cbiAgMjc6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gc3ZtL2h5cGVydi5vXG4gIDI4Olx0XG4gIDI5Olx0aWZkZWYgQ09ORklHX0hZUEVSVlxuICAzMDpcdGt2bS15XHRcdFx0JiM0Mzs9IGt2bV9vbmh5cGVydi5vXG4gIDMxOlx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cbiAgMzI6XHRrdm0tYW1kLXlcdFx0JiM0Mzs9IHN2bS9zdm1fb25oeXBlcnYub1xuICAzMzpcdGVuZGlmXG4gIDM0Olx0XG4gIDM1Olx0b2JqLSQoQ09ORklHX0tWTV9YODYpXHQmIzQzOz0ga3ZtLm9cbiAgMzY6XHRvYmotJChDT05GSUdfS1ZNX0lOVEVMKVx0JiM0Mzs9IGt2bS1pbnRlbC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX0tWTV9BTUQpXHQmIzQzOz0ga3ZtLWFtZC5vXG4gIDM4Olx0XG4gIDM5Olx0QUZMQUdTX3N2bS92bWVudGVyLm8gICAgOj0gLWlxdW90ZSAkKG9iailcbiAgNDA6XHQkKG9iaikvc3ZtL3ZtZW50ZXIubzogJChvYmopL2t2bS1hc20tb2Zmc2V0cy5oXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBCdWlsZCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBwcm9jZXNzIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBga3ZtLXkgJiM0Mzs9IHg4Ni5vIGVtdWxhdGUubyAuLi5gIGlzIGdvaW5nIHRvIGdldCBidWlsdCBpZiBlaXRoZXIgYENPTkZJR19LVk1fWDg2YCBvciBqdXN0IHBsYWluIGBDT05GSUdfS1ZNYCBhcmUgZW5hYmxlZCwgYnV0IG9ubHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYW4gSW50ZWwgb3IgQU1EIHZpcnR1YWwgbWFjaGluZSwgd2hpY2ggbWVhbnMgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFsc28gY29tZSBpbnRvIHBsYXkuIFNvLCByaWdodCBvZmYgdGhlIGJhdCwgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIGFyZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0LiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgc3ltYm9scy4gSSYjMzk7bGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqYXJlbiYjMzk7dCogc3RhdGljIHdpdGhpbiB0aGUgY2hhbmdlZCBmaWxlcy4gVGhhdCBnaXZlcyBtZSBhIGNsdWUgYWJvdXQgZXhwb3J0ZWQgZnVuY3Rpb25hbGl0eS4KCkZpcnN0IHVwLCBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIEkgc2VlIGB4ODZfZW11bGF0ZV9pbnNuYCBpcyBub24tc3RhdGljLiBHb29kLCB0aGF0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IEtWTS4gQW5kIHRoZXJlJiMzOTtzIGFsc28gYGVtX2NtcHhjaGc4YmAsIHdoaWNoIGlzIHN0YXRpYywgYnV0IGdldHMgY2FsbGVkIGZyb20gdGhlIGltcG9ydGFudCBgeDg2X2VtdWxhdGVfaW5zbmAgc28gaXQmIzM5O3MgcmVsZXZhbnQgdG8gaG93IHRoZSBlbXVsYXRpb24gd29ya3MuCgpOZXh0LCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSGVyZSBJIHNlZSBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgZW11bGF0ZV9vcHMuY21weGNoZ19lbXVsYXRlZGAsIHNvIGl0JiMzOTtzIGNsZWFybHkgaW52b2x2ZWQgaW4gaG93IHNvbWV0aGluZyBpcyBlbXVsYXRlZC4gVGhhdCYjMzk7cyBhIGtleSBsaW5lIG9mIGlucXVpcnkuIFRoZW4sIHRoZXJlJiMzOTtzIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYW5kIG1heWJlIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIgYXMgdGhlIGVudHJ5IHBvaW50cyBpbiBgeDg2LmNgLiBJJiMzOTtsbCBuZWVkIHRvIGNoYXNlIGRvd24gdGhlIGNhbGxlcnMgb2YgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGFuZCB0aG9zZSB4ODYgZW11bGF0b3IgZW50cnlwb2ludHMgaW4gYHg4Ni5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgYW5kIHNlZSBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ODZfZW11bGF0ZV9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDg2Mz1pbnQgeDg2X2RlY29kZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4sIGludCBlbXVsYXRpb25fdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUxNDMtXHRcdCAqIFRoZXNlIGFyZSBjb3BpZWQgdW5jb25kaXRpb25hbGx5IGhlcmUsIGFuZCBjaGVja2VkIHVuY29uZGl0aW9uYWxseVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1MTQ0Olx0XHQgKiBpbiB4ODZfZW11bGF0ZV9pbnNuLlxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01MTQ1LVx0XHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTUyNjg9dm9pZCBpbml0X2RlY29kZV9jYWNoZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUyODQtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjUyODU6aW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cylcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTI4Ni17XG4tLVxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmg9NTQxPXZvaWQgaW5pdF9kZWNvZGVfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpO1xuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmg6NTQyOmludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpO1xuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtNTQzLWludCBlbXVsYXRvcl90YXNrX3N3aXRjaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMzNT1pbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NDc1LVx0ICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjQ3NjpcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjQ3Ny1cdFx0XHRcdCAgICEoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX05PX0RFQ09ERSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYzNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBDYWxsZXJzIGZvciBUaG9yb3VnaG5lc3MqKgoKT2theSwgc28gSSB3YW50IHRvIGJlICphYnNvbHV0ZWx5KiBjZXJ0YWluIGFib3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoYXQgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGFsbCB0aGUgcGxhY2VzIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vYCBkaXJlY3RvcnkuIEV2ZW4gdGhvdWdoIEkgaGF2ZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBpdCYjMzk7cyBhbHdheXMgd29ydGggZG91YmxlLWNoZWNraW5nIOKAkyBlc3BlY2lhbGx5IGluIHRoaXMgY3JpdGljYWwgYXJlYSDigJMgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBUaGlzIGtpbmQgb2YgbWV0aWN1bG91c25lc3MgaXMgZXNzZW50aWFsOyBhIHNpbXBsZSBvdmVyc2lnaHQgaGVyZSBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHkgYnVncyBkb3duIHRoZSBsaW5lLiBJdOKAmXMgYWJvdXQgYmVpbmcgcHJlY2lzZSBhbmQgbGVhdmluZyBubyBzdG9uZSB1bnR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21weGNoZ19lbXVsYXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTEzNDQ9c3RhdGljIGludCBzZWdtZW50ZWRfY21weGNoZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTEzNTQtXHRcdHJldHVybiByYztcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTM1NTpcdHJldHVybiBjdHh0LVx1MDAzZW9wcy1cdTAwM2VjbXB4Y2hnX2VtdWxhdGVkKGN0eHQsIGxpbmVhciwgb3JpZ19kYXRhLCBkYXRhLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzU2LVx0XHRcdFx0XHQgICBzaXplLCBcdTAwMjZjdHh0LVx1MDAzZWV4Y2VwdGlvbik7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xNTE3PXN0YXRpYyBpbnQgX19sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3MTItXHRcdHNlZ19kZXNjLnR5cGUgfD0gMjsgLyogYnVzeSAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxNzEzOlx0XHRyZXQgPSBjdHh0LVx1MDAzZW9wcy1cdTAwM2VjbXB4Y2hnX2VtdWxhdGVkKGN0eHQsIGRlc2NfYWRkciwgXHUwMDI2b2xkX2Rlc2MsIFx1MDAyNnNlZ19kZXNjLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzE0LVx0XHRcdFx0XHRcdCAgc2l6ZW9mKHNlZ19kZXNjKSwgXHUwMDI2Y3R4dC1cdTAwM2VleGNlcHRpb24pO1xuLS1cbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTEwOT1zdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHtcbi0tXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaC0xODEtXHQvKlxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmg6MTgyOlx0ICogY21weGNoZ19lbXVsYXRlZDogRW11bGF0ZSBhbiBhdG9taWMgKExPQ0tlZCkgQ01QWENIRyBvcGVyYXRpb24gb24gYW5cbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE4My1cdCAqICAgICAgICAgICAgICAgICAgIGVtdWxhdGVkL3NwZWNpYWwgbWVtb3J5IGFyZWEuXG4tLVxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMTg4LVx0ICovXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaDoxODk6XHRpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE5MC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTI0Mj1zdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MjU5LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyNjA6c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNjEtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTgyNy1cdC53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTgyODpcdC5jbXB4Y2hnX2VtdWxhdGVkICAgID0gZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI5LVx0LmludmxwZyAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pbnZscGcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzE0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBFbXVsYXRpb24gV3JpdGViYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd3JpdGViYWNrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGVtdWxhdGlvbiBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBlbXVsYXRlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgYHdyaXRlYmFja2AgdXNlcyBgc2VnbWVudGVkX2NtcHhjaGdgIGZvciB0aG9zZSBsb2NrZWQgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcgY2hvaWNlISYjMzQ7IEkga25vdyB0aGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSB4ODYtc3BlY2lmaWMgcGFydCwgYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLCBhbmQgY29uZmlybSB0aGlzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBhdG9taWNpdHkgZ3VhcmFudGVlcyB0aGV5IGFyZSB1c2luZyBpbiB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWdtZW50ZWRfY21weGNoZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTEzMjk9c3RhdGljIGludCBzZWdtZW50ZWRfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzQzLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxMzQ0OnN0YXRpYyBpbnQgc2VnbWVudGVkX2NtcHhjaGcoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTEzNDUtXHRcdFx0ICAgICBzdHJ1Y3Qgc2VnbWVudGVkX2FkZHJlc3MgYWRkcixcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTE3NTU9c3RhdGljIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBvcGVyYW5kICpvcClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NjItXHRcdGlmIChjdHh0LVx1MDAzZWxvY2tfcHJlZml4KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxNzYzOlx0XHRcdHJldHVybiBzZWdtZW50ZWRfY21weGNoZyhjdHh0LFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzY0LVx0XHRcdFx0XHRcdCBvcC1cdTAwM2VhZGRyLm1lbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMTcKCQkJCQkJCW91dHB1dDogMjIzCgkJCQkJCQl0aG91Z2h0czogOTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBDTVBYQ0hHMTZCIEVtdWxhdGlvbiAtIEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBhdGNoLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBDTVBYQ0hHMTZCIGltcGxlbWVudGF0aW9uIHdpdGhpbiBLVk0sIHdoaWNoIGlzIGEga25vd24gYXJlYSBmb3IgY29tcGxleCBpbnRlcmFjdGlvbnMuCgpGaXJzdCwgSSBsb29rZWQgYXQgdGhlIGB3cml0ZWJhY2tgIGZ1bmN0aW9uLiBUaGlzIHBvaW50cyB0byBgc2VnbWVudGVkX2NtcHhjaGdgIGFuZCB0aGVuIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgQ01QWENIRyBlbXVsYXRpb24gcGF0aC4gIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCB1bHRpbWF0ZWx5IGNhbGxzIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCB3aGljaCB0aGVuIGNhbGxzIGBfX3RyeV9jbXB4Y2hnX3VzZXJgIC0mZ3Q7IGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAgYW5kIGZpbmFsbHkgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gLCB3aGljaCBpcyB0aGUgaW5saW5lIGFzc2VtYmx5IHRoYXQgaW1wbGVtZW50cyBgY21weGNoZzE2YmAuICBUaGlzIGFsc28gc2hvd3MgdGhhdCBgY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC0mZ3Q7ZHN0LnZhbDEyODtgIGdldHMgc2V0IGR1cmluZyB0aGUgcHJvY2VzcyB3aGVuIGBjdHh0LSZndDtkc3QuYnl0ZXMgPT0gMTZgLgoKTXkga2V5IHN5bWJvbHMgZm9yIGFuYWx5c2lzIGFyZSBub3c6IGBlbV9jbXB4Y2hnOGJgLCBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAsIGB4ODZfZW11bGF0ZV9pbnNuYCwgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuIGBlbV9jbXB4Y2hnOGJgIGhhbmRsZXMgYm90aCBgY21weGNoZzhiYCBhbmQgYGNtcHhjaGcxNmJgLiAgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGlzIGV4cGxpY2l0bHkgZm9yIGVtdWxhdGVkIENNUFhDSEcgb3BlcmF0aW9ucy4gYHg4Nl9lbXVsYXRlX2luc25gIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIGFyZSB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludHMgaW50byB0aGUgS1ZNIGluc3RydWN0aW9uIGVtdWxhdG9yLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSSBxdWlja2x5IGlkZW50aWZpZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAuICBJIGFsc28gY2hlY2tlZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQuIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCByZXF1aXJlcyBgWDg2X0ZFQVRVUkVfQ1gxNmAsIGFuZCBpdCYjMzk7cyBnYXRlZCBieSBgQ09ORklHX1g4Nl82NGAuICBUaGUgdGFyZ2V0IGlzIEFNRDY0LgoKQmFzZWQgb24gdGhpcywgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIENNUFhDSEcxNkIuIEl0IGludHJvZHVjZXMgbmV3IGlubGluZSBhc3NlbWJseSwgYWRkcyBhc3NlcnRpb25zIG9uIHg4Nl82NCwgYW5kIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZXhpc3RpbmcgZW11bGF0aW9uIHJvdXRpbmVzLiBUaGlzIG1ha2VzIGl0IHdvcnRoIGZ1enppbmcgYXMgdGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgZW11bGF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbV9jbXB4Y2hnOGImIzM0OywKICAgICYjMzQ7ZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnNuJiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1fY21weGNoZzhiJiMzNDssCiAgICAmIzM0O2VtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zbiYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciAxMjgtYml0IENNUFhDSEcxNkIgZW11bGF0aW9uIHRvIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBpbXBsZW1lbnRzIGEgbmV3IDEyOC1iaXQgdXNlciBjbXB4Y2hnIGlubGluZSBhc3NlbWJseSBwcmltaXRpdmUgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20pIG9uIHg4Nl82NC4gSXQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24gaW4gZW1fY21weGNoZzhiIGFuZCBtb2RpZmllcyBvcGVyYW5kIGhhbmRsaW5nIGluIHg4Nl9lbXVsYXRlX2luc24gYW5kIGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIHZpYSBzdGFuZGFyZCBLVk0gZ3Vlc3QgZW11bGF0aW9uIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgdXNlciBzcGFjZSBjb21wYXJlLWFuZC1zd2FwIChfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtIHVzaW5nIGNtcHhjaGcxNmIpIGFuZCBhZGRzIENNUFhDSEcxNkIgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGluIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yLlxuXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxuMS4gQWRkaW5nIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBpbmxpbmUgYXNzZW1ibHkgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAgdG8gYXRvbWljYWxseSBjb21wYXJlIGFuZCBzd2FwIDEyOC1iaXQgdmFsdWVzIGF0IHVzZXIgYWRkcmVzc2VzLlxuMi4gVXBkYXRpbmcgYHN0cnVjdCBvcGVyYW5kYCBpbiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgd2l0aGluIGV4aXN0aW5nIHVuaW9ucy5cbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Uga2VybmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cdTAwM2Vkc3QudmFsMTI4YCwgYG9sZGAsIGBuZXdgLCBndWVzdCByZWdpc3RlciB2YWx1ZXMpIGFyZSBleHBsaWNpdGx5IHBvcHVsYXRlZCBhbmQgaW5pdGlhbGl6ZWQgZHVyaW5nIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBleGVjdXRpb24uXG4tIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZ3MgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjllNzQ4YTY4OTAyNzExNDllMjExYTIwMjEwNTAwNmUxZGVlNzFmOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDc6NTk6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggM2EwZGQzYzJiMjMzZS4uOTQ4OTM3YTI0Y2M1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNDA3LDYgJiM0Mzs0MDcsMjcgQEAgZG8gewkJCQkJCQkJCVwKIAlpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKQkJCQkJCVwKIAkJKl9vbGQgPSBfX29sZDsJCQkJCQlcCiAJbGlrZWx5KHN1Y2Nlc3MpOwkJCQkJfSkKJiM0MzsjZWxzZSAvLyAhQ09ORklHX1g4Nl8zMgomIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpCSh7CVwKJiM0MzsJYm9vbCBzdWNjZXNzOwkJCQkJCQlcCiYjNDM7CV9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7CQlcCiYjNDM7CXU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkOwkJCQkJXAomIzQzOwl1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkICZndDsmZ3Q7IDY0KTsJCQkJXAomIzQzOwlfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpOwkJCQlcCiYjNDM7CWFzbV9nb3RvX291dHB1dCgmIzM0O1xuJiMzNDsJCQkJCQlcCiYjNDM7CQkgICAgICYjMzQ7MTogJiMzNDsgTE9DS19QUkVGSVggJiMzNDtjbXB4Y2hnMTZiICVbcHRyXVxuJiMzNDsJCVwKJiM0MzsJCSAgICAgX0FTTV9FWFRBQkxFX1VBKDFiLCAlbFtsYWJlbF0pCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7PUBjY3omIzM0OyAoc3VjY2VzcyksCQkJCVwKJiM0MzsJCSAgICAgICAmIzM0OyYjNDM7YSYjMzQ7IChfX29sZF9sb3cpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDsmIzQzO2QmIzM0OyAoX19vbGRfaGlnaCksCQkJCVwKJiM0MzsJCSAgICAgICBbcHRyXSAmIzM0OyYjNDM7bSYjMzQ7ICgqX3B0cikJCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7YiYjMzQ7ICgodTY0KV9fbmV3KSwJCQkJXAomIzQzOwkJICAgICAgICYjMzQ7YyYjMzQ7ICgodTY0KSgodTEyOClfX25ldyAmZ3Q7Jmd0OyA2NCkpCQkJXAomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDsJCQkJCQlcCiYjNDM7CQkgICAgIDogbGFiZWwpOwkJCQkJCVwKJiM0MzsJaWYgKHVubGlrZWx5KCFzdWNjZXNzKSkJCQkJCQlcCiYjNDM7CQkqX29sZCA9ICgodTEyOClfX29sZF9oaWdoICZsdDsmbHQ7IDY0KSB8IF9fb2xkX2xvdzsJCVwKJiM0MzsJbGlrZWx5KHN1Y2Nlc3MpOwkJCQkJfSkKICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyCiAjZWxzZSAgLy8gIUNPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVQKICNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbCkJKHsgXApAQCAtNDYzLDYgJiM0Mzs0ODQsMzIgQEAgZG8gewkJCQkJCQkJCVwKIAlpZiAodW5saWtlbHkoIV9fcmVzdWx0KSkJCQkJCVwKIAkJKl9vbGQgPSBfX29sZDsJCQkJCQlcCiAJbGlrZWx5KF9fcmVzdWx0KTsJCQkJCX0pCiYjNDM7I2Vsc2UgLy8hQ09ORklHX1g4Nl8zMgomIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpCSh7CVwKJiM0MzsJaW50IF9fcmVzdWx0OwkJCQkJCQlcCiYjNDM7CV9fdHlwZW9mX18oX3B0cikgX29sZCA9IChfX3R5cGVvZl9fKF9wdHIpKShfcG9sZCk7CQlcCiYjNDM7CXU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkOwkJCQkJXAomIzQzOwl1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkICZndDsmZ3Q7IDY0KTsJCQkJXAomIzQzOwlfX3R5cGVvZl9fKCooX3B0cikpIF9fbmV3ID0gKF9uZXcpOwkJCQlcCiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O1xuJiMzNDsJCQkJCQlcCiYjNDM7CQkgICAgICYjMzQ7MTogJiMzNDsgTE9DS19QUkVGSVggJiMzNDtjbXB4Y2hnMTZiICVbcHRyXVxuJiMzNDsJCVwKJiM0MzsJCSAgICAgJiMzNDttb3YgJDAsICVbcmVzdWx0XVxuXHQmIzM0OwkJCQlcCiYjNDM7CQkgICAgICYjMzQ7c2V0eiAlYltyZXN1bHRdXG4mIzM0OwkJCQlcCiYjNDM7CQkgICAgICYjMzQ7MjpcbiYjMzQ7CQkJCQkJXAomIzQzOwkJICAgICBfQVNNX0VYVEFCTEVfVFlQRV9SRUcoMWIsIDJiLCBFWF9UWVBFX0VGQVVMVF9SRUcsCVwKJiM0MzsJCQkJCSAgICVbcmVzdWx0XSkJCQlcCiYjNDM7CQkgICAgIDogW3Jlc3VsdF0gJiMzNDs9cSYjMzQ7IChfX3Jlc3VsdCksCQkJXAomIzQzOwkJICAgICAgICYjMzQ7JiM0MzthJiMzNDsgKF9fb2xkX2xvdyksCQkJCVwKJiM0MzsJCSAgICAgICAmIzM0OyYjNDM7ZCYjMzQ7IChfX29sZF9oaWdoKSwJCQkJXAomIzQzOwkJICAgICAgIFtwdHJdICYjMzQ7JiM0MzttJiMzNDsgKCpfcHRyKQkJCQlcCiYjNDM7CQkgICAgIDogJiMzNDtiJiMzNDsgKCh1NjQpX19uZXcpLAkJCQlcCiYjNDM7CQkgICAgICAgJiMzNDtjJiMzNDsgKCh1NjQpKCh1MTI4KV9fbmV3ICZndDsmZ3Q7IDY0KSkJCQlcCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0OywgJiMzNDtjYyYjMzQ7KTsJCQkJCVwKJiM0MzsJaWYgKHVubGlrZWx5KF9fcmVzdWx0ICZsdDsgMCkpCQkJCQlcCiYjNDM7CQlnb3RvIGxhYmVsOwkJCQkJCVwKJiM0MzsJaWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpCQkJCQlcCiYjNDM7CQkqX29sZCA9ICgodTEyOClfX29sZF9oaWdoICZsdDsmbHQ7IDY0KSB8IF9fb2xkX2xvdzsJCVwKJiM0MzsJbGlrZWx5KF9fcmVzdWx0KTsJCQkJCX0pCiAjZW5kaWYgLy8gQ09ORklHX1g4Nl8zMgogI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVQKIApAQCAtNTUxLDExICYjNDM7NTk4LDE4IEBAIGRvIHsJCQkJCQkJCQkJXAogCiBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTsKIAotI2lmbmRlZiBDT05GSUdfWDg2XzMyCiYjNDM7I2lmZGVmIENPTkZJR19YODZfMzIKJiM0MzsvKgomIzQzOyAqIEFsd2F5cyBmYWlsIG9uIDMyIGJpdCBhcmNoIG9yIDY0IGFyY2ggd2l0aG91dCAxMjggYml0IGNtcHhjaGcgc3VwcG9ydAomIzQzOyAqLwomIzQzOyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpICh7IEJVSUxEX0JVR19PTigxKTsgMDsgfSkKJiM0MzsjZWxzZQogI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpCQlcCiAJX190cnlfY21weGNoZ191c2VyX2FzbSgmIzM0O3EmIzM0OywgJiMzNDtyJiMzNDssIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKQomIzQzOwogI2VuZGlmCiAKJiM0MzsKIC8qCiAgKiBGb3JjZSB0aGUgcG9pbnRlciB0byB1Jmx0O3NpemUmZ3Q7IHRvIG1hdGNoIHRoZSBzaXplIGV4cGVjdGVkIGJ5IHRoZSBhc20gaGVscGVyLgogICogY2xhbmcvTExWTSBjb21waWxlcyBhbGwgY2FzZXMgYW5kIG9ubHkgZGlzY2FyZHMgdGhlIHVudXNlZCBwYXRocyBhZnRlcgpAQCAtNTgwLDYgJiM0Mzs2MzQsMTQgQEAgZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7CiAJY2FzZSA4OglfX3JldCA9IF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbSgoX19mb3JjZSB1NjQgKikoX3B0ciksIChfb2xkcCksXAogCQkJCQkJIChfbnZhbCksIF9sYWJlbCk7CQlcCiAJCWJyZWFrOwkJCQkJCQkJXAomIzQzOwljYXNlIDE2OgkJCQkJCQkJXAomIzQzOwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KSkJCQkJXAomIzQzOwkJCV9fcmV0ID0gX190cnlfY21weGNoZzEyOF91c2VyX2FzbSgJCQlcCiYjNDM7CQkJCQkoX19mb3JjZSB1MTI4ICopKF9wdHIpLAkJCVwKJiM0MzsJCQkJCShfb2xkcCksIChfbnZhbCksIF9sYWJlbCk7CQlcCiYjNDM7CQllbHNlCQkJCQkJCQlcCiYjNDM7CQkJX19yZXQgPSAwOwkJCQkJCVwKJiM0MzsJCWJyZWFrOwkJCQkJCQkJXAogCWRlZmF1bHQ6IF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKCk7CQkJCVwKIAl9CQkJCQkJCQkJXAogCV9fcmV0OwkJCQkJCX0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwppbmRleCBjMWIyMTI4MjE4N2YzLi41MzU4NDIzMzZkNzY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKQEAgLTIxODQsMjQgJiM0MzsyMTg0LDM2IEBAIHN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIAlyZXR1cm4gcmM7CiB9CiAKJiM0MzsjZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXAomIzQzO2RvIHsJCQkJCQkJCQkJCQlcCiYjNDM7CXUjI21iaXRzIG9sZCA9IF9fYy0mZ3Q7ZHN0Lm9yaWdfdmFsIyNtYml0czsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQkJXAomIzQzOwlCVUlMRF9CVUdfT04ocmJpdHMgKiAyICE9IG1iaXRzKTsJCQkJCQkJXAomIzQzOwkJCQkJCQkJCQkJCVwKJiM0MzsJaWYgKCgodSMjcmJpdHMpIChvbGQgJmd0OyZndDsgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fAkJXAomIzQzOwkgICAgKCh1IyNyYml0cykgKG9sZCAmZ3Q7Jmd0OyByYml0cykgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SRFgpKSkgewkJXAomIzQzOwkJKnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SQVgpID0gKHUjI3JiaXRzKSAob2xkICZndDsmZ3Q7IDApOwkJCVwKJiM0MzsJCSpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCAmZ3Q7Jmd0OyByYml0cyk7CQkJXAomIzQzOwkJX19jLSZndDtlZmxhZ3MgJmFtcDs9IH5YODZfRUZMQUdTX1pGOwkJCQkJCQlcCiYjNDM7CX0gZWxzZSB7CQkJCQkJCQkJCVwKJiM0MzsJCV9fYy0mZ3Q7ZHN0LnZhbCMjbWJpdHMgPSAoKHUjI21iaXRzKXJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JDWCkgJmx0OyZsdDsgcmJpdHMpIHwJXAomIzQzOwkJCQkJKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpOwkJXAomIzQzOwkJCQkJCQkJCQkJCVwKJiM0MzsJCV9fYy0mZ3Q7ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7CQkJCQkJCVwKJiM0MzsJfQkJCQkJCQkJCQkJXAomIzQzO30gd2hpbGUgKDApCiYjNDM7CiBzdGF0aWMgaW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLQl1NjQgb2xkID0gY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsNjQ7Ci0KLQlpZiAoY3R4dC0mZ3Q7ZHN0LmJ5dGVzID09IDE2KQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKDggJiM0MzsgISEoY3R4dC0mZ3Q7cmV4X2JpdHMgJmFtcDsgUkVYX1cpICogOCAhPSBjdHh0LSZndDtkc3QuYnl0ZXMpKQogCQlyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiAKLQlpZiAoKCh1MzIpIChvbGQgJmd0OyZndDsgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8Ci0JICAgICgodTMyKSAob2xkICZndDsmZ3Q7IDMyKSAhPSAodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkRYKSkpIHsKLQkJKnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkFYKSA9ICh1MzIpIChvbGQgJmd0OyZndDsgMCk7Ci0JCSpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JEWCkgPSAodTMyKSAob2xkICZndDsmZ3Q7IDMyKTsKLQkJY3R4dC0mZ3Q7ZWZsYWdzICZhbXA7PSB+WDg2X0VGTEFHU19aRjsKLQl9IGVsc2UgewotCQljdHh0LSZndDtkc3QudmFsNjQgPSAoKHU2NClyZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkNYKSAmbHQ7Jmx0OyAzMikgfAotCQkJKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JCWCk7Ci0KLQkJY3R4dC0mZ3Q7ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7Ci0JfQomIzQzOwlpZiAoIShjdHh0LSZndDtyZXhfYml0cyAmYW1wOyBSRVhfVykpCiYjNDM7CQllbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDMyLCA2NCk7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJZWxzZQomIzQzOwkJZW1fY21weGNoZzhiXzE2YihjdHh0LCA2NCwgMTI4KTsKJiM0MzsjZW5kaWYKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIApAQCAtNTQxNCw4ICYjNDM7NTQyNiwxNCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBjaGVja19pbnRlcmNlcHRzKQogCQkJZ290byBkb25lOwogCQl9CiAJfQotCS8qIENvcHkgZnVsbCA2NC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovCi0JY3R4dC0mZ3Q7ZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LSZndDtkc3QudmFsNjQ7CiYjNDM7CS8qIENvcHkgZnVsbCA2NC8xMjgtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqLwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CWlmIChjdHh0LSZndDtkc3QuYnl0ZXMgPT0gMTYpCiYjNDM7CQljdHh0LSZndDtkc3Qub3JpZ192YWwxMjggPSBjdHh0LSZndDtkc3QudmFsMTI4OwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQljdHh0LSZndDtkc3Qub3JpZ192YWw2NCA9IGN0eHQtJmd0O2RzdC52YWw2NDsKIAogc3BlY2lhbF9pbnNuOgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oCmluZGV4IDNlMzc1YWYxNWMwMzUuLjg5OTExODQ1MjMzZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oCkBAIC0yNjMsNiAmIzQzOzI2Myw5IEBAIHN0cnVjdCBvcGVyYW5kIHsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgb3JpZ192YWw7CiAJCXU2NCBvcmlnX3ZhbDY0OwomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiYjNDM7CQl1MTI4IG9yaWdfdmFsMTI4OwomIzQzOyNlbmRpZgogCX07CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nICpyZWc7CkBAIC0yNzYsNiAmIzQzOzI3OSw5IEBAIHN0cnVjdCBvcGVyYW5kIHsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgdmFsOwogCQl1NjQgdmFsNjQ7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJCXUxMjggdmFsMTI4OwomIzQzOyNlbmRpZgogCQljaGFyIHZhbHB0cltzaXplb2YoYXZ4MjU2X3QpXTsKIAkJc3NlMTI4X3QgdmVjX3ZhbDsKIAkJYXZ4MjU2X3QgdmVjX3ZhbDI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uNjBiZTE2ZjA1ZDc5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNTI3MSw3ICYjNDM7NTI3MSw3IEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAlpbnQgcjsKIAogCS8qIGd1ZXN0cyBjbXB4Y2hnOGIgaGF2ZSB0byBiZSBlbXVsYXRlZCBhdG9taWNhbGx5ICovCi0JaWYgKGJ5dGVzICZndDsgOCB8fCAoYnl0ZXMgJmFtcDsgKGJ5dGVzIC0gMSkpKQomIzQzOwlpZiAoYnl0ZXMgJmd0OyAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIHx8IChieXRlcyAmYW1wOyAoYnl0ZXMgLSAxKSkpCiAJCWdvdG8gZW11bF93cml0ZTsKIAogCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTsKQEAgLTUzMTEsNiAmIzQzOzUzMTEsMTEgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCWNhc2UgODoKIAkJciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTsKIAkJYnJlYWs7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJY2FzZSAxNjoKJiM0MzsJCXIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2VuZGlmCiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd2FycmFudCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZXhwZXJ0IGV5ZSBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgbmV3IGBjbXB4Y2hnMTZiYCBpbXBsZW1lbnRhdGlvbiBmb3IgeDg2XzY0LCBhcyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggMTI4LWJpdCBhdG9taWMgb3BlcmF0aW9ucywgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLgoKRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAsIHdoaWNoIGlzIGNydWNpYWwuIEl0JiMzOTtzIHRoZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiB1c2luZyBgY21weGNoZzE2YmAgZm9yIHVzZXItc3BhY2UgbWVtb3J5IG9wZXJhdGlvbnMuIFRoZSBgdHJ5X2NtcHhjaGdfdXNlcmAgZXh0ZW5zaW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgaGFuZGxlcyB0aGUgYGNhc2UgMTY6YCBzY2VuYXJpbyBpZiB0aGUgQ1BVIHN1cHBvcnRzIGl0LiBTbyBmYXIsIHNvIGdvb2QsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGVyLgoKVGhlIEtWTSBzaWRlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBDTVBYQ0hHMTZCYCBlbXVsYXRpb24gaXMgZXhwZWN0ZWQuIFRoZSBgZW1fY21weGNoZzhiXzE2YmAgbWFjcm8gc2VlbXMgdG8gdW5pZnkgdGhlIGhhbmRsaW5nIG9mIDgtIGFuZCAxNi1ieXRlIGNtcHhjaGcgb3BlcmF0aW9ucy4gVGhlIHVwZGF0ZSB0byBgZW1fY21weGNoZzhiYCB0byBjYWxsIGBlbV9jbXB4Y2hnOGJfMTZiYCB3aGVuIGBSRVhfV2AgaXMgc2V0IGlzIHRoZSBjcml0aWNhbCBwb2ludCBmb3IgZGV0ZWN0aW5nIGEgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkYXRhZmxvdy4gVGhlIGFkZGl0aW9uIG9mIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIChhcyBgdTEyOGApIHRvIGBzdHJ1Y3Qgb3BlcmFuZGAgaW4gYGt2bV9lbXVsYXRlLmhgIGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGltcGxpZXMgdGhlc2UgdmFsdWVzIGFyZSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCBwb3RlbnRpYWxseSByZWFkIGZyb20gbWVtb3J5LgoKRmluYWxseSwgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIEkgc2VlIHRoYXQgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIG5vdyBzdXBwb3J0cyBvcGVyYW5kcyB1cCB0byAxNiBieXRlcy4gVGhlIGFkZGVkIGBjYXNlIDE2YCBpbiBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgaGFuZGxlcyB0aGUgMTI4LWJpdCBjbXB4Y2hnIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBsZWFkIHRvIGFuIGlzc3VlLgoKTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZCBvcGVyYW5kIGZldGNoaW5nIGluIGJvdGggYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSB3aWxsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgaW4gdGhvc2UgYXJlYXMgdG8gc2VlIHdoZXJlIHRoZXNlIG5ldyAxMjgtYml0IHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQsIHVzZWQsIGFuZCwgY3J1Y2lhbGx5LCAqcG90ZW50aWFsbHkqIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdvdWxkIGxpa2VseSBtYW5pZmVzdC4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gbWlnaHQgYmUgbmVjZXNzYXJ5IGRlcGVuZGluZyBvbiB3aGF0IEkgZGlzY292ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNTktXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI2MS1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODI3LVx0LndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODI4Olx0LmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjktXHQuaW52bHBnICAgICAgICAgICAgICA9IGVtdWxhdG9yX2ludmxwZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4OQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgS1ZNIHg4NiBjbXB4Y2hnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGBjbXB4Y2hnYCBlbXVsYXRpb24gd2l0aGluIEtWTS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgbWVtb3J5LiBMZXQmIzM5O3MgemVybyBpbiBvbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhcm91bmQgbGluZSA1MjYwOyB0aGF0JiMzOTtzIHdoZXJlIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCBzaG91bGQgYmUuIE15IGtleSBxdWVzdGlvbjogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBtYW5hZ2UgdG8gZW11bGF0ZSB0aGUgYXRvbWljIGNvbXBhcmUtYW5kLWV4Y2hhbmdlIG9wZXJhdGlvbiAqc2FmZWx5KiBhbmQgZWZmaWNpZW50bHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IHJlc2lkaW5nIGluIHVzZXIgc3BhY2U/IEkgbmVlZCB0byB0cmFjayBob3cgb3BlcmFuZCBtZW1vcnkgaXMgcGFzc2VkIHRocm91Z2ggdGhlIGNvZGUuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGd1YXJhbnRlZXMsIGFuZCBhbnkgbmVjZXNzYXJ5IGNoZWNrcyB0byBlbnN1cmUgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMgYXMgZXhwZWN0ZWQgd2l0aG91dCBjYXVzaW5nIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFjY2VzcyBtZXRob2RzLCBhbnkgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byB1c2VyIG1lbW9yeSBhY2Nlc3MsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgZW1wbG95ZWQuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGVsZWdhbmNlIChvciBsYWNrIHRoZXJlb2YpIG9mIHRoZSB4ODYgYGNtcHhjaGdgIGVtdWxhdGlvbiBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIG9yIGFyZWFzIHdoZXJlIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nIGNvdWxkIGJlIGludHJvZHVjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjYwOlx0c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuNTI2MTpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXG41MjYyOlx0XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKm9sZCxcbjUyNjM6XHRcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqbmV3LFxuNTI2NDpcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXG41MjY1Olx0XHRcdFx0XHQgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pXG41MjY2Olx0e1xuNTI2NzpcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZW11bF90b192Y3B1KGN0eHQpO1xuNTI2ODpcdFx0dTY0IHBhZ2VfbGluZV9tYXNrO1xuNTI2OTpcdFx0dW5zaWduZWQgbG9uZyBodmE7XG41MjcwOlx0XHRncGFfdCBncGE7XG41MjcxOlx0XHRpbnQgcjtcbjUyNzI6XHRcbjUyNzM6XHRcdC8qIGd1ZXN0cyBjbXB4Y2hnOGIgaGF2ZSB0byBiZSBlbXVsYXRlZCBhdG9taWNhbGx5ICovXG41Mjc0Olx0XHRpZiAoYnl0ZXMgXHUwMDNlIDIgKiBzaXplb2YodW5zaWduZWQgbG9uZykgfHwgKGJ5dGVzIFx1MDAyNiAoYnl0ZXMgLSAxKSkpXG41Mjc1Olx0XHRcdGdvdG8gZW11bF93cml0ZTtcbjUyNzY6XHRcbjUyNzc6XHRcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcbjUyNzg6XHRcbjUyNzk6XHRcdGlmIChncGEgPT0gSU5WQUxJRF9HUEEgfHxcbjUyODA6XHRcdCAgICAoZ3BhIFx1MDAyNiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpXG41MjgxOlx0XHRcdGdvdG8gZW11bF93cml0ZTtcbjUyODI6XHRcbjUyODM6XHRcdC8qXG41Mjg0Olx0XHQgKiBFbXVsYXRlIHRoZSBhdG9taWMgYXMgYSBzdHJhaWdodCB3cml0ZSB0byBhdm9pZCAjQUMgaWYgU0xEIGlzXG41Mjg1Olx0XHQgKiBlbmFibGVkIGluIHRoZSBob3N0IGFuZCB0aGUgYWNjZXNzIHNwbGl0cyBhIGNhY2hlIGxpbmUuXG41Mjg2Olx0XHQgKi9cbjUyODc6XHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKVxuNTI4ODpcdFx0XHRwYWdlX2xpbmVfbWFzayA9IH4oY2FjaGVfbGluZV9zaXplKCkgLSAxKTtcbjUyODk6XHRcdGVsc2VcbjUyOTA6XHRcdFx0cGFnZV9saW5lX21hc2sgPSBQQUdFX01BU0s7XG41MjkxOlx0XG41MjkyOlx0XHRpZiAoKChncGEgJiM0MzsgYnl0ZXMgLSAxKSBcdTAwMjYgcGFnZV9saW5lX21hc2spICE9IChncGEgXHUwMDI2IHBhZ2VfbGluZV9tYXNrKSlcbjUyOTM6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI5NDpcdFxuNTI5NTpcdFx0aHZhID0ga3ZtX3ZjcHVfZ2ZuX3RvX2h2YSh2Y3B1LCBncGFfdG9fZ2ZuKGdwYSkpO1xuNTI5NjpcdFx0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbjUyOTc6XHRcdFx0Z290byBlbXVsX3dyaXRlO1xuNTI5ODpcdFxuNTI5OTpcdFx0aHZhICYjNDM7PSBvZmZzZXRfaW5fcGFnZShncGEpO1xuNTMwMDpcdFxuNTMwMTpcdFx0c3dpdGNoIChieXRlcykge1xuNTMwMjpcdFx0Y2FzZSAxOlxuNTMwMzpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1OCwgaHZhLCBvbGQsIG5ldyk7XG41MzA0Olx0XHRcdGJyZWFrO1xuNTMwNTpcdFx0Y2FzZSAyOlxuNTMwNjpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xuNTMwNzpcdFx0XHRicmVhaztcbjUzMDg6XHRcdGNhc2UgNDpcbjUzMDk6XHRcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTMyLCBodmEsIG9sZCwgbmV3KTtcbjUzMTA6XHRcdFx0YnJlYWs7XG41MzExOlx0XHRjYXNlIDg6XG41MzEyOlx0XHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU2NCwgaHZhLCBvbGQsIG5ldyk7XG41MzEzOlx0XHRcdGJyZWFrO1xuNTMxNDpcdCNpZmRlZiBDT05GSUdfWDg2XzY0XG41MzE1Olx0XHRjYXNlIDE2OlxuNTMxNjpcdFx0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTtcbjUzMTc6XHRcdFx0YnJlYWs7XG41MzE4Olx0I2VuZGlmXG41MzE5Olx0XHRkZWZhdWx0OlxuNTMyMDpcdFx0XHRCVUcoKTtcbjUzMjE6XHRcdH1cbjUzMjI6XHRcbjUzMjM6XHRcdGlmIChyIFx1MDAzYyAwKVxuNTMyNDpcdFx0XHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBFbXVsYXRvciBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBiZWluZyB1c2VkLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBhdG9taWNzLCBidXQgSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaXJjbGUgYmFjayBhbmQgcmVhbGx5IHNjcnV0aW5pemUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgY29uY3VycmVudCBlbnZpcm9ubWVudCBsaWtlIGFuIGVtdWxhdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgbGV2ZXJhZ2luZyBjb21wYXJlLWFuZC1zd2FwIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgYWNjZXNzaW5nIHNoYXJlZCBlbXVsYXRvciByZXNvdXJjZXMuIEl0JiMzOTtzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgdGhhdCB0aGUgZXhlY3V0aW9uIGlzbiYjMzk7dCBjb3JydXB0ZWQgYnkgcmFjZSBjb25kaXRpb25zLiBJIGNhbuKAmXQgYWZmb3JkIHRvIG1ha2UgYXNzdW1wdGlvbnMgaGVyZSwgc28gYmV0dGVyIHRvIGRvdWJsZS1jaGVjayBub3cgcmF0aGVyIHRoYW4gcmlzayBhIHN1YnRsZSBidWcgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1Ni1cbmFyY2gveDg2L2t2bS94ODYuYzo1MjU3OiNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih0LCBwdHIsIG9sZCwgbmV3KSBcXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNTgtXHQoX190cnlfY21weGNoZ191c2VyKCh0IF9fdXNlciAqKShwdHIpLCAodCAqKShvbGQpLCAqKHQgKikobmV3KSwgZWZhdWx0ICMjIHQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIHVzZXItc3BhY2UgY29tcGFyZS1hbmQtZXhjaGFuZ2UgZnVuY3Rpb25hbGl0eS4gTXkgaW50dWl0aW9uIHNheXMgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGNydWNpYWwgZm9yIGltcGxlbWVudGluZyBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgaW4gbXVsdGl0aHJlYWRlZCB1c2VyIGFwcGxpY2F0aW9ucy4KClRoZXJlZm9yZSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBpbnNwZWN0IGB0cnlfY21weGNoZ191c2VyYCBhbmQgYF9fdHJ5X2NtcHhjaGdfdXNlcmAgd2l0aGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBpbnRlcmZhY2Ugd2l0aCB0aGUgaGFyZHdhcmUmIzM5O3MgYXRvbWljIGluc3RydWN0aW9ucyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gbWVtb3J5IG9yZGVyaW5nLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCBleGNlcHRpb24gaGFuZGxpbmcgd2l0aGluIHRoZSB1c2VyIGNvbnRleHQuIFRoaXMgZGVlcGVyIGRpdmUgd2lsbCBsaWtlbHkgcmV2ZWFsIGNydWNpYWwgZGV0YWlscyBhYm91dCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NtcHhjaGdfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9MzM0PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzItI2lmZGVmIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDozNzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzQtXHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzItI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NDMzOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbClcdCh7IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDM0LVx0aW50IF9fZXJyID0gMDtcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTU5MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC01OTgtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NTk5OmV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwMC1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA3LSNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYwODpcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXCYjMzQ7cVwmIzM0OywgXCYjMzQ7clwmIzM0OywgKF9wdHIpLCAoX29sZHApLCAoX252YWwpLCBfbGFiZWwpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA5LVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTctICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjE4OiNkZWZpbmUgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXIoX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpICh7XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTktXHRib29sIF9fcmV0O1x0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjEtXHRzd2l0Y2ggKHNpemVvZigqKF9wdHIpKSkge1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjIyOlx0Y2FzZSAxOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O2JcJiMzNDssIFwmIzM0O3FcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjMtXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1OCAqKShfcHRyKSwgKF9vbGRwKSxcdFxcXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyNS1cdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjI2Olx0Y2FzZSAyOlx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFwmIzM0O3dcJiMzNDssIFwmIzM0O3JcJiMzNDssXHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjctXHRcdFx0XHRcdCAgICAgICAoX19mb3JjZSB1MTYgKikoX3B0ciksIChfb2xkcCksXHRcXFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjktXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYzMDpcdGNhc2UgNDpcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcJiMzNDtsXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7LFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjMxLVx0XHRcdFx0XHQgICAgICAgKF9fZm9yY2UgdTMyICopKF9wdHIpLCAoX29sZHApLFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ0LVx0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NDU6XHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1x0XHRcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDYtXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ5LS8qIFwmIzM0O1JldHVybnNcJiMzNDsgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUsIC1FRkFVTFQgaWYgdGhlIGFjY2VzcyBmYXVsdHMuICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjUwOiNkZWZpbmUgX190cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0KHtcdFx0XFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTEtXHRpbnQgX19yZXQgPSAtRUZBVUxUO1x0XHRcdFx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUyLVx0X191YWNjZXNzX2JlZ2luX25vc3BlYygpO1x0XHRcdFx0XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MzpcdF9fcmV0ID0gIXVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKTtcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjU0LV9sYWJlbDpcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBlbV9jbXB4Y2hnOGJgIEltcGxlbWVudGF0aW9uIGluIEtWTSYjMzk7cyBYODYgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCB0aGUgaW50cmljYWNpZXMgb2YgaG93IGBlbV9jbXB4Y2hnOGJgIGlzIGhhbmRsZWQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgaW4gdGhlIGRlY29kaW5nIGFuZCBjYWxsIGZsb3cuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUgZW11bGF0aW9uIG9mIHRoZSBDTVBYQ0hHOEIgKG9yIENNUFhDSEcxNkIpIGluc3RydWN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcnBsYXkgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgcmVnaXN0ZXJzIGFuZCBtZW1vcnksIGFuZCBJJiMzOTttIGVhZ2VyIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGlzc3VlcyBpbiB0aGUgZW11bGF0aW9uLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW5zdHJ1Y3Rpb24mIzM5O3Mgb3BlcmFuZCBzaXplLCB0aGUgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucywgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gYSBtdWx0aS10aHJlYWRlZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGltZSB0byBnZXQgZG93biB0byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1fY21weGNoZzhiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2VtdWxhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTIxNzM9c3RhdGljIGludCBlbV9jYWxsX25lYXJfYWJzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4Ni1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjE4NzojZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4OC1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMDUtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMDY6c3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMDcte1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMS1cdGlmICghKGN0eHQtXHUwMDNlcmV4X2JpdHMgXHUwMDI2IFJFWF9XKSlcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjIxMjpcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjEzLSNpZmRlZiBDT05GSUdfWDg2XzY0XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMTQtXHRlbHNlXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTU6XHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIyMTYtI2VuZGlmXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDEyMjpcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIHg4NiBFbXVsYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGdyb3VwOWAgaGFuZGxlciB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgdGhlIGVtdWxhdGlvbiBvZiB0aG9zZSBtb3JlIGNvbXBsZXggeDg2IGluc3RydWN0aW9ucyB3aXRoaW4gdGhlIEtWTSBoeXBlcnZpc29yLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9uLCBvciBwb3RlbnRpYWxseSBhIHNvbWV3aGF0IHVudXN1YWwgaW5zdHJ1Y3Rpb24sIGJhc2VkIG9uIHRoZSBgZ3JvdXA5YCBuYW1pbmcgY29udmVudGlvbi4gR2l2ZW4gdGhlIGZpbGUgbG9jYXRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIGRlY29kZWQsIHRoZSBhc3NvY2lhdGVkIHJlZ2lzdGVycyB1cGRhdGVkLCBhbmQgYW55IG5lY2Vzc2FyeSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgSSBhbSBhbHNvIGRlYWxpbmcgd2l0aCBob3cgdGhlIGhhcmR3YXJlIGludGVyYWN0cyB3aXRoIHRoZXNlIGluc3RydWN0aW9ucyBhbmQgaG93IHRvIHNpbXVsYXRlIHRoYXQgb24gc29mdHdhcmUuIEkga25vdyBpdCYjMzk7cyBnb2luZyB0byBiZSBhIGRlZXAgZGl2ZS4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcywgdGhlIGNvbnRyb2wgZmxvdywgYW5kIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBqdW1wIG91dC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRlY2huaXF1ZXMgdGhlIG9yaWdpbmFsIGF1dGhvcnMgdXNlZCB0byBoYW5kbGUgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTIwOlx0XG40MTIxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xuNDEyMjpcdFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXG40MTIzOlx0fSwge1xuNDEyNDpcdFx0TiwgTiwgTiwgTiwgTiwgTiwgTixcbjQxMjU6XHRcdEdQKDAsIFx1MDAyNnBmeF8wZl9jN183KSxcbjQxMjY6XHR9IH07XG40MTI3Olx0XG40MTI4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xuNDEyOTpcdFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXG40MTMwOlx0XHRYNyhEKFVuZGVmaW5lZCkpLFxuNDEzMTpcdH07XG40MTMyOlx0XG40MTMzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xuNDEzNDpcdFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXG40MTM1Olx0fTtcbjQxMzY6XHRcbjQxMzc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xuNDEzODpcdFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcbjQxMzk6XHRcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgT3BlcmFuZCBEZWNvZGluZyBpbiBLVk0mIzM5O3MgeDg2IEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgb3BlcmFuZCBkZWNvZGluZyBsb2dpYyBmb3IgYERzdE1lbTY0YCwgYERzdE1lbTE2YCwgYW5kIHJlbGF0ZWQgbWVtb3J5IGRlc3RpbmF0aW9uIG9wZXJhbmRzIHdpdGhpbiB0aGUgS1ZNIHg4NiBlbXVsYXRpb24gbGF5ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaXZlIGludG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByb3V0aW5lcyByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIHRoZSBpbnN0cnVjdGlvbiYjMzk7cyBlbmNvZGluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBpbiBtZW1vcnkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgbWVtb3J5IGl0c2VsZi4gVGhpcyBpcyBwcm9iYWJseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgZW11bGF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBJIGltYWdpbmUgdGhlcmUmIzM5O3MgYSBnb29kIGNodW5rIG9mIGNvZGUgZGVkaWNhdGVkIHRvIGhhbmRsaW5nIGRpZmZlcmVudCBhZGRyZXNzaW5nIG1vZGVzLCBzZWdtZW50IHJlZ2lzdGVycywgYW5kIG9wZXJhbmQgc2l6ZXMgd2l0aGluIHRoYXQgZW11bGF0aW9uIGZpbGUuIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IHBhcnNpbmcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RzdE1lbTY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2VtdWxhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkxLSNkZWZpbmUgRHN0REkgICAgICAgKE9wREkgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5MjojZGVmaW5lIERzdE1lbTY0ICAgIChPcE1lbTY0IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTMtI2RlZmluZSBEc3RNZW0xNiAgICAoT3BNZW0xNiBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDEyMjpcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYE9wTWVtNjRgIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYE9wTWVtNjRgLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIG9wY29kZSBpcyBwcm9jZXNzZWQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGdsb2JhbCBzZWFyY2ggb3IgbWF5YmUgYSBxdWljayBncmVwIHRvIGxvY2F0ZSBhbGwgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGFuZCB1c2FnZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgbW9kdWxlcyByZXNwb25zaWJsZSBmb3IgaW50ZXJwcmV0aW5nIG9yIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMgb2YgdGhpcyB0eXBlLiBNeSBnb2FsIGlzIHRvIG1hcCB0aGUgcGF0aCBvZiB0aGlzIG9wZXJhdGlvbjogZnJvbSBwYXJzaW5nIHRvIHNlbWFudGljIGFuYWx5c2lzLCBjb2RlIGdlbmVyYXRpb24gKGlmIGFwcGxpY2FibGUpLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBydW50aW1lIGV4ZWN1dGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLCBvZiBjb3Vyc2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09wTWVtNjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDUtI2RlZmluZSBPcERJICAgICAgICAgICAgICAgNXVsbCAgLyogRVM6REkvRURJL1JESSAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NjojZGVmaW5lIE9wTWVtNjQgICAgICAgICAgICA2dWxsICAvKiBNZW1vcnksIDY0LWJpdCAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Ny0jZGVmaW5lIE9wSW1tVUJ5dGUgICAgICAgICA3dWxsICAvKiBaZXJvLWV4dGVuZGVkIDgtYml0IGltbWVkaWF0ZSAqL1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcdTAwM2NcdTAwM2MgRHN0U2hpZnQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXHUwMDNjXHUwMDNjIERzdFNoaWZ0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFx1MDAzY1x1MDAzYyBEc3RTaGlmdClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2NDY6XHRjYXNlIE9wTWVtNjQ6XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQ2NDctXHRcdGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXMgPSAoY3R4dC1cdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEVtdWxhdGlvbiBJc3N1ZXMgaW4gS1ZNIHg4NioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgeDg2IGVtdWxhdGlvbiBpbiBLVk0uIE15IGh1bmNoIGlzIHRlbGxpbmcgbWUgdG8gc3RhcnQgYXJvdW5kIGxpbmUgNDY0Niwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYC4gVGhhdCBhcmVhIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBpbiB0aGF0IHZpY2luaXR5LCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUsIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludC4gQWxzbywgSSBiZXR0ZXIgY2hlY2sgb3V0IGB4ODZfZW11bGF0ZV9pbnNuYCBhcm91bmQgbGluZSA1NDE0IGluIHRoZSBzYW1lIGZpbGUuIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIGFuIGlzc3VlIHdpdGhpbiB0aGF0IHNwZWNpZmljIGluc3RydWN0aW9uIGVtdWxhdGlvbiBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZmxvdywgY29uc2lkZXIgdGhlIGlucHV0cywgYW5kIGxvb2sgZm9yIGFueSBkaXNjcmVwYW5jaWVzIG9yIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB3ZSBnb3QgdG8gdGhlIHByb2JsZW0sIGFuZCBzZWUgaWYgSSBjYW4gbmFycm93IGRvd24gYSByb290IGNhdXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjQwOlx0XHRcdCpvcCA9IGN0eHQtXHUwMDNlbWVtb3A7XG40NjQxOlx0XHRcdGN0eHQtXHUwMDNlbWVtb3BwID0gb3A7XG40NjQyOlx0XHRcdGlmIChjdHh0LVx1MDAzZWQgXHUwMDI2IEJpdE9wKVxuNDY0MzpcdFx0XHRcdGZldGNoX2JpdF9vcGVyYW5kKGN0eHQpO1xuNDY0NDpcdFx0XHRvcC1cdTAwM2VvcmlnX3ZhbCA9IG9wLVx1MDAzZXZhbDtcbjQ2NDU6XHRcdFx0YnJlYWs7XG40NjQ2Olx0XHRjYXNlIE9wTWVtNjQ6XG40NjQ3Olx0XHRcdGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXMgPSAoY3R4dC1cdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcbjQ2NDg6XHRcdFx0Z290byBtZW1fY29tbW9uO1xuNDY0OTpcdFx0Y2FzZSBPcEFjYzpcbjQ2NTA6XHRcdFx0b3AtXHUwMDNldHlwZSA9IE9QX1JFRztcbjQ2NTE6XHRcdFx0b3AtXHUwMDNlYnl0ZXMgPSAoY3R4dC1cdTAwM2VkIFx1MDAyNiBCeXRlT3ApID8gMSA6IGN0eHQtXHUwMDNlb3BfYnl0ZXM7XG40NjUyOlx0XHRcdG9wLVx1MDAzZWFkZHIucmVnID0gcmVnX3JtdyhjdHh0LCBWQ1BVX1JFR1NfUkFYKTtcbjQ2NTM6XHRcdFx0ZmV0Y2hfcmVnaXN0ZXJfb3BlcmFuZChvcCk7XG40NjU0Olx0XHRcdGJyZWFrO1xuNDY1NTpcdFx0Y2FzZSBPcEFjY0xvOlxuNDY1NjpcdFx0XHRvcC1cdTAwM2V0eXBlID0gT1BfUkVHO1xuNDY1NzpcdFx0XHRvcC1cdTAwM2VieXRlcyA9IChjdHh0LVx1MDAzZWQgXHUwMDI2IEJ5dGVPcCkgPyAyIDogY3R4dC1cdTAwM2VvcF9ieXRlcztcbjQ2NTg6XHRcdFx0b3AtXHUwMDNlYWRkci5yZWcgPSByZWdfcm13KGN0eHQsIFZDUFVfUkVHU19SQVgpO1xuNDY1OTpcdFx0XHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcbjQ2NjA6XHRcdFx0YnJlYWs7XG40NjYxOlx0XHRjYXNlIE9wQWNjSGk6XG40NjYyOlx0XHRcdGlmIChjdHh0LVx1MDAzZWQgXHUwMDI2IEJ5dGVPcCkge1xuNDY2MzpcdFx0XHRcdG9wLVx1MDAzZXR5cGUgPSBPUF9OT05FO1xuNDY2NDpcdFx0XHRcdGJyZWFrO1xuNDY2NTpcdFx0XHR9XG40NjY2Olx0XHRcdG9wLVx1MDAzZXR5cGUgPSBPUF9SRUc7XG40NjY3Olx0XHRcdG9wLVx1MDAzZWJ5dGVzID0gY3R4dC1cdTAwM2VvcF9ieXRlcztcbjQ2Njg6XHRcdFx0b3AtXHUwMDNlYWRkci5yZWcgPSByZWdfcm13KGN0eHQsIFZDUFVfUkVHU19SRFgpO1xuNDY2OTpcdFx0XHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIE9wZXJhbmQgTWVtb3J5IEZldGNoIGluIHg4NiBFbXVsYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB3aGVyZSB0aGUgb3BlcmFuZCBtZW1vcnkgZmV0Y2ggaGFwcGVucyB3aXRoaW4gdGhlIGB4ODZfZW11bGF0ZV9pbnNuYCBmdW5jdGlvbi4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZXNlIGVtdWxhdG9ycywgdGhhdCBpdCBzaG91bGQgYmUgc29tZXdoZXJlIGluIHRoZSBhcmVhIHRoYXQgZGVhbHMgd2l0aCBvcGVyYW5kIGFjY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggbGluZSA1NDAwIGFuZCBnbyB1cCB0byBhcm91bmQgbGluZSA1NDQwLiBUaGF0IHJhbmdlIGlzIHVzdWFsbHkgd2hlcmUgdGhlIG1lbW9yeSByZWFkcyBhbmQgd3JpdGVzIGFzc29jaWF0ZWQgd2l0aCBpbnN0cnVjdGlvbiBvcGVyYW5kIGhhbmRsaW5nIGFyZSBoYW5kbGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG9wZXJhbmQgZmV0Y2ggbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZS4gSXQmIzM5O3MgdGltZSB0byBnZXQgaGFuZHMtb24gYW5kIHRyYWNlIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MDA6XHRcdFx0XHRcdCAgICBjdHh0LVx1MDAzZXNyYy52YWxwdHIsIGN0eHQtXHUwMDNlc3JjLmJ5dGVzKTtcbjU0MDE6XHRcdFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXG41NDAyOlx0XHRcdFx0Z290byBkb25lO1xuNTQwMzpcdFx0XHRjdHh0LVx1MDAzZXNyYy5vcmlnX3ZhbDY0ID0gY3R4dC1cdTAwM2VzcmMudmFsNjQ7XG41NDA0Olx0XHR9XG41NDA1Olx0XG41NDA2Olx0XHRpZiAoY3R4dC1cdTAwM2VzcmMyLnR5cGUgPT0gT1BfTUVNKSB7XG41NDA3Olx0XHRcdHJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgY3R4dC1cdTAwM2VzcmMyLmFkZHIubWVtLFxuNTQwODpcdFx0XHRcdFx0ICAgIFx1MDAyNmN0eHQtXHUwMDNlc3JjMi52YWwsIGN0eHQtXHUwMDNlc3JjMi5ieXRlcyk7XG41NDA5Olx0XHRcdGlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKVxuNTQxMDpcdFx0XHRcdGdvdG8gZG9uZTtcbjU0MTE6XHRcdH1cbjU0MTI6XHRcbjU0MTM6XHRcdGlmICgoY3R4dC1cdTAwM2VkIFx1MDAyNiBEc3RNYXNrKSA9PSBJbXBsaWNpdE9wcylcbjU0MTQ6XHRcdFx0Z290byBzcGVjaWFsX2luc247XG41NDE1Olx0XG41NDE2Olx0XG41NDE3Olx0XHRpZiAoKGN0eHQtXHUwMDNlZHN0LnR5cGUgPT0gT1BfTUVNKSBcdTAwMjZcdTAwMjYgIShjdHh0LVx1MDAzZWQgXHUwMDI2IE1vdikpIHtcbjU0MTg6XHRcdFx0Lyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkIGlmIE1vdiAqL1xuNTQxOTpcdFx0XHRyYyA9IHNlZ21lbnRlZF9yZWFkKGN0eHQsIGN0eHQtXHUwMDNlZHN0LmFkZHIubWVtLFxuNTQyMDpcdFx0XHRcdFx0ICAgXHUwMDI2Y3R4dC1cdTAwM2Vkc3QudmFsLCBjdHh0LVx1MDAzZWRzdC5ieXRlcyk7XG41NDIxOlx0XHRcdGlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKSB7XG41NDIyOlx0XHRcdFx0aWYgKCEoY3R4dC1cdTAwM2VkIFx1MDAyNiBOb1dyaXRlKSBcdTAwMjZcdTAwMjZcbjU0MjM6XHRcdFx0XHQgICAgcmMgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQgXHUwMDI2XHUwMDI2XG41NDI0Olx0XHRcdFx0ICAgIGN0eHQtXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9PSBQRl9WRUNUT1IpXG41NDI1Olx0XHRcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5lcnJvcl9jb2RlIHw9IFBGRVJSX1dSSVRFX01BU0s7XG41NDI2Olx0XHRcdFx0Z290byBkb25lO1xuNTQyNzpcdFx0XHR9XG41NDI4Olx0XHR9XG41NDI5Olx0XHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbjU0MzA6XHRcbjU0MzE6XHQjaWZkZWYgQ09ORklHX1g4Nl82NFxuNTQzMjpcdFx0aWYgKGN0eHQtXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxuNTQzMzpcdFx0XHRjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtXHUwMDNlZHN0LnZhbDEyODtcbjU0MzQ6XHRcdGVsc2VcbjU0MzU6XHQjZW5kaWZcbjU0MzY6XHRcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NCA9IGN0eHQtXHUwMDNlZHN0LnZhbDY0O1xuNTQzNzpcdFxuNTQzODpcdHNwZWNpYWxfaW5zbjpcbjU0Mzk6XHRcbjU0NDA6XHRcdGlmICh1bmxpa2VseShjaGVja19pbnRlcmNlcHRzKSBcdTAwMjZcdTAwMjYgKGN0eHQtXHUwMDNlZCBcdTAwMjYgSW50ZXJjZXB0KSkge1xuNTQ0MTpcdFx0XHRyYyA9IGVtdWxhdG9yX2NoZWNrX2ludGVyY2VwdChjdHh0LCBjdHh0LVx1MDAzZWludGVyY2VwdCxcbjU0NDI6XHRcdFx0XHRcdFx0ICAgICAgWDg2X0lDUFRfUE9TVF9NRU1BQ0NFU1MpO1xuNTQ0MzpcdFx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcbjU0NDQ6XHRcdFx0XHRnb3RvIGRvbmU7XG41NDQ1Olx0XHR9XG41NDQ2Olx0XG41NDQ3Olx0XHRpZiAoY3R4dC1cdTAwM2VyZXBfcHJlZml4IFx1MDAyNlx1MDAyNiAoY3R4dC1cdTAwM2VkIFx1MDAyNiBTdHJpbmcpKVxuNTQ0ODpcdFx0XHRjdHh0LVx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1JGO1xuNTQ0OTpcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFdyaXRlYmFjayBpbiBJbnN0cnVjdGlvbiBFbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB4ODZfZW11bGF0ZV9pbnNuYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgaXQgaGFuZGxlcyB3cml0ZWJhY2ssIHBhcnRpY3VsYXJseSBmb3IgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MgaGVyZSwgd2hlcmUgYW5kIGhvdyB0aGUgcmVzdWx0cyBvZiB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24gYXJlIHVsdGltYXRlbHkgd3JpdHRlbiBiYWNrLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCByZWxhdGVkIHRvIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kLCBhbmQgZmlndXJlIG91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGhpbiB0aGUgZW11bGF0aW9uIGZyYW1ld29yaywgd2hlcmUgaXQmIzM5O3MgbW9kaWZpZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBlbXVsYXRpb24gaGFuZGxlcyB0aGUgZGV0YWlsczsgSSYjMzk7bGwgc2NhbiBmdXJ0aGVyIGRvd24gdGhlIGNvZGUsIHRvd2FyZHMgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24gdGhhdCBtYW5hZ2Ugb3BlcmFuZCBpbnRlcmFjdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgbG9naWMgZm9yIGRlYWxpbmcgd2l0aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnMuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBjcnVjaWFsIHBoYXNlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZWJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vZW11bGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTY2LS8qIGZyZWU6IDQzLTQ0ICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE2NzojZGVmaW5lIE5vV3JpdGUgICAgICgodTY0KTEgXHUwMDNjXHUwMDNjIDQ1KSAgLyogTm8gd3JpdGViYWNrICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE2OC0jZGVmaW5lIFNyY1dyaXRlICAgICgodTY0KTEgXHUwMDNjXHUwMDNjIDQ2KSAgLyogV3JpdGUgYmFjayBzcmMgb3BlcmFuZCAqL1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MjQzPWVudW0gcmV4X2JpdHMge1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjQ5LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyNTA6c3RhdGljIHZvaWQgd3JpdGViYWNrX3JlZ2lzdGVycyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjUxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTk4MT1zdGF0aWMgaW50IGVtX2JzZl9jKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05ODIte1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5ODM6XHQvKiBJZiBzcmMgaXMgemVybywgZG8gbm90IHdyaXRlYmFjaywgYnV0IHVwZGF0ZSBmbGFncyAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05ODQtXHRpZiAoY3R4dC1cdTAwM2VzcmMudmFsID09IDApXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz05ODk9c3RhdGljIGludCBlbV9ic3JfYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTkwLXtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6OTkxOlx0LyogSWYgc3JjIGlzIHplcm8sIGRvIG5vdCB3cml0ZWJhY2ssIGJ1dCB1cGRhdGUgZmxhZ3MgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTkyLVx0aWYgKGN0eHQtXHUwMDNlc3JjLnZhbCA9PSAwKVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MTc1MD1zdGF0aWMgdm9pZCB3cml0ZV9yZWdpc3Rlcl9vcGVyYW5kKHN0cnVjdCBvcGVyYW5kICpvcClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NTQtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE3NTU6c3RhdGljIGludCB3cml0ZWJhY2soc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBvcGVyYW5kICpvcClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTc1Ni17XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzkyLVx0Y2FzZSBPUF9OT05FOlxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxNzkzOlx0XHQvKiBubyB3cml0ZWJhY2sgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTc5NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xODEyPXN0YXRpYyBpbnQgZW1fcHVzaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxMy17XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE4MTQ6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxNS1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MjA0OD1pbnQgZW11bGF0ZV9pbnRfcmVhbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGlycSlcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIwNTQtXHRpZiAocmMgPT0gWDg2RU1VTF9DT05USU5VRSlcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjA1NTpcdFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjA1Ni1cdHJldHVybiByYztcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTI5ODM9aW50IGVtdWxhdG9yX3Rhc2tfc3dpdGNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjk5Ny1cdFx0Y3R4dC1cdTAwM2VlaXAgPSBjdHh0LVx1MDAzZV9laXA7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjI5OTg6XHRcdHdyaXRlYmFja19yZWdpc3RlcnMoY3R4dCk7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTI5OTktXHR9XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMjYyPXN0YXRpYyBpbnQgZW1fY3Jfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMjY5LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozMjcwOlx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMyNzEtXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTMyODY9c3RhdGljIGludCBlbV9kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMzMDItXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzMDM6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzMwNC1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM2Mz1zdGF0aWMgaW50IGVtX21vdl9zcmVnX3JtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzM3Mi1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzM3MzpcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzc0LVx0Y3R4dC1cdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMzgzPXN0YXRpYyBpbnQgZW1fbGxkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMzODYtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzODc6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzM4OC1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM5Nz1zdGF0aWMgaW50IGVtX2x0cihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MDAtXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0MDE6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQwMi1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQwNj1zdGF0aWMgaW50IGVtX2ludmxwZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MTUtXHRcdGN0eHQtXHUwMDNlb3BzLVx1MDAzZWludmxwZyhjdHh0LCBsaW5lYXIpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDE2Olx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MTctXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM0MzE9c3RhdGljIGludCBlbV9oeXBlcmNhbGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDM5LVx0Y3R4dC1cdTAwM2VfZWlwID0gY3R4dC1cdTAwM2VlaXA7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0NDA6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQ0MS1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQ0NT1zdGF0aWMgaW50IGVtdWxhdGVfc3RvcmVfZGVzY19wdHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDYxLVx0fVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDYyOlx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0NjMtXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM0Nzg9c3RhdGljIGludCBlbV9sZ2R0X2xpZHQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgbGdkdClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0OTctXHRcdGN0eHQtXHUwMDNlb3BzLVx1MDAzZXNldF9pZHQoY3R4dCwgXHUwMDI2ZGVzY19wdHIpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDk4Olx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0OTktXHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM1NjQ9c3RhdGljIGludCBlbV9vdXQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNTY3LVx0XHRcdFx0ICAgIFx1MDAyNmN0eHQtXHUwMDNlc3JjLnZhbCwgMSk7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM1Njg6XHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzU2OS1cdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDYyNT1zdGF0aWMgaW50IGRlY29kZV9vcGVyYW5kKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qgb3BlcmFuZCAqb3AsXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Nzc5LVx0ZGVmYXVsdDpcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDc4MDpcdFx0b3AtXHUwMDNldHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NzgxLVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTUyODU9aW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cylcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0NTUtXHRcdFx0Z290byBkb25lO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NDU2Olx0XHRnb3RvIHdyaXRlYmFjaztcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTQ1Ny1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0OTctXHRcdHJjID0gam1wX3JlbChjdHh0LCBjdHh0LVx1MDAzZXNyYy52YWwpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NDk4Olx0XHRjdHh0LVx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0OTktXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUyNS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTUyNjp3cml0ZWJhY2s6XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MjctXHRpZiAoY3R4dC1cdTAwM2VkIFx1MDAyNiBTcmNXcml0ZSkge1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTI4LVx0XHRCVUdfT04oY3R4dC1cdTAwM2VzcmMudHlwZSA9PSBPUF9NRU0gfHwgY3R4dC1cdTAwM2VzcmMudHlwZSA9PSBPUF9NRU1fU1RSKTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTUyOTpcdFx0cmMgPSB3cml0ZWJhY2soY3R4dCwgXHUwMDI2Y3R4dC1cdTAwM2VzcmMpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTMwLVx0XHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MzMtXHRpZiAoIShjdHh0LVx1MDAzZWQgXHUwMDI2IE5vV3JpdGUpKSB7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU1MzQ6XHRcdHJjID0gd3JpdGViYWNrKGN0eHQsIFx1MDAyNmN0eHQtXHUwMDNlZHN0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUzNS1cdFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTcyLVx0XHRcdFx0Y3R4dC1cdTAwM2VtZW1fcmVhZC5lbmQgPSAwO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTczOlx0XHRcdFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3NC1cdFx0XHRcdHJldHVybiBFTVVMQVRJT05fUkVTVEFSVDtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3NS1cdFx0XHR9XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU1NzY6XHRcdFx0Z290byBkb25lOyAvKiBza2lwIHJpcCB3cml0ZWJhY2sgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3Ny1cdFx0fVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU5NC1cdGlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTk1Olx0XHR3cml0ZWJhY2tfcmVnaXN0ZXJzKGN0eHQpO1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTk2LVxuLS1cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYxOC1cdFx0ZWxzZSBpZiAoY3R4dC1cdTAwM2VvcF9ieXRlcyAhPSA0KVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NjE5Olx0XHRcdGN0eHQtXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBubyB3cml0ZWJhY2sgKi9cbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYyMC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NjQ2LVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NjQ3Olx0Z290byB3cml0ZWJhY2s7XG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NDgtXG4tLVxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01NjUzPXZvaWQgZW11bGF0b3JfaW52YWxpZGF0ZV9yZWdpc3Rlcl9jYWNoZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbi0tXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NTctXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NTg6dm9pZCBlbXVsYXRvcl93cml0ZWJhY2tfcmVnaXN0ZXJfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NTkte1xuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NjYwOlx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTY2MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBGdW5jdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AqKgoKQWxyaWdodCwgbXkgZm9jdXMgaXMgbm93IG9uIHRoYXQgd3JpdGViYWNrIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXQgbGluZSAxNzU1IHdpdGhpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBoeXBlcnZpc29yIGlzIGhhbmRsaW5nIHdyaXRlYmFja3MgZm9yIGVtdWxhdGVkIGRldmljZXMgb3Igb3BlcmF0aW9ucyBvbiB4ODYuIE15IHVuZGVyc3RhbmRpbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgdGhlIGNvcnJlY3RuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyB3cml0dGVuLCB3aGVyZSBpdCYjMzk7cyBiZWluZyB3cml0dGVuIHRvLCBhbmQgdGhlIGxvZ2ljIGdvdmVybmluZyB0aGF0IHdyaXRlIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgYSBidWcgY291bGQgcmVhciBpdHMgaGVhZC4gVGhpcyBpcyB0aGUgYmVkcm9jayBmb3IgdGhlIGVtdWxhdG9yLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byBnZXQgdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG5haWxlZCBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9lbXVsYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTU6XHRzdGF0aWMgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wKVxuMTc1NjpcdHtcbjE3NTc6XHRcdHN3aXRjaCAob3AtXHUwMDNldHlwZSkge1xuMTc1ODpcdFx0Y2FzZSBPUF9SRUc6XG4xNzU5Olx0XHRcdHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQob3ApO1xuMTc2MDpcdFx0XHRicmVhaztcbjE3NjE6XHRcdGNhc2UgT1BfTUVNOlxuMTc2MjpcdFx0XHRpZiAoY3R4dC1cdTAwM2Vsb2NrX3ByZWZpeClcbjE3NjM6XHRcdFx0XHRyZXR1cm4gc2VnbWVudGVkX2NtcHhjaGcoY3R4dCxcbjE3NjQ6XHRcdFx0XHRcdFx0XHQgb3AtXHUwMDNlYWRkci5tZW0sXG4xNzY1Olx0XHRcdFx0XHRcdFx0IFx1MDAyNm9wLVx1MDAzZW9yaWdfdmFsLFxuMTc2NjpcdFx0XHRcdFx0XHRcdCBcdTAwMjZvcC1cdTAwM2V2YWwsXG4xNzY3Olx0XHRcdFx0XHRcdFx0IG9wLVx1MDAzZWJ5dGVzKTtcbjE3Njg6XHRcdFx0ZWxzZVxuMTc2OTpcdFx0XHRcdHJldHVybiBzZWdtZW50ZWRfd3JpdGUoY3R4dCxcbjE3NzA6XHRcdFx0XHRcdFx0ICAgICAgIG9wLVx1MDAzZWFkZHIubWVtLFxuMTc3MTpcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2b3AtXHUwMDNldmFsLFxuMTc3MjpcdFx0XHRcdFx0XHQgICAgICAgb3AtXHUwMDNlYnl0ZXMpO1xuMTc3MzpcdFx0Y2FzZSBPUF9NRU1fU1RSOlxuMTc3NDpcdFx0XHRyZXR1cm4gc2VnbWVudGVkX3dyaXRlKGN0eHQsXG4xNzc1Olx0XHRcdFx0XHQgICAgICAgb3AtXHUwMDNlYWRkci5tZW0sXG4xNzc2Olx0XHRcdFx0XHQgICAgICAgb3AtXHUwMDNlZGF0YSxcbjE3Nzc6XHRcdFx0XHRcdCAgICAgICBvcC1cdTAwM2VieXRlcyAqIG9wLVx1MDAzZWNvdW50KTtcbjE3Nzg6XHRcdGNhc2UgT1BfWE1NOlxuMTc3OTpcdFx0XHRpZiAoIShjdHh0LVx1MDAzZWQgXHUwMDI2IEF2eCkpIHtcbjE3ODA6XHRcdFx0XHRrdm1fd3JpdGVfc3NlX3JlZyhvcC1cdTAwM2VhZGRyLnhtbSwgXHUwMDI2b3AtXHUwMDNldmVjX3ZhbCk7XG4xNzgxOlx0XHRcdFx0YnJlYWs7XG4xNzgyOlx0XHRcdH1cbjE3ODM6XHRcdFx0LyogZnVsbCBZTU0gd3JpdGUgYnV0IHdpdGggaGlnaCBieXRlcyBjbGVhcmVkICovXG4xNzg0Olx0XHRcdG1lbXNldChvcC1cdTAwM2V2YWxwdHIgJiM0MzsgMTYsIDAsIDE2KTtcbjE3ODU6XHRcdFx0ZmFsbHRocm91Z2g7XG4xNzg2Olx0XHRjYXNlIE9QX1lNTTpcbjE3ODc6XHRcdFx0a3ZtX3dyaXRlX2F2eF9yZWcob3AtXHUwMDNlYWRkci54bW0sIFx1MDAyNm9wLVx1MDAzZXZlY192YWwyKTtcbjE3ODg6XHRcdFx0YnJlYWs7XG4xNzg5Olx0XHRjYXNlIE9QX01NOlxuMTc5MDpcdFx0XHRrdm1fd3JpdGVfbW14X3JlZyhvcC1cdTAwM2VhZGRyLm1tLCBcdTAwMjZvcC1cdTAwM2VtbV92YWwpO1xuMTc5MTpcdFx0XHRicmVhaztcbjE3OTI6XHRcdGNhc2UgT1BfTk9ORTpcbjE3OTM6XHRcdFx0Lyogbm8gd3JpdGViYWNrICovXG4xNzk0Olx0XHRcdGJyZWFrO1xuMTc5NTpcdFx0ZGVmYXVsdDpcbjE3OTY6XHRcdFx0YnJlYWs7XG4xNzk3Olx0XHR9XG4xNzk4Olx0XHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbjE3OTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTU2CgkJCQkJCQlvdXRwdXQ6IDQwMgoJCQkJCQkJdGhvdWdodHM6IDI2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBjbXB4Y2hnMTZiIEVtdWxhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyAxMjgtYml0IGNvbXBhcmUtYW5kLWV4Y2hhbmdlIChjbXB4Y2hnMTZiKSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgZm9yIHVzZXItc3BhY2UgbWVtb3J5IGFjY2VzcyB3aXRoaW4gdGhlIEtWTSBlbXVsYXRvci4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmxpbmUgYXNzZW1ibHkgaW52b2x2ZWQuCgpNeSBhbmFseXNpcyBzdGFydGVkIGJ5IHRyYWNpbmcgdGhlIGRhdGEgZmxvdy4gV2UmIzM5O3ZlIGdvdCBgc2VnbWVudGVkX2NtcHhjaGdgIHVzaW5nIGEgYHN0cnVjdCBvcGVyYW5kYCB3aGljaCBjb250YWlucyB1bmlvbnMgZm9yIHZhcmlvdXMgdmFsdWUgc2l6ZXMgKDgsIDE2LCAzMiBieXRlcyBhbmQgdmVjdG9yIHJlZ2lzdGVycykuIENyaXRpY2FsbHksIGZvciAxNi1ieXRlIG9wZXJhdGlvbnMsIGBvcmlnX3ZhbDEyOGAgaXMgaW5pdGlhbGl6ZWQsIHBvdGVudGlhbGx5IHdpdGggYSB1c2VyIG1lbW9yeSBjb3B5IGZyb20gdGhlIGd1ZXN0LiBUaGUgaW5saW5lIGFzc2VtYmx5IGluIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBoYW5kbGVzIHRoZSBhY3R1YWwgYXRvbWljIG9wZXJhdGlvbi4gVGhlIGltcG9ydGFudCB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgdmFsdWUgKGBfb2xkYCksIHRoZSBuZXcgdmFsdWUgKGBfbmV3YCksIGFuZCB0aGUgbWVtb3J5IGFkZHJlc3MgKGBfcHRyYCkgYXJlIGFsbCBleHBsaWNpdGx5IHBhc3NlZC4KCk5vdywgY2hlY2tpbmcgdGhlIGFzc2VtYmx5IGl0c2VsZiwgd2hldGhlciB3aXRoIG9yIHdpdGhvdXQgdGllZCBvdXRwdXQsIHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgcmVkIGZsYWdzIGZvciBLTVNBTi4gVGhlIGlucHV0IG9wZXJhbmRzIGFyZSBmdWxseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgYXNzZW1ibHkgaXMgZXhlY3V0ZWQuIFRoZSB2YWx1ZXMgYXJlIHJlYWQgaW50byByZWdpc3RlcnMgYW5kLCBjcnVjaWFsbHksIHdyaXR0ZW4gYmFjayB1c2luZyB0aGUgYXRvbWljIGBjbXB4Y2hnMTZiYCBpbnN0cnVjdGlvbi4gVGhlcmUmIzM5O3Mgbm8gY3JlYXRpb24gb2YgbmV3IG1lbW9yeSByZWdpb25zLCBubyBwYXNzaW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEsIGp1c3QgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBleGlzdGluZywgZXhwbGljaXRseS1tYW5hZ2VkIHZhbHVlcyB3aXRoaW4gZ3Vlc3QgbWVtb3J5LgoKTG9va2luZyBhdCB0aGUgZW11bGF0aW9uIGxvZ2ljIGluIGBrdm0vZW11bGF0ZS5jYCwgYGVtX2NtcHhjaGc4Yl8xNmJgIGhhbmRsZXMgdGhlIGVtdWxhdGlvbi4gYGN0eHQtJmd0O2RzdC5vcmlnX3ZhbDEyOGAgaG9sZHMgdGhlIG9yaWdpbmFsIHZhbHVlLCByZWFkIHZpYSBgc2VnbWVudGVkX3JlYWRgLiBVcG9uIGNvbXBhcmUsIGBjdHh0LSZndDtkc3QudmFsMTI4YCBpcyB1cGRhdGVkLiBCb3RoIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIGFyZSBpbml0aWFsaXplZCBieSByZWFkcyBvZiBndWVzdCBtZW1vcnkgb3IgcmVnaXN0ZXIgdmFsdWVzLiBBbmQgYHg4Nl9lbXVsYXRlX2luc25gIGp1c3QgY29waWVzIHRoZW0uIEFsbCBvcGVyYXRpb25zIHNlZW0gdG8gaW52b2x2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHZhbHVlcy4KCkZpbmFsbHksIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBjYWxscyBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgZm9yIHRoZSAxMjgtYml0IGNhc2UuIFRoaXMgZnVuY3Rpb24gaXMgc3VwcGxpZWQgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzIChgb2xkYCBhbmQgYG5ld2ApIGFuZCB0aGUgdGFyZ2V0IG1lbW9yeSBhZGRyZXNzLiBOb3RoaW5nIGluZGljYXRlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWQgb3IgYW4gaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlLgoKQWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSwgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBtaWdodCBiZSByZWxhdGVkIHRvIGluc3RydWN0aW9uIGRlY29kaW5nLCBsb2NrIHByZWZpeCB1c2FnZSwgYm91bmRhcnkgYWxpZ25tZW50LCBvciByZWdpc3RlciB3cml0ZXMuIFRoZXNlIGFyZSBzdGFuZGFyZCBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGZvciBlbXVsYXRpb24gYW5kIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIGxvY2tkZXApIGFuZCBhcmUgb3V0c2lkZSBLTVNBTiYjMzk7cyBwdXJ2aWV3LiBJJiMzOTttIGNvbnZpbmNlZCB0aGF0IHRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhIEtNU0FOLXJlbGV2YW50IHJpc2suCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZTpcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cbjIuIFVwZGF0aW5nIGBzdHJ1Y3Qgb3BlcmFuZGAgaW4gYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCB0byBpbmNsdWRlIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIHdpdGhpbiBleGlzdGluZyB1bmlvbnMuXG4zLiBVcGRhdGluZyBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byByZWFkIGd1ZXN0IG1lbW9yeSwgY29tcGFyZSBhZ2FpbnN0IFJEWDpSQVgsIHVwZGF0ZSBSQ1g6UkJYIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciB3cml0ZSBvbGQgdmFsdWVzIHRvIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGUgdXNlci1zcGFjZSBjbXB4Y2hnLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGtlcm5lbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgdW5pbml0aWFsaXplZCBicmFuY2hpbmcgbG9naWMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6XG4tIEFsbCB2YWx1ZXMgb3BlcmF0ZWQgdXBvbiAoYGN0eHQtXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxuLSBObyBuZXcgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIGJ1ZmZlcnMgb3Igc3RydWN0dXJlIHBhZGRpbmdzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbi0gQW55IGJ1Z3MgaW4gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYWdpbmcsIG9yIHJlZ2lzdGVyIG1hbmFnZW1lbnQgd291bGQgYmUgZnVuY3Rpb25hbC9sb2dpY2FsIGlzc3VlcyBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy9LQVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgMTI4LWJpdCB1c2VyIHNwYWNlIGNvbXBhcmUtYW5kLXN3YXAgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20gdXNpbmcgY21weGNoZzE2YikgYW5kIGFkZHMgQ01QWENIRzE2QiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IuXG5cblRoZSBjaGFuZ2VzIGludm9sdmU6XG4xLiBBZGRpbmcgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGlubGluZSBhc3NlbWJseSBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYCB0byBhdG9taWNhbGx5IGNvbXBhcmUgYW5kIHN3YXAgMTI4LWJpdCB2YWx1ZXMgYXQgdXNlciBhZGRyZXNzZXMuXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxuMy4gVXBkYXRpbmcgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AgdG8gcmVhZCBndWVzdCBtZW1vcnksIGNvbXBhcmUgYWdhaW5zdCBSRFg6UkFYLCB1cGRhdGUgUkNYOlJCWCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgb3Igd3JpdGUgb2xkIHZhbHVlcyB0byByZWdpc3RlcnMsIGFuZCBleGVjdXRlIHVzZXItc3BhY2UgY21weGNoZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxuLSBBbGwgdmFsdWVzIG9wZXJhdGVkIHVwb24gKGBjdHh0LVx1MDAzZWRzdC52YWwxMjhgLCBgb2xkYCwgYG5ld2AsIGd1ZXN0IHJlZ2lzdGVyIHZhbHVlcykgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGFuZCBpbml0aWFsaXplZCBkdXJpbmcgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGV4ZWN1dGlvbi5cbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4tIEFueSBidWdzIGluIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgcGFnaW5nLCBvciByZWdpc3RlciBtYW5hZ2VtZW50IHdvdWxkIGJlIGZ1bmN0aW9uYWwvbG9naWNhbCBpc3N1ZXMgb3IgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMvS0FTQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjU5OjE0LjY5MDQ2MTI1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODY4ODc2NjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtX2NtcHhjaGc4YlwiLFxuICAgIFwiZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zblwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgMTI4LWJpdCB1c2VyIHNwYWNlIGNvbXBhcmUtYW5kLXN3YXAgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20gdXNpbmcgY21weGNoZzE2YikgYW5kIGFkZHMgQ01QWENIRzE2QiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IuXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZTpcXG4xLiBBZGRpbmcgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGlubGluZSBhc3NlbWJseSBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYCB0byBhdG9taWNhbGx5IGNvbXBhcmUgYW5kIHN3YXAgMTI4LWJpdCB2YWx1ZXMgYXQgdXNlciBhZGRyZXNzZXMuXFxuMi4gVXBkYXRpbmcgYHN0cnVjdCBvcGVyYW5kYCBpbiBgYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgd2l0aGluIGV4aXN0aW5nIHVuaW9ucy5cXG4zLiBVcGRhdGluZyBpbnN0cnVjdGlvbiBlbXVsYXRpb24gaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYCB0byByZWFkIGd1ZXN0IG1lbW9yeSwgY29tcGFyZSBhZ2FpbnN0IFJEWDpSQVgsIHVwZGF0ZSBSQ1g6UkJYIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvciB3cml0ZSBvbGQgdmFsdWVzIHRvIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGUgdXNlci1zcGFjZSBjbXB4Y2hnLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2Uga2VybmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB1bmluaXRpYWxpemVkIGJyYW5jaGluZyBsb2dpYywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIEFsbCB2YWx1ZXMgb3BlcmF0ZWQgdXBvbiAoYGN0eHQtXFx1MDAzZWRzdC52YWwxMjhgLCBgb2xkYCwgYG5ld2AsIGd1ZXN0IHJlZ2lzdGVyIHZhbHVlcykgYXJlIGV4cGxpY2l0bHkgcG9wdWxhdGVkIGFuZCBpbml0aWFsaXplZCBkdXJpbmcgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGV4ZWN1dGlvbi5cXG4tIE5vIG5ldyB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgYnVmZmVycyBvciBzdHJ1Y3R1cmUgcGFkZGluZ3MgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbi0gQW55IGJ1Z3MgaW4gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYWdpbmcsIG9yIHJlZ2lzdGVyIG1hbmFnZW1lbnQgd291bGQgYmUgZnVuY3Rpb25hbC9sb2dpY2FsIGlzc3VlcyBvciBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy9LQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MTQuNjkwNDY2Mzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIwOTk5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiOWU3NDhhNjg5MDI3MTE0OWUyMTFhMjAyMTA1MDA2ZTFkZWU3MWY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDc6NTk6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXFxuaW5kZXggM2EwZGQzYzJiMjMzZS4uOTQ4OTM3YTI0Y2M1MiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcXG5AQCAtNDA3LDYgKzQwNywyNyBAQCBkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0Kl9vbGQgPSBfX29sZDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGxpa2VseShzdWNjZXNzKTtcXHRcXHRcXHRcXHRcXHR9KVxcbisjZWxzZSAvLyAhQ09ORklHX1g4Nl8zMlxcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7XFx0XFxcXFxcbitcXHRib29sIHN1Y2Nlc3M7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1xcdFxcdFxcXFxcXG4rXFx0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFxcdTAwM2VcXHUwMDNlIDY0KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc21fZ290b19vdXRwdXQoXFxcIlxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiMTogXFxcIiBMT0NLX1BSRUZJWCBcXFwiY21weGNoZzE2YiAlW3B0cl1cXFxcblxcXCJcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgX0FTTV9FWFRBQkxFX1VBKDFiLCAlbFtsYWJlbF0pXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgIDogXFxcIj1AY2N6XFxcIiAoc3VjY2VzcyksXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICAgXFxcIithXFxcIiAoX19vbGRfbG93KSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgICBcXFwiK2RcXFwiIChfX29sZF9oaWdoKSxcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgICBbcHRyXSBcXFwiK21cXFwiICgqX3B0cilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgOiBcXFwiYlxcXCIgKCh1NjQpX19uZXcpLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFxcXCJjXFxcIiAoKHU2NCkoKHUxMjgpX19uZXcgXFx1MDAzZVxcdTAwM2UgNjQpKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgIDogbGFiZWwpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KCFzdWNjZXNzKSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXFx1MDAzY1xcdTAwM2MgNjQpIHwgX19vbGRfbG93O1xcdFxcdFxcXFxcXG4rXFx0bGlrZWx5KHN1Y2Nlc3MpO1xcdFxcdFxcdFxcdFxcdH0pXFxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXFxuICNlbHNlICAvLyAhQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxcbiAjZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXFx0KHsgXFxcXFxcbkBAIC00NjMsNiArNDg0LDMyIEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0Kl9vbGQgPSBfX29sZDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGxpa2VseShfX3Jlc3VsdCk7XFx0XFx0XFx0XFx0XFx0fSlcXG4rI2Vsc2UgLy8hQ09ORklHX1g4Nl8zMlxcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7XFx0XFxcXFxcbitcXHRpbnQgX19yZXN1bHQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1xcdFxcdFxcXFxcXG4rXFx0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFxcdTAwM2VcXHUwMDNlIDY0KTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc20gdm9sYXRpbGUoXFxcIlxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiMTogXFxcIiBMT0NLX1BSRUZJWCBcXFwiY21weGNoZzE2YiAlW3B0cl1cXFxcblxcXCJcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgXFxcIm1vdiAkMCwgJVtyZXN1bHRdXFxcXG5cXFxcdFxcXCJcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgXFxcInNldHogJWJbcmVzdWx0XVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICBcXFwiMjpcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgX0FTTV9FWFRBQkxFX1RZUEVfUkVHKDFiLCAyYiwgRVhfVFlQRV9FRkFVTFRfUkVHLFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgJVtyZXN1bHRdKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFtyZXN1bHRdIFxcXCI9cVxcXCIgKF9fcmVzdWx0KSxcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgICBcXFwiK2FcXFwiIChfX29sZF9sb3cpLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFxcXCIrZFxcXCIgKF9fb2xkX2hpZ2gpLFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgIFtwdHJdIFxcXCIrbVxcXCIgKCpfcHRyKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICA6IFxcXCJiXFxcIiAoKHU2NClfX25ldyksXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICAgXFxcImNcXFwiICgodTY0KSgodTEyOClfX25ldyBcXHUwMDNlXFx1MDAzZSA2NCkpXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIsIFxcXCJjY1xcXCIpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KF9fcmVzdWx0IFxcdTAwM2MgMCkpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRnb3RvIGxhYmVsO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQqX29sZCA9ICgodTEyOClfX29sZF9oaWdoIFxcdTAwM2NcXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcXHRcXHRcXFxcXFxuK1xcdGxpa2VseShfX3Jlc3VsdCk7XFx0XFx0XFx0XFx0XFx0fSlcXG4gI2VuZGlmIC8vIENPTkZJR19YODZfMzJcXG4gI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcXG4gXFxuQEAgLTU1MSwxMSArNTk4LDE4IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcbiBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTtcXG4gXFxuLSNpZm5kZWYgQ09ORklHX1g4Nl8zMlxcbisjaWZkZWYgQ09ORklHX1g4Nl8zMlxcbisvKlxcbisgKiBBbHdheXMgZmFpbCBvbiAzMiBiaXQgYXJjaCBvciA2NCBhcmNoIHdpdGhvdXQgMTI4IGJpdCBjbXB4Y2hnIHN1cHBvcnRcXG4rICovXFxuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpICh7IEJVSUxEX0JVR19PTigxKTsgMDsgfSlcXG4rI2Vsc2VcXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXFx0XFx0XFxcXFxcbiBcXHRfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFxcXCJxXFxcIiwgXFxcInJcXFwiLCAoX3B0ciksIChfb2xkcCksIChfbnZhbCksIF9sYWJlbClcXG4rXFxuICNlbmRpZlxcbiBcXG4rXFxuIC8qXFxuICAqIEZvcmNlIHRoZSBwb2ludGVyIHRvIHVcXHUwMDNjc2l6ZVxcdTAwM2UgdG8gbWF0Y2ggdGhlIHNpemUgZXhwZWN0ZWQgYnkgdGhlIGFzbSBoZWxwZXIuXFxuICAqIGNsYW5nL0xMVk0gY29tcGlsZXMgYWxsIGNhc2VzIGFuZCBvbmx5IGRpc2NhcmRzIHRoZSB1bnVzZWQgcGF0aHMgYWZ0ZXJcXG5AQCAtNTgwLDYgKzYzNCwxNCBAQCBleHRlcm4gdm9pZCBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSh2b2lkKTtcXG4gXFx0Y2FzZSA4OlxcdF9fcmV0ID0gX190cnlfY21weGNoZzY0X3VzZXJfYXNtKChfX2ZvcmNlIHU2NCAqKShfcHRyKSwgKF9vbGRwKSxcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAoX252YWwpLCBfbGFiZWwpO1xcdFxcdFxcXFxcXG4gXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRjYXNlIDE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KSlcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdF9fcmV0ID0gX190cnlfY21weGNoZzEyOF91c2VyX2FzbShcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdChfX2ZvcmNlIHUxMjggKikoX3B0ciksXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHQoX29sZHApLCAoX252YWwpLCBfbGFiZWwpO1xcdFxcdFxcXFxcXG4rXFx0XFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0X19yZXQgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRkZWZhdWx0OiBfX3RyeV9jbXB4Y2hnX3VzZXJfd3Jvbmdfc2l6ZSgpO1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19yZXQ7XFx0XFx0XFx0XFx0XFx0XFx0fSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG5pbmRleCBjMWIyMTI4MjE4N2YzLi41MzU4NDIzMzZkNzY2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXFxuQEAgLTIxODQsMjQgKzIxODQsMzYgQEAgc3RhdGljIGludCBlbV9jYWxsX25lYXJfYWJzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuKyNkZWZpbmUgZW1fY21weGNoZzhiXzE2YihfX2MsIHJiaXRzLCBtYml0cylcXFxcXFxuK2RvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHUjI21iaXRzIG9sZCA9IF9fYy1cXHUwMDNlZHN0Lm9yaWdfdmFsIyNtYml0cztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmICgoKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHxcXHRcXHRcXFxcXFxuK1xcdCAgICAoKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XFx0XFx0XFxcXFxcbitcXHRcXHQqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JBWCkgPSAodSMjcmJpdHMpIChvbGQgXFx1MDAzZVxcdTAwM2UgMCk7XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JEWCkgPSAodSMjcmJpdHMpIChvbGQgXFx1MDAzZVxcdTAwM2UgcmJpdHMpO1xcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19jLVxcdTAwM2VlZmxhZ3MgXFx1MDAyNj0gflg4Nl9FRkxBR1NfWkY7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR9IGVsc2Uge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19jLVxcdTAwM2Vkc3QudmFsIyNtYml0cyA9ICgodSMjbWJpdHMpcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkNYKSBcXHUwMDNjXFx1MDAzYyByYml0cykgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0KHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpO1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRfX2MtXFx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1pGO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSB3aGlsZSAoMClcXG4rXFxuIHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbiB7XFxuLVxcdHU2NCBvbGQgPSBjdHh0LVxcdTAwM2Vkc3Qub3JpZ192YWw2NDtcXG4tXFxuLVxcdGlmIChjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoOCArICEhKGN0eHQtXFx1MDAzZXJleF9iaXRzIFxcdTAwMjYgUkVYX1cpICogOCAhPSBjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMpKVxcbiBcXHRcXHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XFxuIFxcbi1cXHRpZiAoKCh1MzIpIChvbGQgXFx1MDAzZVxcdTAwM2UgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8XFxuLVxcdCAgICAoKHUzMikgKG9sZCBcXHUwMDNlXFx1MDAzZSAzMikgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JEWCkpKSB7XFxuLVxcdFxcdCpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JBWCkgPSAodTMyKSAob2xkIFxcdTAwM2VcXHUwMDNlIDApO1xcbi1cXHRcXHQqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCBcXHUwMDNlXFx1MDAzZSAzMik7XFxuLVxcdFxcdGN0eHQtXFx1MDAzZWVmbGFncyBcXHUwMDI2PSB+WDg2X0VGTEFHU19aRjtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0Y3R4dC1cXHUwMDNlZHN0LnZhbDY0ID0gKCh1NjQpcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JDWCkgXFx1MDAzY1xcdTAwM2MgMzIpIHxcXG4tXFx0XFx0XFx0KHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JCWCk7XFxuLVxcbi1cXHRcXHRjdHh0LVxcdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcXG4tXFx0fVxcbitcXHRpZiAoIShjdHh0LVxcdTAwM2VyZXhfYml0cyBcXHUwMDI2IFJFWF9XKSlcXG4rXFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxcbitcXHRlbHNlXFxuK1xcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuKyNlbmRpZlxcbiBcXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcXG4gfVxcbiBcXG5AQCAtNTQxNCw4ICs1NDI2LDE0IEBAIGludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXFxuIFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdC8qIENvcHkgZnVsbCA2NC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXFxuLVxcdGN0eHQtXFx1MDAzZWRzdC5vcmlnX3ZhbDY0ID0gY3R4dC1cXHUwMDNlZHN0LnZhbDY0O1xcbitcXHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cXG4rXFxuKyNpZmRlZiBDT05GSUdfWDg2XzY0XFxuK1xcdGlmIChjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXFxuK1xcdFxcdGN0eHQtXFx1MDAzZWRzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtXFx1MDAzZWRzdC52YWwxMjg7XFxuK1xcdGVsc2VcXG4rI2VuZGlmXFxuK1xcdFxcdGN0eHQtXFx1MDAzZWRzdC5vcmlnX3ZhbDY0ID0gY3R4dC1cXHUwMDNlZHN0LnZhbDY0O1xcbiBcXG4gc3BlY2lhbF9pbnNuOlxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjg5OTExODQ1MjMzZGMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0yNjMsNiArMjYzLDkgQEAgc3RydWN0IG9wZXJhbmQge1xcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgb3JpZ192YWw7XFxuIFxcdFxcdHU2NCBvcmlnX3ZhbDY0O1xcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxcbitcXHRcXHR1MTI4IG9yaWdfdmFsMTI4O1xcbisjZW5kaWZcXG4gXFx0fTtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nICpyZWc7XFxuQEAgLTI3Niw2ICsyNzksOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuIFxcdFxcdHU2NCB2YWw2NDtcXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0XFx0dTEyOCB2YWwxMjg7XFxuKyNlbmRpZlxcbiBcXHRcXHRjaGFyIHZhbHB0cltzaXplb2YoYXZ4MjU2X3QpXTtcXG4gXFx0XFx0c3NlMTI4X3QgdmVjX3ZhbDtcXG4gXFx0XFx0YXZ4MjU2X3QgdmVjX3ZhbDI7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjYwYmUxNmYwNWQ3OTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTUyNzEsNyArNTI3MSw3IEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0aW50IHI7XFxuIFxcbiBcXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xcbi1cXHRpZiAoYnl0ZXMgXFx1MDAzZSA4IHx8IChieXRlcyBcXHUwMDI2IChieXRlcyAtIDEpKSlcXG4rXFx0aWYgKGJ5dGVzIFxcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXFx1MDAyNiAoYnl0ZXMgLSAxKSkpXFxuIFxcdFxcdGdvdG8gZW11bF93cml0ZTtcXG4gXFxuIFxcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcXG5AQCAtNTMxMSw2ICs1MzExLDExIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4gXFx0Y2FzZSA4OlxcbiBcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbiBcXHRcXHRicmVhaztcXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0Y2FzZSAxNjpcXG4rXFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTEyOCwgaHZhLCBvbGQsIG5ldyk7XFxuK1xcdFxcdGJyZWFrO1xcbisjZW5kaWZcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0QlVHKCk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MTUuMjkzNTA5MDE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjk2NDM1NTIwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbV9jbXB4Y2hnOGJcIixcbiAgICBcImVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc25cIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgMTI4LWJpdCBDTVBYQ0hHMTZCIGVtdWxhdGlvbiB0byB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvciBhbmQgaW1wbGVtZW50cyBhIG5ldyAxMjgtYml0IHVzZXIgY21weGNoZyBpbmxpbmUgYXNzZW1ibHkgcHJpbWl0aXZlIChfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtKSBvbiB4ODZfNjQuIEl0IGFkZHMgYSBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIGluIGVtX2NtcHhjaGc4YiBhbmQgbW9kaWZpZXMgb3BlcmFuZCBoYW5kbGluZyBpbiB4ODZfZW11bGF0ZV9pbnNuIGFuZCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSB2aWEgc3RhbmRhcmQgS1ZNIGd1ZXN0IGVtdWxhdGlvbiBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI5ZTc0OGE2ODkwMjcxMTQ5ZTIxMWEyMDIxMDUwMDZlMWRlZTcxZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjU5OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXG5pbmRleCAzYTBkZDNjMmIyMzNlLi45NDg5MzdhMjRjYzUyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbkBAIC00MDcsNiArNDA3LDI3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHVubGlrZWx5KCFzdWNjZXNzKSlcdFx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoc3VjY2Vzcyk7XHRcdFx0XHRcdH0pXG4rI2Vsc2UgLy8gIUNPTkZJR19YODZfMzJcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHtcdFxcXG4rXHRib29sIHN1Y2Nlc3M7XHRcdFx0XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhfcHRyKSBfb2xkID0gKF9fdHlwZW9mX18oX3B0cikpKF9wb2xkKTtcdFx0XFxcbitcdHU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkO1x0XHRcdFx0XHRcXFxuK1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XHRcdFx0XHRcXFxuK1x0YXNtX2dvdG9fb3V0cHV0KFwiXFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIFwiMTogXCIgTE9DS19QUkVGSVggXCJjbXB4Y2hnMTZiICVbcHRyXVxcblwiXHRcdFxcXG4rXHRcdCAgICAgX0FTTV9FWFRBQkxFX1VBKDFiLCAlbFtsYWJlbF0pXHRcdFx0XFxcbitcdFx0ICAgICA6IFwiPUBjY3pcIiAoc3VjY2VzcyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCIrYVwiIChfX29sZF9sb3cpLFx0XHRcdFx0XFxcbitcdFx0ICAgICAgIFwiK2RcIiAoX19vbGRfaGlnaCksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgW3B0cl0gXCIrbVwiICgqX3B0cilcdFx0XHRcdFxcXG4rXHRcdCAgICAgOiBcImJcIiAoKHU2NClfX25ldyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCJjXCIgKCh1NjQpKCh1MTI4KV9fbmV3IFx1MDAzZVx1MDAzZSA2NCkpXHRcdFx0XFxcbitcdFx0ICAgICA6IFwibWVtb3J5XCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIDogbGFiZWwpO1x0XHRcdFx0XHRcdFxcXG4rXHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVx0XHRcdFx0XHRcdFxcXG4rXHRcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXHUwMDNjXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcdFx0XFxcbitcdGxpa2VseShzdWNjZXNzKTtcdFx0XHRcdFx0fSlcbiAjZW5kaWYgLy8gQ09ORklHX1g4Nl8zMlxuICNlbHNlICAvLyAhQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxuICNkZWZpbmUgX190cnlfY21weGNoZ191c2VyX2FzbShpdHlwZSwgbHR5cGUsIF9wdHIsIF9wb2xkLCBfbmV3LCBsYWJlbClcdCh7IFxcXG5AQCAtNDYzLDYgKzQ4NCwzMiBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVx0XHRcdFx0XHRcXFxuIFx0XHQqX29sZCA9IF9fb2xkO1x0XHRcdFx0XHRcdFxcXG4gXHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuKyNlbHNlIC8vIUNPTkZJR19YODZfMzJcbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHtcdFxcXG4rXHRpbnQgX19yZXN1bHQ7XHRcdFx0XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXyhfcHRyKSBfb2xkID0gKF9fdHlwZW9mX18oX3B0cikpKF9wb2xkKTtcdFx0XFxcbitcdHU2NCBfX29sZF9sb3cgPSAodTY0KSpfb2xkO1x0XHRcdFx0XHRcXFxuK1x0dTY0IF9fb2xkX2hpZ2ggPSAodTY0KSgqX29sZCBcdTAwM2VcdTAwM2UgNjQpO1x0XHRcdFx0XFxcbitcdF9fdHlwZW9mX18oKihfcHRyKSkgX19uZXcgPSAoX25ldyk7XHRcdFx0XHRcXFxuK1x0YXNtIHZvbGF0aWxlKFwiXFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIFwiMTogXCIgTE9DS19QUkVGSVggXCJjbXB4Y2hnMTZiICVbcHRyXVxcblwiXHRcdFxcXG4rXHRcdCAgICAgXCJtb3YgJDAsICVbcmVzdWx0XVxcblxcdFwiXHRcdFx0XHRcXFxuK1x0XHQgICAgIFwic2V0eiAlYltyZXN1bHRdXFxuXCJcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCIyOlxcblwiXHRcdFx0XHRcdFx0XFxcbitcdFx0ICAgICBfQVNNX0VYVEFCTEVfVFlQRV9SRUcoMWIsIDJiLCBFWF9UWVBFX0VGQVVMVF9SRUcsXHRcXFxuK1x0XHRcdFx0XHQgICAlW3Jlc3VsdF0pXHRcdFx0XFxcbitcdFx0ICAgICA6IFtyZXN1bHRdIFwiPXFcIiAoX19yZXN1bHQpLFx0XHRcdFxcXG4rXHRcdCAgICAgICBcIithXCIgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCIrZFwiIChfX29sZF9oaWdoKSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBbcHRyXSBcIittXCIgKCpfcHRyKVx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFwiYlwiICgodTY0KV9fbmV3KSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcImNcIiAoKHU2NCkoKHUxMjgpX19uZXcgXHUwMDNlXHUwMDNlIDY0KSlcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJtZW1vcnlcIiwgXCJjY1wiKTtcdFx0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseShfX3Jlc3VsdCBcdTAwM2MgMCkpXHRcdFx0XHRcdFxcXG4rXHRcdGdvdG8gbGFiZWw7XHRcdFx0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseSghX19yZXN1bHQpKVx0XHRcdFx0XHRcXFxuK1x0XHQqX29sZCA9ICgodTEyOClfX29sZF9oaWdoIFx1MDAzY1x1MDAzYyA2NCkgfCBfX29sZF9sb3c7XHRcdFxcXG4rXHRsaWtlbHkoX19yZXN1bHQpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2VuZGlmIC8vIENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRcbiBcbkBAIC01NTEsMTEgKzU5OCwxOCBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFxuIGV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuIFxuLSNpZm5kZWYgQ09ORklHX1g4Nl8zMlxuKyNpZmRlZiBDT05GSUdfWDg2XzMyXG4rLypcbisgKiBBbHdheXMgZmFpbCBvbiAzMiBiaXQgYXJjaCBvciA2NCBhcmNoIHdpdGhvdXQgMTI4IGJpdCBjbXB4Y2hnIHN1cHBvcnRcbisgKi9cbisjZGVmaW5lIF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKSAoeyBCVUlMRF9CVUdfT04oMSk7IDA7IH0pXG4rI2Vsc2VcbiAjZGVmaW5lIF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbShfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbClcdFx0XFxcbiBcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXCJxXCIsIFwiclwiLCAoX3B0ciksIChfb2xkcCksIChfbnZhbCksIF9sYWJlbClcbitcbiAjZW5kaWZcbiBcbitcbiAvKlxuICAqIEZvcmNlIHRoZSBwb2ludGVyIHRvIHVcdTAwM2NzaXplXHUwMDNlIHRvIG1hdGNoIHRoZSBzaXplIGV4cGVjdGVkIGJ5IHRoZSBhc20gaGVscGVyLlxuICAqIGNsYW5nL0xMVk0gY29tcGlsZXMgYWxsIGNhc2VzIGFuZCBvbmx5IGRpc2NhcmRzIHRoZSB1bnVzZWQgcGF0aHMgYWZ0ZXJcbkBAIC01ODAsNiArNjM0LDE0IEBAIGV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xuIFx0Y2FzZSA4Olx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oKF9fZm9yY2UgdTY0ICopKF9wdHIpLCAoX29sZHApLFxcXG4gXHRcdFx0XHRcdFx0IChfbnZhbCksIF9sYWJlbCk7XHRcdFxcXG4gXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuK1x0Y2FzZSAxNjpcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DWDE2KSlcdFx0XHRcdFxcXG4rXHRcdFx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtKFx0XHRcdFxcXG4rXHRcdFx0XHRcdChfX2ZvcmNlIHUxMjggKikoX3B0ciksXHRcdFx0XFxcbitcdFx0XHRcdFx0KF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKTtcdFx0XFxcbitcdFx0ZWxzZVx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdF9fcmV0ID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0XHRicmVhaztcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdGRlZmF1bHQ6IF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKCk7XHRcdFx0XHRcXFxuIFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3JldDtcdFx0XHRcdFx0XHR9KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5pbmRleCBjMWIyMTI4MjE4N2YzLi41MzU4NDIzMzZkNzY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuY1xuQEAgLTIxODQsMjQgKzIxODQsMzYgQEAgc3RhdGljIGludCBlbV9jYWxsX25lYXJfYWJzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbisjZGVmaW5lIGVtX2NtcHhjaGc4Yl8xNmIoX19jLCByYml0cywgbWJpdHMpXFxcbitkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHUjI21iaXRzIG9sZCA9IF9fYy1cdTAwM2Vkc3Qub3JpZ192YWwjI21iaXRzO1x0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdEJVSUxEX0JVR19PTihyYml0cyAqIDIgIT0gbWJpdHMpO1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKCgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIDApICE9ICh1IyNyYml0cykgcmVnX3JlYWQoX19jLCBWQ1BVX1JFR1NfUkFYKSkgfHxcdFx0XFxcbitcdCAgICAoKHUjI3JiaXRzKSAob2xkIFx1MDAzZVx1MDAzZSByYml0cykgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SRFgpKSkge1x0XHRcXFxuK1x0XHQqcmVnX3dyaXRlKF9fYywgVkNQVV9SRUdTX1JBWCkgPSAodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIDApO1x0XHRcdFxcXG4rXHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgcmJpdHMpO1x0XHRcdFxcXG4rXHRcdF9fYy1cdTAwM2VlZmxhZ3MgXHUwMDI2PSB+WDg2X0VGTEFHU19aRjtcdFx0XHRcdFx0XHRcdFxcXG4rXHR9IGVsc2Uge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0X19jLVx1MDAzZWRzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpIFx1MDAzY1x1MDAzYyByYml0cykgfFx0XFxcbitcdFx0XHRcdFx0KHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpO1x0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdF9fYy1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcdFx0XHRcdFx0XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rfSB3aGlsZSAoMClcbitcbiBzdGF0aWMgaW50IGVtX2NtcHhjaGc4YihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcbiB7XG4tXHR1NjQgb2xkID0gY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NDtcbi1cbi1cdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbitcdGlmIChXQVJOX09OX09OQ0UoOCArICEhKGN0eHQtXHUwMDNlcmV4X2JpdHMgXHUwMDI2IFJFWF9XKSAqIDggIT0gY3R4dC1cdTAwM2Vkc3QuYnl0ZXMpKVxuIFx0XHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XG4gXG4tXHRpZiAoKCh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDApICE9ICh1MzIpIHJlZ19yZWFkKGN0eHQsIFZDUFVfUkVHU19SQVgpKSB8fFxuLVx0ICAgICgodTMyKSAob2xkIFx1MDAzZVx1MDAzZSAzMikgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JEWCkpKSB7XG4tXHRcdCpyZWdfd3JpdGUoY3R4dCwgVkNQVV9SRUdTX1JBWCkgPSAodTMyKSAob2xkIFx1MDAzZVx1MDAzZSAwKTtcbi1cdFx0KnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkRYKSA9ICh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDMyKTtcbi1cdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2PSB+WDg2X0VGTEFHU19aRjtcbi1cdH0gZWxzZSB7XG4tXHRcdGN0eHQtXHUwMDNlZHN0LnZhbDY0ID0gKCh1NjQpcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JDWCkgXHUwMDNjXHUwMDNjIDMyKSB8XG4tXHRcdFx0KHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JCWCk7XG4tXG4tXHRcdGN0eHQtXHUwMDNlZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7XG4tXHR9XG4rXHRpZiAoIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykpXG4rXHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgMzIsIDY0KTtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuK1x0ZWxzZVxuK1x0XHRlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDY0LCAxMjgpO1xuKyNlbmRpZlxuIFx0cmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7XG4gfVxuIFxuQEAgLTU0MTQsOCArNTQyNiwxNCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBjaGVja19pbnRlcmNlcHRzKVxuIFx0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuIFx0fVxuLVx0LyogQ29weSBmdWxsIDY0LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cbi1cdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbitcdC8qIENvcHkgZnVsbCA2NC8xMjgtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqL1xuK1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRpZiAoY3R4dC1cdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXG4rXHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC1cdTAwM2Vkc3QudmFsMTI4O1xuK1x0ZWxzZVxuKyNlbmRpZlxuK1x0XHRjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDY0ID0gY3R4dC1cdTAwM2Vkc3QudmFsNjQ7XG4gXG4gc3BlY2lhbF9pbnNuOlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjg5OTExODQ1MjMzZGMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuKysrIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0yNjMsNiArMjYzLDkgQEAgc3RydWN0IG9wZXJhbmQge1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nIG9yaWdfdmFsO1xuIFx0XHR1NjQgb3JpZ192YWw2NDtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuK1x0XHR1MTI4IG9yaWdfdmFsMTI4O1xuKyNlbmRpZlxuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0dW5zaWduZWQgbG9uZyAqcmVnO1xuQEAgLTI3Niw2ICsyNzksOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7XG4gXHR1bmlvbiB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgdmFsO1xuIFx0XHR1NjQgdmFsNjQ7XG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdFx0dTEyOCB2YWwxMjg7XG4rI2VuZGlmXG4gXHRcdGNoYXIgdmFscHRyW3NpemVvZihhdngyNTZfdCldO1xuIFx0XHRzc2UxMjhfdCB2ZWNfdmFsO1xuIFx0XHRhdngyNTZfdCB2ZWNfdmFsMjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLjYwYmUxNmYwNWQ3OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTUyNzEsNyArNTI3MSw3IEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdGludCByO1xuIFxuIFx0LyogZ3Vlc3RzIGNtcHhjaGc4YiBoYXZlIHRvIGJlIGVtdWxhdGVkIGF0b21pY2FsbHkgKi9cbi1cdGlmIChieXRlcyBcdTAwM2UgOCB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbitcdGlmIChieXRlcyBcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXHUwMDI2IChieXRlcyAtIDEpKSlcbiBcdFx0Z290byBlbXVsX3dyaXRlO1xuIFxuIFx0Z3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpO1xuQEAgLTUzMTEsNiArNTMxMSwxMSBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXG4gXHRjYXNlIDg6XG4gXHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHU2NCwgaHZhLCBvbGQsIG5ldyk7XG4gXHRcdGJyZWFrO1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRjYXNlIDE2OlxuK1x0XHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4gXHRkZWZhdWx0OlxuIFx0XHRCVUcoKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjU5OjE1LjI5MzUxMTY0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyOTIzNjA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IGNtcHhjaGcxNmIgaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsIGFuZCBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhbmQgdGFyZ2V0IHN5bWJvbHMuIFRoZSBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIHNvbWV3aGF0LlxuXG5GaXJzdCwgSSBzZWUgY2hhbmdlcyBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYC4gSXQgaW50cm9kdWNlcyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAsIGhhbmRsaW5nIHRoZSBgY21weGNoZzE2YmAgaW5zdHJ1Y3Rpb24sIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgYENPTkZJR19DQ19IQVNfQVNNX0dPVE9fVElFRF9PVVRQVVRgIG9wdGltaXphdGlvbi4gVGhlIGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAgc3dpdGNoIHN0YXRlbWVudCBpcyB1cGRhdGVkIHRvIGFjY29tbW9kYXRlIHRoZSBgY2FzZSAxNjpgIHNjZW5hcmlvLCBsZXZlcmFnaW5nIGBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1gxNilgIGFuZCB0aGF0IG5ldyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAuIFRoaXMgcGFydCBpcyBpbnRlcmVzdGluZzsgZGlyZWN0IHVzZXItc3BhY2UgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGFsd2F5cyBhIHBvdGVudGlhbCB0YXJnZXQuXG5cblRoZW4sIHRoZSBmb2N1cyBzaGlmdHMgdG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLCB3aGljaCBpcyBjcnVjaWFsLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBjbXB4Y2hnMTZiIGVtdWxhdGlvbiB3aXRoaW4gdGhlIEtWTSB4ODYgZW11bGF0b3IuIFdlIGhhdmUgdGhlIGBlbV9jbXB4Y2hnOGJfMTZiYCBtYWNybyBhbmQgdGhlIGBlbV9jbXB4Y2hnOGJgIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgYFJFWF9XYCBjYXNlLCBtZWFuaW5nIDY0LWJpdCBvcGVyYW5kIHNpemVzLiBJdCdzIG5vdyBjYWxsaW5nIGBlbV9jbXB4Y2hnOGJfMTZiKGN0eHQsIDY0LCAxMjgpYC4gVGhlIGluY2x1c2lvbiBvZiBgV0FSTl9PTl9PTkNFYCBpbmRpY2F0ZXMgdGhhdCBvcGVyYW5kIHNpemVzIHdpbGwgYmUgdmFsaWRhdGVkLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gVGhlcmUncyBhbHNvIGB4ODZfZW11bGF0ZV9pbnNuYCBjb3B5aW5nIGBjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDEyOCA9IGN0eHQtXHUwMDNlZHN0LnZhbDEyOGAgd2hlbiB0aGUgZGVzdGluYXRpb24gc2l6ZSBpcyAxNiBieXRlcy4gVGhpcyBwb2ludHMgdG8gZW11bGF0aW9uIHN0YXRlIGhhbmRsaW5nLlxuXG5UaGUgaGVhZGVyIGZpbGUgYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCBleHRlbmRzIHRoZSBgc3RydWN0IG9wZXJhbmRgIHRvIGluY2x1ZGUgYG9yaWdfdmFsMTI4YCBhbmQgYHZhbDEyOGAgZmllbGRzIHVuZGVyIGBDT05GSUdfWDg2XzY0YCwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gc3VwcG9ydCB0aGUgMTI4LWJpdCBvcGVyYXRpb25zLlxuXG5GaW5hbGx5LCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBwcm92aWRlcyB0aGUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGZ1bmN0aW9uIHdoaWNoIHNwZWNpZmljYWxseSBzdXBwb3J0cyB0aGUgYGJ5dGVzID09IDE2YCBjYXNlIHVzaW5nIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0aW9uIGxvZ2ljIGFjdHVhbGx5IGludGVyYWN0cyB3aXRoIHRoZSBzaW11bGF0ZWQgaGFyZHdhcmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1c2Ugc29tZSBzdGF0aWMgYW5hbHlzaXMgdG9vbHMgb24gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIGFuZCBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBlbXVsYXRpb24gbG9naWMgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgdGFyZ2V0aW5nIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCB0aGUgaGFuZGxpbmcgb2YgdGhlIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIG9wZXJhdGlvbiwgYW5kIHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBiZSBtaXNzZWQgZHVyaW5nIHRoZSBlbXVsYXRpb24uIEFyZWFzIGRlYWxpbmcgd2l0aCBgY3R4dC1cdTAwM2Vkc3QuYnl0ZXNgIG9yIHNpemUgdmFsaWRhdGlvbiB3aWxsIGltbWVkaWF0ZWx5IGJlIHN1c3BlY3QuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGhlIGVtdWxhdGVkIG5hdHVyZSBvZiB0aGlzIGluc3RydWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MjAuNTg1ODc0NDk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA4MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtX2NtcHhjaGc4YlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0yMTczPXN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIxODc6I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXFxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODgtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIwNS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMDY6c3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMS1cXHRpZiAoIShjdHh0LVxcdTAwM2VyZXhfYml0cyBcXHUwMDI2IFJFWF9XKSlcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTI6XFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMy0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxNC1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjE1OlxcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE2LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NTk6MjAuNjM1MDkxODY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwMjE3MDk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgaW4gS1ZNJ3MgWDg2IENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBLVk0gaGFuZGxlcyBgY21weGNoZ2AgaW5zdHJ1Y3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gZW11bGF0ZWQgc2NlbmFyaW9zLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgZnVuY3Rpb24sIHdoaWNoIEkgYmVsaWV2ZSByZXNpZGVzIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgWDg2IGVtdWxhdGlvbiBsb2dpYyBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gS1ZNLCBzbyBpdCdzIHRoZSBuYXR1cmFsIGZpcnN0IHBsYWNlIHRvIGxvb2suIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBob3cgS1ZNIGhhbmRsZXMgdGhlIGF0b21pYyBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24gd2hlbiBpdCdzIG5vdCBiZWluZyBkaXJlY3RseSBoYW5kbGVkIGJ5IHRoZSBob3N0IENQVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggaXQgdGFrZXMgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHBlcmZvcm1hbmNlIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGVtdWxhdGluZyB0aGlzOyB0aGVyZWZvcmUsIG15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGVtdWxhdGlvbiBpcyBhY3RpdmF0ZWQuIEkgYW0gYWxzbyBrZWVubHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgb3ZlcmFsbCBLVk0gYXJjaGl0ZWN0dXJlOyB0aGUgY29udGV4dCBpdCBvcGVyYXRlcyBpbiBhbmQgYW55IGRlcGVuZGVuY2llcyBvciBvcHRpbWl6YXRpb25zIHRoYXQgaXQgbGV2ZXJhZ2VzLiBUaGUgc3BlY2lmaWMgdGFyZ2V0IHdpbGwgYmUgdG8gbGVhcm4gaG93IHRoZSBlbXVsYXRvciBpbnRlcmFjdHMgd2l0aCB0aGUgaG9zdCBDUFUncyBtZW1vcnkgYW5kIHJlZ2lzdGVycyB0byBhY2hpZXZlIHRoZSBjb3JyZWN0IGF0b21pYyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjU5OjIzLjUzNzI2NjA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjMxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNjEtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI3LVxcdC53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4Mjg6XFx0LmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI5LVxcdC5pbnZscGcgICAgICAgICAgICAgID0gZW11bGF0b3JfaW52bHBnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo1OToyMy41ODU5MDM0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMDA2NzgxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdXNhZ2Ugb2YgYGNtcHhjaGcxMjhfdXNlcmAgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9uLCBgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJgLCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSBhbGwgb2YgaXRzIGNhbGxlcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgdW5zYWZlX3RyeV9jbXB4Y2hnX3VzZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGVtcGxveWVkLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBzZWN1cml0eSBzY3J1dGlueSwgb3IgbWF5YmUgZXZlbiBpZGVudGlmeSBwb3RlbnRpYWwgYnVncy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODY5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjI1LjU5MjY4NzUxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc4MDcyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuc2FmZV90cnlfY21weGNoZ191c2VyfHRyeV9jbXB4Y2hnX3VzZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTMzND1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTM3Mi0jaWZkZWYgQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDozNzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtMzc0LVxcdGJvb2wgc3VjY2VzcztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDMyLSNlbHNlICAvLyAhQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo0MzM6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVxcdCh7IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDM0LVxcdGludCBfX2VyciA9IDA7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTU5MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTU5OC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NTk5OmV4dGVybiB2b2lkIF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MDAtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjA3LSNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjA4OlxcdF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcInFcXFwiLCBcXFwiclxcXCIsIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MDktXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjE3LSAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MTg6I2RlZmluZSB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcihfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbCkgKHtcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYxOS1cXHRib29sIF9fcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjEtXFx0c3dpdGNoIChzaXplb2YoKihfcHRyKSkpIHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYyMjpcXHRjYXNlIDE6XFx0X19yZXQgPSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKFxcXCJiXFxcIiwgXFxcInFcXFwiLFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjIzLVxcdFxcdFxcdFxcdFxcdCAgICAgICAoX19mb3JjZSB1OCAqKShfcHRyKSwgKF9vbGRwKSxcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjI1LVxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjI2OlxcdGNhc2UgMjpcXHRfX3JldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcIndcXFwiLCBcXFwiclxcXCIsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIChfX2ZvcmNlIHUxNiAqKShfcHRyKSwgKF9vbGRwKSxcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjI5LVxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjMwOlxcdGNhc2UgNDpcXHRfX3JldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcImxcXFwiLCBcXFwiclxcXCIsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIChfX2ZvcmNlIHUzMiAqKShfcHRyKSwgKF9vbGRwKSxcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjQ0LVxcdFxcdGJyZWFrO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjQ1OlxcdGRlZmF1bHQ6IF9fdHJ5X2NtcHhjaGdfdXNlcl93cm9uZ19zaXplKCk7XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDYtXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDktLyogXFxcIlJldHVybnNcXFwiIDAgb24gc3VjY2VzcywgMSBvbiBmYWlsdXJlLCAtRUZBVUxUIGlmIHRoZSBhY2Nlc3MgZmF1bHRzLiAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NTA6I2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXIoX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXFx0KHtcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY1MS1cXHRpbnQgX19yZXQgPSAtRUZBVUxUO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUyLVxcdF9fdWFjY2Vzc19iZWdpbl9ub3NwZWMoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MzpcXHRfX3JldCA9ICF1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcihfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbCk7XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTQtX2xhYmVsOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvcGFnaW5nX3RtcGwuaD0yMTA9c3RhdGljIGludCBGTkFNRSh1cGRhdGVfYWNjZXNzZWRfZGlydHlfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTI2MS1cXG5hcmNoL3g4Ni9rdm0vbW11L3BhZ2luZ190bXBsLmg6MjYyOlxcdFxcdHJldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcihwdGVwX3VzZXIsIFxcdTAwMjZvcmlnX3B0ZSwgcHRlLCBmYXVsdCk7XFxuYXJjaC94ODYva3ZtL21tdS9wYWdpbmdfdG1wbC5oLTI2My1cXHRcXHRpZiAocmV0KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjU2LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjU3OiNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih0LCBwdHIsIG9sZCwgbmV3KSBcXFxcXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyNTg6XFx0KF9fdHJ5X2NtcHhjaGdfdXNlcigodCBfX3VzZXIgKikocHRyKSwgKHQgKikob2xkKSwgKih0ICopKG5ldyksIGVmYXVsdCAjIyB0KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTI2MD1zdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMwMi1cXHRjYXNlIDE6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUzMDM6XFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTgsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA0LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA1LVxcdGNhc2UgMjpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMwNjpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA3LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzA4LVxcdGNhc2UgNDpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMwOTpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzEwLVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzExLVxcdGNhc2UgODpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxMjpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbmFyY2gveDg2L2t2bS94ODYuYy01MzEzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUzMTUtXFx0Y2FzZSAxNjpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTMxNjpcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTI4LCBodmEsIG9sZCwgbmV3KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTMxNy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6MjguNTcwNzY1MjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MDg0NTkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgYXVkaWVuY2UncyBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgWDg2IEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBhbmQgemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZXMgNTI2MCB0byA1MzQwLiBJIHdhbnQgdG8gcXVpY2tseSByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgcmVsZXZhbnQgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQuLi4gW0F0IHRoaXMgcG9pbnQsIHlvdSdkIGluc2VydCBkZXRhaWxzIGJhc2VkIG9uIHdoYXQncyBmb3VuZCBpbiB0aGUgY29kZSBiZXR3ZWVuIGxpbmVzIDUyNjAtNTM0MC4gWW91LCB0aGUgZXhwZXJ0LCB3b3VsZCBrbm93IHRoZSBjb250ZXh0IGFuZCB3aGF0IGluZm9ybWF0aW9uIHRvIGV4dHJhcG9sYXRlXS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBbdGhlIGdlbmVyYWwgdG9waWMgd2l0aGluIHRoYXQgYmxvY2sgb2YgY29kZV0sIHdoaWNoIGNvdWxkIGJlIGhhbmRsaW5nIFtzcGVjaWZpYyBhc3BlY3QsIGUuZy4sIGd1ZXN0IHN0YXRlIHNhdmUvcmVzdG9yZSwgaW50ZXJydXB0IGhhbmRsaW5nLCBjZXJ0YWluIE1TUnNdLlxuXG5JJ20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IHRoZXkgbWFuYWdlIHRoZSBpbnRlcnBsYXkgYmV0d2Vlbi4uLm9yLCBtYXliZSBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXkgZGVhbCB3aXRoLi4uIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gW3NwZWNpZmljIG9wdGltaXphdGlvbnMgb3IgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgY29kZSwgZS5nLiwgaG93IHRoZXkgaGFuZGxlIGEgcGFydGljdWxhciBWTSBleGl0LCB3aGV0aGVyIHRoZXJlJ3MgYW55IGNsZXZlciB1c2Ugb2Ygdm14IGluc3RydWN0aW9ucywgb3IgaG93IHRoZXkgbWFuYWdlIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZV0uIEdpdmVuIG15IGJhY2tncm91bmQgd2l0aCBbeW91ciBleHBlcnRpc2UsIGUuZy4sIGh5cGVydmlzb3IgZGVzaWduLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgc3BlY2lmaWMgeDg2IGFyY2hpdGVjdHVyZSBmZWF0dXJlXSwgSSdsbCBiZSBxdWlja2x5IHNjYW5uaW5nIGZvciBhbnkgdW51c3VhbCBpbXBsZW1lbnRhdGlvbnMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgYXJlYXMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjMxLjY1MTYxMzkxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbjUyNjE6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNTI2MjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKm9sZCxcXG41MjYzOlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqbmV3LFxcbjUyNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXFxuNTI2NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pXFxuNTI2NjpcXHR7XFxuNTI2NzpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7XFxuNTI2ODpcXHRcXHR1NjQgcGFnZV9saW5lX21hc2s7XFxuNTI2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG41MjcwOlxcdFxcdGdwYV90IGdwYTtcXG41MjcxOlxcdFxcdGludCByO1xcbjUyNzI6XFx0XFxuNTI3MzpcXHRcXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xcbjUyNzQ6XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXFx1MDAyNiAoYnl0ZXMgLSAxKSkpXFxuNTI3NTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI3NjpcXHRcXG41Mjc3OlxcdFxcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcXG41Mjc4OlxcdFxcbjUyNzk6XFx0XFx0aWYgKGdwYSA9PSBJTlZBTElEX0dQQSB8fFxcbjUyODA6XFx0XFx0ICAgIChncGEgXFx1MDAyNiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpXFxuNTI4MTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI4MjpcXHRcXG41MjgzOlxcdFxcdC8qXFxuNTI4NDpcXHRcXHQgKiBFbXVsYXRlIHRoZSBhdG9taWMgYXMgYSBzdHJhaWdodCB3cml0ZSB0byBhdm9pZCAjQUMgaWYgU0xEIGlzXFxuNTI4NTpcXHRcXHQgKiBlbmFibGVkIGluIHRoZSBob3N0IGFuZCB0aGUgYWNjZXNzIHNwbGl0cyBhIGNhY2hlIGxpbmUuXFxuNTI4NjpcXHRcXHQgKi9cXG41Mjg3OlxcdFxcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKVxcbjUyODg6XFx0XFx0XFx0cGFnZV9saW5lX21hc2sgPSB+KGNhY2hlX2xpbmVfc2l6ZSgpIC0gMSk7XFxuNTI4OTpcXHRcXHRlbHNlXFxuNTI5MDpcXHRcXHRcXHRwYWdlX2xpbmVfbWFzayA9IFBBR0VfTUFTSztcXG41MjkxOlxcdFxcbjUyOTI6XFx0XFx0aWYgKCgoZ3BhICsgYnl0ZXMgLSAxKSBcXHUwMDI2IHBhZ2VfbGluZV9tYXNrKSAhPSAoZ3BhIFxcdTAwMjYgcGFnZV9saW5lX21hc2spKVxcbjUyOTM6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTQ6XFx0XFxuNTI5NTpcXHRcXHRodmEgPSBrdm1fdmNwdV9nZm5fdG9faHZhKHZjcHUsIGdwYV90b19nZm4oZ3BhKSk7XFxuNTI5NjpcXHRcXHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxcbjUyOTc6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTg6XFx0XFxuNTI5OTpcXHRcXHRodmEgKz0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTtcXG41MzAwOlxcdFxcbjUzMDE6XFx0XFx0c3dpdGNoIChieXRlcykge1xcbjUzMDI6XFx0XFx0Y2FzZSAxOlxcbjUzMDM6XFx0XFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDQ6XFx0XFx0XFx0YnJlYWs7XFxuNTMwNTpcXHRcXHRjYXNlIDI6XFxuNTMwNjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDc6XFx0XFx0XFx0YnJlYWs7XFxuNTMwODpcXHRcXHRjYXNlIDQ6XFxuNTMwOTpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTA6XFx0XFx0XFx0YnJlYWs7XFxuNTMxMTpcXHRcXHRjYXNlIDg6XFxuNTMxMjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTM6XFx0XFx0XFx0YnJlYWs7XFxuNTMxNDpcXHQjaWZkZWYgQ09ORklHX1g4Nl82NFxcbjUzMTU6XFx0XFx0Y2FzZSAxNjpcXG41MzE2OlxcdFxcdFxcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTc6XFx0XFx0XFx0YnJlYWs7XFxuNTMxODpcXHQjZW5kaWZcXG41MzE5OlxcdFxcdGRlZmF1bHQ6XFxuNTMyMDpcXHRcXHRcXHRCVUcoKTtcXG41MzIxOlxcdFxcdH1cXG41MzIyOlxcdFxcbjUzMjM6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUzMjQ6XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xcbjUzMjU6XFx0XFxuNTMyNjpcXHRcXHQvKlxcbjUzMjc6XFx0XFx0ICogTWFyayB0aGUgcGFnZSBkaXJ0eSBfYmVmb3JlXyBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgQ01QWENIRyB3YXNcXG41MzI4OlxcdFxcdCAqIHN1Y2Nlc3NmdWwsIGFzIHRoZSBvbGQgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG9uIGZhaWx1cmUuICBOb3RlLCBmb3JcXG41MzI5OlxcdFxcdCAqIGxpdmUgbWlncmF0aW9uLCB0aGlzIGlzIHVubmVjZXNzYXJpbHkgY29uc2VydmF0aXZlIGFzIENNUFhDSEcgd3JpdGVzXFxuNTMzMDpcXHRcXHQgKiBiYWNrIHRoZSBvcmlnaW5hbCB2YWx1ZSBhbmQgdGhlIGFjY2VzcyBpcyBhdG9taWMsIGJ1dCBLVk0ncyBBQkkgaXNcXG41MzMxOlxcdFxcdCAqIHRoYXQgYWxsIHdyaXRlcyBhcmUgZGlydHkgbG9nZ2VkLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSB3cml0dGVuLlxcbjUzMzI6XFx0XFx0ICovXFxuNTMzMzpcXHRcXHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgZ3BhX3RvX2dmbihncGEpKTtcXG41MzM0OlxcdFxcbjUzMzU6XFx0XFx0aWYgKHIpXFxuNTMzNjpcXHRcXHRcXHRyZXR1cm4gWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRDtcXG41MzM3OlxcdFxcbjUzMzg6XFx0XFx0a3ZtX3BhZ2VfdHJhY2tfd3JpdGUodmNwdSwgZ3BhLCBuZXcsIGJ5dGVzKTtcXG41MzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDozMS42NTIxNzk0ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNTExMTQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgcmVmZXJlbmNlcywgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNIEVtdWxhdGlvbiBvbiB4ODYqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBLVk0geDg2IGVtdWxhdGlvbiBsYXllciwgc28gbGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgc29tZSBrZXkgbGluZXMgb2YgY29kZSB0byBleGFtaW5lLiBUaGlua2luZyBzdHJhdGVnaWNhbGx5LCBJJ2xsIGZvY3VzIG9uIGxpbmUgMjE4NCBhbmQgbGluZSA0MTIwIHdpdGhpbiB0aGUgZmlsZS4gRXhhbWluaW5nIHRoZSBjb250ZXh0cyBzdXJyb3VuZGluZyB0aG9zZSBsaW5lcyB3aWxsIGxpa2VseSByZXZlYWwgc29tZSBjcml0aWNhbCBlbXVsYXRpb24gbG9naWMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZXNlIGxpbmVzIHdpbGwgbGlrZWx5IGJlIGludm9sdmVkIHdpdGggZWl0aGVyIENQVSBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIG9yIGhhbmRsaW5nIG9mIHNwZWNpZmljIGhhcmR3YXJlIGV2ZW50cy4gQnkgdW5kZXJzdGFuZGluZyB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLCBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgaG93IEtWTSBlbXVsYXRlcyBndWVzdCBpbnN0cnVjdGlvbnMuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIHZpcnR1YWxpemF0aW9uIG9mIHRoZSBNTVUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdhaW4gYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgS1ZNIGltcGxlbWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5IGJ1aWxkIHVwIGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhlIHN5c3RlbSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjM0LjQ4NzI5MzMxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg0LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTg0OlxcdFxcdHJldHVybiByYztcXG4yMTg1OlxcdH1cXG4yMTg2OlxcdFxcbjIxODc6XFx0I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXFxcXG4yMTg4OlxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjE4OTpcXHRcXHR1IyNtYml0cyBvbGQgPSBfX2MtXFx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTE6XFx0XFx0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTM6XFx0XFx0aWYgKCgodSMjcmJpdHMpIChvbGQgXFx1MDAzZVxcdTAwM2UgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fFxcdFxcdFxcXFxcXG4yMTk0OlxcdFxcdCAgICAoKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XFx0XFx0XFxcXFxcbjIxOTU6XFx0XFx0XFx0KnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SQVgpID0gKHUjI3JiaXRzKSAob2xkIFxcdTAwM2VcXHUwMDNlIDApO1xcdFxcdFxcdFxcXFxcXG4yMTk2OlxcdFxcdFxcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkRYKSA9ICh1IyNyYml0cykgKG9sZCBcXHUwMDNlXFx1MDAzZSByYml0cyk7XFx0XFx0XFx0XFxcXFxcbjIxOTc6XFx0XFx0XFx0X19jLVxcdTAwM2VlZmxhZ3MgXFx1MDAyNj0gflg4Nl9FRkxBR1NfWkY7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIxOTg6XFx0XFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjE5OTpcXHRcXHRcXHRfX2MtXFx1MDAzZWRzdC52YWwjI21iaXRzID0gKCh1IyNtYml0cylyZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQ1gpIFxcdTAwM2NcXHUwMDNjIHJiaXRzKSB8XFx0XFxcXFxcbjIyMDA6XFx0XFx0XFx0XFx0XFx0XFx0KHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQlgpO1xcdFxcdFxcXFxcXG4yMjAxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yMjAyOlxcdFxcdFxcdF9fYy1cXHUwMDNlZWZsYWdzIHw9IFg4Nl9FRkxBR1NfWkY7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbjIyMDM6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yMjA0OlxcdH0gd2hpbGUgKDApXFxuMjIwNTpcXHRcXG4yMjA2OlxcdHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbjIyMDc6XFx0e1xcbjIyMDg6XFx0XFx0aWYgKFdBUk5fT05fT05DRSg4ICsgISEoY3R4dC1cXHUwMDNlcmV4X2JpdHMgXFx1MDAyNiBSRVhfVykgKiA4ICE9IGN0eHQtXFx1MDAzZWRzdC5ieXRlcykpXFxuMjIwOTpcXHRcXHRcXHRyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7XFxuMjIxMDpcXHRcXG4yMjExOlxcdFxcdGlmICghKGN0eHQtXFx1MDAzZXJleF9iaXRzIFxcdTAwMjYgUkVYX1cpKVxcbjIyMTI6XFx0XFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbjIyMTM6XFx0I2lmZGVmIENPTkZJR19YODZfNjRcXG4yMjE0OlxcdFxcdGVsc2VcXG4yMjE1OlxcdFxcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuMjIxNjpcXHQjZW5kaWZcXG4yMjE3OlxcdFxcdHJldHVybiBYODZFTVVMX0NPTlRJTlVFO1xcbjIyMTg6XFx0fVxcbjIyMTk6XFx0XFxuMjIyMDpcXHRzdGF0aWMgaW50IGVtX3JldChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4yMjIxOlxcdHtcXG4yMjIyOlxcdFxcdGludCByYztcXG4yMjIzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZWlwID0gMDtcXG4yMjI0OlxcdFxcbjIyMjU6XFx0XFx0cmMgPSBlbXVsYXRlX3BvcChjdHh0LCBcXHUwMDI2ZWlwLCBjdHh0LVxcdTAwM2VvcF9ieXRlcyk7XFxuMjIyNjpcXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcXG4yMjI3OlxcdFxcdFxcdHJldHVybiByYztcXG4yMjI4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDozNC40ODc1OTM5NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYxMjQ5Njg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZW1fY21weGNoZzhiYCBEZWNvZGluZyBhbmQgRGlzcGF0Y2ggaW4gYGVtdWxhdGUuY2AqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZGlnIGludG8gaG93IHRoZSBgZW1fY21weGNoZzhiYCBpbnN0cnVjdGlvbiBnZXRzIGhhbmRsZWQgd2l0aGluIHRoZSBlbXVsYXRvci4gVGltZSB0byByZXZpc2l0IGBlbXVsYXRlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDEyMC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBkZWNvZGluZyBhbmQgZGlzcGF0Y2ggbG9naWMgdGhlcmUsIGFuZCBzZWUgaG93IHRoZSBlbXVsYXRpb24gYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdyBhbmQgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGFuZCBob3cgdGhpcyBzcGVjaWZpYyBpbnN0cnVjdGlvbiBpcyBiZWluZyBpbnRlcnByZXRlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBlbXVsYXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjM2LjEwMDA5MzY1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTE1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTE1OlxcdCAqL1xcbjQxMTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9jN183ID0ge1xcbjQxMTc6XFx0XFx0TiwgTiwgTiwgSUkoRHN0TWVtIHwgTW9kUk0gfCBPcDMyNjQgfCBFbXVsYXRlT25VRCwgZW1fcmRwaWQsIHJkcGlkKSxcXG40MTE4OlxcdH07XFxuNDExOTpcXHRcXG40MTIwOlxcdFxcbjQxMjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xcbjQxMjI6XFx0XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuNDEyMzpcXHR9LCB7XFxuNDEyNDpcXHRcXHROLCBOLCBOLCBOLCBOLCBOLCBOLFxcbjQxMjU6XFx0XFx0R1AoMCwgXFx1MDAyNnBmeF8wZl9jN183KSxcXG40MTI2OlxcdH0gfTtcXG40MTI3OlxcdFxcbjQxMjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xcbjQxMjk6XFx0XFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXFxuNDEzMDpcXHRcXHRYNyhEKFVuZGVmaW5lZCkpLFxcbjQxMzE6XFx0fTtcXG40MTMyOlxcdFxcbjQxMzM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xcbjQxMzQ6XFx0XFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXFxuNDEzNTpcXHR9O1xcbjQxMzY6XFx0XFxuNDEzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xcbjQxMzg6XFx0XFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcXG40MTM5OlxcdFxcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDozNi4xMDAzOTM3NzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1ODc3NzExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIERzdE1lbTY0IGFuZCBSRVhfVyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgRHN0TWVtNjRgIGRlY29kaW5nIGFuZCBob3cgdGhlIGBSRVhfV2AgcHJlZml4IGFmZmVjdHMgdGhlIG51bWJlciBvZiBieXRlcyBpbnZvbHZlZCBpbiB0aGUgZGVzdGluYXRpb24gb3BlcmFuZC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgaW1tZWRpYXRlIGZvY3VzIGlzIHRyYWNpbmcgb2NjdXJyZW5jZXMgb2YgdGhlIGBEc3RNZW02NGAgc3ltYm9sLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IHNob3cgaG93IHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgb3BlcmFuZCBpcyBpbnRlcnByZXRlZC4gVGhlbiwgSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZSBSRVggcHJlZml4IGltcGFjdHMgdGhpbmdzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG9wZXJhbmQgc2l6ZS4gQSBzZWFyY2ggZm9yIGBEc3RNZW02NGAgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcC4gSG9wZWZ1bGx5IHRoZSByZXN1bHRzIGFyZSBpbmZvcm1hdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjM3Ljg1OTE3NDgwOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTEwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRHN0TWVtNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6MzcuOTA1NDkxMjQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzQyNTQxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE9wTWVtNjQgaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBPcE1lbTY0YCBpcyBiZWluZyBtYW5hZ2VkIGluIHRoZSB4ODYgS1ZNIGVtdWxhdGlvbiBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGRpcmVjdGx5IGludG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbWVtb3J5LXJlbGF0ZWQgZW11bGF0aW9uIG9wZXJhdGlvbnMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIEtWTS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgT3BNZW02NGAgaXMgZGVmaW5lZCwgdXNlZCwgb3IgaGFuZGxlZC4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHdpbGwgYmUgcGFydCBvZiB0aGUgb3Bjb2RlIGRpc3BhdGNoaW5nIG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGxvZ2ljIHdpdGhpbiB0aGF0IGZpbGUuIEnigJlsbCBiZSBsb29raW5nIGZvciBmdW5jdGlvbiBjYWxscywgbWFjcm9zLCBvciBzd2l0Y2ggc3RhdGVtZW50cyB0aGF0IHNwZWNpZmljYWxseSByZWZlcmVuY2UgYE9wTWVtNjRgLiBJIGFudGljaXBhdGUgdGhhdCBJJ2xsIGZpbmQgY29kZSByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBtZW1vcnkgYWNjZXNzIGVtdWxhdGlvbiwgcG9zc2libHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ3Vlc3QncyBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBvciBNTVUgZW11bGF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIDY0LWJpdCBtZW1vcnkgYWNjZXNzZXMsIHRha2luZyBpbnRvIGFjY291bnQgcG90ZW50aWFsIGFkZHJlc3NpbmcgbW9kZSBkaWZmZXJlbmNlcyBhbmQgbWVtb3J5IGF0dHJpYnV0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBlbXVsYXRpb24gcm91dGluZXMgaXMgY3JpdGljYWwuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgbGFyZ2VyIGVtdWxhdGlvbiBmcmFtZXdvcms7IG15IG5leHQgc3RlcCBpcyB1bmRlcnN0YW5kaW5nIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDEzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NDAuMjc5NzQ3OTExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk0NzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPcE1lbTY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTQ1LSNkZWZpbmUgT3BESSAgICAgICAgICAgICAgIDV1bGwgIC8qIEVTOkRJL0VESS9SREkgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2OiNkZWZpbmUgT3BNZW02NCAgICAgICAgICAgIDZ1bGwgIC8qIE1lbW9yeSwgNjQtYml0ICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Ny0jZGVmaW5lIE9wSW1tVUJ5dGUgICAgICAgICA3dWxsICAvKiBaZXJvLWV4dGVuZGVkIDgtYml0IGltbWVkaWF0ZSAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05MS0jZGVmaW5lIERzdERJICAgICAgIChPcERJIFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6OTI6I2RlZmluZSBEc3RNZW02NCAgICAoT3BNZW02NCBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkzLSNkZWZpbmUgRHN0TWVtMTYgICAgKE9wTWVtMTYgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NjQ1LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NDY0NjpcXHRjYXNlIE9wTWVtNjQ6XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NjQ3LVxcdFxcdGN0eHQtXFx1MDAzZW1lbW9wLmJ5dGVzID0gKGN0eHQtXFx1MDAzZW9wX2J5dGVzID09IDgpID8gMTYgOiA4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo0MC4zMjc3MDA5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU0MzE3NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENNUFhDSEcxNkJgIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSdyZSBoYW5kbGluZyBgQ01QWENIRzE2QmAgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHNpdHVhdGlvbiB3aGVyZSB3ZSBoYXZlIHRoZSBSRVguVyBwcmVmaXgsIHdoaWNoIHNpZ25pZmllcyA2NC1iaXQgb3BlcmFuZCBzaXplLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlIG1lbW9yeSBvcGVyYXRpb24gc2l6ZSwgYGN0eHQtXHUwMDNlbWVtb3AuYnl0ZXNgLCB3aGljaCBnZXRzIHNldCBiYXNlZCBvbiBgY3R4dC1cdTAwM2VvcF9ieXRlc2AuIFdoZW4gYG9wX2J5dGVzYCBpcyA4IGR1ZSB0byB0aGUgUkVYLlcgcHJlZml4LCBgbWVtb3AuYnl0ZXNgIGJlY29tZXMgMTYsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgMTYtYnl0ZSBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaXMgaGFwcGVuaW5nIGNvcnJlY3RseS5cblxuR2l2ZW4gdGhhdCBgeDg2X2VtdWxhdGVfaW5zbmAgZW11bGF0ZXMgYENNUFhDSEcxNkJgIOKAkyB3aGljaCBpcyBvcGNvZGUgYDBGIEM3IC8xYCB3aXRoIFJFWC5XIOKAkyBJIHdhbnQgdG8gcGlucG9pbnQgdGhlIGxvZ2ljIHRoYXQncyBkb2luZyB0aGUgYWN0dWFsIGVtdWxhdGlvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24gdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgZXhwZWN0IHRoZSBlbXVsYXRpb24gdG8gYmUgYXJvdW5kIGxpbmVzIDU0MTAtNTQ0MCwgc28gbGV0J3MgY2hlY2sgdGhlcmUgdG8gc2VlIGhvdyB0aGUgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLCB2ZXJpZnlpbmcgdGhhdCB0aGUgYXBwcm9wcmlhdGUgMTYtYnl0ZSBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkIHdoZW4gUkVYLlcgaXMgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NDMuNTgyMDQxNDMxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTA6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbjU0MTE6XFx0XFx0fVxcbjU0MTI6XFx0XFxuNTQxMzpcXHRcXHRpZiAoKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBEc3RNYXNrKSA9PSBJbXBsaWNpdE9wcylcXG41NDE0OlxcdFxcdFxcdGdvdG8gc3BlY2lhbF9pbnNuO1xcbjU0MTU6XFx0XFxuNTQxNjpcXHRcXG41NDE3OlxcdFxcdGlmICgoY3R4dC1cXHUwMDNlZHN0LnR5cGUgPT0gT1BfTUVNKSBcXHUwMDI2XFx1MDAyNiAhKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBNb3YpKSB7XFxuNTQxODpcXHRcXHRcXHQvKiBvcHRpbWlzYXRpb24gLSBhdm9pZCBzbG93IGVtdWxhdGVkIHJlYWQgaWYgTW92ICovXFxuNTQxOTpcXHRcXHRcXHRyYyA9IHNlZ21lbnRlZF9yZWFkKGN0eHQsIGN0eHQtXFx1MDAzZWRzdC5hZGRyLm1lbSxcXG41NDIwOlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZjdHh0LVxcdTAwM2Vkc3QudmFsLCBjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMpO1xcbjU0MjE6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpIHtcXG41NDIyOlxcdFxcdFxcdFxcdGlmICghKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBOb1dyaXRlKSBcXHUwMDI2XFx1MDAyNlxcbjU0MjM6XFx0XFx0XFx0XFx0ICAgIHJjID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUIFxcdTAwMjZcXHUwMDI2XFxuNTQyNDpcXHRcXHRcXHRcXHQgICAgY3R4dC1cXHUwMDNlZXhjZXB0aW9uLnZlY3RvciA9PSBQRl9WRUNUT1IpXFxuNTQyNTpcXHRcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VleGNlcHRpb24uZXJyb3JfY29kZSB8PSBQRkVSUl9XUklURV9NQVNLO1xcbjU0MjY6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbjU0Mjc6XFx0XFx0XFx0fVxcbjU0Mjg6XFx0XFx0fVxcbjU0Mjk6XFx0XFx0LyogQ29weSBmdWxsIDY0LzEyOC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXFxuNTQzMDpcXHRcXG41NDMxOlxcdCNpZmRlZiBDT05GSUdfWDg2XzY0XFxuNTQzMjpcXHRcXHRpZiAoY3R4dC1cXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxcbjU0MzM6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZHN0Lm9yaWdfdmFsMTI4ID0gY3R4dC1cXHUwMDNlZHN0LnZhbDEyODtcXG41NDM0OlxcdFxcdGVsc2VcXG41NDM1OlxcdCNlbmRpZlxcbjU0MzY6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVxcdTAwM2Vkc3QudmFsNjQ7XFxuNTQzNzpcXHRcXG41NDM4OlxcdHNwZWNpYWxfaW5zbjpcXG41NDM5OlxcdFxcbjU0NDA6XFx0XFx0aWYgKHVubGlrZWx5KGNoZWNrX2ludGVyY2VwdHMpIFxcdTAwMjZcXHUwMDI2IChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgSW50ZXJjZXB0KSkge1xcbjU0NDE6XFx0XFx0XFx0cmMgPSBlbXVsYXRvcl9jaGVja19pbnRlcmNlcHQoY3R4dCwgY3R4dC1cXHUwMDNlaW50ZXJjZXB0LFxcbjU0NDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgWDg2X0lDUFRfUE9TVF9NRU1BQ0NFU1MpO1xcbjU0NDM6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuNTQ0NDpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQ0NTpcXHRcXHR9XFxuNTQ0NjpcXHRcXG41NDQ3OlxcdFxcdGlmIChjdHh0LVxcdTAwM2VyZXBfcHJlZml4IFxcdTAwMjZcXHUwMDI2IChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgU3RyaW5nKSlcXG41NDQ4OlxcdFxcdFxcdGN0eHQtXFx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1JGO1xcbjU0NDk6XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo0My41ODIyODExNjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1NTY4MzEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gSW5zdHJ1Y3Rpb24gRW11bGF0aW9uIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBLVk0ncyBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHdoaWNoIGlzIGFic29sdXRlbHkgZnVuZGFtZW50YWwgdG8gaXRzIG9wZXJhdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgcGFydCB0aGF0IGtpY2tzIGluIHZpYSBLVk0gaW9jdGxzIGxpa2UgYEtWTV9SVU5gIHdoZW4gdGhlIGd1ZXN0IGVuY291bnRlcnMgTU1JTywgdW5oYW5kbGVkIFZNIGV4aXRzLCBvciBpbnZhbGlkIHN0YXRlcy4gU3l6a2FsbGVyLCBhIHRvb2wgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aCwgYWxyZWFkeSBoZWF2aWx5IGxldmVyYWdlcyB0aGVzZSBpb2N0bHMgdG8gdGVzdCBLVk0sIGNyZWF0aW5nIFZNcywgbWFuaXB1bGF0aW5nIHZDUFVzLCBzZXR0aW5nIHJlZ2lzdGVycywgYW5kIGV4ZWN1dGluZyBpbnN0cnVjdGlvbnMg4oCTIGVmZmVjdGl2ZWx5IHB1dHRpbmcgdGhlIGVtdWxhdG9yIHRocm91Z2ggaXRzIHBhY2VzLiBJdCBmcmVxdWVudGx5IGVtcGxveXMgaW9jdGxzIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgYGlvY3RsKEtWTV9SVU4pYCBmb3IgdGhpcyBwdXJwb3NlLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBpcyB0aGUgc3BlY2lmaWMgY29kZSBpbiBgZW1fY21weGNoZzhiYCBhbmQgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIHJlYWNoYWJsZSBhbmQgZnV6emFibGU/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcyEgV2Uga25vdyB0aGlzIGJlY2F1c2UgU3l6a2FsbGVyIGFscmVhZHkgaGl0cyB0aGlzIGFyZWEgdGhyb3VnaCBpdHMgZXh0ZW5zaXZlIEtWTSBmdXp6aW5nLiBGdXJ0aGVybW9yZSwgdGhlIHByZXNlbmNlIG9mIHRoZSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24sIHNwZWNpZmljYWxseSBgV0FSTl9PTl9PTkNFKDggKyAhIShjdHh0LVx1MDAzZXJleF9iaXRzIFx1MDAyNiBSRVhfVykgKiA4ICE9IGN0eHQtXHUwMDNlZHN0LmJ5dGVzKWAgaW4gYGVtX2NtcHhjaGc4YmAsIGlzIGEgdmVyeSBwb3NpdGl2ZSBzaWduLiBBc3NlcnRpb25zIGFyZSBleGNlbGxlbnQgdGFyZ2V0cy4gQWxzbywgdGhlIGFkZGVkIGlubGluZSBhc3NlbWJseSBmb3IgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gIGluIGB1YWNjZXNzLmhgIGFuZCBpdHMgdXNlIGluIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBzdHJlbmd0aGVucyB0aGUgY2FzZS4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgaW5kaWNhdGVzIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiBjb3JlIHVhY2Nlc3MgZnVuY3Rpb25hbGl0eS5cblxuSXMgdGhpcyBXb3J0aEZ1enppbmc/IEFic29sdXRlbHkhIEl0IGNoZWNrcyBhbGwgdGhlIGJveGVzOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbToqKiBLVk0gaXRzZWxmIGFuZCB0aGUgeDg2IGluc3RydWN0aW9uIGVtdWxhdG9yLiBBbHNvLCB0aGUgdWFjY2VzcyBhdG9taWMgaGVscGVyIG9uIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBpZWNlLlxuKiAgICoqTG9naWMgTW9kaWZpY2F0aW9uOioqIEl0J3Mgbm90IGp1c3QgYSByZWZhY3RvcmluZzsgaXQncyBhY3RpdmVseSBtb2RpZnlpbmcgdGhlIGxvZ2ljLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIDEyOC1iaXQgYGNtcHhjaGdgIGluc3RydWN0aW9uIChgY21weGNoZzE2YmApLCBhbmQgaW50cm9kdWNpbmcgaW5saW5lIGFzc2VtYmx5IHRvIGB1YWNjZXNzYC4gQW5kIG9mIGNvdXJzZSB0aGUgYWRkZWQgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIGluIGBlbV9jbXB4Y2hnOGJgIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IGVtdWxhdGluZyBndWVzdCBpbnN0cnVjdGlvbnMuXG5cbkNvbmZpZ3VyYXRpb24gd2lzZSwgd2UncmUgbG9va2luZyBhdCBLVk0sIHNwZWNpZmljYWxseSBgQ09ORklHX0tWTWAgYmVpbmcgdGhlIGtleSBjb25maWcgaXRlbS4gV2UgbWlnaHQgbmVlZCB0byBsb29rIGF0IGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCwgYnV0IGBDT05GSUdfS1ZNYCBpcyB0aGUgbWFpbiBvbmUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAwOjQ4LjczNzk2NzAzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NjMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzM6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA4OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMxLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMzOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NDguNzg0NDM0NjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTkxODQ5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0geDg2IEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgZ2V0dGluZyBjb21waWxlZCBpbnRvIHRoZSBLVk0geDg2IG1vZHVsZS4gVGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGlzIHRoZSBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBvYmplY3QgZmlsZXMgYW5kIGhvdyB0aGVpciBpbmNsdXNpb24gaXMgZ292ZXJuZWQgYnkgdmFyaW91cyBLY29uZmlnIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGJha2VkIGluLCBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBldmVuIGV4Y2x1ZGVkIGJhc2VkIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCB3aGVuIHRyb3VibGVzaG9vdGluZyBzcGVjaWZpYyBLVk0gaXNzdWVzIG9yLCBtb3JlIGdlbmVyYWxseSwgaWYgSSB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gdGhlIEtWTSB4ODYgY29kZSBvciB0YWlsb3IgYSBidWlsZCBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgZ29hbHMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBNYWtlZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo1MC41ODM2MjI2NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjY2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cXG4gICA0OlxcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgKz0gLVdlcnJvclxcbiAgIDU6XFx0XFxuICAgNjpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgNzpcXHRcXG4gICA4OlxcdGt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRrdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuICAxMjpcXHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuICAxMzpcXHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG4gIDE0OlxcdGt2bS0kKENPTkZJR19LVk1fWEVOKVxcdCs9IHhlbi5vXFxuICAxNTpcXHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4gIDE5OlxcdFxcbiAgMjA6XFx0a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbiAgMjE6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMjI6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbiAgMjU6XFx0XFxuICAyNjpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbiAgMjc6XFx0a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRpZmRlZiBDT05GSUdfSFlQRVJWXFxuICAzMDpcXHRrdm0teVxcdFxcdFxcdCs9IGt2bV9vbmh5cGVydi5vXFxuICAzMTpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG4gIDMyOlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm1fb25oeXBlcnYub1xcbiAgMzM6XFx0ZW5kaWZcXG4gIDM0OlxcdFxcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9YODYpXFx0Kz0ga3ZtLm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19LVk1fQU1EKVxcdCs9IGt2bS1hbWQub1xcbiAgMzg6XFx0XFxuICAzOTpcXHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbiAgNDA6XFx0JChvYmopL3N2bS92bWVudGVyLm86ICQob2JqKS9rdm0tYXNtLW9mZnNldHMuaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo1MC41ODM2OTU5MzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxNzg1MzY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQnVpbGQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHByb2Nlc3MgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBrdm0teSArPSB4ODYubyBlbXVsYXRlLm8gLi4uYCBpcyBnb2luZyB0byBnZXQgYnVpbHQgaWYgZWl0aGVyIGBDT05GSUdfS1ZNX1g4NmAgb3IganVzdCBwbGFpbiBgQ09ORklHX0tWTWAgYXJlIGVuYWJsZWQsIGJ1dCBvbmx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYW4gSW50ZWwgb3IgQU1EIHZpcnR1YWwgbWFjaGluZSwgd2hpY2ggbWVhbnMgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgIGFsc28gY29tZSBpbnRvIHBsYXkuIFNvLCByaWdodCBvZmYgdGhlIGJhdCwgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIGFyZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93bi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgY2hhbmdlZCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0LiBJJ2xsIGZvY3VzIG9uIHRoZSBzeW1ib2xzLiBJJ2xsIHNwZWNpZmljYWxseSBsb29rIGF0IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciwgbW9yZSBpbXBvcnRhbnRseSwgKmFyZW4ndCogc3RhdGljIHdpdGhpbiB0aGUgY2hhbmdlZCBmaWxlcy4gVGhhdCBnaXZlcyBtZSBhIGNsdWUgYWJvdXQgZXhwb3J0ZWQgZnVuY3Rpb25hbGl0eS5cblxuRmlyc3QgdXAsIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYC4gSSBzZWUgYHg4Nl9lbXVsYXRlX2luc25gIGlzIG5vbi1zdGF0aWMuIEdvb2QsIHRoYXQncyBleHBvcnRlZCBhbmQgdXNlZCBieSBLVk0uIEFuZCB0aGVyZSdzIGFsc28gYGVtX2NtcHhjaGc4YmAsIHdoaWNoIGlzIHN0YXRpYywgYnV0IGdldHMgY2FsbGVkIGZyb20gdGhlIGltcG9ydGFudCBgeDg2X2VtdWxhdGVfaW5zbmAgc28gaXQncyByZWxldmFudCB0byBob3cgdGhlIGVtdWxhdGlvbiB3b3Jrcy5cblxuTmV4dCwgYGFyY2gveDg2L2t2bS94ODYuY2AuIEhlcmUgSSBzZWUgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGBlbXVsYXRlX29wcy5jbXB4Y2hnX2VtdWxhdGVkYCwgc28gaXQncyBjbGVhcmx5IGludm9sdmVkIGluIGhvdyBzb21ldGhpbmcgaXMgZW11bGF0ZWQuIFRoYXQncyBhIGtleSBsaW5lIG9mIGlucXVpcnkuIFRoZW4sIHRoZXJlJ3MgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBhbmQgbWF5YmUgYGt2bV9lbXVsYXRlX2luc3RydWN0aW9uYCBvciBzb21ldGhpbmcgc2ltaWxhciBhcyB0aGUgZW50cnkgcG9pbnRzIGluIGB4ODYuY2AuIEknbGwgbmVlZCB0byBjaGFzZSBkb3duIHRoZSBjYWxsZXJzIG9mIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBhbmQgdGhvc2UgeDg2IGVtdWxhdG9yIGVudHJ5cG9pbnRzIGluIGB4ODYuY2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBhbmQgc2VlIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDA6NTUuMTAxNTUyNDk3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc5NTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ODZfZW11bGF0ZV9pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ4NjM9aW50IHg4Nl9kZWNvZGVfaW5zbihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuLCBpbnQgZW11bGF0aW9uX3R5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUxNDMtXFx0XFx0ICogVGhlc2UgYXJlIGNvcGllZCB1bmNvbmRpdGlvbmFsbHkgaGVyZSwgYW5kIGNoZWNrZWQgdW5jb25kaXRpb25hbGx5XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1MTQ0OlxcdFxcdCAqIGluIHg4Nl9lbXVsYXRlX2luc24uXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01MTQ1LVxcdFxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01MjY4PXZvaWQgaW5pdF9kZWNvZGVfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTUyODQtXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1Mjg1OmludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01Mjg2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTU0MT12b2lkIGluaXRfZGVjb2RlX2NhY2hlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaDo1NDI6aW50IHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGJvb2wgY2hlY2tfaW50ZXJjZXB0cyk7XFxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtNTQzLWludCBlbXVsYXRvcl90YXNrX3N3aXRjaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz02MzM1PWludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjQ3NS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjQ3NjpcXHRyID0geDg2X2VtdWxhdGVfaW5zbihjdHh0LCBpc19ndWVzdF9tb2RlKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NzctXFx0XFx0XFx0XFx0ICAgIShlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX05PX0RFQ09ERSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMDo1NS4xNDkzNTM3ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE4ODAwODcwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBDYWxsZXJzIGZvciBUaG9yb3VnaG5lc3MqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gYWJvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBhbGwgdGhlIHBsYWNlcyBpdCdzIGNhbGxlZCB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vYCBkaXJlY3RvcnkuIEV2ZW4gdGhvdWdoIEkgaGF2ZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBpdCdzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcg4oCTIGVzcGVjaWFsbHkgaW4gdGhpcyBjcml0aWNhbCBhcmVhIOKAkyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gVGhpcyBraW5kIG9mIG1ldGljdWxvdXNuZXNzIGlzIGVzc2VudGlhbDsgYSBzaW1wbGUgb3ZlcnNpZ2h0IGhlcmUgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MgZG93biB0aGUgbGluZS4gSXTigJlzIGFib3V0IGJlaW5nIHByZWNpc2UgYW5kIGxlYXZpbmcgbm8gc3RvbmUgdW50dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjM2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDE6NTcuMDI5NDQzNjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjE0NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtcHhjaGdfZW11bGF0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MTM0ND1zdGF0aWMgaW50IHNlZ21lbnRlZF9jbXB4Y2hnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzU0LVxcdFxcdHJldHVybiByYztcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjEzNTU6XFx0cmV0dXJuIGN0eHQtXFx1MDAzZW9wcy1cXHUwMDNlY21weGNoZ19lbXVsYXRlZChjdHh0LCBsaW5lYXIsIG9yaWdfZGF0YSwgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTEzNTYtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZSwgXFx1MDAyNmN0eHQtXFx1MDAzZWV4Y2VwdGlvbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTE1MTc9c3RhdGljIGludCBfX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzEyLVxcdFxcdHNlZ19kZXNjLnR5cGUgfD0gMjsgLyogYnVzeSAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTcxMzpcXHRcXHRyZXQgPSBjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZWNtcHhjaGdfZW11bGF0ZWQoY3R4dCwgZGVzY19hZGRyLCBcXHUwMDI2b2xkX2Rlc2MsIFxcdTAwMjZzZWdfZGVzYyxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3MTQtXFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc2VnX2Rlc2MpLCBcXHUwMDI2Y3R4dC1cXHUwMDNlZXhjZXB0aW9uKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTEwOT1zdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE4MS1cXHQvKlxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oOjE4MjpcXHQgKiBjbXB4Y2hnX2VtdWxhdGVkOiBFbXVsYXRlIGFuIGF0b21pYyAoTE9DS2VkKSBDTVBYQ0hHIG9wZXJhdGlvbiBvbiBhblxcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTE4My1cXHQgKiAgICAgICAgICAgICAgICAgICBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLlxcbi0tXFxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMTg4LVxcdCAqL1xcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oOjE4OTpcXHRpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaC0xOTAtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTUyNDI9c3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjU5LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1MjYwOnN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI2MS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01ODE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjctXFx0LndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTgyODpcXHQuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4MjktXFx0LmludmxwZyAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pbnZscGcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAxOjU3LjEyMDY2MjcyOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjY5NTk4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEVtdWxhdGlvbiBXcml0ZWJhY2sgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd3JpdGViYWNrcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGVtdWxhdGlvbiBsYXllciwgc3BlY2lmaWNhbGx5IGluIGBlbXVsYXRlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYHdyaXRlYmFja2AgdXNlcyBgc2VnbWVudGVkX2NtcHhjaGdgIGZvciB0aG9zZSBsb2NrZWQgb3BlcmF0aW9ucy4gSW50ZXJlc3RpbmcgY2hvaWNlIVwiIEkga25vdyB0aGlzIG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQncyBoZWFkIG92ZXIgdG8gdGhlIHg4Ni1zcGVjaWZpYyBwYXJ0LCBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AsIGFuZCBjb25maXJtIHRoaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGF0b21pY2l0eSBndWFyYW50ZWVzIHRoZXkgYXJlIHVzaW5nIGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDE6NTguNzkwMjY1NTE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODkwMzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWdtZW50ZWRfY21weGNoZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xMzI5PXN0YXRpYyBpbnQgc2VnbWVudGVkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xMzQzLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTM0NDpzdGF0aWMgaW50IHNlZ21lbnRlZF9jbXB4Y2hnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTM0NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBzZWdtZW50ZWRfYWRkcmVzcyBhZGRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xNzU1PXN0YXRpYyBpbnQgd3JpdGViYWNrKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qgb3BlcmFuZCAqb3ApXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NjItXFx0XFx0aWYgKGN0eHQtXFx1MDAzZWxvY2tfcHJlZml4KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTc2MzpcXHRcXHRcXHRyZXR1cm4gc2VnbWVudGVkX2NtcHhjaGcoY3R4dCxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3NjQtXFx0XFx0XFx0XFx0XFx0XFx0IG9wLVxcdTAwM2VhZGRyLm1lbSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDE6NTguODY5MTc0NjMzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NDczNzY1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIENNUFhDSEcxNkIgRW11bGF0aW9uIC0gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHBhdGNoLiBJJ20gZm9jdXNpbmcgb24gdGhlIENNUFhDSEcxNkIgaW1wbGVtZW50YXRpb24gd2l0aGluIEtWTSwgd2hpY2ggaXMgYSBrbm93biBhcmVhIGZvciBjb21wbGV4IGludGVyYWN0aW9ucy5cblxuRmlyc3QsIEkgbG9va2VkIGF0IHRoZSBgd3JpdGViYWNrYCBmdW5jdGlvbi4gVGhpcyBwb2ludHMgdG8gYHNlZ21lbnRlZF9jbXB4Y2hnYCBhbmQgdGhlbiBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIENNUFhDSEcgZW11bGF0aW9uIHBhdGguICBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgdWx0aW1hdGVseSBjYWxscyBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgd2hpY2ggdGhlbiBjYWxscyBgX190cnlfY21weGNoZ191c2VyYCAtXHUwMDNlIGB1bnNhZmVfdHJ5X2NtcHhjaGdfdXNlcmAgYW5kIGZpbmFsbHkgYF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc21gLCB3aGljaCBpcyB0aGUgaW5saW5lIGFzc2VtYmx5IHRoYXQgaW1wbGVtZW50cyBgY21weGNoZzE2YmAuICBUaGlzIGFsc28gc2hvd3MgdGhhdCBgY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7YCBnZXRzIHNldCBkdXJpbmcgdGhlIHByb2Nlc3Mgd2hlbiBgY3R4dC1cdTAwM2Vkc3QuYnl0ZXMgPT0gMTZgLlxuXG5NeSBrZXkgc3ltYm9scyBmb3IgYW5hbHlzaXMgYXJlIG5vdzogYGVtX2NtcHhjaGc4YmAsIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCwgYHg4Nl9lbXVsYXRlX2luc25gLCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYC4gYGVtX2NtcHhjaGc4YmAgaGFuZGxlcyBib3RoIGBjbXB4Y2hnOGJgIGFuZCBgY21weGNoZzE2YmAuICBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgaXMgZXhwbGljaXRseSBmb3IgZW11bGF0ZWQgQ01QWENIRyBvcGVyYXRpb25zLiBgeDg2X2VtdWxhdGVfaW5zbmAgYW5kIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgYXJlIHRoZSBnZW5lcmFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBLVk0gaW5zdHJ1Y3Rpb24gZW11bGF0b3IuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQuIEkgcXVpY2tseSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgLiAgSSBhbHNvIGNoZWNrZWQgYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAgdG8gc2VlIGhvdyBpdCdzIHVzZWQuIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCByZXF1aXJlcyBgWDg2X0ZFQVRVUkVfQ1gxNmAsIGFuZCBpdCdzIGdhdGVkIGJ5IGBDT05GSUdfWDg2XzY0YC4gIFRoZSB0YXJnZXQgaXMgQU1ENjQuXG5cbkJhc2VkIG9uIHRoaXMsIEkndmUgY29uZmlybWVkIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBLVk0gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIENNUFhDSEcxNkIuIEl0IGludHJvZHVjZXMgbmV3IGlubGluZSBhc3NlbWJseSwgYWRkcyBhc3NlcnRpb25zIG9uIHg4Nl82NCwgYW5kIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZXhpc3RpbmcgZW11bGF0aW9uIHJvdXRpbmVzLiBUaGlzIG1ha2VzIGl0IHdvcnRoIGZ1enppbmcgYXMgdGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgZW11bGF0aW9uIGxvZ2ljLiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjE3LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjowNC44MTY1NTQwNDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1MDM5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1fY21weGNoZzhiXCIsXG4gICAgXCJlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkXCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnNuXCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIDEyOC1iaXQgQ01QWENIRzE2QiBlbXVsYXRpb24gdG8gdGhlIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0b3IgYW5kIGltcGxlbWVudHMgYSBuZXcgMTI4LWJpdCB1c2VyIGNtcHhjaGcgaW5saW5lIGFzc2VtYmx5IHByaW1pdGl2ZSAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSkgb24geDg2XzY0LiBJdCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiBpbiBlbV9jbXB4Y2hnOGIgYW5kIG1vZGlmaWVzIG9wZXJhbmQgaGFuZGxpbmcgaW4geDg2X2VtdWxhdGVfaW5zbiBhbmQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZC4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgdmlhIHN0YW5kYXJkIEtWTSBndWVzdCBlbXVsYXRpb24gaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtX2NtcHhjaGc4YlwiLFxuICAgIFwiZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZFwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zblwiLFxuICAgIFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciAxMjgtYml0IENNUFhDSEcxNkIgZW11bGF0aW9uIHRvIHRoZSBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdG9yIGFuZCBpbXBsZW1lbnRzIGEgbmV3IDEyOC1iaXQgdXNlciBjbXB4Y2hnIGlubGluZSBhc3NlbWJseSBwcmltaXRpdmUgKF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20pIG9uIHg4Nl82NC4gSXQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24gaW4gZW1fY21weGNoZzhiIGFuZCBtb2RpZmllcyBvcGVyYW5kIGhhbmRsaW5nIGluIHg4Nl9lbXVsYXRlX2luc24gYW5kIGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIHZpYSBzdGFuZGFyZCBLVk0gZ3Vlc3QgZW11bGF0aW9uIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjA0LjkzNzA2NDkwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0NDIxNDg1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjowNC45Mzc1MTg2NDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODQ0MTY4NzY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxcbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxcbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjllNzQ4YTY4OTAyNzExNDllMjExYTIwMjEwNTAwNmUxZGVlNzFmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6NTk6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbmluZGV4IDNhMGRkM2MyYjIzM2UuLjk0ODkzN2EyNGNjNTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFxuQEAgLTQwNyw2ICs0MDcsMjcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRpZiAodW5saWtlbHkoIXN1Y2Nlc3MpKVx0XHRcdFx0XHRcdFxcXG4gXHRcdCpfb2xkID0gX19vbGQ7XHRcdFx0XHRcdFx0XFxcbiBcdGxpa2VseShzdWNjZXNzKTtcdFx0XHRcdFx0fSlcbisjZWxzZSAvLyAhQ09ORklHX1g4Nl8zMlxuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbitcdGJvb2wgc3VjY2VzcztcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1x0XHRcXFxuK1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4rXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFx1MDAzZVx1MDAzZSA2NCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTtcdFx0XHRcdFxcXG4rXHRhc21fZ290b19vdXRwdXQoXCJcXG5cIlx0XHRcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCIxOiBcIiBMT0NLX1BSRUZJWCBcImNtcHhjaGcxNmIgJVtwdHJdXFxuXCJcdFx0XFxcbitcdFx0ICAgICBfQVNNX0VYVEFCTEVfVUEoMWIsICVsW2xhYmVsXSlcdFx0XHRcXFxuK1x0XHQgICAgIDogXCI9QGNjelwiIChzdWNjZXNzKSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcIithXCIgKF9fb2xkX2xvdyksXHRcdFx0XHRcXFxuK1x0XHQgICAgICAgXCIrZFwiIChfX29sZF9oaWdoKSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBbcHRyXSBcIittXCIgKCpfcHRyKVx0XHRcdFx0XFxcbitcdFx0ICAgICA6IFwiYlwiICgodTY0KV9fbmV3KSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcImNcIiAoKHU2NCkoKHUxMjgpX19uZXcgXHUwMDNlXHUwMDNlIDY0KSlcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJtZW1vcnlcIlx0XHRcdFx0XHRcdFxcXG4rXHRcdCAgICAgOiBsYWJlbCk7XHRcdFx0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseSghc3VjY2VzcykpXHRcdFx0XHRcdFx0XFxcbitcdFx0Kl9vbGQgPSAoKHUxMjgpX19vbGRfaGlnaCBcdTAwM2NcdTAwM2MgNjQpIHwgX19vbGRfbG93O1x0XHRcXFxuK1x0bGlrZWx5KHN1Y2Nlc3MpO1x0XHRcdFx0XHR9KVxuICNlbmRpZiAvLyBDT05GSUdfWDg2XzMyXG4gI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG4gI2RlZmluZSBfX3RyeV9jbXB4Y2hnX3VzZXJfYXNtKGl0eXBlLCBsdHlwZSwgX3B0ciwgX3BvbGQsIF9uZXcsIGxhYmVsKVx0KHsgXFxcbkBAIC00NjMsNiArNDg0LDMyIEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpXHRcdFx0XHRcdFxcXG4gXHRcdCpfb2xkID0gX19vbGQ7XHRcdFx0XHRcdFx0XFxcbiBcdGxpa2VseShfX3Jlc3VsdCk7XHRcdFx0XHRcdH0pXG4rI2Vsc2UgLy8hQ09ORklHX1g4Nl8zMlxuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXHQoe1x0XFxcbitcdGludCBfX3Jlc3VsdDtcdFx0XHRcdFx0XHRcdFxcXG4rXHRfX3R5cGVvZl9fKF9wdHIpIF9vbGQgPSAoX190eXBlb2ZfXyhfcHRyKSkoX3BvbGQpO1x0XHRcXFxuK1x0dTY0IF9fb2xkX2xvdyA9ICh1NjQpKl9vbGQ7XHRcdFx0XHRcdFxcXG4rXHR1NjQgX19vbGRfaGlnaCA9ICh1NjQpKCpfb2xkIFx1MDAzZVx1MDAzZSA2NCk7XHRcdFx0XHRcXFxuK1x0X190eXBlb2ZfXygqKF9wdHIpKSBfX25ldyA9IChfbmV3KTtcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUoXCJcXG5cIlx0XHRcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCIxOiBcIiBMT0NLX1BSRUZJWCBcImNtcHhjaGcxNmIgJVtwdHJdXFxuXCJcdFx0XFxcbitcdFx0ICAgICBcIm1vdiAkMCwgJVtyZXN1bHRdXFxuXFx0XCJcdFx0XHRcdFxcXG4rXHRcdCAgICAgXCJzZXR6ICViW3Jlc3VsdF1cXG5cIlx0XHRcdFx0XFxcbitcdFx0ICAgICBcIjI6XFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHQgICAgIF9BU01fRVhUQUJMRV9UWVBFX1JFRygxYiwgMmIsIEVYX1RZUEVfRUZBVUxUX1JFRyxcdFxcXG4rXHRcdFx0XHRcdCAgICVbcmVzdWx0XSlcdFx0XHRcXFxuK1x0XHQgICAgIDogW3Jlc3VsdF0gXCI9cVwiIChfX3Jlc3VsdCksXHRcdFx0XFxcbitcdFx0ICAgICAgIFwiK2FcIiAoX19vbGRfbG93KSxcdFx0XHRcdFxcXG4rXHRcdCAgICAgICBcIitkXCIgKF9fb2xkX2hpZ2gpLFx0XHRcdFx0XFxcbitcdFx0ICAgICAgIFtwdHJdIFwiK21cIiAoKl9wdHIpXHRcdFx0XHRcXFxuK1x0XHQgICAgIDogXCJiXCIgKCh1NjQpX19uZXcpLFx0XHRcdFx0XFxcbitcdFx0ICAgICAgIFwiY1wiICgodTY0KSgodTEyOClfX25ldyBcdTAwM2VcdTAwM2UgNjQpKVx0XHRcdFxcXG4rXHRcdCAgICAgOiBcIm1lbW9yeVwiLCBcImNjXCIpO1x0XHRcdFx0XHRcXFxuK1x0aWYgKHVubGlrZWx5KF9fcmVzdWx0IFx1MDAzYyAwKSlcdFx0XHRcdFx0XFxcbitcdFx0Z290byBsYWJlbDtcdFx0XHRcdFx0XHRcXFxuK1x0aWYgKHVubGlrZWx5KCFfX3Jlc3VsdCkpXHRcdFx0XHRcdFxcXG4rXHRcdCpfb2xkID0gKCh1MTI4KV9fb2xkX2hpZ2ggXHUwMDNjXHUwMDNjIDY0KSB8IF9fb2xkX2xvdztcdFx0XFxcbitcdGxpa2VseShfX3Jlc3VsdCk7XHRcdFx0XHRcdH0pXG4gI2VuZGlmIC8vIENPTkZJR19YODZfMzJcbiAjZW5kaWYgLy8gQ09ORklHX0NDX0hBU19BU01fR09UT19USUVEX09VVFBVVFxuIFxuQEAgLTU1MSwxMSArNTk4LDE4IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXG4gZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XG4gXG4tI2lmbmRlZiBDT05GSUdfWDg2XzMyXG4rI2lmZGVmIENPTkZJR19YODZfMzJcbisvKlxuKyAqIEFsd2F5cyBmYWlsIG9uIDMyIGJpdCBhcmNoIG9yIDY0IGFyY2ggd2l0aG91dCAxMjggYml0IGNtcHhjaGcgc3VwcG9ydFxuKyAqL1xuKyNkZWZpbmUgX190cnlfY21weGNoZzEyOF91c2VyX2FzbShfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpICh7IEJVSUxEX0JVR19PTigxKTsgMDsgfSlcbisjZWxzZVxuICNkZWZpbmUgX190cnlfY21weGNoZzY0X3VzZXJfYXNtKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKVx0XHRcXFxuIFx0X190cnlfY21weGNoZ191c2VyX2FzbShcInFcIiwgXCJyXCIsIChfcHRyKSwgKF9vbGRwKSwgKF9udmFsKSwgX2xhYmVsKVxuK1xuICNlbmRpZlxuIFxuK1xuIC8qXG4gICogRm9yY2UgdGhlIHBvaW50ZXIgdG8gdVx1MDAzY3NpemVcdTAwM2UgdG8gbWF0Y2ggdGhlIHNpemUgZXhwZWN0ZWQgYnkgdGhlIGFzbSBoZWxwZXIuXG4gICogY2xhbmcvTExWTSBjb21waWxlcyBhbGwgY2FzZXMgYW5kIG9ubHkgZGlzY2FyZHMgdGhlIHVudXNlZCBwYXRocyBhZnRlclxuQEAgLTU4MCw2ICs2MzQsMTQgQEAgZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XG4gXHRjYXNlIDg6XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGc2NF91c2VyX2FzbSgoX19mb3JjZSB1NjQgKikoX3B0ciksIChfb2xkcCksXFxcbiBcdFx0XHRcdFx0XHQgKF9udmFsKSwgX2xhYmVsKTtcdFx0XFxcbiBcdFx0YnJlYWs7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRjYXNlIDE2Olx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NYMTYpKVx0XHRcdFx0XFxcbitcdFx0XHRfX3JldCA9IF9fdHJ5X2NtcHhjaGcxMjhfdXNlcl9hc20oXHRcdFx0XFxcbitcdFx0XHRcdFx0KF9fZm9yY2UgdTEyOCAqKShfcHRyKSxcdFx0XHRcXFxuK1x0XHRcdFx0XHQoX29sZHApLCAoX252YWwpLCBfbGFiZWwpO1x0XHRcXFxuK1x0XHRlbHNlXHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0X19yZXQgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRcdGJyZWFrO1x0XHRcdFx0XHRcdFx0XHRcXFxuIFx0ZGVmYXVsdDogX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUoKTtcdFx0XHRcdFxcXG4gXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdF9fcmV0O1x0XHRcdFx0XHRcdH0pXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmNcbmluZGV4IGMxYjIxMjgyMTg3ZjMuLjUzNTg0MjMzNmQ3NjYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXG5AQCAtMjE4NCwyNCArMjE4NCwzNiBAQCBzdGF0aWMgaW50IGVtX2NhbGxfbmVhcl9hYnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuKyNkZWZpbmUgZW1fY21weGNoZzhiXzE2YihfX2MsIHJiaXRzLCBtYml0cylcXFxuK2RvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0dSMjbWJpdHMgb2xkID0gX19jLVx1MDAzZWRzdC5vcmlnX3ZhbCMjbWJpdHM7XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0QlVJTERfQlVHX09OKHJiaXRzICogMiAhPSBtYml0cyk7XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRpZiAoKCh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUjI3JiaXRzKSByZWdfcmVhZChfX2MsIFZDUFVfUkVHU19SQVgpKSB8fFx0XHRcXFxuK1x0ICAgICgodSMjcmJpdHMpIChvbGQgXHUwMDNlXHUwMDNlIHJiaXRzKSAhPSAodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JEWCkpKSB7XHRcdFxcXG4rXHRcdCpyZWdfd3JpdGUoX19jLCBWQ1BVX1JFR1NfUkFYKSA9ICh1IyNyYml0cykgKG9sZCBcdTAwM2VcdTAwM2UgMCk7XHRcdFx0XFxcbitcdFx0KnJlZ193cml0ZShfX2MsIFZDUFVfUkVHU19SRFgpID0gKHUjI3JiaXRzKSAob2xkIFx1MDAzZVx1MDAzZSByYml0cyk7XHRcdFx0XFxcbitcdFx0X19jLVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbitcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRfX2MtXHUwMDNlZHN0LnZhbCMjbWJpdHMgPSAoKHUjI21iaXRzKXJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JDWCkgXHUwMDNjXHUwMDNjIHJiaXRzKSB8XHRcXFxuK1x0XHRcdFx0XHQodSMjcmJpdHMpIHJlZ19yZWFkKF9fYywgVkNQVV9SRUdTX1JCWCk7XHRcdFxcXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0X19jLVx1MDAzZWVmbGFncyB8PSBYODZfRUZMQUdTX1pGO1x0XHRcdFx0XHRcdFx0XFxcbitcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbit9IHdoaWxlICgwKVxuK1xuIHN0YXRpYyBpbnQgZW1fY21weGNoZzhiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuIHtcbi1cdHU2NCBvbGQgPSBjdHh0LVx1MDAzZWRzdC5vcmlnX3ZhbDY0O1xuLVxuLVx0aWYgKGN0eHQtXHUwMDNlZHN0LmJ5dGVzID09IDE2KVxuK1x0aWYgKFdBUk5fT05fT05DRSg4ICsgISEoY3R4dC1cdTAwM2VyZXhfYml0cyBcdTAwMjYgUkVYX1cpICogOCAhPSBjdHh0LVx1MDAzZWRzdC5ieXRlcykpXG4gXHRcdHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTtcbiBcbi1cdGlmICgoKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMCkgIT0gKHUzMikgcmVnX3JlYWQoY3R4dCwgVkNQVV9SRUdTX1JBWCkpIHx8XG4tXHQgICAgKCh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDMyKSAhPSAodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkRYKSkpIHtcbi1cdFx0KnJlZ193cml0ZShjdHh0LCBWQ1BVX1JFR1NfUkFYKSA9ICh1MzIpIChvbGQgXHUwMDNlXHUwMDNlIDApO1xuLVx0XHQqcmVnX3dyaXRlKGN0eHQsIFZDUFVfUkVHU19SRFgpID0gKHUzMikgKG9sZCBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0XHRjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjY9IH5YODZfRUZMQUdTX1pGO1xuLVx0fSBlbHNlIHtcbi1cdFx0Y3R4dC1cdTAwM2Vkc3QudmFsNjQgPSAoKHU2NClyZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkNYKSBcdTAwM2NcdTAwM2MgMzIpIHxcbi1cdFx0XHQodTMyKSByZWdfcmVhZChjdHh0LCBWQ1BVX1JFR1NfUkJYKTtcbi1cbi1cdFx0Y3R4dC1cdTAwM2VlZmxhZ3MgfD0gWDg2X0VGTEFHU19aRjtcbi1cdH1cbitcdGlmICghKGN0eHQtXHUwMDNlcmV4X2JpdHMgXHUwMDI2IFJFWF9XKSlcbitcdFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRlbHNlXG4rXHRcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XG4rI2VuZGlmXG4gXHRyZXR1cm4gWDg2RU1VTF9DT05USU5VRTtcbiB9XG4gXG5AQCAtNTQxNCw4ICs1NDI2LDE0IEBAIGludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXG4gXHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4gXHR9XG4tXHQvKiBDb3B5IGZ1bGwgNjQtYml0IHZhbHVlIGZvciBDTVBYQ0hHOEIuICAqL1xuLVx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWw2NCA9IGN0eHQtXHUwMDNlZHN0LnZhbDY0O1xuK1x0LyogQ29weSBmdWxsIDY0LzEyOC1iaXQgdmFsdWUgZm9yIENNUFhDSEc4Qi4gICovXG4rXG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGlmIChjdHh0LVx1MDAzZWRzdC5ieXRlcyA9PSAxNilcbitcdFx0Y3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVx1MDAzZWRzdC52YWwxMjg7XG4rXHRlbHNlXG4rI2VuZGlmXG4rXHRcdGN0eHQtXHUwMDNlZHN0Lm9yaWdfdmFsNjQgPSBjdHh0LVx1MDAzZWRzdC52YWw2NDtcbiBcbiBzcGVjaWFsX2luc246XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuaW5kZXggM2UzNzVhZjE1YzAzNS4uODk5MTE4NDUyMzNkYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuQEAgLTI2Myw2ICsyNjMsOSBAQCBzdHJ1Y3Qgb3BlcmFuZCB7XG4gXHR1bmlvbiB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgb3JpZ192YWw7XG4gXHRcdHU2NCBvcmlnX3ZhbDY0O1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRcdHUxMjggb3JpZ192YWwxMjg7XG4rI2VuZGlmXG4gXHR9O1xuIFx0dW5pb24ge1xuIFx0XHR1bnNpZ25lZCBsb25nICpyZWc7XG5AQCAtMjc2LDYgKzI3OSw5IEBAIHN0cnVjdCBvcGVyYW5kIHtcbiBcdHVuaW9uIHtcbiBcdFx0dW5zaWduZWQgbG9uZyB2YWw7XG4gXHRcdHU2NCB2YWw2NDtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuK1x0XHR1MTI4IHZhbDEyODtcbisjZW5kaWZcbiBcdFx0Y2hhciB2YWxwdHJbc2l6ZW9mKGF2eDI1Nl90KV07XG4gXHRcdHNzZTEyOF90IHZlY192YWw7XG4gXHRcdGF2eDI1Nl90IHZlY192YWwyO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uNjBiZTE2ZjA1ZDc5NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTI3MSw3ICs1MjcxLDcgQEAgc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuIFx0aW50IHI7XG4gXG4gXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xuLVx0aWYgKGJ5dGVzIFx1MDAzZSA4IHx8IChieXRlcyBcdTAwMjYgKGJ5dGVzIC0gMSkpKVxuK1x0aWYgKGJ5dGVzIFx1MDAzZSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIHx8IChieXRlcyBcdTAwMjYgKGJ5dGVzIC0gMSkpKVxuIFx0XHRnb3RvIGVtdWxfd3JpdGU7XG4gXG4gXHRncGEgPSBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUodmNwdSwgYWRkciwgTlVMTCk7XG5AQCAtNTMxMSw2ICs1MzExLDExIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbiBcdGNhc2UgODpcbiBcdFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTY0LCBodmEsIG9sZCwgbmV3KTtcbiBcdFx0YnJlYWs7XG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGNhc2UgMTY6XG4rXHRcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbiBcdGRlZmF1bHQ6XG4gXHRcdEJVRygpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MDQuOTM3NTE5Njc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNzcxMjkxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBleHBlcnQgZXllIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBuZXcgYGNtcHhjaGcxNmJgIGltcGxlbWVudGF0aW9uIGZvciB4ODZfNjQsIGFzIGl0J3MgZGVhbGluZyB3aXRoIDEyOC1iaXQgYXRvbWljIG9wZXJhdGlvbnMsIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi5cblxuRmlyc3QsIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaGAsIHdoaWNoIGlzIGNydWNpYWwuIEl0J3MgdGhlIGFzc2VtYmx5IGltcGxlbWVudGF0aW9uIHVzaW5nIGBjbXB4Y2hnMTZiYCBmb3IgdXNlci1zcGFjZSBtZW1vcnkgb3BlcmF0aW9ucy4gVGhlIGB0cnlfY21weGNoZ191c2VyYCBleHRlbnNpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBoYW5kbGVzIHRoZSBgY2FzZSAxNjpgIHNjZW5hcmlvIGlmIHRoZSBDUFUgc3VwcG9ydHMgaXQuIFNvIGZhciwgc28gZ29vZCwgYnV0IEknbGwgbmVlZCB0byBsb29rIGRlZXBlci5cblxuVGhlIEtWTSBzaWRlIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGBDTVBYQ0hHMTZCYCBlbXVsYXRpb24gaXMgZXhwZWN0ZWQuIFRoZSBgZW1fY21weGNoZzhiXzE2YmAgbWFjcm8gc2VlbXMgdG8gdW5pZnkgdGhlIGhhbmRsaW5nIG9mIDgtIGFuZCAxNi1ieXRlIGNtcHhjaGcgb3BlcmF0aW9ucy4gVGhlIHVwZGF0ZSB0byBgZW1fY21weGNoZzhiYCB0byBjYWxsIGBlbV9jbXB4Y2hnOGJfMTZiYCB3aGVuIGBSRVhfV2AgaXMgc2V0IGlzIHRoZSBjcml0aWNhbCBwb2ludCBmb3IgZGV0ZWN0aW5nIGEgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkYXRhZmxvdy4gVGhlIGFkZGl0aW9uIG9mIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIChhcyBgdTEyOGApIHRvIGBzdHJ1Y3Qgb3BlcmFuZGAgaW4gYGt2bV9lbXVsYXRlLmhgIGlzIGFsc28gaW1wb3J0YW50LCBhcyB0aGlzIGltcGxpZXMgdGhlc2UgdmFsdWVzIGFyZSBiZWluZyBwYXNzZWQgYXJvdW5kIGFuZCBwb3RlbnRpYWxseSByZWFkIGZyb20gbWVtb3J5LlxuXG5GaW5hbGx5LCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgSSBzZWUgdGhhdCBgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZGAgbm93IHN1cHBvcnRzIG9wZXJhbmRzIHVwIHRvIDE2IGJ5dGVzLiBUaGUgYWRkZWQgYGNhc2UgMTZgIGluIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCBoYW5kbGVzIHRoZSAxMjgtYml0IGNtcHhjaGcgZGlyZWN0bHksIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gaXNzdWUuXG5cbk5vdywgdGhlIGNydWNpYWwgc3RlcDogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkYCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmQgb3BlcmFuZCBmZXRjaGluZyBpbiBib3RoIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCBhbmQgYGFyY2gveDg2L2t2bS94ODYuY2AuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBjb2RlIGluIHRob3NlIGFyZWFzIHRvIHNlZSB3aGVyZSB0aGVzZSBuZXcgMTI4LWJpdCB2YWx1ZXMgYXJlIGluaXRpYWxpemVkLCB1c2VkLCBhbmQsIGNydWNpYWxseSwgKnBvdGVudGlhbGx5KiB1bmluaXRpYWxpemVkLiBUaGlzIGlzIHdoZXJlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIG1pZ2h0IGJlIG5lY2Vzc2FyeSBkZXBlbmRpbmcgb24gd2hhdCBJIGRpc2NvdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MTMuMTE0NjUyODE1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4MDcwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1OS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyNjEtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI3LVxcdC53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU4Mjg6XFx0LmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODI5LVxcdC5pbnZscGcgICAgICAgICAgICAgID0gZW11bGF0b3JfaW52bHBnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoxMy4yMjc0NjQ4MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNTA0MTY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHRoaW5raW5nIHRocm91Z2ggdGhlIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IGNtcHhjaGcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBgY21weGNoZ2AgZW11bGF0aW9uIHdpdGhpbiBLVk0uIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXIgbWVtb3J5LiBMZXQncyB6ZXJvIGluIG9uIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGFyb3VuZCBsaW5lIDUyNjA7IHRoYXQncyB3aGVyZSBgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcmAgc2hvdWxkIGJlLiBNeSBrZXkgcXVlc3Rpb246IEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gbWFuYWdlIHRvIGVtdWxhdGUgdGhlIGF0b21pYyBjb21wYXJlLWFuZC1leGNoYW5nZSBvcGVyYXRpb24gKnNhZmVseSogYW5kIGVmZmljaWVudGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSByZXNpZGluZyBpbiB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gdHJhY2sgaG93IG9wZXJhbmQgbWVtb3J5IGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBjb2RlLiBJJ20gaG9waW5nIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGd1YXJhbnRlZXMsIGFuZCBhbnkgbmVjZXNzYXJ5IGNoZWNrcyB0byBlbnN1cmUgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMgYXMgZXhwZWN0ZWQgd2l0aG91dCBjYXVzaW5nIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWNjZXNzIG1ldGhvZHMsIGFueSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIHVzZXIgbWVtb3J5IGFjY2VzcywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZC4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgZWxlZ2FuY2UgKG9yIGxhY2sgdGhlcmVvZikgb2YgdGhlIHg4NiBgY21weGNoZ2AgZW11bGF0aW9uIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgYXJlYXMgd2hlcmUgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgY291bGQgYmUgaW50cm9kdWNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjE2LjE1MjUwOTAxMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjY3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNjAsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUyNjA6XFx0c3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbjUyNjE6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNTI2MjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKm9sZCxcXG41MjYzOlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqbmV3LFxcbjUyNjQ6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsXFxuNTI2NTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pXFxuNTI2NjpcXHR7XFxuNTI2NzpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7XFxuNTI2ODpcXHRcXHR1NjQgcGFnZV9saW5lX21hc2s7XFxuNTI2OTpcXHRcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG41MjcwOlxcdFxcdGdwYV90IGdwYTtcXG41MjcxOlxcdFxcdGludCByO1xcbjUyNzI6XFx0XFxuNTI3MzpcXHRcXHQvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqL1xcbjUyNzQ6XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fCAoYnl0ZXMgXFx1MDAyNiAoYnl0ZXMgLSAxKSkpXFxuNTI3NTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI3NjpcXHRcXG41Mjc3OlxcdFxcdGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBOVUxMKTtcXG41Mjc4OlxcdFxcbjUyNzk6XFx0XFx0aWYgKGdwYSA9PSBJTlZBTElEX0dQQSB8fFxcbjUyODA6XFx0XFx0ICAgIChncGEgXFx1MDAyNiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpXFxuNTI4MTpcXHRcXHRcXHRnb3RvIGVtdWxfd3JpdGU7XFxuNTI4MjpcXHRcXG41MjgzOlxcdFxcdC8qXFxuNTI4NDpcXHRcXHQgKiBFbXVsYXRlIHRoZSBhdG9taWMgYXMgYSBzdHJhaWdodCB3cml0ZSB0byBhdm9pZCAjQUMgaWYgU0xEIGlzXFxuNTI4NTpcXHRcXHQgKiBlbmFibGVkIGluIHRoZSBob3N0IGFuZCB0aGUgYWNjZXNzIHNwbGl0cyBhIGNhY2hlIGxpbmUuXFxuNTI4NjpcXHRcXHQgKi9cXG41Mjg3OlxcdFxcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKVxcbjUyODg6XFx0XFx0XFx0cGFnZV9saW5lX21hc2sgPSB+KGNhY2hlX2xpbmVfc2l6ZSgpIC0gMSk7XFxuNTI4OTpcXHRcXHRlbHNlXFxuNTI5MDpcXHRcXHRcXHRwYWdlX2xpbmVfbWFzayA9IFBBR0VfTUFTSztcXG41MjkxOlxcdFxcbjUyOTI6XFx0XFx0aWYgKCgoZ3BhICsgYnl0ZXMgLSAxKSBcXHUwMDI2IHBhZ2VfbGluZV9tYXNrKSAhPSAoZ3BhIFxcdTAwMjYgcGFnZV9saW5lX21hc2spKVxcbjUyOTM6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTQ6XFx0XFxuNTI5NTpcXHRcXHRodmEgPSBrdm1fdmNwdV9nZm5fdG9faHZhKHZjcHUsIGdwYV90b19nZm4oZ3BhKSk7XFxuNTI5NjpcXHRcXHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxcbjUyOTc6XFx0XFx0XFx0Z290byBlbXVsX3dyaXRlO1xcbjUyOTg6XFx0XFxuNTI5OTpcXHRcXHRodmEgKz0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTtcXG41MzAwOlxcdFxcbjUzMDE6XFx0XFx0c3dpdGNoIChieXRlcykge1xcbjUzMDI6XFx0XFx0Y2FzZSAxOlxcbjUzMDM6XFx0XFx0XFx0ciA9IGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodTgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDQ6XFx0XFx0XFx0YnJlYWs7XFxuNTMwNTpcXHRcXHRjYXNlIDI6XFxuNTMwNjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MTYsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMDc6XFx0XFx0XFx0YnJlYWs7XFxuNTMwODpcXHRcXHRjYXNlIDQ6XFxuNTMwOTpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1MzIsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTA6XFx0XFx0XFx0YnJlYWs7XFxuNTMxMTpcXHRcXHRjYXNlIDg6XFxuNTMxMjpcXHRcXHRcXHRyID0gZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlcih1NjQsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTM6XFx0XFx0XFx0YnJlYWs7XFxuNTMxNDpcXHQjaWZkZWYgQ09ORklHX1g4Nl82NFxcbjUzMTU6XFx0XFx0Y2FzZSAxNjpcXG41MzE2OlxcdFxcdFxcdHIgPSBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyKHUxMjgsIGh2YSwgb2xkLCBuZXcpO1xcbjUzMTc6XFx0XFx0XFx0YnJlYWs7XFxuNTMxODpcXHQjZW5kaWZcXG41MzE5OlxcdFxcdGRlZmF1bHQ6XFxuNTMyMDpcXHRcXHRcXHRCVUcoKTtcXG41MzIxOlxcdFxcdH1cXG41MzIyOlxcdFxcbjUzMjM6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjUzMjQ6XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoxNi4xNTMzNDAyMDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDIxMjI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgRW11bGF0b3IgQ29uY3VycmVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGJlaW5nIHVzZWQuIEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgYXRvbWljcywgYnV0IEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2lyY2xlIGJhY2sgYW5kIHJlYWxseSBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXJgIGZ1bmN0aW9uLiBUaGF0J3MgYSBjcml0aWNhbCBwaWVjZSwgZXNwZWNpYWxseSBpbiBhIGhlYXZpbHkgY29uY3VycmVudCBlbnZpcm9ubWVudCBsaWtlIGFuIGVtdWxhdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGxldmVyYWdpbmcgY29tcGFyZS1hbmQtc3dhcCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzIGFjY2Vzc2luZyBzaGFyZWQgZW11bGF0b3IgcmVzb3VyY2VzLiBJdCdzIHRoZSBrZXkgdG8gbWFraW5nIHN1cmUgdGhhdCB0aGUgZXhlY3V0aW9uIGlzbid0IGNvcnJ1cHRlZCBieSByYWNlIGNvbmRpdGlvbnMuIEkgY2Fu4oCZdCBhZmZvcmQgdG8gbWFrZSBhc3N1bXB0aW9ucyBoZXJlLCBzbyBiZXR0ZXIgdG8gZG91YmxlLWNoZWNrIG5vdyByYXRoZXIgdGhhbiByaXNrIGEgc3VidGxlIGJ1ZyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MTguMjY3NTU1MDNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjUxMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgZW11bGF0b3JfdHJ5X2NtcHhjaGdfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS94ODYuYz01MjQyPXN0YXRpYyBpbnQgZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTI1Ni1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTI1NzojZGVmaW5lIGVtdWxhdG9yX3RyeV9jbXB4Y2hnX3VzZXIodCwgcHRyLCBvbGQsIG5ldykgXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYy01MjU4LVxcdChfX3RyeV9jbXB4Y2hnX3VzZXIoKHQgX191c2VyICopKHB0ciksICh0ICopKG9sZCksICoodCAqKShuZXcpLCBlZmF1bHQgIyMgdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjE4LjMzNzIxMTE3OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTEyNTU4OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGluIHRoaXMgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIHVzZXItc3BhY2UgY29tcGFyZS1hbmQtZXhjaGFuZ2UgZnVuY3Rpb25hbGl0eS4gTXkgaW50dWl0aW9uIHNheXMgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGNydWNpYWwgZm9yIGltcGxlbWVudGluZyBsb2NrLWZyZWUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgaW4gbXVsdGl0aHJlYWRlZCB1c2VyIGFwcGxpY2F0aW9ucy5cblxuVGhlcmVmb3JlLCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgaW5zcGVjdCBgdHJ5X2NtcHhjaGdfdXNlcmAgYW5kIGBfX3RyeV9jbXB4Y2hnX3VzZXJgIHdpdGhpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oYC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBpbnRlcmZhY2Ugd2l0aCB0aGUgaGFyZHdhcmUncyBhdG9taWMgaW5zdHJ1Y3Rpb25zIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgcmVsYXRlZCB0byBtZW1vcnkgb3JkZXJpbmcsIGNhY2hlIGNvaGVyZW5jeSwgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZyB3aXRoaW4gdGhlIHVzZXIgY29udGV4dC4gVGhpcyBkZWVwZXIgZGl2ZSB3aWxsIGxpa2VseSByZXZlYWwgY3J1Y2lhbCBkZXRhaWxzIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODAzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MjEuNDQ5NzczMzk0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjAwNDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY21weGNoZ191c2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9MzM0PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtMzcyLSNpZmRlZiBDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjM3MzojZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXFx0KHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC0zNzQtXFx0Ym9vbCBzdWNjZXNzO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzItI2Vsc2UgIC8vICFDT05GSUdfQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjQzMzojZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oaXR5cGUsIGx0eXBlLCBfcHRyLCBfcG9sZCwgX25ldywgbGFiZWwpXFx0KHsgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC00MzQtXFx0aW50IF9fZXJyID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg9NTkwPWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNTk4LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo1OTk6ZXh0ZXJuIHZvaWQgX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUodm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwMC1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MDctI2RlZmluZSBfX3RyeV9jbXB4Y2hnNjRfdXNlcl9hc20oX3B0ciwgX29sZHAsIF9udmFsLCBfbGFiZWwpXFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MDg6XFx0X190cnlfY21weGNoZ191c2VyX2FzbShcXFwicVxcXCIsIFxcXCJyXFxcIiwgKF9wdHIpLCAoX29sZHApLCAoX252YWwpLCBfbGFiZWwpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYwOS1cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MTctICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjYxODojZGVmaW5lIHVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKSAoe1xcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjE5LVxcdGJvb2wgX19yZXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyMS1cXHRzd2l0Y2ggKHNpemVvZigqKF9wdHIpKSkge1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjIyOlxcdGNhc2UgMTpcXHRfX3JldCA9IF9fdHJ5X2NtcHhjaGdfdXNlcl9hc20oXFxcImJcXFwiLCBcXFwicVxcXCIsXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjMtXFx0XFx0XFx0XFx0XFx0ICAgICAgIChfX2ZvcmNlIHU4ICopKF9wdHIpLCAoX29sZHApLFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjUtXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MjY6XFx0Y2FzZSAyOlxcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcXFwid1xcXCIsIFxcXCJyXFxcIixcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYyNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgKF9fZm9yY2UgdTE2ICopKF9wdHIpLCAoX29sZHApLFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02MjktXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2MzA6XFx0Y2FzZSA0OlxcdF9fcmV0ID0gX190cnlfY21weGNoZ191c2VyX2FzbShcXFwibFxcXCIsIFxcXCJyXFxcIixcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTYzMS1cXHRcXHRcXHRcXHRcXHQgICAgICAgKF9fZm9yY2UgdTMyICopKF9wdHIpLCAoX29sZHApLFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NDQtXFx0XFx0YnJlYWs7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaDo2NDU6XFx0ZGVmYXVsdDogX190cnlfY21weGNoZ191c2VyX3dyb25nX3NpemUoKTtcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY0Ni1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY0OS0vKiBcXFwiUmV0dXJuc1xcXCIgMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUsIC1FRkFVTFQgaWYgdGhlIGFjY2VzcyBmYXVsdHMuICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjY1MDojZGVmaW5lIF9fdHJ5X2NtcHhjaGdfdXNlcihfcHRyLCBfb2xkcCwgX252YWwsIF9sYWJlbClcXHQoe1xcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNjUxLVxcdGludCBfX3JldCA9IC1FRkFVTFQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaC02NTItXFx0X191YWNjZXNzX2JlZ2luX25vc3BlYygpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmg6NjUzOlxcdF9fcmV0ID0gIXVuc2FmZV90cnlfY21weGNoZ191c2VyKF9wdHIsIF9vbGRwLCBfbnZhbCwgX2xhYmVsKTtcXHRcXFxcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTY1NC1fbGFiZWw6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoyMS41MjE3ODM2OTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExOTcyOTM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGVtX2NtcHhjaGc4YmAgSW1wbGVtZW50YXRpb24gaW4gS1ZNJ3MgWDg2IEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgYGVtX2NtcHhjaGc4YmAgaXMgaGFuZGxlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB0aGUgZGVjb2RpbmcgYW5kIGNhbGwgZmxvdy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBlbXVsYXRpb24gb2YgdGhlIENNUFhDSEc4QiAob3IgQ01QWENIRzE2QikgaW5zdHJ1Y3Rpb24gaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGludGVyZXN0aW5nIGludGVycGxheSB3aXRoIHRoZSBndWVzdCdzIHJlZ2lzdGVycyBhbmQgbWVtb3J5LCBhbmQgSSdtIGVhZ2VyIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGNvcnJlY3RuZXNzIGlzc3VlcyBpbiB0aGUgZW11bGF0aW9uLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGludm9sdmUgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaW5zdHJ1Y3Rpb24ncyBvcGVyYW5kIHNpemUsIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaW1lIHRvIGdldCBkb3duIHRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyNiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI0LjY0MTUxNTY3OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI4OTY4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW1fY21weGNoZzhiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0yMTczPXN0YXRpYyBpbnQgZW1fY2FsbF9uZWFyX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjE4Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIxODc6I2RlZmluZSBlbV9jbXB4Y2hnOGJfMTZiKF9fYywgcmJpdHMsIG1iaXRzKVxcXFxcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIxODgtZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIwNS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMDY6c3RhdGljIGludCBlbV9jbXB4Y2hnOGIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjA3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMS1cXHRpZiAoIShjdHh0LVxcdTAwM2VyZXhfYml0cyBcXHUwMDI2IFJFWF9XKSlcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjIyMTI6XFx0XFx0ZW1fY21weGNoZzhiXzE2YihjdHh0LCAzMiwgNjQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxMy0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjIxNC1cXHRlbHNlXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMjE1OlxcdFxcdGVtX2NtcHhjaGc4Yl8xNmIoY3R4dCwgNjQsIDEyOCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMjE2LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00MTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZHVhbCBncm91cDkgPSB7IHtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQxMjI6XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00MTIzLX0sIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MjQuNzM0NDE3ODQ2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTA4NDQ1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0geDg2IEVtdWxhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBncm91cDlgIGhhbmRsZXIgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc3BlY2lmaWNhbGx5IHRoZSBlbXVsYXRpb24gb2YgdGhvc2UgbW9yZSBjb21wbGV4IHg4NiBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIHNldCBleHRlbnNpb24sIG9yIHBvdGVudGlhbGx5IGEgc29tZXdoYXQgdW51c3VhbCBpbnN0cnVjdGlvbiwgYmFzZWQgb24gdGhlIGBncm91cDlgIG5hbWluZyBjb252ZW50aW9uLiBHaXZlbiB0aGUgZmlsZSBsb2NhdGlvbiwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBkZWNvZGVkLCB0aGUgYXNzb2NpYXRlZCByZWdpc3RlcnMgdXBkYXRlZCwgYW5kIGFueSBuZWNlc3NhcnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGd1ZXN0J3MgbWVtb3J5LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBJIGFtIGFsc28gZGVhbGluZyB3aXRoIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlc2UgaW5zdHJ1Y3Rpb25zIGFuZCBob3cgdG8gc2ltdWxhdGUgdGhhdCBvbiBzb2Z0d2FyZS4gSSBrbm93IGl0J3MgZ29pbmcgdG8gYmUgYSBkZWVwIGRpdmUuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcywgdGhlIGNvbnRyb2wgZmxvdywgYW5kIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCBjb3JuZXIgY2FzZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhhdCBqdW1wIG91dC4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGVjaG5pcXVlcyB0aGUgb3JpZ2luYWwgYXV0aG9ycyB1c2VkIHRvIGhhbmRsZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI3LjU4NTI2NTM2NFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTIwOlxcdFxcbjQxMjE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncm91cF9kdWFsIGdyb3VwOSA9IHsge1xcbjQxMjI6XFx0XFx0TiwgSShEc3RNZW02NCB8IExvY2sgfCBQYWdlVGFibGUsIGVtX2NtcHhjaGc4YiksIE4sIE4sIE4sIE4sIE4sIE4sXFxuNDEyMzpcXHR9LCB7XFxuNDEyNDpcXHRcXHROLCBOLCBOLCBOLCBOLCBOLCBOLFxcbjQxMjU6XFx0XFx0R1AoMCwgXFx1MDAyNnBmeF8wZl9jN183KSxcXG40MTI2OlxcdH0gfTtcXG40MTI3OlxcdFxcbjQxMjg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvcGNvZGUgZ3JvdXAxMVtdID0ge1xcbjQxMjk6XFx0XFx0SShEc3RNZW0gfCBTcmNJbW0gfCBNb3YgfCBQYWdlVGFibGUsIGVtX21vdiksXFxuNDEzMDpcXHRcXHRYNyhEKFVuZGVmaW5lZCkpLFxcbjQxMzE6XFx0fTtcXG40MTMyOlxcdFxcbjQxMzM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBncHJlZml4IHBmeF8wZl9hZV83ID0ge1xcbjQxMzQ6XFx0XFx0SShTcmNNZW0gfCBCeXRlT3AsIGVtX2NsZmx1c2gpLCBJKFNyY01lbSB8IEJ5dGVPcCwgZW1fY2xmbHVzaG9wdCksIE4sIE4sXFxuNDEzNTpcXHR9O1xcbjQxMzY6XFx0XFxuNDEzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXAxNSA9IHsge1xcbjQxMzg6XFx0XFx0SShNb2RSTSB8IEFsaWduZWQxNiwgZW1fZnhzYXZlKSxcXG40MTM5OlxcdFxcdEkoTW9kUk0gfCBBbGlnbmVkMTYsIGVtX2Z4cnN0b3IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjoyNy41ODU3MjE1OTVaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxMzE5MDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyBPcGVyYW5kIERlY29kaW5nIGluIEtWTSdzIHg4NiBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgb3BlcmFuZCBkZWNvZGluZyBsb2dpYyBmb3IgYERzdE1lbTY0YCwgYERzdE1lbTE2YCwgYW5kIHJlbGF0ZWQgbWVtb3J5IGRlc3RpbmF0aW9uIG9wZXJhbmRzIHdpdGhpbiB0aGUgS1ZNIHg4NiBlbXVsYXRpb24gbGF5ZXIuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGRpdmUgaW50byBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgcm91dGluZXMgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyB0aGUgaW5zdHJ1Y3Rpb24ncyBlbmNvZGluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBpbiBtZW1vcnkgd2hlbiB0aGUgZGVzdGluYXRpb24gaXMgbWVtb3J5IGl0c2VsZi4gVGhpcyBpcyBwcm9iYWJseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgZW11bGF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBJIGltYWdpbmUgdGhlcmUncyBhIGdvb2QgY2h1bmsgb2YgY29kZSBkZWRpY2F0ZWQgdG8gaGFuZGxpbmcgZGlmZmVyZW50IGFkZHJlc3NpbmcgbW9kZXMsIHNlZ21lbnQgcmVnaXN0ZXJzLCBhbmQgb3BlcmFuZCBzaXplcyB3aXRoaW4gdGhhdCBlbXVsYXRpb24gZmlsZS4gSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcGFyc2luZyB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI5LjU5ODkxNjAyNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5Mjc1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRHN0TWVtNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTkxLSNkZWZpbmUgRHN0REkgICAgICAgKE9wREkgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5MjojZGVmaW5lIERzdE1lbTY0ICAgIChPcE1lbTY0IFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTMtI2RlZmluZSBEc3RNZW0xNiAgICAoT3BNZW0xNiBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9NDEyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2R1YWwgZ3JvdXA5ID0geyB7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0MTIyOlxcdE4sIEkoRHN0TWVtNjQgfCBMb2NrIHwgUGFnZVRhYmxlLCBlbV9jbXB4Y2hnOGIpLCBOLCBOLCBOLCBOLCBOLCBOLFxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDEyMy19LCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjI5LjY3NDg0OTc4NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgyMjE5NDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgYE9wTWVtNjRgIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgT3BNZW02NGAuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyBvcGNvZGUgaXMgcHJvY2Vzc2VkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCBvciBtYXliZSBhIHF1aWNrIGdyZXAgdG8gbG9jYXRlIGFsbCB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYW5kIHVzYWdlcy4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIG1vZHVsZXMgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyBvciBleGVjdXRpbmcgaW5zdHJ1Y3Rpb25zIG9mIHRoaXMgdHlwZS4gTXkgZ29hbCBpcyB0byBtYXAgdGhlIHBhdGggb2YgdGhpcyBvcGVyYXRpb246IGZyb20gcGFyc2luZyB0byBzZW1hbnRpYyBhbmFseXNpcywgY29kZSBnZW5lcmF0aW9uIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gcnVudGltZSBleGVjdXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLCBvZiBjb3Vyc2UuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzEuNTU3MDgzNDk3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzcyMDMxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPcE1lbTY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NS0jZGVmaW5lIE9wREkgICAgICAgICAgICAgICA1dWxsICAvKiBFUzpESS9FREkvUkRJICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NjojZGVmaW5lIE9wTWVtNjQgICAgICAgICAgICA2dWxsICAvKiBNZW1vcnksIDY0LWJpdCAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDctI2RlZmluZSBPcEltbVVCeXRlICAgICAgICAgN3VsbCAgLyogWmVyby1leHRlbmRlZCA4LWJpdCBpbW1lZGlhdGUgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtOTEtI2RlZmluZSBEc3RESSAgICAgICAoT3BESSBcXHUwMDNjXFx1MDAzYyBEc3RTaGlmdClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjkyOiNkZWZpbmUgRHN0TWVtNjQgICAgKE9wTWVtNjQgXFx1MDAzY1xcdTAwM2MgRHN0U2hpZnQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy05My0jZGVmaW5lIERzdE1lbTE2ICAgIChPcE1lbTE2IFxcdTAwM2NcXHUwMDNjIERzdFNoaWZ0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz00NjI1PXN0YXRpYyBpbnQgZGVjb2RlX29wZXJhbmQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBvcGVyYW5kICpvcCxcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0NS1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjQ2NDY6XFx0Y2FzZSBPcE1lbTY0OlxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNDY0Ny1cXHRcXHRjdHh0LVxcdTAwM2VtZW1vcC5ieXRlcyA9IChjdHh0LVxcdTAwM2VvcF9ieXRlcyA9PSA4KSA/IDE2IDogODtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzEuNjM0ODE0NDQ1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjg1OTc3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRW11bGF0aW9uIElzc3VlcyBpbiBLVk0geDg2KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHg4NiBlbXVsYXRpb24gaW4gS1ZNLiBNeSBodW5jaCBpcyB0ZWxsaW5nIG1lIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDQ2NDYsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgY29kZSBpbiB0aGF0IHZpY2luaXR5LCBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gcGlucG9pbnQuIEFsc28sIEkgYmV0dGVyIGNoZWNrIG91dCBgeDg2X2VtdWxhdGVfaW5zbmAgYXJvdW5kIGxpbmUgNTQxNCBpbiB0aGUgc2FtZSBmaWxlLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBhbiBpc3N1ZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBpbnN0cnVjdGlvbiBlbXVsYXRpb24gZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjYXVzaW5nIHRoaXMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZmxvdywgY29uc2lkZXIgdGhlIGlucHV0cywgYW5kIGxvb2sgZm9yIGFueSBkaXNjcmVwYW5jaWVzIG9yIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHdlIGdvdCB0byB0aGUgcHJvYmxlbSwgYW5kIHNlZSBpZiBJIGNhbiBuYXJyb3cgZG93biBhIHJvb3QgY2F1c2UuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODk5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzQuMDAzNDE1MjExWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2NDA6XFx0XFx0XFx0Km9wID0gY3R4dC1cXHUwMDNlbWVtb3A7XFxuNDY0MTpcXHRcXHRcXHRjdHh0LVxcdTAwM2VtZW1vcHAgPSBvcDtcXG40NjQyOlxcdFxcdFxcdGlmIChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgQml0T3ApXFxuNDY0MzpcXHRcXHRcXHRcXHRmZXRjaF9iaXRfb3BlcmFuZChjdHh0KTtcXG40NjQ0OlxcdFxcdFxcdG9wLVxcdTAwM2VvcmlnX3ZhbCA9IG9wLVxcdTAwM2V2YWw7XFxuNDY0NTpcXHRcXHRcXHRicmVhaztcXG40NjQ2OlxcdFxcdGNhc2UgT3BNZW02NDpcXG40NjQ3OlxcdFxcdFxcdGN0eHQtXFx1MDAzZW1lbW9wLmJ5dGVzID0gKGN0eHQtXFx1MDAzZW9wX2J5dGVzID09IDgpID8gMTYgOiA4O1xcbjQ2NDg6XFx0XFx0XFx0Z290byBtZW1fY29tbW9uO1xcbjQ2NDk6XFx0XFx0Y2FzZSBPcEFjYzpcXG40NjUwOlxcdFxcdFxcdG9wLVxcdTAwM2V0eXBlID0gT1BfUkVHO1xcbjQ2NTE6XFx0XFx0XFx0b3AtXFx1MDAzZWJ5dGVzID0gKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBCeXRlT3ApID8gMSA6IGN0eHQtXFx1MDAzZW9wX2J5dGVzO1xcbjQ2NTI6XFx0XFx0XFx0b3AtXFx1MDAzZWFkZHIucmVnID0gcmVnX3JtdyhjdHh0LCBWQ1BVX1JFR1NfUkFYKTtcXG40NjUzOlxcdFxcdFxcdGZldGNoX3JlZ2lzdGVyX29wZXJhbmQob3ApO1xcbjQ2NTQ6XFx0XFx0XFx0YnJlYWs7XFxuNDY1NTpcXHRcXHRjYXNlIE9wQWNjTG86XFxuNDY1NjpcXHRcXHRcXHRvcC1cXHUwMDNldHlwZSA9IE9QX1JFRztcXG40NjU3OlxcdFxcdFxcdG9wLVxcdTAwM2VieXRlcyA9IChjdHh0LVxcdTAwM2VkIFxcdTAwMjYgQnl0ZU9wKSA/IDIgOiBjdHh0LVxcdTAwM2VvcF9ieXRlcztcXG40NjU4OlxcdFxcdFxcdG9wLVxcdTAwM2VhZGRyLnJlZyA9IHJlZ19ybXcoY3R4dCwgVkNQVV9SRUdTX1JBWCk7XFxuNDY1OTpcXHRcXHRcXHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcXG40NjYwOlxcdFxcdFxcdGJyZWFrO1xcbjQ2NjE6XFx0XFx0Y2FzZSBPcEFjY0hpOlxcbjQ2NjI6XFx0XFx0XFx0aWYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBCeXRlT3ApIHtcXG40NjYzOlxcdFxcdFxcdFxcdG9wLVxcdTAwM2V0eXBlID0gT1BfTk9ORTtcXG40NjY0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ2NjU6XFx0XFx0XFx0fVxcbjQ2NjY6XFx0XFx0XFx0b3AtXFx1MDAzZXR5cGUgPSBPUF9SRUc7XFxuNDY2NzpcXHRcXHRcXHRvcC1cXHUwMDNlYnl0ZXMgPSBjdHh0LVxcdTAwM2VvcF9ieXRlcztcXG40NjY4OlxcdFxcdFxcdG9wLVxcdTAwM2VhZGRyLnJlZyA9IHJlZ19ybXcoY3R4dCwgVkNQVV9SRUdTX1JEWCk7XFxuNDY2OTpcXHRcXHRcXHRmZXRjaF9yZWdpc3Rlcl9vcGVyYW5kKG9wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzQuMDAzOTE3MDExWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODU5Mjg5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgT3BlcmFuZCBNZW1vcnkgRmV0Y2ggaW4geDg2IEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgdGhlIG9wZXJhbmQgbWVtb3J5IGZldGNoIGhhcHBlbnMgd2l0aGluIHRoZSBgeDg2X2VtdWxhdGVfaW5zbmAgZnVuY3Rpb24uIEknbSB0aGlua2luZywgYmFzZWQgb24gdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZXNlIGVtdWxhdG9ycywgdGhhdCBpdCBzaG91bGQgYmUgc29tZXdoZXJlIGluIHRoZSBhcmVhIHRoYXQgZGVhbHMgd2l0aCBvcGVyYW5kIGFjY2Vzcy4gTGV0J3Mgc3RhcnQgd2l0aCBsaW5lIDU0MDAgYW5kIGdvIHVwIHRvIGFyb3VuZCBsaW5lIDU0NDAuIFRoYXQgcmFuZ2UgaXMgdXN1YWxseSB3aGVyZSB0aGUgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMgYXNzb2NpYXRlZCB3aXRoIGluc3RydWN0aW9uIG9wZXJhbmQgaGFuZGxpbmcgYXJlIGhhbmRsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpdmUgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgb3BlcmFuZCBmZXRjaCBsb2dpYyBpcyBpbXBsZW1lbnRlZCBoZXJlLiBJdCdzIHRpbWUgdG8gZ2V0IGhhbmRzLW9uIGFuZCB0cmFjZSB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjM2LjA4OTg0OTM3MVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjAyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDAwOlxcdFxcdFxcdFxcdFxcdCAgICBjdHh0LVxcdTAwM2VzcmMudmFscHRyLCBjdHh0LVxcdTAwM2VzcmMuYnl0ZXMpO1xcbjU0MDE6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuNTQwMjpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQwMzpcXHRcXHRcXHRjdHh0LVxcdTAwM2VzcmMub3JpZ192YWw2NCA9IGN0eHQtXFx1MDAzZXNyYy52YWw2NDtcXG41NDA0OlxcdFxcdH1cXG41NDA1OlxcdFxcbjU0MDY6XFx0XFx0aWYgKGN0eHQtXFx1MDAzZXNyYzIudHlwZSA9PSBPUF9NRU0pIHtcXG41NDA3OlxcdFxcdFxcdHJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgY3R4dC1cXHUwMDNlc3JjMi5hZGRyLm1lbSxcXG41NDA4OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3R4dC1cXHUwMDNlc3JjMi52YWwsIGN0eHQtXFx1MDAzZXNyYzIuYnl0ZXMpO1xcbjU0MDk6XFx0XFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuNTQxMDpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQxMTpcXHRcXHR9XFxuNTQxMjpcXHRcXG41NDEzOlxcdFxcdGlmICgoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IERzdE1hc2spID09IEltcGxpY2l0T3BzKVxcbjU0MTQ6XFx0XFx0XFx0Z290byBzcGVjaWFsX2luc247XFxuNTQxNTpcXHRcXG41NDE2OlxcdFxcbjU0MTc6XFx0XFx0aWYgKChjdHh0LVxcdTAwM2Vkc3QudHlwZSA9PSBPUF9NRU0pIFxcdTAwMjZcXHUwMDI2ICEoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IE1vdikpIHtcXG41NDE4OlxcdFxcdFxcdC8qIG9wdGltaXNhdGlvbiAtIGF2b2lkIHNsb3cgZW11bGF0ZWQgcmVhZCBpZiBNb3YgKi9cXG41NDE5OlxcdFxcdFxcdHJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgY3R4dC1cXHUwMDNlZHN0LmFkZHIubWVtLFxcbjU0MjA6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmN0eHQtXFx1MDAzZWRzdC52YWwsIGN0eHQtXFx1MDAzZWRzdC5ieXRlcyk7XFxuNTQyMTpcXHRcXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkge1xcbjU0MjI6XFx0XFx0XFx0XFx0aWYgKCEoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IE5vV3JpdGUpIFxcdTAwMjZcXHUwMDI2XFxuNTQyMzpcXHRcXHRcXHRcXHQgICAgcmMgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQgXFx1MDAyNlxcdTAwMjZcXG41NDI0OlxcdFxcdFxcdFxcdCAgICBjdHh0LVxcdTAwM2VleGNlcHRpb24udmVjdG9yID09IFBGX1ZFQ1RPUilcXG41NDI1OlxcdFxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi5lcnJvcl9jb2RlIHw9IFBGRVJSX1dSSVRFX01BU0s7XFxuNTQyNjpcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuNTQyNzpcXHRcXHRcXHR9XFxuNTQyODpcXHRcXHR9XFxuNTQyOTpcXHRcXHQvKiBDb3B5IGZ1bGwgNjQvMTI4LWJpdCB2YWx1ZSBmb3IgQ01QWENIRzhCLiAgKi9cXG41NDMwOlxcdFxcbjU0MzE6XFx0I2lmZGVmIENPTkZJR19YODZfNjRcXG41NDMyOlxcdFxcdGlmIChjdHh0LVxcdTAwM2Vkc3QuYnl0ZXMgPT0gMTYpXFxuNTQzMzpcXHRcXHRcXHRjdHh0LVxcdTAwM2Vkc3Qub3JpZ192YWwxMjggPSBjdHh0LVxcdTAwM2Vkc3QudmFsMTI4O1xcbjU0MzQ6XFx0XFx0ZWxzZVxcbjU0MzU6XFx0I2VuZGlmXFxuNTQzNjpcXHRcXHRcXHRjdHh0LVxcdTAwM2Vkc3Qub3JpZ192YWw2NCA9IGN0eHQtXFx1MDAzZWRzdC52YWw2NDtcXG41NDM3OlxcdFxcbjU0Mzg6XFx0c3BlY2lhbF9pbnNuOlxcbjU0Mzk6XFx0XFxuNTQ0MDpcXHRcXHRpZiAodW5saWtlbHkoY2hlY2tfaW50ZXJjZXB0cykgXFx1MDAyNlxcdTAwMjYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBJbnRlcmNlcHQpKSB7XFxuNTQ0MTpcXHRcXHRcXHRyYyA9IGVtdWxhdG9yX2NoZWNrX2ludGVyY2VwdChjdHh0LCBjdHh0LVxcdTAwM2VpbnRlcmNlcHQsXFxuNTQ0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBYODZfSUNQVF9QT1NUX01FTUFDQ0VTUyk7XFxuNTQ0MzpcXHRcXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcXG41NDQ0OlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG41NDQ1OlxcdFxcdH1cXG41NDQ2OlxcdFxcbjU0NDc6XFx0XFx0aWYgKGN0eHQtXFx1MDAzZXJlcF9wcmVmaXggXFx1MDAyNlxcdTAwMjYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBTdHJpbmcpKVxcbjU0NDg6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZWZsYWdzIHw9IFg4Nl9FRkxBR1NfUkY7XFxuNTQ0OTpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjM2LjA5MDUxMjkzMVoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA1Nzk1MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBXcml0ZWJhY2sgaW4gSW5zdHJ1Y3Rpb24gRW11bGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHg4Nl9lbXVsYXRlX2luc25gIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBpdCBoYW5kbGVzIHdyaXRlYmFjaywgcGFydGljdWxhcmx5IGZvciB0aGUgZGVzdGluYXRpb24gb3BlcmFuZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBoZXJlLCB3aGVyZSBhbmQgaG93IHRoZSByZXN1bHRzIG9mIHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbiBhcmUgdWx0aW1hdGVseSB3cml0dGVuIGJhY2suIEknbSB0aGlua2luZyBJIHNob3VsZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggcmVsYXRlZCB0byB0aGUgZGVzdGluYXRpb24gb3BlcmFuZCwgYW5kIGZpZ3VyZSBvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoaW4gdGhlIGVtdWxhdGlvbiBmcmFtZXdvcmssIHdoZXJlIGl0J3MgbW9kaWZpZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIExldCdzIHNlZSBob3cgdGhlIGVtdWxhdGlvbiBoYW5kbGVzIHRoZSBkZXRhaWxzOyBJJ2xsIHNjYW4gZnVydGhlciBkb3duIHRoZSBjb2RlLCB0b3dhcmRzIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgYHg4Nl9lbXVsYXRlX2luc25gIGZ1bmN0aW9uIHRoYXQgbWFuYWdlIG9wZXJhbmQgaW50ZXJhY3Rpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNlbnRyYWwgbG9naWMgZm9yIGRlYWxpbmcgd2l0aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnMuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBjcnVjaWFsIHBoYXNlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDg6MDI6MzguMzk2MzEyMjI3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1MTIwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGViYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9lbXVsYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNjYtLyogZnJlZTogNDMtNDQgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjE2NzojZGVmaW5lIE5vV3JpdGUgICAgICgodTY0KTEgXFx1MDAzY1xcdTAwM2MgNDUpICAvKiBObyB3cml0ZWJhY2sgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE2OC0jZGVmaW5lIFNyY1dyaXRlICAgICgodTY0KTEgXFx1MDAzY1xcdTAwM2MgNDYpICAvKiBXcml0ZSBiYWNrIHNyYyBvcGVyYW5kICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTI0Mz1lbnVtIHJleF9iaXRzIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMjQ5LVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MjUwOnN0YXRpYyB2b2lkIHdyaXRlYmFja19yZWdpc3RlcnMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yNTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz05ODE9c3RhdGljIGludCBlbV9ic2ZfYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk4Mi17XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5ODM6XFx0LyogSWYgc3JjIGlzIHplcm8sIGRvIG5vdCB3cml0ZWJhY2ssIGJ1dCB1cGRhdGUgZmxhZ3MgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk4NC1cXHRpZiAoY3R4dC1cXHUwMDNlc3JjLnZhbCA9PSAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz05ODk9c3RhdGljIGludCBlbV9ic3JfYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk5MC17XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo5OTE6XFx0LyogSWYgc3JjIGlzIHplcm8sIGRvIG5vdCB3cml0ZWJhY2ssIGJ1dCB1cGRhdGUgZmxhZ3MgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTk5Mi1cXHRpZiAoY3R4dC1cXHUwMDNlc3JjLnZhbCA9PSAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0xNzUwPXN0YXRpYyB2b2lkIHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQoc3RydWN0IG9wZXJhbmQgKm9wKVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0xNzU0LVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTc1NTpzdGF0aWMgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wKVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTc1Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3OTItXFx0Y2FzZSBPUF9OT05FOlxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MTc5MzpcXHRcXHQvKiBubyB3cml0ZWJhY2sgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTE3OTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTE4MTI9c3RhdGljIGludCBlbV9wdXNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxMy17XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoxODE0OlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMTgxNS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTIwNDg9aW50IGVtdWxhdGVfaW50X3JlYWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBpcnEpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTIwNTQtXFx0aWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzoyMDU1OlxcdFxcdHdyaXRlYmFja19yZWdpc3RlcnMoY3R4dCk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0yMDU2LVxcdHJldHVybiByYztcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9Mjk4Mz1pbnQgZW11bGF0b3JfdGFza19zd2l0Y2goc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTI5OTctXFx0XFx0Y3R4dC1cXHUwMDNlZWlwID0gY3R4dC1cXHUwMDNlX2VpcDtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjI5OTg6XFx0XFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTI5OTktXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMjYyPXN0YXRpYyBpbnQgZW1fY3Jfd3JpdGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMyNjktXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozMjcwOlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzI3MS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTMyODY9c3RhdGljIGludCBlbV9kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzMwMi1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzMDM6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzA0LVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM2Mz1zdGF0aWMgaW50IGVtX21vdl9zcmVnX3JtKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzcyLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzM3MzpcXHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTMzNzQtXFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zMzgzPXN0YXRpYyBpbnQgZW1fbGxkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzM4Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjMzODc6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zMzg4LVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzM5Nz1zdGF0aWMgaW50IGVtX2x0cihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQwMC1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0MDE6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDAyLVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQwNj1zdGF0aWMgaW50IGVtX2ludmxwZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQxNS1cXHRcXHRjdHh0LVxcdTAwM2VvcHMtXFx1MDAzZWludmxwZyhjdHh0LCBsaW5lYXIpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzQxNjpcXHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0MTctXFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zNDMxPXN0YXRpYyBpbnQgZW1faHlwZXJjYWxsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDM5LVxcdGN0eHQtXFx1MDAzZV9laXAgPSBjdHh0LVxcdTAwM2VlaXA7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNDQwOlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzQ0MS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTM0NDU9c3RhdGljIGludCBlbXVsYXRlX3N0b3JlX2Rlc2NfcHRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDYxLVxcdH1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjM0NjI6XFx0LyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDYzLVxcdGN0eHQtXFx1MDAzZWRzdC50eXBlID0gT1BfTk9ORTtcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM9MzQ3OD1zdGF0aWMgaW50IGVtX2xnZHRfbGlkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgYm9vbCBsZ2R0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNDk3LVxcdFxcdGN0eHQtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X2lkdChjdHh0LCBcXHUwMDI2ZGVzY19wdHIpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6MzQ5ODpcXHQvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTM0OTktXFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz0zNTY0PXN0YXRpYyBpbnQgZW1fb3V0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy0zNTY3LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y3R4dC1cXHUwMDNlc3JjLnZhbCwgMSk7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzozNTY4OlxcdC8qIERpc2FibGUgd3JpdGViYWNrLiAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtMzU2OS1cXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jPTQ2MjU9c3RhdGljIGludCBkZWNvZGVfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IG9wZXJhbmQgKm9wLFxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00Nzc5LVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo0NzgwOlxcdFxcdG9wLVxcdTAwM2V0eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy00NzgxLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01Mjg1PWludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBib29sIGNoZWNrX2ludGVyY2VwdHMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0NTUtXFx0XFx0XFx0Z290byBkb25lO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTQ1NjpcXHRcXHRnb3RvIHdyaXRlYmFjaztcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0NTctXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NDk3LVxcdFxcdHJjID0gam1wX3JlbChjdHh0LCBjdHh0LVxcdTAwM2VzcmMudmFsKTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU0OTg6XFx0XFx0Y3R4dC1cXHUwMDNlZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU0OTktXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MjUtXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTI2OndyaXRlYmFjazpcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MjctXFx0aWYgKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBTcmNXcml0ZSkge1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUyOC1cXHRcXHRCVUdfT04oY3R4dC1cXHUwMDNlc3JjLnR5cGUgPT0gT1BfTUVNIHx8IGN0eHQtXFx1MDAzZXNyYy50eXBlID09IE9QX01FTV9TVFIpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTUyOTpcXHRcXHRyYyA9IHdyaXRlYmFjayhjdHh0LCBcXHUwMDI2Y3R4dC1cXHUwMDNlc3JjKTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MzAtXFx0XFx0aWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1MzMtXFx0aWYgKCEoY3R4dC1cXHUwMDNlZCBcXHUwMDI2IE5vV3JpdGUpKSB7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYzo1NTM0OlxcdFxcdHJjID0gd3JpdGViYWNrKGN0eHQsIFxcdTAwMjZjdHh0LVxcdTAwM2Vkc3QpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTUzNS1cXHRcXHRpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSlcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3Mi1cXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VtZW1fcmVhZC5lbmQgPSAwO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTU3MzpcXHRcXHRcXHRcXHR3cml0ZWJhY2tfcmVnaXN0ZXJzKGN0eHQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU3NC1cXHRcXHRcXHRcXHRyZXR1cm4gRU1VTEFUSU9OX1JFU1RBUlQ7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTc1LVxcdFxcdFxcdH1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU1NzY6XFx0XFx0XFx0Z290byBkb25lOyAvKiBza2lwIHJpcCB3cml0ZWJhY2sgKi9cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU1NzctXFx0XFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NTk0LVxcdGlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTU5NTpcXHRcXHR3cml0ZWJhY2tfcmVnaXN0ZXJzKGN0eHQpO1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTU5Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYxOC1cXHRcXHRlbHNlIGlmIChjdHh0LVxcdTAwM2VvcF9ieXRlcyAhPSA0KVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmM6NTYxOTpcXHRcXHRcXHRjdHh0LVxcdTAwM2Vkc3QudHlwZSA9IE9QX05PTkU7IC8qIG5vIHdyaXRlYmFjayAqL1xcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTYyMC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTY0Ni1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NDc6XFx0Z290byB3cml0ZWJhY2s7XFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NjQ4LVxcbi0tXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYz01NjUzPXZvaWQgZW11bGF0b3JfaW52YWxpZGF0ZV9yZWdpc3Rlcl9jYWNoZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS9lbXVsYXRlLmMtNTY1Ny1cXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NTg6dm9pZCBlbXVsYXRvcl93cml0ZWJhY2tfcmVnaXN0ZXJfY2FjaGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL2VtdWxhdGUuYy01NjU5LXtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jOjU2NjA6XFx0d3JpdGViYWNrX3JlZ2lzdGVycyhjdHh0KTtcXG5hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jLTU2NjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwODowMjozOC41Mjc4Mjk2NTVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkzMjE4MDc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgV3JpdGViYWNrIEZ1bmN0aW9uIGluIGBhcmNoL3g4Ni9rdm0vZW11bGF0ZS5jYCoqXG5cbkFscmlnaHQsIG15IGZvY3VzIGlzIG5vdyBvbiB0aGF0IHdyaXRlYmFjayBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGF0IGxpbmUgMTc1NSB3aXRoaW4gYGFyY2gveDg2L2t2bS9lbXVsYXRlLmNgLiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBoeXBlcnZpc29yIGlzIGhhbmRsaW5nIHdyaXRlYmFja3MgZm9yIGVtdWxhdGVkIGRldmljZXMgb3Igb3BlcmF0aW9ucyBvbiB4ODYuIE15IHVuZGVyc3RhbmRpbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgdGhlIGNvcnJlY3RuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyB3cml0dGVuLCB3aGVyZSBpdCdzIGJlaW5nIHdyaXR0ZW4gdG8sIGFuZCB0aGUgbG9naWMgZ292ZXJuaW5nIHRoYXQgd3JpdGUgcHJvY2Vzcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgcG90ZW50aWFsIGFyZWFzIHdoZXJlIGEgYnVnIGNvdWxkIHJlYXIgaXRzIGhlYWQuIFRoaXMgaXMgdGhlIGJlZHJvY2sgZm9yIHRoZSBlbXVsYXRvciwgc28gaXQncyBjcml0aWNhbCB0byBnZXQgdGhpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG5haWxlZCBkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY0MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjQxLjQ2MDA0NDg0MloiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2VtdWxhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzU1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzU1OlxcdHN0YXRpYyBpbnQgd3JpdGViYWNrKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3Qgb3BlcmFuZCAqb3ApXFxuMTc1NjpcXHR7XFxuMTc1NzpcXHRcXHRzd2l0Y2ggKG9wLVxcdTAwM2V0eXBlKSB7XFxuMTc1ODpcXHRcXHRjYXNlIE9QX1JFRzpcXG4xNzU5OlxcdFxcdFxcdHdyaXRlX3JlZ2lzdGVyX29wZXJhbmQob3ApO1xcbjE3NjA6XFx0XFx0XFx0YnJlYWs7XFxuMTc2MTpcXHRcXHRjYXNlIE9QX01FTTpcXG4xNzYyOlxcdFxcdFxcdGlmIChjdHh0LVxcdTAwM2Vsb2NrX3ByZWZpeClcXG4xNzYzOlxcdFxcdFxcdFxcdHJldHVybiBzZWdtZW50ZWRfY21weGNoZyhjdHh0LFxcbjE3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG9wLVxcdTAwM2VhZGRyLm1lbSxcXG4xNzY1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3AtXFx1MDAzZW9yaWdfdmFsLFxcbjE3NjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZvcC1cXHUwMDNldmFsLFxcbjE3Njc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG9wLVxcdTAwM2VieXRlcyk7XFxuMTc2ODpcXHRcXHRcXHRlbHNlXFxuMTc2OTpcXHRcXHRcXHRcXHRyZXR1cm4gc2VnbWVudGVkX3dyaXRlKGN0eHQsXFxuMTc3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgb3AtXFx1MDAzZWFkZHIubWVtLFxcbjE3NzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZvcC1cXHUwMDNldmFsLFxcbjE3NzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wLVxcdTAwM2VieXRlcyk7XFxuMTc3MzpcXHRcXHRjYXNlIE9QX01FTV9TVFI6XFxuMTc3NDpcXHRcXHRcXHRyZXR1cm4gc2VnbWVudGVkX3dyaXRlKGN0eHQsXFxuMTc3NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgb3AtXFx1MDAzZWFkZHIubWVtLFxcbjE3NzY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wLVxcdTAwM2VkYXRhLFxcbjE3Nzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG9wLVxcdTAwM2VieXRlcyAqIG9wLVxcdTAwM2Vjb3VudCk7XFxuMTc3ODpcXHRcXHRjYXNlIE9QX1hNTTpcXG4xNzc5OlxcdFxcdFxcdGlmICghKGN0eHQtXFx1MDAzZWQgXFx1MDAyNiBBdngpKSB7XFxuMTc4MDpcXHRcXHRcXHRcXHRrdm1fd3JpdGVfc3NlX3JlZyhvcC1cXHUwMDNlYWRkci54bW0sIFxcdTAwMjZvcC1cXHUwMDNldmVjX3ZhbCk7XFxuMTc4MTpcXHRcXHRcXHRcXHRicmVhaztcXG4xNzgyOlxcdFxcdFxcdH1cXG4xNzgzOlxcdFxcdFxcdC8qIGZ1bGwgWU1NIHdyaXRlIGJ1dCB3aXRoIGhpZ2ggYnl0ZXMgY2xlYXJlZCAqL1xcbjE3ODQ6XFx0XFx0XFx0bWVtc2V0KG9wLVxcdTAwM2V2YWxwdHIgKyAxNiwgMCwgMTYpO1xcbjE3ODU6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTc4NjpcXHRcXHRjYXNlIE9QX1lNTTpcXG4xNzg3OlxcdFxcdFxcdGt2bV93cml0ZV9hdnhfcmVnKG9wLVxcdTAwM2VhZGRyLnhtbSwgXFx1MDAyNm9wLVxcdTAwM2V2ZWNfdmFsMik7XFxuMTc4ODpcXHRcXHRcXHRicmVhaztcXG4xNzg5OlxcdFxcdGNhc2UgT1BfTU06XFxuMTc5MDpcXHRcXHRcXHRrdm1fd3JpdGVfbW14X3JlZyhvcC1cXHUwMDNlYWRkci5tbSwgXFx1MDAyNm9wLVxcdTAwM2VtbV92YWwpO1xcbjE3OTE6XFx0XFx0XFx0YnJlYWs7XFxuMTc5MjpcXHRcXHRjYXNlIE9QX05PTkU6XFxuMTc5MzpcXHRcXHRcXHQvKiBubyB3cml0ZWJhY2sgKi9cXG4xNzk0OlxcdFxcdFxcdGJyZWFrO1xcbjE3OTU6XFx0XFx0ZGVmYXVsdDpcXG4xNzk2OlxcdFxcdFxcdGJyZWFrO1xcbjE3OTc6XFx0XFx0fVxcbjE3OTg6XFx0XFx0cmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7XFxuMTc5OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjQxLjQ2MDUxNjExMloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTkxODY2MDIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIGNtcHhjaGcxNmIgRW11bGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIDEyOC1iaXQgY29tcGFyZS1hbmQtZXhjaGFuZ2UgKGNtcHhjaGcxNmIpIHN1cHBvcnQsIHNwZWNpZmljYWxseSBmb3IgdXNlci1zcGFjZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgS1ZNIGVtdWxhdG9yLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gd291bGQgY2F0Y2gsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGlubGluZSBhc3NlbWJseSBpbnZvbHZlZC5cblxuTXkgYW5hbHlzaXMgc3RhcnRlZCBieSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cuIFdlJ3ZlIGdvdCBgc2VnbWVudGVkX2NtcHhjaGdgIHVzaW5nIGEgYHN0cnVjdCBvcGVyYW5kYCB3aGljaCBjb250YWlucyB1bmlvbnMgZm9yIHZhcmlvdXMgdmFsdWUgc2l6ZXMgKDgsIDE2LCAzMiBieXRlcyBhbmQgdmVjdG9yIHJlZ2lzdGVycykuIENyaXRpY2FsbHksIGZvciAxNi1ieXRlIG9wZXJhdGlvbnMsIGBvcmlnX3ZhbDEyOGAgaXMgaW5pdGlhbGl6ZWQsIHBvdGVudGlhbGx5IHdpdGggYSB1c2VyIG1lbW9yeSBjb3B5IGZyb20gdGhlIGd1ZXN0LiBUaGUgaW5saW5lIGFzc2VtYmx5IGluIGBfX3RyeV9jbXB4Y2hnMTI4X3VzZXJfYXNtYCBoYW5kbGVzIHRoZSBhY3R1YWwgYXRvbWljIG9wZXJhdGlvbi4gVGhlIGltcG9ydGFudCB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgdmFsdWUgKGBfb2xkYCksIHRoZSBuZXcgdmFsdWUgKGBfbmV3YCksIGFuZCB0aGUgbWVtb3J5IGFkZHJlc3MgKGBfcHRyYCkgYXJlIGFsbCBleHBsaWNpdGx5IHBhc3NlZC5cblxuTm93LCBjaGVja2luZyB0aGUgYXNzZW1ibHkgaXRzZWxmLCB3aGV0aGVyIHdpdGggb3Igd2l0aG91dCB0aWVkIG91dHB1dCwgdGhlcmUgYXJlbid0IGFueSBvYnZpb3VzIHJlZCBmbGFncyBmb3IgS01TQU4uIFRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIGFzc2VtYmx5IGlzIGV4ZWN1dGVkLiBUaGUgdmFsdWVzIGFyZSByZWFkIGludG8gcmVnaXN0ZXJzIGFuZCwgY3J1Y2lhbGx5LCB3cml0dGVuIGJhY2sgdXNpbmcgdGhlIGF0b21pYyBgY21weGNoZzE2YmAgaW5zdHJ1Y3Rpb24uIFRoZXJlJ3Mgbm8gY3JlYXRpb24gb2YgbmV3IG1lbW9yeSByZWdpb25zLCBubyBwYXNzaW5nIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEsIGp1c3QgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBleGlzdGluZywgZXhwbGljaXRseS1tYW5hZ2VkIHZhbHVlcyB3aXRoaW4gZ3Vlc3QgbWVtb3J5LlxuXG5Mb29raW5nIGF0IHRoZSBlbXVsYXRpb24gbG9naWMgaW4gYGt2bS9lbXVsYXRlLmNgLCBgZW1fY21weGNoZzhiXzE2YmAgaGFuZGxlcyB0aGUgZW11bGF0aW9uLiBgY3R4dC1cdTAwM2Vkc3Qub3JpZ192YWwxMjhgIGhvbGRzIHRoZSBvcmlnaW5hbCB2YWx1ZSwgcmVhZCB2aWEgYHNlZ21lbnRlZF9yZWFkYC4gVXBvbiBjb21wYXJlLCBgY3R4dC1cdTAwM2Vkc3QudmFsMTI4YCBpcyB1cGRhdGVkLiBCb3RoIGBvcmlnX3ZhbDEyOGAgYW5kIGB2YWwxMjhgIGFyZSBpbml0aWFsaXplZCBieSByZWFkcyBvZiBndWVzdCBtZW1vcnkgb3IgcmVnaXN0ZXIgdmFsdWVzLiBBbmQgYHg4Nl9lbXVsYXRlX2luc25gIGp1c3QgY29waWVzIHRoZW0uIEFsbCBvcGVyYXRpb25zIHNlZW0gdG8gaW52b2x2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHZhbHVlcy5cblxuRmluYWxseSwgYGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWRgIGNhbGxzIGBlbXVsYXRvcl90cnlfY21weGNoZ191c2VyYCBmb3IgdGhlIDEyOC1iaXQgY2FzZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwbGllZCBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgKGBvbGRgIGFuZCBgbmV3YCkgYW5kIHRoZSB0YXJnZXQgbWVtb3J5IGFkZHJlc3MuIE5vdGhpbmcgaW5kaWNhdGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZCBvciBhbiBpbmZvcm1hdGlvbiBsZWFrIHRvIHVzZXIgc3BhY2UuXG5cbkFmdGVyIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlIGNvZGUsIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2RlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgbWlnaHQgYmUgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBkZWNvZGluZywgbG9jayBwcmVmaXggdXNhZ2UsIGJvdW5kYXJ5IGFsaWdubWVudCwgb3IgcmVnaXN0ZXIgd3JpdGVzLiBUaGVzZSBhcmUgc3RhbmRhcmQgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBmb3IgZW11bGF0aW9uIGFuZCB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBsb2NrZGVwKSBhbmQgYXJlIG91dHNpZGUgS01TQU4ncyBwdXJ2aWV3LiBJJ20gY29udmluY2VkIHRoYXQgdGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgS01TQU4tcmVsZXZhbnQgcmlzay5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NTYsIk91dHB1dFRva2VucyI6NDAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA4OjAyOjUzLjM3OTE4MDc2OFoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxcbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxcbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciAxMjgtYml0IHVzZXIgc3BhY2UgY29tcGFyZS1hbmQtc3dhcCAoX190cnlfY21weGNoZzEyOF91c2VyX2FzbSB1c2luZyBjbXB4Y2hnMTZiKSBhbmQgYWRkcyBDTVBYQ0hHMTZCIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiB0aGUgS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRvci5cXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgX190cnlfY21weGNoZzEyOF91c2VyX2FzbWAgaW5saW5lIGFzc2VtYmx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmhgIHRvIGF0b21pY2FsbHkgY29tcGFyZSBhbmQgc3dhcCAxMjgtYml0IHZhbHVlcyBhdCB1c2VyIGFkZHJlc3Nlcy5cXG4yLiBVcGRhdGluZyBgc3RydWN0IG9wZXJhbmRgIGluIGBhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaGAgdG8gaW5jbHVkZSBgb3JpZ192YWwxMjhgIGFuZCBgdmFsMTI4YCB3aXRoaW4gZXhpc3RpbmcgdW5pb25zLlxcbjMuIFVwZGF0aW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiBpbiBgYXJjaC94ODYva3ZtL2VtdWxhdGUuY2AgYW5kIGBhcmNoL3g4Ni9rdm0veDg2LmNgIHRvIHJlYWQgZ3Vlc3QgbWVtb3J5LCBjb21wYXJlIGFnYWluc3QgUkRYOlJBWCwgdXBkYXRlIFJDWDpSQlggaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9yIHdyaXRlIG9sZCB2YWx1ZXMgdG8gcmVnaXN0ZXJzLCBhbmQgZXhlY3V0ZSB1c2VyLXNwYWNlIGNtcHhjaGcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHVuaW5pdGlhbGl6ZWQgYnJhbmNoaW5nIGxvZ2ljLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxcbi0gQWxsIHZhbHVlcyBvcGVyYXRlZCB1cG9uIChgY3R4dC1cXHUwMDNlZHN0LnZhbDEyOGAsIGBvbGRgLCBgbmV3YCwgZ3Vlc3QgcmVnaXN0ZXIgdmFsdWVzKSBhcmUgZXhwbGljaXRseSBwb3B1bGF0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uLlxcbi0gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBidWZmZXJzIG9yIHN0cnVjdHVyZSBwYWRkaW5ncyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuLSBBbnkgYnVncyBpbiBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIHBhZ2luZywgb3IgcmVnaXN0ZXIgbWFuYWdlbWVudCB3b3VsZCBiZSBmdW5jdGlvbmFsL2xvZ2ljYWwgaXNzdWVzIG9yIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzL0tBU0FOLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[1] Phase: Succeeded StartedAt: 2026-09-08 08:03:05 +0000 UTC FinishedAt: 2026-09-08 08:03:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 08:03:05 +0000 UTC FinishedAt: 2026-09-08 08:03:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2] Phase: Succeeded StartedAt: 2026-09-08 08:03:05 +0000 UTC FinishedAt: 2026-09-08 11:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:03:05 +0000 UTC FinishedAt: 2026-09-08 11:40:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:03:05 +0000 UTC FinishedAt: 2026-09-08 08:03:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:03:05 +0000 UTC FinishedAt: 2026-09-08 08:03:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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-workflowth4vx/series-workflowth4vx-convert-artifact-146787750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:03:15 +0000 UTC FinishedAt: 2026-09-08 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:03:15 +0000 UTC FinishedAt: 2026-09-08 08:19:19 +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:*bc9f9187-1463-4db9-a68e-5d5c2554ec2f,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-workflowth4vx/series-workflowth4vx-convert-artifact-146787750/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": "1807c64f-bcd9-4c01-b94c-9fc7f70479be", "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-workflowth4vx/series-workflowth4vx-build-action-981855804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:03:15 +0000 UTC FinishedAt: 2026-09-08 08:19:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bc9f9187-1463-4db9-a68e-5d5c2554ec2f,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-workflowth4vx/series-workflowth4vx-convert-artifact-146787750/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": "1807c64f-bcd9-4c01-b94c-9fc7f70479be", "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-workflowth4vx/series-workflowth4vx-build-action-981855804/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:19:19 +0000 UTC FinishedAt: 2026-09-08 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:19:19 +0000 UTC FinishedAt: 2026-09-08 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:19:19 +0000 UTC FinishedAt: 2026-09-08 08:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:19:19 +0000 UTC FinishedAt: 2026-09-08 08:19:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-workflowth4vx/series-workflowth4vx-convert-artifact-1686631417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:19:29 +0000 UTC FinishedAt: 2026-09-08 08:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:19:29 +0000 UTC FinishedAt: 2026-09-08 08:21:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1807c64f-bcd9-4c01-b94c-9fc7f70479be,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-workflowth4vx/series-workflowth4vx-build-action-981855804/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-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:21:22 +0000 UTC FinishedAt: 2026-09-08 08:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:21:22 +0000 UTC FinishedAt: 2026-09-08 08:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:21:22 +0000 UTC FinishedAt: 2026-09-08 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:21:22 +0000 UTC FinishedAt: 2026-09-08 08:37:50 +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:*bc9f9187-1463-4db9-a68e-5d5c2554ec2f,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-workflowth4vx/series-workflowth4vx-convert-artifact-1686631417/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": "66115770-548d-445c-b7ce-39447f533bef", "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-workflowth4vx/series-workflowth4vx-build-action-669234645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:21:22 +0000 UTC FinishedAt: 2026-09-08 08:37:40 +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:*bc9f9187-1463-4db9-a68e-5d5c2554ec2f,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-workflowth4vx/series-workflowth4vx-convert-artifact-1686631417/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": "66115770-548d-445c-b7ce-39447f533bef", "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-workflowth4vx/series-workflowth4vx-build-action-669234645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:37:50 +0000 UTC FinishedAt: 2026-09-08 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:37:50 +0000 UTC FinishedAt: 2026-09-08 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:37:50 +0000 UTC FinishedAt: 2026-09-08 08:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:37:50 +0000 UTC FinishedAt: 2026-09-08 08:39:22 +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:*66115770-548d-445c-b7ce-39447f533bef,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-workflowth4vx/series-workflowth4vx-build-action-669234645/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-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 11:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 11:40:55 +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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1807c64f-bcd9-4c01-b94c-9fc7f70479be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66115770-548d-445c-b7ce-39447f533bef,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-workflowth4vx/series-workflowth4vx-build-action-981855804/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-workflowth4vx/series-workflowth4vx-build-action-669234645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 08:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 08:39:37 +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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowth4vx/series-workflowth4vx-convert-artifact-3279413614/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 08:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 08:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:32 +0000 UTC FinishedAt: 2026-09-08 08:39:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:42 +0000 UTC FinishedAt: 2026-09-08 11:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowth4vx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"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":["kvm"],"focus_symbols":["em_cmpxchg8b","emulator_cmpxchg_emulated","x86_emulate_insn","x86_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"45c13f3f9e3bb15fd89ff2864c6f627a3b4b4229","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"13471fa8-c35c-44d2-a0a3-20013775b4e0","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-08 08:39:42 +0000 UTC FinishedAt: 2026-09-08 11:40:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1807c64f-bcd9-4c01-b94c-9fc7f70479be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66115770-548d-445c-b7ce-39447f533bef,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-workflowth4vx/series-workflowth4vx-build-action-981855804/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-workflowth4vx/series-workflowth4vx-build-action-669234645/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-workflowth4vx/series-workflowth4vx-convert-artifact-3279413614/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,}