Name: series-workflowjffs6 Phase: Succeeded StartedAt: 2026-08-10 18:58:40 +0000 UTC FinishedAt: 2026-08-10 22:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[0] Phase: Succeeded StartedAt: 2026-08-10 18:58:40 +0000 UTC FinishedAt: 2026-08-10 19:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 18:58:40 +0000 UTC FinishedAt: 2026-08-10 19:01:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_ioapic_set_irq", "kvm_ioapic_update_eoi", "kvm_set_ioapic" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU9BUElDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2lvYXBpY19zZXRfaXJxJiMzNDssCiAgICAmIzM0O2t2bV9pb2FwaWNfdXBkYXRlX2VvaSYjMzQ7LAogICAgJiMzNDtrdm1fc2V0X2lvYXBpYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxODo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiODljNmY0ZDk0ZTQyZTZhZmIzYmU4ZDc1MWJmODY2YmFhNjU1OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxODo1OTo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbmluZGV4IDc1NzY2N2ZiMmJmYTAuLjY3NmVmZmQ2NzRmOWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC00OTEsNyAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSk7XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfZmVhdHVyZXNcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGEwMjc2YTE1NDJmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwxMzkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXBpYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4mIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRFx0XHQweGZlXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbiYjNDM7XHRyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTtcbiYjNDM7XHRpZiAociBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8pXG4mIzQzO1x0XHRfX1RFU1RfUkVRVUlSRSgwLCBcJiMzNDtJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbiYjNDM7e1xuJiM0MztcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9JUlFDSElQLCBpcnFjaGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X2lvYXBpY19lbnRyeShzdHJ1Y3Qga3ZtX3ZtICp2bSwgYm9vbCBsZXZlbF90cmlnZ2VyZWQsXG4mIzQzO1x0XHRcdCAgICAgdTMyIGRlc3RfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbiYjNDM7XG4mIzQzO1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4mIzQzO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID1cbiYjNDM7XHRcdFRFU1RfVkVDVE9SO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9XG4mIzQzO1x0XHRkZXN0X2lkO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9XG4mIzQzO1x0XHRsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDpcbiYjNDM7XHRcdFx0XHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLm1hc2sgPSAwO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGt2bV9pcnFfbGluZV9zdGF0dXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBsZXZlbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcbiYjNDM7XHRcdC5pcnEgPSBURVNUX0lPQVBJQ19QSU4sXG4mIzQzO1x0XHQubGV2ZWwgPSBsZXZlbCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXHUwMDI2aXJxKTtcbiYjNDM7XHRyZXR1cm4gaXJxLnN0YXR1cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4mIzQzO1xuJiM0MztcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0MztcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleFwmIzM0OyxcbiYjNDM7XHRcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTtcbiYjNDM7XHR2bV9jcmVhdGVfaXJxY2hpcCh2bSk7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcJiMzNDssIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXG4mIzQzO1x0XHQgICAgXCYjMzQ7S1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJiMzOTt0IGRlbGl2ZXJlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1NjQgYXBpY2Jhc2U7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBOVUxMKTtcbiYjNDM7XHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4mIzQzO1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLFxuJiM0MztcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO1x0Kih1MzIgKikobGFwaWMucmVncyAmIzQzOyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcJiMzNDssIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbiYjNDM7XHRURVNUX0FTU0VSVCghc3RhdHVzLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQoKTtcbiYjNDM7XHR0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxODo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2t2bV9zZXRfaW9hcGljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgS1ZNIElPQVBJQyBlbXVsYXRpb24gd2hlcmUgYHJlbW90ZV9pcnJgIGFuZCBgaXJyX2RlbGl2ZXJlZGAgd2VyZSBub3QgY29ycmVjdGx5IHVwZGF0ZWQgZm9yIGVkZ2UgYW5kIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgKEtWTSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBrdm1fc2V0X2lvYXBpY2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3Yjg5YzZmNGQ5NGU0MmU2YWZiM2JlOGQ3NTFiZjg2NmJhYTY1NTlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTg6NTk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKaW5kZXggNzU3NjY3ZmIyYmZhMC4uNjc2ZWZmZDY3NGY5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuYwpAQCAtMjMwLDExICYjNDM7MjMwLDExIEBAIHN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSwKIAlvbGRfaXJyID0gaW9hcGljLSZndDtpcnI7CiAJaW9hcGljLSZndDtpcnIgfD0gbWFzazsKIAlpZiAoZWRnZSkgewotCQlpb2FwaWMtJmd0O2lycl9kZWxpdmVyZWQgJmFtcDs9IH5tYXNrOwogCQlpZiAob2xkX2lyciA9PSBpb2FwaWMtJmd0O2lycikgewogCQkJcmV0ID0gMDsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CQlpb2FwaWMtJmd0O2lycl9kZWxpdmVyZWQgJmFtcDs9IH5tYXNrOwogCX0KIAogCXJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxLCBsaW5lX3N0YXR1cyk7CkBAIC00OTEsNyAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cykKIAl9IGVsc2UKIAkJcmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy0mZ3Q7a3ZtLCBOVUxMLCAmYW1wO2lycWUpOwogCi0JaWYgKHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQomIzQzOwlpZiAocmV0ICZndDsgMCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQllbnRyeS0mZ3Q7ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtODYsNiAmIzQzOzg2LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2ZlYXR1cmVzCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl90bGJfZmx1c2gKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2Nsb2NrX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9wdl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZGEwMjc2YTE1NDJmZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwxMzkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcGljLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19QSU4JCTE2CiYjNDM7I2RlZmluZSBURVNUX1ZFQ1RPUgkJMHg1MAomIzQzOyNkZWZpbmUgTk9fU1VDSF9BUElDX0lECQkweGZlCiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19FREdFX1RSSUcJMAomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJRwkxCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzOwlpZiAociAmYW1wOyZhbXA7IGVycm5vID09IEVOWElPKQomIzQzOwkJX19URVNUX1JFUVVJUkUoMCwgJiMzNDtJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaXJxY2hpcC0mZ3Q7Y2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLAomIzQzOwkJCSAgICAgdTMyIGRlc3RfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPQomIzQzOwkJVEVTVF9WRUNUT1I7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9CiYjNDM7CQlkZXN0X2lkOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID0KJiM0MzsJCWxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOgomIzQzOwkJCQkgIFRFU1RfSU9BUElDX0VER0VfVFJJRzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1faXJxX2xpbmVfc3RhdHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbGV2ZWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnEgPSB7CiYjNDM7CQkuaXJxID0gVEVTVF9JT0FQSUNfUElOLAomIzQzOwkJLmxldmVsID0gbGV2ZWwsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fSVJRX0xJTkVfU1RBVFVTLCAmYW1wO2lycSk7CiYjNDM7CXJldHVybiBpcnEuc3RhdHVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsJVEVTVF9BU1NFUlQoISEoaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIgJmFtcDsgKDEgJmx0OyZsdDsgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4JiMzNDssCiYjNDM7CQkgICAgVEVTVF9JT0FQSUNfUElOLCBleHBlY3RlZCwgaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTsKJiM0MzsJdm1fY3JlYXRlX2lycWNoaXAodm0pOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCB0cnVlLCBOT19TVUNIX0FQSUNfSUQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZmFpbGVkIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkJiMzNDssIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CVRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsCiYjNDM7CQkgICAgJiMzNDtLVk0gc2V0IHJlbW90ZV9pcnIgZm9yIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCB0aGF0IHdhc24mIzM5O3QgZGVsaXZlcmVkJiMzNDspOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYzsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJdTY0IGFwaWNiYXNlOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgTlVMTCk7CiYjNDM7CWFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTsKJiM0MzsJdmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLAomIzQzOwkJICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgJmFtcDtsYXBpYyk7CiYjNDM7CSoodTMyICopKGxhcGljLnJlZ3MgJiM0MzsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsICZhbXA7bGFwaWMpOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS0mZ3Q7aWQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzICZndDsgMCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVCghc3RhdHVzLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkJiMzNDssCiYjNDM7CQkgICAgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4odm9pZCkKJiM0Mzt7CiYjNDM7CXRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7CiYjNDM7CXRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIElPQVBJQyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AgYW5kIGFkZHMgYSB0ZXN0IGZvciBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtb2RpZmljYXRpb25zIHRvIGBpb2FwaWNfc2V0X2lycWAgYW5kIGBpb2FwaWNfc2VydmljZWAsIHdoaWNoIGFyZSBjcml0aWNhbCBmb3IgZW11bGF0aW5nIHRoZSBJT0FQSUMgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGVzc2VudGlhbCBpbiBhbnkgS1ZNIHNldHVwLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHVzZWQgaW4gcmVhbCBWTXMuCgpJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGluIGBpb2FwaWNfc2V0X2lycWAgYXJlIHJlbGF0ZWQgdG8gdGhlIGludGVycnVwdCByZXF1ZXN0IHJlZ2lzdGVyIChJUlIpIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgYW5kIGNsZWFyaW5nIHRoZSBgaXJyX2RlbGl2ZXJlZGAgZmxhZy4gVGhlIG1vZGlmaWNhdGlvbiBpbiBgaW9hcGljX3NlcnZpY2VgIG5vdyBjaGVja3MgaWYgdGhlIHJldHVybiBjb2RlIGlzIHBvc2l0aXZlLCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFuZCBgcmVtb3RlX2lycmAuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgcmVmaW5pbmcgaG93IGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIG9yIGFja25vd2xlZGdlZCB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSB2Q1BVIGludGVyYWN0cyB3aXRoIHRoZSBJT0FQSUMgYW5kIHBvdGVudGlhbGx5IGhvdyBpbnRlcnJ1cHQgZGVsaXZlcnkgaXMgbWFuYWdlZC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaW50ZXJydXB0IGxhdGVuY3kgb3IgYmVoYXZpb3IuCgpHaXZlbiB0aGUgZmlsZSwgSSYjMzk7bSB0aGlua2luZyB0aGUgY29kZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCBidXQgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeSB0byBiZSBzdXJlLiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgaXQgaXMgZW5hYmxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9hcGljLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xMT1rdm0tJChDT05GSUdfWDg2XzY0KSAmIzQzOz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjEyOmt2bS0kKENPTkZJR19LVk1fSU9BUElDKSAmIzQzOz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTMta3ZtLSQoQ09ORklHX0tWTV9IWVBFUlYpICYjNDM7PSBoeXBlcnYub1xuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jPTE1NDY9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19zZW5kX2VvaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgdmVjdG9yKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE1NDktXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoxNTUwOlx0LyogRW9pIHRoZSBpb2FwaWMgb25seSBpZiB0aGUgaW9hcGljIGRvZXNuJiMzOTt0IG93biB0aGUgdmVjdG9yLiAqL1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMTU1MS1cdGlmICgha3ZtX2lvYXBpY19oYW5kbGVzX3ZlY3RvcihhcGljLCB2ZWN0b3IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gSU9BUElDIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIEtWTSBJL08gQVBJQyBpcyBzZXQgdXAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdHMgY29tcGlsYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfS1ZNX0lPQVBJQ2AgYmVpbmcgZW5hYmxlZC4gTmF0dXJhbGx5LCB0aGF0JiMzOTtzIHVzdWFsbHkgc2VsZWN0ZWQgd2hlbiBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIHNlbGVjdGVkLiBUbyBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGNvcnJlY3RseSwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhpcyBieSBjaGVja2luZyB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIEtWTSBjb25maWd1cmF0aW9uIGRldGFpbHMgb24geDg2LCBzbyB0aGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTU2PWNvbmZpZyBLVk1fQU1EX1NFVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIHRoZSBgS1ZNX0lPQVBJQ2Agc2VsZWN0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgS1ZNX0lPQVBJQ2AgU2VsZWN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoZSBzZWxlY3Rpb24gb2YgYEtWTV9JT0FQSUNgLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgZmxhZyBvciBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNob3NlbiBvciBlbmFibGVkIHdpdGhpbiB0aGUgS1ZNIGNvZGViYXNlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgd2hlcmUgdGhlIG1hY3JvIGlzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSB0aGUgKmxvZ2ljKiB0aGF0IGRldGVybWluZXMgaXRzIHVzZSByZXNpZGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucywgY29uZmlndXJhdGlvbnMsIG9yIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0aGF0IGxlYWQgdG8gYEtWTV9JT0FQSUNgIGJlaW5nIGFjdGl2ZS4gSXMgaXQgc3BlY2lmaWMgQ1BVIG1vZGVscz8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgc3lzdGVtIGJvYXJkIGZlYXR1cmVzLCBCSU9TIHNldHRpbmdzLCBvciBvdGhlciBLVk0gYnVpbGQgb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ3JlcCB0byBmaW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQgYW5kIHRoZW4gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBhbmQgbG9naWNhbCBvcGVyYXRvcnMgdGhhdCB1bHRpbWF0ZWx5IGVuYWJsZSBvciBkaXNhYmxlIGl0LiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGBpZmAgc3RhdGVtZW50IGJhc2VkIG9uIGEga2VybmVsIHBhcmFtZXRlciwgYSBoYXJkd2FyZSBmZWF0dXJlIGJpdCwgb3IgYSBLVk0gY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS1ZNX0lPQVBJQyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gaW1wbGVtZW50YXRpb24sIGxvY2F0ZWQgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciB0aGUgYEtWTV9JT0FQSUNgIG9wdGlvbi4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcyBiZWZvcmUgcHJvY2VlZGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIGBLVk1fSU9BUElDYCBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBjb250ZXh0IGFuZCBob3cgdGhpcyBhc3BlY3QgZnVuY3Rpb25zIHdpdGhpbiBLVk0mIzM5O3MgZGVzaWduLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSwgZG91YmxlLWNoZWNrIHRoYXQgZmlyc3QsIGFuZCB0aGVuIGJ1aWxkIG91dHdhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fSU9BUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTExPWt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTI6a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMy1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4tLVxuYXJjaC94ODYva3ZtL2k4MjU0LmgtMTItXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaDoxMzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pODI1NC5oLTE0LXN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlIHtcbi0tXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaD02OT12b2lkIGt2bV9mcmVlX3BpdChzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL2k4MjU0Lmg6NzA6I2VuZGlmIC8qIENPTkZJR19LVk1fSU9BUElDICovXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaC03MS1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtOC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuaDo5OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL2lvYXBpYy5oLTEwLVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuaD0xMj1zdHJ1Y3Qga3ZtX3ZjcHU7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTMtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg6MTQ6I2RlZmluZSBJT0FQSUNfTlVNX1BJTlMgIEtWTV9JT0FQSUNfTlVNX1BJTlNcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xNS0jZGVmaW5lIElPQVBJQ19WRVJTSU9OX0lEIDB4MTFcdC8qIElPQVBJQyB2ZXJzaW9uICovXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5oPTExND12b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTE1LVx0XHRcdCAgIHVsb25nICppb2FwaWNfaGFuZGxlZF92ZWN0b3JzKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuaDoxMTY6I2VuZGlmIC8qIENPTkZJR19LVk1fSU9BUElDICovXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTE3LVxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYz01OT1pbnQga3ZtX2NwdV9oYXNfZXh0aW50KHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtODAtXG5hcmNoL3g4Ni9rdm0vaXJxLmM6ODE6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vaXJxLmMtODItXHRpZiAocGljX2luX2tlcm5lbCh2LVx1MDAzZWt2bSkpXG4tLVxuYXJjaC94ODYva3ZtL2lycS5jPTEyOD1pbnQga3ZtX2NwdV9nZXRfZXh0aW50KHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTQyLVxuYXJjaC94ODYva3ZtL2lycS5jOjE0MzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pcnEuYy0xNDQtXHRpZiAocGljX2luX2tlcm5lbCh2LVx1MDAzZWt2bSkpXG4tLVxuYXJjaC94ODYva3ZtL2lycS5jPTE3Nz12b2lkIF9fa3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTc5LVx0X19rdm1fbWlncmF0ZV9hcGljX3RpbWVyKHZjcHUpO1xuYXJjaC94ODYva3ZtL2lycS5jOjE4MDojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pcnEuYy0xODEtXHRfX2t2bV9taWdyYXRlX3BpdF90aW1lcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmM9Mjk2PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYy0zMDQtXHRzd2l0Y2ggKHVlLVx1MDAzZXR5cGUpIHtcbmFyY2gveDg2L2t2bS9pcnEuYzozMDU6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzA2LVx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDpcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzE5LVx0XHRjYXNlIEtWTV9JUlFDSElQX0lPQVBJQzpcbmFyY2gveDg2L2t2bS9pcnEuYzozMjA6XHRcdFx0aWYgKHVlLVx1MDAzZXUuaXJxY2hpcC5waW4gXHUwMDNlPSBLVk1fSU9BUElDX05VTV9QSU5TKVxuYXJjaC94ODYva3ZtL2lycS5jLTMyMS1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9pcnEuYz01MzM9dm9pZCBrdm1fYXJjaF91cGRhdGVfaXJxZmRfcm91dGluZyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsXG4tLVxuYXJjaC94ODYva3ZtL2lycS5jLTU0OC1cbmFyY2gveDg2L2t2bS9pcnEuYzo1NDk6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vaXJxLmMtNTUwLSNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcXFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuaC0yMC1cbmFyY2gveDg2L2t2bS9pcnEuaDoyMTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pcnEuaC0yMi1cbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmg9NzY9c3RhdGljIGlubGluZSBpbnQgaXJxY2hpcF9mdWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmgtODMtfVxuYXJjaC94ODYva3ZtL2lycS5oOjg0OiNlbHNlIC8qIENPTkZJR19LVk1fSU9BUElDICovXG5hcmNoL3g4Ni9rdm0vaXJxLmgtODUtc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgaXJxY2hpcF9mdWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0xNDAwPXN0YXRpYyBpbnQgX19hcGljX2FjY2VwdF9pcnEoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMTQyMi1cbmFyY2gveDg2L2t2bS9sYXBpYy5jOjE0MjM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNDI0LVx0XHRpZiAocnRjX3N0YXR1cykge1xuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jPTE1NDY9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19zZW5kX2VvaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgdmVjdG9yKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE1NzctXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoxNTc4OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMTU3OS1cdGlmIChhcGljX3Rlc3RfdmVjdG9yKHZlY3RvciwgYXBpYy1cdTAwM2VyZWdzICYjNDM7IEFQSUNfVE1SKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0zMzA2PWludCBrdm1fYXBpY19zZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTMzMzktXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzozMzQwOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMzM0MS1cdGlmIChpb2FwaWNfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0yMjg9VFJBQ0VfRVZFTlQoa3ZtX2NwdWlkLFxuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3Mi1cbmFyY2gveDg2L2t2bS90cmFjZS5oOjI3MzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3NC1UUkFDRV9FVkVOVChrdm1faW9hcGljX3NldF9pcnEsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTQ3Njg9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDc3OS1cdGNhc2UgS1ZNX0NBUF9DTE9DS1NPVVJDRTpcbmFyY2gveDg2L2t2bS94ODYuYzo0NzgwOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTQ3ODEtXHRjYXNlIEtWTV9DQVBfUElUOlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz03MjU4PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI2My1cbmFyY2gveDg2L2t2bS94ODYuYzo3MjY0OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNjUtXHQvKlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03Mjk4LVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS94ODYuYzo3Mjk5OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTczMDAtXHRjYXNlIEtWTV9DUkVBVEVfSVJRQ0hJUDoge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTA1MD1zdGF0aWMgdm9pZCB2Y3B1X3NjYW5faW9hcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwNjEtXHRcdGt2bV9zY2FuX2lvYXBpY19yb3V0ZXModmNwdSwgdmNwdS1cdTAwM2VhcmNoLmlvYXBpY19oYW5kbGVkX3ZlY3RvcnMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExMDYyOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDYzLVx0ZWxzZSBpZiAoaW9hcGljX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzNDI1PXZvaWQga3ZtX2FyY2hfcHJlX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMzQzNi1cdCAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEzNDM3OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNDM4LVx0a3ZtX2ZyZWVfcGl0KGt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzNDQ3PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNDY2LVx0a3ZtX2ZyZWVfbXNyX2ZpbHRlcihzcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGt2bS1cdTAwM2VhcmNoLm1zcl9maWx0ZXIsIFx1MDAyNmt2bS1cdTAwM2VzcmN1LCAxKSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTM0Njc6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM0NjgtXHRrdm1fcGljX2Rlc3Ryb3koa3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgQ09ORklHX0tWTV9JT0FQSUNgIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgKnRoaW5rKiBpdCYjMzk7cyBzZWxlY3RlZCBzb21ld2hlcmUgYnkgYENPTkZJR19LVk1gLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlLi4uIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBiZWZvcmUgSSBtYWtlIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fSU9BUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIE15IFdvcmsgJmFtcDsgRm9sbG93aW5nIFVwKioKCkhtbSwgd2FzbiYjMzk7dCBJIGp1c3QgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGR1cGxpY2F0aW5nIGVmZm9ydC4gT2theSwgbGV0JiMzOTtzIHNlZS4uLkkgdGhpbmsgSSByZW1lbWJlciB3b3JraW5nIHdpdGggdGhlIElPQVBJQyByZWNlbnRseS4gV2hlcmUgd2FzIHRoYXQgc2V0dGluZyBkZWZpbmVkPyBSaWdodCwgaXQgd2FzIGluIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSB4ODYgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBMZXQmIzM5O3MgbmF2aWdhdGUgdGhlcmUgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IGFscmVhZHkgYWRkcmVzc2VkIHdoYXRldmVyIHRhc2sgSSB3YXMganVzdCBwb25kZXJpbmcgdGhhdCBicm91Z2h0IHRoYXQgc2V0dGluZyB0byBtaW5kLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBLVk1fSU9BUElDYCBhbmQgcXVpY2tseSBjb25maXJtIGl0cyBzdGF0dXMuIERvbiYjMzk7dCB3YW50IHRvIHNwaW4gbXkgd2hlZWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXHUwMDI2XHUwMDI2ICEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxuIDE2MTpcdFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gMTYyOlx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxNjM6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIDE2NDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY1Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTY2Olx0XHRoZWxwXG4gMTY3Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcbiAxNjg6XHRcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcbiAxNjk6XHRcdCAgRW5jcnlwdGVkIFN0YXRlIChTRVYtRVMpLCBhbmQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTcwOlx0XHQgIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSB0ZWNobm9sb2dpZXMgb24gQU1EIHByb2Nlc3NvcnMuXG4gMTcxOlx0XG4gMTcyOlx0Y29uZmlnIEtWTV9JT0FQSUNcbiAxNzM6XHRcdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbiAxNzQ6XHRcdGRlZmF1bHQgeVxuIDE3NTpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2XG4gMTc2Olx0XHRoZWxwXG4gMTc3Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIGFuIEkvTyBBUElDLCBQSUMsIGFuZCBQSVQsIGkuZS5cbiAxNzg6XHRcdCAgZm9yIGZ1bGwgaW4ta2VybmVsIEFQSUMgZW11bGF0aW9uLlxuIDE3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTWF6ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgZGVmYXVsdCB5YCBhbmQsIGNydWNpYWxseSwgYGRlcGVuZHMgb24gS1ZNX1g4NmAuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIEkmIzM5O20gbG9va2luZyBhdCwgbGV0JiMzOTtzIGp1c3QgY2FsbCBpdCAmIzM0O3RoaXMgc2V0dGluZywmIzM0OyBkZWZhdWx0cyB0byAmIzM5O3llcyYjMzk7IGJ1dCBvbmx5ICppZiogYEtWTV9YODZgIGlzIGFsc28gZW5hYmxlZC4gRmluZSwgc28gbm93IEkmIzM5O20gdGhpbmtpbmcsIGBLVk1gIGFuZCBgS1ZNX1g4NmAgYXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgaW50ZXJlc3QgaGVyZS4gV2hlcmUgaXMgYEtWTV9YODZgIGRlZmluZWQsIGV4YWN0bHk/IFRpbWUgdG8gZ28gaHVudGluZyBmb3IgaXRzIGRlZmluaXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgS1ZNX1g4NmAgZGVmaW5pdGlvbiB3b3VsZCBiZSBpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYEtWTV9YODZgIGNvbmZpZyBpbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1g4NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd24gb2YgdGhlc2UgY2hhbmdlcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBsaWtlIEkgd291bGQgb24gdGhlIGZseToKCioqS1ZNIFBhdGNoIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFyb3VuZCBgS1ZNYC4gR290IGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1haW4gZnVuY3Rpb25zIGFmZmVjdGVkIGFyZS4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaGl0cyBgaW9hcGljX3NldF9pcnFgIGFuZCBgaW9hcGljX3NlcnZpY2VgLiBPa2F5LCBhbmQgdGhleSBhcmUgYm90aCBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgbWVhbnMgdGhleSYjMzk7cmUgc2NvcGVkIGxvY2FsbHkgd2l0aGluIHRoZWlyIGZpbGUsIHdoaWNoIGdpdmVzIHVzIGEgdGlnaHRlciBmb2N1cy4gTm93IHRoZSBjcnVjaWFsIHN0ZXAgaXMgdG8gdHJhY2UgYmFjaywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqY2FsbGluZyogdGhvc2UgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGp1aWNlIG9mIHRoZSBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYXBpY19zZXRfaXJxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTY1PXN0YXRpYyB2b2lkIGlvYXBpY19sYXp5X3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSlcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjE4NzpzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg4LVx0XHRpbnQgaXJxX2xldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDItb3V0OlxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0MzpcdHRyYWNlX2t2bV9pb2FwaWNfc2V0X2lycShlbnRyeS5iaXRzLCBpcnEsIHJldCA9PSAwKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDQtXHRyZXR1cm4gcmV0O1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0yNDc9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19pbmplY3RfYWxsKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGxvbmcgaXJyKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNTItXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgXHUwMDI2aXJyLCBJT0FQSUNfTlVNX1BJTlMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjUzOlx0XHRpb2FwaWNfc2V0X2lycShpb2FwaWMsIGlkeCwgMSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU0LVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NTc9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00OTktXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTAwOmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDEtXHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MTItXHRcdFx0XHRcdCBpcnFfc291cmNlX2lkLCBsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTEzOlx0cmV0ID0gaW9hcGljX3NldF9pcnEoaW9hcGljLCBpcnEsIGlycV9sZXZlbCwgbGluZV9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxNC1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg9MTA4PXZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg6MTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xMTAtXHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKTtcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmM9Mjk2PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYy0zMjEtXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS9pcnEuYzozMjI6XHRcdFx0ZS1cdTAwM2VzZXQgPSBrdm1faW9hcGljX3NldF9pcnE7XG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzIzLVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oPTIyOD1UUkFDRV9FVkVOVChrdm1fY3B1aWQsXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjczLSNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3RyYWNlLmg6Mjc0OlRSQUNFX0VWRU5UKGt2bV9pb2FwaWNfc2V0X2lycSxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3NS1cdCAgICBUUF9QUk9UTyhfX3U2NCBlLCBpbnQgcGluLCBib29sIGNvYWxlc2NlZCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBLVk0mIzM5O3MgSU9BUElDIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGt2bV9pb2FwaWNfc2V0X2lycWAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50LCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBleHRlcm5hbCB3b3JsZCBpbnRlcmFjdHMgd2l0aCB0aGUgSU9BUElDIGludGVycnVwdCBzZXR1cCB3aXRoaW4gS1ZNLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW50ZXJuYWxseSwgYW5kIHNwZWNpZmljYWxseSwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBlbnRyeSBwb2ludCBjb25uZWN0cyB0byB0aGUgb3ZlcmFsbCBpbnRlcnJ1cHQgc2VydmljaW5nIG1lY2hhbmlzbS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGBpb2FwaWNfc2VydmljZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZyb20gdGhpcyBlbnRyeSBwb2ludCB0byBpbnRlcnJ1cHQgZGVsaXZlcnk7IEkgbmVlZCB0byBrbm93IGhvdyB0aGUgaW50ZXJydXB0IHJlcXVlc3RzIGFyZSByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSByb3V0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYXBpY19zZXJ2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzYtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Mzc6c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYywgaW50IGlycSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zOC1cdFx0Ym9vbCBsaW5lX3N0YXR1cyk7XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTIzOS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDA6XHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0MS1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MzMxPXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MTYtXHRcdFx0ZWxzZVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQxNzpcdFx0XHRcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MTgtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDU2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQ1NzpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDU4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTIwPXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTMyLVx0XHRpZiAoaW9hcGljLVx1MDAzZWlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNlx1MDAyNiAhZW50LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzMzpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIGksIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MzQtXHR9XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTUzOT1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTc4LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU3OTpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbiwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU4MC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9hcGljX3NlcnZpY2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9hcGljX3NlcnZpY2VgLiBJIHNlZSBpdCYjMzk7cyBhIGNlbnRyYWwgZnVuY3Rpb24sIGFuZCB0aGUgY29kZSBzaG93cyBpdCBnZXRzIGNhbGxlZCBmcm9tIGEgZmV3IGltcG9ydGFudCBwbGFjZXM6IGBpb2FwaWNfc2V0X2lycWAsIHdoaWNoIEkga25vdyBoYW5kbGVzIGludGVycnVwdCByZXF1ZXN0cywgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAgd2hpY2ggc291bmRzIGxpa2UgaXQgbWFuYWdlcyBtZW1vcnkgaW5kaXJlY3Qgd3JpdGVzLCBhbmQgdGhlbiBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZWAsIHdoaWNoIGFyZSBjbGVhcmx5IEtWTS1zcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBFbmQtb2YtSW50ZXJydXB0IChFT0kpIGhhbmRsaW5nLiBUaGF0JiMzOTtzIGEgcHJldHR5IGRpdmVyc2Ugc2V0IG9mIGNhbGwgc2l0ZXMsIHdoaWNoIG1lYW5zIGBpb2FwaWNfc2VydmljZWAgaXMgcHJvYmFibHkgb3JjaGVzdHJhdGluZyBzb21lIGNvcmUgbG9naWMgYXJvdW5kIHRoZSBJL08gQVBJQyYjMzk7cyBiZWhhdmlvci4KCk5vdywgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zIG1lYW4gdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgb3V0IHdoYXQgdXNlcyBpdCBhbmQgaG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2FwaWNfd3JpdGVfaW5kaXJlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYz0zMTQ9dm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbixcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzMwLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjMzMTpzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zMzIte1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz02NTQ9c3RhdGljIGludCBpb2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLFxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02ODUtXHRjYXNlIElPQVBJQ19SRUdfV0lORE9XOlxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY4NjpcdFx0aW9hcGljX3dyaXRlX2luZGlyZWN0KGlvYXBpYywgZGF0YSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjg3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgdGhlIElPQVBJQyBNTUlPIFdyaXRlIEhhbmRsZXIqKgoKUmlnaHQsIGBpb2FwaWNfbW1pb193cml0ZWAuIFRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLiBBbmQgaXQmIzM5O3MgY2xlYXJseSBhbiBNTUlPIGhhbmRsZXIsIG1lYW5pbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIE1lbW9yeS1NYXBwZWQgSS9PIG9wZXJhdGlvbnMgZm9yIHRoZSBJT0FQSUMuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGl0JiMzOTtzICp1c2VkKi4gTGV0JiMzOTtzIGdvIGFuZCBleGFtaW5lIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTIwPXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTM4LSNkZWZpbmUgSU9BUElDX1NVQ0NFU1NJVkVfSVJRX01BWF9DT1VOVCAxMDAwMFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzOTpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLFxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01ODY9dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTctXHRcdFx0Y29udGludWU7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTk4Olx0XHRrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHZjcHUsIGlvYXBpYywgdHJpZ2dlcl9tb2RlLCBpKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU2CgkJCQkJCQlvdXRwdXQ6IDYyCgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBJT0FQSUMgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9hcGljLmNgLCBhbmQgSSYjMzk7dmUgZmxhZ2dlZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBhcyBhIGZ1bmN0aW9uIG9mIGludGVyZXN0IGJlY2F1c2UgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlIGtleSBoZXJlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgb3IgYXJlYXMgd2hlcmUgc3RhdGUgY2hhbmdlcyBtaWdodCBvY2N1ciByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gSSBzZWUgdGhhdCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHNvIHRob3NlIHR3byBkZWZpbml0ZWx5IHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gSSBhbHNvIHJlY2FsbCB0aGF0IGBrdm1faW9hcGljX2VvaV9pbmplY3Rfd29ya2AgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHdoaWNoIGltcGxpZXMgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIGFuZCB0aHVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBjYXJlZnVsbHkgZXhhbWluZSBib3RoIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzaGFyZWQgZGF0YSBvciByZXNvdXJjZXMgdGhleSBtaWdodCBtYW5pcHVsYXRlLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgc291cmNlcyBvZiBjb25jdXJyZW5jeSBvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtejAtOV9dJiM0MzsgKSYjNDM7a3ZtX2lvYXBpY19bYS16MC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI1OTp2b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nICppb2FwaWNfaGFuZGxlZF92ZWN0b3JzKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI2MC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTQ1Nz1zdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ5OS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MDA6aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwMS1cdFx0ICAgICAgIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxOS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MjA6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUyMS17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUzOC0jZGVmaW5lIElPQVBJQ19TVUNDRVNTSVZFX0lSUV9NQVhfQ09VTlQgMTAwMDBcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1Mzk6c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQwLVx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU4Njp2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NjU0PXN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjk1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY5NjpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjk3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MTYtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzE3OmludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcxOC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc0My1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3NDQ6dm9pZCBrdm1faW9hcGljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjU0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBJT0FQSUMgZnVuY3Rpb25zLiBJIHNlZSB3ZSBoYXZlOiBga3ZtX2lvYXBpY19zY2FuX2VudHJ5YCwgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBga3ZtX2lvYXBpY19pbml0YCwgYW5kIGBrdm1faW9hcGljX2Rlc3Ryb3lgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoZXkgc2VlbSB0byBiZSBrZXkgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KCkFoYSwgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgdGhlIG9uZSB0aGF0IGRpcmVjdGx5IGludm9rZXMgYGlvYXBpY19zZXRfaXJxYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBMZXQmIzM5O3MgZGlnIGludG8gYGt2bV9pb2FwaWNfc2V0X2lycWAgdGhlbjsgaXQgc2VlbXMgdG8gYmUgYW4gZXNzZW50aWFsIGVudHJ5IHBvaW50IGZvciBJUlEgcm91dGluZywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpOb3csIGxldCYjMzk7cyBzZWXigKYgYGlvYXBpY19zZXJ2aWNlYCBpcyBjYWxsZWQgYnkgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGlvYXBpY19tbWlvX3dyaXRlYC4gSW50ZXJlc3RpbmcuIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG9mdGVuIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIGEgbW9kdWxlLiBIb3dldmVyLCBpdCYjMzk7cyBhbHNvIGFuIE1NSU8gaGFuZGxlciwgc28gaXQgbXVzdCBiZSByZWdpc3RlcmVkIHNvbWV3aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLgoKWWVwLCBoZXJlIGl0IGlzOiBga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzYC4gSXQmIzM5O3MgcmVnaXN0ZXJlZCEgT2theSwgbGV0JiMzOTtzIG5vdyB1bmRlcnN0YW5kIGBpb2FwaWNfbW1pb193cml0ZWAgdGhvcm91Z2hseTsgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgaG93IE1NSU8gYWNjZXNzIHRvIHRoZSBJT0FQSUMgaXMgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9hcGljX21taW9fd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTYxND1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjUzLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY1NDpzdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjU1LVx0XHRcdFx0IGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcxMy1cdC5yZWFkICAgICA9IGlvYXBpY19tbWlvX3JlYWQsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzE0Olx0LndyaXRlICAgID0gaW9hcGljX21taW9fd3JpdGUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzE1LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njc3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIElPQVBJQyBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZSB0byB1c2UgYXMgYSBmb2N1cyBzeW1ib2wuIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBydWxlcyBpdCBvdXQuIE5vIGdvb2QgZm9yIGEgc3ltYm9sIGlmIGl0JiMzOTtzIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCwgaG9sZCBvbiwgaXQgc2VlbXMgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBIb3dldmVyLCBgaW9hcGljX3NldF9pcnFgIGlzIGFsc28gY2FsbGVkIGJ5IGBrdm1faW9hcGljX2luamVjdF9hbGxgLCB3aGljaCwgdW5mb3J0dW5hdGVseSwgKmlzKiBzdGF0aWMuIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIGEgYml0LiBTbywgaWYgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGBpb2FwaWNfc2V0X2lycWAgZHVlIHRvIGl0cyBzdGF0aWMgY2FsbGVyLCB0aGUgZm9jdXMgd2lsbCBuZWVkIHRvIHNoaWZ0LiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgZXhhY3RseSAqd2hvKiBpcyBjYWxsaW5nIGBrdm1faW9hcGljX2luamVjdF9hbGxgLCBhcyB0aGF0IG1pZ2h0IHJldmVhbCBhIGJldHRlciBlbnRyeSBwb2ludCBvciBwYXRoIHRvIHRoZSBsb2dpYyBJJiMzOTttIHJlYWxseSBpbnRlcmVzdGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW9hcGljX2luamVjdF9hbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0Ni1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDc6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19pbmplY3RfYWxsKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGxvbmcgaXJyKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0OC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTc2OT12b2lkIGt2bV9zZXRfaW9hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NzctXHRrdm1fbWFrZV9zY2FuX2lvYXBpY19yZXF1ZXN0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Nzc4Olx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXHUwMDNlaXJyKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NzktXHRzcGluX3VubG9jayhcdTAwMjZpb2FwaWMtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtWTSBJT0FQSUMgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIGBrdm1fc2V0X2lvYXBpY2AgaXNuJiMzOTt0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBrdm1faW9hcGljX2luamVjdF9hbGxgLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciBteSBmb2NhbCBwb2ludCBpbiB0aGlzIGFuYWx5c2lzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBhbmQgYGt2bV9zZXRfaW9hcGljYCBhbHNvIG1ha2UgZ29vZCBmb2N1cyBzeW1ib2xzLCBnaXZlbiB0aGF0IHRoZXkgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZSBJJiMzOTttIG1vZGlmeWluZy4KCk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJIHNlZSBgS1ZNYCBhcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0sIGFuZCBgS1ZNX1g4NmAgYXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvbmUuIEhhbmcgb24gYSBzZWNvbmQuLi4gYEtWTWAgaXMgYSB0cmlzdGF0ZSwgd2hpbGUgYEtWTV9YODZgIGlzIGEgc3RhbmRhcmQgY29uZmlnPyBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwsIGJ1dCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBvbmUgZm9yIGVuYWJsaW5nIEtWTSBmdW5jdGlvbmFsaXR5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBgS1ZNYC4gR290IGl0LiBGaXJzdCB0aG91Z2h0OiBgS1ZNYCBpbXBsaWVzIGNvbmZpZ3VyYXRpb24sIG5hdHVyYWxseS4gQnV0IGhvbGQgb24sIGxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuLiBXZSBhbGwga25vdyBgS1ZNYCBpcyBidWlsdCBvbiBhIHNvbGlkIGZvdW5kYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSB1bmRlcmx5aW5nIGBWSVJUVUFMSVpBVElPTmAgaW5mcmFzdHJ1Y3R1cmUuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgc3BlY2lmaWMgYEtWTWAgc2V0dGluZ3MsIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBUaW1lIHRvIGludmVzdGlnYXRlIGBLVk1gJiMzOTtzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxuICA1NzpcdFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcbiAgNTg6XHRcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xuICA1OTpcdFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcbiAgNjI6XHRcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXG4gIDY2Olx0XG4gIDY3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIEtWTV9XRVJST1JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NzkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIGFuZCBJT0FQSUMgQ29uZmlndXJhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYEtWTWAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHkuIFdlIGtub3cgdGhhdCBgS1ZNYCByZWxpZXMgb24gYFg4Nl9MT0NBTF9BUElDYCwgYW5kIGBLVk1gIGlzIG5lc3RlZCB3aXRoaW4gYGlmIFZJUlRVQUxJWkFUSU9OYCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZS4gU2VlbXMgbGlrZSBgS1ZNYCBpcyB0aGUgY29uZmlnIHdlJiMzOTtyZSBsb29raW5nIGZvciwgZ29vZCB0byBuYWlsIHRoYXQgZG93bi4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgS1ZNX0lPQVBJQ2AgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0JiMzOTtzIGBkZWZhdWx0IHlgIGFuZCBkZXBlbmRzIG9uIGBLVk1fWDg2YC4gV2hpY2ggbWVhbnMgdGhhdCBpZiBgS1ZNYCBpcyBhY3RpdmUsIHRoZW4gYEtWTV9JT0FQSUNgIHNob3VsZCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsIEkgbWlnaHQgc3RpbGwgd2FudCB0byBleHBsaWNpdGx5IHNwZWNpZnkgYm90aCBgS1ZNYCBhbmQgYEtWTV9JT0FQSUNgIGluIHRoZSBjb25maWcganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHNldHVwLiBJdCBhZGRzIGEgbGF5ZXIgb2YgY2xhcml0eS4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGtleSBmdW5jdGlvbnMgYWdhaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBhcmUgZW50cnkgcG9pbnRzLCB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGxpa2VseSB0byBjYWxsLiBXZSYjMzk7dmUgZ290OiBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBga3ZtX3NldF9pb2FwaWNgLiBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQ/CgpBIGJpdCBtb3JlIGRpZ2dpbmcgc2hvd3MgbWUgdGhhdCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBieSBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfaW5qZWN0X2FsbGAsIGFuZCBgaW9hcGljX3NlcnZpY2VgIGlzIGNhbGxlZCBieSBgaW9hcGljX3NldF9pcnFgLCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCwgYGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrYCwgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIG1vc3QgY29uY2VybmVkIHdpdGggYXJlOiBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGBrdm1fc2V0X2lvYXBpY2AsIGFuZCBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIChldmVuIHRob3VnaCB0aGF0IGxhc3Qgb25lIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBzbyBub3QgZGlyZWN0bHkgY2FsbGFibGUgYnkgZXh0ZXJuYWwgY29kZSkuCgpOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2lvYXBpY19zZXRfaXJxYCBpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5NTpcdFx0XHRlbnRyeS1cdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDE7XG4gNDk2Olx0XG4gNDk3Olx0XHRyZXR1cm4gcmV0O1xuIDQ5ODpcdH1cbiA0OTk6XHRcbiA1MDA6XHRpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXG4gNTAxOlx0XHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuIDUwMjpcdHtcbiA1MDM6XHRcdHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBrdm0tXHUwMDNlYXJjaC52aW9hcGljO1xuIDUwNDpcdFx0aW50IGlycSA9IGUtXHUwMDNlaXJxY2hpcC5waW47XG4gNTA1Olx0XHRpbnQgcmV0LCBpcnFfbGV2ZWw7XG4gNTA2Olx0XG4gNTA3Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGlycSBcdTAwM2MgMCB8fCBpcnEgXHUwMDNlPSBJT0FQSUNfTlVNX1BJTlMpKVxuIDUwODpcdFx0XHRyZXR1cm4gLTE7XG4gNTA5Olx0XG4gNTEwOlx0XHRzcGluX2xvY2soXHUwMDI2aW9hcGljLVx1MDAzZWxvY2spO1xuIDUxMTpcdFx0aXJxX2xldmVsID0gX19rdm1faXJxX2xpbmVfc3RhdGUoXHUwMDI2aW9hcGljLVx1MDAzZWlycV9zdGF0ZXNbaXJxXSxcbiA1MTI6XHRcdFx0XHRcdFx0IGlycV9zb3VyY2VfaWQsIGxldmVsKTtcbiA1MTM6XHRcdHJldCA9IGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaXJxLCBpcnFfbGV2ZWwsIGxpbmVfc3RhdHVzKTtcbiA1MTQ6XHRcbiA1MTU6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlvYXBpYy1cdTAwM2Vsb2NrKTtcbiA1MTY6XHRcbiA1MTc6XHRcdHJldHVybiByZXQ7XG4gNTE4Olx0fVxuIDUxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBJT0FQSUMgSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB3ZSYjMzk7cmUgbWFuYWdpbmcgYW5kIGNvbmZpZ3VyaW5nIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMgY29udGV4dC4gRm9jdXNpbmcgb24gdGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgY3VycmVudCBzdGF0ZS4KCk5vdywgd2l0aCB0aGF0IGluIG1pbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoZSBpbnRlcnJ1cHQgaXMgc2V0LiBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgb3ZlciB0byBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgRW5kIG9mIEludGVycnVwdCBoYW5kbGluZyBsb2dpYyB3aWxsIGJlLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSB0aGUgb3ZlcmFsbCBwaWN0dXJlIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4MDpcdFx0XHR9XG4gNTgxOlx0XHR9IGVsc2Uge1xuIDU4MjpcdFx0XHRpb2FwaWMtXHUwMDNlaXJxX2VvaVtwaW5dID0gMDtcbiA1ODM6XHRcdH1cbiA1ODQ6XHR9XG4gNTg1Olx0XG4gNTg2Olx0dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxuIDU4NzpcdHtcbiA1ODg6XHRcdGludCBpO1xuIDU4OTpcdFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudmlvYXBpYztcbiA1OTA6XHRcbiA1OTE6XHRcdHNwaW5fbG9jayhcdTAwMjZpb2FwaWMtXHUwMDNlbG9jayk7XG4gNTkyOlx0XHRydGNfaXJxX2VvaShpb2FwaWMsIHZjcHUsIHZlY3Rvcik7XG4gNTkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT0FQSUNfTlVNX1BJTlM7IGkmIzQzOyYjNDM7KSB7XG4gNTk0Olx0XHRcdHVuaW9uIGt2bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudCA9IFx1MDAyNmlvYXBpYy1cdTAwM2VyZWRpcnRibFtpXTtcbiA1OTU6XHRcbiA1OTY6XHRcdFx0aWYgKGVudC1cdTAwM2VmaWVsZHMudmVjdG9yICE9IHZlY3RvcilcbiA1OTc6XHRcdFx0XHRjb250aW51ZTtcbiA1OTg6XHRcdFx0a3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZSh2Y3B1LCBpb2FwaWMsIHRyaWdnZXJfbW9kZSwgaSk7XG4gNTk5Olx0XHR9XG4gNjAwOlx0XHRzcGluX3VubG9jayhcdTAwMjZpb2FwaWMtXHUwMDNlbG9jayk7XG4gNjAxOlx0fVxuIDYwMjpcdFxuIDYwMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9pb2FwaWMgKnRvX2lvYXBpYyhzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KVxuIDYwNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgb24gRU9JIFVwZGF0ZXMqKgoKQWxyaWdodCwgKmt2bV9pb2FwaWNfdXBkYXRlX2VvaSog4oCTIHRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSBsaWtlIHRoYXQuIFdlJiMzOTtyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCB0aGUgZW5kLW9mLWludGVycnVwdCBwcm9jZXNzIGhlcmUsIGFuZCB0aGF0IGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgemVyb2VzIGluIG9uIHRoZSBjb3JlIGNvbmNlcm4uIFRoZSBmb2N1cyBvbiB0aGUgRU9JIHBhcnQgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBpcyBjb3JyZWN0LiBXZSBzaG91bGQgY2hlY2sgdGhhdCBmdW5jdGlvbi4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgdGhlIHJlbGF0ZWQgYGt2bV9zZXRfaW9hcGljYCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQgZml0cyBpbiB0aGUgcGljdHVyZS4uLiB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzLiBJdCBtYXkgb2ZmZXIgY2x1ZXMgdG8gb3RoZXIgcG9pbnRzIG9mIGludGVyZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0e1xuIDc2MTpcdFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cdTAwM2VhcmNoLnZpb2FwaWM7XG4gNzYyOlx0XG4gNzYzOlx0XHRzcGluX2xvY2soXHUwMDI2aW9hcGljLVx1MDAzZWxvY2spO1xuIDc2NDpcdFx0bWVtY3B5KHN0YXRlLCBpb2FwaWMsIHNpemVvZihzdHJ1Y3Qga3ZtX2lvYXBpY19zdGF0ZSkpO1xuIDc2NTpcdFx0c3RhdGUtXHUwMDNlaXJyIFx1MDAyNj0gfmlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkO1xuIDc2NjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW9hcGljLVx1MDAzZWxvY2spO1xuIDc2NzpcdH1cbiA3Njg6XHRcbiA3Njk6XHR2b2lkIGt2bV9zZXRfaW9hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKVxuIDc3MDpcdHtcbiA3NzE6XHRcdHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBrdm0tXHUwMDNlYXJjaC52aW9hcGljO1xuIDc3MjpcdFxuIDc3MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlvYXBpYy1cdTAwM2Vsb2NrKTtcbiA3NzQ6XHRcdG1lbWNweShpb2FwaWMsIHN0YXRlLCBzaXplb2Yoc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUpKTtcbiA3NzU6XHRcdGlvYXBpYy1cdTAwM2VpcnIgPSAwO1xuIDc3NjpcdFx0aW9hcGljLVx1MDAzZWlycl9kZWxpdmVyZWQgPSAwO1xuIDc3NzpcdFx0a3ZtX21ha2Vfc2Nhbl9pb2FwaWNfcmVxdWVzdChrdm0pO1xuIDc3ODpcdFx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXHUwMDNlaXJyKTtcbiA3Nzk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlvYXBpYy1cdTAwM2Vsb2NrKTtcbiA3ODA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjY4CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSU9BUElDIEVtdWxhdGlvbiBCdWcgRml4KioKCk9rYXksIEkmIzM5O3ZlIGdvdCBpdC4gYGt2bV9zZXRfaW9hcGljYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIGFuZCBpdCYjMzk7cyBuaWNlIHRvIHNlZSB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBvZiB0aGUgb3RoZXIgSU9BUElDIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgIGBrdm1faW9hcGljX3NldF9pcnFgCiogICBga3ZtX2lvYXBpY191cGRhdGVfZW9pYAoqICAgYGt2bV9zZXRfaW9hcGljYAoKQW5kIHRoZSByZWxldmFudCBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGR1cmluZyB0aGUgZnV6emluZzoKCiogICBgS1ZNYAoqICAgYEtWTV9JT0FQSUNgCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gSU9BUElDIGVtdWxhdGlvbiBidWcgd2l0aGluIEtWTS4gSXQmIzM5O3MgdG91Y2hpbmcgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYCB0byBjb3JyZWN0bHkgbWFuYWdlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZvciBib3RoIGVkZ2UgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGtpbmQgb2YgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJdCYjMzk7cyByZWFjaGFibGUsIGFuZCB0aGUgcG90ZW50aWFsIGZvciB1bmNvdmVyaW5nIHN1YnRsZSBpc3N1ZXMgaW4gdGhpcyBwYXJ0IG9mIEtWTSBpcyBoaWdoLgoKU28sIGhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZywgaW4gYSBudXRzaGVsbDogVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBpbnRlcnJ1cHQgc3RhdGUgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgdHJhY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIGNvcmUsIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgKEtWTSksIG1ha2luZyBpdCBwcmltZSBmb3IgZnV6emluZy4gVGhlIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBrdm1fc2V0X2lvYXBpY2AuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2t2bV9zZXRfaW9hcGljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgS1ZNIElPQVBJQyBlbXVsYXRpb24gd2hlcmUgYHJlbW90ZV9pcnJgIGFuZCBgaXJyX2RlbGl2ZXJlZGAgd2VyZSBub3QgY29ycmVjdGx5IHVwZGF0ZWQgZm9yIGVkZ2UgYW5kIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgKEtWTSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBrdm1fc2V0X2lvYXBpY2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU9BUElDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2lvYXBpY19zZXRfaXJxJiMzNDssCiAgICAmIzM0O2t2bV9pb2FwaWNfdXBkYXRlX2VvaSYjMzQ7LAogICAgJiMzNDtrdm1fc2V0X2lvYXBpYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEtWTSBJT0FQSUMgZW11bGF0aW9uIHdoZXJlIGByZW1vdGVfaXJyYCBhbmQgYGlycl9kZWxpdmVyZWRgIHdlcmUgbm90IGNvcnJlY3RseSB1cGRhdGVkIGZvciBlZGdlIGFuZCBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29tcG9uZW50IChLVk0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBga3ZtX3NldF9pb2FwaWNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2I4OWM2ZjRkOTRlNDJlNmFmYjNiZThkNzUxYmY4NjZiYWE2NTU5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE4OjU5OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jCmluZGV4IDc1NzY2N2ZiMmJmYTAuLjY3NmVmZmQ2NzRmOWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsCiAJb2xkX2lyciA9IGlvYXBpYy0mZ3Q7aXJyOwogCWlvYXBpYy0mZ3Q7aXJyIHw9IG1hc2s7CiAJaWYgKGVkZ2UpIHsKLQkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAkJaWYgKG9sZF9pcnIgPT0gaW9hcGljLSZndDtpcnIpIHsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAl9CiAKIAlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpOwpAQCAtNDkxLDcgJiM0Mzs0OTEsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpCiAJfSBlbHNlCiAJCXJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtJmd0O2t2bSwgTlVMTCwgJmFtcDtpcnFlKTsKIAotCWlmIChyZXQgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKJiM0MzsJaWYgKHJldCAmZ3Q7IDAgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKIAkJZW50cnktJmd0O2ZpZWxkcy5yZW1vdGVfaXJyID0gMTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA2ZmMzNGU5YmY4ZTFiLi44OWUzZjgyZTc1YjAxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTg2LDYgJiM0Mzs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl9mZWF0dXJlcwogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2lwaQogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoCiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaW9hcGljX3N0YXRlX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fcHZfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2J1c2xvY2tfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRhMDI3NmExNTQyZmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTM5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YXBpYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOCQkxNgomIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1IJCTB4NTAKJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRAkJMHhmZQomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHCTAKJiM0MzsjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUcJMQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpcnFjaGlwLSZndDtjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDOwomIzQzOwlyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTsKJiM0MzsJaWYgKHIgJmFtcDsmYW1wOyBlcnJubyA9PSBFTlhJTykKJiM0MzsJCV9fVEVTVF9SRVFVSVJFKDAsICYjMzQ7SW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGUmIzM0Oyk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCwKJiM0MzsJCQkgICAgIHUzMiBkZXN0X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID0KJiM0MzsJCVRFU1RfVkVDVE9SOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPQomIzQzOwkJZGVzdF9pZDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9CiYjNDM7CQlsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDoKJiM0MzsJCQkJICBURVNUX0lPQVBJQ19FREdFX1RSSUc7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0gewomIzQzOwkJLmlycSA9IFRFU1RfSU9BUElDX1BJTiwKJiM0MzsJCS5sZXZlbCA9IGxldmVsLAomIzQzOwl9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgJmFtcDtpcnEpOwomIzQzOwlyZXR1cm4gaXJxLnN0YXR1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CVRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyICZhbXA7ICgxICZsdDsmbHQ7IFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleCYjMzQ7LAomIzQzOwkJICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzKCk7CiYjNDM7CXZtX2NyZWF0ZV9pcnFjaGlwKHZtKTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlnZXRfaW9hcGljKHZtLCAmYW1wO2lycWNoaXApOwomIzQzOwlURVNUX0FTU0VSVCghaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyLAomIzQzOwkJICAgICYjMzQ7S1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJiMzOTt0IGRlbGl2ZXJlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXU2NCBhcGljYmFzZTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIE5VTEwpOwomIzQzOwlhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7CiYjNDM7CXZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSwKJiM0MzsJCSAgICAgYXBpY2Jhc2UgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9HRVRfTEFQSUMsICZhbXA7bGFwaWMpOwomIzQzOwkqKHUzMiAqKShsYXBpYy5yZWdzICYjNDM7IEFQSUNfU1BJVikgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKJiM0MzsJdmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCAmYW1wO2xhcGljKTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtJmd0O2lkKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyAmZ3Q7IDAsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkJiMzNDssIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoIXN0YXR1cywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpOwomIzQzOwl0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MwoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBvZiBLVk0gSU9BUElDIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCwgc3BlY2lmaWNhbGx5IGBpb2FwaWNfc2V0X2lycWAgYW5kIGBpb2FwaWNfc2VydmljZWAuIE15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzLCB3aGljaCBjb3VsZCBiZSBkZXRlY3RlZCBieSBLTVNBTi4KCkluIGBpb2FwaWNfc2V0X2lycWAsIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFyb3VuZCBgaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzaztgIGhhcyBiZWVuIG1vZGlmaWVkLCBhbmQgYSBjaGVjayBgaWYgKG9sZF9pcnIgPT0gaW9hcGljLSZndDtpcnIpYCBzZWVtcyB0byBoYXZlIGJlZW4gaW50cm9kdWNlZCBpbiBhIG1vcmUgbG9naWNhbCBwb3NpdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBlZGdlIHRyaWdnZXJlZCBjYXNlIG5vdy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIGNvbmNlcm4uIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIHRoZSBpbnZvbHZlZCB2YXJpYWJsZXM6IGBvbGRfaXJyYCwgYGlvYXBpYy0mZ3Q7aXJyYCwgYW5kIGBtYXNrYCwgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoZXJlLiBXZSBhcmUgZGVhbGluZyB3aXRoIEtWTSBJT0FQSUMgc3RhdGUsIGRlYWxpbmcgd2l0aCBlZGdlL2xldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLgoKTW92aW5nIG9uIHRvIGBpb2FwaWNfc2VydmljZWAsIHRoZSBjb25kaXRpb25hbCBgcmV0YCBpbiBgaWYgKHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKWAgaGFzIGJlZW4gY2hhbmdlZCB0byBgcmV0ICZndDsgMGAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwbGFjZSB0byBkb3VibGUtY2hlY2suIEhvd2V2ZXIsIGFnYWluLCBgcmV0YCBpcyBhbiBgaW50YCwgYW5kIGBpcnFlYCBpcyBhIGBzdHJ1Y3Qga3ZtX2xhcGljX2lycWAuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSBhIHNtYWxsIGZpeCBpbiBsb2dpYywgdG8gYWRkcmVzcyBhIGNvcm5lciBjYXNlIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiBJJiMzOTttIHJlYXNvbmFibHkgY2VydGFpbiBpdCBpcyBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNgLiBUaGlzIGlzIGdvb2QsIGl0IHZhbGlkYXRlcyB0aGUgY2hhbmdlcy4KClRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBmb2N1cyBvbiBLVk0gSU9BUElDIHN0YXRlIGxvZ2ljLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgoqKk5lZWRzS01TQU4gPSBmYWxzZSoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTguMzQ5NjE3NzcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5MTQ3MzkzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU9BUElDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2lvYXBpY19zZXRfaXJxXCIsXG4gICAgXCJrdm1faW9hcGljX3VwZGF0ZV9lb2lcIixcbiAgICBcImt2bV9zZXRfaW9hcGljXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGVkZ2UtdHJpZ2dlcmVkIGFuZCBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cyBpbiB0aGUgS1ZNIElPQVBJQyAoc3BlY2lmaWNhbGx5IHRoZSBgaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCBmaWVsZHMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgc3RhdGUgbWFjaGluZSBsb2dpYyBmaXhlcyBmb3IgaW50ZXJydXB0IGRlbGl2ZXJ5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTguMzQ5NjIzOTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1Nzc2OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2I4OWM2ZjRkOTRlNDJlNmFmYjNiZThkNzUxYmY4NjZiYWE2NTU5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxODo1OTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcXG5pbmRleCA3NTc2NjdmYjJiZmEwLi42NzZlZmZkNjc0ZjllIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xcbkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXFxuIFxcdG9sZF9pcnIgPSBpb2FwaWMtXFx1MDAzZWlycjtcXG4gXFx0aW9hcGljLVxcdTAwM2VpcnIgfD0gbWFzaztcXG4gXFx0aWYgKGVkZ2UpIHtcXG4tXFx0XFx0aW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkIFxcdTAwMjY9IH5tYXNrO1xcbiBcXHRcXHRpZiAob2xkX2lyciA9PSBpb2FwaWMtXFx1MDAzZWlycikge1xcbiBcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXHRcXHRpb2FwaWMtXFx1MDAzZWlycl9kZWxpdmVyZWQgXFx1MDAyNj0gfm1hc2s7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxLCBsaW5lX3N0YXR1cyk7XFxuQEAgLTQ5MSw3ICs0OTEsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVxcdTAwM2Vrdm0sIE5VTEwsIFxcdTAwMjZpcnFlKTtcXG4gXFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi44OWUzZjgyZTc1YjAxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTg2LDYgKzg2LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfZmVhdHVyZXNcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfaXBpXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3N2bV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2lvYXBpY19zdGF0ZV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fcHZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYTAyNzZhMTU0MmZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMTM5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJhcGljLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXFx0XFx0MTZcXG4rI2RlZmluZSBURVNUX1ZFQ1RPUlxcdFxcdDB4NTBcXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcXHRcXHQweGZlXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXFx0MFxcbisjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUdcXHQxXFxuK1xcbitzdGF0aWMgdm9pZCBnZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXFxuK3tcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRpcnFjaGlwLVxcdTAwM2VjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDO1xcbitcXHRyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTtcXG4rXFx0aWYgKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8pXFxuK1xcdFxcdF9fVEVTVF9SRVFVSVJFKDAsIFxcXCJJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZVxcXCIpO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxcbit7XFxuK1xcdGlycWNoaXAtXFx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCxcXG4rXFx0XFx0XFx0ICAgICB1MzIgZGVzdF9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcXG4rXFxuK1xcdGdldF9pb2FwaWModm0sIFxcdTAwMjZpcnFjaGlwKTtcXG4rXFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID1cXG4rXFx0XFx0VEVTVF9WRUNUT1I7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9XFxuK1xcdFxcdGRlc3RfaWQ7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy50cmlnX21vZGUgPVxcbitcXHRcXHRsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDpcXG4rXFx0XFx0XFx0XFx0ICBURVNUX0lPQVBJQ19FREdFX1RSSUc7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7XFxuK1xcbitcXHRzZXRfaW9hcGljKHZtLCBcXHUwMDI2aXJxY2hpcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcXG4rXFx0XFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcXG4rXFx0XFx0LmxldmVsID0gbGV2ZWwsXFxuK1xcdH07XFxuK1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXFx1MDAyNmlycSk7XFxuK1xcdHJldHVybiBpcnEuc3RhdHVzO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XFxuK1xcbitcXHRnZXRfaW9hcGljKHZtLCBcXHUwMDI2aXJxY2hpcCk7XFxuK1xcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleFxcXCIsXFxuK1xcdFxcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzKCk7XFxuK1xcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcXG4rXFxuK1xcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFxcXCIsIHN0YXR1cyk7XFxuK1xcbitcXHRnZXRfaW9hcGljKHZtLCBcXHUwMDI2aXJxY2hpcCk7XFxuK1xcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXFxuK1xcdFxcdCAgICBcXFwiS1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJ3QgZGVsaXZlcmVkXFxcIik7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHU2NCBhcGljYmFzZTtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIE5VTEwpO1xcbitcXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XFxuK1xcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcXG4rXFx0XFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XFxuK1xcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgXFx1MDAyNmxhcGljKTtcXG4rXFx0Kih1MzIgKikobGFwaWMucmVncyArIEFQSUNfU1BJVikgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDtcXG4rXFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcXHUwMDI2bGFwaWMpO1xcbitcXG4rXFx0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXMgXFx1MDAzZSAwLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcXFwiLCBzdGF0dXMpO1xcbitcXG4rXFx0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoIXN0YXR1cyxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBkdXBsaWNhdGUgZWRnZSBpbnRlcnJ1cHQgdG8gYmUgY29hbGVzY2VkLCBnb3QgJWRcXFwiLFxcbitcXHRcXHQgICAgc3RhdHVzKTtcXG4rXFxuK1xcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XFxuK1xcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTkuNjE2MTA4MTEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODQ5Mzk1NzQxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU9BUElDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2lvYXBpY19zZXRfaXJxXCIsXG4gICAgXCJrdm1faW9hcGljX3VwZGF0ZV9lb2lcIixcbiAgICBcImt2bV9zZXRfaW9hcGljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2I4OWM2ZjRkOTRlNDJlNmFmYjNiZThkNzUxYmY4NjZiYWE2NTU5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE4OjU5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5pbmRleCA3NTc2NjdmYjJiZmEwLi42NzZlZmZkNjc0ZjllIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHR9XG4gXG4gXHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuQEAgLTQ5MSw3ICs0OTEsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cdTAwM2Vrdm0sIE5VTEwsIFx1MDAyNmlycWUpO1xuIFxuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4rXHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2ZlYXR1cmVzXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2lvYXBpY19zdGF0ZV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fY2xvY2tfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYTAyNzZhMTU0MmZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbkBAIC0wLDAgKzEsMTM5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFwiYXBpYy5oXCJcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuK1xuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4rI2RlZmluZSBURVNUX1ZFQ1RPUlx0XHQweDUwXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcdFx0MHhmZVxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4rI2RlZmluZSBURVNUX0lPQVBJQ19MRVZFTF9UUklHXHQxXG4rXG4rc3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuK3tcbitcdGludCByO1xuK1xuK1x0aXJxY2hpcC1cdTAwM2VjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDO1xuK1x0ciA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4rXHRpZiAociBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8pXG4rXHRcdF9fVEVTVF9SRVFVSVJFKDAsIFwiSW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGVcIik7XG4rXG4rXHRURVNUX0FTU0VSVCghciwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfSVJRQ0hJUCwgcikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXG4re1xuK1x0aXJxY2hpcC1cdTAwM2VjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDO1xuK1x0dm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLFxuK1x0XHRcdCAgICAgdTMyIGRlc3RfaWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID1cbitcdFx0VEVTVF9WRUNUT1I7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPVxuK1x0XHRkZXN0X2lkO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy50cmlnX21vZGUgPVxuK1x0XHRsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDpcbitcdFx0XHRcdCAgVEVTVF9JT0FQSUNfRURHRV9UUklHO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7XG4rXG4rXHRzZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbit9XG4rXG4rc3RhdGljIGludCBrdm1faXJxX2xpbmVfc3RhdHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbGV2ZWwpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0ge1xuK1x0XHQuaXJxID0gVEVTVF9JT0FQSUNfUElOLFxuK1x0XHQubGV2ZWwgPSBsZXZlbCxcbitcdH07XG4rXG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXHUwMDI2aXJxKTtcbitcdHJldHVybiBpcnEuc3RhdHVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXG4rXHRcdCAgICBcIkV4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXhcIixcbitcdFx0ICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xuK1x0dm1fY3JlYXRlX2lycWNoaXAodm0pO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK1x0VEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lycixcbitcdFx0ICAgIFwiS1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJ3QgZGVsaXZlcmVkXCIpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHR1NjQgYXBpY2Jhc2U7XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBOVUxMKTtcbitcdGFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTtcbitcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcbitcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9HRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbitcdCoodTMyICopKGxhcGljLnJlZ3MgKyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoIXN0YXR1cyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXCIsXG4rXHRcdCAgICBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0dGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQoKTtcbitcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTkuNjE2MTA5MzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1NzQxMTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gSU9BUElDIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AgYW5kIGFkZHMgYSB0ZXN0IGZvciBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtb2RpZmljYXRpb25zIHRvIGBpb2FwaWNfc2V0X2lycWAgYW5kIGBpb2FwaWNfc2VydmljZWAsIHdoaWNoIGFyZSBjcml0aWNhbCBmb3IgZW11bGF0aW5nIHRoZSBJT0FQSUMgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGVzc2VudGlhbCBpbiBhbnkgS1ZNIHNldHVwLCB0aGV5J3JlIGRlZmluaXRlbHkgdXNlZCBpbiByZWFsIFZNcy5cblxuSSBzZWUgdGhhdCB0aGUgY2hhbmdlcyBpbiBgaW9hcGljX3NldF9pcnFgIGFyZSByZWxhdGVkIHRvIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAoSVJSKSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFuZCBjbGVhcmluZyB0aGUgYGlycl9kZWxpdmVyZWRgIGZsYWcuIFRoZSBtb2RpZmljYXRpb24gaW4gYGlvYXBpY19zZXJ2aWNlYCBub3cgY2hlY2tzIGlmIHRoZSByZXR1cm4gY29kZSBpcyBwb3NpdGl2ZSwgYW5kIGl0J3MgZGVhbGluZyB3aXRoIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFuZCBgcmVtb3RlX2lycmAuIEl0IHNlZW1zIGxpa2UgaXQncyByZWZpbmluZyBob3cgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIGhhbmRsZWQgb3IgYWNrbm93bGVkZ2VkIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgdkNQVSBpbnRlcmFjdHMgd2l0aCB0aGUgSU9BUElDIGFuZCBwb3RlbnRpYWxseSBob3cgaW50ZXJydXB0IGRlbGl2ZXJ5IGlzIG1hbmFnZWQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGludGVycnVwdCBsYXRlbmN5IG9yIGJlaGF2aW9yLlxuXG5HaXZlbiB0aGUgZmlsZSwgSSdtIHRoaW5raW5nIHRoZSBjb2RlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIGJ1dCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3RvcnkgdG8gYmUgc3VyZS4gSXQncyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgaXQgaXMgZW5hYmxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDowNi42NzM1MjMzNjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MjQ0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9hcGljLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MTE9a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMjprdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEzLWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbi0tXFxuYXJjaC94ODYva3ZtL2xhcGljLmM9MTU0Nj1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3NlbmRfZW9pKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNTQ5LVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjE1NTA6XFx0LyogRW9pIHRoZSBpb2FwaWMgb25seSBpZiB0aGUgaW9hcGljIGRvZXNuJ3Qgb3duIHRoZSB2ZWN0b3IuICovXFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMTU1MS1cXHRpZiAoIWt2bV9pb2FwaWNfaGFuZGxlc192ZWN0b3IoYXBpYywgdmVjdG9yKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MDYuNzE4NDUyNTU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMjMzNDQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gSU9BUElDIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBLVk0gSS9PIEFQSUMgaXMgc2V0IHVwLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIGNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZCBieSBgQ09ORklHX0tWTV9JT0FQSUNgIGJlaW5nIGVuYWJsZWQuIE5hdHVyYWxseSwgdGhhdCdzIHVzdWFsbHkgc2VsZWN0ZWQgd2hlbiBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIHNlbGVjdGVkLiBUbyBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgbG9naWMgY29ycmVjdGx5LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEl0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBLVk0gY29uZmlndXJhdGlvbiBkZXRhaWxzIG9uIHg4Niwgc28gdGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDoxMC4zNTA3ODkwNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMzk4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JT0FQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDoxMC4zOTUwMzE5NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ2MDEzMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIHRoZSBgS1ZNX0lPQVBJQ2Agc2VsZWN0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBLVk1fSU9BUElDYCBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGUgc2VsZWN0aW9uIG9mIGBLVk1fSU9BUElDYC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZsYWcgb3IgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBjaG9zZW4gb3IgZW5hYmxlZCB3aXRoaW4gdGhlIEtWTSBjb2RlYmFzZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgd2hlcmUgdGhlIG1hY3JvIGlzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSB0aGUgKmxvZ2ljKiB0aGF0IGRldGVybWluZXMgaXRzIHVzZSByZXNpZGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucywgY29uZmlndXJhdGlvbnMsIG9yIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0aGF0IGxlYWQgdG8gYEtWTV9JT0FQSUNgIGJlaW5nIGFjdGl2ZS4gSXMgaXQgc3BlY2lmaWMgQ1BVIG1vZGVscz8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgc3lzdGVtIGJvYXJkIGZlYXR1cmVzLCBCSU9TIHNldHRpbmdzLCBvciBvdGhlciBLVk0gYnVpbGQgb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBncmVwIHRvIGZpbmQgd2hlcmUgaXQncyB1c2VkIGFuZCB0aGVuIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYW5kIGxvZ2ljYWwgb3BlcmF0b3JzIHRoYXQgdWx0aW1hdGVseSBlbmFibGUgb3IgZGlzYWJsZSBpdC4gUGVyaGFwcyB0aGVyZSdzIGFuIGBpZmAgc3RhdGVtZW50IGJhc2VkIG9uIGEga2VybmVsIHBhcmFtZXRlciwgYSBoYXJkd2FyZSBmZWF0dXJlIGJpdCwgb3IgYSBLVk0gY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDoxMy44NDEwNDgwMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MjY4NTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fSU9BUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjEzLjg5MjQ4MTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NTg3MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktWTV9JT0FQSUMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gaW1wbGVtZW50YXRpb24sIGxvY2F0ZWQgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBgS1ZNX0lPQVBJQ2Agb3B0aW9uLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBwcm9jZWVkaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgYEtWTV9JT0FQSUNgIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIGhvdyB0aGlzIGFzcGVjdCBmdW5jdGlvbnMgd2l0aGluIEtWTSdzIGRlc2lnbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIGRvdWJsZS1jaGVjayB0aGF0IGZpcnN0LCBhbmQgdGhlbiBidWlsZCBvdXR3YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjE2LjY1ODM1NTg0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MzEzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0lPQVBJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MTE9a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMjprdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEzLWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbi0tXFxuYXJjaC94ODYva3ZtL2k4MjU0LmgtMTItXFxuYXJjaC94ODYva3ZtL2k4MjU0Lmg6MTM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2k4MjU0LmgtMTQtc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUge1xcbi0tXFxuYXJjaC94ODYva3ZtL2k4MjU0Lmg9Njk9dm9pZCBrdm1fZnJlZV9waXQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaDo3MDojZW5kaWYgLyogQ09ORklHX0tWTV9JT0FQSUMgKi9cXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaC03MS1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC04LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaDo5OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaD0xMj1zdHJ1Y3Qga3ZtX3ZjcHU7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oLTEzLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaDoxNDojZGVmaW5lIElPQVBJQ19OVU1fUElOUyAgS1ZNX0lPQVBJQ19OVU1fUElOU1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xNS0jZGVmaW5lIElPQVBJQ19WRVJTSU9OX0lEIDB4MTFcXHQvKiBJT0FQSUMgdmVyc2lvbiAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oPTExND12b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oLTExNS1cXHRcXHRcXHQgICB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycyk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oOjExNjojZW5kaWYgLyogQ09ORklHX0tWTV9JT0FQSUMgKi9cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTE3LVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jPTU5PWludCBrdm1fY3B1X2hhc19leHRpbnQoc3RydWN0IGt2bV92Y3B1ICp2KVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jLTgwLVxcbmFyY2gveDg2L2t2bS9pcnEuYzo4MTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtODItXFx0aWYgKHBpY19pbl9rZXJuZWwodi1cXHUwMDNla3ZtKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYz0xMjg9aW50IGt2bV9jcHVfZ2V0X2V4dGludChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTQyLVxcbmFyY2gveDg2L2t2bS9pcnEuYzoxNDM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2lycS5jLTE0NC1cXHRpZiAocGljX2luX2tlcm5lbCh2LVxcdTAwM2Vrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jPTE3Nz12b2lkIF9fa3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0xNzktXFx0X19rdm1fbWlncmF0ZV9hcGljX3RpbWVyKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9pcnEuYzoxODA6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2lycS5jLTE4MS1cXHRfX2t2bV9taWdyYXRlX3BpdF90aW1lcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYz0yOTY9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzA0LVxcdHN3aXRjaCAodWUtXFx1MDAzZXR5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vaXJxLmM6MzA1OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9pcnEuYy0zMDYtXFx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDpcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0zMTktXFx0XFx0Y2FzZSBLVk1fSVJRQ0hJUF9JT0FQSUM6XFxuYXJjaC94ODYva3ZtL2lycS5jOjMyMDpcXHRcXHRcXHRpZiAodWUtXFx1MDAzZXUuaXJxY2hpcC5waW4gXFx1MDAzZT0gS1ZNX0lPQVBJQ19OVU1fUElOUylcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzIxLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jPTUzMz12b2lkIGt2bV9hcmNoX3VwZGF0ZV9pcnFmZF9yb3V0aW5nKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCxcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy01NDgtXFxuYXJjaC94ODYva3ZtL2lycS5jOjU0OTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtNTUwLSNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcXFxcXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmgtMjAtXFxuYXJjaC94ODYva3ZtL2lycS5oOjIxOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9pcnEuaC0yMi1cXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuaD03Nj1zdGF0aWMgaW5saW5lIGludCBpcnFjaGlwX2Z1bGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5oLTgzLX1cXG5hcmNoL3g4Ni9rdm0vaXJxLmg6ODQ6I2Vsc2UgLyogQ09ORklHX0tWTV9JT0FQSUMgKi9cXG5hcmNoL3g4Ni9rdm0vaXJxLmgtODUtc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgaXJxY2hpcF9mdWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTE0MDA9c3RhdGljIGludCBfX2FwaWNfYWNjZXB0X2lycShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE0MjItXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MTQyMzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNDI0LVxcdFxcdGlmIChydGNfc3RhdHVzKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0xNTQ2PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfc2VuZF9lb2koc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE1NzctXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MTU3ODojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNTc5LVxcdGlmIChhcGljX3Rlc3RfdmVjdG9yKHZlY3RvciwgYXBpYy1cXHUwMDNlcmVncyArIEFQSUNfVE1SKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTMzMDY9aW50IGt2bV9hcGljX3NldF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgKnMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0zMzM5LVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjMzNDA6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMzM0MS1cXHRpZiAoaW9hcGljX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg9MjI4PVRSQUNFX0VWRU5UKGt2bV9jcHVpZCxcXG4tLVxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3Mi1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoyNzM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjc0LVRSQUNFX0VWRU5UKGt2bV9pb2FwaWNfc2V0X2lycSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz00NzY4PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDc3OS1cXHRjYXNlIEtWTV9DQVBfQ0xPQ0tTT1VSQ0U6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ3ODA6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ3ODEtXFx0Y2FzZSBLVk1fQ0FQX1BJVDpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz03MjU4PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjYzLVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MjY0OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS94ODYuYy03MjY1LVxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI5OC1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzI5OTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzMwMC1cXHRjYXNlIEtWTV9DUkVBVEVfSVJRQ0hJUDoge1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMDUwPXN0YXRpYyB2b2lkIHZjcHVfc2Nhbl9pb2FwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDYxLVxcdFxcdGt2bV9zY2FuX2lvYXBpY19yb3V0ZXModmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5pb2FwaWNfaGFuZGxlZF92ZWN0b3JzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEwNjI6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDYzLVxcdGVsc2UgaWYgKGlvYXBpY19pbl9rZXJuZWwodmNwdS1cXHUwMDNla3ZtKSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMzQyNT12b2lkIGt2bV9hcmNoX3ByZV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzQzNi1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTM0Mzc6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNDM4LVxcdGt2bV9mcmVlX3BpdChrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzNDQ3PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM0NjYtXFx0a3ZtX2ZyZWVfbXNyX2ZpbHRlcihzcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGt2bS1cXHUwMDNlYXJjaC5tc3JfZmlsdGVyLCBcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1LCAxKSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzNDY3OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMzQ2OC1cXHRrdm1fcGljX2Rlc3Ryb3koa3ZtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MTYuNzEwNzkwNTIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTA1NjkxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgQ09ORklHX0tWTV9JT0FQSUNgIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIEknbSBpbnRlcmVzdGVkIGluLiBJICp0aGluayogaXQncyBzZWxlY3RlZCBzb21ld2hlcmUgYnkgYENPTkZJR19LVk1gLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlLi4uIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBiZWZvcmUgSSBtYWtlIGFueSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MTkuOTAxMzYxOTk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5MzY4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9JT0FQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MTkuOTQ5MjYxMDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDU4NDc2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgTXkgV29yayBcdTAwMjYgRm9sbG93aW5nIFVwKipcblxuSG1tLCB3YXNuJ3QgSSBqdXN0IGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGR1cGxpY2F0aW5nIGVmZm9ydC4gT2theSwgbGV0J3Mgc2VlLi4uSSB0aGluayBJIHJlbWVtYmVyIHdvcmtpbmcgd2l0aCB0aGUgSU9BUElDIHJlY2VudGx5LiBXaGVyZSB3YXMgdGhhdCBzZXR0aW5nIGRlZmluZWQ/IFJpZ2h0LCBpdCB3YXMgaW4gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIExldCdzIG5hdmlnYXRlIHRoZXJlIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IGFscmVhZHkgYWRkcmVzc2VkIHdoYXRldmVyIHRhc2sgSSB3YXMganVzdCBwb25kZXJpbmcgdGhhdCBicm91Z2h0IHRoYXQgc2V0dGluZyB0byBtaW5kLiBJJ2xsIHNlYXJjaCBmb3IgYEtWTV9JT0FQSUNgIGFuZCBxdWlja2x5IGNvbmZpcm0gaXRzIHN0YXR1cy4gRG9uJ3Qgd2FudCB0byBzcGluIG15IHdoZWVscyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTYzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjIzLjM1NTExMTA3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbiAxNjE6XFx0XFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDE2MjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTYzOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbiAxNjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuIDE2NTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE2NjpcXHRcXHRoZWxwXFxuIDE2NzpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcXG4gMTY4OlxcdFxcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG4gMTY5OlxcdFxcdCAgRW5jcnlwdGVkIFN0YXRlIChTRVYtRVMpLCBhbmQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE3MDpcXHRcXHQgIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSB0ZWNobm9sb2dpZXMgb24gQU1EIHByb2Nlc3NvcnMuXFxuIDE3MTpcXHRcXG4gMTcyOlxcdGNvbmZpZyBLVk1fSU9BUElDXFxuIDE3MzpcXHRcXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4gMTc0OlxcdFxcdGRlZmF1bHQgeVxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE3NjpcXHRcXHRoZWxwXFxuIDE3NzpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIGFuIEkvTyBBUElDLCBQSUMsIGFuZCBQSVQsIGkuZS5cXG4gMTc4OlxcdFxcdCAgZm9yIGZ1bGwgaW4ta2VybmVsIEFQSUMgZW11bGF0aW9uLlxcbiAxNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjIzLjM1NTE3Nzk0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2NDQ3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIE1hemUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgZGVmYXVsdCB5YCBhbmQsIGNydWNpYWxseSwgYGRlcGVuZHMgb24gS1ZNX1g4NmAuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIEknbSBsb29raW5nIGF0LCBsZXQncyBqdXN0IGNhbGwgaXQgXCJ0aGlzIHNldHRpbmcsXCIgZGVmYXVsdHMgdG8gJ3llcycgYnV0IG9ubHkgKmlmKiBgS1ZNX1g4NmAgaXMgYWxzbyBlbmFibGVkLiBGaW5lLCBzbyBub3cgSSdtIHRoaW5raW5nLCBgS1ZNYCBhbmQgYEtWTV9YODZgIGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9mIGludGVyZXN0IGhlcmUuIFdoZXJlIGlzIGBLVk1fWDg2YCBkZWZpbmVkLCBleGFjdGx5PyBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIGl0cyBkZWZpbml0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgYEtWTV9YODZgIGRlZmluaXRpb24gd291bGQgYmUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBLVk1fWDg2YCBjb25maWcgaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MjcuMjUxNjI3NTQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUzMTMzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1g4NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjI3LjI5NTE2MTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ1Mjg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBxdWljayBydW5kb3duIG9mIHRoZXNlIGNoYW5nZXMsIHRoaW5raW5nIHRocm91Z2ggaXQgbGlrZSBJIHdvdWxkIG9uIHRoZSBmbHk6XG5cbioqS1ZNIFBhdGNoIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYXJvdW5kIGBLVk1gLiBHb3QgaXQuIExldCdzIHNlZSB3aGF0IHRoZSBtYWluIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUuIExvb2tzIGxpa2UgdGhlIHBhdGNoIGhpdHMgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYC4gT2theSwgYW5kIHRoZXkgYXJlIGJvdGggc3RhdGljLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZzsgbWVhbnMgdGhleSdyZSBzY29wZWQgbG9jYWxseSB3aXRoaW4gdGhlaXIgZmlsZSwgd2hpY2ggZ2l2ZXMgdXMgYSB0aWdodGVyIGZvY3VzLiBOb3cgdGhlIGNydWNpYWwgc3RlcCBpcyB0byB0cmFjZSBiYWNrLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmNhbGxpbmcqIHRob3NlIGZ1bmN0aW9ucy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGp1aWNlIG9mIHRoZSBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MzEuNDI5NjkzMTA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYyMjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWNfc2V0X2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz0xNjU9c3RhdGljIHZvaWQgaW9hcGljX2xhenlfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTE4Ni1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MTg3OnN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg4LVxcdFxcdGludCBpcnFfbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQyLW91dDpcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjQzOlxcdHRyYWNlX2t2bV9pb2FwaWNfc2V0X2lycShlbnRyeS5iaXRzLCBpcnEsIHJldCA9PSAwKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfaW5qZWN0X2FsbChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBsb25nIGlycilcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNTItXFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIFxcdTAwMjZpcnIsIElPQVBJQ19OVU1fUElOUylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjUzOlxcdFxcdGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaWR4LCAxLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU0LVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTQ1Nz1zdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDk5LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MDA6aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDEtXFx0XFx0ICAgICAgIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEyLVxcdFxcdFxcdFxcdFxcdCBpcnFfc291cmNlX2lkLCBsZXZlbCk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUxMzpcXHRyZXQgPSBpb2FwaWNfc2V0X2lycShpb2FwaWMsIGlycSwgaXJxX2xldmVsLCBsaW5lX3N0YXR1cyk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxNC1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaD0xMDg9dm9pZCBrdm1faW9hcGljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg6MTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTEwLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYz0yOTY9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzIxLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS9pcnEuYzozMjI6XFx0XFx0XFx0ZS1cXHUwMDNlc2V0ID0ga3ZtX2lvYXBpY19zZXRfaXJxO1xcbmFyY2gveDg2L2t2bS9pcnEuYy0zMjMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0yMjg9VFJBQ0VfRVZFTlQoa3ZtX2NwdWlkLFxcbi0tXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjczLSNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS90cmFjZS5oOjI3NDpUUkFDRV9FVkVOVChrdm1faW9hcGljX3NldF9pcnEsXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjc1LVxcdCAgICBUUF9QUk9UTyhfX3U2NCBlLCBpbnQgcGluLCBib29sIGNvYWxlc2NlZCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjMxLjQ3NDMyMTI4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2NTY2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSdzIElPQVBJQyBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBga3ZtX2lvYXBpY19zZXRfaXJxYCBmdW5jdGlvbi4gSXQncyB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBlbnRyeSBwb2ludCwgc28gdGhhdCdzIHdoZXJlIHRoZSBleHRlcm5hbCB3b3JsZCBpbnRlcmFjdHMgd2l0aCB0aGUgSU9BUElDIGludGVycnVwdCBzZXR1cCB3aXRoaW4gS1ZNLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCdzIGhhcHBlbmluZyBpbnRlcm5hbGx5LCBhbmQgc3BlY2lmaWNhbGx5LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGVudHJ5IHBvaW50IGNvbm5lY3RzIHRvIHRoZSBvdmVyYWxsIGludGVycnVwdCBzZXJ2aWNpbmcgbWVjaGFuaXNtLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYGlvYXBpY19zZXJ2aWNlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgZnJvbSB0aGlzIGVudHJ5IHBvaW50IHRvIGludGVycnVwdCBkZWxpdmVyeTsgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBpbnRlcnJ1cHQgcmVxdWVzdHMgYXJlIHJlY2VpdmVkLCBwcm9jZXNzZWQsIGFuZCB1bHRpbWF0ZWx5IHJvdXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDozNC4zMTA4OTAyNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODUxODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvYXBpY19zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jLTM2LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzozNzpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICp2aW9hcGljLCBpbnQgaXJxLFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zOC1cXHRcXHRib29sIGxpbmVfc3RhdHVzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0xODc9c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTIzOS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjQwOlxcdHJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxLCBsaW5lX3N0YXR1cyk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0MS1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0zMzE9c3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDE2LVxcdFxcdFxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NDE3OlxcdFxcdFxcdFxcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDE4LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00NTYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQ1NzpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ1OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTIwPXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MzItXFx0XFx0aWYgKGlvYXBpYy1cXHUwMDNlaXJyIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaSkgXFx1MDAyNlxcdTAwMjYgIWVudC1cXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzMzpcXHRcXHRcXHRpb2FwaWNfc2VydmljZShpb2FwaWMsIGksIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTM0LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01Mzk9c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTc4LVxcdFxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU3OTpcXHRcXHRcXHRpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbiwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01ODAtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDozNC4zNTg3NDY3NTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NTAxNzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpb2FwaWNfc2VydmljZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW9hcGljX3NlcnZpY2VgLiBJIHNlZSBpdCdzIGEgY2VudHJhbCBmdW5jdGlvbiwgYW5kIHRoZSBjb2RlIHNob3dzIGl0IGdldHMgY2FsbGVkIGZyb20gYSBmZXcgaW1wb3J0YW50IHBsYWNlczogYGlvYXBpY19zZXRfaXJxYCwgd2hpY2ggSSBrbm93IGhhbmRsZXMgaW50ZXJydXB0IHJlcXVlc3RzLCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCB3aGljaCBzb3VuZHMgbGlrZSBpdCBtYW5hZ2VzIG1lbW9yeSBpbmRpcmVjdCB3cml0ZXMsIGFuZCB0aGVuIGBrdm1faW9hcGljX2VvaV9pbmplY3Rfd29ya2AgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYCwgd2hpY2ggYXJlIGNsZWFybHkgS1ZNLXNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEVuZC1vZi1JbnRlcnJ1cHQgKEVPSSkgaGFuZGxpbmcuIFRoYXQncyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiBjYWxsIHNpdGVzLCB3aGljaCBtZWFucyBgaW9hcGljX3NlcnZpY2VgIGlzIHByb2JhYmx5IG9yY2hlc3RyYXRpbmcgc29tZSBjb3JlIGxvZ2ljIGFyb3VuZCB0aGUgSS9PIEFQSUMncyBiZWhhdmlvci5cblxuTm93LCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMgbWVhbiB0aGV5IGFyZSBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEl0J3MgdGltZSB0byBmaW5kIG91dCB3aGF0IHVzZXMgaXQgYW5kIGhvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDozOC4wMzM3Njc1MzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjA3NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvYXBpY193cml0ZV9pbmRpcmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz0zMTQ9dm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbixcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zMzAtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjMzMTpzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzMyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz02NTQ9c3RhdGljIGludCBpb2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLFxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY4NS1cXHRjYXNlIElPQVBJQ19SRUdfV0lORE9XOlxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo2ODY6XFx0XFx0aW9hcGljX3dyaXRlX2luZGlyZWN0KGlvYXBpYywgZGF0YSk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY4Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MzguMDc3OTgwMTU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDU5NzEwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyB0aGUgSU9BUElDIE1NSU8gV3JpdGUgSGFuZGxlcioqXG5cblJpZ2h0LCBgaW9hcGljX21taW9fd3JpdGVgLiBUaGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBtb2R1bGUuIEFuZCBpdCdzIGNsZWFybHkgYW4gTU1JTyBoYW5kbGVyLCBtZWFuaW5nIGl0J3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIE1lbW9yeS1NYXBwZWQgSS9PIG9wZXJhdGlvbnMgZm9yIHRoZSBJT0FQSUMuIFRoYXQncyBnb29kLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQncyAqdXNlZCouIExldCdzIGdvIGFuZCBleGFtaW5lIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYxMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjQxLjIyMzk1MzQwMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyODIzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz01MjA9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUzOC0jZGVmaW5lIElPQVBJQ19TVUNDRVNTSVZFX0lSUV9NQVhfQ09VTlQgMTAwMDBcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTM5OnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaV9vbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDAtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01ODY9dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5Ny1cXHRcXHRcXHRjb250aW51ZTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTk4OlxcdFxcdGt2bV9pb2FwaWNfdXBkYXRlX2VvaV9vbmUodmNwdSwgaW9hcGljLCB0cmlnZ2VyX21vZGUsIGkpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo0MS4yNjkyMzk0MzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4NjIzMTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIElPQVBJQyBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW9hcGljLmNgLCBhbmQgSSd2ZSBmbGFnZ2VkIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFzIGEgZnVuY3Rpb24gb2YgaW50ZXJlc3QgYmVjYXVzZSBpdCdzIG5vbi1zdGF0aWMuIFRoZSBrZXkgaGVyZSBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIG9yIGFyZWFzIHdoZXJlIHN0YXRlIGNoYW5nZXMgbWlnaHQgb2NjdXIgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgYWxzbyBub24tc3RhdGljLCBzbyB0aG9zZSB0d28gZGVmaW5pdGVseSB3YXJyYW50IGEgY2xvc2VyIGxvb2suIEkgYWxzbyByZWNhbGwgdGhhdCBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCB3aGljaCBpbXBsaWVzIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLCBhbmQgdGh1cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBjYXJlZnVsbHkgZXhhbWluZSBib3RoIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzaGFyZWQgZGF0YSBvciByZXNvdXJjZXMgdGhleSBtaWdodCBtYW5pcHVsYXRlLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgc291cmNlcyBvZiBjb25jdXJyZW5jeSBvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTU2LCJPdXRwdXRUb2tlbnMiOjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjQ1LjY1NTQ3MjY0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyMTI2OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2EtejAtOV9dKyApK2t2bV9pb2FwaWNfW2EtejAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NTc9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ5OS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTAwOmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTAxLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxOS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTIwOnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTIxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MzgtI2RlZmluZSBJT0FQSUNfU1VDQ0VTU0lWRV9JUlFfTUFYX0NPVU5UIDEwMDAwXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzOTpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg1LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1ODY6dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01ODcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTY1ND1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjk1LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo2OTY6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MTYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcxNzppbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzE4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NDMtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjc0NDp2b2lkIGt2bV9pb2FwaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc0NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjQ1Ljk3NzYwMzkyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQyODM0MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgSU9BUElDIGZ1bmN0aW9ucy4gSSBzZWUgd2UgaGF2ZTogYGt2bV9pb2FwaWNfc2Nhbl9lbnRyeWAsIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYGt2bV9pb2FwaWNfaW5pdGAsIGFuZCBga3ZtX2lvYXBpY19kZXN0cm95YC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoZXkgc2VlbSB0byBiZSBrZXkgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuQWhhLCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyB0aGUgb25lIHRoYXQgZGlyZWN0bHkgaW52b2tlcyBgaW9hcGljX3NldF9pcnFgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2guIExldCdzIGRpZyBpbnRvIGBrdm1faW9hcGljX3NldF9pcnFgIHRoZW47IGl0IHNlZW1zIHRvIGJlIGFuIGVzc2VudGlhbCBlbnRyeSBwb2ludCBmb3IgSVJRIHJvdXRpbmcsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbk5vdywgbGV0J3Mgc2Vl4oCmIGBpb2FwaWNfc2VydmljZWAgaXMgY2FsbGVkIGJ5IGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgLiBBbmQgdGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBpb2FwaWNfbW1pb193cml0ZWAuIEludGVyZXN0aW5nLiBgaW9hcGljX21taW9fd3JpdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtZWFucyBpdCdzIGludGVybmFsIHRvIGEgbW9kdWxlLiBIb3dldmVyLCBpdCdzIGFsc28gYW4gTU1JTyBoYW5kbGVyLCBzbyBpdCBtdXN0IGJlIHJlZ2lzdGVyZWQgc29tZXdoZXJlLiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBjYXNlLlxuXG5ZZXAsIGhlcmUgaXQgaXM6IGBrdm1faW9fZGV2aWNlX29wcyBpb2FwaWNfbW1pb19vcHNgLiBJdCdzIHJlZ2lzdGVyZWQhIE9rYXksIGxldCdzIG5vdyB1bmRlcnN0YW5kIGBpb2FwaWNfbW1pb193cml0ZWAgdGhvcm91Z2hseTsgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgaG93IE1NSU8gYWNjZXNzIHRvIHRoZSBJT0FQSUMgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6NTEuNDIwNDQwNDI5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgyMDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWNfbW1pb193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jPTYxND1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02NTMtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY1NDpzdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY1NS1cXHRcXHRcXHRcXHQgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzEzLVxcdC5yZWFkICAgICA9IGlvYXBpY19tbWlvX3JlYWQsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcxNDpcXHQud3JpdGUgICAgPSBpb2FwaWNfbW1pb193cml0ZSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzE1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjUxLjQ2MzI2MjUxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM1NDc0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb24gQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJT0FQSUMgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmUgdG8gdXNlIGFzIGEgZm9jdXMgc3ltYm9sLiBgaW9hcGljX21taW9fd3JpdGVgIGlzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcnVsZXMgaXQgb3V0LiBObyBnb29kIGZvciBhIHN5bWJvbCBpZiBpdCdzIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCwgaG9sZCBvbiwgaXQgc2VlbXMgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGBpb2FwaWNfc2V0X2lycWAgaXMgYWxzbyBjYWxsZWQgYnkgYGt2bV9pb2FwaWNfaW5qZWN0X2FsbGAsIHdoaWNoLCB1bmZvcnR1bmF0ZWx5LCAqaXMqIHN0YXRpYy4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3MgYSBiaXQuIFNvLCBpZiBJIGNhbid0IGRpcmVjdGx5IHRhcmdldCBgaW9hcGljX3NldF9pcnFgIGR1ZSB0byBpdHMgc3RhdGljIGNhbGxlciwgdGhlIGZvY3VzIHdpbGwgbmVlZCB0byBzaGlmdC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGV4YWN0bHkgKndobyogaXMgY2FsbGluZyBga3ZtX2lvYXBpY19pbmplY3RfYWxsYCwgYXMgdGhhdCBtaWdodCByZXZlYWwgYSBiZXR0ZXIgZW50cnkgcG9pbnQgb3IgcGF0aCB0byB0aGUgbG9naWMgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY3NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo1NS4yOTg3Mzk2ODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjczMTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faW9hcGljX2luamVjdF9hbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz0xODc9c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0Ni1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjQ3OnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfaW5qZWN0X2FsbChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBsb25nIGlycilcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz03Njk9dm9pZCBrdm1fc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9hcGljX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NzctXFx0a3ZtX21ha2Vfc2Nhbl9pb2FwaWNfcmVxdWVzdChrdm0pO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3Nzg6XFx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXFx1MDAzZWlycik7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc3OS1cXHRzcGluX3VubG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6NTUuNjk1NDc4Nzg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTU5MjQzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS1ZNIElPQVBJQyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBga3ZtX3NldF9pb2FwaWNgIGlzbid0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBrdm1faW9hcGljX2luamVjdF9hbGxgLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciBteSBmb2NhbCBwb2ludCBpbiB0aGlzIGFuYWx5c2lzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBhbmQgYGt2bV9zZXRfaW9hcGljYCBhbHNvIG1ha2UgZ29vZCBmb2N1cyBzeW1ib2xzLCBnaXZlbiB0aGF0IHRoZXkgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZSBJJ20gbW9kaWZ5aW5nLlxuXG5Ob3csIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSBzZWUgYEtWTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtLCBhbmQgYEtWTV9YODZgIGFzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb25lLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGBLVk1gIGlzIGEgdHJpc3RhdGUsIHdoaWxlIGBLVk1fWDg2YCBpcyBhIHN0YW5kYXJkIGNvbmZpZz8gVGhhdCdzIGEgYml0IHVudXN1YWwsIGJ1dCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBvbmUgZm9yIGVuYWJsaW5nIEtWTSBmdW5jdGlvbmFsaXR5LCBzbyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo1OS45NTE0MDU3NTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODgzNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo1OS45OTQzMDE4MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTkyNDM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBgS1ZNYC4gR290IGl0LiBGaXJzdCB0aG91Z2h0OiBgS1ZNYCBpbXBsaWVzIGNvbmZpZ3VyYXRpb24sIG5hdHVyYWxseS4gQnV0IGhvbGQgb24sIGxldCdzIG5vdCBqdW1wIHRoZSBndW4uIFdlIGFsbCBrbm93IGBLVk1gIGlzIGJ1aWx0IG9uIGEgc29saWQgZm91bmRhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgdGhlIHVuZGVybHlpbmcgYFZJUlRVQUxJWkFUSU9OYCBpbmZyYXN0cnVjdHVyZS4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBzcGVjaWZpYyBgS1ZNYCBzZXR0aW5ncywgSSByZWFsbHkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IHRyZWUuIFRpbWUgdG8gaW52ZXN0aWdhdGUgYEtWTWAncyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDE6MDMuNjI0MjI4ODE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxcbiAgNTc6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcXG4gIDU4OlxcdFxcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xcbiAgNTk6XFx0XFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNjI6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBLVk1fV0VSUk9SXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjAzLjYyNDMwOTY1NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjgyNDc3NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBhbmQgSU9BUElDIENvbmZpZ3VyYXRpb246IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBgS1ZNYCBjb25maWd1cmF0aW9uLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBXZSBrbm93IHRoYXQgYEtWTWAgcmVsaWVzIG9uIGBYODZfTE9DQUxfQVBJQ2AsIGFuZCBgS1ZNYCBpcyBuZXN0ZWQgd2l0aGluIGBpZiBWSVJUVUFMSVpBVElPTmAsIHNvIHRoYXQncyB0aGUgYmFzZS4gU2VlbXMgbGlrZSBgS1ZNYCBpcyB0aGUgY29uZmlnIHdlJ3JlIGxvb2tpbmcgZm9yLCBnb29kIHRvIG5haWwgdGhhdCBkb3duLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSBpZiBgS1ZNX0lPQVBJQ2AgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0J3MgYGRlZmF1bHQgeWAgYW5kIGRlcGVuZHMgb24gYEtWTV9YODZgLiBXaGljaCBtZWFucyB0aGF0IGlmIGBLVk1gIGlzIGFjdGl2ZSwgdGhlbiBgS1ZNX0lPQVBJQ2Agc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gSG93ZXZlciwgSSBtaWdodCBzdGlsbCB3YW50IHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBib3RoIGBLVk1gIGFuZCBgS1ZNX0lPQVBJQ2AgaW4gdGhlIGNvbmZpZyBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgc2V0dXAuIEl0IGFkZHMgYSBsYXllciBvZiBjbGFyaXR5LlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGtleSBmdW5jdGlvbnMgYWdhaW4uIEknbSBmb2N1c2luZyBvbiB0aG9zZSB0aGF0IGFyZSBlbnRyeSBwb2ludHMsIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgbGlrZWx5IHRvIGNhbGwuIFdlJ3ZlIGdvdDogYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC4gQXJlIHRoZXJlIGFueSBvdGhlcnMgdGhhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50P1xuXG5BIGJpdCBtb3JlIGRpZ2dpbmcgc2hvd3MgbWUgdGhhdCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBieSBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfaW5qZWN0X2FsbGAsIGFuZCBgaW9hcGljX3NlcnZpY2VgIGlzIGNhbGxlZCBieSBgaW9hcGljX3NldF9pcnFgLCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCwgYGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrYCwgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIG1vc3QgY29uY2VybmVkIHdpdGggYXJlOiBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGBrdm1fc2V0X2lvYXBpY2AsIGFuZCBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIChldmVuIHRob3VnaCB0aGF0IGxhc3Qgb25lIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBzbyBub3QgZGlyZWN0bHkgY2FsbGFibGUgYnkgZXh0ZXJuYWwgY29kZSkuXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1faW9hcGljX3NldF9pcnFgIGluIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU3OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjEwLjkwNjc4OTkyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDk1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDk1OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDE7XFxuIDQ5NjpcXHRcXG4gNDk3OlxcdFxcdHJldHVybiByZXQ7XFxuIDQ5ODpcXHR9XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdGludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG4gNTAxOlxcdFxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbiA1MDI6XFx0e1xcbiA1MDM6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA1MDQ6XFx0XFx0aW50IGlycSA9IGUtXFx1MDAzZWlycWNoaXAucGluO1xcbiA1MDU6XFx0XFx0aW50IHJldCwgaXJxX2xldmVsO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGlycSBcXHUwMDNjIDAgfHwgaXJxIFxcdTAwM2U9IElPQVBJQ19OVU1fUElOUykpXFxuIDUwODpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDUwOTpcXHRcXG4gNTEwOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNTExOlxcdFxcdGlycV9sZXZlbCA9IF9fa3ZtX2lycV9saW5lX3N0YXRlKFxcdTAwMjZpb2FwaWMtXFx1MDAzZWlycV9zdGF0ZXNbaXJxXSxcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdFxcdCBpcnFfc291cmNlX2lkLCBsZXZlbCk7XFxuIDUxMzpcXHRcXHRyZXQgPSBpb2FwaWNfc2V0X2lycShpb2FwaWMsIGlycSwgaXJxX2xldmVsLCBsaW5lX3N0YXR1cyk7XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpb2FwaWMtXFx1MDAzZWxvY2spO1xcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MTg6XFx0fVxcbiA1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjEwLjkwNjg4MTE0N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYyNjU5ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqUmVmbGVjdGluZyBvbiBJT0FQSUMgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuUmlnaHQsIGBrdm1faW9hcGljX3NldF9pcnFgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gdG8gemVybyBpbiBvbi4gSXQncyB0aGUgY29yZSBvZiBob3cgd2UncmUgbWFuYWdpbmcgYW5kIGNvbmZpZ3VyaW5nIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMgY29udGV4dC4gRm9jdXNpbmcgb24gdGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgY3VycmVudCBzdGF0ZS5cblxuTm93LCB3aXRoIHRoYXQgaW4gbWluZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zICphZnRlciogdGhlIGludGVycnVwdCBpcyBzZXQuIEknbGwgbmVlZCB0byBqdW1wIG92ZXIgdG8gYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAuIFRoYXQncyB3aGVyZSB0aGUgRW5kIG9mIEludGVycnVwdCBoYW5kbGluZyBsb2dpYyB3aWxsIGJlLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSB0aGUgb3ZlcmFsbCBwaWN0dXJlIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjE0LjY2OTU0MzE5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdFxcdH1cXG4gNTgxOlxcdFxcdH0gZWxzZSB7XFxuIDU4MjpcXHRcXHRcXHRpb2FwaWMtXFx1MDAzZWlycV9lb2lbcGluXSA9IDA7XFxuIDU4MzpcXHRcXHR9XFxuIDU4NDpcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSlcXG4gNTg3OlxcdHtcXG4gNTg4OlxcdFxcdGludCBpO1xcbiA1ODk6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlvYXBpYy1cXHUwMDNlbG9jayk7XFxuIDU5MjpcXHRcXHRydGNfaXJxX2VvaShpb2FwaWMsIHZjcHUsIHZlY3Rvcik7XFxuIDU5MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9BUElDX05VTV9QSU5TOyBpKyspIHtcXG4gNTk0OlxcdFxcdFxcdHVuaW9uIGt2bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudCA9IFxcdTAwMjZpb2FwaWMtXFx1MDAzZXJlZGlydGJsW2ldO1xcbiA1OTU6XFx0XFxuIDU5NjpcXHRcXHRcXHRpZiAoZW50LVxcdTAwM2VmaWVsZHMudmVjdG9yICE9IHZlY3RvcilcXG4gNTk3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1OTg6XFx0XFx0XFx0a3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZSh2Y3B1LCBpb2FwaWMsIHRyaWdnZXJfbW9kZSwgaSk7XFxuIDU5OTpcXHRcXHR9XFxuIDYwMDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNjAxOlxcdH1cXG4gNjAyOlxcdFxcbiA2MDM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2lvYXBpYyAqdG9faW9hcGljKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpXFxuIDYwNDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjE0LjY2OTYxNjc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDk2ODY4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIEVPSSBVcGRhdGVzKipcblxuQWxyaWdodCwgKmt2bV9pb2FwaWNfdXBkYXRlX2VvaSog4oCTIHRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIGxpa2UgdGhhdC4gV2UncmUgY2xlYXJseSBkZWFsaW5nIHdpdGggdGhlIGVuZC1vZi1pbnRlcnJ1cHQgcHJvY2VzcyBoZXJlLCBhbmQgdGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgY29yZSBjb25jZXJuLiBUaGUgZm9jdXMgb24gdGhlIEVPSSBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgaXMgY29ycmVjdC4gV2Ugc2hvdWxkIGNoZWNrIHRoYXQgZnVuY3Rpb24uXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgdGhlIHJlbGF0ZWQgYGt2bV9zZXRfaW9hcGljYCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQgZml0cyBpbiB0aGUgcGljdHVyZS4uLiB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIGhvdyB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgdXBkYXRlIHByb2Nlc3MuIEl0IG1heSBvZmZlciBjbHVlcyB0byBvdGhlciBwb2ludHMgb2YgaW50ZXJlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjM3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToxNy44NzkzMDYxNDNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHR7XFxuIDc2MTpcXHRcXHRzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0ga3ZtLVxcdTAwM2VhcmNoLnZpb2FwaWM7XFxuIDc2MjpcXHRcXG4gNzYzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNzY0OlxcdFxcdG1lbWNweShzdGF0ZSwgaW9hcGljLCBzaXplb2Yoc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUpKTtcXG4gNzY1OlxcdFxcdHN0YXRlLVxcdTAwM2VpcnIgXFx1MDAyNj0gfmlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZDtcXG4gNzY2OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpb2FwaWMtXFx1MDAzZWxvY2spO1xcbiA3Njc6XFx0fVxcbiA3Njg6XFx0XFxuIDc2OTpcXHR2b2lkIGt2bV9zZXRfaW9hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKVxcbiA3NzA6XFx0e1xcbiA3NzE6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlvYXBpYy1cXHUwMDNlbG9jayk7XFxuIDc3NDpcXHRcXHRtZW1jcHkoaW9hcGljLCBzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBrdm1faW9hcGljX3N0YXRlKSk7XFxuIDc3NTpcXHRcXHRpb2FwaWMtXFx1MDAzZWlyciA9IDA7XFxuIDc3NjpcXHRcXHRpb2FwaWMtXFx1MDAzZWlycl9kZWxpdmVyZWQgPSAwO1xcbiA3Nzc6XFx0XFx0a3ZtX21ha2Vfc2Nhbl9pb2FwaWNfcmVxdWVzdChrdm0pO1xcbiA3Nzg6XFx0XFx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXFx1MDAzZWlycik7XFxuIDc3OTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNzgwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDE6MTcuODc5MzgxMDIzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1OTg2MTAzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElPQVBJQyBFbXVsYXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIEkndmUgZ290IGl0LiBga3ZtX3NldF9pb2FwaWNgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgYW5kIGl0J3MgbmljZSB0byBzZWUgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBvZiB0aGUgb3RoZXIgSU9BUElDIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQ6XG5cbiogICBga3ZtX2lvYXBpY19zZXRfaXJxYFxuKiAgIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgXG4qICAgYGt2bV9zZXRfaW9hcGljYFxuXG5BbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZHVyaW5nIHRoZSBmdXp6aW5nOlxuXG4qICAgYEtWTWBcbiogICBgS1ZNX0lPQVBJQ2BcblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIElPQVBJQyBlbXVsYXRpb24gYnVnIHdpdGhpbiBLVk0uIEl0J3MgdG91Y2hpbmcgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYCB0byBjb3JyZWN0bHkgbWFuYWdlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZvciBib3RoIGVkZ2UgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGtpbmQgb2YgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJdCdzIHJlYWNoYWJsZSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHVuY292ZXJpbmcgc3VidGxlIGlzc3VlcyBpbiB0aGlzIHBhcnQgb2YgS1ZNIGlzIGhpZ2guXG5cblNvLCBoZXJlJ3MgdGhlIHJlYXNvbmluZywgaW4gYSBudXRzaGVsbDogVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBpbnRlcnJ1cHQgc3RhdGUgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSB0cmFja2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSwgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSwgbWFraW5nIGl0IHByaW1lIGZvciBmdXp6aW5nLiBUaGUgbG9naWMgYmVpbmcgbW9kaWZpZWQgaXMgcmVhY2hhYmxlIHRocm91Z2ggYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI2OCwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToyNC40Nzc5OTM3NTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY4NjI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU9BUElDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2lvYXBpY19zZXRfaXJxXCIsXG4gICAgXCJrdm1faW9hcGljX3VwZGF0ZV9lb2lcIixcbiAgICBcImt2bV9zZXRfaW9hcGljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwia3ZtX3NldF9pb2FwaWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEtWTSBJT0FQSUMgZW11bGF0aW9uIHdoZXJlIGByZW1vdGVfaXJyYCBhbmQgYGlycl9kZWxpdmVyZWRgIHdlcmUgbm90IGNvcnJlY3RseSB1cGRhdGVkIGZvciBlZGdlIGFuZCBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29tcG9uZW50IChLVk0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBga3ZtX3NldF9pb2FwaWNgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToyNC41NTU2ODU4MzlaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDg2NjI3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToyNC41NTYxMjA4MzlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODcwODIyNDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBlZGdlLXRyaWdnZXJlZCBhbmQgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgaW4gdGhlIEtWTSBJT0FQSUMgKHNwZWNpZmljYWxseSB0aGUgYGlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmAgZmllbGRzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHN0YXRlIG1hY2hpbmUgbG9naWMgZml4ZXMgZm9yIGludGVycnVwdCBkZWxpdmVyeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiODljNmY0ZDk0ZTQyZTZhZmIzYmU4ZDc1MWJmODY2YmFhNjU1OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxODo1OTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuaW5kZXggNzU3NjY3ZmIyYmZhMC4uNjc2ZWZmZDY3NGY5ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuKysrIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5AQCAtMjMwLDExICsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxuIFx0b2xkX2lyciA9IGlvYXBpYy1cdTAwM2VpcnI7XG4gXHRpb2FwaWMtXHUwMDNlaXJyIHw9IG1hc2s7XG4gXHRpZiAoZWRnZSkge1xuLVx0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRpZiAob2xkX2lyciA9PSBpb2FwaWMtXHUwMDNlaXJyKSB7XG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC00OTEsNyArNDkxLDcgQEAgc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuIFx0fSBlbHNlXG4gXHRcdHJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtXHUwMDNla3ZtLCBOVUxMLCBcdTAwMjZpcnFlKTtcbiBcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxuK1x0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4gXHRcdGVudHJ5LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtODYsNiArODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl9mZWF0dXJlc1xuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2lwaVxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9wdl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGEwMjc2YTE1NDJmZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICsxLDEzOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGluLWtlcm5lbCBJL08gQVBJQyBzdGF0ZS5cbisgKi9cbitcbisjaW5jbHVkZSBcImFwaWMuaFwiXG4rI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcInRlc3RfdXRpbC5oXCJcbitcbisjZGVmaW5lIFRFU1RfSU9BUElDX1BJTlx0XHQxNlxuKyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuKyNkZWZpbmUgTk9fU1VDSF9BUElDX0lEXHRcdDB4ZmVcbisjZGVmaW5lIFRFU1RfSU9BUElDX0VER0VfVFJJR1x0MFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuK1xuK3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbit7XG4rXHRpbnQgcjtcbitcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApO1xuK1x0aWYgKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPKVxuK1x0XHRfX1RFU1RfUkVRVUlSRSgwLCBcIkluLWtlcm5lbCBJL08gQVBJQyBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0VEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuK3tcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCxcbitcdFx0XHQgICAgIHUzMiBkZXN0X2lkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnZlY3RvciA9XG4rXHRcdFRFU1RfVkVDVE9SO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X2lkID1cbitcdFx0ZGVzdF9pZDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID1cbitcdFx0bGV2ZWxfdHJpZ2dlcmVkID8gVEVTVF9JT0FQSUNfTEVWRUxfVFJJRyA6XG4rXHRcdFx0XHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuK1xuK1x0c2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcbitcdFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcbitcdFx0LmxldmVsID0gbGV2ZWwsXG4rXHR9O1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsIFx1MDAyNmlycSk7XG4rXHRyZXR1cm4gaXJxLnN0YXR1cztcbit9XG4rXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXHRURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4XCIsXG4rXHRcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTtcbitcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZmFpbGVkIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXG4rXHRcdCAgICBcIktWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2Fzbid0IGRlbGl2ZXJlZFwiKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYztcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTY0IGFwaWNiYXNlO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgTlVMTCk7XG4rXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4rXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UsXG4rXHRcdCAgICAgYXBpY2Jhc2UgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rXHQqKHUzMiAqKShsYXBpYy5yZWdzICsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rXG4rXHRzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS1cdTAwM2VpZCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyBcdTAwM2UgMCxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwiLCBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKCFzdGF0dXMsXG4rXHRcdCAgICBcIkV4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZFwiLFxuK1x0XHQgICAgc3RhdHVzKTtcbitcbitcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XG4rXHR0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTtcbitcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjI0LjU1NjEyMjUzOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA4MjA0NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gb2YgS1ZNIElPQVBJQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgLCBzcGVjaWZpY2FsbHkgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYC4gTXkgbWFpbiBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMsIHdoaWNoIGNvdWxkIGJlIGRldGVjdGVkIGJ5IEtNU0FOLlxuXG5JbiBgaW9hcGljX3NldF9pcnFgLCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhcm91bmQgYGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7YCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGEgY2hlY2sgYGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpYCBzZWVtcyB0byBoYXZlIGJlZW4gaW50cm9kdWNlZCBpbiBhIG1vcmUgbG9naWNhbCBwb3NpdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGVkZ2UgdHJpZ2dlcmVkIGNhc2Ugbm93LiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGlzIGNvdWxkIGJlIGEgcG9pbnQgb2YgY29uY2Vybi4gSG93ZXZlciwgdXBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgdGhlIGludm9sdmVkIHZhcmlhYmxlczogYG9sZF9pcnJgLCBgaW9hcGljLVx1MDAzZWlycmAsIGFuZCBgbWFza2AsIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoZXJlLiBXZSBhcmUgZGVhbGluZyB3aXRoIEtWTSBJT0FQSUMgc3RhdGUsIGRlYWxpbmcgd2l0aCBlZGdlL2xldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLlxuXG5Nb3Zpbmcgb24gdG8gYGlvYXBpY19zZXJ2aWNlYCwgdGhlIGNvbmRpdGlvbmFsIGByZXRgIGluIGBpZiAocmV0IFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYHJldCBcdTAwM2UgMGAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwbGFjZSB0byBkb3VibGUtY2hlY2suIEhvd2V2ZXIsIGFnYWluLCBgcmV0YCBpcyBhbiBgaW50YCwgYW5kIGBpcnFlYCBpcyBhIGBzdHJ1Y3Qga3ZtX2xhcGljX2lycWAuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSBhIHNtYWxsIGZpeCBpbiBsb2dpYywgdG8gYWRkcmVzcyBhIGNvcm5lciBjYXNlIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIGl0IGlzIG5vdCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cblRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jYC4gVGhpcyBpcyBnb29kLCBpdCB2YWxpZGF0ZXMgdGhlIGNoYW5nZXMuXG5cblRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBmb2N1cyBvbiBLVk0gSU9BUElDIHN0YXRlIGxvZ2ljLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuKipOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzYzLCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjMzLjI2NDMzMDAzMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBlZGdlLXRyaWdnZXJlZCBhbmQgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgaW4gdGhlIEtWTSBJT0FQSUMgKHNwZWNpZmljYWxseSB0aGUgYGlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmAgZmllbGRzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHN0YXRlIG1hY2hpbmUgbG9naWMgZml4ZXMgZm9yIGludGVycnVwdCBkZWxpdmVyeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 18:58:40 +0000 UTC FinishedAt: 2026-08-10 19:01:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c21bb4193868a8de71fc4693fa741e195fdf5d86", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_IOAPIC" ], "series_id": "8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_ioapic_set_irq", "kvm_ioapic_update_eoi", "kvm_set_ioapic" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU9BUElDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2lvYXBpY19zZXRfaXJxJiMzNDssCiAgICAmIzM0O2t2bV9pb2FwaWNfdXBkYXRlX2VvaSYjMzQ7LAogICAgJiMzNDtrdm1fc2V0X2lvYXBpYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxODo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiODljNmY0ZDk0ZTQyZTZhZmIzYmU4ZDc1MWJmODY2YmFhNjU1OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxODo1OTo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbmluZGV4IDc1NzY2N2ZiMmJmYTAuLjY3NmVmZmQ2NzRmOWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC00OTEsNyAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cylcbiBcdH0gZWxzZVxuIFx0XHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVx1MDAzZWt2bSwgTlVMTCwgXHUwMDI2aXJxZSk7XG4gXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfZmVhdHVyZXNcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGEwMjc2YTE1NDJmZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICYjNDM7MSwxMzkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXBpYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4mIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRFx0XHQweGZlXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4mIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbiYjNDM7XHRyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTtcbiYjNDM7XHRpZiAociBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8pXG4mIzQzO1x0XHRfX1RFU1RfUkVRVUlSRSgwLCBcJiMzNDtJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbiYjNDM7e1xuJiM0MztcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX1NFVF9JUlFDSElQLCBpcnFjaGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X2lvYXBpY19lbnRyeShzdHJ1Y3Qga3ZtX3ZtICp2bSwgYm9vbCBsZXZlbF90cmlnZ2VyZWQsXG4mIzQzO1x0XHRcdCAgICAgdTMyIGRlc3RfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbiYjNDM7XG4mIzQzO1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4mIzQzO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID1cbiYjNDM7XHRcdFRFU1RfVkVDVE9SO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9XG4mIzQzO1x0XHRkZXN0X2lkO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9XG4mIzQzO1x0XHRsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDpcbiYjNDM7XHRcdFx0XHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcbiYjNDM7XHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLm1hc2sgPSAwO1xuJiM0MztcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGt2bV9pcnFfbGluZV9zdGF0dXMoc3RydWN0IGt2bV92bSAqdm0sIGludCBsZXZlbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcbiYjNDM7XHRcdC5pcnEgPSBURVNUX0lPQVBJQ19QSU4sXG4mIzQzO1x0XHQubGV2ZWwgPSBsZXZlbCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXHUwMDI2aXJxKTtcbiYjNDM7XHRyZXR1cm4gaXJxLnN0YXR1cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4mIzQzO1xuJiM0MztcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0MztcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleFwmIzM0OyxcbiYjNDM7XHRcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTtcbiYjNDM7XHR2bV9jcmVhdGVfaXJxY2hpcCh2bSk7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcJiMzNDssIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuJiM0MztcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXG4mIzQzO1x0XHQgICAgXCYjMzQ7S1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJiMzOTt0IGRlbGl2ZXJlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGt2bV92bV9mcmVlKHZtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1NjQgYXBpY2Jhc2U7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBOVUxMKTtcbiYjNDM7XHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4mIzQzO1x0dmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLFxuJiM0MztcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO1x0Kih1MzIgKikobGFwaWMucmVncyAmIzQzOyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4mIzQzO1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4mIzQzO1xuJiM0MztcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcJiMzNDssIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbiYjNDM7XHRURVNUX0FTU0VSVCghc3RhdHVzLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0a3ZtX3ZtX2ZyZWUodm0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQoKTtcbiYjNDM7XHR0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxODo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2t2bV9zZXRfaW9hcGljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgS1ZNIElPQVBJQyBlbXVsYXRpb24gd2hlcmUgYHJlbW90ZV9pcnJgIGFuZCBgaXJyX2RlbGl2ZXJlZGAgd2VyZSBub3QgY29ycmVjdGx5IHVwZGF0ZWQgZm9yIGVkZ2UgYW5kIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgKEtWTSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBrdm1fc2V0X2lvYXBpY2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3Yjg5YzZmNGQ5NGU0MmU2YWZiM2JlOGQ3NTFiZjg2NmJhYTY1NTlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTg6NTk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKaW5kZXggNzU3NjY3ZmIyYmZhMC4uNjc2ZWZmZDY3NGY5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuYwpAQCAtMjMwLDExICYjNDM7MjMwLDExIEBAIHN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSwKIAlvbGRfaXJyID0gaW9hcGljLSZndDtpcnI7CiAJaW9hcGljLSZndDtpcnIgfD0gbWFzazsKIAlpZiAoZWRnZSkgewotCQlpb2FwaWMtJmd0O2lycl9kZWxpdmVyZWQgJmFtcDs9IH5tYXNrOwogCQlpZiAob2xkX2lyciA9PSBpb2FwaWMtJmd0O2lycikgewogCQkJcmV0ID0gMDsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CQlpb2FwaWMtJmd0O2lycl9kZWxpdmVyZWQgJmFtcDs9IH5tYXNrOwogCX0KIAogCXJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxLCBsaW5lX3N0YXR1cyk7CkBAIC00OTEsNyAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbnQgaW9hcGljX3NlcnZpY2Uoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgYm9vbCBsaW5lX3N0YXR1cykKIAl9IGVsc2UKIAkJcmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy0mZ3Q7a3ZtLCBOVUxMLCAmYW1wO2lycWUpOwogCi0JaWYgKHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQomIzQzOwlpZiAocmV0ICZndDsgMCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQllbnRyeS0mZ3Q7ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtODYsNiAmIzQzOzg2LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2ZlYXR1cmVzCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfaXBpCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl90bGJfZmx1c2gKJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2Nsb2NrX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9wdl90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZGEwMjc2YTE1NDJmZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwxMzkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3RzIGZvciBpbi1rZXJuZWwgSS9PIEFQSUMgc3RhdGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcGljLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3V0aWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19QSU4JCTE2CiYjNDM7I2RlZmluZSBURVNUX1ZFQ1RPUgkJMHg1MAomIzQzOyNkZWZpbmUgTk9fU1VDSF9BUElDX0lECQkweGZlCiYjNDM7I2RlZmluZSBURVNUX0lPQVBJQ19FREdFX1RSSUcJMAomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJRwkxCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzOwlpZiAociAmYW1wOyZhbXA7IGVycm5vID09IEVOWElPKQomIzQzOwkJX19URVNUX1JFUVVJUkUoMCwgJiMzNDtJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKQomIzQzO3sKJiM0MzsJaXJxY2hpcC0mZ3Q7Y2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQzsKJiM0MzsJdm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLAomIzQzOwkJCSAgICAgdTMyIGRlc3RfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy52ZWN0b3IgPQomIzQzOwkJVEVTVF9WRUNUT1I7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9CiYjNDM7CQlkZXN0X2lkOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfbW9kZSA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID0KJiM0MzsJCWxldmVsX3RyaWdnZXJlZCA/IFRFU1RfSU9BUElDX0xFVkVMX1RSSUcgOgomIzQzOwkJCQkgIFRFU1RfSU9BUElDX0VER0VfVFJJRzsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1faXJxX2xpbmVfc3RhdHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbGV2ZWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnEgPSB7CiYjNDM7CQkuaXJxID0gVEVTVF9JT0FQSUNfUElOLAomIzQzOwkJLmxldmVsID0gbGV2ZWwsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fSVJRX0xJTkVfU1RBVFVTLCAmYW1wO2lycSk7CiYjNDM7CXJldHVybiBpcnEuc3RhdHVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDsKJiM0MzsKJiM0MzsJZ2V0X2lvYXBpYyh2bSwgJmFtcDtpcnFjaGlwKTsKJiM0MzsJVEVTVF9BU1NFUlQoISEoaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIgJmFtcDsgKDEgJmx0OyZsdDsgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4JiMzNDssCiYjNDM7CQkgICAgVEVTVF9JT0FQSUNfUElOLCBleHBlY3RlZCwgaXJxY2hpcC5jaGlwLmlvYXBpYy5pcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTsKJiM0MzsJdm1fY3JlYXRlX2lycWNoaXAodm0pOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCB0cnVlLCBOT19TVUNIX0FQSUNfSUQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZmFpbGVkIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkJiMzNDssIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CVRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsCiYjNDM7CQkgICAgJiMzNDtLVk0gc2V0IHJlbW90ZV9pcnIgZm9yIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCB0aGF0IHdhc24mIzM5O3QgZGVsaXZlcmVkJiMzNDspOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYzsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJdTY0IGFwaWNiYXNlOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgTlVMTCk7CiYjNDM7CWFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTsKJiM0MzsJdmNwdV9zZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFLAomIzQzOwkJICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7CiYjNDM7CXZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgJmFtcDtsYXBpYyk7CiYjNDM7CSoodTMyICopKGxhcGljLnJlZ3MgJiM0MzsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsICZhbXA7bGFwaWMpOwomIzQzOwomIzQzOwlzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS0mZ3Q7aWQpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzICZndDsgMCwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWQmIzM0Oywgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpOwomIzQzOwlURVNUX0FTU0VSVCghc3RhdHVzLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkJiMzNDssCiYjNDM7CQkgICAgc3RhdHVzKTsKJiM0MzsKJiM0MzsJYXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7CiYjNDM7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4odm9pZCkKJiM0Mzt7CiYjNDM7CXRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7CiYjNDM7CXRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE4OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIElPQVBJQyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AgYW5kIGFkZHMgYSB0ZXN0IGZvciBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtb2RpZmljYXRpb25zIHRvIGBpb2FwaWNfc2V0X2lycWAgYW5kIGBpb2FwaWNfc2VydmljZWAsIHdoaWNoIGFyZSBjcml0aWNhbCBmb3IgZW11bGF0aW5nIHRoZSBJT0FQSUMgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGVzc2VudGlhbCBpbiBhbnkgS1ZNIHNldHVwLCB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHVzZWQgaW4gcmVhbCBWTXMuCgpJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGluIGBpb2FwaWNfc2V0X2lycWAgYXJlIHJlbGF0ZWQgdG8gdGhlIGludGVycnVwdCByZXF1ZXN0IHJlZ2lzdGVyIChJUlIpIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgYW5kIGNsZWFyaW5nIHRoZSBgaXJyX2RlbGl2ZXJlZGAgZmxhZy4gVGhlIG1vZGlmaWNhdGlvbiBpbiBgaW9hcGljX3NlcnZpY2VgIG5vdyBjaGVja3MgaWYgdGhlIHJldHVybiBjb2RlIGlzIHBvc2l0aXZlLCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFuZCBgcmVtb3RlX2lycmAuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgcmVmaW5pbmcgaG93IGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIG9yIGFja25vd2xlZGdlZCB3aXRoaW4gdGhlIEtWTSBlbnZpcm9ubWVudC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSB2Q1BVIGludGVyYWN0cyB3aXRoIHRoZSBJT0FQSUMgYW5kIHBvdGVudGlhbGx5IGhvdyBpbnRlcnJ1cHQgZGVsaXZlcnkgaXMgbWFuYWdlZC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaW50ZXJydXB0IGxhdGVuY3kgb3IgYmVoYXZpb3IuCgpHaXZlbiB0aGUgZmlsZSwgSSYjMzk7bSB0aGlua2luZyB0aGUgY29kZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfS1ZNYCBpcyBlbmFibGVkLCBidXQgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeSB0byBiZSBzdXJlLiBJdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgaXQgaXMgZW5hYmxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9hcGljLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9NYWtlZmlsZT0xMT1rdm0tJChDT05GSUdfWDg2XzY0KSAmIzQzOz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjEyOmt2bS0kKENPTkZJR19LVk1fSU9BUElDKSAmIzQzOz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMTMta3ZtLSQoQ09ORklHX0tWTV9IWVBFUlYpICYjNDM7PSBoeXBlcnYub1xuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jPTE1NDY9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19zZW5kX2VvaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgdmVjdG9yKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE1NDktXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoxNTUwOlx0LyogRW9pIHRoZSBpb2FwaWMgb25seSBpZiB0aGUgaW9hcGljIGRvZXNuJiMzOTt0IG93biB0aGUgdmVjdG9yLiAqL1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMTU1MS1cdGlmICgha3ZtX2lvYXBpY19oYW5kbGVzX3ZlY3RvcihhcGljLCB2ZWN0b3IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gSU9BUElDIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIEtWTSBJL08gQVBJQyBpcyBzZXQgdXAuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdHMgY29tcGlsYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfS1ZNX0lPQVBJQ2AgYmVpbmcgZW5hYmxlZC4gTmF0dXJhbGx5LCB0aGF0JiMzOTtzIHVzdWFsbHkgc2VsZWN0ZWQgd2hlbiBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIHNlbGVjdGVkLiBUbyBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGNvcnJlY3RseSwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhpcyBieSBjaGVja2luZyB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIEtWTSBjb25maWd1cmF0aW9uIGRldGFpbHMgb24geDg2LCBzbyB0aGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTU2PWNvbmZpZyBLVk1fQU1EX1NFVlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIHRoZSBgS1ZNX0lPQVBJQ2Agc2VsZWN0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgS1ZNX0lPQVBJQ2AgU2VsZWN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoZSBzZWxlY3Rpb24gb2YgYEtWTV9JT0FQSUNgLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgZmxhZyBvciBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNob3NlbiBvciBlbmFibGVkIHdpdGhpbiB0aGUgS1ZNIGNvZGViYXNlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgd2hlcmUgdGhlIG1hY3JvIGlzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSB0aGUgKmxvZ2ljKiB0aGF0IGRldGVybWluZXMgaXRzIHVzZSByZXNpZGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucywgY29uZmlndXJhdGlvbnMsIG9yIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0aGF0IGxlYWQgdG8gYEtWTV9JT0FQSUNgIGJlaW5nIGFjdGl2ZS4gSXMgaXQgc3BlY2lmaWMgQ1BVIG1vZGVscz8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgc3lzdGVtIGJvYXJkIGZlYXR1cmVzLCBCSU9TIHNldHRpbmdzLCBvciBvdGhlciBLVk0gYnVpbGQgb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ3JlcCB0byBmaW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQgYW5kIHRoZW4gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBhbmQgbG9naWNhbCBvcGVyYXRvcnMgdGhhdCB1bHRpbWF0ZWx5IGVuYWJsZSBvciBkaXNhYmxlIGl0LiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGBpZmAgc3RhdGVtZW50IGJhc2VkIG9uIGEga2VybmVsIHBhcmFtZXRlciwgYSBoYXJkd2FyZSBmZWF0dXJlIGJpdCwgb3IgYSBLVk0gY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0lPQVBJQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS1ZNX0lPQVBJQyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gaW1wbGVtZW50YXRpb24sIGxvY2F0ZWQgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciB0aGUgYEtWTV9JT0FQSUNgIG9wdGlvbi4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcyBiZWZvcmUgcHJvY2VlZGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIGBLVk1fSU9BUElDYCBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBjb250ZXh0IGFuZCBob3cgdGhpcyBhc3BlY3QgZnVuY3Rpb25zIHdpdGhpbiBLVk0mIzM5O3MgZGVzaWduLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSwgZG91YmxlLWNoZWNrIHRoYXQgZmlyc3QsIGFuZCB0aGVuIGJ1aWxkIG91dHdhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fSU9BUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTExPWt2bS0kKENPTkZJR19YODZfNjQpICYjNDM7PSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MTI6a3ZtLSQoQ09ORklHX0tWTV9JT0FQSUMpICYjNDM7PSBpODI1OS5vIGk4MjU0Lm8gaW9hcGljLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0xMy1rdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgJiM0Mzs9IGh5cGVydi5vXG4tLVxuYXJjaC94ODYva3ZtL2k4MjU0LmgtMTItXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaDoxMzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pODI1NC5oLTE0LXN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlIHtcbi0tXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaD02OT12b2lkIGt2bV9mcmVlX3BpdChzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL2k4MjU0Lmg6NzA6I2VuZGlmIC8qIENPTkZJR19LVk1fSU9BUElDICovXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaC03MS1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtOC1cbmFyY2gveDg2L2t2bS9pb2FwaWMuaDo5OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL2lvYXBpYy5oLTEwLVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuaD0xMj1zdHJ1Y3Qga3ZtX3ZjcHU7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTMtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg6MTQ6I2RlZmluZSBJT0FQSUNfTlVNX1BJTlMgIEtWTV9JT0FQSUNfTlVNX1BJTlNcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xNS0jZGVmaW5lIElPQVBJQ19WRVJTSU9OX0lEIDB4MTFcdC8qIElPQVBJQyB2ZXJzaW9uICovXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5oPTExND12b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTE1LVx0XHRcdCAgIHVsb25nICppb2FwaWNfaGFuZGxlZF92ZWN0b3JzKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuaDoxMTY6I2VuZGlmIC8qIENPTkZJR19LVk1fSU9BUElDICovXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTE3LVxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYz01OT1pbnQga3ZtX2NwdV9oYXNfZXh0aW50KHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtODAtXG5hcmNoL3g4Ni9rdm0vaXJxLmM6ODE6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vaXJxLmMtODItXHRpZiAocGljX2luX2tlcm5lbCh2LVx1MDAzZWt2bSkpXG4tLVxuYXJjaC94ODYva3ZtL2lycS5jPTEyOD1pbnQga3ZtX2NwdV9nZXRfZXh0aW50KHN0cnVjdCBrdm1fdmNwdSAqdilcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTQyLVxuYXJjaC94ODYva3ZtL2lycS5jOjE0MzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pcnEuYy0xNDQtXHRpZiAocGljX2luX2tlcm5lbCh2LVx1MDAzZWt2bSkpXG4tLVxuYXJjaC94ODYva3ZtL2lycS5jPTE3Nz12b2lkIF9fa3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTc5LVx0X19rdm1fbWlncmF0ZV9hcGljX3RpbWVyKHZjcHUpO1xuYXJjaC94ODYva3ZtL2lycS5jOjE4MDojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pcnEuYy0xODEtXHRfX2t2bV9taWdyYXRlX3BpdF90aW1lcih2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmM9Mjk2PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYy0zMDQtXHRzd2l0Y2ggKHVlLVx1MDAzZXR5cGUpIHtcbmFyY2gveDg2L2t2bS9pcnEuYzozMDU6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzA2LVx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDpcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzE5LVx0XHRjYXNlIEtWTV9JUlFDSElQX0lPQVBJQzpcbmFyY2gveDg2L2t2bS9pcnEuYzozMjA6XHRcdFx0aWYgKHVlLVx1MDAzZXUuaXJxY2hpcC5waW4gXHUwMDNlPSBLVk1fSU9BUElDX05VTV9QSU5TKVxuYXJjaC94ODYva3ZtL2lycS5jLTMyMS1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gveDg2L2t2bS9pcnEuYz01MzM9dm9pZCBrdm1fYXJjaF91cGRhdGVfaXJxZmRfcm91dGluZyhzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsXG4tLVxuYXJjaC94ODYva3ZtL2lycS5jLTU0OC1cbmFyY2gveDg2L2t2bS9pcnEuYzo1NDk6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vaXJxLmMtNTUwLSNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcXFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuaC0yMC1cbmFyY2gveDg2L2t2bS9pcnEuaDoyMTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS9pcnEuaC0yMi1cbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmg9NzY9c3RhdGljIGlubGluZSBpbnQgaXJxY2hpcF9mdWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmgtODMtfVxuYXJjaC94ODYva3ZtL2lycS5oOjg0OiNlbHNlIC8qIENPTkZJR19LVk1fSU9BUElDICovXG5hcmNoL3g4Ni9rdm0vaXJxLmgtODUtc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgaXJxY2hpcF9mdWxsKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0xNDAwPXN0YXRpYyBpbnQgX19hcGljX2FjY2VwdF9pcnEoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMTQyMi1cbmFyY2gveDg2L2t2bS9sYXBpYy5jOjE0MjM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNDI0LVx0XHRpZiAocnRjX3N0YXR1cykge1xuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jPTE1NDY9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19zZW5kX2VvaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgdmVjdG9yKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE1NzctXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoxNTc4OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMTU3OS1cdGlmIChhcGljX3Rlc3RfdmVjdG9yKHZlY3RvciwgYXBpYy1cdTAwM2VyZWdzICYjNDM7IEFQSUNfVE1SKSlcbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0zMzA2PWludCBrdm1fYXBpY19zZXRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpzKVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTMzMzktXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzozMzQwOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL2xhcGljLmMtMzM0MS1cdGlmIChpb2FwaWNfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSlcbi0tXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0yMjg9VFJBQ0VfRVZFTlQoa3ZtX2NwdWlkLFxuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3Mi1cbmFyY2gveDg2L2t2bS90cmFjZS5oOjI3MzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3NC1UUkFDRV9FVkVOVChrdm1faW9hcGljX3NldF9pcnEsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTQ3Njg9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDc3OS1cdGNhc2UgS1ZNX0NBUF9DTE9DS1NPVVJDRTpcbmFyY2gveDg2L2t2bS94ODYuYzo0NzgwOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTQ3ODEtXHRjYXNlIEtWTV9DQVBfUElUOlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz03MjU4PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI2My1cbmFyY2gveDg2L2t2bS94ODYuYzo3MjY0OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTcyNjUtXHQvKlxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03Mjk4LVx0XHRicmVhaztcbmFyY2gveDg2L2t2bS94ODYuYzo3Mjk5OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTczMDAtXHRjYXNlIEtWTV9DUkVBVEVfSVJRQ0hJUDoge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMTA1MD1zdGF0aWMgdm9pZCB2Y3B1X3NjYW5faW9hcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTEwNjEtXHRcdGt2bV9zY2FuX2lvYXBpY19yb3V0ZXModmNwdSwgdmNwdS1cdTAwM2VhcmNoLmlvYXBpY19oYW5kbGVkX3ZlY3RvcnMpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjExMDYyOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDYzLVx0ZWxzZSBpZiAoaW9hcGljX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzNDI1PXZvaWQga3ZtX2FyY2hfcHJlX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMzQzNi1cdCAqL1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEzNDM3OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNDM4LVx0a3ZtX2ZyZWVfcGl0KGt2bSk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzNDQ3PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNDY2LVx0a3ZtX2ZyZWVfbXNyX2ZpbHRlcihzcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGt2bS1cdTAwM2VhcmNoLm1zcl9maWx0ZXIsIFx1MDAyNmt2bS1cdTAwM2VzcmN1LCAxKSk7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTM0Njc6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM0NjgtXHRrdm1fcGljX2Rlc3Ryb3koa3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgQ09ORklHX0tWTV9JT0FQSUNgIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgKnRoaW5rKiBpdCYjMzk7cyBzZWxlY3RlZCBzb21ld2hlcmUgYnkgYENPTkZJR19LVk1gLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlLi4uIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBiZWZvcmUgSSBtYWtlIGFueSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fSU9BUElDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIE15IFdvcmsgJmFtcDsgRm9sbG93aW5nIFVwKioKCkhtbSwgd2FzbiYjMzk7dCBJIGp1c3QgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGlzPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGR1cGxpY2F0aW5nIGVmZm9ydC4gT2theSwgbGV0JiMzOTtzIHNlZS4uLkkgdGhpbmsgSSByZW1lbWJlciB3b3JraW5nIHdpdGggdGhlIElPQVBJQyByZWNlbnRseS4gV2hlcmUgd2FzIHRoYXQgc2V0dGluZyBkZWZpbmVkPyBSaWdodCwgaXQgd2FzIGluIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSB4ODYgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBMZXQmIzM5O3MgbmF2aWdhdGUgdGhlcmUgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IGFscmVhZHkgYWRkcmVzc2VkIHdoYXRldmVyIHRhc2sgSSB3YXMganVzdCBwb25kZXJpbmcgdGhhdCBicm91Z2h0IHRoYXQgc2V0dGluZyB0byBtaW5kLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBLVk1fSU9BUElDYCBhbmQgcXVpY2tseSBjb25maXJtIGl0cyBzdGF0dXMuIERvbiYjMzk7dCB3YW50IHRvIHNwaW4gbXkgd2hlZWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXHUwMDI2XHUwMDI2ICEoS1ZNX0FNRD15IFx1MDAyNlx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxuIDE2MTpcdFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gMTYyOlx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiAxNjM6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxuIDE2NDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY1Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTY2Olx0XHRoZWxwXG4gMTY3Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcbiAxNjg6XHRcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcbiAxNjk6XHRcdCAgRW5jcnlwdGVkIFN0YXRlIChTRVYtRVMpLCBhbmQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTcwOlx0XHQgIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSB0ZWNobm9sb2dpZXMgb24gQU1EIHByb2Nlc3NvcnMuXG4gMTcxOlx0XG4gMTcyOlx0Y29uZmlnIEtWTV9JT0FQSUNcbiAxNzM6XHRcdGJvb2wgXCYjMzQ7SS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cJiMzNDtcbiAxNzQ6XHRcdGRlZmF1bHQgeVxuIDE3NTpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2XG4gMTc2Olx0XHRoZWxwXG4gMTc3Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIGFuIEkvTyBBUElDLCBQSUMsIGFuZCBQSVQsIGkuZS5cbiAxNzg6XHRcdCAgZm9yIGZ1bGwgaW4ta2VybmVsIEFQSUMgZW11bGF0aW9uLlxuIDE3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTWF6ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgZGVmYXVsdCB5YCBhbmQsIGNydWNpYWxseSwgYGRlcGVuZHMgb24gS1ZNX1g4NmAuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIEkmIzM5O20gbG9va2luZyBhdCwgbGV0JiMzOTtzIGp1c3QgY2FsbCBpdCAmIzM0O3RoaXMgc2V0dGluZywmIzM0OyBkZWZhdWx0cyB0byAmIzM5O3llcyYjMzk7IGJ1dCBvbmx5ICppZiogYEtWTV9YODZgIGlzIGFsc28gZW5hYmxlZC4gRmluZSwgc28gbm93IEkmIzM5O20gdGhpbmtpbmcsIGBLVk1gIGFuZCBgS1ZNX1g4NmAgYXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgaW50ZXJlc3QgaGVyZS4gV2hlcmUgaXMgYEtWTV9YODZgIGRlZmluZWQsIGV4YWN0bHk/IFRpbWUgdG8gZ28gaHVudGluZyBmb3IgaXRzIGRlZmluaXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBgS1ZNX1g4NmAgZGVmaW5pdGlvbiB3b3VsZCBiZSBpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZS4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYEtWTV9YODZgIGNvbmZpZyBpbiB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1g4NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd24gb2YgdGhlc2UgY2hhbmdlcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBsaWtlIEkgd291bGQgb24gdGhlIGZseToKCioqS1ZNIFBhdGNoIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFyb3VuZCBgS1ZNYC4gR290IGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1haW4gZnVuY3Rpb25zIGFmZmVjdGVkIGFyZS4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaGl0cyBgaW9hcGljX3NldF9pcnFgIGFuZCBgaW9hcGljX3NlcnZpY2VgLiBPa2F5LCBhbmQgdGhleSBhcmUgYm90aCBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgbWVhbnMgdGhleSYjMzk7cmUgc2NvcGVkIGxvY2FsbHkgd2l0aGluIHRoZWlyIGZpbGUsIHdoaWNoIGdpdmVzIHVzIGEgdGlnaHRlciBmb2N1cy4gTm93IHRoZSBjcnVjaWFsIHN0ZXAgaXMgdG8gdHJhY2UgYmFjaywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqY2FsbGluZyogdGhvc2UgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGp1aWNlIG9mIHRoZSBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYXBpY19zZXRfaXJxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTY1PXN0YXRpYyB2b2lkIGlvYXBpY19sYXp5X3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSlcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjE4NzpzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg4LVx0XHRpbnQgaXJxX2xldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDItb3V0OlxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0MzpcdHRyYWNlX2t2bV9pb2FwaWNfc2V0X2lycShlbnRyeS5iaXRzLCBpcnEsIHJldCA9PSAwKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDQtXHRyZXR1cm4gcmV0O1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0yNDc9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19pbmplY3RfYWxsKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGxvbmcgaXJyKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNTItXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgXHUwMDI2aXJyLCBJT0FQSUNfTlVNX1BJTlMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjUzOlx0XHRpb2FwaWNfc2V0X2lycShpb2FwaWMsIGlkeCwgMSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU0LVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NTc9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00OTktXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTAwOmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDEtXHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MTItXHRcdFx0XHRcdCBpcnFfc291cmNlX2lkLCBsZXZlbCk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTEzOlx0cmV0ID0gaW9hcGljX3NldF9pcnEoaW9hcGljLCBpcnEsIGlycV9sZXZlbCwgbGluZV9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxNC1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg9MTA4PXZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg6MTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xMTAtXHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKTtcbi0tXG5hcmNoL3g4Ni9rdm0vaXJxLmM9Mjk2PWludCBrdm1fc2V0X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS9pcnEuYy0zMjEtXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmFyY2gveDg2L2t2bS9pcnEuYzozMjI6XHRcdFx0ZS1cdTAwM2VzZXQgPSBrdm1faW9hcGljX3NldF9pcnE7XG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzIzLVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oPTIyOD1UUkFDRV9FVkVOVChrdm1fY3B1aWQsXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjczLSNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL3RyYWNlLmg6Mjc0OlRSQUNFX0VWRU5UKGt2bV9pb2FwaWNfc2V0X2lycSxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3NS1cdCAgICBUUF9QUk9UTyhfX3U2NCBlLCBpbnQgcGluLCBib29sIGNvYWxlc2NlZCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDEwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBLVk0mIzM5O3MgSU9BUElDIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGt2bV9pb2FwaWNfc2V0X2lycWAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50LCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBleHRlcm5hbCB3b3JsZCBpbnRlcmFjdHMgd2l0aCB0aGUgSU9BUElDIGludGVycnVwdCBzZXR1cCB3aXRoaW4gS1ZNLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW50ZXJuYWxseSwgYW5kIHNwZWNpZmljYWxseSwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBlbnRyeSBwb2ludCBjb25uZWN0cyB0byB0aGUgb3ZlcmFsbCBpbnRlcnJ1cHQgc2VydmljaW5nIG1lY2hhbmlzbS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGBpb2FwaWNfc2VydmljZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZyb20gdGhpcyBlbnRyeSBwb2ludCB0byBpbnRlcnJ1cHQgZGVsaXZlcnk7IEkgbmVlZCB0byBrbm93IGhvdyB0aGUgaW50ZXJydXB0IHJlcXVlc3RzIGFyZSByZWNlaXZlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSByb3V0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYXBpY19zZXJ2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzYtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Mzc6c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYywgaW50IGlycSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zOC1cdFx0Ym9vbCBsaW5lX3N0YXR1cyk7XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTIzOS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDA6XHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0MS1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MzMxPXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MTYtXHRcdFx0ZWxzZVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQxNzpcdFx0XHRcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00MTgtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDU2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQ1NzpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDU4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTIwPXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTMyLVx0XHRpZiAoaW9hcGljLVx1MDAzZWlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNlx1MDAyNiAhZW50LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzMzpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIGksIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MzQtXHR9XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTUzOT1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTc4LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU3OTpcdFx0XHRpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbiwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU4MC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9hcGljX3NlcnZpY2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9hcGljX3NlcnZpY2VgLiBJIHNlZSBpdCYjMzk7cyBhIGNlbnRyYWwgZnVuY3Rpb24sIGFuZCB0aGUgY29kZSBzaG93cyBpdCBnZXRzIGNhbGxlZCBmcm9tIGEgZmV3IGltcG9ydGFudCBwbGFjZXM6IGBpb2FwaWNfc2V0X2lycWAsIHdoaWNoIEkga25vdyBoYW5kbGVzIGludGVycnVwdCByZXF1ZXN0cywgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAgd2hpY2ggc291bmRzIGxpa2UgaXQgbWFuYWdlcyBtZW1vcnkgaW5kaXJlY3Qgd3JpdGVzLCBhbmQgdGhlbiBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZWAsIHdoaWNoIGFyZSBjbGVhcmx5IEtWTS1zcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBFbmQtb2YtSW50ZXJydXB0IChFT0kpIGhhbmRsaW5nLiBUaGF0JiMzOTtzIGEgcHJldHR5IGRpdmVyc2Ugc2V0IG9mIGNhbGwgc2l0ZXMsIHdoaWNoIG1lYW5zIGBpb2FwaWNfc2VydmljZWAgaXMgcHJvYmFibHkgb3JjaGVzdHJhdGluZyBzb21lIGNvcmUgbG9naWMgYXJvdW5kIHRoZSBJL08gQVBJQyYjMzk7cyBiZWhhdmlvci4KCk5vdywgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zIG1lYW4gdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBJdCYjMzk7cyB0aW1lIHRvIGZpbmQgb3V0IHdoYXQgdXNlcyBpdCBhbmQgaG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2FwaWNfd3JpdGVfaW5kaXJlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYz0zMTQ9dm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbixcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzMwLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjMzMTpzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zMzIte1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz02NTQ9c3RhdGljIGludCBpb2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLFxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02ODUtXHRjYXNlIElPQVBJQ19SRUdfV0lORE9XOlxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY4NjpcdFx0aW9hcGljX3dyaXRlX2luZGlyZWN0KGlvYXBpYywgZGF0YSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjg3LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgdGhlIElPQVBJQyBNTUlPIFdyaXRlIEhhbmRsZXIqKgoKUmlnaHQsIGBpb2FwaWNfbW1pb193cml0ZWAuIFRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGxpa2VseSBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLiBBbmQgaXQmIzM5O3MgY2xlYXJseSBhbiBNTUlPIGhhbmRsZXIsIG1lYW5pbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIE1lbW9yeS1NYXBwZWQgSS9PIG9wZXJhdGlvbnMgZm9yIHRoZSBJT0FQSUMuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGl0JiMzOTtzICp1c2VkKi4gTGV0JiMzOTtzIGdvIGFuZCBleGFtaW5lIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTIwPXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTM4LSNkZWZpbmUgSU9BUElDX1NVQ0NFU1NJVkVfSVJRX01BWF9DT1VOVCAxMDAwMFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzOTpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLFxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01ODY9dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTctXHRcdFx0Y29udGludWU7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTk4Olx0XHRrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHZjcHUsIGlvYXBpYywgdHJpZ2dlcl9tb2RlLCBpKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU2CgkJCQkJCQlvdXRwdXQ6IDYyCgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBJT0FQSUMgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW9hcGljLmNgLCBhbmQgSSYjMzk7dmUgZmxhZ2dlZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBhcyBhIGZ1bmN0aW9uIG9mIGludGVyZXN0IGJlY2F1c2UgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlIGtleSBoZXJlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBlbnRyeSBwb2ludHMgb3IgYXJlYXMgd2hlcmUgc3RhdGUgY2hhbmdlcyBtaWdodCBvY2N1ciByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gSSBzZWUgdGhhdCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyBhbHNvIG5vbi1zdGF0aWMsIHNvIHRob3NlIHR3byBkZWZpbml0ZWx5IHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gSSBhbHNvIHJlY2FsbCB0aGF0IGBrdm1faW9hcGljX2VvaV9pbmplY3Rfd29ya2AgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHdoaWNoIGltcGxpZXMgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIGFuZCB0aHVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBjYXJlZnVsbHkgZXhhbWluZSBib3RoIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzaGFyZWQgZGF0YSBvciByZXNvdXJjZXMgdGhleSBtaWdodCBtYW5pcHVsYXRlLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgc291cmNlcyBvZiBjb25jdXJyZW5jeSBvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2EtejAtOV9dJiM0MzsgKSYjNDM7a3ZtX2lvYXBpY19bYS16MC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ2LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI1OTp2b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nICppb2FwaWNfaGFuZGxlZF92ZWN0b3JzKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI2MC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTQ1Nz1zdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ5OS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MDA6aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUwMS1cdFx0ICAgICAgIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxOS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MjA6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUyMS17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUzOC0jZGVmaW5lIElPQVBJQ19TVUNDRVNTSVZFX0lSUV9NQVhfQ09VTlQgMTAwMDBcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1Mzk6c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQwLVx0XHRcdFx0ICAgICAgc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU4Njp2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NjU0PXN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjk1LVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY5NjpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjk3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MTYtXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzE3OmludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcxOC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc0My1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3NDQ6dm9pZCBrdm1faW9hcGljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc0NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjU0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBJT0FQSUMgZnVuY3Rpb25zLiBJIHNlZSB3ZSBoYXZlOiBga3ZtX2lvYXBpY19zY2FuX2VudHJ5YCwgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBga3ZtX2lvYXBpY19pbml0YCwgYW5kIGBrdm1faW9hcGljX2Rlc3Ryb3lgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoZXkgc2VlbSB0byBiZSBrZXkgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4KCkFoYSwgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgdGhlIG9uZSB0aGF0IGRpcmVjdGx5IGludm9rZXMgYGlvYXBpY19zZXRfaXJxYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLiBMZXQmIzM5O3MgZGlnIGludG8gYGt2bV9pb2FwaWNfc2V0X2lycWAgdGhlbjsgaXQgc2VlbXMgdG8gYmUgYW4gZXNzZW50aWFsIGVudHJ5IHBvaW50IGZvciBJUlEgcm91dGluZywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpOb3csIGxldCYjMzk7cyBzZWXigKYgYGlvYXBpY19zZXJ2aWNlYCBpcyBjYWxsZWQgYnkgYGlvYXBpY193cml0ZV9pbmRpcmVjdGAuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGlvYXBpY19tbWlvX3dyaXRlYC4gSW50ZXJlc3RpbmcuIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG9mdGVuIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIGEgbW9kdWxlLiBIb3dldmVyLCBpdCYjMzk7cyBhbHNvIGFuIE1NSU8gaGFuZGxlciwgc28gaXQgbXVzdCBiZSByZWdpc3RlcmVkIHNvbWV3aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLgoKWWVwLCBoZXJlIGl0IGlzOiBga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzYC4gSXQmIzM5O3MgcmVnaXN0ZXJlZCEgT2theSwgbGV0JiMzOTtzIG5vdyB1bmRlcnN0YW5kIGBpb2FwaWNfbW1pb193cml0ZWAgdGhvcm91Z2hseTsgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgaG93IE1NSU8gYWNjZXNzIHRvIHRoZSBJT0FQSUMgaXMgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9hcGljX21taW9fd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTYxND1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjUzLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY1NDpzdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjU1LVx0XHRcdFx0IGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbClcbi0tXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NzEyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0ge1xuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTcxMy1cdC5yZWFkICAgICA9IGlvYXBpY19tbWlvX3JlYWQsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NzE0Olx0LndyaXRlICAgID0gaW9hcGljX21taW9fd3JpdGUsXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzE1LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njc3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIElPQVBJQyBmdW5jdGlvbnMgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZSB0byB1c2UgYXMgYSBmb2N1cyBzeW1ib2wuIGBpb2FwaWNfbW1pb193cml0ZWAgaXMgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBydWxlcyBpdCBvdXQuIE5vIGdvb2QgZm9yIGEgc3ltYm9sIGlmIGl0JiMzOTtzIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCwgaG9sZCBvbiwgaXQgc2VlbXMgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBIb3dldmVyLCBgaW9hcGljX3NldF9pcnFgIGlzIGFsc28gY2FsbGVkIGJ5IGBrdm1faW9hcGljX2luamVjdF9hbGxgLCB3aGljaCwgdW5mb3J0dW5hdGVseSwgKmlzKiBzdGF0aWMuIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIGEgYml0LiBTbywgaWYgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGBpb2FwaWNfc2V0X2lycWAgZHVlIHRvIGl0cyBzdGF0aWMgY2FsbGVyLCB0aGUgZm9jdXMgd2lsbCBuZWVkIHRvIHNoaWZ0LiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgZXhhY3RseSAqd2hvKiBpcyBjYWxsaW5nIGBrdm1faW9hcGljX2luamVjdF9hbGxgLCBhcyB0aGF0IG1pZ2h0IHJldmVhbCBhIGJldHRlciBlbnRyeSBwb2ludCBvciBwYXRoIHRvIHRoZSBsb2dpYyBJJiMzOTttIHJlYWxseSBpbnRlcmVzdGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW9hcGljX2luamVjdF9hbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2lvYXBpYy5jPTE4Nz1zdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0Ni1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNDc6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19pbmplY3RfYWxsKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGxvbmcgaXJyKVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0OC17XG4tLVxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTc2OT12b2lkIGt2bV9zZXRfaW9hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKVxuLS1cbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NzctXHRrdm1fbWFrZV9zY2FuX2lvYXBpY19yZXF1ZXN0KGt2bSk7XG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6Nzc4Olx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXHUwMDNlaXJyKTtcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NzktXHRzcGluX3VubG9jayhcdTAwMjZpb2FwaWMtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtWTSBJT0FQSUMgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIGBrdm1fc2V0X2lvYXBpY2AgaXNuJiMzOTt0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBrdm1faW9hcGljX2luamVjdF9hbGxgLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciBteSBmb2NhbCBwb2ludCBpbiB0aGlzIGFuYWx5c2lzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBhbmQgYGt2bV9zZXRfaW9hcGljYCBhbHNvIG1ha2UgZ29vZCBmb2N1cyBzeW1ib2xzLCBnaXZlbiB0aGF0IHRoZXkgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZSBJJiMzOTttIG1vZGlmeWluZy4KCk5vdywgYSBxdWljayByZXZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJIHNlZSBgS1ZNYCBhcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0sIGFuZCBgS1ZNX1g4NmAgYXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvbmUuIEhhbmcgb24gYSBzZWNvbmQuLi4gYEtWTWAgaXMgYSB0cmlzdGF0ZSwgd2hpbGUgYEtWTV9YODZgIGlzIGEgc3RhbmRhcmQgY29uZmlnPyBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwsIGJ1dCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBvbmUgZm9yIGVuYWJsaW5nIEtWTSBmdW5jdGlvbmFsaXR5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBgS1ZNYC4gR290IGl0LiBGaXJzdCB0aG91Z2h0OiBgS1ZNYCBpbXBsaWVzIGNvbmZpZ3VyYXRpb24sIG5hdHVyYWxseS4gQnV0IGhvbGQgb24sIGxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuLiBXZSBhbGwga25vdyBgS1ZNYCBpcyBidWlsdCBvbiBhIHNvbGlkIGZvdW5kYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIHRoZSB1bmRlcmx5aW5nIGBWSVJUVUFMSVpBVElPTmAgaW5mcmFzdHJ1Y3R1cmUuIEJlZm9yZSBJIGRpdmUgaW50byBhbnkgc3BlY2lmaWMgYEtWTWAgc2V0dGluZ3MsIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBUaW1lIHRvIGludmVzdGlnYXRlIGBLVk1gJiMzOTtzIGRlcGVuZGVuY2llcyB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxuICA1NzpcdFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcbiAgNTg6XHRcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xuICA1OTpcdFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2hcbiAgNjI6XHRcdCAgYSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgbmFtZWQgL2Rldi9rdm0uXG4gIDYzOlx0XG4gIDY0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA2NTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXG4gIDY2Olx0XG4gIDY3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIEtWTV9XRVJST1JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NzkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIGFuZCBJT0FQSUMgQ29uZmlndXJhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYEtWTWAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYWN0dWFsbHkuIFdlIGtub3cgdGhhdCBgS1ZNYCByZWxpZXMgb24gYFg4Nl9MT0NBTF9BUElDYCwgYW5kIGBLVk1gIGlzIG5lc3RlZCB3aXRoaW4gYGlmIFZJUlRVQUxJWkFUSU9OYCwgc28gdGhhdCYjMzk7cyB0aGUgYmFzZS4gU2VlbXMgbGlrZSBgS1ZNYCBpcyB0aGUgY29uZmlnIHdlJiMzOTtyZSBsb29raW5nIGZvciwgZ29vZCB0byBuYWlsIHRoYXQgZG93bi4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgS1ZNX0lPQVBJQ2AgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0JiMzOTtzIGBkZWZhdWx0IHlgIGFuZCBkZXBlbmRzIG9uIGBLVk1fWDg2YC4gV2hpY2ggbWVhbnMgdGhhdCBpZiBgS1ZNYCBpcyBhY3RpdmUsIHRoZW4gYEtWTV9JT0FQSUNgIHNob3VsZCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsIEkgbWlnaHQgc3RpbGwgd2FudCB0byBleHBsaWNpdGx5IHNwZWNpZnkgYm90aCBgS1ZNYCBhbmQgYEtWTV9JT0FQSUNgIGluIHRoZSBjb25maWcganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHNldHVwLiBJdCBhZGRzIGEgbGF5ZXIgb2YgY2xhcml0eS4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGtleSBmdW5jdGlvbnMgYWdhaW4uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBhcmUgZW50cnkgcG9pbnRzLCB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGxpa2VseSB0byBjYWxsLiBXZSYjMzk7dmUgZ290OiBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBga3ZtX3NldF9pb2FwaWNgLiBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQ/CgpBIGJpdCBtb3JlIGRpZ2dpbmcgc2hvd3MgbWUgdGhhdCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBieSBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfaW5qZWN0X2FsbGAsIGFuZCBgaW9hcGljX3NlcnZpY2VgIGlzIGNhbGxlZCBieSBgaW9hcGljX3NldF9pcnFgLCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCwgYGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrYCwgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIG1vc3QgY29uY2VybmVkIHdpdGggYXJlOiBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGBrdm1fc2V0X2lvYXBpY2AsIGFuZCBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIChldmVuIHRob3VnaCB0aGF0IGxhc3Qgb25lIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBzbyBub3QgZGlyZWN0bHkgY2FsbGFibGUgYnkgZXh0ZXJuYWwgY29kZSkuCgpOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBga3ZtX2lvYXBpY19zZXRfaXJxYCBpbiBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5NTpcdFx0XHRlbnRyeS1cdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDE7XG4gNDk2Olx0XG4gNDk3Olx0XHRyZXR1cm4gcmV0O1xuIDQ5ODpcdH1cbiA0OTk6XHRcbiA1MDA6XHRpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBzdHJ1Y3Qga3ZtICprdm0sXG4gNTAxOlx0XHRcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxuIDUwMjpcdHtcbiA1MDM6XHRcdHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBrdm0tXHUwMDNlYXJjaC52aW9hcGljO1xuIDUwNDpcdFx0aW50IGlycSA9IGUtXHUwMDNlaXJxY2hpcC5waW47XG4gNTA1Olx0XHRpbnQgcmV0LCBpcnFfbGV2ZWw7XG4gNTA2Olx0XG4gNTA3Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGlycSBcdTAwM2MgMCB8fCBpcnEgXHUwMDNlPSBJT0FQSUNfTlVNX1BJTlMpKVxuIDUwODpcdFx0XHRyZXR1cm4gLTE7XG4gNTA5Olx0XG4gNTEwOlx0XHRzcGluX2xvY2soXHUwMDI2aW9hcGljLVx1MDAzZWxvY2spO1xuIDUxMTpcdFx0aXJxX2xldmVsID0gX19rdm1faXJxX2xpbmVfc3RhdGUoXHUwMDI2aW9hcGljLVx1MDAzZWlycV9zdGF0ZXNbaXJxXSxcbiA1MTI6XHRcdFx0XHRcdFx0IGlycV9zb3VyY2VfaWQsIGxldmVsKTtcbiA1MTM6XHRcdHJldCA9IGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaXJxLCBpcnFfbGV2ZWwsIGxpbmVfc3RhdHVzKTtcbiA1MTQ6XHRcbiA1MTU6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlvYXBpYy1cdTAwM2Vsb2NrKTtcbiA1MTY6XHRcbiA1MTc6XHRcdHJldHVybiByZXQ7XG4gNTE4Olx0fVxuIDUxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqUmVmbGVjdGluZyBvbiBJT0FQSUMgSW50ZXJydXB0IEhhbmRsaW5nKioKClJpZ2h0LCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB3ZSYjMzk7cmUgbWFuYWdpbmcgYW5kIGNvbmZpZ3VyaW5nIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMgY29udGV4dC4gRm9jdXNpbmcgb24gdGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgY3VycmVudCBzdGF0ZS4KCk5vdywgd2l0aCB0aGF0IGluIG1pbmQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoZSBpbnRlcnJ1cHQgaXMgc2V0LiBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgb3ZlciB0byBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgRW5kIG9mIEludGVycnVwdCBoYW5kbGluZyBsb2dpYyB3aWxsIGJlLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSB0aGUgb3ZlcmFsbCBwaWN0dXJlIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaW9hcGljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4MDpcdFx0XHR9XG4gNTgxOlx0XHR9IGVsc2Uge1xuIDU4MjpcdFx0XHRpb2FwaWMtXHUwMDNlaXJxX2VvaVtwaW5dID0gMDtcbiA1ODM6XHRcdH1cbiA1ODQ6XHR9XG4gNTg1Olx0XG4gNTg2Olx0dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxuIDU4NzpcdHtcbiA1ODg6XHRcdGludCBpO1xuIDU4OTpcdFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudmlvYXBpYztcbiA1OTA6XHRcbiA1OTE6XHRcdHNwaW5fbG9jayhcdTAwMjZpb2FwaWMtXHUwMDNlbG9jayk7XG4gNTkyOlx0XHRydGNfaXJxX2VvaShpb2FwaWMsIHZjcHUsIHZlY3Rvcik7XG4gNTkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJT0FQSUNfTlVNX1BJTlM7IGkmIzQzOyYjNDM7KSB7XG4gNTk0Olx0XHRcdHVuaW9uIGt2bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudCA9IFx1MDAyNmlvYXBpYy1cdTAwM2VyZWRpcnRibFtpXTtcbiA1OTU6XHRcbiA1OTY6XHRcdFx0aWYgKGVudC1cdTAwM2VmaWVsZHMudmVjdG9yICE9IHZlY3RvcilcbiA1OTc6XHRcdFx0XHRjb250aW51ZTtcbiA1OTg6XHRcdFx0a3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZSh2Y3B1LCBpb2FwaWMsIHRyaWdnZXJfbW9kZSwgaSk7XG4gNTk5Olx0XHR9XG4gNjAwOlx0XHRzcGluX3VubG9jayhcdTAwMjZpb2FwaWMtXHUwMDNlbG9jayk7XG4gNjAxOlx0fVxuIDYwMjpcdFxuIDYwMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9pb2FwaWMgKnRvX2lvYXBpYyhzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KVxuIDYwNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgb24gRU9JIFVwZGF0ZXMqKgoKQWxyaWdodCwgKmt2bV9pb2FwaWNfdXBkYXRlX2VvaSog4oCTIHRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSBsaWtlIHRoYXQuIFdlJiMzOTtyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCB0aGUgZW5kLW9mLWludGVycnVwdCBwcm9jZXNzIGhlcmUsIGFuZCB0aGF0IGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgemVyb2VzIGluIG9uIHRoZSBjb3JlIGNvbmNlcm4uIFRoZSBmb2N1cyBvbiB0aGUgRU9JIHBhcnQgb2YgdGhlIGludGVycnVwdCBoYW5kbGluZyBpcyBjb3JyZWN0LiBXZSBzaG91bGQgY2hlY2sgdGhhdCBmdW5jdGlvbi4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgdGhlIHJlbGF0ZWQgYGt2bV9zZXRfaW9hcGljYCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQgZml0cyBpbiB0aGUgcGljdHVyZS4uLiB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzLiBJdCBtYXkgb2ZmZXIgY2x1ZXMgdG8gb3RoZXIgcG9pbnRzIG9mIGludGVyZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9pb2FwaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0e1xuIDc2MTpcdFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cdTAwM2VhcmNoLnZpb2FwaWM7XG4gNzYyOlx0XG4gNzYzOlx0XHRzcGluX2xvY2soXHUwMDI2aW9hcGljLVx1MDAzZWxvY2spO1xuIDc2NDpcdFx0bWVtY3B5KHN0YXRlLCBpb2FwaWMsIHNpemVvZihzdHJ1Y3Qga3ZtX2lvYXBpY19zdGF0ZSkpO1xuIDc2NTpcdFx0c3RhdGUtXHUwMDNlaXJyIFx1MDAyNj0gfmlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkO1xuIDc2NjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW9hcGljLVx1MDAzZWxvY2spO1xuIDc2NzpcdH1cbiA3Njg6XHRcbiA3Njk6XHR2b2lkIGt2bV9zZXRfaW9hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKVxuIDc3MDpcdHtcbiA3NzE6XHRcdHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBrdm0tXHUwMDNlYXJjaC52aW9hcGljO1xuIDc3MjpcdFxuIDc3MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlvYXBpYy1cdTAwM2Vsb2NrKTtcbiA3NzQ6XHRcdG1lbWNweShpb2FwaWMsIHN0YXRlLCBzaXplb2Yoc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUpKTtcbiA3NzU6XHRcdGlvYXBpYy1cdTAwM2VpcnIgPSAwO1xuIDc3NjpcdFx0aW9hcGljLVx1MDAzZWlycl9kZWxpdmVyZWQgPSAwO1xuIDc3NzpcdFx0a3ZtX21ha2Vfc2Nhbl9pb2FwaWNfcmVxdWVzdChrdm0pO1xuIDc3ODpcdFx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXHUwMDNlaXJyKTtcbiA3Nzk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlvYXBpYy1cdTAwM2Vsb2NrKTtcbiA3ODA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjY4CgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSU9BUElDIEVtdWxhdGlvbiBCdWcgRml4KioKCk9rYXksIEkmIzM5O3ZlIGdvdCBpdC4gYGt2bV9zZXRfaW9hcGljYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIGFuZCBpdCYjMzk7cyBuaWNlIHRvIHNlZSB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBvZiB0aGUgb3RoZXIgSU9BUElDIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgIGBrdm1faW9hcGljX3NldF9pcnFgCiogICBga3ZtX2lvYXBpY191cGRhdGVfZW9pYAoqICAgYGt2bV9zZXRfaW9hcGljYAoKQW5kIHRoZSByZWxldmFudCBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGR1cmluZyB0aGUgZnV6emluZzoKCiogICBgS1ZNYAoqICAgYEtWTV9JT0FQSUNgCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gSU9BUElDIGVtdWxhdGlvbiBidWcgd2l0aGluIEtWTS4gSXQmIzM5O3MgdG91Y2hpbmcgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYCB0byBjb3JyZWN0bHkgbWFuYWdlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZvciBib3RoIGVkZ2UgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGtpbmQgb2YgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJdCYjMzk7cyByZWFjaGFibGUsIGFuZCB0aGUgcG90ZW50aWFsIGZvciB1bmNvdmVyaW5nIHN1YnRsZSBpc3N1ZXMgaW4gdGhpcyBwYXJ0IG9mIEtWTSBpcyBoaWdoLgoKU28sIGhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZywgaW4gYSBudXRzaGVsbDogVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBpbnRlcnJ1cHQgc3RhdGUgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgdHJhY2tlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIGNvcmUsIHJlYWNoYWJsZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgKEtWTSksIG1ha2luZyBpdCBwcmltZSBmb3IgZnV6emluZy4gVGhlIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBrdm1fc2V0X2lvYXBpY2AuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JT0FQSUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faW9hcGljX3NldF9pcnEmIzM0OywKICAgICYjMzQ7a3ZtX2lvYXBpY191cGRhdGVfZW9pJiMzNDssCiAgICAmIzM0O2t2bV9zZXRfaW9hcGljJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgS1ZNIElPQVBJQyBlbXVsYXRpb24gd2hlcmUgYHJlbW90ZV9pcnJgIGFuZCBgaXJyX2RlbGl2ZXJlZGAgd2VyZSBub3QgY29ycmVjdGx5IHVwZGF0ZWQgZm9yIGVkZ2UgYW5kIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgKEtWTSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYW5kIGBrdm1fc2V0X2lvYXBpY2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU9BUElDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2lvYXBpY19zZXRfaXJxJiMzNDssCiAgICAmIzM0O2t2bV9pb2FwaWNfdXBkYXRlX2VvaSYjMzQ7LAogICAgJiMzNDtrdm1fc2V0X2lvYXBpYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEtWTSBJT0FQSUMgZW11bGF0aW9uIHdoZXJlIGByZW1vdGVfaXJyYCBhbmQgYGlycl9kZWxpdmVyZWRgIHdlcmUgbm90IGNvcnJlY3RseSB1cGRhdGVkIGZvciBlZGdlIGFuZCBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29tcG9uZW50IChLVk0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBga3ZtX3NldF9pb2FwaWNgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2I4OWM2ZjRkOTRlNDJlNmFmYjNiZThkNzUxYmY4NjZiYWE2NTU5ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE4OjU5OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jCmluZGV4IDc1NzY2N2ZiMmJmYTAuLjY3NmVmZmQ2NzRmOWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmMKQEAgLTIzMCwxMSAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsCiAJb2xkX2lyciA9IGlvYXBpYy0mZ3Q7aXJyOwogCWlvYXBpYy0mZ3Q7aXJyIHw9IG1hc2s7CiAJaWYgKGVkZ2UpIHsKLQkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAkJaWYgKG9sZF9pcnIgPT0gaW9hcGljLSZndDtpcnIpIHsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzazsKIAl9CiAKIAlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpOwpAQCAtNDkxLDcgJiM0Mzs0OTEsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpCiAJfSBlbHNlCiAJCXJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtJmd0O2t2bSwgTlVMTCwgJmFtcDtpcnFlKTsKIAotCWlmIChyZXQgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKJiM0MzsJaWYgKHJldCAmZ3Q7IDAgJmFtcDsmYW1wOyBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykKIAkJZW50cnktJmd0O2ZpZWxkcy5yZW1vdGVfaXJyID0gMTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA2ZmMzNGU5YmY4ZTFiLi44OWUzZjgyZTc1YjAxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTg2LDYgJiM0Mzs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2h5cGVydl9mZWF0dXJlcwogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X2lwaQogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaHlwZXJ2X3N2bV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoCiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvaW9hcGljX3N0YXRlX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2t2bV9jbG9ja190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni9rdm1fcHZfdGVzdAogVEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYva3ZtX2J1c2xvY2tfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRhMDI3NmExNTQyZmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTM5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YXBpYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOCQkxNgomIzQzOyNkZWZpbmUgVEVTVF9WRUNUT1IJCTB4NTAKJiM0MzsjZGVmaW5lIE5PX1NVQ0hfQVBJQ19JRAkJMHhmZQomIzQzOyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHCTAKJiM0MzsjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUcJMQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpcnFjaGlwLSZndDtjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDOwomIzQzOwlyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTsKJiM0MzsJaWYgKHIgJmFtcDsmYW1wOyBlcnJubyA9PSBFTlhJTykKJiM0MzsJCV9fVEVTVF9SRVFVSVJFKDAsICYjMzQ7SW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGUmIzM0Oyk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKCFyLCBLVk1fSU9DVExfRVJST1IoS1ZNX0dFVF9JUlFDSElQLCByKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcCkKJiM0Mzt7CiYjNDM7CWlycWNoaXAtJmd0O2NoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7CiYjNDM7CXZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCwKJiM0MzsJCQkgICAgIHUzMiBkZXN0X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID0KJiM0MzsJCVRFU1RfVkVDVE9SOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPQomIzQzOwkJZGVzdF9pZDsKJiM0MzsJaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwOwomIzQzOwlpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnRyaWdfbW9kZSA9CiYjNDM7CQlsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDoKJiM0MzsJCQkJICBURVNUX0lPQVBJQ19FREdFX1RSSUc7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7CiYjNDM7CWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiYjNDM7CiYjNDM7CXNldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0gewomIzQzOwkJLmlycSA9IFRFU1RfSU9BUElDX1BJTiwKJiM0MzsJCS5sZXZlbCA9IGxldmVsLAomIzQzOwl9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgJmFtcDtpcnEpOwomIzQzOwlyZXR1cm4gaXJxLnN0YXR1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7CiYjNDM7CiYjNDM7CWdldF9pb2FwaWModm0sICZhbXA7aXJxY2hpcCk7CiYjNDM7CVRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyICZhbXA7ICgxICZsdDsmbHQ7IFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleCYjMzQ7LAomIzQzOwkJICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwOwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzKCk7CiYjNDM7CXZtX2NyZWF0ZV9pcnFjaGlwKHZtKTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlnZXRfaW9hcGljKHZtLCAmYW1wO2lycWNoaXApOwomIzQzOwlURVNUX0FTU0VSVCghaXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5yZW1vdGVfaXJyLAomIzQzOwkJICAgICYjMzQ7S1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJiMzOTt0IGRlbGl2ZXJlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXU2NCBhcGljYmFzZTsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSgmYW1wO3ZjcHUsIE5VTEwpOwomIzQzOwlhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7CiYjNDM7CXZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSwKJiM0MzsJCSAgICAgYXBpY2Jhc2UgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpOwomIzQzOwl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9HRVRfTEFQSUMsICZhbXA7bGFwaWMpOwomIzQzOwkqKHUzMiAqKShsYXBpYy5yZWdzICYjNDM7IEFQSUNfU1BJVikgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKJiM0MzsJdmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCAmYW1wO2xhcGljKTsKJiM0MzsKJiM0MzsJc2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtJmd0O2lkKTsKJiM0MzsKJiM0MzsJc3RhdHVzID0ga3ZtX2lycV9saW5lX3N0YXR1cyh2bSwgMSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1cyAmZ3Q7IDAsCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkJiMzNDssIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTsKJiM0MzsJVEVTVF9BU1NFUlQoIXN0YXR1cywKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZCYjMzQ7LAomIzQzOwkJICAgIHN0YXR1cyk7CiYjNDM7CiYjNDM7CWFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpOwomIzQzOwomIzQzOwlrdm1fdm1fZnJlZSh2bSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKHZvaWQpCiYjNDM7ewomIzQzOwl0ZXN0X25vX3JlbW90ZV9pcnJfZm9yX3VuZGVsaXZlcmVkX2xldmVsX2ludGVycnVwdCgpOwomIzQzOwl0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MwoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBvZiBLVk0gSU9BUElDIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL2lvYXBpYy5jYCwgc3BlY2lmaWNhbGx5IGBpb2FwaWNfc2V0X2lycWAgYW5kIGBpb2FwaWNfc2VydmljZWAuIE15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzLCB3aGljaCBjb3VsZCBiZSBkZXRlY3RlZCBieSBLTVNBTi4KCkluIGBpb2FwaWNfc2V0X2lycWAsIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFyb3VuZCBgaW9hcGljLSZndDtpcnJfZGVsaXZlcmVkICZhbXA7PSB+bWFzaztgIGhhcyBiZWVuIG1vZGlmaWVkLCBhbmQgYSBjaGVjayBgaWYgKG9sZF9pcnIgPT0gaW9hcGljLSZndDtpcnIpYCBzZWVtcyB0byBoYXZlIGJlZW4gaW50cm9kdWNlZCBpbiBhIG1vcmUgbG9naWNhbCBwb3NpdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBlZGdlIHRyaWdnZXJlZCBjYXNlIG5vdy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIGNvbmNlcm4uIEhvd2V2ZXIsIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIHRoZSBpbnZvbHZlZCB2YXJpYWJsZXM6IGBvbGRfaXJyYCwgYGlvYXBpYy0mZ3Q7aXJyYCwgYW5kIGBtYXNrYCwgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoZXJlLiBXZSBhcmUgZGVhbGluZyB3aXRoIEtWTSBJT0FQSUMgc3RhdGUsIGRlYWxpbmcgd2l0aCBlZGdlL2xldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLgoKTW92aW5nIG9uIHRvIGBpb2FwaWNfc2VydmljZWAsIHRoZSBjb25kaXRpb25hbCBgcmV0YCBpbiBgaWYgKHJldCAmYW1wOyZhbXA7IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKWAgaGFzIGJlZW4gY2hhbmdlZCB0byBgcmV0ICZndDsgMGAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwbGFjZSB0byBkb3VibGUtY2hlY2suIEhvd2V2ZXIsIGFnYWluLCBgcmV0YCBpcyBhbiBgaW50YCwgYW5kIGBpcnFlYCBpcyBhIGBzdHJ1Y3Qga3ZtX2xhcGljX2lycWAuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSBhIHNtYWxsIGZpeCBpbiBsb2dpYywgdG8gYWRkcmVzcyBhIGNvcm5lciBjYXNlIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiBJJiMzOTttIHJlYXNvbmFibHkgY2VydGFpbiBpdCBpcyBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNgLiBUaGlzIGlzIGdvb2QsIGl0IHZhbGlkYXRlcyB0aGUgY2hhbmdlcy4KClRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBmb2N1cyBvbiBLVk0gSU9BUElDIHN0YXRlIGxvZ2ljLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgoqKk5lZWRzS01TQU4gPSBmYWxzZSoqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTguMzQ5NjE3NzcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5MTQ3MzkzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU9BUElDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2lvYXBpY19zZXRfaXJxXCIsXG4gICAgXCJrdm1faW9hcGljX3VwZGF0ZV9lb2lcIixcbiAgICBcImt2bV9zZXRfaW9hcGljXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGhhbmRsaW5nIGVkZ2UtdHJpZ2dlcmVkIGFuZCBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cyBpbiB0aGUgS1ZNIElPQVBJQyAoc3BlY2lmaWNhbGx5IHRoZSBgaXJyX2RlbGl2ZXJlZGAgYW5kIGByZW1vdGVfaXJyYCBmaWVsZHMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgc3RhdGUgbWFjaGluZSBsb2dpYyBmaXhlcyBmb3IgaW50ZXJydXB0IGRlbGl2ZXJ5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTguMzQ5NjIzOTcyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1Nzc2OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2I4OWM2ZjRkOTRlNDJlNmFmYjNiZThkNzUxYmY4NjZiYWE2NTU5ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxODo1OTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaW9hcGljLmMgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcXG5pbmRleCA3NTc2NjdmYjJiZmEwLi42NzZlZmZkNjc0ZjllIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xcbkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXFxuIFxcdG9sZF9pcnIgPSBpb2FwaWMtXFx1MDAzZWlycjtcXG4gXFx0aW9hcGljLVxcdTAwM2VpcnIgfD0gbWFzaztcXG4gXFx0aWYgKGVkZ2UpIHtcXG4tXFx0XFx0aW9hcGljLVxcdTAwM2VpcnJfZGVsaXZlcmVkIFxcdTAwMjY9IH5tYXNrO1xcbiBcXHRcXHRpZiAob2xkX2lyciA9PSBpb2FwaWMtXFx1MDAzZWlycikge1xcbiBcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXHRcXHRpb2FwaWMtXFx1MDAzZWlycl9kZWxpdmVyZWQgXFx1MDAyNj0gfm1hc2s7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxLCBsaW5lX3N0YXR1cyk7XFxuQEAgLTQ5MSw3ICs0OTEsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyZXQgPSBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoaW9hcGljLVxcdTAwM2Vrdm0sIE5VTEwsIFxcdTAwMjZpcnFlKTtcXG4gXFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi44OWUzZjgyZTc1YjAxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuQEAgLTg2LDYgKzg2LDcgQEAgVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfZmVhdHVyZXNcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfaXBpXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3N2bV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3RsYl9mbHVzaFxcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2lvYXBpY19zdGF0ZV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fcHZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYTAyNzZhMTU0MmZkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvaW9hcGljX3N0YXRlX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMTM5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJhcGljLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3V0aWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXFx0XFx0MTZcXG4rI2RlZmluZSBURVNUX1ZFQ1RPUlxcdFxcdDB4NTBcXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcXHRcXHQweGZlXFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXFx0MFxcbisjZGVmaW5lIFRFU1RfSU9BUElDX0xFVkVMX1RSSUdcXHQxXFxuK1xcbitzdGF0aWMgdm9pZCBnZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXFxuK3tcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRpcnFjaGlwLVxcdTAwM2VjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDO1xcbitcXHRyID0gX192bV9pb2N0bCh2bSwgS1ZNX0dFVF9JUlFDSElQLCBpcnFjaGlwKTtcXG4rXFx0aWYgKHIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5YSU8pXFxuK1xcdFxcdF9fVEVTVF9SRVFVSVJFKDAsIFxcXCJJbi1rZXJuZWwgSS9PIEFQSUMgbm90IGF2YWlsYWJsZVxcXCIpO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxcbit7XFxuK1xcdGlycWNoaXAtXFx1MDAzZWNoaXBfaWQgPSBLVk1fSVJRQ0hJUF9JT0FQSUM7XFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCxcXG4rXFx0XFx0XFx0ICAgICB1MzIgZGVzdF9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcXG4rXFxuK1xcdGdldF9pb2FwaWModm0sIFxcdTAwMjZpcnFjaGlwKTtcXG4rXFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID1cXG4rXFx0XFx0VEVTVF9WRUNUT1I7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9pZCA9XFxuK1xcdFxcdGRlc3RfaWQ7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcXG4rXFx0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy50cmlnX21vZGUgPVxcbitcXHRcXHRsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDpcXG4rXFx0XFx0XFx0XFx0ICBURVNUX0lPQVBJQ19FREdFX1RSSUc7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7XFxuK1xcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7XFxuK1xcbitcXHRzZXRfaW9hcGljKHZtLCBcXHUwMDI2aXJxY2hpcCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcXG4rXFx0XFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcXG4rXFx0XFx0LmxldmVsID0gbGV2ZWwsXFxuK1xcdH07XFxuK1xcbitcXHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXFx1MDAyNmlycSk7XFxuK1xcdHJldHVybiBpcnEuc3RhdHVzO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XFxuK1xcbitcXHRnZXRfaW9hcGljKHZtLCBcXHUwMDI2aXJxY2hpcCk7XFxuK1xcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgSU9BUElDIElSUiBmb3IgcGluICV1IHRvIGJlICV1LCBnb3QgMHgleFxcXCIsXFxuK1xcdFxcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzKCk7XFxuK1xcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcXG4rXFxuK1xcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIGZhaWxlZCBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFxcXCIsIHN0YXR1cyk7XFxuK1xcbitcXHRnZXRfaW9hcGljKHZtLCBcXHUwMDI2aXJxY2hpcCk7XFxuK1xcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXFxuK1xcdFxcdCAgICBcXFwiS1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJ3QgZGVsaXZlcmVkXFxcIik7XFxuK1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHU2NCBhcGljYmFzZTtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIE5VTEwpO1xcbitcXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XFxuK1xcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcXG4rXFx0XFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XFxuK1xcdHZjcHVfaW9jdGwodmNwdSwgS1ZNX0dFVF9MQVBJQywgXFx1MDAyNmxhcGljKTtcXG4rXFx0Kih1MzIgKikobGFwaWMucmVncyArIEFQSUNfU1BJVikgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDtcXG4rXFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcXHUwMDI2bGFwaWMpO1xcbitcXG4rXFx0c2V0X2lvYXBpY19lbnRyeSh2bSwgZmFsc2UsIHZjcHUtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXMgXFx1MDAzZSAwLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIGVkZ2UgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcXFwiLCBzdGF0dXMpO1xcbitcXG4rXFx0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XFxuK1xcbitcXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcXG4rXFx0VEVTVF9BU1NFUlQoIXN0YXR1cyxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBkdXBsaWNhdGUgZWRnZSBpbnRlcnJ1cHQgdG8gYmUgY29hbGVzY2VkLCBnb3QgJWRcXFwiLFxcbitcXHRcXHQgICAgc3RhdHVzKTtcXG4rXFxuK1xcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitpbnQgbWFpbih2b2lkKVxcbit7XFxuK1xcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XFxuK1xcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTkuNjE2MTA4MTEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODQ5Mzk1NzQxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU9BUElDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2lvYXBpY19zZXRfaXJxXCIsXG4gICAgXCJrdm1faW9hcGljX3VwZGF0ZV9lb2lcIixcbiAgICBcImt2bV9zZXRfaW9hcGljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2I4OWM2ZjRkOTRlNDJlNmFmYjNiZThkNzUxYmY4NjZiYWE2NTU5ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE4OjU5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5pbmRleCA3NTc2NjdmYjJiZmEwLi42NzZlZmZkNjc0ZjllIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vaW9hcGljLmNcbkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpcnEsXG4gXHRvbGRfaXJyID0gaW9hcGljLVx1MDAzZWlycjtcbiBcdGlvYXBpYy1cdTAwM2VpcnIgfD0gbWFzaztcbiBcdGlmIChlZGdlKSB7XG4tXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpIHtcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7XG4gXHR9XG4gXG4gXHRyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSwgbGluZV9zdGF0dXMpO1xuQEAgLTQ5MSw3ICs0OTEsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXG4gXHR9IGVsc2VcbiBcdFx0cmV0ID0ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy1cdTAwM2Vrdm0sIE5VTEwsIFx1MDAyNmlycWUpO1xuIFxuLVx0aWYgKHJldCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4rXHRpZiAocmV0IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylcbiBcdFx0ZW50cnktXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIgPSAxO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuaW5kZXggNmZjMzRlOWJmOGUxYi4uODllM2Y4MmU3NWIwMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbkBAIC04Niw2ICs4Niw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2ZlYXR1cmVzXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfaXBpXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfc3ZtX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl90bGJfZmx1c2hcbitURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2lvYXBpY19zdGF0ZV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fY2xvY2tfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX3B2X3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9idXNsb2NrX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYTAyNzZhMTU0MmZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L2lvYXBpY19zdGF0ZV90ZXN0LmNcbkBAIC0wLDAgKzEsMTM5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0cyBmb3IgaW4ta2VybmVsIEkvTyBBUElDIHN0YXRlLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFwiYXBpYy5oXCJcbisjaW5jbHVkZSBcImt2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuKyNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuK1xuKyNkZWZpbmUgVEVTVF9JT0FQSUNfUElOXHRcdDE2XG4rI2RlZmluZSBURVNUX1ZFQ1RPUlx0XHQweDUwXG4rI2RlZmluZSBOT19TVUNIX0FQSUNfSURcdFx0MHhmZVxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfRURHRV9UUklHXHQwXG4rI2RlZmluZSBURVNUX0lPQVBJQ19MRVZFTF9UUklHXHQxXG4rXG4rc3RhdGljIHZvaWQgZ2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuK3tcbitcdGludCByO1xuK1xuK1x0aXJxY2hpcC1cdTAwM2VjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDO1xuK1x0ciA9IF9fdm1faW9jdGwodm0sIEtWTV9HRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4rXHRpZiAociBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRU5YSU8pXG4rXHRcdF9fVEVTVF9SRVFVSVJFKDAsIFwiSW4ta2VybmVsIEkvTyBBUElDIG5vdCBhdmFpbGFibGVcIik7XG4rXG4rXHRURVNUX0FTU0VSVCghciwgS1ZNX0lPQ1RMX0VSUk9SKEtWTV9HRVRfSVJRQ0hJUCwgcikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycWNoaXAgKmlycWNoaXApXG4re1xuK1x0aXJxY2hpcC1cdTAwM2VjaGlwX2lkID0gS1ZNX0lSUUNISVBfSU9BUElDO1xuK1x0dm1faW9jdGwodm0sIEtWTV9TRVRfSVJRQ0hJUCwgaXJxY2hpcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfZW50cnkoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgbGV2ZWxfdHJpZ2dlcmVkLFxuK1x0XHRcdCAgICAgdTMyIGRlc3RfaWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudmVjdG9yID1cbitcdFx0VEVTVF9WRUNUT1I7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLmRlc3RfaWQgPVxuK1x0XHRkZXN0X2lkO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X21vZGUgPSAwO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy50cmlnX21vZGUgPVxuK1x0XHRsZXZlbF90cmlnZ2VyZWQgPyBURVNUX0lPQVBJQ19MRVZFTF9UUklHIDpcbitcdFx0XHRcdCAgVEVTVF9JT0FQSUNfRURHRV9UUklHO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5tYXNrID0gMDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lyciA9IDA7XG4rXG4rXHRzZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbit9XG4rXG4rc3RhdGljIGludCBrdm1faXJxX2xpbmVfc3RhdHVzKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbGV2ZWwpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxID0ge1xuK1x0XHQuaXJxID0gVEVTVF9JT0FQSUNfUElOLFxuK1x0XHQubGV2ZWwgPSBsZXZlbCxcbitcdH07XG4rXG4rXHR2bV9pb2N0bCh2bSwgS1ZNX0lSUV9MSU5FX1NUQVRVUywgXHUwMDI2aXJxKTtcbitcdHJldHVybiBpcnEuc3RhdHVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBhc3NlcnRfaW9hcGljX3Bpbl9pcnIoc3RydWN0IGt2bV92bSAqdm0sIGJvb2wgZXhwZWN0ZWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCEhKGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgVEVTVF9JT0FQSUNfUElOKSkgPT0gZXhwZWN0ZWQsXG4rXHRcdCAgICBcIkV4cGVjdGVkIElPQVBJQyBJUlIgZm9yIHBpbiAldSB0byBiZSAldSwgZ290IDB4JXhcIixcbitcdFx0ICAgIFRFU1RfSU9BUElDX1BJTiwgZXhwZWN0ZWQsIGlycWNoaXAuY2hpcC5pb2FwaWMuaXJyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2lycWNoaXAgaXJxY2hpcDtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lcygpO1xuK1x0dm1fY3JlYXRlX2lycWNoaXAodm0pO1xuK1xuK1x0c2V0X2lvYXBpY19lbnRyeSh2bSwgdHJ1ZSwgTk9fU1VDSF9BUElDX0lEKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzID09IC0xLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBmYWlsZWQgaW50ZXJydXB0IGRlbGl2ZXJ5LCBnb3QgJWRcIiwgc3RhdHVzKTtcbitcbitcdGdldF9pb2FwaWModm0sIFx1MDAyNmlycWNoaXApO1xuK1x0VEVTVF9BU1NFUlQoIWlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMucmVtb3RlX2lycixcbitcdFx0ICAgIFwiS1ZNIHNldCByZW1vdGVfaXJyIGZvciBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgdGhhdCB3YXNuJ3QgZGVsaXZlcmVkXCIpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHR1NjQgYXBpY2Jhc2U7XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBOVUxMKTtcbitcdGFwaWNiYXNlID0gdmNwdV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX0FQSUNCQVNFKTtcbitcdHZjcHVfc2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSxcbitcdFx0ICAgICBhcGljYmFzZSB8IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSk7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9HRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbitcdCoodTMyICopKGxhcGljLnJlZ3MgKyBBUElDX1NQSVYpIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7XG4rXHR2Y3B1X2lvY3RsKHZjcHUsIEtWTV9TRVRfTEFQSUMsIFx1MDAyNmxhcGljKTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIGZhbHNlLCB2Y3B1LVx1MDAzZWlkKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzIFx1MDAzZSAwLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBlZGdlIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRhc3NlcnRfaW9hcGljX3Bpbl9pcnIodm0sIGZhbHNlKTtcbitcbitcdHN0YXR1cyA9IGt2bV9pcnFfbGluZV9zdGF0dXModm0sIDEpO1xuK1x0VEVTVF9BU1NFUlQoIXN0YXR1cyxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZHVwbGljYXRlIGVkZ2UgaW50ZXJydXB0IHRvIGJlIGNvYWxlc2NlZCwgZ290ICVkXCIsXG4rXHRcdCAgICBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHRrdm1fdm1fZnJlZSh2bSk7XG4rfVxuK1xuK2ludCBtYWluKHZvaWQpXG4re1xuK1x0dGVzdF9ub19yZW1vdGVfaXJyX2Zvcl91bmRlbGl2ZXJlZF9sZXZlbF9pbnRlcnJ1cHQoKTtcbitcdHRlc3RfZHVwbGljYXRlX2VkZ2VfaW50ZXJydXB0X3ByZXNlcnZlc19kZWxpdmVyeV9zdGF0ZSgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTg6NTk6NTkuNjE2MTA5MzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1NzQxMTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLVk0gSU9BUElDIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGFyY2gveDg2L2t2bS9pb2FwaWMuY2AgYW5kIGFkZHMgYSB0ZXN0IGZvciBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBtb2RpZmljYXRpb25zIHRvIGBpb2FwaWNfc2V0X2lycWAgYW5kIGBpb2FwaWNfc2VydmljZWAsIHdoaWNoIGFyZSBjcml0aWNhbCBmb3IgZW11bGF0aW5nIHRoZSBJT0FQSUMgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGVzc2VudGlhbCBpbiBhbnkgS1ZNIHNldHVwLCB0aGV5J3JlIGRlZmluaXRlbHkgdXNlZCBpbiByZWFsIFZNcy5cblxuSSBzZWUgdGhhdCB0aGUgY2hhbmdlcyBpbiBgaW9hcGljX3NldF9pcnFgIGFyZSByZWxhdGVkIHRvIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAoSVJSKSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFuZCBjbGVhcmluZyB0aGUgYGlycl9kZWxpdmVyZWRgIGZsYWcuIFRoZSBtb2RpZmljYXRpb24gaW4gYGlvYXBpY19zZXJ2aWNlYCBub3cgY2hlY2tzIGlmIHRoZSByZXR1cm4gY29kZSBpcyBwb3NpdGl2ZSwgYW5kIGl0J3MgZGVhbGluZyB3aXRoIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFuZCBgcmVtb3RlX2lycmAuIEl0IHNlZW1zIGxpa2UgaXQncyByZWZpbmluZyBob3cgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIGhhbmRsZWQgb3IgYWNrbm93bGVkZ2VkIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgdkNQVSBpbnRlcmFjdHMgd2l0aCB0aGUgSU9BUElDIGFuZCBwb3RlbnRpYWxseSBob3cgaW50ZXJydXB0IGRlbGl2ZXJ5IGlzIG1hbmFnZWQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGludGVycnVwdCBsYXRlbmN5IG9yIGJlaGF2aW9yLlxuXG5HaXZlbiB0aGUgZmlsZSwgSSdtIHRoaW5raW5nIHRoZSBjb2RlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19LVk1gIGlzIGVuYWJsZWQsIGJ1dCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBkaXJlY3RvcnkgdG8gYmUgc3VyZS4gSXQncyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgaXQgaXMgZW5hYmxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDowNi42NzM1MjMzNjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MjQ0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9hcGljLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MTE9a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMjprdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEzLWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbi0tXFxuYXJjaC94ODYva3ZtL2xhcGljLmM9MTU0Nj1zdGF0aWMgdm9pZCBrdm1faW9hcGljX3NlbmRfZW9pKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIGludCB2ZWN0b3IpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNTQ5LVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjE1NTA6XFx0LyogRW9pIHRoZSBpb2FwaWMgb25seSBpZiB0aGUgaW9hcGljIGRvZXNuJ3Qgb3duIHRoZSB2ZWN0b3IuICovXFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMTU1MS1cXHRpZiAoIWt2bV9pb2FwaWNfaGFuZGxlc192ZWN0b3IoYXBpYywgdmVjdG9yKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MDYuNzE4NDUyNTU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMjMzNDQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gSU9BUElDIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBLVk0gSS9PIEFQSUMgaXMgc2V0IHVwLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXRzIGNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZCBieSBgQ09ORklHX0tWTV9JT0FQSUNgIGJlaW5nIGVuYWJsZWQuIE5hdHVyYWxseSwgdGhhdCdzIHVzdWFsbHkgc2VsZWN0ZWQgd2hlbiBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIHNlbGVjdGVkLiBUbyBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgbG9naWMgY29ycmVjdGx5LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEl0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBLVk0gY29uZmlndXJhdGlvbiBkZXRhaWxzIG9uIHg4Niwgc28gdGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDoxMC4zNTA3ODkwNTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMzk4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JT0FQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDoxMC4zOTUwMzE5NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ2MDEzMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIHRoZSBgS1ZNX0lPQVBJQ2Agc2VsZWN0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBLVk1fSU9BUElDYCBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGUgc2VsZWN0aW9uIG9mIGBLVk1fSU9BUElDYC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZsYWcgb3IgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBjaG9zZW4gb3IgZW5hYmxlZCB3aXRoaW4gdGhlIEtWTSBjb2RlYmFzZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgd2hlcmUgdGhlIG1hY3JvIGlzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSB0aGUgKmxvZ2ljKiB0aGF0IGRldGVybWluZXMgaXRzIHVzZSByZXNpZGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucywgY29uZmlndXJhdGlvbnMsIG9yIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB0aGF0IGxlYWQgdG8gYEtWTV9JT0FQSUNgIGJlaW5nIGFjdGl2ZS4gSXMgaXQgc3BlY2lmaWMgQ1BVIG1vZGVscz8gQXJlIHRoZXJlIHBhcnRpY3VsYXIgc3lzdGVtIGJvYXJkIGZlYXR1cmVzLCBCSU9TIHNldHRpbmdzLCBvciBvdGhlciBLVk0gYnVpbGQgb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBncmVwIHRvIGZpbmQgd2hlcmUgaXQncyB1c2VkIGFuZCB0aGVuIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYW5kIGxvZ2ljYWwgb3BlcmF0b3JzIHRoYXQgdWx0aW1hdGVseSBlbmFibGUgb3IgZGlzYWJsZSBpdC4gUGVyaGFwcyB0aGVyZSdzIGFuIGBpZmAgc3RhdGVtZW50IGJhc2VkIG9uIGEga2VybmVsIHBhcmFtZXRlciwgYSBoYXJkd2FyZSBmZWF0dXJlIGJpdCwgb3IgYSBLVk0gY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgdmlydHVhbGl6ZWQgaGFyZHdhcmUgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDoxMy44NDEwNDgwMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MjY4NTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBLVk1fSU9BUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjEzLjg5MjQ4MTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NTg3MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktWTV9JT0FQSUMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gaW1wbGVtZW50YXRpb24sIGxvY2F0ZWQgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBgS1ZNX0lPQVBJQ2Agb3B0aW9uLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGJlZm9yZSBwcm9jZWVkaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgYEtWTV9JT0FQSUNgIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIGhvdyB0aGlzIGFzcGVjdCBmdW5jdGlvbnMgd2l0aGluIEtWTSdzIGRlc2lnbi4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIGRvdWJsZS1jaGVjayB0aGF0IGZpcnN0LCBhbmQgdGhlbiBidWlsZCBvdXR3YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjE2LjY1ODM1NTg0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MzEzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX0lPQVBJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MTE9a3ZtLSQoQ09ORklHX1g4Nl82NCkgKz0gbW11L3RkcF9pdGVyLm8gbW11L3RkcF9tbXUub1xcbmFyY2gveDg2L2t2bS9NYWtlZmlsZToxMjprdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTEzLWt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSArPSBoeXBlcnYub1xcbi0tXFxuYXJjaC94ODYva3ZtL2k4MjU0LmgtMTItXFxuYXJjaC94ODYva3ZtL2k4MjU0Lmg6MTM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2k4MjU0LmgtMTQtc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUge1xcbi0tXFxuYXJjaC94ODYva3ZtL2k4MjU0Lmg9Njk9dm9pZCBrdm1fZnJlZV9waXQoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaDo3MDojZW5kaWYgLyogQ09ORklHX0tWTV9JT0FQSUMgKi9cXG5hcmNoL3g4Ni9rdm0vaTgyNTQuaC03MS1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC04LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaDo5OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xMC1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaD0xMj1zdHJ1Y3Qga3ZtX3ZjcHU7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oLTEzLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaDoxNDojZGVmaW5lIElPQVBJQ19OVU1fUElOUyAgS1ZNX0lPQVBJQ19OVU1fUElOU1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuaC0xNS0jZGVmaW5lIElPQVBJQ19WRVJTSU9OX0lEIDB4MTFcXHQvKiBJT0FQSUMgdmVyc2lvbiAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oPTExND12b2lkIGt2bV9pb2FwaWNfc2Nhbl9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oLTExNS1cXHRcXHRcXHQgICB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycyk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5oOjExNjojZW5kaWYgLyogQ09ORklHX0tWTV9JT0FQSUMgKi9cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTE3LVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jPTU5PWludCBrdm1fY3B1X2hhc19leHRpbnQoc3RydWN0IGt2bV92Y3B1ICp2KVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jLTgwLVxcbmFyY2gveDg2L2t2bS9pcnEuYzo4MTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtODItXFx0aWYgKHBpY19pbl9rZXJuZWwodi1cXHUwMDNla3ZtKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYz0xMjg9aW50IGt2bV9jcHVfZ2V0X2V4dGludChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMTQyLVxcbmFyY2gveDg2L2t2bS9pcnEuYzoxNDM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2lycS5jLTE0NC1cXHRpZiAocGljX2luX2tlcm5lbCh2LVxcdTAwM2Vrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jPTE3Nz12b2lkIF9fa3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0xNzktXFx0X19rdm1fbWlncmF0ZV9hcGljX3RpbWVyKHZjcHUpO1xcbmFyY2gveDg2L2t2bS9pcnEuYzoxODA6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2lycS5jLTE4MS1cXHRfX2t2bV9taWdyYXRlX3BpdF90aW1lcih2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYz0yOTY9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzA0LVxcdHN3aXRjaCAodWUtXFx1MDAzZXR5cGUpIHtcXG5hcmNoL3g4Ni9rdm0vaXJxLmM6MzA1OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9pcnEuYy0zMDYtXFx0Y2FzZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUDpcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy0zMTktXFx0XFx0Y2FzZSBLVk1fSVJRQ0hJUF9JT0FQSUM6XFxuYXJjaC94ODYva3ZtL2lycS5jOjMyMDpcXHRcXHRcXHRpZiAodWUtXFx1MDAzZXUuaXJxY2hpcC5waW4gXFx1MDAzZT0gS1ZNX0lPQVBJQ19OVU1fUElOUylcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzIxLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5jPTUzMz12b2lkIGt2bV9hcmNoX3VwZGF0ZV9pcnFmZF9yb3V0aW5nKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCxcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYy01NDgtXFxuYXJjaC94ODYva3ZtL2lycS5jOjU0OTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vaXJxLmMtNTUwLSNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcXFxcXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmgtMjAtXFxuYXJjaC94ODYva3ZtL2lycS5oOjIxOiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9pcnEuaC0yMi1cXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuaD03Nj1zdGF0aWMgaW5saW5lIGludCBpcnFjaGlwX2Z1bGwoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lycS5oLTgzLX1cXG5hcmNoL3g4Ni9rdm0vaXJxLmg6ODQ6I2Vsc2UgLyogQ09ORklHX0tWTV9JT0FQSUMgKi9cXG5hcmNoL3g4Ni9rdm0vaXJxLmgtODUtc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgaXJxY2hpcF9mdWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTE0MDA9c3RhdGljIGludCBfX2FwaWNfYWNjZXB0X2lycShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSxcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE0MjItXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MTQyMzojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNDI0LVxcdFxcdGlmIChydGNfc3RhdHVzKSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0xNTQ2PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfc2VuZF9lb2koc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IHZlY3RvcilcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTE1NzctXFxuYXJjaC94ODYva3ZtL2xhcGljLmM6MTU3ODojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0xNTc5LVxcdGlmIChhcGljX3Rlc3RfdmVjdG9yKHZlY3RvciwgYXBpYy1cXHUwMDNlcmVncyArIEFQSUNfVE1SKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jPTMzMDY9aW50IGt2bV9hcGljX3NldF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgKnMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0zMzM5LVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjMzNDA6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMzM0MS1cXHRpZiAoaW9hcGljX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbi0tXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg9MjI4PVRSQUNFX0VWRU5UKGt2bV9jcHVpZCxcXG4tLVxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTI3Mi1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoyNzM6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjc0LVRSQUNFX0VWRU5UKGt2bV9pb2FwaWNfc2V0X2lycSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz00NzY4PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDc3OS1cXHRjYXNlIEtWTV9DQVBfQ0xPQ0tTT1VSQ0U6XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ3ODA6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ3ODEtXFx0Y2FzZSBLVk1fQ0FQX1BJVDpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz03MjU4PWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy03MjYzLVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MjY0OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS94ODYuYy03MjY1LVxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzI5OC1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzI5OTojaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzMwMC1cXHRjYXNlIEtWTV9DUkVBVEVfSVJRQ0hJUDoge1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTExMDUwPXN0YXRpYyB2b2lkIHZjcHVfc2Nhbl9pb2FwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDYxLVxcdFxcdGt2bV9zY2FuX2lvYXBpY19yb3V0ZXModmNwdSwgdmNwdS1cXHUwMDNlYXJjaC5pb2FwaWNfaGFuZGxlZF92ZWN0b3JzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTEwNjI6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTExMDYzLVxcdGVsc2UgaWYgKGlvYXBpY19pbl9rZXJuZWwodmNwdS1cXHUwMDNla3ZtKSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMzQyNT12b2lkIGt2bV9hcmNoX3ByZV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzQzNi1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTM0Mzc6I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNDM4LVxcdGt2bV9mcmVlX3BpdChrdm0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzNDQ3PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM0NjYtXFx0a3ZtX2ZyZWVfbXNyX2ZpbHRlcihzcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGt2bS1cXHUwMDNlYXJjaC5tc3JfZmlsdGVyLCBcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1LCAxKSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzNDY3OiNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMzQ2OC1cXHRrdm1fcGljX2Rlc3Ryb3koa3ZtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MTYuNzEwNzkwNTIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTA1NjkxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSdtIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBgQ09ORklHX0tWTV9JT0FQSUNgIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIEknbSBpbnRlcmVzdGVkIGluLiBJICp0aGluayogaXQncyBzZWxlY3RlZCBzb21ld2hlcmUgYnkgYENPTkZJR19LVk1gLCB3aGljaCB3b3VsZCBtYWtlIHNlbnNlLi4uIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBiZWZvcmUgSSBtYWtlIGFueSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MTkuOTAxMzYxOTk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5MzY4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9JT0FQSUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MTkuOTQ5MjYxMDQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDU4NDc2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgTXkgV29yayBcdTAwMjYgRm9sbG93aW5nIFVwKipcblxuSG1tLCB3YXNuJ3QgSSBqdXN0IGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IGR1cGxpY2F0aW5nIGVmZm9ydC4gT2theSwgbGV0J3Mgc2VlLi4uSSB0aGluayBJIHJlbWVtYmVyIHdvcmtpbmcgd2l0aCB0aGUgSU9BUElDIHJlY2VudGx5LiBXaGVyZSB3YXMgdGhhdCBzZXR0aW5nIGRlZmluZWQ/IFJpZ2h0LCBpdCB3YXMgaW4gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHg4NiBLVk0gY29kZSwgc3BlY2lmaWNhbGx5IGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIExldCdzIG5hdmlnYXRlIHRoZXJlIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IGFscmVhZHkgYWRkcmVzc2VkIHdoYXRldmVyIHRhc2sgSSB3YXMganVzdCBwb25kZXJpbmcgdGhhdCBicm91Z2h0IHRoYXQgc2V0dGluZyB0byBtaW5kLiBJJ2xsIHNlYXJjaCBmb3IgYEtWTV9JT0FQSUNgIGFuZCBxdWlja2x5IGNvbmZpcm0gaXRzIHN0YXR1cy4gRG9uJ3Qgd2FudCB0byBzcGluIG15IHdoZWVscyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTYzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjIzLjM1NTExMTA3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbiAxNjE6XFx0XFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDE2MjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTYzOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUFJFUEFSRVxcbiAxNjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuIDE2NTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE2NjpcXHRcXHRoZWxwXFxuIDE2NzpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcXG4gMTY4OlxcdFxcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG4gMTY5OlxcdFxcdCAgRW5jcnlwdGVkIFN0YXRlIChTRVYtRVMpLCBhbmQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE3MDpcXHRcXHQgIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSB0ZWNobm9sb2dpZXMgb24gQU1EIHByb2Nlc3NvcnMuXFxuIDE3MTpcXHRcXG4gMTcyOlxcdGNvbmZpZyBLVk1fSU9BUElDXFxuIDE3MzpcXHRcXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4gMTc0OlxcdFxcdGRlZmF1bHQgeVxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE3NjpcXHRcXHRoZWxwXFxuIDE3NzpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIGFuIEkvTyBBUElDLCBQSUMsIGFuZCBQSVQsIGkuZS5cXG4gMTc4OlxcdFxcdCAgZm9yIGZ1bGwgaW4ta2VybmVsIEFQSUMgZW11bGF0aW9uLlxcbiAxNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjIzLjM1NTE3Nzk0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2NDQ3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIE1hemUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgZGVmYXVsdCB5YCBhbmQsIGNydWNpYWxseSwgYGRlcGVuZHMgb24gS1ZNX1g4NmAuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb3B0aW9uIEknbSBsb29raW5nIGF0LCBsZXQncyBqdXN0IGNhbGwgaXQgXCJ0aGlzIHNldHRpbmcsXCIgZGVmYXVsdHMgdG8gJ3llcycgYnV0IG9ubHkgKmlmKiBgS1ZNX1g4NmAgaXMgYWxzbyBlbmFibGVkLiBGaW5lLCBzbyBub3cgSSdtIHRoaW5raW5nLCBgS1ZNYCBhbmQgYEtWTV9YODZgIGFyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9mIGludGVyZXN0IGhlcmUuIFdoZXJlIGlzIGBLVk1fWDg2YCBkZWZpbmVkLCBleGFjdGx5PyBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIGl0cyBkZWZpbml0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgYEtWTV9YODZgIGRlZmluaXRpb24gd291bGQgYmUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBLVk1fWDg2YCBjb25maWcgaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MjcuMjUxNjI3NTQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUzMTMzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1g4NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjI3LjI5NTE2MTgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ1Mjg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBxdWljayBydW5kb3duIG9mIHRoZXNlIGNoYW5nZXMsIHRoaW5raW5nIHRocm91Z2ggaXQgbGlrZSBJIHdvdWxkIG9uIHRoZSBmbHk6XG5cbioqS1ZNIFBhdGNoIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYXJvdW5kIGBLVk1gLiBHb3QgaXQuIExldCdzIHNlZSB3aGF0IHRoZSBtYWluIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUuIExvb2tzIGxpa2UgdGhlIHBhdGNoIGhpdHMgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYC4gT2theSwgYW5kIHRoZXkgYXJlIGJvdGggc3RhdGljLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZzsgbWVhbnMgdGhleSdyZSBzY29wZWQgbG9jYWxseSB3aXRoaW4gdGhlaXIgZmlsZSwgd2hpY2ggZ2l2ZXMgdXMgYSB0aWdodGVyIGZvY3VzLiBOb3cgdGhlIGNydWNpYWwgc3RlcCBpcyB0byB0cmFjZSBiYWNrLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmNhbGxpbmcqIHRob3NlIGZ1bmN0aW9ucy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGp1aWNlIG9mIHRoZSBjaGFuZ2UgaXMgZ29pbmcgdG8gYmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MzEuNDI5NjkzMTA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYyMjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWNfc2V0X2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz0xNjU9c3RhdGljIHZvaWQgaW9hcGljX2xhenlfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTE4Ni1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MTg3OnN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMTg4LVxcdFxcdGludCBpcnFfbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQyLW91dDpcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjQzOlxcdHRyYWNlX2t2bV9pb2FwaWNfc2V0X2lycShlbnRyeS5iaXRzLCBpcnEsIHJldCA9PSAwKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9MjQ3PXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfaW5qZWN0X2FsbChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBsb25nIGlycilcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNTItXFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIFxcdTAwMjZpcnIsIElPQVBJQ19OVU1fUElOUylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjUzOlxcdFxcdGlvYXBpY19zZXRfaXJxKGlvYXBpYywgaWR4LCAxLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU0LVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTQ1Nz1zdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDk5LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1MDA6aW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MDEtXFx0XFx0ICAgICAgIGludCBpcnFfc291cmNlX2lkLCBpbnQgbGV2ZWwsIGJvb2wgbGluZV9zdGF0dXMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTEyLVxcdFxcdFxcdFxcdFxcdCBpcnFfc291cmNlX2lkLCBsZXZlbCk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUxMzpcXHRyZXQgPSBpb2FwaWNfc2V0X2lycShpb2FwaWMsIGlycSwgaXJxX2xldmVsLCBsaW5lX3N0YXR1cyk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxNC1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuaD0xMDg9dm9pZCBrdm1faW9hcGljX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmg6MTA5OmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmgtMTEwLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9pcnEuYz0yOTY9aW50IGt2bV9zZXRfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaXJxLmMtMzIxLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmFyY2gveDg2L2t2bS9pcnEuYzozMjI6XFx0XFx0XFx0ZS1cXHUwMDNlc2V0ID0ga3ZtX2lvYXBpY19zZXRfaXJxO1xcbmFyY2gveDg2L2t2bS9pcnEuYy0zMjMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0yMjg9VFJBQ0VfRVZFTlQoa3ZtX2NwdWlkLFxcbi0tXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjczLSNpZmRlZiBDT05GSUdfS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS90cmFjZS5oOjI3NDpUUkFDRV9FVkVOVChrdm1faW9hcGljX3NldF9pcnEsXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMjc1LVxcdCAgICBUUF9QUk9UTyhfX3U2NCBlLCBpbnQgcGluLCBib29sIGNvYWxlc2NlZCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjMxLjQ3NDMyMTI4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2NTY2NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSdzIElPQVBJQyBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBga3ZtX2lvYXBpY19zZXRfaXJxYCBmdW5jdGlvbi4gSXQncyB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBlbnRyeSBwb2ludCwgc28gdGhhdCdzIHdoZXJlIHRoZSBleHRlcm5hbCB3b3JsZCBpbnRlcmFjdHMgd2l0aCB0aGUgSU9BUElDIGludGVycnVwdCBzZXR1cCB3aXRoaW4gS1ZNLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgd2hhdCdzIGhhcHBlbmluZyBpbnRlcm5hbGx5LCBhbmQgc3BlY2lmaWNhbGx5LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGVudHJ5IHBvaW50IGNvbm5lY3RzIHRvIHRoZSBvdmVyYWxsIGludGVycnVwdCBzZXJ2aWNpbmcgbWVjaGFuaXNtLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYGlvYXBpY19zZXJ2aWNlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgZnJvbSB0aGlzIGVudHJ5IHBvaW50IHRvIGludGVycnVwdCBkZWxpdmVyeTsgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBpbnRlcnJ1cHQgcmVxdWVzdHMgYXJlIHJlY2VpdmVkLCBwcm9jZXNzZWQsIGFuZCB1bHRpbWF0ZWx5IHJvdXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDozNC4zMTA4OTAyNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODUxODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvYXBpY19zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jLTM2LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzozNzpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICp2aW9hcGljLCBpbnQgaXJxLFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zOC1cXHRcXHRib29sIGxpbmVfc3RhdHVzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0xODc9c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTIzOS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjQwOlxcdHJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxLCBsaW5lX3N0YXR1cyk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0MS1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz0zMzE9c3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2luZGlyZWN0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHUzMiB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDE2LVxcdFxcdFxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NDE3OlxcdFxcdFxcdFxcdGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNDE4LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy00NTYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjQ1NzpzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGJvb2wgbGluZV9zdGF0dXMpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ1OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM9NTIwPXN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MzItXFx0XFx0aWYgKGlvYXBpYy1cXHUwMDNlaXJyIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaSkgXFx1MDAyNlxcdTAwMjYgIWVudC1cXHUwMDNlZmllbGRzLnJlbW90ZV9pcnIpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzMzpcXHRcXHRcXHRpb2FwaWNfc2VydmljZShpb2FwaWMsIGksIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTM0LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01Mzk9c3RhdGljIHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTc4LVxcdFxcdH0gZWxzZSB7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjU3OTpcXHRcXHRcXHRpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbiwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01ODAtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDozNC4zNTg3NDY3NTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NTAxNzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpb2FwaWNfc2VydmljZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW9hcGljX3NlcnZpY2VgLiBJIHNlZSBpdCdzIGEgY2VudHJhbCBmdW5jdGlvbiwgYW5kIHRoZSBjb2RlIHNob3dzIGl0IGdldHMgY2FsbGVkIGZyb20gYSBmZXcgaW1wb3J0YW50IHBsYWNlczogYGlvYXBpY19zZXRfaXJxYCwgd2hpY2ggSSBrbm93IGhhbmRsZXMgaW50ZXJydXB0IHJlcXVlc3RzLCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCB3aGljaCBzb3VuZHMgbGlrZSBpdCBtYW5hZ2VzIG1lbW9yeSBpbmRpcmVjdCB3cml0ZXMsIGFuZCB0aGVuIGBrdm1faW9hcGljX2VvaV9pbmplY3Rfd29ya2AgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYCwgd2hpY2ggYXJlIGNsZWFybHkgS1ZNLXNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIEVuZC1vZi1JbnRlcnJ1cHQgKEVPSSkgaGFuZGxpbmcuIFRoYXQncyBhIHByZXR0eSBkaXZlcnNlIHNldCBvZiBjYWxsIHNpdGVzLCB3aGljaCBtZWFucyBgaW9hcGljX3NlcnZpY2VgIGlzIHByb2JhYmx5IG9yY2hlc3RyYXRpbmcgc29tZSBjb3JlIGxvZ2ljIGFyb3VuZCB0aGUgSS9PIEFQSUMncyBiZWhhdmlvci5cblxuTm93LCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMgbWVhbiB0aGV5IGFyZSBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEl0J3MgdGltZSB0byBmaW5kIG91dCB3aGF0IHVzZXMgaXQgYW5kIGhvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDozOC4wMzM3Njc1MzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjA3NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvYXBpY193cml0ZV9pbmRpcmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz0zMTQ9dm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbixcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0zMzAtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjMzMTpzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbClcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMzMyLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz02NTQ9c3RhdGljIGludCBpb2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLFxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY4NS1cXHRjYXNlIElPQVBJQ19SRUdfV0lORE9XOlxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo2ODY6XFx0XFx0aW9hcGljX3dyaXRlX2luZGlyZWN0KGlvYXBpYywgZGF0YSk7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY4Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6MzguMDc3OTgwMTU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDU5NzEwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkFuYWx5emluZyB0aGUgSU9BUElDIE1NSU8gV3JpdGUgSGFuZGxlcioqXG5cblJpZ2h0LCBgaW9hcGljX21taW9fd3JpdGVgLiBUaGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0J3MgbGlrZWx5IGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBtb2R1bGUuIEFuZCBpdCdzIGNsZWFybHkgYW4gTU1JTyBoYW5kbGVyLCBtZWFuaW5nIGl0J3MgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIE1lbW9yeS1NYXBwZWQgSS9PIG9wZXJhdGlvbnMgZm9yIHRoZSBJT0FQSUMuIFRoYXQncyBnb29kLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGl0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQncyAqdXNlZCouIExldCdzIGdvIGFuZCBleGFtaW5lIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYxMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjQxLjIyMzk1MzQwMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyODIzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz01MjA9c3RhdGljIHZvaWQga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUzOC0jZGVmaW5lIElPQVBJQ19TVUNDRVNTSVZFX0lSUV9NQVhfQ09VTlQgMTAwMDBcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTM5OnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaV9vbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01NDAtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz01ODY9dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTU5Ny1cXHRcXHRcXHRjb250aW51ZTtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTk4OlxcdFxcdGt2bV9pb2FwaWNfdXBkYXRlX2VvaV9vbmUodmNwdSwgaW9hcGljLCB0cmlnZ2VyX21vZGUsIGkpO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01OTktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo0MS4yNjkyMzk0MzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4NjIzMTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIElPQVBJQyBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW9hcGljLmNgLCBhbmQgSSd2ZSBmbGFnZ2VkIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFzIGEgZnVuY3Rpb24gb2YgaW50ZXJlc3QgYmVjYXVzZSBpdCdzIG5vbi1zdGF0aWMuIFRoZSBrZXkgaGVyZSBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIG9yIGFyZWFzIHdoZXJlIHN0YXRlIGNoYW5nZXMgbWlnaHQgb2NjdXIgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgc2VlIHRoYXQgYGt2bV9pb2FwaWNfc2V0X2lycWAgaXMgYWxzbyBub24tc3RhdGljLCBzbyB0aG9zZSB0d28gZGVmaW5pdGVseSB3YXJyYW50IGEgY2xvc2VyIGxvb2suIEkgYWxzbyByZWNhbGwgdGhhdCBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCB3aGljaCBpbXBsaWVzIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLCBhbmQgdGh1cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBjYXJlZnVsbHkgZXhhbWluZSBib3RoIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzaGFyZWQgZGF0YSBvciByZXNvdXJjZXMgdGhleSBtaWdodCBtYW5pcHVsYXRlLiBJdCB3b3VsZCBiZSBoZWxwZnVsIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSwganVzdCBpbiBjYXNlIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgc291cmNlcyBvZiBjb25jdXJyZW5jeSBvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTU2LCJPdXRwdXRUb2tlbnMiOjYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjQ1LjY1NTQ3MjY0OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyMTI2OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2EtejAtOV9dKyApK2t2bV9pb2FwaWNfW2EtejAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmM9MTg3PXN0YXRpYyBpbnQgaW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgaW50IGlycSxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy0yNDYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjI0NzpzdGF0aWMgdm9pZCBrdm1faW9hcGljX2luamVjdF9hbGwoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdW5zaWduZWQgbG9uZyBpcnIpXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0OC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjU4LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzoyNTk6dm9pZCBrdm1faW9hcGljX3NjYW5fZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyAqaW9hcGljX2hhbmRsZWRfdmVjdG9ycylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz00NTc9c3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTQ5OS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTAwOmludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTAxLVxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTUxOS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6NTIwOnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTIxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01MzgtI2RlZmluZSBJT0FQSUNfU1VDQ0VTU0lWRV9JUlFfTUFYX0NPVU5UIDEwMDAwXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjUzOTpzdGF0aWMgdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTQwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNTg1LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo1ODY6dm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy01ODcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTY1ND1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNjk1LVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo2OTY6c3RhdGljIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02OTcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03MTYtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcxNzppbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzE4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NDMtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjc0NDp2b2lkIGt2bV9pb2FwaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc0NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjQ1Ljk3NzYwMzkyNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDQyODM0MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgSU9BUElDIGZ1bmN0aW9ucy4gSSBzZWUgd2UgaGF2ZTogYGt2bV9pb2FwaWNfc2Nhbl9lbnRyeWAsIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCwgYGt2bV9pb2FwaWNfaW5pdGAsIGFuZCBga3ZtX2lvYXBpY19kZXN0cm95YC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGBrdm1faW9hcGljX3NldF9pcnFgIGFuZCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBsb29rIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIFRoZXkgc2VlbSB0byBiZSBrZXkgdG8gdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuQWhhLCBga3ZtX2lvYXBpY19zZXRfaXJxYCBpcyB0aGUgb25lIHRoYXQgZGlyZWN0bHkgaW52b2tlcyBgaW9hcGljX3NldF9pcnFgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2guIExldCdzIGRpZyBpbnRvIGBrdm1faW9hcGljX3NldF9pcnFgIHRoZW47IGl0IHNlZW1zIHRvIGJlIGFuIGVzc2VudGlhbCBlbnRyeSBwb2ludCBmb3IgSVJRIHJvdXRpbmcsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbk5vdywgbGV0J3Mgc2Vl4oCmIGBpb2FwaWNfc2VydmljZWAgaXMgY2FsbGVkIGJ5IGBpb2FwaWNfd3JpdGVfaW5kaXJlY3RgLiBBbmQgdGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBpb2FwaWNfbW1pb193cml0ZWAuIEludGVyZXN0aW5nLiBgaW9hcGljX21taW9fd3JpdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBvZnRlbiBtZWFucyBpdCdzIGludGVybmFsIHRvIGEgbW9kdWxlLiBIb3dldmVyLCBpdCdzIGFsc28gYW4gTU1JTyBoYW5kbGVyLCBzbyBpdCBtdXN0IGJlIHJlZ2lzdGVyZWQgc29tZXdoZXJlLiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBjYXNlLlxuXG5ZZXAsIGhlcmUgaXQgaXM6IGBrdm1faW9fZGV2aWNlX29wcyBpb2FwaWNfbW1pb19vcHNgLiBJdCdzIHJlZ2lzdGVyZWQhIE9rYXksIGxldCdzIG5vdyB1bmRlcnN0YW5kIGBpb2FwaWNfbW1pb193cml0ZWAgdGhvcm91Z2hseTsgdGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgaG93IE1NSU8gYWNjZXNzIHRvIHRoZSBJT0FQSUMgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6NTEuNDIwNDQwNDI5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgyMDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2FwaWNfbW1pb193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jPTYxND1zdGF0aWMgaW50IGlvYXBpY19tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyxcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy02NTMtXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjY1NDpzdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTY1NS1cXHRcXHRcXHRcXHQgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKVxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jPTcxMj1zdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvYXBpY19tbWlvX29wcyA9IHtcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzEzLVxcdC5yZWFkICAgICA9IGlvYXBpY19tbWlvX3JlYWQsXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jOjcxNDpcXHQud3JpdGUgICAgPSBpb2FwaWNfbW1pb193cml0ZSxcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtNzE1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAwOjUxLjQ2MzI2MjUxNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM1NDc0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT0FQSUMgRnVuY3Rpb24gQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBJT0FQSUMgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmUgdG8gdXNlIGFzIGEgZm9jdXMgc3ltYm9sLiBgaW9hcGljX21taW9fd3JpdGVgIGlzIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgcnVsZXMgaXQgb3V0LiBObyBnb29kIGZvciBhIHN5bWJvbCBpZiBpdCdzIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCwgaG9sZCBvbiwgaXQgc2VlbXMgYGt2bV9pb2FwaWNfc2V0X2lycWAgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgIGFyZSBub24tc3RhdGljIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGBpb2FwaWNfc2V0X2lycWAgaXMgYWxzbyBjYWxsZWQgYnkgYGt2bV9pb2FwaWNfaW5qZWN0X2FsbGAsIHdoaWNoLCB1bmZvcnR1bmF0ZWx5LCAqaXMqIHN0YXRpYy4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3MgYSBiaXQuIFNvLCBpZiBJIGNhbid0IGRpcmVjdGx5IHRhcmdldCBgaW9hcGljX3NldF9pcnFgIGR1ZSB0byBpdHMgc3RhdGljIGNhbGxlciwgdGhlIGZvY3VzIHdpbGwgbmVlZCB0byBzaGlmdC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGV4YWN0bHkgKndobyogaXMgY2FsbGluZyBga3ZtX2lvYXBpY19pbmplY3RfYWxsYCwgYXMgdGhhdCBtaWdodCByZXZlYWwgYSBiZXR0ZXIgZW50cnkgcG9pbnQgb3IgcGF0aCB0byB0aGUgbG9naWMgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY3NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo1NS4yOTg3Mzk2ODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjczMTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faW9hcGljX2luamVjdF9hbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9pb2FwaWMuYz0xODc9c3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxcbi0tXFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTI0Ni1cXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmM6MjQ3OnN0YXRpYyB2b2lkIGt2bV9pb2FwaWNfaW5qZWN0X2FsbChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBsb25nIGlycilcXG5hcmNoL3g4Ni9rdm0vaW9hcGljLmMtMjQ4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYz03Njk9dm9pZCBrdm1fc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9hcGljX3N0YXRlICpzdGF0ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9pb2FwaWMuYy03NzctXFx0a3ZtX21ha2Vfc2Nhbl9pb2FwaWNfcmVxdWVzdChrdm0pO1xcbmFyY2gveDg2L2t2bS9pb2FwaWMuYzo3Nzg6XFx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXFx1MDAzZWlycik7XFxuYXJjaC94ODYva3ZtL2lvYXBpYy5jLTc3OS1cXHRzcGluX3VubG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDA6NTUuNjk1NDc4Nzg2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTU5MjQzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS1ZNIElPQVBJQyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBga3ZtX3NldF9pb2FwaWNgIGlzbid0IHN0YXRpYywgYW5kIGl0IGNhbGxzIGBrdm1faW9hcGljX2luamVjdF9hbGxgLiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciBteSBmb2NhbCBwb2ludCBpbiB0aGlzIGFuYWx5c2lzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBrdm1faW9hcGljX3NldF9pcnFgLCBga3ZtX2lvYXBpY191cGRhdGVfZW9pYCBhbmQgYGt2bV9zZXRfaW9hcGljYCBhbHNvIG1ha2UgZ29vZCBmb2N1cyBzeW1ib2xzLCBnaXZlbiB0aGF0IHRoZXkgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZSBJJ20gbW9kaWZ5aW5nLlxuXG5Ob3csIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gSSBzZWUgYEtWTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtLCBhbmQgYEtWTV9YODZgIGFzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb25lLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGBLVk1gIGlzIGEgdHJpc3RhdGUsIHdoaWxlIGBLVk1fWDg2YCBpcyBhIHN0YW5kYXJkIGNvbmZpZz8gVGhhdCdzIGEgYml0IHVudXN1YWwsIGJ1dCBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBvbmUgZm9yIGVuYWJsaW5nIEtWTSBmdW5jdGlvbmFsaXR5LCBzbyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo1OS45NTE0MDU3NTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODgzNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMDo1OS45OTQzMDE4MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyOTkyNDM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyBgS1ZNYC4gR290IGl0LiBGaXJzdCB0aG91Z2h0OiBgS1ZNYCBpbXBsaWVzIGNvbmZpZ3VyYXRpb24sIG5hdHVyYWxseS4gQnV0IGhvbGQgb24sIGxldCdzIG5vdCBqdW1wIHRoZSBndW4uIFdlIGFsbCBrbm93IGBLVk1gIGlzIGJ1aWx0IG9uIGEgc29saWQgZm91bmRhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgb2YgdGhlIHVuZGVybHlpbmcgYFZJUlRVQUxJWkFUSU9OYCBpbmZyYXN0cnVjdHVyZS4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBzcGVjaWZpYyBgS1ZNYCBzZXR0aW5ncywgSSByZWFsbHkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IHRyZWUuIFRpbWUgdG8gaW52ZXN0aWdhdGUgYEtWTWAncyBkZXBlbmRlbmNpZXMgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDE6MDMuNjI0MjI4ODE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBLVk1cXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZVxcbiAgNTc6XFx0XFx0ICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnRcXG4gIDU4OlxcdFxcdCAgcHJvY2Vzc29yIGVxdWlwcGVkIHdpdGggdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gWW91IHdpbGwgYWxzb1xcbiAgNTk6XFx0XFx0ICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgdGhyb3VnaFxcbiAgNjI6XFx0XFx0ICBhIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBuYW1lZCAvZGV2L2t2bS5cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDY1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBLVk1fV0VSUk9SXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjAzLjYyNDMwOTY1NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjgyNDc3NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBhbmQgSU9BUElDIENvbmZpZ3VyYXRpb246IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBgS1ZNYCBjb25maWd1cmF0aW9uLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBXZSBrbm93IHRoYXQgYEtWTWAgcmVsaWVzIG9uIGBYODZfTE9DQUxfQVBJQ2AsIGFuZCBgS1ZNYCBpcyBuZXN0ZWQgd2l0aGluIGBpZiBWSVJUVUFMSVpBVElPTmAsIHNvIHRoYXQncyB0aGUgYmFzZS4gU2VlbXMgbGlrZSBgS1ZNYCBpcyB0aGUgY29uZmlnIHdlJ3JlIGxvb2tpbmcgZm9yLCBnb29kIHRvIG5haWwgdGhhdCBkb3duLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSBpZiBgS1ZNX0lPQVBJQ2AgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0J3MgYGRlZmF1bHQgeWAgYW5kIGRlcGVuZHMgb24gYEtWTV9YODZgLiBXaGljaCBtZWFucyB0aGF0IGlmIGBLVk1gIGlzIGFjdGl2ZSwgdGhlbiBgS1ZNX0lPQVBJQ2Agc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gSG93ZXZlciwgSSBtaWdodCBzdGlsbCB3YW50IHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBib3RoIGBLVk1gIGFuZCBgS1ZNX0lPQVBJQ2AgaW4gdGhlIGNvbmZpZyBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgc2V0dXAuIEl0IGFkZHMgYSBsYXllciBvZiBjbGFyaXR5LlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIGtleSBmdW5jdGlvbnMgYWdhaW4uIEknbSBmb2N1c2luZyBvbiB0aG9zZSB0aGF0IGFyZSBlbnRyeSBwb2ludHMsIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgbGlrZWx5IHRvIGNhbGwuIFdlJ3ZlIGdvdDogYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC4gQXJlIHRoZXJlIGFueSBvdGhlcnMgdGhhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50P1xuXG5BIGJpdCBtb3JlIGRpZ2dpbmcgc2hvd3MgbWUgdGhhdCBgaW9hcGljX3NldF9pcnFgIGlzIGNhbGxlZCBieSBga3ZtX2lvYXBpY19zZXRfaXJxYCBhbmQgYGt2bV9pb2FwaWNfaW5qZWN0X2FsbGAsIGFuZCBgaW9hcGljX3NlcnZpY2VgIGlzIGNhbGxlZCBieSBgaW9hcGljX3NldF9pcnFgLCBgaW9hcGljX3dyaXRlX2luZGlyZWN0YCwgYGt2bV9pb2FwaWNfZW9pX2luamVjdF93b3JrYCwgYW5kIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lfb25lYC4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIG1vc3QgY29uY2VybmVkIHdpdGggYXJlOiBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGBrdm1fc2V0X2lvYXBpY2AsIGFuZCBga3ZtX2lvYXBpY19lb2lfaW5qZWN0X3dvcmtgIChldmVuIHRob3VnaCB0aGF0IGxhc3Qgb25lIGlzIGEgd29ya3F1ZXVlIGNhbGxiYWNrLCBzbyBub3QgZGlyZWN0bHkgY2FsbGFibGUgYnkgZXh0ZXJuYWwgY29kZSkuXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1faW9hcGljX3NldF9pcnFgIGluIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU3OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjEwLjkwNjc4OTkyN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDk1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDk1OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VmaWVsZHMucmVtb3RlX2lyciA9IDE7XFxuIDQ5NjpcXHRcXG4gNDk3OlxcdFxcdHJldHVybiByZXQ7XFxuIDQ5ODpcXHR9XFxuIDQ5OTpcXHRcXG4gNTAwOlxcdGludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIHN0cnVjdCBrdm0gKmt2bSxcXG4gNTAxOlxcdFxcdFxcdCAgICAgICBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGxldmVsLCBib29sIGxpbmVfc3RhdHVzKVxcbiA1MDI6XFx0e1xcbiA1MDM6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA1MDQ6XFx0XFx0aW50IGlycSA9IGUtXFx1MDAzZWlycWNoaXAucGluO1xcbiA1MDU6XFx0XFx0aW50IHJldCwgaXJxX2xldmVsO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGlycSBcXHUwMDNjIDAgfHwgaXJxIFxcdTAwM2U9IElPQVBJQ19OVU1fUElOUykpXFxuIDUwODpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDUwOTpcXHRcXG4gNTEwOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNTExOlxcdFxcdGlycV9sZXZlbCA9IF9fa3ZtX2lycV9saW5lX3N0YXRlKFxcdTAwMjZpb2FwaWMtXFx1MDAzZWlycV9zdGF0ZXNbaXJxXSxcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdFxcdCBpcnFfc291cmNlX2lkLCBsZXZlbCk7XFxuIDUxMzpcXHRcXHRyZXQgPSBpb2FwaWNfc2V0X2lycShpb2FwaWMsIGlycSwgaXJxX2xldmVsLCBsaW5lX3N0YXR1cyk7XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpb2FwaWMtXFx1MDAzZWxvY2spO1xcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1MTg6XFx0fVxcbiA1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjEwLjkwNjg4MTE0N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYyNjU5ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqUmVmbGVjdGluZyBvbiBJT0FQSUMgSW50ZXJydXB0IEhhbmRsaW5nKipcblxuUmlnaHQsIGBrdm1faW9hcGljX3NldF9pcnFgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gdG8gemVybyBpbiBvbi4gSXQncyB0aGUgY29yZSBvZiBob3cgd2UncmUgbWFuYWdpbmcgYW5kIGNvbmZpZ3VyaW5nIGludGVycnVwdHMgd2l0aGluIHRoZSBJT0FQSUMgY29udGV4dC4gRm9jdXNpbmcgb24gdGhhdCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiB0aGUgY3VycmVudCBzdGF0ZS5cblxuTm93LCB3aXRoIHRoYXQgaW4gbWluZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zICphZnRlciogdGhlIGludGVycnVwdCBpcyBzZXQuIEknbGwgbmVlZCB0byBqdW1wIG92ZXIgdG8gYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAuIFRoYXQncyB3aGVyZSB0aGUgRW5kIG9mIEludGVycnVwdCBoYW5kbGluZyBsb2dpYyB3aWxsIGJlLCB3aGljaCBzaG91bGQgZ2l2ZSBtZSB0aGUgb3ZlcmFsbCBwaWN0dXJlIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjE0LjY2OTU0MzE5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vaW9hcGljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdFxcdH1cXG4gNTgxOlxcdFxcdH0gZWxzZSB7XFxuIDU4MjpcXHRcXHRcXHRpb2FwaWMtXFx1MDAzZWlycV9lb2lbcGluXSA9IDA7XFxuIDU4MzpcXHRcXHR9XFxuIDU4NDpcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdHZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSlcXG4gNTg3OlxcdHtcXG4gNTg4OlxcdFxcdGludCBpO1xcbiA1ODk6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA1OTA6XFx0XFxuIDU5MTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlvYXBpYy1cXHUwMDNlbG9jayk7XFxuIDU5MjpcXHRcXHRydGNfaXJxX2VvaShpb2FwaWMsIHZjcHUsIHZlY3Rvcik7XFxuIDU5MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSU9BUElDX05VTV9QSU5TOyBpKyspIHtcXG4gNTk0OlxcdFxcdFxcdHVuaW9uIGt2bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudCA9IFxcdTAwMjZpb2FwaWMtXFx1MDAzZXJlZGlydGJsW2ldO1xcbiA1OTU6XFx0XFxuIDU5NjpcXHRcXHRcXHRpZiAoZW50LVxcdTAwM2VmaWVsZHMudmVjdG9yICE9IHZlY3RvcilcXG4gNTk3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1OTg6XFx0XFx0XFx0a3ZtX2lvYXBpY191cGRhdGVfZW9pX29uZSh2Y3B1LCBpb2FwaWMsIHRyaWdnZXJfbW9kZSwgaSk7XFxuIDU5OTpcXHRcXHR9XFxuIDYwMDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNjAxOlxcdH1cXG4gNjAyOlxcdFxcbiA2MDM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2lvYXBpYyAqdG9faW9hcGljKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpXFxuIDYwNDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjE0LjY2OTYxNjc2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDk2ODY4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIEVPSSBVcGRhdGVzKipcblxuQWxyaWdodCwgKmt2bV9pb2FwaWNfdXBkYXRlX2VvaSog4oCTIHRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIGxpa2UgdGhhdC4gV2UncmUgY2xlYXJseSBkZWFsaW5nIHdpdGggdGhlIGVuZC1vZi1pbnRlcnJ1cHQgcHJvY2VzcyBoZXJlLCBhbmQgdGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgY29yZSBjb25jZXJuLiBUaGUgZm9jdXMgb24gdGhlIEVPSSBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgaXMgY29ycmVjdC4gV2Ugc2hvdWxkIGNoZWNrIHRoYXQgZnVuY3Rpb24uXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgdGhlIHJlbGF0ZWQgYGt2bV9zZXRfaW9hcGljYCBmdW5jdGlvbiB0byBzZWUgd2hlcmUgaXQgZml0cyBpbiB0aGUgcGljdHVyZS4uLiB0byBjb25maXJtIG15IHN1c3BpY2lvbnMgYW5kIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIGhvdyB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgdXBkYXRlIHByb2Nlc3MuIEl0IG1heSBvZmZlciBjbHVlcyB0byBvdGhlciBwb2ludHMgb2YgaW50ZXJlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjM3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToxNy44NzkzMDYxNDNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL2lvYXBpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHR7XFxuIDc2MTpcXHRcXHRzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0ga3ZtLVxcdTAwM2VhcmNoLnZpb2FwaWM7XFxuIDc2MjpcXHRcXG4gNzYzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNzY0OlxcdFxcdG1lbWNweShzdGF0ZSwgaW9hcGljLCBzaXplb2Yoc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUpKTtcXG4gNzY1OlxcdFxcdHN0YXRlLVxcdTAwM2VpcnIgXFx1MDAyNj0gfmlvYXBpYy1cXHUwMDNlaXJyX2RlbGl2ZXJlZDtcXG4gNzY2OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpb2FwaWMtXFx1MDAzZWxvY2spO1xcbiA3Njc6XFx0fVxcbiA3Njg6XFx0XFxuIDc2OTpcXHR2b2lkIGt2bV9zZXRfaW9hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKVxcbiA3NzA6XFx0e1xcbiA3NzE6XFx0XFx0c3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS1cXHUwMDNlYXJjaC52aW9hcGljO1xcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlvYXBpYy1cXHUwMDNlbG9jayk7XFxuIDc3NDpcXHRcXHRtZW1jcHkoaW9hcGljLCBzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBrdm1faW9hcGljX3N0YXRlKSk7XFxuIDc3NTpcXHRcXHRpb2FwaWMtXFx1MDAzZWlyciA9IDA7XFxuIDc3NjpcXHRcXHRpb2FwaWMtXFx1MDAzZWlycl9kZWxpdmVyZWQgPSAwO1xcbiA3Nzc6XFx0XFx0a3ZtX21ha2Vfc2Nhbl9pb2FwaWNfcmVxdWVzdChrdm0pO1xcbiA3Nzg6XFx0XFx0a3ZtX2lvYXBpY19pbmplY3RfYWxsKGlvYXBpYywgc3RhdGUtXFx1MDAzZWlycik7XFxuIDc3OTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW9hcGljLVxcdTAwM2Vsb2NrKTtcXG4gNzgwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6MDE6MTcuODc5MzgxMDIzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1OTg2MTAzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElPQVBJQyBFbXVsYXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIEkndmUgZ290IGl0LiBga3ZtX3NldF9pb2FwaWNgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgYW5kIGl0J3MgbmljZSB0byBzZWUgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBvZiB0aGUgb3RoZXIgSU9BUElDIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQ6XG5cbiogICBga3ZtX2lvYXBpY19zZXRfaXJxYFxuKiAgIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgXG4qICAgYGt2bV9zZXRfaW9hcGljYFxuXG5BbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZHVyaW5nIHRoZSBmdXp6aW5nOlxuXG4qICAgYEtWTWBcbiogICBgS1ZNX0lPQVBJQ2BcblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIElPQVBJQyBlbXVsYXRpb24gYnVnIHdpdGhpbiBLVk0uIEl0J3MgdG91Y2hpbmcgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYCB0byBjb3JyZWN0bHkgbWFuYWdlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZvciBib3RoIGVkZ2UgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLiBUaGlzIGtpbmQgb2YgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBJdCdzIHJlYWNoYWJsZSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHVuY292ZXJpbmcgc3VidGxlIGlzc3VlcyBpbiB0aGlzIHBhcnQgb2YgS1ZNIGlzIGhpZ2guXG5cblNvLCBoZXJlJ3MgdGhlIHJlYXNvbmluZywgaW4gYSBudXRzaGVsbDogVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBpbnRlcnJ1cHQgc3RhdGUgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSB0cmFja2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgY29yZSwgcmVhY2hhYmxlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSwgbWFraW5nIGl0IHByaW1lIGZvciBmdXp6aW5nLiBUaGUgbG9naWMgYmVpbmcgbW9kaWZpZWQgaXMgcmVhY2hhYmxlIHRocm91Z2ggYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI2OCwiT3V0cHV0VG9rZW5zIjoxODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToyNC40Nzc5OTM3NTVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY4NjI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU9BUElDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2lvYXBpY19zZXRfaXJxXCIsXG4gICAgXCJrdm1faW9hcGljX3VwZGF0ZV9lb2lcIixcbiAgICBcImt2bV9zZXRfaW9hcGljXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBLVk0gSU9BUElDIGVtdWxhdGlvbiB3aGVyZSBgcmVtb3RlX2lycmAgYW5kIGBpcnJfZGVsaXZlcmVkYCB3ZXJlIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCBmb3IgZWRnZSBhbmQgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudCAoS1ZNKSBhbmQgaXMgd29ydGggZnV6emluZy4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgYGt2bV9pb2FwaWNfc2V0X2lycWAsIGBrdm1faW9hcGljX3VwZGF0ZV9lb2lgLCBhbmQgYGt2bV9zZXRfaW9hcGljYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JT0FQSUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faW9hcGljX3NldF9pcnFcIixcbiAgICBcImt2bV9pb2FwaWNfdXBkYXRlX2VvaVwiLFxuICAgIFwia3ZtX3NldF9pb2FwaWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEtWTSBJT0FQSUMgZW11bGF0aW9uIHdoZXJlIGByZW1vdGVfaXJyYCBhbmQgYGlycl9kZWxpdmVyZWRgIHdlcmUgbm90IGNvcnJlY3RseSB1cGRhdGVkIGZvciBlZGdlIGFuZCBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgdmlydHVhbGl6YXRpb24gY29tcG9uZW50IChLVk0pIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBga3ZtX2lvYXBpY19zZXRfaXJxYCwgYGt2bV9pb2FwaWNfdXBkYXRlX2VvaWAsIGFuZCBga3ZtX3NldF9pb2FwaWNgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToyNC41NTU2ODU4MzlaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDg2NjI3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTowMToyNC41NTYxMjA4MzlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODcwODIyNDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBlZGdlLXRyaWdnZXJlZCBhbmQgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgaW4gdGhlIEtWTSBJT0FQSUMgKHNwZWNpZmljYWxseSB0aGUgYGlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmAgZmllbGRzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHN0YXRlIG1hY2hpbmUgbG9naWMgZml4ZXMgZm9yIGludGVycnVwdCBkZWxpdmVyeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiODljNmY0ZDk0ZTQyZTZhZmIzYmU4ZDc1MWJmODY2YmFhNjU1OWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxODo1OTo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pb2FwaWMuYyBiL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuaW5kZXggNzU3NjY3ZmIyYmZhMC4uNjc2ZWZmZDY3NGY5ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9pb2FwaWMuY1xuKysrIGIvYXJjaC94ODYva3ZtL2lvYXBpYy5jXG5AQCAtMjMwLDExICsyMzAsMTEgQEAgc3RhdGljIGludCBpb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1bnNpZ25lZCBpbnQgaXJxLFxuIFx0b2xkX2lyciA9IGlvYXBpYy1cdTAwM2VpcnI7XG4gXHRpb2FwaWMtXHUwMDNlaXJyIHw9IG1hc2s7XG4gXHRpZiAoZWRnZSkge1xuLVx0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRpZiAob2xkX2lyciA9PSBpb2FwaWMtXHUwMDNlaXJyKSB7XG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1x0XHRpb2FwaWMtXHUwMDNlaXJyX2RlbGl2ZXJlZCBcdTAwMjY9IH5tYXNrO1xuIFx0fVxuIFxuIFx0cmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEsIGxpbmVfc3RhdHVzKTtcbkBAIC00OTEsNyArNDkxLDcgQEAgc3RhdGljIGludCBpb2FwaWNfc2VydmljZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBib29sIGxpbmVfc3RhdHVzKVxuIFx0fSBlbHNlXG4gXHRcdHJldCA9IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtXHUwMDNla3ZtLCBOVUxMLCBcdTAwMjZpcnFlKTtcbiBcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IGlycWUudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKVxuK1x0aWYgKHJldCBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgaXJxZS50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpXG4gXHRcdGVudHJ5LVx1MDAzZWZpZWxkcy5yZW1vdGVfaXJyID0gMTtcbiBcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLjg5ZTNmODJlNzViMDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtODYsNiArODYsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2h5cGVydl9mZWF0dXJlc1xuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X2lwaVxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvaHlwZXJ2X3N2bV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9oeXBlcnZfdGxiX2ZsdXNoXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9pb2FwaWNfc3RhdGVfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYva3ZtX2Nsb2NrX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2t2bV9wdl90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni9rdm1fYnVzbG9ja190ZXN0XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGEwMjc2YTE1NDJmZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jXG5AQCAtMCwwICsxLDEzOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGluLWtlcm5lbCBJL08gQVBJQyBzdGF0ZS5cbisgKi9cbitcbisjaW5jbHVkZSBcImFwaWMuaFwiXG4rI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcInRlc3RfdXRpbC5oXCJcbitcbisjZGVmaW5lIFRFU1RfSU9BUElDX1BJTlx0XHQxNlxuKyNkZWZpbmUgVEVTVF9WRUNUT1JcdFx0MHg1MFxuKyNkZWZpbmUgTk9fU1VDSF9BUElDX0lEXHRcdDB4ZmVcbisjZGVmaW5lIFRFU1RfSU9BUElDX0VER0VfVFJJR1x0MFxuKyNkZWZpbmUgVEVTVF9JT0FQSUNfTEVWRUxfVFJJR1x0MVxuK1xuK3N0YXRpYyB2b2lkIGdldF9pb2FwaWMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxY2hpcCAqaXJxY2hpcClcbit7XG4rXHRpbnQgcjtcbitcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHIgPSBfX3ZtX2lvY3RsKHZtLCBLVk1fR0VUX0lSUUNISVAsIGlycWNoaXApO1xuK1x0aWYgKHIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOWElPKVxuK1x0XHRfX1RFU1RfUkVRVUlSRSgwLCBcIkluLWtlcm5lbCBJL08gQVBJQyBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0VEVTVF9BU1NFUlQoIXIsIEtWTV9JT0NUTF9FUlJPUihLVk1fR0VUX0lSUUNISVAsIHIpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2lvYXBpYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFjaGlwICppcnFjaGlwKVxuK3tcbitcdGlycWNoaXAtXHUwMDNlY2hpcF9pZCA9IEtWTV9JUlFDSElQX0lPQVBJQztcbitcdHZtX2lvY3RsKHZtLCBLVk1fU0VUX0lSUUNISVAsIGlycWNoaXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXRfaW9hcGljX2VudHJ5KHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGxldmVsX3RyaWdnZXJlZCxcbitcdFx0XHQgICAgIHUzMiBkZXN0X2lkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnZlY3RvciA9XG4rXHRcdFRFU1RfVkVDVE9SO1xuK1x0aXJxY2hpcC5jaGlwLmlvYXBpYy5yZWRpcnRibFtURVNUX0lPQVBJQ19QSU5dLmZpZWxkcy5kZXN0X2lkID1cbitcdFx0ZGVzdF9pZDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMuZGVzdF9tb2RlID0gMDtcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMudHJpZ19tb2RlID1cbitcdFx0bGV2ZWxfdHJpZ2dlcmVkID8gVEVTVF9JT0FQSUNfTEVWRUxfVFJJRyA6XG4rXHRcdFx0XHQgIFRFU1RfSU9BUElDX0VER0VfVFJJRztcbitcdGlycWNoaXAuY2hpcC5pb2FwaWMucmVkaXJ0YmxbVEVTVF9JT0FQSUNfUElOXS5maWVsZHMubWFzayA9IDA7XG4rXHRpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIgPSAwO1xuK1xuK1x0c2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX2lycV9saW5lX3N0YXR1cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGxldmVsKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxX2xldmVsIGlycSA9IHtcbitcdFx0LmlycSA9IFRFU1RfSU9BUElDX1BJTixcbitcdFx0LmxldmVsID0gbGV2ZWwsXG4rXHR9O1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9JUlFfTElORV9TVEFUVVMsIFx1MDAyNmlycSk7XG4rXHRyZXR1cm4gaXJxLnN0YXR1cztcbit9XG4rXG4rc3RhdGljIHZvaWQgYXNzZXJ0X2lvYXBpY19waW5faXJyKHN0cnVjdCBrdm1fdm0gKnZtLCBib29sIGV4cGVjdGVkKVxuK3tcbitcdHN0cnVjdCBrdm1faXJxY2hpcCBpcnFjaGlwO1xuK1xuK1x0Z2V0X2lvYXBpYyh2bSwgXHUwMDI2aXJxY2hpcCk7XG4rXHRURVNUX0FTU0VSVCghIShpcnFjaGlwLmNoaXAuaW9hcGljLmlyciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIFRFU1RfSU9BUElDX1BJTikpID09IGV4cGVjdGVkLFxuK1x0XHQgICAgXCJFeHBlY3RlZCBJT0FQSUMgSVJSIGZvciBwaW4gJXUgdG8gYmUgJXUsIGdvdCAweCV4XCIsXG4rXHRcdCAgICBURVNUX0lPQVBJQ19QSU4sIGV4cGVjdGVkLCBpcnFjaGlwLmNoaXAuaW9hcGljLmlycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9pcnFjaGlwIGlycWNoaXA7XG4rXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBzdGF0dXM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXMoKTtcbitcdHZtX2NyZWF0ZV9pcnFjaGlwKHZtKTtcbitcbitcdHNldF9pb2FwaWNfZW50cnkodm0sIHRydWUsIE5PX1NVQ0hfQVBJQ19JRCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyA9PSAtMSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZmFpbGVkIGludGVycnVwdCBkZWxpdmVyeSwgZ290ICVkXCIsIHN0YXR1cyk7XG4rXG4rXHRnZXRfaW9hcGljKHZtLCBcdTAwMjZpcnFjaGlwKTtcbitcdFRFU1RfQVNTRVJUKCFpcnFjaGlwLmNoaXAuaW9hcGljLnJlZGlydGJsW1RFU1RfSU9BUElDX1BJTl0uZmllbGRzLnJlbW90ZV9pcnIsXG4rXHRcdCAgICBcIktWTSBzZXQgcmVtb3RlX2lyciBmb3IgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IHRoYXQgd2Fzbid0IGRlbGl2ZXJlZFwiKTtcbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9kdXBsaWNhdGVfZWRnZV9pbnRlcnJ1cHRfcHJlc2VydmVzX2RlbGl2ZXJ5X3N0YXRlKHZvaWQpXG4re1xuK1x0c3RydWN0IGt2bV9sYXBpY19zdGF0ZSBsYXBpYztcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTY0IGFwaWNiYXNlO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgTlVMTCk7XG4rXHRhcGljYmFzZSA9IHZjcHVfZ2V0X21zcih2Y3B1LCBNU1JfSUEzMl9BUElDQkFTRSk7XG4rXHR2Y3B1X3NldF9tc3IodmNwdSwgTVNSX0lBMzJfQVBJQ0JBU0UsXG4rXHRcdCAgICAgYXBpY2Jhc2UgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fR0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rXHQqKHUzMiAqKShsYXBpYy5yZWdzICsgQVBJQ19TUElWKSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEO1xuK1x0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fU0VUX0xBUElDLCBcdTAwMjZsYXBpYyk7XG4rXG4rXHRzZXRfaW9hcGljX2VudHJ5KHZtLCBmYWxzZSwgdmNwdS1cdTAwM2VpZCk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKHN0YXR1cyBcdTAwM2UgMCxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgZWRnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIGdvdCAlZFwiLCBzdGF0dXMpO1xuK1xuK1x0YXNzZXJ0X2lvYXBpY19waW5faXJyKHZtLCBmYWxzZSk7XG4rXG4rXHRzdGF0dXMgPSBrdm1faXJxX2xpbmVfc3RhdHVzKHZtLCAxKTtcbitcdFRFU1RfQVNTRVJUKCFzdGF0dXMsXG4rXHRcdCAgICBcIkV4cGVjdGVkIGR1cGxpY2F0ZSBlZGdlIGludGVycnVwdCB0byBiZSBjb2FsZXNjZWQsIGdvdCAlZFwiLFxuK1x0XHQgICAgc3RhdHVzKTtcbitcbitcdGFzc2VydF9pb2FwaWNfcGluX2lycih2bSwgZmFsc2UpO1xuK1xuK1x0a3ZtX3ZtX2ZyZWUodm0pO1xuK31cbitcbitpbnQgbWFpbih2b2lkKVxuK3tcbitcdHRlc3Rfbm9fcmVtb3RlX2lycl9mb3JfdW5kZWxpdmVyZWRfbGV2ZWxfaW50ZXJydXB0KCk7XG4rXHR0ZXN0X2R1cGxpY2F0ZV9lZGdlX2ludGVycnVwdF9wcmVzZXJ2ZXNfZGVsaXZlcnlfc3RhdGUoKTtcbitcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjI0LjU1NjEyMjUzOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA4MjA0NDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gb2YgS1ZNIElPQVBJQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rdm0vaW9hcGljLmNgLCBzcGVjaWZpY2FsbHkgYGlvYXBpY19zZXRfaXJxYCBhbmQgYGlvYXBpY19zZXJ2aWNlYC4gTXkgbWFpbiBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMsIHdoaWNoIGNvdWxkIGJlIGRldGVjdGVkIGJ5IEtNU0FOLlxuXG5JbiBgaW9hcGljX3NldF9pcnFgLCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhcm91bmQgYGlvYXBpYy1cdTAwM2VpcnJfZGVsaXZlcmVkIFx1MDAyNj0gfm1hc2s7YCBoYXMgYmVlbiBtb2RpZmllZCwgYW5kIGEgY2hlY2sgYGlmIChvbGRfaXJyID09IGlvYXBpYy1cdTAwM2VpcnIpYCBzZWVtcyB0byBoYXZlIGJlZW4gaW50cm9kdWNlZCBpbiBhIG1vcmUgbG9naWNhbCBwb3NpdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSdyZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGVkZ2UgdHJpZ2dlcmVkIGNhc2Ugbm93LiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGlzIGNvdWxkIGJlIGEgcG9pbnQgb2YgY29uY2Vybi4gSG93ZXZlciwgdXBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgdGhlIGludm9sdmVkIHZhcmlhYmxlczogYG9sZF9pcnJgLCBgaW9hcGljLVx1MDAzZWlycmAsIGFuZCBgbWFza2AsIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoZXJlLiBXZSBhcmUgZGVhbGluZyB3aXRoIEtWTSBJT0FQSUMgc3RhdGUsIGRlYWxpbmcgd2l0aCBlZGdlL2xldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLlxuXG5Nb3Zpbmcgb24gdG8gYGlvYXBpY19zZXJ2aWNlYCwgdGhlIGNvbmRpdGlvbmFsIGByZXRgIGluIGBpZiAocmV0IFx1MDAyNlx1MDAyNiBpcnFlLnRyaWdfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRylgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYHJldCBcdTAwM2UgMGAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwbGFjZSB0byBkb3VibGUtY2hlY2suIEhvd2V2ZXIsIGFnYWluLCBgcmV0YCBpcyBhbiBgaW50YCwgYW5kIGBpcnFlYCBpcyBhIGBzdHJ1Y3Qga3ZtX2xhcGljX2lycWAuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSBhIHNtYWxsIGZpeCBpbiBsb2dpYywgdG8gYWRkcmVzcyBhIGNvcm5lciBjYXNlIGZvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cy4gTm8gbmV3IHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIGl0IGlzIG5vdCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cblRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9pb2FwaWNfc3RhdGVfdGVzdC5jYC4gVGhpcyBpcyBnb29kLCBpdCB2YWxpZGF0ZXMgdGhlIGNoYW5nZXMuXG5cblRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHRoZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBmb2N1cyBvbiBLVk0gSU9BUElDIHN0YXRlIGxvZ2ljLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuKipOZWVkc0tNU0FOID0gZmFsc2UqKlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzYzLCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjAxOjMzLjI2NDMzMDAzMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBoYW5kbGluZyBlZGdlLXRyaWdnZXJlZCBhbmQgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgaW4gdGhlIEtWTSBJT0FQSUMgKHNwZWNpZmljYWxseSB0aGUgYGlycl9kZWxpdmVyZWRgIGFuZCBgcmVtb3RlX2lycmAgZmllbGRzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHN0YXRlIG1hY2hpbmUgbG9naWMgZml4ZXMgZm9yIGludGVycnVwdCBkZWxpdmVyeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgZWRnZS10cmlnZ2VyZWQgYW5kIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGluIHRoZSBLVk0gSU9BUElDIChzcGVjaWZpY2FsbHkgdGhlIGBpcnJfZGVsaXZlcmVkYCBhbmQgYHJlbW90ZV9pcnJgIGZpZWxkcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGZpeGVzIGZvciBpbnRlcnJ1cHQgZGVsaXZlcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[1] Phase: Succeeded StartedAt: 2026-08-10 19:01:44 +0000 UTC FinishedAt: 2026-08-10 19:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 19:01:44 +0000 UTC FinishedAt: 2026-08-10 19:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2] Phase: Succeeded StartedAt: 2026-08-10 19:01:44 +0000 UTC FinishedAt: 2026-08-10 22:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 19:01:44 +0000 UTC FinishedAt: 2026-08-10 22:42:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 19:01:44 +0000 UTC FinishedAt: 2026-08-10 19:01:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 19:01:44 +0000 UTC FinishedAt: 2026-08-10 19:01:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjffs6/series-workflowjffs6-convert-artifact-202004693/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 19:01:54 +0000 UTC FinishedAt: 2026-08-10 19:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 19:01:54 +0000 UTC FinishedAt: 2026-08-10 19:18:44 +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:*5d090e2a-2c76-45e9-b148-7a809a9ca6c2,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-workflowjffs6/series-workflowjffs6-convert-artifact-202004693/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": "70487b2f-bd43-4b0b-ab9a-0302f634c94d", "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-workflowjffs6/series-workflowjffs6-build-action-3590718267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 19:01:54 +0000 UTC FinishedAt: 2026-08-10 19:18:34 +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:*5d090e2a-2c76-45e9-b148-7a809a9ca6c2,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-workflowjffs6/series-workflowjffs6-convert-artifact-202004693/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": "70487b2f-bd43-4b0b-ab9a-0302f634c94d", "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-workflowjffs6/series-workflowjffs6-build-action-3590718267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 19:18:44 +0000 UTC FinishedAt: 2026-08-10 19:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 19:18:44 +0000 UTC FinishedAt: 2026-08-10 19:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 19:18:44 +0000 UTC FinishedAt: 2026-08-10 19:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 19:18:44 +0000 UTC FinishedAt: 2026-08-10 19:18:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjffs6/series-workflowjffs6-convert-artifact-3165801136/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 19:18:54 +0000 UTC FinishedAt: 2026-08-10 19:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 19:18:54 +0000 UTC FinishedAt: 2026-08-10 19:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70487b2f-bd43-4b0b-ab9a-0302f634c94d,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-workflowjffs6/series-workflowjffs6-build-action-3590718267/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-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 19:21:24 +0000 UTC FinishedAt: 2026-08-10 19:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 19:21:24 +0000 UTC FinishedAt: 2026-08-10 19:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 19:21:24 +0000 UTC FinishedAt: 2026-08-10 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 19:21:24 +0000 UTC FinishedAt: 2026-08-10 19:38:31 +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:*5d090e2a-2c76-45e9-b148-7a809a9ca6c2,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-workflowjffs6/series-workflowjffs6-convert-artifact-3165801136/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": "f45da4e1-54b0-4b01-ad1b-bf75f5e4385d", "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-workflowjffs6/series-workflowjffs6-build-action-135799980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 19:21:24 +0000 UTC FinishedAt: 2026-08-10 19:38:20 +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:*5d090e2a-2c76-45e9-b148-7a809a9ca6c2,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-workflowjffs6/series-workflowjffs6-convert-artifact-3165801136/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": "f45da4e1-54b0-4b01-ad1b-bf75f5e4385d", "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-workflowjffs6/series-workflowjffs6-build-action-135799980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 19:38:31 +0000 UTC FinishedAt: 2026-08-10 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 19:38:31 +0000 UTC FinishedAt: 2026-08-10 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 19:38:31 +0000 UTC FinishedAt: 2026-08-10 19:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 19:38:31 +0000 UTC FinishedAt: 2026-08-10 19:40:34 +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:*f45da4e1-54b0-4b01-ad1b-bf75f5e4385d,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-workflowjffs6/series-workflowjffs6-build-action-135799980/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-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 22:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 22:42:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*70487b2f-bd43-4b0b-ab9a-0302f634c94d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f45da4e1-54b0-4b01-ad1b-bf75f5e4385d,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-workflowjffs6/series-workflowjffs6-build-action-3590718267/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-workflowjffs6/series-workflowjffs6-build-action-135799980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 19:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 19:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjffs6/series-workflowjffs6-convert-artifact-151127849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 19:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 19:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 19:40:44 +0000 UTC FinishedAt: 2026-08-10 19:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 19:40:58 +0000 UTC FinishedAt: 2026-08-10 22:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjffs6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_ioapic_set_irq","kvm_ioapic_update_eoi","kvm_set_ioapic"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c21bb4193868a8de71fc4693fa741e195fdf5d86","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_IOAPIC"],"series_id":"8e781f2c-5bb4-4acb-bbd9-48eeaf161b1b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 19:40:58 +0000 UTC FinishedAt: 2026-08-10 22:41:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*70487b2f-bd43-4b0b-ab9a-0302f634c94d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f45da4e1-54b0-4b01-ad1b-bf75f5e4385d,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-workflowjffs6/series-workflowjffs6-build-action-3590718267/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-workflowjffs6/series-workflowjffs6-build-action-135799980/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-workflowjffs6/series-workflowjffs6-convert-artifact-151127849/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,}