Name: series-workflowhxpp5 Phase: Succeeded StartedAt: 2026-07-08 04:52:38 +0000 UTC FinishedAt: 2026-07-08 09:08:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[0] Phase: Succeeded StartedAt: 2026-07-08 04:52:38 +0000 UTC FinishedAt: 2026-07-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 04:52:38 +0000 UTC FinishedAt: 2026-07-08 05:07:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b41df707b6d7b7ae6188c6fc37ba81859293cb94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "CPUSETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b41df707b6d7b7ae6188c6fc37ba81859293cb94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "CPUSETS" ], "series_id": "21b57391-cb05-4d67-b2ef-2fd27c53ca67" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gather_surplus_pages", "allowed_mems_nr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYXRoZXJfc3VycGx1c19wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvd2VkX21lbXNfbnImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB0byByZXNwZWN0IG1lbXBvbGljaWVzIGFuZCBjcHVzZXRzLiBJdCBhZGRzIGEgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgd2hlbiBhbGxvY2F0aW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciBkaWZmZXJlbnQgbWVtcG9saWNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzI2ZDc3ZDg5YTZiOTE0ZjMwMGU4NTJlZmUxYThmNmZhMjAyMTljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNTowNjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGYyNGJmNDliZTA0N2UzLi5mNWU2NzhlOTk3MjFlMSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMjI1NSw2ICYjNDM7MjI1NSwyMyBAQCBzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbiYjNDM7e1xuJiM0MztcdGludCBub2RlO1xuJiM0MztcdHVuc2lnbmVkIGludCBuciA9IDA7XG4mIzQzO1x0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4mIzQzO1x0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4mIzQzO1xuJiM0MztcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbiYjNDM7XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4mIzQzO1x0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbiYjNDM7XHRcdFx0bnIgJiM0Mzs9IGFycmF5W25vZGVdO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cbiAgKiBvZiBzaXplICYjMzk7ZGVsdGEmIzM5Oy5cbkBAIC0yMjc3LDcgJiM0MzsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuIFx0XHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbiYjNDM7XHRuZWVkZWQgPSBtYXhfdChsb25nLCAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxuJiM0MztcdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzYz0gMCkge1xuIFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOz0gZGVsdGE7XG4gXHRcdHJldHVybiAwO1xuQEAgLTIzMTEsOCAmIzQzOzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHQgKiBiZWNhdXNlIGVpdGhlciByZXN2X2h1Z2VfcGFnZXMgb3IgZnJlZV9odWdlX3BhZ2VzIG1heSBoYXZlIGNoYW5nZWQuXG4gXHQgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuLVx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpO1xuJiM0MztcdG5lZWRlZCA9IG1heF90KGxvbmcsICgoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpIC0gYWxsb2NhdGVkKSxcbiYjNDM7XHRcdFx0KChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuJiM0MztcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzZSAwKSB7XG4gXHRcdGlmIChhbGxvY19vaylcbiBcdFx0XHRnb3RvIHJldHJ5O1xuQEAgLTQ1MTMsMjMgJiM0Mzs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxuIH1cbiBfX3NldHVwKFwmIzM0O2h1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XCYjMzQ7LCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKTtcbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLXtcbi1cdGludCBub2RlO1xuLVx0dW5zaWduZWQgaW50IG5yID0gMDtcbi1cdG5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrO1xuLVx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4tXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbi1cbi1cdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbi1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbi1cdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4tXHRcdFx0bnIgJiM0Mzs9IGFycmF5W25vZGVdO1xuLVx0fVxuLVxuLVx0cmV0dXJuIG5yO1xuLX1cbi1cbiB2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBzb2Z0LWRpcnR5XG5AQCAtMjYwLDYgJiM0MzsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuJiM0MzskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWFcbiYjNDM7XG4gbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2hcbiBcdENDPVwmIzM0OyQoQ0MpXCYjMzQ7IENGTEFHUz1cJiMzNDskKENGTEFHUylcJiMzNDsgLi9jaGVja19jb25maWcuc2hcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTczN2JlZmNkMDY4Njdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xuQEAgLTAsMCAmIzQzOzEsNDkxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXG4mIzQzOyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xuJiM0MzsgKiBkbyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXMsIGJ1dCByYXRoZXIgZm9jdXMgb24gd2hhdCB0aGUga2VybmVsIGNhblxuJiM0MzsgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xuJiM0MzsgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKVxuJiM0MzsjZGVmaW5lIEhQU0laRV9LQiBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCkgXHUwMDNlXHUwMDNlIDEwXG4mIzQzOyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcJiMzNDtcbiYjNDM7I2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGJpdG1hc2sgKipub2RlbWFza3M7XG4mIzQzO2ludCAqbm9kZWlkcztcbiYjNDM7XG4mIzQzO3B0aHJlYWRfdCAqdGhyZWFkcztcbiYjNDM7c3RydWN0IHRocmVhZF9hcmdzIHtcbiYjNDM7XHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XG4mIzQzO1x0aW50IHRvX3Jlc2VydmU7XG4mIzQzO307XG4mIzQzO3N0cnVjdCB0aHJlYWRfYXJncyAqcGVyX3RocmVhZF9hcmdzO1xuJiM0MztwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuJiM0MztwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztpbnQgd2FrZV9jb25kO1xuJiM0MztcbiYjNDM7Y2hhciAqbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqZ19mcmVlX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKmdfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqbjBfbnJfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4xX25yX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztcbiYjNDM7dW5zaWduZWQgbG9uZyBnX2ZyZWVfaHVnZXBhZ2VzLCBnX25yX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBnX3Jlc3ZfaHVnZXBhZ2VzLCBnX3N1cnBsdXNfaHVnZXBhZ2VzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xuJiM0MztcbiYjNDM7XG4mIzQzOy8qIHNldHVwX3BhdGhzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3RyaW5ncyBmb3IgdGhlIHZhcmlvdXMgaHVnZXRsYiBwYWdlIHN5c2ZzXG4mIzQzOyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX3BhdGhzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLFxuJiM0MztcdFx0XHRcJiMzNDsvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNmdfZnJlZV9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O2ZyZWVfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZnX25yX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtyZXN2X2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7c3VycGx1c19odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4wX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtzdXJwbHVzX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtmcmVlX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjFfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZ2V0X2h1Z2VwYWdlX3N0YXRzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZ2V0X2h1Z2VwYWdlX3N0YXRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZWFkX3N5c2ZzKGdfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19mcmVlX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfcmVzdl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMF9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfZnJlZV9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4xX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlnc1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaHVnZXBhZ2UgY29uZmlncyBzbyB0aGlzXG4mIzQzOyAqIHRlc3Qgc3VpdGUgZG9lc24mIzM5O3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX24xX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBodWdlcGFnZSBjb25maWdzIGJlZm9yZSB0aGlzIHRlc3RcbiYjNDM7ICogd2FzIHJhbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgb3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiByZXNldF9odWdlcGFnZXNcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2V0IHN0YXRpYyBodWdldGxiIHBhZ2UgcmVzZXJ2YXRpb25zIHRvIDAuXG4mIzQzOyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmVzZXRfaHVnZXBhZ2VzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAwKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBjYW5fcnVuXG4mIzQzOyAqXG4mIzQzOyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoZSB0ZXN0IGFzIHJvb3QuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOdW1hIGlzIHVuYXZhaWxhYmxlLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1hX251bV9jb25maWd1cmVkX25vZGVzKCkgXHUwMDNjIDIpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOb3QgZW5vdWdoIG5vZGVzIHRvIHRlc3QuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bWFfbnVtX3Rhc2tfbm9kZXMoKSBcdTAwM2MgMilcbiYjNDM7XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0N1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjbGVhbnVwKGNoYXIgKmVycl9tc2cpXG4mIzQzO3tcbiYjNDM7XHRmcmVlKHBlcl90aHJlYWRfYXJncyk7XG4mIzQzO1x0ZnJlZSh0aHJlYWRzKTtcbiYjNDM7XHRmcmVlKG5vZGVpZHMpO1xuJiM0MztcdGZyZWUobm9kZW1hc2tzKTtcbiYjNDM7XHRmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUoZ19mcmVlX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMF9mcmVlX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjFfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRpZiAoZXJyX21zZylcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhlcnJfbXNnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogc2V0dXBfbm9kZV9pbmZvXG4mIzQzOyAqXG4mIzQzOyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZVxuJiM0MzsgKiByZXNlcnZhdGlvbnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcdGludCBpdGhfbm9kZW1hc2sgPSAwO1xuJiM0MztcbiYjNDM7XHRub2RlaWRzID0gY2FsbG9jKDIsIHNpemVvZihpbnQpKTtcbiYjNDM7XHRub2RlbWFza3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBiaXRtYXNrICopKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpXG4mIzQzO1x0XHRjbGVhbnVwKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBub2RlbWFza3Mgb3Igbm9kZWlkcy5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcbiYjNDM7XHQgKiBpbmRleCBvZiB0aGUgZmlyc3Qgbm9kZSBhdmFpbGFibGUgdG8gdXMsIGFuZCB0aGUgc2Vjb25kIG9mIHRoZSBuZXh0XG4mIzQzO1x0ICogbm9kZSBhdmFpbGFibGUgdG8gdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtYV9udW1fdGFza19ub2RlcygpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG51bWFfYml0bWFza19pc2JpdHNldChudW1hX2dldF9tZW1zX2FsbG93ZWQoKSwgaSkpIHtcbiYjNDM7XHRcdFx0bm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTtcbiYjNDM7XHRcdFx0bm9kZW1hc2tzW2l0aF9ub2RlbWFzayYjNDM7JiM0MztdID0gbnVtYV9iaXRtYXNrX3NldGJpdChcbiYjNDM7XHRcdFx0XHRcdG51bWFfYWxsb2NhdGVfbm9kZW1hc2soKSwgaSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpdGhfbm9kZW1hc2sgIT0gMiB8fCAhbm9kZW1hc2tzWzBdIHx8ICFub2RlbWFza3NbMV0pXG4mIzQzO1x0XHRjbGVhbnVwKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLlwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNldHVwX3RocmVhZHNcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzID0gY2FsbG9jKDIsIHNpemVvZihzdHJ1Y3QgdGhyZWFkX2FyZ3MpKTtcbiYjNDM7XHRpZiAoIXBlcl90aHJlYWRfYXJncylcbiYjNDM7XHRcdGNsZWFudXAoXCYjMzQ7Y2FsbG9jIHRocmVhZCBhcmdzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRocmVhZHMgPSBjYWxsb2MoMiwgc2l6ZW9mKHB0aHJlYWRfdCkpO1xuJiM0MztcdGlmICghdGhyZWFkcylcbiYjNDM7XHRcdGNsZWFudXAoXCYjMzQ7Y2FsbG9jIHRocmVhZHMuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzZXJ2ZV9odWdlcGFnZVxuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXJ2ZSBhIGh1Z2V0bGIgcGFnZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKnJlc2VydmVfaHVnZXBhZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZyAqKSBtbWFwKE5VTEwsIEhQU0laRV9CWVRFUywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRocmVhZF93b3JrXG4mIzQzOyAqXG4mIzQzOyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRocmVhZF9hcmdzICp0X2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzICopIGFyZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nICoqaHVnZXBhZ2VzO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRodWdlcGFnZXMgPSAodW5zaWduZWQgbG9uZyAqKikgY2FsbG9jKHRfYXJncy1cdTAwM2V0b19yZXNlcnZlLFxuJiM0MztcdFx0XHRcdFx0XHRzaXplb2YodW5zaWduZWQgbG9uZyAqKikpO1xuJiM0MztcbiYjNDM7XHQvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqL1xuJiM0MztcdGlmICh0X2FyZ3MtXHUwMDNlbXlfbm9kZW1hc2spXG4mIzQzO1x0XHRudW1hX2JpbmQodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGh1Z2VwYWdlc1tpXSA9IHJlc2VydmVfaHVnZXBhZ2UoKTtcbiYjNDM7XHRcdC8qIFRlc3RzIG1heSBwdXJwb3NlZnVsbHkgdHJ5IHRvIG92ZXJhbGxvY2F0ZSwgc28ganVzdFxuJiM0MztcdFx0ICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0XHR0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZSA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHdoaWxlICghd2FrZV9jb25kKVxuJiM0MztcdFx0cHRocmVhZF9jb25kX3dhaXQoXHUwMDI2Y29uZCwgXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogVHJ5IHRvIGZyZWUgdGhvc2UgaHVnZXRsYiBwYWdlcyAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGtzZnRfcGVycm9yKFwmIzM0O211bm1hcCgpIGZhaWxlZCEgQ2hlY2sgZm9yIGxlYWtlZCBodWdldGxiIHBhZ2VzIVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcdGZyZWUoaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogd2FrZV9jaGlsZHJlblxuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgd2FrZV9jaGlsZHJlbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAxO1xuJiM0MztcdHB0aHJlYWRfY29uZF9icm9hZGNhc3QoXHUwMDI2Y29uZCk7XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2bXV0ZXgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0MVxuJiM0MzsgKlxuJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIGFueXdoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDEodm9pZClcbiYjNDM7e1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0MztcbiYjNDM7XHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAoKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwKSB8fFxuJiM0MztcdFx0XHQgKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSksXG4mIzQzO1x0XHRcdCBcJiMzNDtSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdha2VfY2hpbGRyZW4oKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogdGVzdDJcbiYjNDM7ICpcbiYjNDM7ICogU2FuaXR5IGNoZWNraW5nLCBhdHRlbXB0IHRvIHJlc2VydmUgYSBzdXJwbHVzIGh1Z2V0bGIgcGFnZSB3aXRoXG4mIzQzOyAqIGEgbWVtcG9saWN5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDIodm9pZClcbiYjNDM7e1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcbiYjNDM7XHRcdFx0IFwmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0M1xuJiM0MzsgKlxuJiM0MzsgKiBTZXQgYSBzdGF0aWMgaHVnZXBhZ2UgYW5kIHJlc2VydmUgb2ZmIG5vZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7XG4mIzQzO1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAwO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxuJiM0MztcdFx0XHQgXCYjMzQ7U2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogdGVzdDRcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0MztcbiYjNDM7XHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4mIzQzO1x0XHRcdCBcJiMzNDtSZXNlcnZlIDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogdGVzdDVcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMSBhbmRcbiYjNDM7ICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0NSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbiYjNDM7XHRcdFx0IFwmIzM0O0ludGVudGlvbmFsbHkgb3ZlcmFsbG9jYXRlIGFuZCBmYWlsIGR1ZSB0byBucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBsaW1pdC5cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbig1KTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfcmVxdWlyZW1lbnRzKCk7XG4mIzQzO1x0c2V0dXBfdGhyZWFkcygpO1xuJiM0MztcdHNldHVwX25vZGVfaW5mbygpO1xuJiM0MztcdHNldHVwX3BhdGhzKCk7XG4mIzQzO1x0c2F2ZV9odWdlcGFnZV9jb25maWdzKCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XG4mIzQzO1x0dGVzdDEoKTtcbiYjNDM7XHR0ZXN0MigpO1xuJiM0MztcdHRlc3QzKCk7XG4mIzQzO1x0dGVzdDQoKTtcbiYjNDM7XHR0ZXN0NSgpO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXBhZ2Utdm1lbW1hcFxuIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiLW1hZHZpc2VcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbiYjNDM7Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwmIzM0OyR7SEFWRV9IVUdFUEFHRVN9XCYjMzQ7ID0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4gXHRucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjcyNmQ3N2Q4OWE2YjkxNGYzMDBlODUyZWZlMWE4ZjZmYTIwMjE5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMDU6MDY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmY1ZTY3OGU5OTcyMWUxIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0yMjU1LDYgJiM0MzsyMjU1LDIzIEBAIHN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX3QgZ2ZwKQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaCkKJiM0Mzt7CiYjNDM7CWludCBub2RlOwomIzQzOwl1bnNpZ25lZCBpbnQgbnIgPSAwOwomIzQzOwlub2RlbWFza190ICptYmluZF9ub2RlbWFzazsKJiM0MzsJdW5zaWduZWQgaW50ICphcnJheSA9IGgtJmd0O2ZyZWVfaHVnZV9wYWdlc19ub2RlOwomIzQzOwlnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKJiM0MzsKJiM0MzsJbWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spOwomIzQzOwlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7CiYjNDM7CQlpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSkKJiM0MzsJCQluciAmIzQzOz0gYXJyYXlbbm9kZV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJbmNyZWFzZSB0aGUgaHVnZXRsYiBwb29sIHN1Y2ggdGhhdCBpdCBjYW4gYWNjb21tb2RhdGUgYSByZXNlcnZhdGlvbgogICogb2Ygc2l6ZSAmIzM5O2RlbHRhJiMzOTsuCkBAIC0yMjc3LDcgJiM0MzsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKQogCQlhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtodWdldGxiX2xvY2spOwotCW5lZWRlZCA9IChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzOwomIzQzOwluZWVkZWQgPSBtYXhfdChsb25nLCAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLAomIzQzOwkJCSgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtJmd0O2ZyZWVfaHVnZV9wYWdlcykpOwogCWlmIChuZWVkZWQgJmx0Oz0gMCkgewogCQloLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0Mzs9IGRlbHRhOwogCQlyZXR1cm4gMDsKQEAgLTIzMTEsOCAmIzQzOzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiAJICogYmVjYXVzZSBlaXRoZXIgcmVzdl9odWdlX3BhZ2VzIG9yIGZyZWVfaHVnZV9wYWdlcyBtYXkgaGF2ZSBjaGFuZ2VkLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCW5lZWRlZCA9IChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0KLQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKTsKJiM0MzsJbmVlZGVkID0gbWF4X3QobG9uZywgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCSgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCiYjNDM7CQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKSkpOwogCWlmIChuZWVkZWQgJmd0OyAwKSB7CiAJCWlmIChhbGxvY19vaykKIAkJCWdvdG8gcmV0cnk7CkBAIC00NTEzLDIzICYjNDM7NDUzMiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXAoY2hhciAqcykKIH0KIF9fc2V0dXAoJiMzNDtodWdlcGFnZV9hbGxvY190aHJlYWRzPSYjMzQ7LCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaCkKLXsKLQlpbnQgbm9kZTsKLQl1bnNpZ25lZCBpbnQgbnIgPSAwOwotCW5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrOwotCXVuc2lnbmVkIGludCAqYXJyYXkgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXNfbm9kZTsKLQlnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKLQotCW1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTsKLQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7Ci0JCWlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKQotCQkJbnIgJiM0Mzs9IGFycmF5W25vZGVdOwotCX0KLQotCXJldHVybiBucjsKLX0KLQogdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3QgaHN0YXRlICpoOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBjZDI0NTk2Y2RkMjdlZC4uNDBkZTA5MzhmMzkzN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xMDYsNiAmIzQzOzEwNiw3IEBAIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndWFyZC1yZWdpb25zCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gbWVyZ2UKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZm9saW9fc3BsaXRfcmFjZV90ZXN0CiYjNDM7VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kKIAogaWZuZXEgKCQoQVJDSCksYXJtNjQpCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gc29mdC1kaXJ0eQpAQCAtMjYwLDYgJiM0MzsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgJiM0Mzs9IC1sbnVtYQogCiAkKE9VVFBVVCkvcm1hcDogTERMSUJTICYjNDM7PSAtbG51bWEKIAomIzQzOyQoT1VUUFVUKS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5OiBMRExJQlMgJiM0Mzs9IC1sbnVtYQomIzQzOwogbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2gKIAlDQz0mIzM0OyQoQ0MpJiMzNDsgQ0ZMQUdTPSYjMzQ7JChDRkxBR1MpJiMzNDsgLi9jaGVja19jb25maWcuc2gKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lNzM3YmVmY2QwNjg2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYwpAQCAtMCwwICYjNDM7MSw0OTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeQomIzQzOyAqCiYjNDM7ICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvCiYjNDM7ICogdGhlIHRyYW5zaWVudCBuYXR1cmUgb2YgY3B1c2V0cyBhbmQgbWVtcG9saWNpZXMuIEFzIHN1Y2gsIHRoZXNlIHRlc3RzCiYjNDM7ICogZG8gbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzLCBidXQgcmF0aGVyIGZvY3VzIG9uIHdoYXQgdGhlIGtlcm5lbCBjYW4KJiM0MzsgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0cwomIzQzOyAqIGFuZCBtZW1wb2xpY2llcyB0byBoZWxwIGNoZWNrIGZvciByZWdyZXNzaW9ucyBpbiB0aGlzIGJlaGF2aW9yLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bnVtYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBIUFNJWkVfQllURVMgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpCiYjNDM7I2RlZmluZSBIUFNJWkVfS0IgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpICZndDsmZ3Q7IDEwCiYjNDM7I2RlZmluZSBHTE9CQUxfU1lTX0hQX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzJiMzNDsKJiM0MzsjZGVmaW5lIE5PREVfU1lTX0hQX1BBVEggJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSV1L2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXMmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBiaXRtYXNrICoqbm9kZW1hc2tzOwomIzQzO2ludCAqbm9kZWlkczsKJiM0MzsKJiM0MztwdGhyZWFkX3QgKnRocmVhZHM7CiYjNDM7c3RydWN0IHRocmVhZF9hcmdzIHsKJiM0MzsJc3RydWN0IGJpdG1hc2sgKm15X25vZGVtYXNrOwomIzQzOwlpbnQgdG9fcmVzZXJ2ZTsKJiM0Mzt9OwomIzQzO3N0cnVjdCB0aHJlYWRfYXJncyAqcGVyX3RocmVhZF9hcmdzOwomIzQzO3B0aHJlYWRfY29uZF90IGNvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CiYjNDM7cHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKJiM0MztpbnQgd2FrZV9jb25kOwomIzQzOwomIzQzO2NoYXIgKm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19mcmVlX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKmdfbnJfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19yZXN2X2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKmdfc3VycGx1c19odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMF9mcmVlX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4wX25yX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqbjFfZnJlZV9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMV9ucl9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoOwomIzQzOwomIzQzO3Vuc2lnbmVkIGxvbmcgZ19mcmVlX2h1Z2VwYWdlcywgZ19ucl9odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBnX3Jlc3ZfaHVnZXBhZ2VzLCBnX3N1cnBsdXNfaHVnZXBhZ2VzOwomIzQzO3Vuc2lnbmVkIGxvbmcgbjBfZnJlZV9odWdlcGFnZXMsIG4wX25yX2h1Z2VwYWdlcywgbjBfc3VycGx1c19odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBuMV9mcmVlX2h1Z2VwYWdlcywgbjFfbnJfaHVnZXBhZ2VzLCBuMV9zdXJwbHVzX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXM7CiYjNDM7CiYjNDM7CiYjNDM7Lyogc2V0dXBfcGF0aHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3RyaW5ncyBmb3IgdGhlIHZhcmlvdXMgaHVnZXRsYiBwYWdlIHN5c2ZzCiYjNDM7ICogcGF0aHMuIFRoZSBzdHJpbmdzIGFyZSB1c2VkIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHN5c2ZzIGZpbGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX3BhdGhzKHZvaWQpCiYjNDM7ewomIzQzOwlhc3ByaW50ZigmYW1wO25yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsCiYjNDM7CQkJJiMzNDsvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O2ZyZWVfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfbnJfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtyZXN2X2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7c3VycGx1c19odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7ZnJlZV9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtzdXJwbHVzX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO24xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBnZXRfaHVnZXBhZ2Vfc3RhdHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmcwomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKQomIzQzO3sKJiM0MzsJcmVhZF9zeXNmcyhnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsICZhbXA7Z19mcmVlX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtnX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCAmYW1wO2dfcmVzdl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgJmFtcDtnX3N1cnBsdXNfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24wX2ZyZWVfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtuMF9ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjBfc3VycGx1c19odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjFfZnJlZV9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgJmFtcDtuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlncwomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpcwomIzQzOyAqIHRlc3Qgc3VpdGUgZG9lc24mIzM5O3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2F2ZV9odWdlcGFnZV9jb25maWdzKHZvaWQpCiYjNDM7ewomIzQzOwlyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAmYW1wO29yaWdfbjBfbnJfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtvcmlnX24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgJmFtcDtvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzCiYjNDM7ICoKJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0CiYjNDM7ICogd2FzIHJhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiByZXNldF9odWdlcGFnZXMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLgomIzQzOyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKQomIzQzO3sKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7CiYjNDM7CXdyaXRlX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIDApOwomIzQzOwl3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogY2FuX3J1bgomIzQzOyAqCiYjNDM7ICogRG9lcyBzYW5pdHkgY2hlY2tpbmcgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSB0ZXN0cyBjYW4gZXZlbiBydW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O1BsZWFzZSBydW4gdGhlIHRlc3QgYXMgcm9vdC5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O051bWEgaXMgdW5hdmFpbGFibGUuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChudW1hX251bV9jb25maWd1cmVkX25vZGVzKCkgJmx0OyAyKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtOb3QgZW5vdWdoIG5vZGVzIHRvIHRlc3QuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChudW1hX251bV90YXNrX25vZGVzKCkgJmx0OyAyKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtDdXJyZW50IG1lbXBvbGljeSBpcyB0b28gcmVzdHJpY3RpdmUuXG4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGNsZWFudXAoY2hhciAqZXJyX21zZykKJiM0Mzt7CiYjNDM7CWZyZWUocGVyX3RocmVhZF9hcmdzKTsKJiM0MzsJZnJlZSh0aHJlYWRzKTsKJiM0MzsJZnJlZShub2RlaWRzKTsKJiM0MzsJZnJlZShub2RlbWFza3MpOwomIzQzOwlmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9mcmVlX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWlmIChlcnJfbXNnKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKGVycl9tc2cpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzZXR1cF9ub2RlX2luZm8KJiM0MzsgKgomIzQzOyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZQomIzQzOyAqIHJlc2VydmF0aW9ucy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwlpbnQgaXRoX25vZGVtYXNrID0gMDsKJiM0MzsKJiM0MzsJbm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7CiYjNDM7CW5vZGVtYXNrcyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IGJpdG1hc2sgKikpOwomIzQzOwomIzQzOwlpZiAoIW5vZGVtYXNrcyB8fCAhbm9kZWlkcykKJiM0MzsJCWNsZWFudXAoJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbm9kZW1hc2tzIG9yIG5vZGVpZHMuJiMzNDspOwomIzQzOwomIzQzOwkvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGUKJiM0MzsJICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dAomIzQzOwkgKiBub2RlIGF2YWlsYWJsZSB0byB1cy4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1hX251bV90YXNrX25vZGVzKCk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobnVtYV9iaXRtYXNrX2lzYml0c2V0KG51bWFfZ2V0X21lbXNfYWxsb3dlZCgpLCBpKSkgewomIzQzOwkJCW5vZGVpZHNbaXRoX25vZGVtYXNrXSA9IGk7CiYjNDM7CQkJbm9kZW1hc2tzW2l0aF9ub2RlbWFzayYjNDM7JiM0MztdID0gbnVtYV9iaXRtYXNrX3NldGJpdCgKJiM0MzsJCQkJCW51bWFfYWxsb2NhdGVfbm9kZW1hc2soKSwgaSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSkKJiM0MzsJCWNsZWFudXAoJiMzNDtGYWlsZWQgdG8gY3JlYXRlIG5vZGVtYXNrcy4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHNldHVwX3RocmVhZHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzZXR1cCBzcGFjZSBmb3IgdGhyZWFkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXR1cF90aHJlYWRzKHZvaWQpCiYjNDM7ewomIzQzOwlwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfYXJncykpOwomIzQzOwlpZiAoIXBlcl90aHJlYWRfYXJncykKJiM0MzsJCWNsZWFudXAoJiMzNDtjYWxsb2MgdGhyZWFkIGFyZ3MuJiMzNDspOwomIzQzOwomIzQzOwl0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTsKJiM0MzsJaWYgKCF0aHJlYWRzKQomIzQzOwkJY2xlYW51cCgmIzM0O2NhbGxvYyB0aHJlYWRzLiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVzZXJ2ZV9odWdlcGFnZQomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2VydmUgYSBodWdldGxiIHBhZ2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZV9odWdlcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nICopIG1tYXAoTlVMTCwgSFBTSVpFX0JZVEVTLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGhyZWFkX3dvcmsKJiM0MzsgKgomIzQzOyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgKnRocmVhZF93b3JrKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aHJlYWRfYXJncyAqdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyAqKSBhcmc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlodWdlcGFnZXMgPSAodW5zaWduZWQgbG9uZyAqKikgY2FsbG9jKHRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZSwKJiM0MzsJCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyAqKikpOwomIzQzOwomIzQzOwkvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqLwomIzQzOwlpZiAodF9hcmdzLSZndDtteV9ub2RlbWFzaykKJiM0MzsJCW51bWFfYmluZCh0X2FyZ3MtJmd0O215X25vZGVtYXNrKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWh1Z2VwYWdlc1tpXSA9IHJlc2VydmVfaHVnZXBhZ2UoKTsKJiM0MzsJCS8qIFRlc3RzIG1heSBwdXJwb3NlZnVsbHkgdHJ5IHRvIG92ZXJhbGxvY2F0ZSwgc28ganVzdAomIzQzOwkJICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0CiYjNDM7CQkgKi8KJiM0MzsJCWlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJCXRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZSA9IGk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi8KJiM0MzsJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwl3aGlsZSAoIXdha2VfY29uZCkKJiM0MzsJCXB0aHJlYWRfY29uZF93YWl0KCZhbXA7Y29uZCwgJmFtcDttdXRleCk7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwomIzQzOwkvKiBUcnkgdG8gZnJlZSB0aG9zZSBodWdldGxiIHBhZ2VzICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0X2FyZ3MtJmd0O3RvX3Jlc2VydmU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobXVubWFwKGh1Z2VwYWdlc1tpXSwgSFBTSVpFX0JZVEVTKSAmbHQ7IDApCiYjNDM7CQkJa3NmdF9wZXJyb3IoJiMzNDttdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwlmcmVlKGh1Z2VwYWdlcyk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiB3YWtlX2NoaWxkcmVuCiYjNDM7ICoKJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHdha2VfY2hpbGRyZW4odm9pZCkKJiM0Mzt7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKJiM0MzsJd2FrZV9jb25kID0gMTsKJiM0MzsJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmYW1wO2NvbmQpOwomIzQzOwlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO211dGV4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDEKJiM0MzsgKgomIzQzOyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2UgYW55d2hlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdDEodm9pZCkKJiM0Mzt7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzOwl3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gTlVMTDsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CiYjNDM7CXVzbGVlcCg1MDAwMDApOwomIzQzOwomIzQzOwlnZXRfaHVnZXBhZ2Vfc3RhdHMoKTsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdCgoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSkgJmFtcDsmYW1wOwomIzQzOwkJCSAoKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwKSB8fAomIzQzOwkJCSAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSwKJiM0MzsJCQkgJiMzNDtSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxuJiMzNDspOwomIzQzOwomIzQzOwl3YWtlX2NoaWxkcmVuKCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTsKJiM0MzsJd2FrZV9jb25kID0gMDsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3QyCiYjNDM7ICoKJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGgKJiM0MzsgKiBhIG1lbXBvbGljeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKQomIzQzO3sKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0MzsKJiM0MzsJZ2V0X2h1Z2VwYWdlX3N0YXRzKCk7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDMKJiM0MzsgKgomIzQzOyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDA7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAxOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzFdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfbnJfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOwomIzQzOwkJCSBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSwKJiM0MzsJCQkgJiMzNDtTZXQgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJd2FrZV9jaGlsZHJlbigpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTsKJiM0MzsJd2FrZV9jb25kID0gMDsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3Q0CiYjNDM7ICoKJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdDQodm9pZCkKJiM0Mzt7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzOwl3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsJd3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzBdKTsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMV0pOwomIzQzOwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0MzsKJiM0MzsJZ2V0X2h1Z2VwYWdlX3N0YXRzKCk7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJd2FrZV9jaGlsZHJlbigpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTsKJiM0MzsJd2FrZV9jb25kID0gMDsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3Q1CiYjNDM7ICoKJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxIGFuZAomIzQzOyAqIGZhaWwgdG8gb3ZlciBhbGxvY2F0ZSBhbm90aGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Q1KHZvaWQpCiYjNDM7ewomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzFdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfbnJfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOwomIzQzOwkJCSBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSwKJiM0MzsJCQkgJiMzNDtJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7CiYjNDM7CXdha2VfY29uZCA9IDA7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJa3NmdF9zZXRfcGxhbig1KTsKJiM0MzsKJiM0MzsJY2hlY2tfcmVxdWlyZW1lbnRzKCk7CiYjNDM7CXNldHVwX3RocmVhZHMoKTsKJiM0MzsJc2V0dXBfbm9kZV9pbmZvKCk7CiYjNDM7CXNldHVwX3BhdGhzKCk7CiYjNDM7CXNhdmVfaHVnZXBhZ2VfY29uZmlncygpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwomIzQzOwl0ZXN0MSgpOwomIzQzOwl0ZXN0MigpOwomIzQzOwl0ZXN0MygpOwomIzQzOwl0ZXN0NCgpOwomIzQzOwl0ZXN0NSgpOwomIzQzOwomIzQzOwlyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTsKJiM0MzsJa3NmdF9maW5pc2hlZCgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggYzE3YjEzM2E4MWQyNDguLmNkMzY4Y2U1OTBhNzRjIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaApAQCAtMjk3LDYgJiM0MzsyOTcsNyBAQCBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2VwYWdlLW1yZW1hcAogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS12bWVtbWFwCiBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZQogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX2RpbwomIzQzO0NBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeQogCiBpZiBbICYjMzQ7JHtIQVZFX0hVR0VQQUdFU30mIzM0OyA9ICYjMzQ7MSYjMzQ7IF07IHRoZW4KIAlucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIFN1cnBsdXMgUGFnZSBHYXRoZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYSBwcmV0dHkgY3JpdGljYWwgcGFydCBvZiB0aGUgaHVnZXBhZ2VzIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gaG93IHN1cnBsdXMgaHVnZSBwYWdlcyBhcmUgZ2F0aGVyZWQsIGFuZCB0aGUga2V5IG1vZGlmaWNhdGlvbiBpbnZvbHZlcyB0aGUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBmdW5jdGlvbi4KCldoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgaXMgdGhpcyBpbmNsdXNpb24gb2YgYGFsbG93ZWRfbWVtc19ucihoKWAgaW4gdGhlIGNhbGN1bGF0aW9ucyBvZiBgbmVlZGVkYC4gRnJvbSB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vdyBpbmNvcnBvcmF0ZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdXJwbHVzLiBJdCBpcyBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGNhbGN1bGF0aW9uIGxvZ2ljIGZyb206CgpgYGBjCi0JbmVlZGVkID0gKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLSZndDtmcmVlX2h1Z2VfcGFnZXM7CiYjNDM7CW5lZWRlZCA9IG1heF90KGxvbmcsIChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSksCiYjNDM7CQkJKChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzKSk7CmBgYAphbmQKYGBgYwotCW5lZWRlZCA9IChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0KLQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKTsKJiM0MzsJbmVlZGVkID0gbWF4X3QobG9uZywgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCSgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCiYjNDM7CQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKSkpOwpgYGAKCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgYWxsb3dlZF9tZW1zX25yKGgpYCBtdXN0IGJlIHNvbWVob3cgY2hlY2tpbmcgdGhlIGN1cnJlbnQgY3B1c2V0IGFuZCBtZW1wb2xpY3kgdG8gcmVmaW5lIHRoZSBzdXJwbHVzIGNhbGN1bGF0aW9uLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0IGFmZmVjdHMgaG93IGh1Z2VwYWdlcyBhcmUgYWxsb3dlZCB0byBiZSBhbGxvY2F0ZWQgYWNyb3NzIG1lbW9yeSBub2Rlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dCBvZiBgYWxsb3dlZF9tZW1zX25yYCB0byB2ZXJpZnkgaXRzIGZ1bmN0aW9uIGhlcmUuCgpPZiBjb3Vyc2UsIHRoZSBjaGFuZ2UgaW4gYG1tL2h1Z2V0bGIuY2AgaXMgYWNjb21wYW5pZWQgYnkgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jYC4gR29vZCwgdGhhdCBtZWFucyB0aGUgZGV2ZWxvcGVycyBhcmUgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGFuZCB0ZXN0aW5nIHRoaXMgbmV3IGJlaGF2aW9yLgoKR2l2ZW4gdGhpcyBpcyBpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzdXJwbHVzIHBhZ2VzLCBJJiMzOTtkIGV4cGVjdCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGF0JiMzOTtzIHRydWUsIGp1c3QgdG8gYmUgc3VyZSwgYnV0IGl0IHNlZW1zIHZlcnkgbGlrZWx5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggbWFrZXMgc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIHJlYWNoYWJsZSwgYW5kIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlncyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yMjU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYi5jLTIyNzgtICovXG5tbS9odWdldGxiLmM6MjI3OTpzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtMjI4MC1cdF9fbXVzdF9ob2xkKFx1MDAyNmh1Z2V0bGJfbG9jaylcbi0tXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtNDY0NS1cdGlmIChkZWx0YSBcdTAwM2UgMCkge1xubW0vaHVnZXRsYi5jOjQ2NDY6XHRcdGlmIChnYXRoZXJfc3VycGx1c19wYWdlcyhoLCBkZWx0YSkgXHUwMDNjIDApXG5tbS9odWdldGxiLmMtNDY0Ny1cdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIENhbGwgQ2hhaW4qKgoKT2theSwgc28gSSBzZWUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBpcyBpbnZva2VkIGJ5IGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHVwd2FyZHMgZ2l2ZXMgbWUgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVyIG9mIGBodWdldGxiX2FjY3RfbWVtb3J5YCBpcyBjcnVjaWFsIHRvIGV2YWx1YXRpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIHRoZSBodWdldGxiIHN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9hY2N0X21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE0OT1BZnRlciBjb25zdWx0aW5nIHRoZSByZXNlcnZhdGlvbiBtYXAgYW5kIHN1YnBvb2wsIHRoZSBudW1iZXIgb2YgbmVlZGVkIG5ld1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTA6cmVzZXJ2YXRpb25zIGlzIGtub3duLiAgVGhlIHJvdXRpbmUgaHVnZXRsYl9hY2N0X21lbW9yeSgpIGlzIGNhbGxlZCB0byBjaGVja1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTE6Zm9yIGFuZCB0YWtlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc2VydmF0aW9ucy4gIGh1Z2V0bGJfYWNjdF9tZW1vcnkoKVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTItY2FsbHMgaW50byByb3V0aW5lcyB0aGF0IHBvdGVudGlhbGx5IGFsbG9jYXRlIGFuZCBhZGp1c3Qgc3VycGx1cyBwYWdlIGNvdW50cy5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMxMD10aGUgbWluX2hwYWdlcyBmaWVsZCBvZiBhIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sLiAgQXQgbW91bnQgdGltZSxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MzExOmh1Z2V0bGJfYWNjdF9tZW1vcnkobWluX2hwYWdlcykgaXMgY2FsbGVkIHRvIHJlc2VydmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2ZcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMzEyLWh1Z2UgcGFnZXMuICBJZiB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQsIHRoZSBtb3VudCBmYWlscy5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTU1OD1pbnRvIGFjY291bnQuICBXaGlsZSBjcHVzZXRzIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZSBhcyBtZW1vcnkgcG9saWN5LCB0aGlzXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjU1OTpjb21tZW50IGluIGh1Z2V0bGJfYWNjdF9tZW1vcnkgc3VtcyB1cCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiByZXNlcnZhdGlvbnNcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTYwLWFuZCBjcHVzZXRzL21lbW9yeSBwb2xpY3k6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTExNj1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTI2OuWcqOWSqOivouS6humihOeVmeaYoOWwhOWSjOWtkOaxoOS5i+WQju+8jOWwseefpemBk+S6humcgOimgeeahOaWsOmihOeVmeaVsOmHj+OAgmh1Z2V0bGJfYWNjdF9tZW1vcnkoKeWHveaVsOiiq+iwg+eUqOS7peajgOafpVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTI3OuW5tuiOt+WPluaJgOimgeaxgueahOmihOeVmeaVsOmHj+OAgmh1Z2V0bGJfYWNjdF9tZW1vcnkoKeiwg+eUqOWIsOWPr+iDveWIhumFjeWSjOiwg+aVtOWJqeS9memhteaVsOeahOWHveaVsOOAgueEtuiAjO+8jOWcqOi/mVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI4LeS6m+WHveaVsOS4re+8jOS7o+eggeWPquaYr+ajgOafpeS7peehruS/neaciei2s+Wkn+eahOepuumXsueahOW3qOmhteadpeWuuee6s+mihOeVmeOAguWmguaenOacieeahOivne+8jOWFqOWxgOmihOeVmeiuoeaVsHJlc3ZfaHVnZV9wYWdlc1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTIyNj1wYWdlLVx1MDAzZXByaXZhdGXlrZfmrrXmjIflkJHkuI7or6XpobXnm7jlhbPnmoTku7vkvZXlrZDmsaDjgILlpoLmnpxQYWdlUHJpdmF0Zeagh+W/l+iiq+iuvue9ru+8jOWug+ihqOaYjuWFqOWxgOmihOeVmeiuoeaVsFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0NC3lpoLmnpzmjIflrprkuobov5nkuKrpgInpobnvvIzkuI5taW5fc2l6ZeebuOWvueW6lOeahOW3qOmhteeahOaVsOmHj+Wwhuiiq+mihOeVmee7meaWh+S7tuezu+e7n+S9v+eUqOOAgui/meS4quaVsOWtl+WcqOe7k+aehOS9k1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ1Omh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lbW9yeShtaW5faHBhZ2VzKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ2Leiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMzMT1yZWdpb25fY291bnQoKeWcqOino+mZpOengeacieW3qOmhteaYoOWwhOaXtuiiq+iwg+eUqOOAguWcqOengeacieaYoOWwhOS4re+8jOmihOeVmeaYoOWwhOS4reayoeacieadoeebruihqOaYjuWtmOWcqOS4gOS4qumihOeVmeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMC3lnKjkuIDmrrXml7bpl7TlkI7liqDlhaXnmoTjgILlvZPpooTnlZnooqvmt7vliqDml7bvvIzmsqHmnInlsJ3or5XlsIblhoXlrZjnrZbnlaXogIPomZHlnKjlhoXjgILomb3nhLZjcHVzZXRz5LiO5YaF5a2Y562W55Wl5LiNXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo0MTE65a6M5YWo55u45ZCM77yM5L2GaHVnZXRsYl9hY2N0X21lbW9yeeS4reeahOi/meS4quazqOmHiuaAu+e7k+S6humihOeVmeWSjGNwdXNldHMv5YaF5a2Y562W55Wl5LmL6Ze055qE55u45LqS5L2cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC00MTIt55SoOjpcbi0tXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYi5jLTExNi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbm1tL2h1Z2V0bGIuYy0xMTgtc3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9odWdldGxiLmM9MTM2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi0tXG5tbS9odWdldGxiLmMtMTQ1LVx0XHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbm1tL2h1Z2V0bGIuYzoxNDY6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cdTAwM2Voc3RhdGUsXG5tbS9odWdldGxiLmMtMTQ3LVx0XHRcdFx0XHRcdC1zcG9vbC1cdTAwM2VtaW5faHBhZ2VzKTtcbi0tXG5tbS9odWdldGxiLmM9MTUyPXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXG4tLVxubW0vaHVnZXRsYi5jLTE2Ni1cbm1tL2h1Z2V0bGIuYzoxNjc6XHRpZiAobWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xubW0vaHVnZXRsYi5jLTE2OC1cdFx0a2ZyZWUoc3Bvb2wpO1xuLS1cbm1tL2h1Z2V0bGIuYz05NTg9dm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL2h1Z2V0bGIuYy05NjctXG5tbS9odWdldGxiLmM6OTY4Olx0XHRpZiAoIWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgMSkpXG5tbS9odWdldGxiLmMtOTY5LVx0XHRcdHJlc2VydmVkID0gdHJ1ZTtcbi0tXG5tbS9odWdldGxiLmM9Mjg5MT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTMwMTYtXHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYzozMDE3Olx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xubW0vaHVnZXRsYi5jLTMwMTgtXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLS1cbm1tL2h1Z2V0bGIuYy0zMDUyLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYzozMDUzOlx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtMzA1NC1cdH1cbi0tXG5tbS9odWdldGxiLmM9NDYwND11bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbi0tXG5tbS9odWdldGxiLmMtNDYxMy1cbm1tL2h1Z2V0bGIuYzo0NjE0OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxubW0vaHVnZXRsYi5jLTQ2MTUte1xuLS1cbm1tL2h1Z2V0bGIuYz00NzA0PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTQ3MjgtXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHJlc2VydmUpO1xubW0vaHVnZXRsYi5jOjQ3Mjk6XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy00NzMwLVx0fVxuLS1cbm1tL2h1Z2V0bGIuYz02NTU2PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY2NDQtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2NjQ1Olx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNjY0Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubW0vaHVnZXRsYi5jLTY2NjMtXHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG5tbS9odWdldGxiLmM6NjY2NDpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNjY2NS1cdFx0XHRlcnIgPSBhZGQ7XG4tLVxubW0vaHVnZXRsYi5jLTY2ODYtXHRcdFx0XHRcdFx0XHRcdGNoZyAtIGFkZCk7XG5tbS9odWdldGxiLmM6NjY4NzpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbm1tL2h1Z2V0bGIuYy02Njg4LVx0XHR9IGVsc2UgaWYgKGhfY2cpIHtcbi0tXG5tbS9odWdldGxiLmMtNjcwOC1cdFx0ICovXG5tbS9odWdldGxiLmM6NjcwOTpcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xubW0vaHVnZXRsYi5jLTY3MTAtXHR9XG4tLVxubW0vaHVnZXRsYi5jPTY3Mzc9bG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcbi0tXG5tbS9odWdldGxiLmMtNjc3Mi1cdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIChjaGcgLSBmcmVlZCkpO1xubW0vaHVnZXRsYi5jOjY3NzM6XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNjc3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCBhbGwgb3ZlciB0aGUgcGxhY2UuIFNlZW1zIGxpa2UgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgbWFwcGluZyB0aG9zZSBodWdldGxiZnMgZmlsZXMgdXNpbmcgYG1tYXBgIHdpdGggaHVnZSBwYWdlcyDigJMgdGhlIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGZ1bmN0aW9uIGlzIGEga2V5IGVudHJ5IHBvaW50IHRoZXJlLiBTcGVjaWZpY2FsbHksIHRoaXMgdGVzdCwgYGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lgLCBpdCYjMzk7cyBkb2luZyBhbiBhbm9ueW1vdXMsIHByaXZhdGUgbWFwcGluZyB3aXRoIGBNQVBfSFVHRVRMQmAsIHdoaWNoLCBhcyBJIHByZWRpY3RlZCwgd2lsbCBjYWxsIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBUaGF0IGluIHR1cm4gY2FsbHMgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIHdoaWNoIHdpbGwgY2FsbCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLiBFeGNlbGxlbnQuIFRoaXMgY29uZmlybXMgbXkgaHlwb3RoZXNpcy4gSSBzdXNwZWN0ZWQgdGhhdCB0aGUgY29kZSBwYXRoIHdhcyByZWFjaGFibGUsIGFuZCBub3cgSSYjMzk7dmUgY29uZmlybWVkIGl0LgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBhbGxvd2VkX21lbXNfbnJgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MjI0MT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbi0tXG5tbS9odWdldGxiLmMtMjI1Ny1cbm1tL2h1Z2V0bGIuYzoyMjU4OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtMjI1OS17XG4tLVxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjk2LVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjIyOTc6XHRuZWVkZWQgPSBtYXhfdChsb25nLCAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxubW0vaHVnZXRsYi5jLTIyOTgtXHRcdFx0KChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xuLS1cbm1tL2h1Z2V0bGIuYy0yMzMxLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjIzMzI6XHRuZWVkZWQgPSBtYXhfdChsb25nLCAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXG5tbS9odWdldGxiLmMtMjMzMy1cdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtXG4tLVxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4tLVxubW0vaHVnZXRsYi5jLTQ2NDgtXG5tbS9odWdldGxiLmM6NDY0OTpcdFx0aWYgKGRlbHRhIFx1MDAzZSBhbGxvd2VkX21lbXNfbnIoaCkpIHtcbm1tL2h1Z2V0bGIuYy00NjUwLVx0XHRcdHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhoLCBkZWx0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgRGVlcCBEaXZlIGludG8gSHVnZVRMQiBTdXJwbHVzIFBhZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIG1vdmluZyBgYWxsb3dlZF9tZW1zX25yYCBmdXJ0aGVyIHVwIHRoZSBmaWxlLCBtYWtpbmcgaXQgYWNjZXNzaWJsZSB0byBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLiBBIHNlZW1pbmdseSBtaW5vciBzdHJ1Y3R1cmFsIGNoYW5nZSwgYnV0IGl0JiMzOTtzIHRoZSBtb2RpZmljYXRpb24gd2l0aGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgdGhhdCBJIHJlYWxseSBuZWVkIHRvIGFuYWx5emUuIFRoZSBjb2RlJiMzOTtzIGxvZ2ljIGlzIGJlaW5nIHVwZGF0ZWQgdG8gZmFjdG9yIGluIGBhbGxvd2VkX21lbXNfbnIoaClgIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHZhbHVlIG9mIGBuZWVkZWRgLgoKSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGh1Z2V0bGIgc3Vic3lzdGVtLCB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIGhlcmUuCgpGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSYjMzk7bSB0aGlua2luZyBgSFVHRVRMQl9QQUdFYCBhbmQgYE5VTUFgIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBJIHNob3VsZCBjaGVjayBmb3IgYW55IG90aGVycy4gUmlnaHQsIGBhbGxvd2VkX21lbXNfbnJgIHV0aWxpemVzIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLiBUaGF0JiMzOTtzIHBvaW50aW5nIG1lIGRpcmVjdGx5IHRvd2FyZCBgQ1BVU0VUU2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdWJzeXN0ZW1zLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb3dlZF9tZW1zX25yYCBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY3B1c2V0Lmg9ODM9ZXh0ZXJuIG5vZGVtYXNrX3QgY3B1c2V0X21lbXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDo4NDojZGVmaW5lIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCAoY3VycmVudC1cdTAwM2VtZW1zX2FsbG93ZWQpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTg1LXZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMTk9c3RhdGljIGlubGluZSBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjIzLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyMjQ6I2RlZmluZSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjI1LXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCh2b2lkKSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzQ4ND1zdGF0aWMgdm9pZCB0YXNrX251bWFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1MTUtXHQgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MzUxNjpcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgbm9kZXNfd2VpZ2h0KGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkgPT0gMSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzozNTE3Olx0XHR0cmFjZV9zY2hlZF9za2lwX2NwdXNldF9udW1hKGN1cnJlbnQsIFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1MTgtXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiLmM9MjI1OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjY2LVx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xubW0vaHVnZXRsYi5jOjIyNjc6XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG5tbS9odWdldGxiLmMtMjI2OC1cdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4tLVxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjkxLVx0aWYgKG1iaW5kX25vZGVtYXNrKVxubW0vaHVnZXRsYi5jOjIyOTI6XHRcdG5vZGVzX2FuZChhbGxvY19ub2RlbWFzaywgKm1iaW5kX25vZGVtYXNrLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xubW0vaHVnZXRsYi5jLTIyOTMtXHRlbHNlXG5tbS9odWdldGxiLmM6MjI5NDpcdFx0YWxsb2Nfbm9kZW1hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG5tbS9odWdldGxiLmMtMjI5NS1cbi0tXG5tbS9tZW1wb2xpY3kuYz00MDQ9c3RhdGljIGludCBtcG9sX3NldF9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsXG4tLVxubW0vbWVtcG9saWN5LmMtNDE4LVx0bm9kZXNfYW5kKG5zYy1cdTAwM2VtYXNrMSxcbm1tL21lbXBvbGljeS5jOjQxOTpcdFx0ICBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5tbS9tZW1wb2xpY3kuYy00MjAtXG4tLVxubW0vbWVtcG9saWN5LmMtNDMwLVx0ZWxzZVxubW0vbWVtcG9saWN5LmM6NDMxOlx0XHRwb2wtXHUwMDNldy5jcHVzZXRfbWVtc19hbGxvd2VkID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xubW0vbWVtcG9saWN5LmMtNDMyLVxuLS1cbm1tL21lbXBvbGljeS5jPTExNDc9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTE2My1cdFx0dGFza19sb2NrKGN1cnJlbnQpO1xubW0vbWVtcG9saWN5LmM6MTE2NDpcdFx0Km5tYXNrICA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbm1tL21lbXBvbGljeS5jLTExNjUtXHRcdHRhc2tfdW5sb2NrKGN1cnJlbnQpO1xuLS1cbm1tL29vbV9raWxsLmM9MjQ5PXN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy0yOTgtXHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzO1xubW0vb29tX2tpbGwuYzoyOTk6XHRcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZClcbm1tL29vbV9raWxsLmMtMzAwLVx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgJiM0Mzs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Njg3PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ny1cdFx0XHRcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4LFxubW0vcGFnZV9hbGxvYy5jOjQ3Njg6XHRcdFx0XHRcdFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XG5tbS9wYWdlX2FsbG9jLmMtNDc2OS1cdFx0aWYgKCF6b25lbGlzdF96b25lKHopKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00OTczPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5ODktXHRcdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2ICFhYy1cdTAwM2Vub2RlbWFzaylcbm1tL3BhZ2VfYWxsb2MuYzo0OTkwOlx0XHRcdGFjLVx1MDAzZW5vZGVtYXNrID0gXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xubW0vcGFnZV9hbGxvYy5jLTQ5OTEtXHRcdGVsc2Vcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTE5MD1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjM0LVx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcbm1tL3BhZ2VfYWxsb2MuYzo1MjM1Olx0ICogXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIHRvIG9wdGltaXplIHRoZSBmYXN0LXBhdGggYXR0ZW1wdC5cbm1tL3BhZ2VfYWxsb2MuYy01MjM2LVx0ICovXG4tLVxubW0vc2hvd19tZW0uYz0xMTk9c3RhdGljIGJvb2wgc2hvd19tZW1fbm9kZV9za2lwKHVuc2lnbmVkIGludCBmbGFncywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vc2hvd19tZW0uYy0xMjktXHRpZiAoIW5vZGVtYXNrKVxubW0vc2hvd19tZW0uYzoxMzA6XHRcdG5vZGVtYXNrID0gXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xubW0vc2hvd19tZW0uYy0xMzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzM3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYEhVR0VUTEJfUEFHRWAgYW5kIGBOVU1BYCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBleGFtaW5pbmcgYEhVR0VUTEJfUEFHRWAgYW5kIGBOVU1BYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGJldHdlZW4gdGhlc2UgdHdvPyYjMzQ7IFBlcmhhcHMgdGhleSYjMzk7cmUgaW50ZXJkZXBlbmRlbnQsIG9yIG1heWJlIHRoZXkmIzM5O3JlIG9ydGhvZ29uYWwgZmVhdHVyZXMgdGhhdCBpbnRlcmFjdCBpbiBpbnRlcmVzdGluZyB3YXlzLiBTaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBjYWxscyB0aGVtIG91dCwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgaW1wbGljYXRpb25zOiBodWdlIHBhZ2VzIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgTlVNQSBmb3IgbWFuYWdpbmcgbWVtb3J5IGFjY2VzcyBsYXRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB0aGV5IHNwZWNpZnkuIFRoaXMgY291bGQgdGVsbCBhIGdyZWF0IHN0b3J5IGFib3V0IG9wdGltaXphdGlvbiBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgdGhpcyBraW5kIG9mIGFuYWx5c2lzIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2UuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjU1LVxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY1Ny1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRm91bmRhdGlvbjogSHVnZVRMQiBhbmQgSHVnZVRMQkZTKioKCk9rYXksIHNvIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBrZXkuIFRoYXQgZGVmaW5pdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIGBIVUdFVExCRlNgLiBTbywgaWYgSSBuZWVkIHRvIHdvcmsgd2l0aCBodWdlIHBhZ2VzLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSByZWFsbHkgYWZ0ZXIgaXMgYEhVR0VUTEJGU2AuIFRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgc2VlIHdoYXQgYEhVR0VUTEJGU2AgaXMgYWxsIGFib3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NTcKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zOgoKKipBbmFseXppbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgQ1BVIGFmZmluaXR5IGhlcmUuIFRoZSBrZXkgcGxheWVycyBqdW1waW5nIG91dCBhcmUgYEhVR0VUTEJGU2AgYW5kIGBOVU1BYCwgb2J2aW91c2x5LiBCdXQgaG9sZCBvbiwgd2UgY2FuJiMzOTt0IGZvcmdldCBgQ1BVU0VUU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlzIHJlbGV2YW50IHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBDUFVTRVRTYCBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIE5VTUEgYW5kIGh1Z2UgcGFnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVTRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjcwPWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuLS1cbmluaXQvS2NvbmZpZy0xMjg1LVxuaW5pdC9LY29uZmlnOjEyODY6Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMjg3LVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMjk4LVxuaW5pdC9LY29uZmlnOjEyOTk6Y29uZmlnIENQVVNFVFNfVjFcbmluaXQvS2NvbmZpZy0xMzAwLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4NgoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFN1cnBsdXMgTWVtb3J5IFBvbGljeSBUZXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYEhVR0VUTEJGU2AsIGBOVU1BYCwgYW5kIGBDUFVTRVRTYC4gSSByZW1lbWJlciBub3cgdGhhdCBgTlVNQWAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIHRvIGV2ZW4gbWFrZSBzZW5zZSwgYW5kIHRoZSB0ZXN0IGNvZGUgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY2AgZXhwbGljaXRseSB1c2VzIGBudW1hX2F2YWlsYWJsZSgpYC4gSXQmIzM5O3MgY2xlYXJseSB1c2luZyBmdW5jdGlvbnMgbGlrZSBgbnVtYV9iaW5kYCBhbmQgYG51bWFfYml0bWFza19zZXRiaXRgLCBzbyBgTlVNQWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuCgpJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGJ5IGRvdWJsZS1jaGVja2luZyBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYCBpbiBgbW0vaHVnZXRsYi5jYC4gUmlnaHQsIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB1dGlsaXplIGBhbGxvd2VkX21lbXNfbnIoaClgLiBUaGUgdGVzdCBpcyBwcmVjaXNlbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UgaW4gYmVoYXZpb3IuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IFRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGh1Z2V0bGIgbG9naWMgZm9yIGdhdGhlcmluZyBzdXJwbHVzIGh1Z2UgcGFnZXMsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc3VyZSBpdCByZXNwZWN0cyBtZW1wb2xpY2llcyBhbmQgY3B1c2V0cy4gSXQmIzM5O3MgYWRkaW5nIHRoaXMgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIGZ1enppbmcgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHdlIGFsbG9jYXRlIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciB2YXJpb3VzIG1lbXBvbGljaWVzLgoKU28sIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYC4gQW5kIHRoZSBlc3NlbnRpYWwgY29uZmlncyB3ZSBuZWVkIHRvIGhhdmUgZW5hYmxlZCBhcmUgYEhVR0VUTEJGU2AsIGBOVU1BYCwgYW5kIGBDUFVTRVRTYC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBBbmQgSSB0aGluayBgYWxsb3dlZF9tZW1zX25yYCBpcyBhbHNvIHN0YXRpYz8gWWVzLCBpdCBpcy4KCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMwLjk2NzM5ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc4NDYzNjgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIkNQVVNFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiLFxuICAgIFwiYWxsb3dlZF9tZW1zX25yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB0byByZXNwZWN0IG1lbXBvbGljaWVzIGFuZCBjcHVzZXRzLiBJdCBhZGRzIGEgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgd2hlbiBhbGxvY2F0aW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciBkaWZmZXJlbnQgbWVtcG9saWNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMwLjk2NzQwNDc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIyNzg2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNzI2ZDc3ZDg5YTZiOTE0ZjMwMGU4NTJlZmUxYThmNmZhMjAyMTljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDU6MDY6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmY1ZTY3OGU5OTcyMWUxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yMjU1LDYgKzIyNTUsMjMgQEAgc3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbit7XFxuK1xcdGludCBub2RlO1xcbitcXHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xcbitcXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcXG4rXFx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xcbitcXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4rXFxuK1xcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG4rXFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xcbitcXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG4rXFx0XFx0XFx0bnIgKz0gYXJyYXlbbm9kZV07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBucjtcXG4rfVxcbitcXG4gLypcXG4gICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cXG4gICogb2Ygc2l6ZSAnZGVsdGEnLlxcbkBAIC0yMjc3LDcgKzIyOTQsOCBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuIFxcdFxcdGFsbG9jX25vZGVtYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tXFx0bmVlZGVkID0gKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcztcXG4rXFx0bmVlZGVkID0gbWF4X3QobG9uZywgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcXG4rXFx0XFx0XFx0KChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMpKTtcXG4gXFx0aWYgKG5lZWRlZCBcXHUwMDNjPSAwKSB7XFxuIFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArPSBkZWx0YTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTIzMTEsOCArMjMyOSw5IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4gXFx0ICogYmVjYXVzZSBlaXRoZXIgcmVzdl9odWdlX3BhZ2VzIG9yIGZyZWVfaHVnZV9wYWdlcyBtYXkgaGF2ZSBjaGFuZ2VkLlxcbiBcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tXFx0bmVlZGVkID0gKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXFxuLVxcdFxcdFxcdChoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpO1xcbitcXHRuZWVkZWQgPSBtYXhfdChsb25nLCAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXFxuK1xcdFxcdFxcdCgoaC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cXG4rXFx0XFx0XFx0XFx0KGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcyArIGFsbG9jYXRlZCkpKTtcXG4gXFx0aWYgKG5lZWRlZCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0aWYgKGFsbG9jX29rKVxcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbkBAIC00NTEzLDIzICs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxcbiB9XFxuIF9fc2V0dXAoXFxcImh1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XFxcIiwgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cCk7XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbi17XFxuLVxcdGludCBub2RlO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xcbi1cXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcXG4tXFx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4tXFxuLVxcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG4tXFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xcbi1cXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG4tXFx0XFx0XFx0bnIgKz0gYXJyYXlbbm9kZV07XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBucjtcXG4tfVxcbi1cXG4gdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtMTA2LDYgKzEwNiw3IEBAIFRFU1RfR0VOX0ZJTEVTICs9IGd1YXJkLXJlZ2lvbnNcXG4gVEVTVF9HRU5fRklMRVMgKz0gbWVyZ2VcXG4gVEVTVF9HRU5fRklMRVMgKz0gcm1hcFxcbiBURVNUX0dFTl9GSUxFUyArPSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcXG4rVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxcbiBcXG4gaWZuZXEgKCQoQVJDSCksYXJtNjQpXFxuIFRFU1RfR0VOX0ZJTEVTICs9IHNvZnQtZGlydHlcXG5AQCAtMjYwLDYgKzI2MSw4IEBAICQoT1VUUFVUKS9taWdyYXRpb246IExETElCUyArPSAtbG51bWFcXG4gXFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgKz0gLWxudW1hXFxuIFxcbiskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICs9IC1sbnVtYVxcbitcXG4gbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2hcXG4gXFx0Q0M9XFxcIiQoQ0MpXFxcIiBDRkxBR1M9XFxcIiQoQ0ZMQUdTKVxcXCIgLi9jaGVja19jb25maWcuc2hcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3MzdiZWZjZDA2ODY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xcbkBAIC0wLDAgKzEsNDkxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcXG4rICpcXG4rICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXFxuKyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xcbisgKiBkbyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXMsIGJ1dCByYXRoZXIgZm9jdXMgb24gd2hhdCB0aGUga2VybmVsIGNhblxcbisgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xcbisgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cXG4rICovXFxuK1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbnVtYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIEhQU0laRV9CWVRFUyBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKClcXG4rI2RlZmluZSBIUFNJWkVfS0IgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpIFxcdTAwM2VcXHUwMDNlIDEwXFxuKyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFxcXCIvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzXFxcIlxcbisjZGVmaW5lIE5PREVfU1lTX0hQX1BBVEggXFxcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1xcXCJcXG4rXFxuK3N0cnVjdCBiaXRtYXNrICoqbm9kZW1hc2tzO1xcbitpbnQgKm5vZGVpZHM7XFxuK1xcbitwdGhyZWFkX3QgKnRocmVhZHM7XFxuK3N0cnVjdCB0aHJlYWRfYXJncyB7XFxuK1xcdHN0cnVjdCBiaXRtYXNrICpteV9ub2RlbWFzaztcXG4rXFx0aW50IHRvX3Jlc2VydmU7XFxuK307XFxuK3N0cnVjdCB0aHJlYWRfYXJncyAqcGVyX3RocmVhZF9hcmdzO1xcbitwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xcbitwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xcbitpbnQgd2FrZV9jb25kO1xcbitcXG4rY2hhciAqbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqZ19mcmVlX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKmdfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjBfbnJfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4xX25yX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xcbitcXG4rdW5zaWduZWQgbG9uZyBnX2ZyZWVfaHVnZXBhZ2VzLCBnX25yX2h1Z2VwYWdlcztcXG4rdW5zaWduZWQgbG9uZyBnX3Jlc3ZfaHVnZXBhZ2VzLCBnX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcXG4rdW5zaWduZWQgbG9uZyBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xcbitcXG4rXFxuKy8qIHNldHVwX3BhdGhzXFxuKyAqXFxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3RyaW5ncyBmb3IgdGhlIHZhcmlvdXMgaHVnZXRsYiBwYWdlIHN5c2ZzXFxuKyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNldHVwX3BhdGhzKHZvaWQpXFxuK3tcXG4rXFx0YXNwcmludGYoXFx1MDAyNm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsXFxuK1xcdFxcdFxcdFxcXCIvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNmdfZnJlZV9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJmcmVlX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19ucl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNmdfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJyZXN2X2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcInN1cnBsdXNfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJmcmVlX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwic3VycGx1c19odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJzdXJwbHVzX2h1Z2VwYWdlc1xcXCIpO1xcbit9XFxuK1xcbisvKiBnZXRfaHVnZXBhZ2Vfc3RhdHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNpbXBseSBncmFiIGEgYnVuY2ggb2YgdGhlIGh1Z2V0bGIgcGFnZSBtZXRyaWNzIGluIHN5c2ZzXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBnZXRfaHVnZXBhZ2Vfc3RhdHModm9pZClcXG4re1xcbitcXHRyZWFkX3N5c2ZzKGdfZnJlZV9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNmdfZnJlZV9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZnX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2Z19yZXN2X2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm4wX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjFfZnJlZV9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjFfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXMpO1xcbit9XFxuK1xcbisvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3NcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpc1xcbisgKiB0ZXN0IHN1aXRlIGRvZXNuJ3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZClcXG4re1xcbitcXHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2b3JpZ19uMF9ucl9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcXG4rfVxcbitcXG4rLyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXFxuKyAqXFxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBodWdlcGFnZSBjb25maWdzIGJlZm9yZSB0aGlzIHRlc3RcXG4rICogd2FzIHJhbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKVxcbit7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xcbit9XFxuK1xcbisvKiByZXNldF9odWdlcGFnZXNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2V0IHN0YXRpYyBodWdldGxiIHBhZ2UgcmVzZXJ2YXRpb25zIHRvIDAuXFxuKyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVzZXRfaHVnZXBhZ2VzKHZvaWQpXFxuK3tcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7XFxuK1xcdHdyaXRlX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcXG4rfVxcbitcXG4rLyogY2FuX3J1blxcbisgKlxcbisgKiBEb2VzIHNhbml0eSBjaGVja2luZyBmaXJzdCB0byBtYWtlIHN1cmUgdGhlIHRlc3RzIGNhbiBldmVuIHJ1bi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKVxcbit7XFxuK1xcdGlmIChnZXRldWlkKCkgIT0gMClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhlIHRlc3QgYXMgcm9vdC5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOdW1hIGlzIHVuYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFxcdTAwM2MgMilcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk5vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKG51bWFfbnVtX3Rhc2tfbm9kZXMoKSBcXHUwMDNjIDIpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDdXJyZW50IG1lbXBvbGljeSBpcyB0b28gcmVzdHJpY3RpdmUuXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY2xlYW51cChjaGFyICplcnJfbXNnKVxcbit7XFxuK1xcdGZyZWUocGVyX3RocmVhZF9hcmdzKTtcXG4rXFx0ZnJlZSh0aHJlYWRzKTtcXG4rXFx0ZnJlZShub2RlaWRzKTtcXG4rXFx0ZnJlZShub2RlbWFza3MpO1xcbitcXHRmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUoZ19ucl9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMV9mcmVlX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGlmIChlcnJfbXNnKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coZXJyX21zZyk7XFxuK31cXG4rXFxuKy8qIHNldHVwX25vZGVfaW5mb1xcbisgKlxcbisgKiBDcmVhdGVzIHRoZSBiaXRtYXNrcyB1c2VkIHRvIGlzb2xhdGUgdGVzdCBydW5uZXJzIGFuZCB0aGVpciBodWdldGxiIHBhZ2VcXG4rICogcmVzZXJ2YXRpb25zLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfbm9kZV9pbmZvKHZvaWQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcdGludCBpdGhfbm9kZW1hc2sgPSAwO1xcbitcXG4rXFx0bm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7XFxuK1xcdG5vZGVtYXNrcyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IGJpdG1hc2sgKikpO1xcbitcXG4rXFx0aWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpXFxuK1xcdFxcdGNsZWFudXAoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlbWFza3Mgb3Igbm9kZWlkcy5cXFwiKTtcXG4rXFxuK1xcdC8qIFdhbGsgdGhlIG5vZGVzIGF2YWlsYWJsZSB0byB1cy4gQ3JlYXRlIHR3byBiaXRtYXNrcywgb25lIG9mIHRoZVxcbitcXHQgKiBpbmRleCBvZiB0aGUgZmlyc3Qgbm9kZSBhdmFpbGFibGUgdG8gdXMsIGFuZCB0aGUgc2Vjb25kIG9mIHRoZSBuZXh0XFxuK1xcdCAqIG5vZGUgYXZhaWxhYmxlIHRvIHVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7XFxuK1xcdFxcdFxcdG5vZGVpZHNbaXRoX25vZGVtYXNrXSA9IGk7XFxuK1xcdFxcdFxcdG5vZGVtYXNrc1tpdGhfbm9kZW1hc2srK10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KFxcbitcXHRcXHRcXHRcXHRcXHRudW1hX2FsbG9jYXRlX25vZGVtYXNrKCksIGkpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSlcXG4rXFx0XFx0Y2xlYW51cChcXFwiRmFpbGVkIHRvIGNyZWF0ZSBub2RlbWFza3MuXFxcIik7XFxuK31cXG4rXFxuKy8qIHNldHVwX3RocmVhZHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKVxcbit7XFxuK1xcdHBlcl90aHJlYWRfYXJncyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IHRocmVhZF9hcmdzKSk7XFxuK1xcdGlmICghcGVyX3RocmVhZF9hcmdzKVxcbitcXHRcXHRjbGVhbnVwKFxcXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXFxcIik7XFxuK1xcbitcXHR0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTtcXG4rXFx0aWYgKCF0aHJlYWRzKVxcbitcXHRcXHRjbGVhbnVwKFxcXCJjYWxsb2MgdGhyZWFkcy5cXFwiKTtcXG4rfVxcbitcXG4rLyogcmVzZXJ2ZV9odWdlcGFnZVxcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXJ2ZSBhIGh1Z2V0bGIgcGFnZVxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgKnJlc2VydmVfaHVnZXBhZ2Uodm9pZClcXG4re1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XFxuK31cXG4rXFxuKy8qIHRocmVhZF93b3JrXFxuKyAqXFxuKyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKVxcbit7XFxuK1xcdHN0cnVjdCB0aHJlYWRfYXJncyAqdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyAqKSBhcmc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aHVnZXBhZ2VzID0gKHVuc2lnbmVkIGxvbmcgKiopIGNhbGxvYyh0X2FyZ3MtXFx1MDAzZXRvX3Jlc2VydmUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7XFxuK1xcbitcXHQvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqL1xcbitcXHRpZiAodF9hcmdzLVxcdTAwM2VteV9ub2RlbWFzaylcXG4rXFx0XFx0bnVtYV9iaW5kKHRfYXJncy1cXHUwMDNlbXlfbm9kZW1hc2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcXG4rXFx0XFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xcbitcXHRcXHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcXG4rXFx0XFx0ICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0XFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoaHVnZXBhZ2VzW2ldID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0XFx0dF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlID0gaTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuK1xcdHdoaWxlICghd2FrZV9jb25kKVxcbitcXHRcXHRwdGhyZWFkX2NvbmRfd2FpdChcXHUwMDI2Y29uZCwgXFx1MDAyNm11dGV4KTtcXG4rXFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNm11dGV4KTtcXG4rXFxuK1xcdC8qIFRyeSB0byBmcmVlIHRob3NlIGh1Z2V0bGIgcGFnZXMgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRfYXJncy1cXHUwMDNldG9fcmVzZXJ2ZTsgaSsrKSB7XFxuK1xcdFxcdGlmIChtdW5tYXAoaHVnZXBhZ2VzW2ldLCBIUFNJWkVfQllURVMpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcIm11bm1hcCgpIGZhaWxlZCEgQ2hlY2sgZm9yIGxlYWtlZCBodWdldGxiIHBhZ2VzIVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0ZnJlZShodWdlcGFnZXMpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyogd2FrZV9jaGlsZHJlblxcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd2FrZV9jaGlsZHJlbih2b2lkKVxcbit7XFxuK1xcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2bXV0ZXgpO1xcbitcXHR3YWtlX2NvbmQgPSAxO1xcbitcXHRwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KFxcdTAwMjZjb25kKTtcXG4rXFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNm11dGV4KTtcXG4rfVxcbitcXG4rLyogdGVzdDFcXG4rICpcXG4rICogU2FuaXR5IGNoZWNraW5nLCBhdHRlbXB0IHRvIHJlc2VydmUgYSBzdXJwbHVzIGh1Z2V0bGIgcGFnZSBhbnl3aGVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3QxKHZvaWQpXFxuK3tcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK1xcbitcXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gTlVMTDtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXG4rXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcXG4rXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbitcXG4rXFx0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoKGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgKChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8XFxuK1xcdFxcdFxcdCAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSksXFxuK1xcdFxcdFxcdCBcXFwiUmVzZXJ2ZSAxIHN1cnBsdXMgaHVnZXBhZ2UgYW55d2hlcmVcXFxcblxcXCIpO1xcbitcXG4rXFx0d2FrZV9jaGlsZHJlbigpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XFxuK1xcdHdha2VfY29uZCA9IDA7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbit9XFxuK1xcbisvKiB0ZXN0MlxcbisgKlxcbisgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGhcXG4rICogYSBtZW1wb2xpY3kuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKVxcbit7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXG4rXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcXG4rXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbitcXG4rXFx0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcXG4rXFx0XFx0XFx0IFxcXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMFxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK31cXG4rXFxuKy8qIHRlc3QzXFxuKyAqXFxuKyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDModm9pZClcXG4re1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMDtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxcbitcXHRcXHRcXHQgXFxcIlNldCAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rfVxcbitcXG4rLyogdGVzdDRcXG4rICpcXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMVxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDQodm9pZClcXG4re1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxcbitcXHRcXHRcXHQgXFxcIlJlc2VydmUgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcXFxcblxcXCIpO1xcbitcXG4rXFx0d2FrZV9jaGlsZHJlbigpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK31cXG4rXFxuKy8qIHRlc3Q1XFxuKyAqXFxuKyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTEgYW5kXFxuKyAqIGZhaWwgdG8gb3ZlciBhbGxvY2F0ZSBhbm90aGVyLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDUodm9pZClcXG4re1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDI7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxcbitcXHRcXHRcXHQgXFxcIkludGVudGlvbmFsbHkgb3ZlcmFsbG9jYXRlIGFuZCBmYWlsIGR1ZSB0byBucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBsaW1pdC5cXFxcblxcXCIpO1xcbitcXG4rXFx0d2FrZV9jaGlsZHJlbigpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oNSk7XFxuK1xcbitcXHRjaGVja19yZXF1aXJlbWVudHMoKTtcXG4rXFx0c2V0dXBfdGhyZWFkcygpO1xcbitcXHRzZXR1cF9ub2RlX2luZm8oKTtcXG4rXFx0c2V0dXBfcGF0aHMoKTtcXG4rXFx0c2F2ZV9odWdlcGFnZV9jb25maWdzKCk7XFxuK1xcdHdha2VfY29uZCA9IDA7XFxuK1xcbitcXHR0ZXN0MSgpO1xcbitcXHR0ZXN0MigpO1xcbitcXHR0ZXN0MygpO1xcbitcXHR0ZXN0NCgpO1xcbitcXHR0ZXN0NSgpO1xcbitcXG4rXFx0cmVzdG9yZV9odWdlcGFnZV9jb25maWdzKCk7XFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggYzE3YjEzM2E4MWQyNDguLmNkMzY4Y2U1OTBhNzRjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5AQCAtMjk3LDYgKzI5Nyw3IEBAIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLW1yZW1hcFxcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdlcGFnZS12bWVtbWFwXFxuIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX2Rpb1xcbitDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XFxuIFxcbiBpZiBbIFxcXCIke0hBVkVfSFVHRVBBR0VTfVxcXCIgPSBcXFwiMVxcXCIgXTsgdGhlblxcbiBcXHRucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMxLjQ1MDM0NzM0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMDE2Nzk2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2F0aGVyX3N1cnBsdXNfcGFnZXNcIixcbiAgICBcImFsbG93ZWRfbWVtc19uclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgZm9yIGdhdGhlcmluZyBzdXJwbHVzIGh1Z2UgcGFnZXMgdG8gcmVzcGVjdCBtZW1wb2xpY2llcyBhbmQgY3B1c2V0cy4gSXQgYWRkcyBhIG5ldyBzZWxmdGVzdCB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvci4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyIHdoZW4gYWxsb2NhdGluZyBzdXJwbHVzIGh1Z2UgcGFnZXMgdW5kZXIgZGlmZmVyZW50IG1lbXBvbGljaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MjZkNzdkODlhNmI5MTRmMzAwZTg1MmVmZTFhOGY2ZmEyMDIxOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDA1OjA2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBmMjRiZjQ5YmUwNDdlMy4uZjVlNjc4ZTk5NzIxZTEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTIyNTUsNiArMjI1NSwyMyBAQCBzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuK3tcbitcdGludCBub2RlO1xuK1x0dW5zaWduZWQgaW50IG5yID0gMDtcbitcdG5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrO1xuK1x0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4rXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbitcbitcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbitcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbitcdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4rXHRcdFx0bnIgKz0gYXJyYXlbbm9kZV07XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4rfVxuK1xuIC8qXG4gICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cbiAgKiBvZiBzaXplICdkZWx0YScuXG5AQCAtMjI3Nyw3ICsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuIFx0XHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuK1x0bmVlZGVkID0gbWF4X3QobG9uZywgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbitcdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMpKTtcbiBcdGlmIChuZWVkZWQgXHUwMDNjPSAwKSB7XG4gXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICs9IGRlbHRhO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0yMzExLDggKzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHQgKiBiZWNhdXNlIGVpdGhlciByZXN2X2h1Z2VfcGFnZXMgb3IgZnJlZV9odWdlX3BhZ2VzIG1heSBoYXZlIGNoYW5nZWQuXG4gXHQgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXG4tXHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKTtcbitcdG5lZWRlZCA9IG1heF90KGxvbmcsICgoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpIC0gYWxsb2NhdGVkKSxcbitcdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbitcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyArIGFsbG9jYXRlZCkpKTtcbiBcdGlmIChuZWVkZWQgXHUwMDNlIDApIHtcbiBcdFx0aWYgKGFsbG9jX29rKVxuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtNDUxMywyMyArNDUzMiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXAoY2hhciAqcylcbiB9XG4gX19zZXR1cChcImh1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XCIsIGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXApO1xuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4te1xuLVx0aW50IG5vZGU7XG4tXHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xuLVx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XG4tXHR1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcbi1cdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVxuLVx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xuLVx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xuLVx0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbi1cdFx0XHRuciArPSBhcnJheVtub2RlXTtcbi1cdH1cbi1cbi1cdHJldHVybiBucjtcbi19XG4tXG4gdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGNkMjQ1OTZjZGQyN2VkLi40MGRlMDkzOGYzOTM3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTEwNiw2ICsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyArPSBndWFyZC1yZWdpb25zXG4gVEVTVF9HRU5fRklMRVMgKz0gbWVyZ2VcbiBURVNUX0dFTl9GSUxFUyArPSBybWFwXG4gVEVTVF9HRU5fRklMRVMgKz0gZm9saW9fc3BsaXRfcmFjZV90ZXN0XG4rVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICs9IHNvZnQtZGlydHlcbkBAIC0yNjAsNiArMjYxLDggQEAgJChPVVRQVVQpL21pZ3JhdGlvbjogTERMSUJTICs9IC1sbnVtYVxuIFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgKz0gLWxudW1hXG4gXG4rJChPVVRQVVQpL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3k6IExETElCUyArPSAtbG51bWFcbitcbiBsb2NhbF9jb25maWcubWsgbG9jYWxfY29uZmlnLmg6IGNoZWNrX2NvbmZpZy5zaFxuIFx0Q0M9XCIkKENDKVwiIENGTEFHUz1cIiQoQ0ZMQUdTKVwiIC4vY2hlY2tfY29uZmlnLnNoXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3MzdiZWZjZDA2ODY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbkBAIC0wLDAgKzEsNDkxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbisgKlxuKyAqIFJlc2VydmluZyBzdXJwbHVzIGh1Z2VwYWdlcyB3aXRoaW4gbWVtcG9saWNpZXMgaXMgcXVpdGUgdHJpY2t5IGR1ZSB0b1xuKyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xuKyAqIGRvIG5vdCBjb3ZlciBhbGwgZWRnZSBjYXNlcywgYnV0IHJhdGhlciBmb2N1cyBvbiB3aGF0IHRoZSBrZXJuZWwgY2FuXG4rICogY3VycmVudGx5IGRvIHRvIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZXMgaW4gdGhlIHByZXNlbmNlIG9mIGNwdXNldHNcbisgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cbisgKi9cbitcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY251bWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuK1xuKyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKVxuKyNkZWZpbmUgSFBTSVpFX0tCIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSBcdTAwM2VcdTAwM2UgMTBcbisjZGVmaW5lIEdMT0JBTF9TWVNfSFBfUEFUSCBcIi9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcIlxuKyNkZWZpbmUgTk9ERV9TWVNfSFBfUEFUSCBcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wiXG4rXG4rc3RydWN0IGJpdG1hc2sgKipub2RlbWFza3M7XG4raW50ICpub2RlaWRzO1xuK1xuK3B0aHJlYWRfdCAqdGhyZWFkcztcbitzdHJ1Y3QgdGhyZWFkX2FyZ3Mge1xuK1x0c3RydWN0IGJpdG1hc2sgKm15X25vZGVtYXNrO1xuK1x0aW50IHRvX3Jlc2VydmU7XG4rfTtcbitzdHJ1Y3QgdGhyZWFkX2FyZ3MgKnBlcl90aHJlYWRfYXJncztcbitwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuK3B0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7XG4raW50IHdha2VfY29uZDtcbitcbitjaGFyICpucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfcmVzdl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9ucl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfbnJfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbitcbit1bnNpZ25lZCBsb25nIGdfZnJlZV9odWdlcGFnZXMsIGdfbnJfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgZ19yZXN2X2h1Z2VwYWdlcywgZ19zdXJwbHVzX2h1Z2VwYWdlcztcbit1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgbjFfZnJlZV9odWdlcGFnZXMsIG4xX25yX2h1Z2VwYWdlcywgbjFfc3VycGx1c19odWdlcGFnZXM7XG4rdW5zaWduZWQgbG9uZyBvcmlnX24wX25yX2h1Z2VwYWdlcywgb3JpZ19uMV9ucl9odWdlcGFnZXM7XG4rdW5zaWduZWQgbG9uZyBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xuK1xuK1xuKy8qIHNldHVwX3BhdGhzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN0cmluZ3MgZm9yIHRoZSB2YXJpb3VzIGh1Z2V0bGIgcGFnZSBzeXNmc1xuKyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXR1cF9wYXRocyh2b2lkKVxuK3tcbitcdGFzcHJpbnRmKFx1MDAyNm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsXG4rXHRcdFx0XCIvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbitcdFx0XHRIUFNJWkVfS0IsIFwiZnJlZV9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX25yX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4rXHRcdFx0SFBTSVpFX0tCLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNmdfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuK1x0XHRcdEhQU0laRV9LQiwgXCJyZXN2X2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNmdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuK1x0XHRcdEhQU0laRV9LQiwgXCJzdXJwbHVzX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcInN1cnBsdXNfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbitcdFx0XHRIUFNJWkVfS0IsIFwiZnJlZV9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbitcdFx0XHRIUFNJWkVfS0IsIFwibnJfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbitcdFx0XHRIUFNJWkVfS0IsIFwic3VycGx1c19odWdlcGFnZXNcIik7XG4rfVxuK1xuKy8qIGdldF9odWdlcGFnZV9zdGF0c1xuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNpbXBseSBncmFiIGEgYnVuY2ggb2YgdGhlIGh1Z2V0bGIgcGFnZSBtZXRyaWNzIGluIHN5c2ZzXG4rICovXG4rc3RhdGljIHZvaWQgZ2V0X2h1Z2VwYWdlX3N0YXRzKHZvaWQpXG4re1xuK1x0cmVhZF9zeXNmcyhnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfZnJlZV9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX25yX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKGdfcmVzdl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19yZXN2X2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX25yX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfZnJlZV9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfbnJfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXMpO1xuK31cbitcbisvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3NcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBodWdlcGFnZSBjb25maWdzIHNvIHRoaXNcbisgKiB0ZXN0IHN1aXRlIGRvZXNuJ3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuXG4rICovXG4rc3RhdGljIHZvaWQgc2F2ZV9odWdlcGFnZV9jb25maWdzKHZvaWQpXG4re1xuK1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMF9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbit9XG4rXG4rLyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0XG4rICogd2FzIHJhbi5cbisgKi9cbitzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZClcbit7XG4rXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgb3JpZ19uMF9ucl9odWdlcGFnZXMpO1xuK1x0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjFfbnJfaHVnZXBhZ2VzKTtcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xuK31cbitcbisvKiByZXNldF9odWdlcGFnZXNcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLlxuKyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKVxuK3tcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDApO1xuK1x0d3JpdGVfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4rXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4rXHR3cml0ZV9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4rfVxuK1xuKy8qIGNhbl9ydW5cbisgKlxuKyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKVxuK3tcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoZSB0ZXN0IGFzIHJvb3QuXFxuXCIpO1xuK1xuK1x0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiTnVtYSBpcyB1bmF2YWlsYWJsZS5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIk5vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fdGFza19ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIkN1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXG5cIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNsZWFudXAoY2hhciAqZXJyX21zZylcbit7XG4rXHRmcmVlKHBlcl90aHJlYWRfYXJncyk7XG4rXHRmcmVlKHRocmVhZHMpO1xuK1x0ZnJlZShub2RlaWRzKTtcbitcdGZyZWUobm9kZW1hc2tzKTtcbitcdGZyZWUobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKGdfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShuMF9mcmVlX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjBfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjFfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4xX25yX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4rXHRpZiAoZXJyX21zZylcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKGVycl9tc2cpO1xuK31cbitcbisvKiBzZXR1cF9ub2RlX2luZm9cbisgKlxuKyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZVxuKyAqIHJlc2VydmF0aW9ucy5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZClcbit7XG4rXHRpbnQgaTtcbitcdGludCBpdGhfbm9kZW1hc2sgPSAwO1xuK1xuK1x0bm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7XG4rXHRub2RlbWFza3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBiaXRtYXNrICopKTtcbitcbitcdGlmICghbm9kZW1hc2tzIHx8ICFub2RlaWRzKVxuK1x0XHRjbGVhbnVwKFwiRmFpbGVkIHRvIGFsbG9jYXRlIG5vZGVtYXNrcyBvciBub2RlaWRzLlwiKTtcbitcbitcdC8qIFdhbGsgdGhlIG5vZGVzIGF2YWlsYWJsZSB0byB1cy4gQ3JlYXRlIHR3byBiaXRtYXNrcywgb25lIG9mIHRoZVxuK1x0ICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dFxuK1x0ICogbm9kZSBhdmFpbGFibGUgdG8gdXMuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSsrKSB7XG4rXHRcdGlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7XG4rXHRcdFx0bm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTtcbitcdFx0XHRub2RlbWFza3NbaXRoX25vZGVtYXNrKytdID0gbnVtYV9iaXRtYXNrX3NldGJpdChcbitcdFx0XHRcdFx0bnVtYV9hbGxvY2F0ZV9ub2RlbWFzaygpLCBpKTtcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSlcbitcdFx0Y2xlYW51cChcIkZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLlwiKTtcbit9XG4rXG4rLyogc2V0dXBfdGhyZWFkc1xuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNldHVwX3RocmVhZHModm9pZClcbit7XG4rXHRwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfYXJncykpO1xuK1x0aWYgKCFwZXJfdGhyZWFkX2FyZ3MpXG4rXHRcdGNsZWFudXAoXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXCIpO1xuK1xuK1x0dGhyZWFkcyA9IGNhbGxvYygyLCBzaXplb2YocHRocmVhZF90KSk7XG4rXHRpZiAoIXRocmVhZHMpXG4rXHRcdGNsZWFudXAoXCJjYWxsb2MgdGhyZWFkcy5cIik7XG4rfVxuK1xuKy8qIHJlc2VydmVfaHVnZXBhZ2VcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNlcnZlIGEgaHVnZXRsYiBwYWdlXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgKnJlc2VydmVfaHVnZXBhZ2Uodm9pZClcbit7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4rfVxuK1xuKy8qIHRocmVhZF93b3JrXG4rICpcbisgKiBUZXN0IHJ1bm5lcnMuIFBlcmZvcm1zIHRoZSB3b3JrIG9mIHJlc2VydmluZyBhbmQgZnJlZWluZyBodWdldGxiIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkICp0aHJlYWRfd29yayh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHRocmVhZF9hcmdzICp0X2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzICopIGFyZztcbitcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XG4rXHRpbnQgaTtcbitcbitcdGh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLVx1MDAzZXRvX3Jlc2VydmUsXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcgKiopKTtcbitcbitcdC8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovXG4rXHRpZiAodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKVxuK1x0XHRudW1hX2JpbmQodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xuK1x0XHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcbitcdFx0ICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0XG4rXHRcdCAqL1xuK1x0XHRpZiAoaHVnZXBhZ2VzW2ldID09IE1BUF9GQUlMRUQpIHtcbitcdFx0XHR0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZSA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEdvIHRvIHNsZWVwIHVudGlsIG1haW4gdGhyZWFkIHdha2VzIHVzIHVwICovXG4rXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuK1x0d2hpbGUgKCF3YWtlX2NvbmQpXG4rXHRcdHB0aHJlYWRfY29uZF93YWl0KFx1MDAyNmNvbmQsIFx1MDAyNm11dGV4KTtcbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbitcbitcdC8qIFRyeSB0byBmcmVlIHRob3NlIGh1Z2V0bGIgcGFnZXMgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9wZXJyb3IoXCJtdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcXG5cIik7XG4rXHR9XG4rXHRmcmVlKGh1Z2VwYWdlcyk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyogd2FrZV9jaGlsZHJlblxuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHdha2UgY2hpbGRyZW4gdGhyZWFkcy5cbisgKi9cbitzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpXG4re1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbitcdHdha2VfY29uZCA9IDE7XG4rXHRwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KFx1MDAyNmNvbmQpO1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2bXV0ZXgpO1xuK31cbitcbisvKiB0ZXN0MVxuKyAqXG4rICogU2FuaXR5IGNoZWNraW5nLCBhdHRlbXB0IHRvIHJlc2VydmUgYSBzdXJwbHVzIGh1Z2V0bGIgcGFnZSBhbnl3aGVyZS5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0MSh2b2lkKVxuK3tcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXG4rXHR1c2xlZXAoNTAwMDAwKTtcbitcbitcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdCgoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICgobjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwKSB8fFxuK1x0XHRcdCAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSksXG4rXHRcdFx0IFwiUmVzZXJ2ZSAxIHN1cnBsdXMgaHVnZXBhZ2UgYW55d2hlcmVcXG5cIik7XG4rXG4rXHR3YWtlX2NoaWxkcmVuKCk7XG4rXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XG4rXHR3YWtlX2NvbmQgPSAwO1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rfVxuK1xuKy8qIHRlc3QyXG4rICpcbisgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGhcbisgKiBhIG1lbXBvbGljeS5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKVxuK3tcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMFxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDNcbisgKlxuKyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpXG4re1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rXG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcbitcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbitcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMDtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbitcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4rXG4rXHR1c2xlZXAoNTAwMDAwKTtcbitcbitcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4rXHRcdFx0IFwiU2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK31cbitcbisvKiB0ZXN0NFxuKyAqXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMVxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3Q0KHZvaWQpXG4re1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rXG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcbitcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbitcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbitcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4rXG4rXHR1c2xlZXAoNTAwMDAwKTtcbitcbitcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4rXHRcdFx0IFwiUmVzZXJ2ZSAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDVcbisgKlxuKyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTEgYW5kXG4rICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdDUodm9pZClcbit7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbitcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbitcdFx0XHQgXCJJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRrc2Z0X3NldF9wbGFuKDUpO1xuK1xuK1x0Y2hlY2tfcmVxdWlyZW1lbnRzKCk7XG4rXHRzZXR1cF90aHJlYWRzKCk7XG4rXHRzZXR1cF9ub2RlX2luZm8oKTtcbitcdHNldHVwX3BhdGhzKCk7XG4rXHRzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXG4rXHR0ZXN0MSgpO1xuK1x0dGVzdDIoKTtcbitcdHRlc3QzKCk7XG4rXHR0ZXN0NCgpO1xuK1x0dGVzdDUoKTtcbitcbitcdHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncygpO1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiArMjk3LDcgQEAgQ0FURUdPUlk9XCJodWdldGxiXCIgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLXZtZW1tYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbitDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwiJHtIQVZFX0hVR0VQQUdFU31cIiA9IFwiMVwiIF07IHRoZW5cbiBcdG5yX2h1Z2VwYWdlc190bXA9JChjYXQgL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMxLjQ1MDM0ODU2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjE1Nzg1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIFN1cnBsdXMgUGFnZSBHYXRoZXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIGEgcHJldHR5IGNyaXRpY2FsIHBhcnQgb2YgdGhlIGh1Z2VwYWdlcyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9odWdldGxiLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIGhvdyBzdXJwbHVzIGh1Z2UgcGFnZXMgYXJlIGdhdGhlcmVkLCBhbmQgdGhlIGtleSBtb2RpZmljYXRpb24gaW52b2x2ZXMgdGhlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgZnVuY3Rpb24uXG5cbldoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBpcyB0aGlzIGluY2x1c2lvbiBvZiBgYWxsb3dlZF9tZW1zX25yKGgpYCBpbiB0aGUgY2FsY3VsYXRpb25zIG9mIGBuZWVkZWRgLiBGcm9tIHRoZSBjb2RlIHNuaXBwZXQsIGl0IGxvb2tzIGxpa2UgaXQncyBub3cgaW5jb3Jwb3JhdGVkIHRvIGRldGVybWluZSB0aGUgc3VycGx1cy4gSXQgaXMgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHRoZSBjYWxjdWxhdGlvbiBsb2dpYyBmcm9tOlxuXG5gYGBjXG4tXHRuZWVkZWQgPSAoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbitcdG5lZWRlZCA9IG1heF90KGxvbmcsIChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSksXG4rXHRcdFx0KChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG5gYGBcbmFuZFxuYGBgY1xuLVx0bmVlZGVkID0gKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbi1cdFx0XHQoaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpO1xuK1x0bmVlZGVkID0gbWF4X3QobG9uZywgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxuK1x0XHRcdCgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxuK1x0XHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKSkpO1xuYGBgXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgYWxsb3dlZF9tZW1zX25yKGgpYCBtdXN0IGJlIHNvbWVob3cgY2hlY2tpbmcgdGhlIGN1cnJlbnQgY3B1c2V0IGFuZCBtZW1wb2xpY3kgdG8gcmVmaW5lIHRoZSBzdXJwbHVzIGNhbGN1bGF0aW9uLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0IGFmZmVjdHMgaG93IGh1Z2VwYWdlcyBhcmUgYWxsb3dlZCB0byBiZSBhbGxvY2F0ZWQgYWNyb3NzIG1lbW9yeSBub2Rlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dCBvZiBgYWxsb3dlZF9tZW1zX25yYCB0byB2ZXJpZnkgaXRzIGZ1bmN0aW9uIGhlcmUuXG5cbk9mIGNvdXJzZSwgdGhlIGNoYW5nZSBpbiBgbW0vaHVnZXRsYi5jYCBpcyBhY2NvbXBhbmllZCBieSBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNgLiBHb29kLCB0aGF0IG1lYW5zIHRoZSBkZXZlbG9wZXJzIGFyZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgYW5kIHRlc3RpbmcgdGhpcyBuZXcgYmVoYXZpb3IuXG5cbkdpdmVuIHRoaXMgaXMgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBpdCdzIGRlYWxpbmcgd2l0aCBzdXJwbHVzIHBhZ2VzLCBJJ2QgZXhwZWN0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoYXQncyB0cnVlLCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCBzZWVtcyB2ZXJ5IGxpa2VseS4gTGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggbWFrZXMgc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIHJlYWNoYWJsZSwgYW5kIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlncyBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDY6MzcuODcxOTI5Mjk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODM3NzIxODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2F0aGVyX3N1cnBsdXNfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjc4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyMjc5OnN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG5tbS9odWdldGxiLmMtMjI4MC1cXHRfX211c3RfaG9sZChcXHUwMDI2aHVnZXRsYl9sb2NrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0NS1cXHRpZiAoZGVsdGEgXFx1MDAzZSAwKSB7XFxubW0vaHVnZXRsYi5jOjQ2NDY6XFx0XFx0aWYgKGdhdGhlcl9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKSBcXHUwMDNjIDApXFxubW0vaHVnZXRsYi5jLTQ2NDctXFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjM5Ljg1NTcwODk4OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzk5NzAwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIGludm9rZWQgYnkgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGBodWdldGxiX2FjY3RfbWVtb3J5YCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB1cHdhcmRzIGdpdmVzIG1lIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGxlciBvZiBgaHVnZXRsYl9hY2N0X21lbW9yeWAgaXMgY3J1Y2lhbCB0byBldmFsdWF0aW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBhY2NvdW50aW5nIHdpdGhpbiB0aGUgaHVnZXRsYiBzeXN0ZW0uIExldCdzIGRpZyBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDY6NDIuNzM1NjgxMzY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTU2Mjk2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9hY2N0X21lbW9yeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE0OT1BZnRlciBjb25zdWx0aW5nIHRoZSByZXNlcnZhdGlvbiBtYXAgYW5kIHN1YnBvb2wsIHRoZSBudW1iZXIgb2YgbmVlZGVkIG5ld1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUwOnJlc2VydmF0aW9ucyBpcyBrbm93bi4gIFRoZSByb3V0aW5lIGh1Z2V0bGJfYWNjdF9tZW1vcnkoKSBpcyBjYWxsZWQgdG8gY2hlY2tcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MTpmb3IgYW5kIHRha2UgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzZXJ2YXRpb25zLiAgaHVnZXRsYl9hY2N0X21lbW9yeSgpXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTItY2FsbHMgaW50byByb3V0aW5lcyB0aGF0IHBvdGVudGlhbGx5IGFsbG9jYXRlIGFuZCBhZGp1c3Qgc3VycGx1cyBwYWdlIGNvdW50cy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MzEwPXRoZSBtaW5faHBhZ2VzIGZpZWxkIG9mIGEgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wuICBBdCBtb3VudCB0aW1lLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MzExOmh1Z2V0bGJfYWNjdF9tZW1vcnkobWluX2hwYWdlcykgaXMgY2FsbGVkIHRvIHJlc2VydmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2ZcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTMxMi1odWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTU1OD1pbnRvIGFjY291bnQuICBXaGlsZSBjcHVzZXRzIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZSBhcyBtZW1vcnkgcG9saWN5LCB0aGlzXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NTk6Y29tbWVudCBpbiBodWdldGxiX2FjY3RfbWVtb3J5IHN1bXMgdXAgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gcmVzZXJ2YXRpb25zXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01NjAtYW5kIGNwdXNldHMvbWVtb3J5IHBvbGljeTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMTY9SFBBR0VfUkVTVl9PV05FUuagh+W/l+iiq+iuvue9ru+8jOS7peihqOaYjuivpVZNQeaLpeaciemihOeVmeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjEyNjrlnKjlkqjor6LkuobpooTnlZnmmKDlsITlkozlrZDmsaDkuYvlkI7vvIzlsLHnn6XpgZPkuobpnIDopoHnmoTmlrDpooTnlZnmlbDph4/jgIJodWdldGxiX2FjY3RfbWVtb3J5KCnlh73mlbDooqvosIPnlKjku6Xmo4Dmn6VcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjc65bm26I635Y+W5omA6KaB5rGC55qE6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp6LCD55So5Yiw5Y+v6IO95YiG6YWN5ZKM6LCD5pW05Ymp5L2Z6aG15pWw55qE5Ye95pWw44CC54S26ICM77yM5Zyo6L+ZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI4LeS6m+WHveaVsOS4re+8jOS7o+eggeWPquaYr+ajgOafpeS7peehruS/neaciei2s+Wkn+eahOepuumXsueahOW3qOmhteadpeWuuee6s+mihOeVmeOAguWmguaenOacieeahOivne+8jOWFqOWxgOmihOeVmeiuoeaVsHJlc3ZfaHVnZV9wYWdlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjI2PXBhZ2UtXFx1MDAzZXByaXZhdGXlrZfmrrXmjIflkJHkuI7or6XpobXnm7jlhbPnmoTku7vkvZXlrZDmsaDjgILlpoLmnpxQYWdlUHJpdmF0Zeagh+W/l+iiq+iuvue9ru+8jOWug+ihqOaYjuWFqOWxgOmihOeVmeiuoeaVsFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ0LeWmguaenOaMh+WumuS6hui/meS4qumAiemhue+8jOS4jm1pbl9zaXpl55u45a+55bqU55qE5beo6aG155qE5pWw6YeP5bCG6KKr6aKE55WZ57uZ5paH5Lu257O757uf5L2/55So44CC6L+Z5Liq5pWw5a2X5Zyo57uT5p6E5L2TXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ1Omh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lbW9yeShtaW5faHBhZ2VzKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0Ni3ooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMzMT1yZWdpb25fY291bnQoKeWcqOino+mZpOengeacieW3qOmhteaYoOWwhOaXtuiiq+iwg+eUqOOAguWcqOengeacieaYoOWwhOS4re+8jOmihOeVmeaYoOWwhOS4reayoeacieadoeebruihqOaYjuWtmOWcqOS4gOS4qumihOeVmeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDEwLeWcqOS4gOauteaXtumXtOWQjuWKoOWFpeeahOOAguW9k+mihOeVmeiiq+a3u+WKoOaXtu+8jOayoeacieWwneivleWwhuWGheWtmOetlueVpeiAg+iZkeWcqOWGheOAguiZveeEtmNwdXNldHPkuI7lhoXlrZjnrZbnlaXkuI1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo0MTE65a6M5YWo55u45ZCM77yM5L2GaHVnZXRsYl9hY2N0X21lbW9yeeS4reeahOi/meS4quazqOmHiuaAu+e7k+S6humihOeVmeWSjGNwdXNldHMv5YaF5a2Y562W55Wl5LmL6Ze055qE55u45LqS5L2cXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDEyLeeUqDo6XFxuLS1cXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9odWdldGxiLmMtMTE2LS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi9cXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcXG5tbS9odWdldGxiLmMtMTE4LXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTM2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDUtXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbm1tL2h1Z2V0bGIuYzoxNDY6XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cXHUwMDNlaHN0YXRlLFxcbm1tL2h1Z2V0bGIuYy0xNDctXFx0XFx0XFx0XFx0XFx0XFx0LXNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTI9c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjYtXFxubW0vaHVnZXRsYi5jOjE2NzpcXHRpZiAobWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7XFxubW0vaHVnZXRsYi5jLTE2OC1cXHRcXHRrZnJlZShzcG9vbCk7XFxuLS1cXG5tbS9odWdldGxiLmM9OTU4PXZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy05NjctXFxubW0vaHVnZXRsYi5jOjk2ODpcXHRcXHRpZiAoIWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgMSkpXFxubW0vaHVnZXRsYi5jLTk2OS1cXHRcXHRcXHRyZXNlcnZlZCA9IHRydWU7XFxuLS1cXG5tbS9odWdldGxiLmM9Mjg5MT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAxNi1cXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYzozMDE3OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbm1tL2h1Z2V0bGIuYy0zMDE4LVxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzA1Mi1cXHRcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmM6MzA1MzpcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTMwNTQtXFx0fVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MDQ9dW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtNDYxMy1cXG5tbS9odWdldGxiLmM6NDYxNDpzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG5tbS9odWdldGxiLmMtNDYxNS17XFxuLS1cXG5tbS9odWdldGxiLmM9NDcwND1zdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ3MjgtXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jOjQ3Mjk6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYy00NzMwLVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02NTU2PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjY0NC1cXHQgKi9cXG5tbS9odWdldGxiLmM6NjY0NTpcXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNjY0Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NjYzLVxcdFxcdGlmICh1bmxpa2VseShhZGQgXFx1MDAzYyAwKSkge1xcbm1tL2h1Z2V0bGIuYzo2NjY0OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNjY2NS1cXHRcXHRcXHRlcnIgPSBhZGQ7XFxuLS1cXG5tbS9odWdldGxiLmMtNjY4Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGcgLSBhZGQpO1xcbm1tL2h1Z2V0bGIuYzo2Njg3OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbm1tL2h1Z2V0bGIuYy02Njg4LVxcdFxcdH0gZWxzZSBpZiAoaF9jZykge1xcbi0tXFxubW0vaHVnZXRsYi5jLTY3MDgtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjY3MDk6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbm1tL2h1Z2V0bGIuYy02NzEwLVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02NzM3PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmMtNjc3Mi1cXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAoY2hnIC0gZnJlZWQpKTtcXG5tbS9odWdldGxiLmM6Njc3MzpcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTY3NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjQ0LjY1MTMxNTg5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMxNDYyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZnVuY3Rpb24sIGFuZCBpdCdzIHBvcHBpbmcgdXAgYWxsIG92ZXIgdGhlIHBsYWNlLiBTZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSBtYXBwaW5nIHRob3NlIGh1Z2V0bGJmcyBmaWxlcyB1c2luZyBgbW1hcGAgd2l0aCBodWdlIHBhZ2VzIOKAkyB0aGUgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgZnVuY3Rpb24gaXMgYSBrZXkgZW50cnkgcG9pbnQgdGhlcmUuIFNwZWNpZmljYWxseSwgdGhpcyB0ZXN0LCBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAsIGl0J3MgZG9pbmcgYW4gYW5vbnltb3VzLCBwcml2YXRlIG1hcHBpbmcgd2l0aCBgTUFQX0hVR0VUTEJgLCB3aGljaCwgYXMgSSBwcmVkaWN0ZWQsIHdpbGwgY2FsbCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gVGhhdCBpbiB0dXJuIGNhbGxzIGBodWdldGxiX2FjY3RfbWVtb3J5YCB3aGljaCB3aWxsIGNhbGwgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYC4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IGh5cG90aGVzaXMuIEkgc3VzcGVjdGVkIHRoYXQgdGhlIGNvZGUgcGF0aCB3YXMgcmVhY2hhYmxlLCBhbmQgbm93IEkndmUgY29uZmlybWVkIGl0LlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYWxsb3dlZF9tZW1zX25yYCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg3OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNTowNjo0OC41NzQ0NjkyMjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDk1MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd2VkX21lbXNfbnJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNDE9c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuLS1cXG5tbS9odWdldGxiLmMtMjI1Ny1cXG5tbS9odWdldGxiLmM6MjI1ODpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0yMjU5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMjc5PXN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjk2LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjIyOTc6XFx0bmVlZGVkID0gbWF4X3QobG9uZywgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcXG5tbS9odWdldGxiLmMtMjI5OC1cXHRcXHRcXHQoKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIzMzEtXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MjMzMjpcXHRuZWVkZWQgPSBtYXhfdChsb25nLCAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXFxubW0vaHVnZXRsYi5jLTIzMzMtXFx0XFx0XFx0KChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0OC1cXG5tbS9odWdldGxiLmM6NDY0OTpcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBhbGxvd2VkX21lbXNfbnIoaCkpIHtcXG5tbS9odWdldGxiLmMtNDY1MC1cXHRcXHRcXHRyZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoaCwgZGVsdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNTowNjo1MC4zMDk0MzA1ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk0MzIxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIERlZXAgRGl2ZSBpbnRvIEh1Z2VUTEIgU3VycGx1cyBQYWdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgbW92aW5nIGBhbGxvd2VkX21lbXNfbnJgIGZ1cnRoZXIgdXAgdGhlIGZpbGUsIG1ha2luZyBpdCBhY2Nlc3NpYmxlIHRvIGBnYXRoZXJfc3VycGx1c19wYWdlc2AuIEEgc2VlbWluZ2x5IG1pbm9yIHN0cnVjdHVyYWwgY2hhbmdlLCBidXQgaXQncyB0aGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIHRoYXQgSSByZWFsbHkgbmVlZCB0byBhbmFseXplLiBUaGUgY29kZSdzIGxvZ2ljIGlzIGJlaW5nIHVwZGF0ZWQgdG8gZmFjdG9yIGluIGBhbGxvd2VkX21lbXNfbnIoaClgIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHZhbHVlIG9mIGBuZWVkZWRgLlxuXG5JcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwncyBodWdldGxiIHN1YnN5c3RlbSwgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBhbmQgYGFsbG93ZWRfbWVtc19ucmAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyBoZXJlLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSdtIHRoaW5raW5nIGBIVUdFVExCX1BBR0VgIGFuZCBgTlVNQWAgYXJlIGdvaW5nIHRvIGJlIGtleSwgYW5kIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgb3RoZXJzLiBSaWdodCwgYGFsbG93ZWRfbWVtc19ucmAgdXRpbGl6ZXMgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAuIFRoYXQncyBwb2ludGluZyBtZSBkaXJlY3RseSB0b3dhcmQgYENQVVNFVFNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugc3Vic3lzdGVtcy4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG93ZWRfbWVtc19ucmAgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjU0LjYwMzc1NDcwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NTA4NTE0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jcHVzZXQuaD04Mz1leHRlcm4gbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDo4NDojZGVmaW5lIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCAoY3VycmVudC1cXHUwMDNlbWVtc19hbGxvd2VkKVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtODUtdm9pZCBjcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE5PXN0YXRpYyBpbmxpbmUgbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjIzLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjI0OiNkZWZpbmUgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIChub2RlX3N0YXRlc1tOX01FTU9SWV0pXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yMjUtc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9pbml0X2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpIHt9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTM0ODQ9c3RhdGljIHZvaWQgdGFza19udW1hX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1MTUtXFx0ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzozNTE2OlxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBub2Rlc193ZWlnaHQoY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSA9PSAxKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzozNTE3OlxcdFxcdHRyYWNlX3NjaGVkX3NraXBfY3B1c2V0X251bWEoY3VycmVudCwgXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zNTE4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMjU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMjI2Ni1cXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxubW0vaHVnZXRsYi5jOjIyNjc6XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xcbm1tL2h1Z2V0bGIuYy0yMjY4LVxcdFxcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxcbi0tXFxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIyOTEtXFx0aWYgKG1iaW5kX25vZGVtYXNrKVxcbm1tL2h1Z2V0bGIuYzoyMjkyOlxcdFxcdG5vZGVzX2FuZChhbGxvY19ub2RlbWFzaywgKm1iaW5kX25vZGVtYXNrLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xcbm1tL2h1Z2V0bGIuYy0yMjkzLVxcdGVsc2VcXG5tbS9odWdldGxiLmM6MjI5NDpcXHRcXHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG5tbS9odWdldGxiLmMtMjI5NS1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTQwND1zdGF0aWMgaW50IG1wb2xfc2V0X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTQxOC1cXHRub2Rlc19hbmQobnNjLVxcdTAwM2VtYXNrMSxcXG5tbS9tZW1wb2xpY3kuYzo0MTk6XFx0XFx0ICBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxubW0vbWVtcG9saWN5LmMtNDIwLVxcbi0tXFxubW0vbWVtcG9saWN5LmMtNDMwLVxcdGVsc2VcXG5tbS9tZW1wb2xpY3kuYzo0MzE6XFx0XFx0cG9sLVxcdTAwM2V3LmNwdXNldF9tZW1zX2FsbG93ZWQgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxubW0vbWVtcG9saWN5LmMtNDMyLVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTE0Nz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTExNjMtXFx0XFx0dGFza19sb2NrKGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jOjExNjQ6XFx0XFx0Km5tYXNrICA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG5tbS9tZW1wb2xpY3kuYy0xMTY1LVxcdFxcdHRhc2tfdW5sb2NrKGN1cnJlbnQpO1xcbi0tXFxubW0vb29tX2tpbGwuYz0yNDk9c3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4tLVxcbm1tL29vbV9raWxsLmMtMjk4LVxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcXG5tbS9vb21fa2lsbC5jOjI5OTpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpXFxubW0vb29tX2tpbGwuYy0zMDAtXFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgKz0gbm9kZV9wcmVzZW50X3BhZ2VzKG5pZCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDY4Nz1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ny1cXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LFxcbm1tL3BhZ2VfYWxsb2MuYzo0NzY4OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xcbm1tL3BhZ2VfYWxsb2MuYy00NzY5LVxcdFxcdGlmICghem9uZWxpc3Rfem9uZSh6KSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00OTczPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDk4OS1cXHRcXHRpZiAoaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2ICFhYy1cXHUwMDNlbm9kZW1hc2spXFxubW0vcGFnZV9hbGxvYy5jOjQ5OTA6XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG5tbS9wYWdlX2FsbG9jLmMtNDk5MS1cXHRcXHRlbHNlXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE5MD1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyMzQtXFx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcXG5tbS9wYWdlX2FsbG9jLmM6NTIzNTpcXHQgKiBcXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIHRvIG9wdGltaXplIHRoZSBmYXN0LXBhdGggYXR0ZW1wdC5cXG5tbS9wYWdlX2FsbG9jLmMtNTIzNi1cXHQgKi9cXG4tLVxcbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vc2hvd19tZW0uYy0xMjktXFx0aWYgKCFub2RlbWFzaylcXG5tbS9zaG93X21lbS5jOjEzMDpcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxubW0vc2hvd19tZW0uYy0xMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjU2LjI5ODg0NDYzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU4NjM4MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBIVUdFVExCX1BBR0VgIGFuZCBgTlVNQWAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBleGFtaW5pbmcgYEhVR0VUTEJfUEFHRWAgYW5kIGBOVU1BYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTGV0J3MgZGlnIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LCBiZXR3ZWVuIHRoZXNlIHR3bz9cIiBQZXJoYXBzIHRoZXkncmUgaW50ZXJkZXBlbmRlbnQsIG9yIG1heWJlIHRoZXkncmUgb3J0aG9nb25hbCBmZWF0dXJlcyB0aGF0IGludGVyYWN0IGluIGludGVyZXN0aW5nIHdheXMuIFNpbmNlIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIHRoZW0gb3V0LCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGltcGxpY2F0aW9uczogaHVnZSBwYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24sIE5VTUEgZm9yIG1hbmFnaW5nIG1lbW9yeSBhY2Nlc3MgbGF0ZW5jeS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB0aGV5IHNwZWNpZnkuIFRoaXMgY291bGQgdGVsbCBhIGdyZWF0IHN0b3J5IGFib3V0IG9wdGltaXphdGlvbiBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgdGhpcyBraW5kIG9mIGFuYWx5c2lzIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2UuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDY6NTkuMjU3NDg0ODIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3NzQwMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTUtXFxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02NTctXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNTowNzowMS4xOTUyMzAzMDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzODYwMzMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRm91bmRhdGlvbjogSHVnZVRMQiBhbmQgSHVnZVRMQkZTKipcblxuT2theSwgc28gYEhVR0VUTEJfUEFHRWAgaXMgdGhlIGtleS4gVGhhdCBkZWZpbml0aW9uIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgZGlyZWN0bHkgdGllZCB0byBgSFVHRVRMQkZTYC4gU28sIGlmIEkgbmVlZCB0byB3b3JrIHdpdGggaHVnZSBwYWdlcywgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSByZWFsbHkgYWZ0ZXIgaXMgYEhVR0VUTEJGU2AuIFRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZWUgd2hhdCBgSFVHRVRMQkZTYCBpcyBhbGwgYWJvdXQuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA3OjAzLjczMzgzNjM3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzYxMzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA3OjA1LjQ1MTQ1NDIxOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUxMTA5NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczpcblxuKipBbmFseXppbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIENQVSBhZmZpbml0eSBoZXJlLiBUaGUga2V5IHBsYXllcnMganVtcGluZyBvdXQgYXJlIGBIVUdFVExCRlNgIGFuZCBgTlVNQWAsIG9idmlvdXNseS4gQnV0IGhvbGQgb24sIHdlIGNhbid0IGZvcmdldCBgQ1BVU0VUU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlzIHJlbGV2YW50IHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBDUFVTRVRTYCBhbmQgbWFrZSBzdXJlIGl0J3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBvdmVyYWxsIHNldHVwLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIE5VTUEgYW5kIGh1Z2UgcGFnZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDc6MDguMjAyNTY2NTE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ3Mjc0OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDUFVTRVRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMjcwPWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbi0tXFxuaW5pdC9LY29uZmlnLTEyODUtXFxuaW5pdC9LY29uZmlnOjEyODY6Y29uZmlnIENQVVNFVFNcXG5pbml0L0tjb25maWctMTI4Ny1cXHRib29sIFxcXCJDcHVzZXQgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMjk4LVxcbmluaXQvS2NvbmZpZzoxMjk5OmNvbmZpZyBDUFVTRVRTX1YxXFxuaW5pdC9LY29uZmlnLTEzMDAtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA3OjA5Ljk0OTg0NTQ2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzIyODA0MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBTdXJwbHVzIE1lbW9yeSBQb2xpY3kgVGVzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRlc3QsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgSFVHRVRMQkZTYCwgYE5VTUFgLCBhbmQgYENQVVNFVFNgLiBJIHJlbWVtYmVyIG5vdyB0aGF0IGBOVU1BYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgdG8gZXZlbiBtYWtlIHNlbnNlLCBhbmQgdGhlIHRlc3QgY29kZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jYCBleHBsaWNpdGx5IHVzZXMgYG51bWFfYXZhaWxhYmxlKClgLiBJdCdzIGNsZWFybHkgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYG51bWFfYmluZGAgYW5kIGBudW1hX2JpdG1hc2tfc2V0Yml0YCwgc28gYE5VTUFgIGlzIGRlZmluaXRlbHkgaW4gcGxheSBoZXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGJ5IGRvdWJsZS1jaGVja2luZyBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYCBpbiBgbW0vaHVnZXRsYi5jYC4gUmlnaHQsIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB1dGlsaXplIGBhbGxvd2VkX21lbXNfbnIoaClgLiBUaGUgdGVzdCBpcyBwcmVjaXNlbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UgaW4gYmVoYXZpb3IuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcywgYW5kIGl0J3MgbWFraW5nIHN1cmUgaXQgcmVzcGVjdHMgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0J3MgYWRkaW5nIHRoaXMgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIGZ1enppbmcgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHdlIGFsbG9jYXRlIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciB2YXJpb3VzIG1lbXBvbGljaWVzLlxuXG5TbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYW5kIGBhbGxvd2VkX21lbXNfbnJgLiBBbmQgdGhlIGVzc2VudGlhbCBjb25maWdzIHdlIG5lZWQgdG8gaGF2ZSBlbmFibGVkIGFyZSBgSFVHRVRMQkZTYCwgYE5VTUFgLCBhbmQgYENQVVNFVFNgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBBbmQgSSB0aGluayBgYWxsb3dlZF9tZW1zX25yYCBpcyBhbHNvIHN0YXRpYz8gWWVzLCBpdCBpcy5cblxuT2theSwgSSd2ZSBnb3QgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbi4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4NiwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDc6MTYuNjcyNjU0MDM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjY2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiQ1BVU0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIkNQVVNFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiLFxuICAgIFwiYWxsb3dlZF9tZW1zX25yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB0byByZXNwZWN0IG1lbXBvbGljaWVzIGFuZCBjcHVzZXRzLiBJdCBhZGRzIGEgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgd2hlbiBhbGxvY2F0aW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciBkaWZmZXJlbnQgbWVtcG9saWNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowhxpp5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 04:52:38 +0000 UTC FinishedAt: 2026-07-08 05:07:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b41df707b6d7b7ae6188c6fc37ba81859293cb94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "CPUSETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "b41df707b6d7b7ae6188c6fc37ba81859293cb94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA", "CPUSETS" ], "series_id": "21b57391-cb05-4d67-b2ef-2fd27c53ca67" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gather_surplus_pages", "allowed_mems_nr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O0NQVVNFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYXRoZXJfc3VycGx1c19wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvd2VkX21lbXNfbnImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB0byByZXNwZWN0IG1lbXBvbGljaWVzIGFuZCBjcHVzZXRzLiBJdCBhZGRzIGEgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgd2hlbiBhbGxvY2F0aW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciBkaWZmZXJlbnQgbWVtcG9saWNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzI2ZDc3ZDg5YTZiOTE0ZjMwMGU4NTJlZmUxYThmNmZhMjAyMTljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAwNTowNjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGYyNGJmNDliZTA0N2UzLi5mNWU2NzhlOTk3MjFlMSAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMjI1NSw2ICYjNDM7MjI1NSwyMyBAQCBzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbiYjNDM7e1xuJiM0MztcdGludCBub2RlO1xuJiM0MztcdHVuc2lnbmVkIGludCBuciA9IDA7XG4mIzQzO1x0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4mIzQzO1x0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4mIzQzO1xuJiM0MztcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbiYjNDM7XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4mIzQzO1x0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbiYjNDM7XHRcdFx0bnIgJiM0Mzs9IGFycmF5W25vZGVdO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cbiAgKiBvZiBzaXplICYjMzk7ZGVsdGEmIzM5Oy5cbkBAIC0yMjc3LDcgJiM0MzsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuIFx0XHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbiYjNDM7XHRuZWVkZWQgPSBtYXhfdChsb25nLCAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxuJiM0MztcdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzYz0gMCkge1xuIFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOz0gZGVsdGE7XG4gXHRcdHJldHVybiAwO1xuQEAgLTIzMTEsOCAmIzQzOzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHQgKiBiZWNhdXNlIGVpdGhlciByZXN2X2h1Z2VfcGFnZXMgb3IgZnJlZV9odWdlX3BhZ2VzIG1heSBoYXZlIGNoYW5nZWQuXG4gXHQgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuLVx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpO1xuJiM0MztcdG5lZWRlZCA9IG1heF90KGxvbmcsICgoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpIC0gYWxsb2NhdGVkKSxcbiYjNDM7XHRcdFx0KChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuJiM0MztcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzZSAwKSB7XG4gXHRcdGlmIChhbGxvY19vaylcbiBcdFx0XHRnb3RvIHJldHJ5O1xuQEAgLTQ1MTMsMjMgJiM0Mzs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxuIH1cbiBfX3NldHVwKFwmIzM0O2h1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XCYjMzQ7LCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKTtcbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLXtcbi1cdGludCBub2RlO1xuLVx0dW5zaWduZWQgaW50IG5yID0gMDtcbi1cdG5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrO1xuLVx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4tXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbi1cbi1cdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbi1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbi1cdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4tXHRcdFx0bnIgJiM0Mzs9IGFycmF5W25vZGVdO1xuLVx0fVxuLVxuLVx0cmV0dXJuIG5yO1xuLX1cbi1cbiB2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBzb2Z0LWRpcnR5XG5AQCAtMjYwLDYgJiM0MzsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuJiM0MzskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWFcbiYjNDM7XG4gbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2hcbiBcdENDPVwmIzM0OyQoQ0MpXCYjMzQ7IENGTEFHUz1cJiMzNDskKENGTEFHUylcJiMzNDsgLi9jaGVja19jb25maWcuc2hcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTczN2JlZmNkMDY4Njdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xuQEAgLTAsMCAmIzQzOzEsNDkxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXG4mIzQzOyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xuJiM0MzsgKiBkbyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXMsIGJ1dCByYXRoZXIgZm9jdXMgb24gd2hhdCB0aGUga2VybmVsIGNhblxuJiM0MzsgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xuJiM0MzsgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKVxuJiM0MzsjZGVmaW5lIEhQU0laRV9LQiBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCkgXHUwMDNlXHUwMDNlIDEwXG4mIzQzOyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcJiMzNDtcbiYjNDM7I2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGJpdG1hc2sgKipub2RlbWFza3M7XG4mIzQzO2ludCAqbm9kZWlkcztcbiYjNDM7XG4mIzQzO3B0aHJlYWRfdCAqdGhyZWFkcztcbiYjNDM7c3RydWN0IHRocmVhZF9hcmdzIHtcbiYjNDM7XHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XG4mIzQzO1x0aW50IHRvX3Jlc2VydmU7XG4mIzQzO307XG4mIzQzO3N0cnVjdCB0aHJlYWRfYXJncyAqcGVyX3RocmVhZF9hcmdzO1xuJiM0MztwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuJiM0MztwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztpbnQgd2FrZV9jb25kO1xuJiM0MztcbiYjNDM7Y2hhciAqbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqZ19mcmVlX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKmdfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqbjBfbnJfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4xX25yX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztcbiYjNDM7dW5zaWduZWQgbG9uZyBnX2ZyZWVfaHVnZXBhZ2VzLCBnX25yX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBnX3Jlc3ZfaHVnZXBhZ2VzLCBnX3N1cnBsdXNfaHVnZXBhZ2VzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xuJiM0MztcbiYjNDM7XG4mIzQzOy8qIHNldHVwX3BhdGhzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3RyaW5ncyBmb3IgdGhlIHZhcmlvdXMgaHVnZXRsYiBwYWdlIHN5c2ZzXG4mIzQzOyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX3BhdGhzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLFxuJiM0MztcdFx0XHRcJiMzNDsvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNmdfZnJlZV9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O2ZyZWVfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZnX25yX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtyZXN2X2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7c3VycGx1c19odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4wX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtzdXJwbHVzX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtmcmVlX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjFfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZ2V0X2h1Z2VwYWdlX3N0YXRzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZ2V0X2h1Z2VwYWdlX3N0YXRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZWFkX3N5c2ZzKGdfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19mcmVlX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfcmVzdl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMF9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfZnJlZV9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4xX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlnc1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaHVnZXBhZ2UgY29uZmlncyBzbyB0aGlzXG4mIzQzOyAqIHRlc3Qgc3VpdGUgZG9lc24mIzM5O3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX24xX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBodWdlcGFnZSBjb25maWdzIGJlZm9yZSB0aGlzIHRlc3RcbiYjNDM7ICogd2FzIHJhbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgb3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiByZXNldF9odWdlcGFnZXNcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2V0IHN0YXRpYyBodWdldGxiIHBhZ2UgcmVzZXJ2YXRpb25zIHRvIDAuXG4mIzQzOyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmVzZXRfaHVnZXBhZ2VzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAwKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBjYW5fcnVuXG4mIzQzOyAqXG4mIzQzOyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0ZXVpZCgpICE9IDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoZSB0ZXN0IGFzIHJvb3QuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOdW1hIGlzIHVuYXZhaWxhYmxlLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1hX251bV9jb25maWd1cmVkX25vZGVzKCkgXHUwMDNjIDIpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOb3QgZW5vdWdoIG5vZGVzIHRvIHRlc3QuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bWFfbnVtX3Rhc2tfbm9kZXMoKSBcdTAwM2MgMilcbiYjNDM7XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0N1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjbGVhbnVwKGNoYXIgKmVycl9tc2cpXG4mIzQzO3tcbiYjNDM7XHRmcmVlKHBlcl90aHJlYWRfYXJncyk7XG4mIzQzO1x0ZnJlZSh0aHJlYWRzKTtcbiYjNDM7XHRmcmVlKG5vZGVpZHMpO1xuJiM0MztcdGZyZWUobm9kZW1hc2tzKTtcbiYjNDM7XHRmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUoZ19mcmVlX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMF9mcmVlX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjFfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRpZiAoZXJyX21zZylcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhlcnJfbXNnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogc2V0dXBfbm9kZV9pbmZvXG4mIzQzOyAqXG4mIzQzOyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZVxuJiM0MzsgKiByZXNlcnZhdGlvbnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcdGludCBpdGhfbm9kZW1hc2sgPSAwO1xuJiM0MztcbiYjNDM7XHRub2RlaWRzID0gY2FsbG9jKDIsIHNpemVvZihpbnQpKTtcbiYjNDM7XHRub2RlbWFza3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBiaXRtYXNrICopKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpXG4mIzQzO1x0XHRjbGVhbnVwKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBub2RlbWFza3Mgb3Igbm9kZWlkcy5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcbiYjNDM7XHQgKiBpbmRleCBvZiB0aGUgZmlyc3Qgbm9kZSBhdmFpbGFibGUgdG8gdXMsIGFuZCB0aGUgc2Vjb25kIG9mIHRoZSBuZXh0XG4mIzQzO1x0ICogbm9kZSBhdmFpbGFibGUgdG8gdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtYV9udW1fdGFza19ub2RlcygpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG51bWFfYml0bWFza19pc2JpdHNldChudW1hX2dldF9tZW1zX2FsbG93ZWQoKSwgaSkpIHtcbiYjNDM7XHRcdFx0bm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTtcbiYjNDM7XHRcdFx0bm9kZW1hc2tzW2l0aF9ub2RlbWFzayYjNDM7JiM0MztdID0gbnVtYV9iaXRtYXNrX3NldGJpdChcbiYjNDM7XHRcdFx0XHRcdG51bWFfYWxsb2NhdGVfbm9kZW1hc2soKSwgaSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpdGhfbm9kZW1hc2sgIT0gMiB8fCAhbm9kZW1hc2tzWzBdIHx8ICFub2RlbWFza3NbMV0pXG4mIzQzO1x0XHRjbGVhbnVwKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLlwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNldHVwX3RocmVhZHNcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzID0gY2FsbG9jKDIsIHNpemVvZihzdHJ1Y3QgdGhyZWFkX2FyZ3MpKTtcbiYjNDM7XHRpZiAoIXBlcl90aHJlYWRfYXJncylcbiYjNDM7XHRcdGNsZWFudXAoXCYjMzQ7Y2FsbG9jIHRocmVhZCBhcmdzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRocmVhZHMgPSBjYWxsb2MoMiwgc2l6ZW9mKHB0aHJlYWRfdCkpO1xuJiM0MztcdGlmICghdGhyZWFkcylcbiYjNDM7XHRcdGNsZWFudXAoXCYjMzQ7Y2FsbG9jIHRocmVhZHMuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzZXJ2ZV9odWdlcGFnZVxuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXJ2ZSBhIGh1Z2V0bGIgcGFnZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKnJlc2VydmVfaHVnZXBhZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZyAqKSBtbWFwKE5VTEwsIEhQU0laRV9CWVRFUywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRocmVhZF93b3JrXG4mIzQzOyAqXG4mIzQzOyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRocmVhZF9hcmdzICp0X2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzICopIGFyZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nICoqaHVnZXBhZ2VzO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRodWdlcGFnZXMgPSAodW5zaWduZWQgbG9uZyAqKikgY2FsbG9jKHRfYXJncy1cdTAwM2V0b19yZXNlcnZlLFxuJiM0MztcdFx0XHRcdFx0XHRzaXplb2YodW5zaWduZWQgbG9uZyAqKikpO1xuJiM0MztcbiYjNDM7XHQvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqL1xuJiM0MztcdGlmICh0X2FyZ3MtXHUwMDNlbXlfbm9kZW1hc2spXG4mIzQzO1x0XHRudW1hX2JpbmQodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGh1Z2VwYWdlc1tpXSA9IHJlc2VydmVfaHVnZXBhZ2UoKTtcbiYjNDM7XHRcdC8qIFRlc3RzIG1heSBwdXJwb3NlZnVsbHkgdHJ5IHRvIG92ZXJhbGxvY2F0ZSwgc28ganVzdFxuJiM0MztcdFx0ICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0XHR0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZSA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHdoaWxlICghd2FrZV9jb25kKVxuJiM0MztcdFx0cHRocmVhZF9jb25kX3dhaXQoXHUwMDI2Y29uZCwgXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogVHJ5IHRvIGZyZWUgdGhvc2UgaHVnZXRsYiBwYWdlcyAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGtzZnRfcGVycm9yKFwmIzM0O211bm1hcCgpIGZhaWxlZCEgQ2hlY2sgZm9yIGxlYWtlZCBodWdldGxiIHBhZ2VzIVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcdGZyZWUoaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogd2FrZV9jaGlsZHJlblxuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgd2FrZV9jaGlsZHJlbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAxO1xuJiM0MztcdHB0aHJlYWRfY29uZF9icm9hZGNhc3QoXHUwMDI2Y29uZCk7XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2bXV0ZXgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0MVxuJiM0MzsgKlxuJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIGFueXdoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDEodm9pZClcbiYjNDM7e1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0MztcbiYjNDM7XHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAoKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwKSB8fFxuJiM0MztcdFx0XHQgKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSksXG4mIzQzO1x0XHRcdCBcJiMzNDtSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdha2VfY2hpbGRyZW4oKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogdGVzdDJcbiYjNDM7ICpcbiYjNDM7ICogU2FuaXR5IGNoZWNraW5nLCBhdHRlbXB0IHRvIHJlc2VydmUgYSBzdXJwbHVzIGh1Z2V0bGIgcGFnZSB3aXRoXG4mIzQzOyAqIGEgbWVtcG9saWN5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDIodm9pZClcbiYjNDM7e1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcbiYjNDM7XHRcdFx0IFwmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0M1xuJiM0MzsgKlxuJiM0MzsgKiBTZXQgYSBzdGF0aWMgaHVnZXBhZ2UgYW5kIHJlc2VydmUgb2ZmIG5vZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7XG4mIzQzO1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAwO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxuJiM0MztcdFx0XHQgXCYjMzQ7U2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogdGVzdDRcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0MztcbiYjNDM7XHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4mIzQzO1x0XHRcdCBcJiMzNDtSZXNlcnZlIDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogdGVzdDVcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMSBhbmRcbiYjNDM7ICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0NSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbiYjNDM7XHRcdFx0IFwmIzM0O0ludGVudGlvbmFsbHkgb3ZlcmFsbG9jYXRlIGFuZCBmYWlsIGR1ZSB0byBucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBsaW1pdC5cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4odm9pZClcbiYjNDM7e1xuJiM0MztcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbig1KTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfcmVxdWlyZW1lbnRzKCk7XG4mIzQzO1x0c2V0dXBfdGhyZWFkcygpO1xuJiM0MztcdHNldHVwX25vZGVfaW5mbygpO1xuJiM0MztcdHNldHVwX3BhdGhzKCk7XG4mIzQzO1x0c2F2ZV9odWdlcGFnZV9jb25maWdzKCk7XG4mIzQzO1x0d2FrZV9jb25kID0gMDtcbiYjNDM7XG4mIzQzO1x0dGVzdDEoKTtcbiYjNDM7XHR0ZXN0MigpO1xuJiM0MztcdHRlc3QzKCk7XG4mIzQzO1x0dGVzdDQoKTtcbiYjNDM7XHR0ZXN0NSgpO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXBhZ2Utdm1lbW1hcFxuIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiLW1hZHZpc2VcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbiYjNDM7Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwmIzM0OyR7SEFWRV9IVUdFUEFHRVN9XCYjMzQ7ID0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4gXHRucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjcyNmQ3N2Q4OWE2YjkxNGYzMDBlODUyZWZlMWE4ZjZmYTIwMjE5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMDU6MDY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmY1ZTY3OGU5OTcyMWUxIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0yMjU1LDYgJiM0MzsyMjU1LDIzIEBAIHN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX3QgZ2ZwKQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaCkKJiM0Mzt7CiYjNDM7CWludCBub2RlOwomIzQzOwl1bnNpZ25lZCBpbnQgbnIgPSAwOwomIzQzOwlub2RlbWFza190ICptYmluZF9ub2RlbWFzazsKJiM0MzsJdW5zaWduZWQgaW50ICphcnJheSA9IGgtJmd0O2ZyZWVfaHVnZV9wYWdlc19ub2RlOwomIzQzOwlnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKJiM0MzsKJiM0MzsJbWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spOwomIzQzOwlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7CiYjNDM7CQlpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSkKJiM0MzsJCQluciAmIzQzOz0gYXJyYXlbbm9kZV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJbmNyZWFzZSB0aGUgaHVnZXRsYiBwb29sIHN1Y2ggdGhhdCBpdCBjYW4gYWNjb21tb2RhdGUgYSByZXNlcnZhdGlvbgogICogb2Ygc2l6ZSAmIzM5O2RlbHRhJiMzOTsuCkBAIC0yMjc3LDcgJiM0MzsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKQogCQlhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtodWdldGxiX2xvY2spOwotCW5lZWRlZCA9IChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzOwomIzQzOwluZWVkZWQgPSBtYXhfdChsb25nLCAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLAomIzQzOwkJCSgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtJmd0O2ZyZWVfaHVnZV9wYWdlcykpOwogCWlmIChuZWVkZWQgJmx0Oz0gMCkgewogCQloLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0Mzs9IGRlbHRhOwogCQlyZXR1cm4gMDsKQEAgLTIzMTEsOCAmIzQzOzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiAJICogYmVjYXVzZSBlaXRoZXIgcmVzdl9odWdlX3BhZ2VzIG9yIGZyZWVfaHVnZV9wYWdlcyBtYXkgaGF2ZSBjaGFuZ2VkLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCW5lZWRlZCA9IChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0KLQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKTsKJiM0MzsJbmVlZGVkID0gbWF4X3QobG9uZywgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCSgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCiYjNDM7CQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKSkpOwogCWlmIChuZWVkZWQgJmd0OyAwKSB7CiAJCWlmIChhbGxvY19vaykKIAkJCWdvdG8gcmV0cnk7CkBAIC00NTEzLDIzICYjNDM7NDUzMiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXAoY2hhciAqcykKIH0KIF9fc2V0dXAoJiMzNDtodWdlcGFnZV9hbGxvY190aHJlYWRzPSYjMzQ7LCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaCkKLXsKLQlpbnQgbm9kZTsKLQl1bnNpZ25lZCBpbnQgbnIgPSAwOwotCW5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrOwotCXVuc2lnbmVkIGludCAqYXJyYXkgPSBoLSZndDtmcmVlX2h1Z2VfcGFnZXNfbm9kZTsKLQlnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTsKLQotCW1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTsKLQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7Ci0JCWlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKQotCQkJbnIgJiM0Mzs9IGFycmF5W25vZGVdOwotCX0KLQotCXJldHVybiBucjsKLX0KLQogdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3QgaHN0YXRlICpoOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBjZDI0NTk2Y2RkMjdlZC4uNDBkZTA5MzhmMzkzN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xMDYsNiAmIzQzOzEwNiw3IEBAIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndWFyZC1yZWdpb25zCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gbWVyZ2UKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZm9saW9fc3BsaXRfcmFjZV90ZXN0CiYjNDM7VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kKIAogaWZuZXEgKCQoQVJDSCksYXJtNjQpCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gc29mdC1kaXJ0eQpAQCAtMjYwLDYgJiM0MzsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgJiM0Mzs9IC1sbnVtYQogCiAkKE9VVFBVVCkvcm1hcDogTERMSUJTICYjNDM7PSAtbG51bWEKIAomIzQzOyQoT1VUUFVUKS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5OiBMRExJQlMgJiM0Mzs9IC1sbnVtYQomIzQzOwogbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2gKIAlDQz0mIzM0OyQoQ0MpJiMzNDsgQ0ZMQUdTPSYjMzQ7JChDRkxBR1MpJiMzNDsgLi9jaGVja19jb25maWcuc2gKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lNzM3YmVmY2QwNjg2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYwpAQCAtMCwwICYjNDM7MSw0OTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeQomIzQzOyAqCiYjNDM7ICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvCiYjNDM7ICogdGhlIHRyYW5zaWVudCBuYXR1cmUgb2YgY3B1c2V0cyBhbmQgbWVtcG9saWNpZXMuIEFzIHN1Y2gsIHRoZXNlIHRlc3RzCiYjNDM7ICogZG8gbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzLCBidXQgcmF0aGVyIGZvY3VzIG9uIHdoYXQgdGhlIGtlcm5lbCBjYW4KJiM0MzsgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0cwomIzQzOyAqIGFuZCBtZW1wb2xpY2llcyB0byBoZWxwIGNoZWNrIGZvciByZWdyZXNzaW9ucyBpbiB0aGlzIGJlaGF2aW9yLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bnVtYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBIUFNJWkVfQllURVMgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpCiYjNDM7I2RlZmluZSBIUFNJWkVfS0IgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpICZndDsmZ3Q7IDEwCiYjNDM7I2RlZmluZSBHTE9CQUxfU1lTX0hQX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzJiMzNDsKJiM0MzsjZGVmaW5lIE5PREVfU1lTX0hQX1BBVEggJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSV1L2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXMmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBiaXRtYXNrICoqbm9kZW1hc2tzOwomIzQzO2ludCAqbm9kZWlkczsKJiM0MzsKJiM0MztwdGhyZWFkX3QgKnRocmVhZHM7CiYjNDM7c3RydWN0IHRocmVhZF9hcmdzIHsKJiM0MzsJc3RydWN0IGJpdG1hc2sgKm15X25vZGVtYXNrOwomIzQzOwlpbnQgdG9fcmVzZXJ2ZTsKJiM0Mzt9OwomIzQzO3N0cnVjdCB0aHJlYWRfYXJncyAqcGVyX3RocmVhZF9hcmdzOwomIzQzO3B0aHJlYWRfY29uZF90IGNvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CiYjNDM7cHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKJiM0MztpbnQgd2FrZV9jb25kOwomIzQzOwomIzQzO2NoYXIgKm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19mcmVlX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKmdfbnJfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19yZXN2X2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKmdfc3VycGx1c19odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMF9mcmVlX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4wX25yX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqbjFfZnJlZV9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMV9ucl9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoOwomIzQzOwomIzQzO3Vuc2lnbmVkIGxvbmcgZ19mcmVlX2h1Z2VwYWdlcywgZ19ucl9odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBnX3Jlc3ZfaHVnZXBhZ2VzLCBnX3N1cnBsdXNfaHVnZXBhZ2VzOwomIzQzO3Vuc2lnbmVkIGxvbmcgbjBfZnJlZV9odWdlcGFnZXMsIG4wX25yX2h1Z2VwYWdlcywgbjBfc3VycGx1c19odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBuMV9mcmVlX2h1Z2VwYWdlcywgbjFfbnJfaHVnZXBhZ2VzLCBuMV9zdXJwbHVzX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXM7CiYjNDM7CiYjNDM7CiYjNDM7Lyogc2V0dXBfcGF0aHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3RyaW5ncyBmb3IgdGhlIHZhcmlvdXMgaHVnZXRsYiBwYWdlIHN5c2ZzCiYjNDM7ICogcGF0aHMuIFRoZSBzdHJpbmdzIGFyZSB1c2VkIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHN5c2ZzIGZpbGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX3BhdGhzKHZvaWQpCiYjNDM7ewomIzQzOwlhc3ByaW50ZigmYW1wO25yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsCiYjNDM7CQkJJiMzNDsvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O2ZyZWVfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfbnJfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtyZXN2X2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7c3VycGx1c19odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7ZnJlZV9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtzdXJwbHVzX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO24xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBnZXRfaHVnZXBhZ2Vfc3RhdHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmcwomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKQomIzQzO3sKJiM0MzsJcmVhZF9zeXNmcyhnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsICZhbXA7Z19mcmVlX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtnX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCAmYW1wO2dfcmVzdl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgJmFtcDtnX3N1cnBsdXNfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24wX2ZyZWVfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtuMF9ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjBfc3VycGx1c19odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjFfZnJlZV9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgJmFtcDtuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlncwomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpcwomIzQzOyAqIHRlc3Qgc3VpdGUgZG9lc24mIzM5O3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2F2ZV9odWdlcGFnZV9jb25maWdzKHZvaWQpCiYjNDM7ewomIzQzOwlyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAmYW1wO29yaWdfbjBfbnJfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtvcmlnX24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgJmFtcDtvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzCiYjNDM7ICoKJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0CiYjNDM7ICogd2FzIHJhbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiByZXNldF9odWdlcGFnZXMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLgomIzQzOyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKQomIzQzO3sKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7CiYjNDM7CXdyaXRlX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIDApOwomIzQzOwl3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogY2FuX3J1bgomIzQzOyAqCiYjNDM7ICogRG9lcyBzYW5pdHkgY2hlY2tpbmcgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSB0ZXN0cyBjYW4gZXZlbiBydW4uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O1BsZWFzZSBydW4gdGhlIHRlc3QgYXMgcm9vdC5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O051bWEgaXMgdW5hdmFpbGFibGUuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChudW1hX251bV9jb25maWd1cmVkX25vZGVzKCkgJmx0OyAyKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtOb3QgZW5vdWdoIG5vZGVzIHRvIHRlc3QuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChudW1hX251bV90YXNrX25vZGVzKCkgJmx0OyAyKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtDdXJyZW50IG1lbXBvbGljeSBpcyB0b28gcmVzdHJpY3RpdmUuXG4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGNsZWFudXAoY2hhciAqZXJyX21zZykKJiM0Mzt7CiYjNDM7CWZyZWUocGVyX3RocmVhZF9hcmdzKTsKJiM0MzsJZnJlZSh0aHJlYWRzKTsKJiM0MzsJZnJlZShub2RlaWRzKTsKJiM0MzsJZnJlZShub2RlbWFza3MpOwomIzQzOwlmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9mcmVlX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWlmIChlcnJfbXNnKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKGVycl9tc2cpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzZXR1cF9ub2RlX2luZm8KJiM0MzsgKgomIzQzOyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZQomIzQzOyAqIHJlc2VydmF0aW9ucy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwlpbnQgaXRoX25vZGVtYXNrID0gMDsKJiM0MzsKJiM0MzsJbm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7CiYjNDM7CW5vZGVtYXNrcyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IGJpdG1hc2sgKikpOwomIzQzOwomIzQzOwlpZiAoIW5vZGVtYXNrcyB8fCAhbm9kZWlkcykKJiM0MzsJCWNsZWFudXAoJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbm9kZW1hc2tzIG9yIG5vZGVpZHMuJiMzNDspOwomIzQzOwomIzQzOwkvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGUKJiM0MzsJICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dAomIzQzOwkgKiBub2RlIGF2YWlsYWJsZSB0byB1cy4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1hX251bV90YXNrX25vZGVzKCk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobnVtYV9iaXRtYXNrX2lzYml0c2V0KG51bWFfZ2V0X21lbXNfYWxsb3dlZCgpLCBpKSkgewomIzQzOwkJCW5vZGVpZHNbaXRoX25vZGVtYXNrXSA9IGk7CiYjNDM7CQkJbm9kZW1hc2tzW2l0aF9ub2RlbWFzayYjNDM7JiM0MztdID0gbnVtYV9iaXRtYXNrX3NldGJpdCgKJiM0MzsJCQkJCW51bWFfYWxsb2NhdGVfbm9kZW1hc2soKSwgaSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSkKJiM0MzsJCWNsZWFudXAoJiMzNDtGYWlsZWQgdG8gY3JlYXRlIG5vZGVtYXNrcy4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHNldHVwX3RocmVhZHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzZXR1cCBzcGFjZSBmb3IgdGhyZWFkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXR1cF90aHJlYWRzKHZvaWQpCiYjNDM7ewomIzQzOwlwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfYXJncykpOwomIzQzOwlpZiAoIXBlcl90aHJlYWRfYXJncykKJiM0MzsJCWNsZWFudXAoJiMzNDtjYWxsb2MgdGhyZWFkIGFyZ3MuJiMzNDspOwomIzQzOwomIzQzOwl0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTsKJiM0MzsJaWYgKCF0aHJlYWRzKQomIzQzOwkJY2xlYW51cCgmIzM0O2NhbGxvYyB0aHJlYWRzLiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogcmVzZXJ2ZV9odWdlcGFnZQomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2VydmUgYSBodWdldGxiIHBhZ2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZV9odWdlcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nICopIG1tYXAoTlVMTCwgSFBTSVpFX0JZVEVTLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0hVR0VUTEIsIC0xLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGhyZWFkX3dvcmsKJiM0MzsgKgomIzQzOyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgKnRocmVhZF93b3JrKHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aHJlYWRfYXJncyAqdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyAqKSBhcmc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlodWdlcGFnZXMgPSAodW5zaWduZWQgbG9uZyAqKikgY2FsbG9jKHRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZSwKJiM0MzsJCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyAqKikpOwomIzQzOwomIzQzOwkvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqLwomIzQzOwlpZiAodF9hcmdzLSZndDtteV9ub2RlbWFzaykKJiM0MzsJCW51bWFfYmluZCh0X2FyZ3MtJmd0O215X25vZGVtYXNrKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWh1Z2VwYWdlc1tpXSA9IHJlc2VydmVfaHVnZXBhZ2UoKTsKJiM0MzsJCS8qIFRlc3RzIG1heSBwdXJwb3NlZnVsbHkgdHJ5IHRvIG92ZXJhbGxvY2F0ZSwgc28ganVzdAomIzQzOwkJICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0CiYjNDM7CQkgKi8KJiM0MzsJCWlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJCXRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZSA9IGk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi8KJiM0MzsJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwl3aGlsZSAoIXdha2VfY29uZCkKJiM0MzsJCXB0aHJlYWRfY29uZF93YWl0KCZhbXA7Y29uZCwgJmFtcDttdXRleCk7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwomIzQzOwkvKiBUcnkgdG8gZnJlZSB0aG9zZSBodWdldGxiIHBhZ2VzICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0X2FyZ3MtJmd0O3RvX3Jlc2VydmU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobXVubWFwKGh1Z2VwYWdlc1tpXSwgSFBTSVpFX0JZVEVTKSAmbHQ7IDApCiYjNDM7CQkJa3NmdF9wZXJyb3IoJiMzNDttdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwlmcmVlKGh1Z2VwYWdlcyk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiB3YWtlX2NoaWxkcmVuCiYjNDM7ICoKJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHdha2VfY2hpbGRyZW4odm9pZCkKJiM0Mzt7CiYjNDM7CXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKJiM0MzsJd2FrZV9jb25kID0gMTsKJiM0MzsJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmYW1wO2NvbmQpOwomIzQzOwlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO211dGV4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDEKJiM0MzsgKgomIzQzOyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2UgYW55d2hlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdDEodm9pZCkKJiM0Mzt7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzOwl3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gTlVMTDsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CiYjNDM7CXVzbGVlcCg1MDAwMDApOwomIzQzOwomIzQzOwlnZXRfaHVnZXBhZ2Vfc3RhdHMoKTsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdCgoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSkgJmFtcDsmYW1wOwomIzQzOwkJCSAoKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwKSB8fAomIzQzOwkJCSAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSwKJiM0MzsJCQkgJiMzNDtSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxuJiMzNDspOwomIzQzOwomIzQzOwl3YWtlX2NoaWxkcmVuKCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTsKJiM0MzsJd2FrZV9jb25kID0gMDsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3QyCiYjNDM7ICoKJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGgKJiM0MzsgKiBhIG1lbXBvbGljeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKQomIzQzO3sKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0MzsKJiM0MzsJZ2V0X2h1Z2VwYWdlX3N0YXRzKCk7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDMKJiM0MzsgKgomIzQzOyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDA7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAxOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzFdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfbnJfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOwomIzQzOwkJCSBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSwKJiM0MzsJCQkgJiMzNDtTZXQgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJd2FrZV9jaGlsZHJlbigpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTsKJiM0MzsJd2FrZV9jb25kID0gMDsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3Q0CiYjNDM7ICoKJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdDQodm9pZCkKJiM0Mzt7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzOwl3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsJd3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzBdKTsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMV0pOwomIzQzOwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0MzsKJiM0MzsJZ2V0X2h1Z2VwYWdlX3N0YXRzKCk7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJd2FrZV9jaGlsZHJlbigpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTsKJiM0MzsJd2FrZV9jb25kID0gMDsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3Q1CiYjNDM7ICoKJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxIGFuZAomIzQzOyAqIGZhaWwgdG8gb3ZlciBhbGxvY2F0ZSBhbm90aGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Q1KHZvaWQpCiYjNDM7ewomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzFdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfbnJfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOwomIzQzOwkJCSBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSwKJiM0MzsJCQkgJiMzNDtJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7CiYjNDM7CXdha2VfY29uZCA9IDA7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKQomIzQzO3sKJiM0MzsJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJa3NmdF9zZXRfcGxhbig1KTsKJiM0MzsKJiM0MzsJY2hlY2tfcmVxdWlyZW1lbnRzKCk7CiYjNDM7CXNldHVwX3RocmVhZHMoKTsKJiM0MzsJc2V0dXBfbm9kZV9pbmZvKCk7CiYjNDM7CXNldHVwX3BhdGhzKCk7CiYjNDM7CXNhdmVfaHVnZXBhZ2VfY29uZmlncygpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwomIzQzOwl0ZXN0MSgpOwomIzQzOwl0ZXN0MigpOwomIzQzOwl0ZXN0MygpOwomIzQzOwl0ZXN0NCgpOwomIzQzOwl0ZXN0NSgpOwomIzQzOwomIzQzOwlyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTsKJiM0MzsJa3NmdF9maW5pc2hlZCgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggYzE3YjEzM2E4MWQyNDguLmNkMzY4Y2U1OTBhNzRjIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaApAQCAtMjk3LDYgJiM0MzsyOTcsNyBAQCBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2VwYWdlLW1yZW1hcAogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS12bWVtbWFwCiBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZQogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX2RpbwomIzQzO0NBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeQogCiBpZiBbICYjMzQ7JHtIQVZFX0hVR0VQQUdFU30mIzM0OyA9ICYjMzQ7MSYjMzQ7IF07IHRoZW4KIAlucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIFN1cnBsdXMgUGFnZSBHYXRoZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYSBwcmV0dHkgY3JpdGljYWwgcGFydCBvZiB0aGUgaHVnZXBhZ2VzIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gaG93IHN1cnBsdXMgaHVnZSBwYWdlcyBhcmUgZ2F0aGVyZWQsIGFuZCB0aGUga2V5IG1vZGlmaWNhdGlvbiBpbnZvbHZlcyB0aGUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBmdW5jdGlvbi4KCldoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgaXMgdGhpcyBpbmNsdXNpb24gb2YgYGFsbG93ZWRfbWVtc19ucihoKWAgaW4gdGhlIGNhbGN1bGF0aW9ucyBvZiBgbmVlZGVkYC4gRnJvbSB0aGUgY29kZSBzbmlwcGV0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vdyBpbmNvcnBvcmF0ZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdXJwbHVzLiBJdCBpcyBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgdGhlIGNhbGN1bGF0aW9uIGxvZ2ljIGZyb206CgpgYGBjCi0JbmVlZGVkID0gKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLSZndDtmcmVlX2h1Z2VfcGFnZXM7CiYjNDM7CW5lZWRlZCA9IG1heF90KGxvbmcsIChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSksCiYjNDM7CQkJKChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzKSk7CmBgYAphbmQKYGBgYwotCW5lZWRlZCA9IChoLSZndDtyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC0KLQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKTsKJiM0MzsJbmVlZGVkID0gbWF4X3QobG9uZywgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCSgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCiYjNDM7CQkJCShoLSZndDtmcmVlX2h1Z2VfcGFnZXMgJiM0MzsgYWxsb2NhdGVkKSkpOwpgYGAKCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgYWxsb3dlZF9tZW1zX25yKGgpYCBtdXN0IGJlIHNvbWVob3cgY2hlY2tpbmcgdGhlIGN1cnJlbnQgY3B1c2V0IGFuZCBtZW1wb2xpY3kgdG8gcmVmaW5lIHRoZSBzdXJwbHVzIGNhbGN1bGF0aW9uLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0IGFmZmVjdHMgaG93IGh1Z2VwYWdlcyBhcmUgYWxsb3dlZCB0byBiZSBhbGxvY2F0ZWQgYWNyb3NzIG1lbW9yeSBub2Rlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dCBvZiBgYWxsb3dlZF9tZW1zX25yYCB0byB2ZXJpZnkgaXRzIGZ1bmN0aW9uIGhlcmUuCgpPZiBjb3Vyc2UsIHRoZSBjaGFuZ2UgaW4gYG1tL2h1Z2V0bGIuY2AgaXMgYWNjb21wYW5pZWQgYnkgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jYC4gR29vZCwgdGhhdCBtZWFucyB0aGUgZGV2ZWxvcGVycyBhcmUgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGFuZCB0ZXN0aW5nIHRoaXMgbmV3IGJlaGF2aW9yLgoKR2l2ZW4gdGhpcyBpcyBpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzdXJwbHVzIHBhZ2VzLCBJJiMzOTtkIGV4cGVjdCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGF0JiMzOTtzIHRydWUsIGp1c3QgdG8gYmUgc3VyZSwgYnV0IGl0IHNlZW1zIHZlcnkgbGlrZWx5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggbWFrZXMgc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIHJlYWNoYWJsZSwgYW5kIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlncyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yMjU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYi5jLTIyNzgtICovXG5tbS9odWdldGxiLmM6MjI3OTpzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtMjI4MC1cdF9fbXVzdF9ob2xkKFx1MDAyNmh1Z2V0bGJfbG9jaylcbi0tXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtNDY0NS1cdGlmIChkZWx0YSBcdTAwM2UgMCkge1xubW0vaHVnZXRsYi5jOjQ2NDY6XHRcdGlmIChnYXRoZXJfc3VycGx1c19wYWdlcyhoLCBkZWx0YSkgXHUwMDNjIDApXG5tbS9odWdldGxiLmMtNDY0Ny1cdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIENhbGwgQ2hhaW4qKgoKT2theSwgc28gSSBzZWUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBpcyBpbnZva2VkIGJ5IGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHVwd2FyZHMgZ2l2ZXMgbWUgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbGVyIG9mIGBodWdldGxiX2FjY3RfbWVtb3J5YCBpcyBjcnVjaWFsIHRvIGV2YWx1YXRpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIHRoZSBodWdldGxiIHN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9hY2N0X21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE0OT1BZnRlciBjb25zdWx0aW5nIHRoZSByZXNlcnZhdGlvbiBtYXAgYW5kIHN1YnBvb2wsIHRoZSBudW1iZXIgb2YgbmVlZGVkIG5ld1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTA6cmVzZXJ2YXRpb25zIGlzIGtub3duLiAgVGhlIHJvdXRpbmUgaHVnZXRsYl9hY2N0X21lbW9yeSgpIGlzIGNhbGxlZCB0byBjaGVja1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTE6Zm9yIGFuZCB0YWtlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc2VydmF0aW9ucy4gIGh1Z2V0bGJfYWNjdF9tZW1vcnkoKVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTItY2FsbHMgaW50byByb3V0aW5lcyB0aGF0IHBvdGVudGlhbGx5IGFsbG9jYXRlIGFuZCBhZGp1c3Qgc3VycGx1cyBwYWdlIGNvdW50cy5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMxMD10aGUgbWluX2hwYWdlcyBmaWVsZCBvZiBhIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sLiAgQXQgbW91bnQgdGltZSxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MzExOmh1Z2V0bGJfYWNjdF9tZW1vcnkobWluX2hwYWdlcykgaXMgY2FsbGVkIHRvIHJlc2VydmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2ZcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMzEyLWh1Z2UgcGFnZXMuICBJZiB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQsIHRoZSBtb3VudCBmYWlscy5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTU1OD1pbnRvIGFjY291bnQuICBXaGlsZSBjcHVzZXRzIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZSBhcyBtZW1vcnkgcG9saWN5LCB0aGlzXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjU1OTpjb21tZW50IGluIGh1Z2V0bGJfYWNjdF9tZW1vcnkgc3VtcyB1cCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiByZXNlcnZhdGlvbnNcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTYwLWFuZCBjcHVzZXRzL21lbW9yeSBwb2xpY3k6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTExNj1IUEFHRV9SRVNWX09XTkVS5qCH5b+X6KKr6K6+572u77yM5Lul6KGo5piO6K+lVk1B5oul5pyJ6aKE55WZ44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTI2OuWcqOWSqOivouS6humihOeVmeaYoOWwhOWSjOWtkOaxoOS5i+WQju+8jOWwseefpemBk+S6humcgOimgeeahOaWsOmihOeVmeaVsOmHj+OAgmh1Z2V0bGJfYWNjdF9tZW1vcnkoKeWHveaVsOiiq+iwg+eUqOS7peajgOafpVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTI3OuW5tuiOt+WPluaJgOimgeaxgueahOmihOeVmeaVsOmHj+OAgmh1Z2V0bGJfYWNjdF9tZW1vcnkoKeiwg+eUqOWIsOWPr+iDveWIhumFjeWSjOiwg+aVtOWJqeS9memhteaVsOeahOWHveaVsOOAgueEtuiAjO+8jOWcqOi/mVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI4LeS6m+WHveaVsOS4re+8jOS7o+eggeWPquaYr+ajgOafpeS7peehruS/neaciei2s+Wkn+eahOepuumXsueahOW3qOmhteadpeWuuee6s+mihOeVmeOAguWmguaenOacieeahOivne+8jOWFqOWxgOmihOeVmeiuoeaVsHJlc3ZfaHVnZV9wYWdlc1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTIyNj1wYWdlLVx1MDAzZXByaXZhdGXlrZfmrrXmjIflkJHkuI7or6XpobXnm7jlhbPnmoTku7vkvZXlrZDmsaDjgILlpoLmnpxQYWdlUHJpdmF0Zeagh+W/l+iiq+iuvue9ru+8jOWug+ihqOaYjuWFqOWxgOmihOeVmeiuoeaVsFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0NC3lpoLmnpzmjIflrprkuobov5nkuKrpgInpobnvvIzkuI5taW5fc2l6ZeebuOWvueW6lOeahOW3qOmhteeahOaVsOmHj+Wwhuiiq+mihOeVmee7meaWh+S7tuezu+e7n+S9v+eUqOOAgui/meS4quaVsOWtl+WcqOe7k+aehOS9k1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ1Omh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lbW9yeShtaW5faHBhZ2VzKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ2Leiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMzMT1yZWdpb25fY291bnQoKeWcqOino+mZpOengeacieW3qOmhteaYoOWwhOaXtuiiq+iwg+eUqOOAguWcqOengeacieaYoOWwhOS4re+8jOmihOeVmeaYoOWwhOS4reayoeacieadoeebruihqOaYjuWtmOWcqOS4gOS4qumihOeVmeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMC3lnKjkuIDmrrXml7bpl7TlkI7liqDlhaXnmoTjgILlvZPpooTnlZnooqvmt7vliqDml7bvvIzmsqHmnInlsJ3or5XlsIblhoXlrZjnrZbnlaXogIPomZHlnKjlhoXjgILomb3nhLZjcHVzZXRz5LiO5YaF5a2Y562W55Wl5LiNXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo0MTE65a6M5YWo55u45ZCM77yM5L2GaHVnZXRsYl9hY2N0X21lbW9yeeS4reeahOi/meS4quazqOmHiuaAu+e7k+S6humihOeVmeWSjGNwdXNldHMv5YaF5a2Y562W55Wl5LmL6Ze055qE55u45LqS5L2cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC00MTIt55SoOjpcbi0tXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vaHVnZXRsYi5jLTExNi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcbm1tL2h1Z2V0bGIuYy0xMTgtc3RhdGljIHZvaWQgaHVnZXRsYl92bWFfbG9ja19mcmVlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9odWdldGxiLmM9MTM2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi0tXG5tbS9odWdldGxiLmMtMTQ1LVx0XHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcbm1tL2h1Z2V0bGIuYzoxNDY6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cdTAwM2Voc3RhdGUsXG5tbS9odWdldGxiLmMtMTQ3LVx0XHRcdFx0XHRcdC1zcG9vbC1cdTAwM2VtaW5faHBhZ2VzKTtcbi0tXG5tbS9odWdldGxiLmM9MTUyPXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXG4tLVxubW0vaHVnZXRsYi5jLTE2Ni1cbm1tL2h1Z2V0bGIuYzoxNjc6XHRpZiAobWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xubW0vaHVnZXRsYi5jLTE2OC1cdFx0a2ZyZWUoc3Bvb2wpO1xuLS1cbm1tL2h1Z2V0bGIuYz05NTg9dm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL2h1Z2V0bGIuYy05NjctXG5tbS9odWdldGxiLmM6OTY4Olx0XHRpZiAoIWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgMSkpXG5tbS9odWdldGxiLmMtOTY5LVx0XHRcdHJlc2VydmVkID0gdHJ1ZTtcbi0tXG5tbS9odWdldGxiLmM9Mjg5MT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTMwMTYtXHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYzozMDE3Olx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xubW0vaHVnZXRsYi5jLTMwMTgtXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLS1cbm1tL2h1Z2V0bGIuYy0zMDUyLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYzozMDUzOlx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtMzA1NC1cdH1cbi0tXG5tbS9odWdldGxiLmM9NDYwND11bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbi0tXG5tbS9odWdldGxiLmMtNDYxMy1cbm1tL2h1Z2V0bGIuYzo0NjE0OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxubW0vaHVnZXRsYi5jLTQ2MTUte1xuLS1cbm1tL2h1Z2V0bGIuYz00NzA0PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1fb3BfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZXRsYi5jLTQ3MjgtXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHJlc2VydmUpO1xubW0vaHVnZXRsYi5jOjQ3Mjk6XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy00NzMwLVx0fVxuLS1cbm1tL2h1Z2V0bGIuYz02NTU2PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY2NDQtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2NjQ1Olx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNjY0Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubW0vaHVnZXRsYi5jLTY2NjMtXHRcdGlmICh1bmxpa2VseShhZGQgXHUwMDNjIDApKSB7XG5tbS9odWdldGxiLmM6NjY2NDpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNjY2NS1cdFx0XHRlcnIgPSBhZGQ7XG4tLVxubW0vaHVnZXRsYi5jLTY2ODYtXHRcdFx0XHRcdFx0XHRcdGNoZyAtIGFkZCk7XG5tbS9odWdldGxiLmM6NjY4NzpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbm1tL2h1Z2V0bGIuYy02Njg4LVx0XHR9IGVsc2UgaWYgKGhfY2cpIHtcbi0tXG5tbS9odWdldGxiLmMtNjcwOC1cdFx0ICovXG5tbS9odWdldGxiLmM6NjcwOTpcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xubW0vaHVnZXRsYi5jLTY3MTAtXHR9XG4tLVxubW0vaHVnZXRsYi5jPTY3Mzc9bG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcbi0tXG5tbS9odWdldGxiLmMtNjc3Mi1cdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIChjaGcgLSBmcmVlZCkpO1xubW0vaHVnZXRsYi5jOjY3NzM6XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNjc3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCBhbGwgb3ZlciB0aGUgcGxhY2UuIFNlZW1zIGxpa2UgaXQmIzM5O3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgbWFwcGluZyB0aG9zZSBodWdldGxiZnMgZmlsZXMgdXNpbmcgYG1tYXBgIHdpdGggaHVnZSBwYWdlcyDigJMgdGhlIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGZ1bmN0aW9uIGlzIGEga2V5IGVudHJ5IHBvaW50IHRoZXJlLiBTcGVjaWZpY2FsbHksIHRoaXMgdGVzdCwgYGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lgLCBpdCYjMzk7cyBkb2luZyBhbiBhbm9ueW1vdXMsIHByaXZhdGUgbWFwcGluZyB3aXRoIGBNQVBfSFVHRVRMQmAsIHdoaWNoLCBhcyBJIHByZWRpY3RlZCwgd2lsbCBjYWxsIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBUaGF0IGluIHR1cm4gY2FsbHMgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIHdoaWNoIHdpbGwgY2FsbCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLiBFeGNlbGxlbnQuIFRoaXMgY29uZmlybXMgbXkgaHlwb3RoZXNpcy4gSSBzdXNwZWN0ZWQgdGhhdCB0aGUgY29kZSBwYXRoIHdhcyByZWFjaGFibGUsIGFuZCBub3cgSSYjMzk7dmUgY29uZmlybWVkIGl0LgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBhbGxvd2VkX21lbXNfbnJgIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MjI0MT1zdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbi0tXG5tbS9odWdldGxiLmMtMjI1Ny1cbm1tL2h1Z2V0bGIuYzoyMjU4OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiLmMtMjI1OS17XG4tLVxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjk2LVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjIyOTc6XHRuZWVkZWQgPSBtYXhfdChsb25nLCAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxubW0vaHVnZXRsYi5jLTIyOTgtXHRcdFx0KChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xuLS1cbm1tL2h1Z2V0bGIuYy0yMzMxLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjIzMzI6XHRuZWVkZWQgPSBtYXhfdChsb25nLCAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXG5tbS9odWdldGxiLmMtMjMzMy1cdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtXG4tLVxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4tLVxubW0vaHVnZXRsYi5jLTQ2NDgtXG5tbS9odWdldGxiLmM6NDY0OTpcdFx0aWYgKGRlbHRhIFx1MDAzZSBhbGxvd2VkX21lbXNfbnIoaCkpIHtcbm1tL2h1Z2V0bGIuYy00NjUwLVx0XHRcdHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhoLCBkZWx0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MzkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IEEgRGVlcCBEaXZlIGludG8gSHVnZVRMQiBTdXJwbHVzIFBhZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIG1vdmluZyBgYWxsb3dlZF9tZW1zX25yYCBmdXJ0aGVyIHVwIHRoZSBmaWxlLCBtYWtpbmcgaXQgYWNjZXNzaWJsZSB0byBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLiBBIHNlZW1pbmdseSBtaW5vciBzdHJ1Y3R1cmFsIGNoYW5nZSwgYnV0IGl0JiMzOTtzIHRoZSBtb2RpZmljYXRpb24gd2l0aGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgdGhhdCBJIHJlYWxseSBuZWVkIHRvIGFuYWx5emUuIFRoZSBjb2RlJiMzOTtzIGxvZ2ljIGlzIGJlaW5nIHVwZGF0ZWQgdG8gZmFjdG9yIGluIGBhbGxvd2VkX21lbXNfbnIoaClgIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHZhbHVlIG9mIGBuZWVkZWRgLgoKSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGh1Z2V0bGIgc3Vic3lzdGVtLCB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIGZvY3VzIGhhcyB0byBiZSBvbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBzeW1ib2xzIGhlcmUuCgpGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSYjMzk7bSB0aGlua2luZyBgSFVHRVRMQl9QQUdFYCBhbmQgYE5VTUFgIGFyZSBnb2luZyB0byBiZSBrZXksIGFuZCBJIHNob3VsZCBjaGVjayBmb3IgYW55IG90aGVycy4gUmlnaHQsIGBhbGxvd2VkX21lbXNfbnJgIHV0aWxpemVzIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgLiBUaGF0JiMzOTtzIHBvaW50aW5nIG1lIGRpcmVjdGx5IHRvd2FyZCBgQ1BVU0VUU2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzdWJzeXN0ZW1zLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb3dlZF9tZW1zX25yYCBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY3B1c2V0Lmg9ODM9ZXh0ZXJuIG5vZGVtYXNrX3QgY3B1c2V0X21lbXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuaW5jbHVkZS9saW51eC9jcHVzZXQuaDo4NDojZGVmaW5lIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCAoY3VycmVudC1cdTAwM2VtZW1zX2FsbG93ZWQpXG5pbmNsdWRlL2xpbnV4L2NwdXNldC5oLTg1LXZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaD0yMTk9c3RhdGljIGlubGluZSBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjIzLVxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDoyMjQ6I2RlZmluZSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgKG5vZGVfc3RhdGVzW05fTUVNT1JZXSlcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjI1LXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCh2b2lkKSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzQ4ND1zdGF0aWMgdm9pZCB0YXNrX251bWFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1MTUtXHQgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MzUxNjpcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgbm9kZXNfd2VpZ2h0KGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkgPT0gMSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzozNTE3Olx0XHR0cmFjZV9zY2hlZF9za2lwX2NwdXNldF9udW1hKGN1cnJlbnQsIFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1MTgtXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiLmM9MjI1OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjY2LVx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xubW0vaHVnZXRsYi5jOjIyNjc6XHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG5tbS9odWdldGxiLmMtMjI2OC1cdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4tLVxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjkxLVx0aWYgKG1iaW5kX25vZGVtYXNrKVxubW0vaHVnZXRsYi5jOjIyOTI6XHRcdG5vZGVzX2FuZChhbGxvY19ub2RlbWFzaywgKm1iaW5kX25vZGVtYXNrLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xubW0vaHVnZXRsYi5jLTIyOTMtXHRlbHNlXG5tbS9odWdldGxiLmM6MjI5NDpcdFx0YWxsb2Nfbm9kZW1hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG5tbS9odWdldGxiLmMtMjI5NS1cbi0tXG5tbS9tZW1wb2xpY3kuYz00MDQ9c3RhdGljIGludCBtcG9sX3NldF9ub2RlbWFzayhzdHJ1Y3QgbWVtcG9saWN5ICpwb2wsXG4tLVxubW0vbWVtcG9saWN5LmMtNDE4LVx0bm9kZXNfYW5kKG5zYy1cdTAwM2VtYXNrMSxcbm1tL21lbXBvbGljeS5jOjQxOTpcdFx0ICBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XG5tbS9tZW1wb2xpY3kuYy00MjAtXG4tLVxubW0vbWVtcG9saWN5LmMtNDMwLVx0ZWxzZVxubW0vbWVtcG9saWN5LmM6NDMxOlx0XHRwb2wtXHUwMDNldy5jcHVzZXRfbWVtc19hbGxvd2VkID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xubW0vbWVtcG9saWN5LmMtNDMyLVxuLS1cbm1tL21lbXBvbGljeS5jPTExNDc9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTE2My1cdFx0dGFza19sb2NrKGN1cnJlbnQpO1xubW0vbWVtcG9saWN5LmM6MTE2NDpcdFx0Km5tYXNrICA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbm1tL21lbXBvbGljeS5jLTExNjUtXHRcdHRhc2tfdW5sb2NrKGN1cnJlbnQpO1xuLS1cbm1tL29vbV9raWxsLmM9MjQ5PXN0YXRpYyBlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCBvb21fY29udHJvbCAqb2MpXG4tLVxubW0vb29tX2tpbGwuYy0yOTgtXHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzO1xubW0vb29tX2tpbGwuYzoyOTk6XHRcdGZvcl9lYWNoX25vZGVfbWFzayhuaWQsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZClcbm1tL29vbV9raWxsLmMtMzAwLVx0XHRcdG9jLVx1MDAzZXRvdGFscGFnZXMgJiM0Mzs9IG5vZGVfcHJlc2VudF9wYWdlcyhuaWQpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Njg3PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ny1cdFx0XHRcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4LFxubW0vcGFnZV9hbGxvYy5jOjQ3Njg6XHRcdFx0XHRcdFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XG5tbS9wYWdlX2FsbG9jLmMtNDc2OS1cdFx0aWYgKCF6b25lbGlzdF96b25lKHopKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00OTczPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5ODktXHRcdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2ICFhYy1cdTAwM2Vub2RlbWFzaylcbm1tL3BhZ2VfYWxsb2MuYzo0OTkwOlx0XHRcdGFjLVx1MDAzZW5vZGVtYXNrID0gXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xubW0vcGFnZV9hbGxvYy5jLTQ5OTEtXHRcdGVsc2Vcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTE5MD1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01MjM0LVx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcbm1tL3BhZ2VfYWxsb2MuYzo1MjM1Olx0ICogXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIHRvIG9wdGltaXplIHRoZSBmYXN0LXBhdGggYXR0ZW1wdC5cbm1tL3BhZ2VfYWxsb2MuYy01MjM2LVx0ICovXG4tLVxubW0vc2hvd19tZW0uYz0xMTk9c3RhdGljIGJvb2wgc2hvd19tZW1fbm9kZV9za2lwKHVuc2lnbmVkIGludCBmbGFncywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vc2hvd19tZW0uYy0xMjktXHRpZiAoIW5vZGVtYXNrKVxubW0vc2hvd19tZW0uYzoxMzA6XHRcdG5vZGVtYXNrID0gXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xubW0vc2hvd19tZW0uYy0xMzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzM3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYEhVR0VUTEJfUEFHRWAgYW5kIGBOVU1BYCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBleGFtaW5pbmcgYEhVR0VUTEJfUEFHRWAgYW5kIGBOVU1BYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgcmVsYXRpb25zaGlwLCBpZiBhbnksIGJldHdlZW4gdGhlc2UgdHdvPyYjMzQ7IFBlcmhhcHMgdGhleSYjMzk7cmUgaW50ZXJkZXBlbmRlbnQsIG9yIG1heWJlIHRoZXkmIzM5O3JlIG9ydGhvZ29uYWwgZmVhdHVyZXMgdGhhdCBpbnRlcmFjdCBpbiBpbnRlcmVzdGluZyB3YXlzLiBTaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBjYWxscyB0aGVtIG91dCwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgaW1wbGljYXRpb25zOiBodWdlIHBhZ2VzIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgTlVNQSBmb3IgbWFuYWdpbmcgbWVtb3J5IGFjY2VzcyBsYXRlbmN5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB0aGV5IHNwZWNpZnkuIFRoaXMgY291bGQgdGVsbCBhIGdyZWF0IHN0b3J5IGFib3V0IG9wdGltaXphdGlvbiBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgdGhpcyBraW5kIG9mIGFuYWx5c2lzIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2UuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCX1BBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcbmZzL0tjb25maWctMjcyLVxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZy0yNzgtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjU1LVxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY1Ny1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRm91bmRhdGlvbjogSHVnZVRMQiBhbmQgSHVnZVRMQkZTKioKCk9rYXksIHNvIGBIVUdFVExCX1BBR0VgIGlzIHRoZSBrZXkuIFRoYXQgZGVmaW5pdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIGBIVUdFVExCRlNgLiBTbywgaWYgSSBuZWVkIHRvIHdvcmsgd2l0aCBodWdlIHBhZ2VzLCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSByZWFsbHkgYWZ0ZXIgaXMgYEhVR0VUTEJGU2AuIFRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgc2VlIHdoYXQgYEhVR0VUTEJGU2AgaXMgYWxsIGFib3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NTcKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zOgoKKipBbmFseXppbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgQ1BVIGFmZmluaXR5IGhlcmUuIFRoZSBrZXkgcGxheWVycyBqdW1waW5nIG91dCBhcmUgYEhVR0VUTEJGU2AgYW5kIGBOVU1BYCwgb2J2aW91c2x5LiBCdXQgaG9sZCBvbiwgd2UgY2FuJiMzOTt0IGZvcmdldCBgQ1BVU0VUU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlzIHJlbGV2YW50IHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBDUFVTRVRTYCBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIE5VTUEgYW5kIGh1Z2UgcGFnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVTRVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjcwPWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuLS1cbmluaXQvS2NvbmZpZy0xMjg1LVxuaW5pdC9LY29uZmlnOjEyODY6Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMjg3LVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMjk4LVxuaW5pdC9LY29uZmlnOjEyOTk6Y29uZmlnIENQVVNFVFNfVjFcbmluaXQvS2NvbmZpZy0xMzAwLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4NgoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiIFN1cnBsdXMgTWVtb3J5IFBvbGljeSBUZXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYEhVR0VUTEJGU2AsIGBOVU1BYCwgYW5kIGBDUFVTRVRTYC4gSSByZW1lbWJlciBub3cgdGhhdCBgTlVNQWAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIHRvIGV2ZW4gbWFrZSBzZW5zZSwgYW5kIHRoZSB0ZXN0IGNvZGUgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY2AgZXhwbGljaXRseSB1c2VzIGBudW1hX2F2YWlsYWJsZSgpYC4gSXQmIzM5O3MgY2xlYXJseSB1c2luZyBmdW5jdGlvbnMgbGlrZSBgbnVtYV9iaW5kYCBhbmQgYG51bWFfYml0bWFza19zZXRiaXRgLCBzbyBgTlVNQWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuCgpJIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGJ5IGRvdWJsZS1jaGVja2luZyBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYCBpbiBgbW0vaHVnZXRsYi5jYC4gUmlnaHQsIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB1dGlsaXplIGBhbGxvd2VkX21lbXNfbnIoaClgLiBUaGUgdGVzdCBpcyBwcmVjaXNlbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UgaW4gYmVoYXZpb3IuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IFRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGh1Z2V0bGIgbG9naWMgZm9yIGdhdGhlcmluZyBzdXJwbHVzIGh1Z2UgcGFnZXMsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc3VyZSBpdCByZXNwZWN0cyBtZW1wb2xpY2llcyBhbmQgY3B1c2V0cy4gSXQmIzM5O3MgYWRkaW5nIHRoaXMgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIGZ1enppbmcgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHdlIGFsbG9jYXRlIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciB2YXJpb3VzIG1lbXBvbGljaWVzLgoKU28sIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYC4gQW5kIHRoZSBlc3NlbnRpYWwgY29uZmlncyB3ZSBuZWVkIHRvIGhhdmUgZW5hYmxlZCBhcmUgYEhVR0VUTEJGU2AsIGBOVU1BYCwgYW5kIGBDUFVTRVRTYC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBBbmQgSSB0aGluayBgYWxsb3dlZF9tZW1zX25yYCBpcyBhbHNvIHN0YXRpYz8gWWVzLCBpdCBpcy4KCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7Q1BVU0VUUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMwLjk2NzM5ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc4NDYzNjgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIkNQVVNFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiLFxuICAgIFwiYWxsb3dlZF9tZW1zX25yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB0byByZXNwZWN0IG1lbXBvbGljaWVzIGFuZCBjcHVzZXRzLiBJdCBhZGRzIGEgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgd2hlbiBhbGxvY2F0aW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciBkaWZmZXJlbnQgbWVtcG9saWNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMwLjk2NzQwNDc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIyNzg2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNzI2ZDc3ZDg5YTZiOTE0ZjMwMGU4NTJlZmUxYThmNmZhMjAyMTljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDU6MDY6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmY1ZTY3OGU5OTcyMWUxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0yMjU1LDYgKzIyNTUsMjMgQEAgc3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbit7XFxuK1xcdGludCBub2RlO1xcbitcXHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xcbitcXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcXG4rXFx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xcbitcXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4rXFxuK1xcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG4rXFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xcbitcXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG4rXFx0XFx0XFx0bnIgKz0gYXJyYXlbbm9kZV07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBucjtcXG4rfVxcbitcXG4gLypcXG4gICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cXG4gICogb2Ygc2l6ZSAnZGVsdGEnLlxcbkBAIC0yMjc3LDcgKzIyOTQsOCBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuIFxcdFxcdGFsbG9jX25vZGVtYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tXFx0bmVlZGVkID0gKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcztcXG4rXFx0bmVlZGVkID0gbWF4X3QobG9uZywgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcXG4rXFx0XFx0XFx0KChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMpKTtcXG4gXFx0aWYgKG5lZWRlZCBcXHUwMDNjPSAwKSB7XFxuIFxcdFxcdGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArPSBkZWx0YTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTIzMTEsOCArMjMyOSw5IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4gXFx0ICogYmVjYXVzZSBlaXRoZXIgcmVzdl9odWdlX3BhZ2VzIG9yIGZyZWVfaHVnZV9wYWdlcyBtYXkgaGF2ZSBjaGFuZ2VkLlxcbiBcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4tXFx0bmVlZGVkID0gKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXFxuLVxcdFxcdFxcdChoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpO1xcbitcXHRuZWVkZWQgPSBtYXhfdChsb25nLCAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXFxuK1xcdFxcdFxcdCgoaC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cXG4rXFx0XFx0XFx0XFx0KGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcyArIGFsbG9jYXRlZCkpKTtcXG4gXFx0aWYgKG5lZWRlZCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0aWYgKGFsbG9jX29rKVxcbiBcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbkBAIC00NTEzLDIzICs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxcbiB9XFxuIF9fc2V0dXAoXFxcImh1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XFxcIiwgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cCk7XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbi17XFxuLVxcdGludCBub2RlO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xcbi1cXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcXG4tXFx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG4tXFxuLVxcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG4tXFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xcbi1cXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG4tXFx0XFx0XFx0bnIgKz0gYXJyYXlbbm9kZV07XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBucjtcXG4tfVxcbi1cXG4gdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtMTA2LDYgKzEwNiw3IEBAIFRFU1RfR0VOX0ZJTEVTICs9IGd1YXJkLXJlZ2lvbnNcXG4gVEVTVF9HRU5fRklMRVMgKz0gbWVyZ2VcXG4gVEVTVF9HRU5fRklMRVMgKz0gcm1hcFxcbiBURVNUX0dFTl9GSUxFUyArPSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcXG4rVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxcbiBcXG4gaWZuZXEgKCQoQVJDSCksYXJtNjQpXFxuIFRFU1RfR0VOX0ZJTEVTICs9IHNvZnQtZGlydHlcXG5AQCAtMjYwLDYgKzI2MSw4IEBAICQoT1VUUFVUKS9taWdyYXRpb246IExETElCUyArPSAtbG51bWFcXG4gXFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgKz0gLWxudW1hXFxuIFxcbiskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICs9IC1sbnVtYVxcbitcXG4gbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2hcXG4gXFx0Q0M9XFxcIiQoQ0MpXFxcIiBDRkxBR1M9XFxcIiQoQ0ZMQUdTKVxcXCIgLi9jaGVja19jb25maWcuc2hcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3MzdiZWZjZDA2ODY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xcbkBAIC0wLDAgKzEsNDkxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcXG4rICpcXG4rICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXFxuKyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xcbisgKiBkbyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXMsIGJ1dCByYXRoZXIgZm9jdXMgb24gd2hhdCB0aGUga2VybmVsIGNhblxcbisgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xcbisgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cXG4rICovXFxuK1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbnVtYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuK1xcbisjZGVmaW5lIEhQU0laRV9CWVRFUyBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKClcXG4rI2RlZmluZSBIUFNJWkVfS0IgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpIFxcdTAwM2VcXHUwMDNlIDEwXFxuKyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFxcXCIvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzXFxcIlxcbisjZGVmaW5lIE5PREVfU1lTX0hQX1BBVEggXFxcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1xcXCJcXG4rXFxuK3N0cnVjdCBiaXRtYXNrICoqbm9kZW1hc2tzO1xcbitpbnQgKm5vZGVpZHM7XFxuK1xcbitwdGhyZWFkX3QgKnRocmVhZHM7XFxuK3N0cnVjdCB0aHJlYWRfYXJncyB7XFxuK1xcdHN0cnVjdCBiaXRtYXNrICpteV9ub2RlbWFzaztcXG4rXFx0aW50IHRvX3Jlc2VydmU7XFxuK307XFxuK3N0cnVjdCB0aHJlYWRfYXJncyAqcGVyX3RocmVhZF9hcmdzO1xcbitwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xcbitwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xcbitpbnQgd2FrZV9jb25kO1xcbitcXG4rY2hhciAqbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqZ19mcmVlX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKmdfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjBfbnJfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4xX25yX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xcbitcXG4rdW5zaWduZWQgbG9uZyBnX2ZyZWVfaHVnZXBhZ2VzLCBnX25yX2h1Z2VwYWdlcztcXG4rdW5zaWduZWQgbG9uZyBnX3Jlc3ZfaHVnZXBhZ2VzLCBnX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcXG4rdW5zaWduZWQgbG9uZyBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xcbitcXG4rXFxuKy8qIHNldHVwX3BhdGhzXFxuKyAqXFxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgc3RyaW5ncyBmb3IgdGhlIHZhcmlvdXMgaHVnZXRsYiBwYWdlIHN5c2ZzXFxuKyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNldHVwX3BhdGhzKHZvaWQpXFxuK3tcXG4rXFx0YXNwcmludGYoXFx1MDAyNm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsXFxuK1xcdFxcdFxcdFxcXCIvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNmdfZnJlZV9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJmcmVlX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19ucl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNmdfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJyZXN2X2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcInN1cnBsdXNfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJmcmVlX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwic3VycGx1c19odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJzdXJwbHVzX2h1Z2VwYWdlc1xcXCIpO1xcbit9XFxuK1xcbisvKiBnZXRfaHVnZXBhZ2Vfc3RhdHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNpbXBseSBncmFiIGEgYnVuY2ggb2YgdGhlIGh1Z2V0bGIgcGFnZSBtZXRyaWNzIGluIHN5c2ZzXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBnZXRfaHVnZXBhZ2Vfc3RhdHModm9pZClcXG4re1xcbitcXHRyZWFkX3N5c2ZzKGdfZnJlZV9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNmdfZnJlZV9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZnX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2Z19yZXN2X2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm4wX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjFfZnJlZV9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjFfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXMpO1xcbit9XFxuK1xcbisvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3NcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpc1xcbisgKiB0ZXN0IHN1aXRlIGRvZXNuJ3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZClcXG4re1xcbitcXHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2b3JpZ19uMF9ucl9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcXG4rfVxcbitcXG4rLyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXFxuKyAqXFxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBodWdlcGFnZSBjb25maWdzIGJlZm9yZSB0aGlzIHRlc3RcXG4rICogd2FzIHJhbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKVxcbit7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xcbit9XFxuK1xcbisvKiByZXNldF9odWdlcGFnZXNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2V0IHN0YXRpYyBodWdldGxiIHBhZ2UgcmVzZXJ2YXRpb25zIHRvIDAuXFxuKyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVzZXRfaHVnZXBhZ2VzKHZvaWQpXFxuK3tcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7XFxuK1xcdHdyaXRlX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcXG4rfVxcbitcXG4rLyogY2FuX3J1blxcbisgKlxcbisgKiBEb2VzIHNhbml0eSBjaGVja2luZyBmaXJzdCB0byBtYWtlIHN1cmUgdGhlIHRlc3RzIGNhbiBldmVuIHJ1bi5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKVxcbit7XFxuK1xcdGlmIChnZXRldWlkKCkgIT0gMClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhlIHRlc3QgYXMgcm9vdC5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOdW1hIGlzIHVuYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFxcdTAwM2MgMilcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk5vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKG51bWFfbnVtX3Rhc2tfbm9kZXMoKSBcXHUwMDNjIDIpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDdXJyZW50IG1lbXBvbGljeSBpcyB0b28gcmVzdHJpY3RpdmUuXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY2xlYW51cChjaGFyICplcnJfbXNnKVxcbit7XFxuK1xcdGZyZWUocGVyX3RocmVhZF9hcmdzKTtcXG4rXFx0ZnJlZSh0aHJlYWRzKTtcXG4rXFx0ZnJlZShub2RlaWRzKTtcXG4rXFx0ZnJlZShub2RlbWFza3MpO1xcbitcXHRmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUoZ19ucl9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMV9mcmVlX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGlmIChlcnJfbXNnKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coZXJyX21zZyk7XFxuK31cXG4rXFxuKy8qIHNldHVwX25vZGVfaW5mb1xcbisgKlxcbisgKiBDcmVhdGVzIHRoZSBiaXRtYXNrcyB1c2VkIHRvIGlzb2xhdGUgdGVzdCBydW5uZXJzIGFuZCB0aGVpciBodWdldGxiIHBhZ2VcXG4rICogcmVzZXJ2YXRpb25zLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfbm9kZV9pbmZvKHZvaWQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcdGludCBpdGhfbm9kZW1hc2sgPSAwO1xcbitcXG4rXFx0bm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7XFxuK1xcdG5vZGVtYXNrcyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IGJpdG1hc2sgKikpO1xcbitcXG4rXFx0aWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpXFxuK1xcdFxcdGNsZWFudXAoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlbWFza3Mgb3Igbm9kZWlkcy5cXFwiKTtcXG4rXFxuK1xcdC8qIFdhbGsgdGhlIG5vZGVzIGF2YWlsYWJsZSB0byB1cy4gQ3JlYXRlIHR3byBiaXRtYXNrcywgb25lIG9mIHRoZVxcbitcXHQgKiBpbmRleCBvZiB0aGUgZmlyc3Qgbm9kZSBhdmFpbGFibGUgdG8gdXMsIGFuZCB0aGUgc2Vjb25kIG9mIHRoZSBuZXh0XFxuK1xcdCAqIG5vZGUgYXZhaWxhYmxlIHRvIHVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7XFxuK1xcdFxcdFxcdG5vZGVpZHNbaXRoX25vZGVtYXNrXSA9IGk7XFxuK1xcdFxcdFxcdG5vZGVtYXNrc1tpdGhfbm9kZW1hc2srK10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KFxcbitcXHRcXHRcXHRcXHRcXHRudW1hX2FsbG9jYXRlX25vZGVtYXNrKCksIGkpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSlcXG4rXFx0XFx0Y2xlYW51cChcXFwiRmFpbGVkIHRvIGNyZWF0ZSBub2RlbWFza3MuXFxcIik7XFxuK31cXG4rXFxuKy8qIHNldHVwX3RocmVhZHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKVxcbit7XFxuK1xcdHBlcl90aHJlYWRfYXJncyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IHRocmVhZF9hcmdzKSk7XFxuK1xcdGlmICghcGVyX3RocmVhZF9hcmdzKVxcbitcXHRcXHRjbGVhbnVwKFxcXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXFxcIik7XFxuK1xcbitcXHR0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTtcXG4rXFx0aWYgKCF0aHJlYWRzKVxcbitcXHRcXHRjbGVhbnVwKFxcXCJjYWxsb2MgdGhyZWFkcy5cXFwiKTtcXG4rfVxcbitcXG4rLyogcmVzZXJ2ZV9odWdlcGFnZVxcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXJ2ZSBhIGh1Z2V0bGIgcGFnZVxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgKnJlc2VydmVfaHVnZXBhZ2Uodm9pZClcXG4re1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XFxuK31cXG4rXFxuKy8qIHRocmVhZF93b3JrXFxuKyAqXFxuKyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKVxcbit7XFxuK1xcdHN0cnVjdCB0aHJlYWRfYXJncyAqdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyAqKSBhcmc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aHVnZXBhZ2VzID0gKHVuc2lnbmVkIGxvbmcgKiopIGNhbGxvYyh0X2FyZ3MtXFx1MDAzZXRvX3Jlc2VydmUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7XFxuK1xcbitcXHQvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqL1xcbitcXHRpZiAodF9hcmdzLVxcdTAwM2VteV9ub2RlbWFzaylcXG4rXFx0XFx0bnVtYV9iaW5kKHRfYXJncy1cXHUwMDNlbXlfbm9kZW1hc2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcXG4rXFx0XFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xcbitcXHRcXHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcXG4rXFx0XFx0ICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0XFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoaHVnZXBhZ2VzW2ldID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0XFx0dF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlID0gaTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuK1xcdHdoaWxlICghd2FrZV9jb25kKVxcbitcXHRcXHRwdGhyZWFkX2NvbmRfd2FpdChcXHUwMDI2Y29uZCwgXFx1MDAyNm11dGV4KTtcXG4rXFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNm11dGV4KTtcXG4rXFxuK1xcdC8qIFRyeSB0byBmcmVlIHRob3NlIGh1Z2V0bGIgcGFnZXMgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRfYXJncy1cXHUwMDNldG9fcmVzZXJ2ZTsgaSsrKSB7XFxuK1xcdFxcdGlmIChtdW5tYXAoaHVnZXBhZ2VzW2ldLCBIUFNJWkVfQllURVMpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcIm11bm1hcCgpIGZhaWxlZCEgQ2hlY2sgZm9yIGxlYWtlZCBodWdldGxiIHBhZ2VzIVxcXFxuXFxcIik7XFxuK1xcdH1cXG4rXFx0ZnJlZShodWdlcGFnZXMpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyogd2FrZV9jaGlsZHJlblxcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd2FrZV9jaGlsZHJlbih2b2lkKVxcbit7XFxuK1xcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2bXV0ZXgpO1xcbitcXHR3YWtlX2NvbmQgPSAxO1xcbitcXHRwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KFxcdTAwMjZjb25kKTtcXG4rXFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNm11dGV4KTtcXG4rfVxcbitcXG4rLyogdGVzdDFcXG4rICpcXG4rICogU2FuaXR5IGNoZWNraW5nLCBhdHRlbXB0IHRvIHJlc2VydmUgYSBzdXJwbHVzIGh1Z2V0bGIgcGFnZSBhbnl3aGVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3QxKHZvaWQpXFxuK3tcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK1xcbitcXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gTlVMTDtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXG4rXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcXG4rXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbitcXG4rXFx0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoKGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgKChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8XFxuK1xcdFxcdFxcdCAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSksXFxuK1xcdFxcdFxcdCBcXFwiUmVzZXJ2ZSAxIHN1cnBsdXMgaHVnZXBhZ2UgYW55d2hlcmVcXFxcblxcXCIpO1xcbitcXG4rXFx0d2FrZV9jaGlsZHJlbigpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XFxuK1xcdHdha2VfY29uZCA9IDA7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbit9XFxuK1xcbisvKiB0ZXN0MlxcbisgKlxcbisgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGhcXG4rICogYSBtZW1wb2xpY3kuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKVxcbit7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXG4rXFx0cHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcXG4rXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbitcXG4rXFx0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XFxuK1xcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcXG4rXFx0XFx0XFx0IFxcXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMFxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK31cXG4rXFxuKy8qIHRlc3QzXFxuKyAqXFxuKyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDModm9pZClcXG4re1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMDtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxcbitcXHRcXHRcXHQgXFxcIlNldCAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rfVxcbitcXG4rLyogdGVzdDRcXG4rICpcXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMVxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDQodm9pZClcXG4re1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxcbitcXHRcXHRcXHQgXFxcIlJlc2VydmUgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcXFxcblxcXCIpO1xcbitcXG4rXFx0d2FrZV9jaGlsZHJlbigpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK31cXG4rXFxuKy8qIHRlc3Q1XFxuKyAqXFxuKyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTEgYW5kXFxuKyAqIGZhaWwgdG8gb3ZlciBhbGxvY2F0ZSBhbm90aGVyLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDUodm9pZClcXG4re1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDI7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxcbitcXHRcXHRcXHQgXFxcIkludGVudGlvbmFsbHkgb3ZlcmFsbG9jYXRlIGFuZCBmYWlsIGR1ZSB0byBucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyBsaW1pdC5cXFxcblxcXCIpO1xcbitcXG4rXFx0d2FrZV9jaGlsZHJlbigpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGtzZnRfc2V0X3BsYW4oNSk7XFxuK1xcbitcXHRjaGVja19yZXF1aXJlbWVudHMoKTtcXG4rXFx0c2V0dXBfdGhyZWFkcygpO1xcbitcXHRzZXR1cF9ub2RlX2luZm8oKTtcXG4rXFx0c2V0dXBfcGF0aHMoKTtcXG4rXFx0c2F2ZV9odWdlcGFnZV9jb25maWdzKCk7XFxuK1xcdHdha2VfY29uZCA9IDA7XFxuK1xcbitcXHR0ZXN0MSgpO1xcbitcXHR0ZXN0MigpO1xcbitcXHR0ZXN0MygpO1xcbitcXHR0ZXN0NCgpO1xcbitcXHR0ZXN0NSgpO1xcbitcXG4rXFx0cmVzdG9yZV9odWdlcGFnZV9jb25maWdzKCk7XFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggYzE3YjEzM2E4MWQyNDguLmNkMzY4Y2U1OTBhNzRjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5AQCAtMjk3LDYgKzI5Nyw3IEBAIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLW1yZW1hcFxcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdlcGFnZS12bWVtbWFwXFxuIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX2Rpb1xcbitDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XFxuIFxcbiBpZiBbIFxcXCIke0hBVkVfSFVHRVBBR0VTfVxcXCIgPSBcXFwiMVxcXCIgXTsgdGhlblxcbiBcXHRucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMxLjQ1MDM0NzM0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMDE2Nzk2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJOVU1BXCIsXG4gICAgXCJDUFVTRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2F0aGVyX3N1cnBsdXNfcGFnZXNcIixcbiAgICBcImFsbG93ZWRfbWVtc19uclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgZm9yIGdhdGhlcmluZyBzdXJwbHVzIGh1Z2UgcGFnZXMgdG8gcmVzcGVjdCBtZW1wb2xpY2llcyBhbmQgY3B1c2V0cy4gSXQgYWRkcyBhIG5ldyBzZWxmdGVzdCB0byB2ZXJpZnkgdGhpcyBiZWhhdmlvci4gRnV6emluZyB0aGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyIHdoZW4gYWxsb2NhdGluZyBzdXJwbHVzIGh1Z2UgcGFnZXMgdW5kZXIgZGlmZmVyZW50IG1lbXBvbGljaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MjZkNzdkODlhNmI5MTRmMzAwZTg1MmVmZTFhOGY2ZmEyMDIxOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDA1OjA2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBmMjRiZjQ5YmUwNDdlMy4uZjVlNjc4ZTk5NzIxZTEgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTIyNTUsNiArMjI1NSwyMyBAQCBzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuK3tcbitcdGludCBub2RlO1xuK1x0dW5zaWduZWQgaW50IG5yID0gMDtcbitcdG5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrO1xuK1x0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4rXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbitcbitcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbitcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbitcdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4rXHRcdFx0bnIgKz0gYXJyYXlbbm9kZV07XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4rfVxuK1xuIC8qXG4gICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cbiAgKiBvZiBzaXplICdkZWx0YScuXG5AQCAtMjI3Nyw3ICsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuIFx0XHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuK1x0bmVlZGVkID0gbWF4X3QobG9uZywgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbitcdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMpKTtcbiBcdGlmIChuZWVkZWQgXHUwMDNjPSAwKSB7XG4gXHRcdGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICs9IGRlbHRhO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0yMzExLDggKzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHQgKiBiZWNhdXNlIGVpdGhlciByZXN2X2h1Z2VfcGFnZXMgb3IgZnJlZV9odWdlX3BhZ2VzIG1heSBoYXZlIGNoYW5nZWQuXG4gXHQgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXG4tXHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKTtcbitcdG5lZWRlZCA9IG1heF90KGxvbmcsICgoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpIC0gYWxsb2NhdGVkKSxcbitcdFx0XHQoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbitcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyArIGFsbG9jYXRlZCkpKTtcbiBcdGlmIChuZWVkZWQgXHUwMDNlIDApIHtcbiBcdFx0aWYgKGFsbG9jX29rKVxuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtNDUxMywyMyArNDUzMiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXAoY2hhciAqcylcbiB9XG4gX19zZXR1cChcImh1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XCIsIGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXApO1xuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4te1xuLVx0aW50IG5vZGU7XG4tXHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xuLVx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XG4tXHR1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcbi1cdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuLVxuLVx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xuLVx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xuLVx0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbi1cdFx0XHRuciArPSBhcnJheVtub2RlXTtcbi1cdH1cbi1cbi1cdHJldHVybiBucjtcbi19XG4tXG4gdm9pZCBodWdldGxiX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGNkMjQ1OTZjZGQyN2VkLi40MGRlMDkzOGYzOTM3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTEwNiw2ICsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyArPSBndWFyZC1yZWdpb25zXG4gVEVTVF9HRU5fRklMRVMgKz0gbWVyZ2VcbiBURVNUX0dFTl9GSUxFUyArPSBybWFwXG4gVEVTVF9HRU5fRklMRVMgKz0gZm9saW9fc3BsaXRfcmFjZV90ZXN0XG4rVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICs9IHNvZnQtZGlydHlcbkBAIC0yNjAsNiArMjYxLDggQEAgJChPVVRQVVQpL21pZ3JhdGlvbjogTERMSUJTICs9IC1sbnVtYVxuIFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgKz0gLWxudW1hXG4gXG4rJChPVVRQVVQpL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3k6IExETElCUyArPSAtbG51bWFcbitcbiBsb2NhbF9jb25maWcubWsgbG9jYWxfY29uZmlnLmg6IGNoZWNrX2NvbmZpZy5zaFxuIFx0Q0M9XCIkKENDKVwiIENGTEFHUz1cIiQoQ0ZMQUdTKVwiIC4vY2hlY2tfY29uZmlnLnNoXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3MzdiZWZjZDA2ODY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbkBAIC0wLDAgKzEsNDkxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbisgKlxuKyAqIFJlc2VydmluZyBzdXJwbHVzIGh1Z2VwYWdlcyB3aXRoaW4gbWVtcG9saWNpZXMgaXMgcXVpdGUgdHJpY2t5IGR1ZSB0b1xuKyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xuKyAqIGRvIG5vdCBjb3ZlciBhbGwgZWRnZSBjYXNlcywgYnV0IHJhdGhlciBmb2N1cyBvbiB3aGF0IHRoZSBrZXJuZWwgY2FuXG4rICogY3VycmVudGx5IGRvIHRvIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZXMgaW4gdGhlIHByZXNlbmNlIG9mIGNwdXNldHNcbisgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cbisgKi9cbitcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY251bWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuK1xuKyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKVxuKyNkZWZpbmUgSFBTSVpFX0tCIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSBcdTAwM2VcdTAwM2UgMTBcbisjZGVmaW5lIEdMT0JBTF9TWVNfSFBfUEFUSCBcIi9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcIlxuKyNkZWZpbmUgTk9ERV9TWVNfSFBfUEFUSCBcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wiXG4rXG4rc3RydWN0IGJpdG1hc2sgKipub2RlbWFza3M7XG4raW50ICpub2RlaWRzO1xuK1xuK3B0aHJlYWRfdCAqdGhyZWFkcztcbitzdHJ1Y3QgdGhyZWFkX2FyZ3Mge1xuK1x0c3RydWN0IGJpdG1hc2sgKm15X25vZGVtYXNrO1xuK1x0aW50IHRvX3Jlc2VydmU7XG4rfTtcbitzdHJ1Y3QgdGhyZWFkX2FyZ3MgKnBlcl90aHJlYWRfYXJncztcbitwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuK3B0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7XG4raW50IHdha2VfY29uZDtcbitcbitjaGFyICpucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfcmVzdl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9ucl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfbnJfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbitcbit1bnNpZ25lZCBsb25nIGdfZnJlZV9odWdlcGFnZXMsIGdfbnJfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgZ19yZXN2X2h1Z2VwYWdlcywgZ19zdXJwbHVzX2h1Z2VwYWdlcztcbit1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgbjFfZnJlZV9odWdlcGFnZXMsIG4xX25yX2h1Z2VwYWdlcywgbjFfc3VycGx1c19odWdlcGFnZXM7XG4rdW5zaWduZWQgbG9uZyBvcmlnX24wX25yX2h1Z2VwYWdlcywgb3JpZ19uMV9ucl9odWdlcGFnZXM7XG4rdW5zaWduZWQgbG9uZyBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xuK1xuK1xuKy8qIHNldHVwX3BhdGhzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN0cmluZ3MgZm9yIHRoZSB2YXJpb3VzIGh1Z2V0bGIgcGFnZSBzeXNmc1xuKyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXR1cF9wYXRocyh2b2lkKVxuK3tcbitcdGFzcHJpbnRmKFx1MDAyNm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsXG4rXHRcdFx0XCIvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbitcdFx0XHRIUFNJWkVfS0IsIFwiZnJlZV9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX25yX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4rXHRcdFx0SFBTSVpFX0tCLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNmdfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuK1x0XHRcdEhQU0laRV9LQiwgXCJyZXN2X2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNmdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuK1x0XHRcdEhQU0laRV9LQiwgXCJzdXJwbHVzX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcInN1cnBsdXNfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbitcdFx0XHRIUFNJWkVfS0IsIFwiZnJlZV9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbitcdFx0XHRIUFNJWkVfS0IsIFwibnJfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbitcdFx0XHRIUFNJWkVfS0IsIFwic3VycGx1c19odWdlcGFnZXNcIik7XG4rfVxuK1xuKy8qIGdldF9odWdlcGFnZV9zdGF0c1xuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNpbXBseSBncmFiIGEgYnVuY2ggb2YgdGhlIGh1Z2V0bGIgcGFnZSBtZXRyaWNzIGluIHN5c2ZzXG4rICovXG4rc3RhdGljIHZvaWQgZ2V0X2h1Z2VwYWdlX3N0YXRzKHZvaWQpXG4re1xuK1x0cmVhZF9zeXNmcyhnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfZnJlZV9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX25yX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKGdfcmVzdl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19yZXN2X2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX25yX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfZnJlZV9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfbnJfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXMpO1xuK31cbitcbisvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3NcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBodWdlcGFnZSBjb25maWdzIHNvIHRoaXNcbisgKiB0ZXN0IHN1aXRlIGRvZXNuJ3QgY2xvYmJlciBjb25maWdzIG5lZWRlZCBmb3Igb3RoZXIgdGVzdHMuXG4rICovXG4rc3RhdGljIHZvaWQgc2F2ZV9odWdlcGFnZV9jb25maWdzKHZvaWQpXG4re1xuK1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMF9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbit9XG4rXG4rLyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0XG4rICogd2FzIHJhbi5cbisgKi9cbitzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZClcbit7XG4rXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgb3JpZ19uMF9ucl9odWdlcGFnZXMpO1xuK1x0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjFfbnJfaHVnZXBhZ2VzKTtcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xuK31cbitcbisvKiByZXNldF9odWdlcGFnZXNcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLlxuKyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKVxuK3tcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDApO1xuK1x0d3JpdGVfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4rXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4rXHR3cml0ZV9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4rfVxuK1xuKy8qIGNhbl9ydW5cbisgKlxuKyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKVxuK3tcbitcdGlmIChnZXRldWlkKCkgIT0gMClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoZSB0ZXN0IGFzIHJvb3QuXFxuXCIpO1xuK1xuK1x0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiTnVtYSBpcyB1bmF2YWlsYWJsZS5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIk5vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fdGFza19ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIkN1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXG5cIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNsZWFudXAoY2hhciAqZXJyX21zZylcbit7XG4rXHRmcmVlKHBlcl90aHJlYWRfYXJncyk7XG4rXHRmcmVlKHRocmVhZHMpO1xuK1x0ZnJlZShub2RlaWRzKTtcbitcdGZyZWUobm9kZW1hc2tzKTtcbitcdGZyZWUobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKGdfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShuMF9mcmVlX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjBfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjFfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4xX25yX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4rXHRpZiAoZXJyX21zZylcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKGVycl9tc2cpO1xuK31cbitcbisvKiBzZXR1cF9ub2RlX2luZm9cbisgKlxuKyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZVxuKyAqIHJlc2VydmF0aW9ucy5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZClcbit7XG4rXHRpbnQgaTtcbitcdGludCBpdGhfbm9kZW1hc2sgPSAwO1xuK1xuK1x0bm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7XG4rXHRub2RlbWFza3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBiaXRtYXNrICopKTtcbitcbitcdGlmICghbm9kZW1hc2tzIHx8ICFub2RlaWRzKVxuK1x0XHRjbGVhbnVwKFwiRmFpbGVkIHRvIGFsbG9jYXRlIG5vZGVtYXNrcyBvciBub2RlaWRzLlwiKTtcbitcbitcdC8qIFdhbGsgdGhlIG5vZGVzIGF2YWlsYWJsZSB0byB1cy4gQ3JlYXRlIHR3byBiaXRtYXNrcywgb25lIG9mIHRoZVxuK1x0ICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dFxuK1x0ICogbm9kZSBhdmFpbGFibGUgdG8gdXMuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSsrKSB7XG4rXHRcdGlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7XG4rXHRcdFx0bm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTtcbitcdFx0XHRub2RlbWFza3NbaXRoX25vZGVtYXNrKytdID0gbnVtYV9iaXRtYXNrX3NldGJpdChcbitcdFx0XHRcdFx0bnVtYV9hbGxvY2F0ZV9ub2RlbWFzaygpLCBpKTtcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSlcbitcdFx0Y2xlYW51cChcIkZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLlwiKTtcbit9XG4rXG4rLyogc2V0dXBfdGhyZWFkc1xuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNldHVwX3RocmVhZHModm9pZClcbit7XG4rXHRwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfYXJncykpO1xuK1x0aWYgKCFwZXJfdGhyZWFkX2FyZ3MpXG4rXHRcdGNsZWFudXAoXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXCIpO1xuK1xuK1x0dGhyZWFkcyA9IGNhbGxvYygyLCBzaXplb2YocHRocmVhZF90KSk7XG4rXHRpZiAoIXRocmVhZHMpXG4rXHRcdGNsZWFudXAoXCJjYWxsb2MgdGhyZWFkcy5cIik7XG4rfVxuK1xuKy8qIHJlc2VydmVfaHVnZXBhZ2VcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNlcnZlIGEgaHVnZXRsYiBwYWdlXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgKnJlc2VydmVfaHVnZXBhZ2Uodm9pZClcbit7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4rfVxuK1xuKy8qIHRocmVhZF93b3JrXG4rICpcbisgKiBUZXN0IHJ1bm5lcnMuIFBlcmZvcm1zIHRoZSB3b3JrIG9mIHJlc2VydmluZyBhbmQgZnJlZWluZyBodWdldGxiIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkICp0aHJlYWRfd29yayh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHRocmVhZF9hcmdzICp0X2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzICopIGFyZztcbitcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XG4rXHRpbnQgaTtcbitcbitcdGh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLVx1MDAzZXRvX3Jlc2VydmUsXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcgKiopKTtcbitcbitcdC8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovXG4rXHRpZiAodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKVxuK1x0XHRudW1hX2JpbmQodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xuK1x0XHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcbitcdFx0ICogZmFsbHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0XG4rXHRcdCAqL1xuK1x0XHRpZiAoaHVnZXBhZ2VzW2ldID09IE1BUF9GQUlMRUQpIHtcbitcdFx0XHR0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZSA9IGk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIEdvIHRvIHNsZWVwIHVudGlsIG1haW4gdGhyZWFkIHdha2VzIHVzIHVwICovXG4rXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuK1x0d2hpbGUgKCF3YWtlX2NvbmQpXG4rXHRcdHB0aHJlYWRfY29uZF93YWl0KFx1MDAyNmNvbmQsIFx1MDAyNm11dGV4KTtcbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbitcbitcdC8qIFRyeSB0byBmcmVlIHRob3NlIGh1Z2V0bGIgcGFnZXMgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9wZXJyb3IoXCJtdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcXG5cIik7XG4rXHR9XG4rXHRmcmVlKGh1Z2VwYWdlcyk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyogd2FrZV9jaGlsZHJlblxuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHdha2UgY2hpbGRyZW4gdGhyZWFkcy5cbisgKi9cbitzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpXG4re1xuK1x0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbitcdHdha2VfY29uZCA9IDE7XG4rXHRwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KFx1MDAyNmNvbmQpO1xuK1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2bXV0ZXgpO1xuK31cbitcbisvKiB0ZXN0MVxuKyAqXG4rICogU2FuaXR5IGNoZWNraW5nLCBhdHRlbXB0IHRvIHJlc2VydmUgYSBzdXJwbHVzIGh1Z2V0bGIgcGFnZSBhbnl3aGVyZS5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0MSh2b2lkKVxuK3tcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXG4rXHR1c2xlZXAoNTAwMDAwKTtcbitcbitcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdCgoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICgobjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwKSB8fFxuK1x0XHRcdCAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSksXG4rXHRcdFx0IFwiUmVzZXJ2ZSAxIHN1cnBsdXMgaHVnZXBhZ2UgYW55d2hlcmVcXG5cIik7XG4rXG4rXHR3YWtlX2NoaWxkcmVuKCk7XG4rXHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XG4rXHR3YWtlX2NvbmQgPSAwO1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rfVxuK1xuKy8qIHRlc3QyXG4rICpcbisgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGhcbisgKiBhIG1lbXBvbGljeS5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKVxuK3tcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMFxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDNcbisgKlxuKyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpXG4re1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rXG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcbitcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbitcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMDtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbitcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4rXG4rXHR1c2xlZXAoNTAwMDAwKTtcbitcbitcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4rXHRcdFx0IFwiU2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK31cbitcbisvKiB0ZXN0NFxuKyAqXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMVxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3Q0KHZvaWQpXG4re1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rXG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcbitcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbitcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbitcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbitcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4rXG4rXHR1c2xlZXAoNTAwMDAwKTtcbitcbitcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuK1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4rXHRcdFx0IFwiUmVzZXJ2ZSAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDVcbisgKlxuKyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTEgYW5kXG4rICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdDUodm9pZClcbit7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbitcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbitcdFx0XHQgXCJJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRrc2Z0X3NldF9wbGFuKDUpO1xuK1xuK1x0Y2hlY2tfcmVxdWlyZW1lbnRzKCk7XG4rXHRzZXR1cF90aHJlYWRzKCk7XG4rXHRzZXR1cF9ub2RlX2luZm8oKTtcbitcdHNldHVwX3BhdGhzKCk7XG4rXHRzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXG4rXHR0ZXN0MSgpO1xuK1x0dGVzdDIoKTtcbitcdHRlc3QzKCk7XG4rXHR0ZXN0NCgpO1xuK1x0dGVzdDUoKTtcbitcbitcdHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncygpO1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiArMjk3LDcgQEAgQ0FURUdPUlk9XCJodWdldGxiXCIgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLXZtZW1tYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbitDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwiJHtIQVZFX0hVR0VQQUdFU31cIiA9IFwiMVwiIF07IHRoZW5cbiBcdG5yX2h1Z2VwYWdlc190bXA9JChjYXQgL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjMxLjQ1MDM0ODU2NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MjE1Nzg1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIFN1cnBsdXMgUGFnZSBHYXRoZXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIGEgcHJldHR5IGNyaXRpY2FsIHBhcnQgb2YgdGhlIGh1Z2VwYWdlcyBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9odWdldGxiLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIGhvdyBzdXJwbHVzIGh1Z2UgcGFnZXMgYXJlIGdhdGhlcmVkLCBhbmQgdGhlIGtleSBtb2RpZmljYXRpb24gaW52b2x2ZXMgdGhlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgZnVuY3Rpb24uXG5cbldoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyBpcyB0aGlzIGluY2x1c2lvbiBvZiBgYWxsb3dlZF9tZW1zX25yKGgpYCBpbiB0aGUgY2FsY3VsYXRpb25zIG9mIGBuZWVkZWRgLiBGcm9tIHRoZSBjb2RlIHNuaXBwZXQsIGl0IGxvb2tzIGxpa2UgaXQncyBub3cgaW5jb3Jwb3JhdGVkIHRvIGRldGVybWluZSB0aGUgc3VycGx1cy4gSXQgaXMgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHRoZSBjYWxjdWxhdGlvbiBsb2dpYyBmcm9tOlxuXG5gYGBjXG4tXHRuZWVkZWQgPSAoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbitcdG5lZWRlZCA9IG1heF90KGxvbmcsIChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSksXG4rXHRcdFx0KChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG5gYGBcbmFuZFxuYGBgY1xuLVx0bmVlZGVkID0gKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbi1cdFx0XHQoaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpO1xuK1x0bmVlZGVkID0gbWF4X3QobG9uZywgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxuK1x0XHRcdCgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxuK1x0XHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKSkpO1xuYGBgXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgYWxsb3dlZF9tZW1zX25yKGgpYCBtdXN0IGJlIHNvbWVob3cgY2hlY2tpbmcgdGhlIGN1cnJlbnQgY3B1c2V0IGFuZCBtZW1wb2xpY3kgdG8gcmVmaW5lIHRoZSBzdXJwbHVzIGNhbGN1bGF0aW9uLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGF0IGFmZmVjdHMgaG93IGh1Z2VwYWdlcyBhcmUgYWxsb3dlZCB0byBiZSBhbGxvY2F0ZWQgYWNyb3NzIG1lbW9yeSBub2Rlcy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dCBvZiBgYWxsb3dlZF9tZW1zX25yYCB0byB2ZXJpZnkgaXRzIGZ1bmN0aW9uIGhlcmUuXG5cbk9mIGNvdXJzZSwgdGhlIGNoYW5nZSBpbiBgbW0vaHVnZXRsYi5jYCBpcyBhY2NvbXBhbmllZCBieSBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNgLiBHb29kLCB0aGF0IG1lYW5zIHRoZSBkZXZlbG9wZXJzIGFyZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgYW5kIHRlc3RpbmcgdGhpcyBuZXcgYmVoYXZpb3IuXG5cbkdpdmVuIHRoaXMgaXMgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBpdCdzIGRlYWxpbmcgd2l0aCBzdXJwbHVzIHBhZ2VzLCBJJ2QgZXhwZWN0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoYXQncyB0cnVlLCBqdXN0IHRvIGJlIHN1cmUsIGJ1dCBpdCBzZWVtcyB2ZXJ5IGxpa2VseS4gTGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggbWFrZXMgc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIHJlYWNoYWJsZSwgYW5kIGVuc3VyZSB0aGUgcmlnaHQgY29uZmlncyBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDY6MzcuODcxOTI5Mjk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODM3NzIxODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2F0aGVyX3N1cnBsdXNfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjc4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyMjc5OnN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG5tbS9odWdldGxiLmMtMjI4MC1cXHRfX211c3RfaG9sZChcXHUwMDI2aHVnZXRsYl9sb2NrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0NS1cXHRpZiAoZGVsdGEgXFx1MDAzZSAwKSB7XFxubW0vaHVnZXRsYi5jOjQ2NDY6XFx0XFx0aWYgKGdhdGhlcl9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKSBcXHUwMDNjIDApXFxubW0vaHVnZXRsYi5jLTQ2NDctXFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjM5Ljg1NTcwODk4OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Nzk5NzAwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIGludm9rZWQgYnkgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGBodWdldGxiX2FjY3RfbWVtb3J5YCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB1cHdhcmRzIGdpdmVzIG1lIGNvbnRleHQuIEtub3dpbmcgdGhlIGNhbGxlciBvZiBgaHVnZXRsYl9hY2N0X21lbW9yeWAgaXMgY3J1Y2lhbCB0byBldmFsdWF0aW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBhY2NvdW50aW5nIHdpdGhpbiB0aGUgaHVnZXRsYiBzeXN0ZW0uIExldCdzIGRpZyBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDY6NDIuNzM1NjgxMzY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTU2Mjk2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9hY2N0X21lbW9yeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE0OT1BZnRlciBjb25zdWx0aW5nIHRoZSByZXNlcnZhdGlvbiBtYXAgYW5kIHN1YnBvb2wsIHRoZSBudW1iZXIgb2YgbmVlZGVkIG5ld1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUwOnJlc2VydmF0aW9ucyBpcyBrbm93bi4gIFRoZSByb3V0aW5lIGh1Z2V0bGJfYWNjdF9tZW1vcnkoKSBpcyBjYWxsZWQgdG8gY2hlY2tcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MTpmb3IgYW5kIHRha2UgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzZXJ2YXRpb25zLiAgaHVnZXRsYl9hY2N0X21lbW9yeSgpXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNTItY2FsbHMgaW50byByb3V0aW5lcyB0aGF0IHBvdGVudGlhbGx5IGFsbG9jYXRlIGFuZCBhZGp1c3Qgc3VycGx1cyBwYWdlIGNvdW50cy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MzEwPXRoZSBtaW5faHBhZ2VzIGZpZWxkIG9mIGEgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wuICBBdCBtb3VudCB0aW1lLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MzExOmh1Z2V0bGJfYWNjdF9tZW1vcnkobWluX2hwYWdlcykgaXMgY2FsbGVkIHRvIHJlc2VydmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2ZcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTMxMi1odWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTU1OD1pbnRvIGFjY291bnQuICBXaGlsZSBjcHVzZXRzIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZSBhcyBtZW1vcnkgcG9saWN5LCB0aGlzXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo1NTk6Y29tbWVudCBpbiBodWdldGxiX2FjY3RfbWVtb3J5IHN1bXMgdXAgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gcmVzZXJ2YXRpb25zXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01NjAtYW5kIGNwdXNldHMvbWVtb3J5IHBvbGljeTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMTY9SFBBR0VfUkVTVl9PV05FUuagh+W/l+iiq+iuvue9ru+8jOS7peihqOaYjuivpVZNQeaLpeaciemihOeVmeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjEyNjrlnKjlkqjor6LkuobpooTnlZnmmKDlsITlkozlrZDmsaDkuYvlkI7vvIzlsLHnn6XpgZPkuobpnIDopoHnmoTmlrDpooTnlZnmlbDph4/jgIJodWdldGxiX2FjY3RfbWVtb3J5KCnlh73mlbDooqvosIPnlKjku6Xmo4Dmn6VcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjc65bm26I635Y+W5omA6KaB5rGC55qE6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp6LCD55So5Yiw5Y+v6IO95YiG6YWN5ZKM6LCD5pW05Ymp5L2Z6aG15pWw55qE5Ye95pWw44CC54S26ICM77yM5Zyo6L+ZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTI4LeS6m+WHveaVsOS4re+8jOS7o+eggeWPquaYr+ajgOafpeS7peehruS/neaciei2s+Wkn+eahOepuumXsueahOW3qOmhteadpeWuuee6s+mihOeVmeOAguWmguaenOacieeahOivne+8jOWFqOWxgOmihOeVmeiuoeaVsHJlc3ZfaHVnZV9wYWdlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjI2PXBhZ2UtXFx1MDAzZXByaXZhdGXlrZfmrrXmjIflkJHkuI7or6XpobXnm7jlhbPnmoTku7vkvZXlrZDmsaDjgILlpoLmnpxQYWdlUHJpdmF0Zeagh+W/l+iiq+iuvue9ru+8jOWug+ihqOaYjuWFqOWxgOmihOeVmeiuoeaVsFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ0LeWmguaenOaMh+WumuS6hui/meS4qumAiemhue+8jOS4jm1pbl9zaXpl55u45a+55bqU55qE5beo6aG155qE5pWw6YeP5bCG6KKr6aKE55WZ57uZ5paH5Lu257O757uf5L2/55So44CC6L+Z5Liq5pWw5a2X5Zyo57uT5p6E5L2TXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MjQ1Omh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lbW9yeShtaW5faHBhZ2VzKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0Ni3ooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMzMT1yZWdpb25fY291bnQoKeWcqOino+mZpOengeacieW3qOmhteaYoOWwhOaXtuiiq+iwg+eUqOOAguWcqOengeacieaYoOWwhOS4re+8jOmihOeVmeaYoOWwhOS4reayoeacieadoeebruihqOaYjuWtmOWcqOS4gOS4qumihOeVmeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDEwLeWcqOS4gOauteaXtumXtOWQjuWKoOWFpeeahOOAguW9k+mihOeVmeiiq+a3u+WKoOaXtu+8jOayoeacieWwneivleWwhuWGheWtmOetlueVpeiAg+iZkeWcqOWGheOAguiZveeEtmNwdXNldHPkuI7lhoXlrZjnrZbnlaXkuI1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDo0MTE65a6M5YWo55u45ZCM77yM5L2GaHVnZXRsYl9hY2N0X21lbW9yeeS4reeahOi/meS4quazqOmHiuaAu+e7k+S6humihOeVmeWSjGNwdXNldHMv5YaF5a2Y562W55Wl5LmL6Ze055qE55u45LqS5L2cXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDEyLeeUqDo6XFxuLS1cXG5tbS9odWdldGxiLmM9MTE0PXN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZSBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5tbS9odWdldGxiLmMtMTE2LS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi9cXG5tbS9odWdldGxiLmM6MTE3OnN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKTtcXG5tbS9odWdldGxiLmMtMTE4LXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm1hX2xvY2tfZnJlZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTM2PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDUtXFx0XFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxcbm1tL2h1Z2V0bGIuYzoxNDY6XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShzcG9vbC1cXHUwMDNlaHN0YXRlLFxcbm1tL2h1Z2V0bGIuYy0xNDctXFx0XFx0XFx0XFx0XFx0XFx0LXNwb29sLVxcdTAwM2VtaW5faHBhZ2VzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTI9c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjYtXFxubW0vaHVnZXRsYi5jOjE2NzpcXHRpZiAobWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7XFxubW0vaHVnZXRsYi5jLTE2OC1cXHRcXHRrZnJlZShzcG9vbCk7XFxuLS1cXG5tbS9odWdldGxiLmM9OTU4PXZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy05NjctXFxubW0vaHVnZXRsYi5jOjk2ODpcXHRcXHRpZiAoIWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgMSkpXFxubW0vaHVnZXRsYi5jLTk2OS1cXHRcXHRcXHRyZXNlcnZlZCA9IHRydWU7XFxuLS1cXG5tbS9odWdldGxiLmM9Mjg5MT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAxNi1cXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYzozMDE3OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbm1tL2h1Z2V0bGIuYy0zMDE4LVxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzA1Mi1cXHRcXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmM6MzA1MzpcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTMwNTQtXFx0fVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MDQ9dW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtNDYxMy1cXG5tbS9odWdldGxiLmM6NDYxNDpzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG5tbS9odWdldGxiLmMtNDYxNS17XFxuLS1cXG5tbS9odWdldGxiLmM9NDcwND1zdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ3MjgtXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jOjQ3Mjk6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYy00NzMwLVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02NTU2PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjY0NC1cXHQgKi9cXG5tbS9odWdldGxiLmM6NjY0NTpcXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNjY0Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NjYzLVxcdFxcdGlmICh1bmxpa2VseShhZGQgXFx1MDAzYyAwKSkge1xcbm1tL2h1Z2V0bGIuYzo2NjY0OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNjY2NS1cXHRcXHRcXHRlcnIgPSBhZGQ7XFxuLS1cXG5tbS9odWdldGxiLmMtNjY4Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGcgLSBhZGQpO1xcbm1tL2h1Z2V0bGIuYzo2Njg3OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xcbm1tL2h1Z2V0bGIuYy02Njg4LVxcdFxcdH0gZWxzZSBpZiAoaF9jZykge1xcbi0tXFxubW0vaHVnZXRsYi5jLTY3MDgtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjY3MDk6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xcbm1tL2h1Z2V0bGIuYy02NzEwLVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYz02NzM3PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuLS1cXG5tbS9odWdldGxiLmMtNjc3Mi1cXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAoY2hnIC0gZnJlZWQpKTtcXG5tbS9odWdldGxiLmM6Njc3MzpcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTY3NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjQ0LjY1MTMxNTg5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMxNDYyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZnVuY3Rpb24sIGFuZCBpdCdzIHBvcHBpbmcgdXAgYWxsIG92ZXIgdGhlIHBsYWNlLiBTZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSBtYXBwaW5nIHRob3NlIGh1Z2V0bGJmcyBmaWxlcyB1c2luZyBgbW1hcGAgd2l0aCBodWdlIHBhZ2VzIOKAkyB0aGUgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgZnVuY3Rpb24gaXMgYSBrZXkgZW50cnkgcG9pbnQgdGhlcmUuIFNwZWNpZmljYWxseSwgdGhpcyB0ZXN0LCBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAsIGl0J3MgZG9pbmcgYW4gYW5vbnltb3VzLCBwcml2YXRlIG1hcHBpbmcgd2l0aCBgTUFQX0hVR0VUTEJgLCB3aGljaCwgYXMgSSBwcmVkaWN0ZWQsIHdpbGwgY2FsbCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gVGhhdCBpbiB0dXJuIGNhbGxzIGBodWdldGxiX2FjY3RfbWVtb3J5YCB3aGljaCB3aWxsIGNhbGwgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYC4gRXhjZWxsZW50LiBUaGlzIGNvbmZpcm1zIG15IGh5cG90aGVzaXMuIEkgc3VzcGVjdGVkIHRoYXQgdGhlIGNvZGUgcGF0aCB3YXMgcmVhY2hhYmxlLCBhbmQgbm93IEkndmUgY29uZmlybWVkIGl0LlxuXG5Ob3csIGxldCdzIHR1cm4gb3VyIGF0dGVudGlvbiB0byBgYWxsb3dlZF9tZW1zX25yYCB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg3OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNTowNjo0OC41NzQ0NjkyMjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNDk1MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd2VkX21lbXNfbnJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNDE9c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuLS1cXG5tbS9odWdldGxiLmMtMjI1Ny1cXG5tbS9odWdldGxiLmM6MjI1ODpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0yMjU5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMjc5PXN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjk2LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjIyOTc6XFx0bmVlZGVkID0gbWF4X3QobG9uZywgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcXG5tbS9odWdldGxiLmMtMjI5OC1cXHRcXHRcXHQoKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIzMzEtXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MjMzMjpcXHRuZWVkZWQgPSBtYXhfdChsb25nLCAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXFxubW0vaHVnZXRsYi5jLTIzMzMtXFx0XFx0XFx0KChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0OC1cXG5tbS9odWdldGxiLmM6NDY0OTpcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBhbGxvd2VkX21lbXNfbnIoaCkpIHtcXG5tbS9odWdldGxiLmMtNDY1MC1cXHRcXHRcXHRyZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoaCwgZGVsdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNTowNjo1MC4zMDk0MzA1ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk0MzIxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIERlZXAgRGl2ZSBpbnRvIEh1Z2VUTEIgU3VycGx1cyBQYWdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgbW92aW5nIGBhbGxvd2VkX21lbXNfbnJgIGZ1cnRoZXIgdXAgdGhlIGZpbGUsIG1ha2luZyBpdCBhY2Nlc3NpYmxlIHRvIGBnYXRoZXJfc3VycGx1c19wYWdlc2AuIEEgc2VlbWluZ2x5IG1pbm9yIHN0cnVjdHVyYWwgY2hhbmdlLCBidXQgaXQncyB0aGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIHRoYXQgSSByZWFsbHkgbmVlZCB0byBhbmFseXplLiBUaGUgY29kZSdzIGxvZ2ljIGlzIGJlaW5nIHVwZGF0ZWQgdG8gZmFjdG9yIGluIGBhbGxvd2VkX21lbXNfbnIoaClgIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIHZhbHVlIG9mIGBuZWVkZWRgLlxuXG5JcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwncyBodWdldGxiIHN1YnN5c3RlbSwgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBhbmQgYGFsbG93ZWRfbWVtc19ucmAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgc3ltYm9scyBoZXJlLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSdtIHRoaW5raW5nIGBIVUdFVExCX1BBR0VgIGFuZCBgTlVNQWAgYXJlIGdvaW5nIHRvIGJlIGtleSwgYW5kIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgb3RoZXJzLiBSaWdodCwgYGFsbG93ZWRfbWVtc19ucmAgdXRpbGl6ZXMgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAuIFRoYXQncyBwb2ludGluZyBtZSBkaXJlY3RseSB0b3dhcmQgYENQVVNFVFNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2Ugc3Vic3lzdGVtcy4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGFsbG93ZWRfbWVtc19ucmAgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjU0LjYwMzc1NDcwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NTA4NTE0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jcHVzZXQuaD04Mz1leHRlcm4gbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaDo4NDojZGVmaW5lIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCAoY3VycmVudC1cXHUwMDNlbWVtc19hbGxvd2VkKVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtODUtdm9pZCBjcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg9MjE5PXN0YXRpYyBpbmxpbmUgbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0LmgtMjIzLVxcbmluY2x1ZGUvbGludXgvY3B1c2V0Lmg6MjI0OiNkZWZpbmUgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIChub2RlX3N0YXRlc1tOX01FTU9SWV0pXFxuaW5jbHVkZS9saW51eC9jcHVzZXQuaC0yMjUtc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9pbml0X2N1cnJlbnRfbWVtc19hbGxvd2VkKHZvaWQpIHt9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTM0ODQ9c3RhdGljIHZvaWQgdGFza19udW1hX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM1MTUtXFx0ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzozNTE2OlxcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBub2Rlc193ZWlnaHQoY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSA9PSAxKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzozNTE3OlxcdFxcdHRyYWNlX3NjaGVkX3NraXBfY3B1c2V0X251bWEoY3VycmVudCwgXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zNTE4LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMjU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMjI2Ni1cXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxubW0vaHVnZXRsYi5jOjIyNjc6XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xcbm1tL2h1Z2V0bGIuYy0yMjY4LVxcdFxcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxcbi0tXFxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIyOTEtXFx0aWYgKG1iaW5kX25vZGVtYXNrKVxcbm1tL2h1Z2V0bGIuYzoyMjkyOlxcdFxcdG5vZGVzX2FuZChhbGxvY19ub2RlbWFzaywgKm1iaW5kX25vZGVtYXNrLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xcbm1tL2h1Z2V0bGIuYy0yMjkzLVxcdGVsc2VcXG5tbS9odWdldGxiLmM6MjI5NDpcXHRcXHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG5tbS9odWdldGxiLmMtMjI5NS1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTQwND1zdGF0aWMgaW50IG1wb2xfc2V0X25vZGVtYXNrKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTQxOC1cXHRub2Rlc19hbmQobnNjLVxcdTAwM2VtYXNrMSxcXG5tbS9tZW1wb2xpY3kuYzo0MTk6XFx0XFx0ICBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsIG5vZGVfc3RhdGVzW05fTUVNT1JZXSk7XFxubW0vbWVtcG9saWN5LmMtNDIwLVxcbi0tXFxubW0vbWVtcG9saWN5LmMtNDMwLVxcdGVsc2VcXG5tbS9tZW1wb2xpY3kuYzo0MzE6XFx0XFx0cG9sLVxcdTAwM2V3LmNwdXNldF9tZW1zX2FsbG93ZWQgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxubW0vbWVtcG9saWN5LmMtNDMyLVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTE0Nz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTExNjMtXFx0XFx0dGFza19sb2NrKGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jOjExNjQ6XFx0XFx0Km5tYXNrICA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG5tbS9tZW1wb2xpY3kuYy0xMTY1LVxcdFxcdHRhc2tfdW5sb2NrKGN1cnJlbnQpO1xcbi0tXFxubW0vb29tX2tpbGwuYz0yNDk9c3RhdGljIGVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWluZWRfYWxsb2Moc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4tLVxcbm1tL29vbV9raWxsLmMtMjk4LVxcdFxcdG9jLVxcdTAwM2V0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlcztcXG5tbS9vb21fa2lsbC5jOjI5OTpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobmlkLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpXFxubW0vb29tX2tpbGwuYy0zMDAtXFx0XFx0XFx0b2MtXFx1MDAzZXRvdGFscGFnZXMgKz0gbm9kZV9wcmVzZW50X3BhZ2VzKG5pZCk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDY4Nz1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDc2Ny1cXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LFxcbm1tL3BhZ2VfYWxsb2MuYzo0NzY4OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xcbm1tL3BhZ2VfYWxsb2MuYy00NzY5LVxcdFxcdGlmICghem9uZWxpc3Rfem9uZSh6KSlcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00OTczPXN0YXRpYyBpbmxpbmUgYm9vbCBwcmVwYXJlX2FsbG9jX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDk4OS1cXHRcXHRpZiAoaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2ICFhYy1cXHUwMDNlbm9kZW1hc2spXFxubW0vcGFnZV9hbGxvYy5jOjQ5OTA6XFx0XFx0XFx0YWMtXFx1MDAzZW5vZGVtYXNrID0gXFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG5tbS9wYWdlX2FsbG9jLmMtNDk5MS1cXHRcXHRlbHNlXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE5MD1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTUyMzQtXFx0ICogUmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZW1hc2sgaWYgaXQgd2FzIHBvdGVudGlhbGx5IHJlcGxhY2VkIHdpdGhcXG5tbS9wYWdlX2FsbG9jLmM6NTIzNTpcXHQgKiBcXHUwMDI2Y3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkIHRvIG9wdGltaXplIHRoZSBmYXN0LXBhdGggYXR0ZW1wdC5cXG5tbS9wYWdlX2FsbG9jLmMtNTIzNi1cXHQgKi9cXG4tLVxcbm1tL3Nob3dfbWVtLmM9MTE5PXN0YXRpYyBib29sIHNob3dfbWVtX25vZGVfc2tpcCh1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vc2hvd19tZW0uYy0xMjktXFx0aWYgKCFub2RlbWFzaylcXG5tbS9zaG93X21lbS5jOjEzMDpcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XFxubW0vc2hvd19tZW0uYy0xMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA2OjU2LjI5ODg0NDYzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU4NjM4MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBIVUdFVExCX1BBR0VgIGFuZCBgTlVNQWAgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpbnZvbHZlcyBleGFtaW5pbmcgYEhVR0VUTEJfUEFHRWAgYW5kIGBOVU1BYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTGV0J3MgZGlnIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LCBiZXR3ZWVuIHRoZXNlIHR3bz9cIiBQZXJoYXBzIHRoZXkncmUgaW50ZXJkZXBlbmRlbnQsIG9yIG1heWJlIHRoZXkncmUgb3J0aG9nb25hbCBmZWF0dXJlcyB0aGF0IGludGVyYWN0IGluIGludGVyZXN0aW5nIHdheXMuIFNpbmNlIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIHRoZW0gb3V0LCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGltcGxpY2F0aW9uczogaHVnZSBwYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24sIE5VTUEgZm9yIG1hbmFnaW5nIG1lbW9yeSBhY2Nlc3MgbGF0ZW5jeS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB0aGV5IHNwZWNpZnkuIFRoaXMgY291bGQgdGVsbCBhIGdyZWF0IHN0b3J5IGFib3V0IG9wdGltaXphdGlvbiBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgdGhpcyBraW5kIG9mIGFuYWx5c2lzIGlzIHJpZ2h0IGluIG15IHdoZWVsaG91c2UuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDY6NTkuMjU3NDg0ODIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM3NzQwMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTUtXFxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02NTctXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNTowNzowMS4xOTUyMzAzMDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzODYwMzMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRm91bmRhdGlvbjogSHVnZVRMQiBhbmQgSHVnZVRMQkZTKipcblxuT2theSwgc28gYEhVR0VUTEJfUEFHRWAgaXMgdGhlIGtleS4gVGhhdCBkZWZpbml0aW9uIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgZGlyZWN0bHkgdGllZCB0byBgSFVHRVRMQkZTYC4gU28sIGlmIEkgbmVlZCB0byB3b3JrIHdpdGggaHVnZSBwYWdlcywgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSByZWFsbHkgYWZ0ZXIgaXMgYEhVR0VUTEJGU2AuIFRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZWUgd2hhdCBgSFVHRVRMQkZTYCBpcyBhbGwgYWJvdXQuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA3OjAzLjczMzgzNjM3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzYxMzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA3OjA1LjQ1MTQ1NDIxOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUxMTA5NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9uczpcblxuKipBbmFseXppbmcgdGhlIFJlbGV2YW50IENvbmZpZ3VyYXRpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIENQVSBhZmZpbml0eSBoZXJlLiBUaGUga2V5IHBsYXllcnMganVtcGluZyBvdXQgYXJlIGBIVUdFVExCRlNgIGFuZCBgTlVNQWAsIG9idmlvdXNseS4gQnV0IGhvbGQgb24sIHdlIGNhbid0IGZvcmdldCBgQ1BVU0VUU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWRgIGlzIHJlbGV2YW50IHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBDUFVTRVRTYCBhbmQgbWFrZSBzdXJlIGl0J3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBvdmVyYWxsIHNldHVwLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIE5VTUEgYW5kIGh1Z2UgcGFnZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDc6MDguMjAyNTY2NTE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ3Mjc0OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDUFVTRVRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMjcwPWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbi0tXFxuaW5pdC9LY29uZmlnLTEyODUtXFxuaW5pdC9LY29uZmlnOjEyODY6Y29uZmlnIENQVVNFVFNcXG5pbml0L0tjb25maWctMTI4Ny1cXHRib29sIFxcXCJDcHVzZXQgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMjk4LVxcbmluaXQvS2NvbmZpZzoxMjk5OmNvbmZpZyBDUFVTRVRTX1YxXFxuaW5pdC9LY29uZmlnLTEzMDAtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjA3OjA5Ljk0OTg0NTQ2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzIyODA0MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBTdXJwbHVzIE1lbW9yeSBQb2xpY3kgVGVzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHRlc3QsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgSFVHRVRMQkZTYCwgYE5VTUFgLCBhbmQgYENQVVNFVFNgLiBJIHJlbWVtYmVyIG5vdyB0aGF0IGBOVU1BYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZGAgdG8gZXZlbiBtYWtlIHNlbnNlLCBhbmQgdGhlIHRlc3QgY29kZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jYCBleHBsaWNpdGx5IHVzZXMgYG51bWFfYXZhaWxhYmxlKClgLiBJdCdzIGNsZWFybHkgdXNpbmcgZnVuY3Rpb25zIGxpa2UgYG51bWFfYmluZGAgYW5kIGBudW1hX2JpdG1hc2tfc2V0Yml0YCwgc28gYE5VTUFgIGlzIGRlZmluaXRlbHkgaW4gcGxheSBoZXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGJ5IGRvdWJsZS1jaGVja2luZyBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYCBpbiBgbW0vaHVnZXRsYi5jYC4gUmlnaHQsIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB1dGlsaXplIGBhbGxvd2VkX21lbXNfbnIoaClgLiBUaGUgdGVzdCBpcyBwcmVjaXNlbHkgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UgaW4gYmVoYXZpb3IuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcywgYW5kIGl0J3MgbWFraW5nIHN1cmUgaXQgcmVzcGVjdHMgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0J3MgYWRkaW5nIHRoaXMgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIGZ1enppbmcgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyB3aGVuIHdlIGFsbG9jYXRlIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciB2YXJpb3VzIG1lbXBvbGljaWVzLlxuXG5TbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYW5kIGBhbGxvd2VkX21lbXNfbnJgLiBBbmQgdGhlIGVzc2VudGlhbCBjb25maWdzIHdlIG5lZWQgdG8gaGF2ZSBlbmFibGVkIGFyZSBgSFVHRVRMQkZTYCwgYE5VTUFgLCBhbmQgYENQVVNFVFNgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRvIG1ha2Ugc3VyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBBbmQgSSB0aGluayBgYWxsb3dlZF9tZW1zX25yYCBpcyBhbHNvIHN0YXRpYz8gWWVzLCBpdCBpcy5cblxuT2theSwgSSd2ZSBnb3QgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbi4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4NiwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MDc6MTYuNjcyNjU0MDM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjY2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiLFxuICAgIFwiQ1BVU0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGZvciBnYXRoZXJpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHRvIHJlc3BlY3QgbWVtcG9saWNpZXMgYW5kIGNwdXNldHMuIEl0IGFkZHMgYSBuZXcgc2VsZnRlc3QgdG8gdmVyaWZ5IHRoaXMgYmVoYXZpb3IuIEZ1enppbmcgdGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciB3aGVuIGFsbG9jYXRpbmcgc3VycGx1cyBodWdlIHBhZ2VzIHVuZGVyIGRpZmZlcmVudCBtZW1wb2xpY2llcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIixcbiAgICBcIkNQVVNFVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiLFxuICAgIFwiYWxsb3dlZF9tZW1zX25yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBmb3IgZ2F0aGVyaW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB0byByZXNwZWN0IG1lbXBvbGljaWVzIGFuZCBjcHVzZXRzLiBJdCBhZGRzIGEgbmV3IHNlbGZ0ZXN0IHRvIHZlcmlmeSB0aGlzIGJlaGF2aW9yLiBGdXp6aW5nIHRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgd2hlbiBhbGxvY2F0aW5nIHN1cnBsdXMgaHVnZSBwYWdlcyB1bmRlciBkaWZmZXJlbnQgbWVtcG9saWNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowhxpp5[1] Phase: Succeeded StartedAt: 2026-07-08 05:07:48 +0000 UTC FinishedAt: 2026-07-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 05:07:48 +0000 UTC FinishedAt: 2026-07-08 05:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2] Phase: Succeeded StartedAt: 2026-07-08 05:07:48 +0000 UTC FinishedAt: 2026-07-08 09:08:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 05:07:48 +0000 UTC FinishedAt: 2026-07-08 09:08:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 05:07:48 +0000 UTC FinishedAt: 2026-07-08 05:07:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 05:07:48 +0000 UTC FinishedAt: 2026-07-08 05:07:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhxpp5/series-workflowhxpp5-convert-artifact-1089618052/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 05:07:59 +0000 UTC FinishedAt: 2026-07-08 05:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 05:07:59 +0000 UTC FinishedAt: 2026-07-08 05:33:43 +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:*ffc0b899-6767-41e7-b970-95f73f314971,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-workflowhxpp5/series-workflowhxpp5-convert-artifact-1089618052/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": "c53c4a01-7a32-49b2-8f74-18088dd98b42", "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-workflowhxpp5/series-workflowhxpp5-build-action-1274414530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 05:07:59 +0000 UTC FinishedAt: 2026-07-08 05:33:06 +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:*ffc0b899-6767-41e7-b970-95f73f314971,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-workflowhxpp5/series-workflowhxpp5-convert-artifact-1089618052/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": "c53c4a01-7a32-49b2-8f74-18088dd98b42", "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-workflowhxpp5/series-workflowhxpp5-build-action-1274414530/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 05:33:43 +0000 UTC FinishedAt: 2026-07-08 05:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 05:33:43 +0000 UTC FinishedAt: 2026-07-08 05:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 05:33:43 +0000 UTC FinishedAt: 2026-07-08 05:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 05:33:43 +0000 UTC FinishedAt: 2026-07-08 05:33:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhxpp5/series-workflowhxpp5-convert-artifact-37052163/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 05:33:53 +0000 UTC FinishedAt: 2026-07-08 05:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 05:33:53 +0000 UTC FinishedAt: 2026-07-08 05:36:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c53c4a01-7a32-49b2-8f74-18088dd98b42,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-workflowhxpp5/series-workflowhxpp5-build-action-1274414530/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-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 05:36:13 +0000 UTC FinishedAt: 2026-07-08 05:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 05:36:13 +0000 UTC FinishedAt: 2026-07-08 05:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 05:36:13 +0000 UTC FinishedAt: 2026-07-08 06:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 05:36:13 +0000 UTC FinishedAt: 2026-07-08 06:03:08 +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:*ffc0b899-6767-41e7-b970-95f73f314971,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-workflowhxpp5/series-workflowhxpp5-convert-artifact-37052163/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": "040befd8-b093-4e1a-8858-98498a5971a8", "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-workflowhxpp5/series-workflowhxpp5-build-action-237374903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 05:36:13 +0000 UTC FinishedAt: 2026-07-08 06:02:58 +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:*ffc0b899-6767-41e7-b970-95f73f314971,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-workflowhxpp5/series-workflowhxpp5-convert-artifact-37052163/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": "040befd8-b093-4e1a-8858-98498a5971a8", "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-workflowhxpp5/series-workflowhxpp5-build-action-237374903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 06:03:08 +0000 UTC FinishedAt: 2026-07-08 06:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 06:03:08 +0000 UTC FinishedAt: 2026-07-08 06:03:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 06:03:08 +0000 UTC FinishedAt: 2026-07-08 06:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 06:03:08 +0000 UTC FinishedAt: 2026-07-08 06:05:13 +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:*040befd8-b093-4e1a-8858-98498a5971a8,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-workflowhxpp5/series-workflowhxpp5-build-action-237374903/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-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 09:08:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 09:08:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c53c4a01-7a32-49b2-8f74-18088dd98b42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*040befd8-b093-4e1a-8858-98498a5971a8,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-workflowhxpp5/series-workflowhxpp5-build-action-1274414530/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-workflowhxpp5/series-workflowhxpp5-build-action-237374903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 06:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 06:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhxpp5/series-workflowhxpp5-convert-artifact-2999077404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 06:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 06:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 06:05:22 +0000 UTC FinishedAt: 2026-07-08 06:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 06:05:32 +0000 UTC FinishedAt: 2026-07-08 09:08:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhxpp5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b41df707b6d7b7ae6188c6fc37ba81859293cb94","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA","CPUSETS"],"series_id":"21b57391-cb05-4d67-b2ef-2fd27c53ca67","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 06:05:32 +0000 UTC FinishedAt: 2026-07-08 09:08:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c53c4a01-7a32-49b2-8f74-18088dd98b42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*040befd8-b093-4e1a-8858-98498a5971a8,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-workflowhxpp5/series-workflowhxpp5-build-action-1274414530/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-workflowhxpp5/series-workflowhxpp5-build-action-237374903/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-workflowhxpp5/series-workflowhxpp5-convert-artifact-2999077404/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,}