Name: series-workflow66xmc Phase: Succeeded StartedAt: 2026-06-21 13:52:34 +0000 UTC FinishedAt: 2026-06-21 17:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[0] Phase: Succeeded StartedAt: 2026-06-21 13:52:34 +0000 UTC FinishedAt: 2026-06-21 14:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[0].run-triage Phase: Succeeded StartedAt: 2026-06-21 13:52:34 +0000 UTC FinishedAt: 2026-06-21 14:01:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "08c7183f5b9ffe4408e74fff848a4cc2105361d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "08c7183f5b9ffe4408e74fff848a4cc2105361d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "hva_to_pfn_remapped" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm5fcmVtYXBwZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNTg5YjdjMjNlNDZmZWVkMjcyYThkYzc4YTYyMzViZDYwMDVlYWNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdW4gMjEgMTQ6MDA6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDkxODQzZTkyMjRkMDQ1Li4xMTVlMmM0ZGI1ZmEwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC00NzU5LDggJiM0Mzs0NzU5LDIyIEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAocmV0ICE9IFJFVF9QRl9DT05USU5VRSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXHUwMDNlcGZuKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC1cdTAwM2VwZm4pKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiBpcyBiYWNrZWQgYnkgYSBWTV9JTy9WTV9QRk5NQVBcbiYjNDM7XHRcdCAqIG1hcHBpbmcgd2hvc2UgZmF1bHQgaGFuZGxlciByZWZ1c2VzIHRvIGluc3RhbGwgYSBQVEUgd2hpbGUgdGhlXG4mIzQzO1x0XHQgKiBkZXZpY2UmIzM5O3MgbWVtb3J5IHNwYWNlIGlzIGRpc2FibGVkIChlLmcuIHRoZSBndWVzdCBjbGVhcmVkXG4mIzQzO1x0XHQgKiBQQ0lfQ09NTUFORC5NRU0pLiBUaGUgZmF1bHQgdGhlbiBmYWlscyBldmVuIHRob3VnaCB0aGUgbWVtc2xvdFxuJiM0MztcdFx0ICogaXMgc3RpbGwgdmFsaWQuIFRyZWF0IHN1Y2ggYW4gYWNjZXNzIGFzIE1NSU8gYW5kIGVtdWxhdGUgaXQgc29cbiYjNDM7XHRcdCAqIHRoZSBndWVzdCBvYnNlcnZlcyBVbnN1cHBvcnRlZCBSZXF1ZXN0IHNlbWFudGljcywgbWF0Y2hpbmdcbiYjNDM7XHRcdCAqIGJhcmUgbWV0YWwsIGluc3RlYWQgb2Yga2lsbGluZyB0aGUgVk0gd2l0aCAtRUZBVUxULiBHZW51aW5lLFxuJiM0MztcdFx0ICogbm9uLXBmbm1hcCBlcnJvcnMgc3RpbGwgdGFrZSB0aGUgZmF0YWwgcGF0aC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZhdWx0LVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXG4mIzQzO1x0XHRcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcbiYjNDM7XG4gXHRcdHJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghZmF1bHQtXHUwMDNlc2xvdCB8fCBpc19ub3Nsb3RfcGZuKGZhdWx0LVx1MDAzZXBmbikpKVxuIFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA0YzE0YWVlMWZiMDYzMy4uZGM1OTczZTQwMDcyMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTk5LDYgJiM0Mzs5OSwxNCBAQFxuICNkZWZpbmUgS1ZNX1BGTl9FUlJfUk9fRkFVTFRcdChLVk1fUEZOX0VSUl9NQVNLICYjNDM7IDIpXG4gI2RlZmluZSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HXHQoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyAzKVxuICNkZWZpbmUgS1ZNX1BGTl9FUlJfTkVFRFNfSU9cdChLVk1fUEZOX0VSUl9NQVNLICYjNDM7IDQpXG4mIzQzOy8qXG4mIzQzOyAqIEZhdWx0aW5nIGluIGEgVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmcgZmFpbGVkIGJlY2F1c2UgdGhlIG93bmVyJiMzOTtzIGZhdWx0XG4mIzQzOyAqIGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURSwgZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2hvc2VcbiYjNDM7ICogZGV2aWNlIG1lbW9yeSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKHRoZSBndWVzdCBjbGVhcmVkIFBDSV9DT01NQU5ELk1FTSkuXG4mIzQzOyAqIFRoZSBtZW1zbG90IGlzIHZhbGlkOyB0aGUgYWNjZXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIE1NSU8gcmF0aGVyIHRoYW4gYVxuJiM0MzsgKiBmYXRhbCAtRUZBVUxULlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLVk1fUEZOX0VSUl9QRk5NQVBcdChLVk1fUEZOX0VSUl9NQVNLICYjNDM7IDUpXG4gXG4gLypcbiAgKiBlcnJvciBwZm5zIGluZGljYXRlIHRoYXQgdGhlIGdmbiBpcyBpbiBzbG90IGJ1dCBmYWlsZCB0b1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA4ODFmOTJkN2E0NjllNy4uZjIzMmZjMmY0MjM4MGEgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMzAxNSw3ICYjNDM7MzAxNSwxNCBAQCBrdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbiBcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiBcdFx0XHRnb3RvIHJldHJ5O1xuIFx0XHRpZiAociBcdTAwM2MgMClcbi1cdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIG93bmVyJiMzOTtzIGZhdWx0IGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURVxuJiM0MztcdFx0XHQgKiAoZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2l0aCBkZXZpY2UgbWVtb3J5XG4mIzQzO1x0XHRcdCAqIGRpc2FibGVkKS4gRmxhZyBpdCBkaXN0aW5jdGx5IHNvIHRoZSBhcmNoIGZhdWx0XG4mIzQzO1x0XHRcdCAqIGhhbmRsZXIgY2FuIHRyZWF0IHRoZSBhY2Nlc3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGFcbiYjNDM7XHRcdFx0ICogZmF0YWwgLUVGQVVMVC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBmbiA9IEtWTV9QRk5fRVJSX1BGTk1BUDtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICgoa2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX05PV0FJVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm5fcmVtYXBwZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1ODliN2MyM2U0NmZlZWQyNzJhOGRjNzhhNjIzNWJkNjAwNWVhY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1biAyMSAxNDowMDoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDkxODQzZTkyMjRkMDQ1Li4xMTVlMmM0ZGI1ZmEwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC00NzU5LDggJiM0Mzs0NzU5LDIyIEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKHJldCAhPSBSRVRfUEZfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAodW5saWtlbHkoaXNfZXJyb3JfcGZuKGZhdWx0LSZndDtwZm4pKSkKJiM0MzsJaWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC0mZ3Q7cGZuKSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgaXMgYmFja2VkIGJ5IGEgVk1fSU8vVk1fUEZOTUFQCiYjNDM7CQkgKiBtYXBwaW5nIHdob3NlIGZhdWx0IGhhbmRsZXIgcmVmdXNlcyB0byBpbnN0YWxsIGEgUFRFIHdoaWxlIHRoZQomIzQzOwkJICogZGV2aWNlJiMzOTtzIG1lbW9yeSBzcGFjZSBpcyBkaXNhYmxlZCAoZS5nLiB0aGUgZ3Vlc3QgY2xlYXJlZAomIzQzOwkJICogUENJX0NPTU1BTkQuTUVNKS4gVGhlIGZhdWx0IHRoZW4gZmFpbHMgZXZlbiB0aG91Z2ggdGhlIG1lbXNsb3QKJiM0MzsJCSAqIGlzIHN0aWxsIHZhbGlkLiBUcmVhdCBzdWNoIGFuIGFjY2VzcyBhcyBNTUlPIGFuZCBlbXVsYXRlIGl0IHNvCiYjNDM7CQkgKiB0aGUgZ3Vlc3Qgb2JzZXJ2ZXMgVW5zdXBwb3J0ZWQgUmVxdWVzdCBzZW1hbnRpY3MsIG1hdGNoaW5nCiYjNDM7CQkgKiBiYXJlIG1ldGFsLCBpbnN0ZWFkIG9mIGtpbGxpbmcgdGhlIFZNIHdpdGggLUVGQVVMVC4gR2VudWluZSwKJiM0MzsJCSAqIG5vbi1wZm5tYXAgZXJyb3JzIHN0aWxsIHRha2UgdGhlIGZhdGFsIHBhdGguCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChmYXVsdC0mZ3Q7cGZuID09IEtWTV9QRk5fRVJSX1BGTk1BUCkKJiM0MzsJCQlyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7CiYjNDM7CiAJCXJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7CiYjNDM7CX0KIAogCWlmIChXQVJOX09OX09OQ0UoIWZhdWx0LSZndDtzbG90IHx8IGlzX25vc2xvdF9wZm4oZmF1bHQtJmd0O3BmbikpKQogCQlyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggNGMxNGFlZTFmYjA2MzMuLmRjNTk3M2U0MDA3MjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC05OSw2ICYjNDM7OTksMTQgQEAKICNkZWZpbmUgS1ZNX1BGTl9FUlJfUk9fRkFVTFQJKEtWTV9QRk5fRVJSX01BU0sgJiM0MzsgMikKICNkZWZpbmUgS1ZNX1BGTl9FUlJfU0lHUEVORElORwkoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyAzKQogI2RlZmluZSBLVk1fUEZOX0VSUl9ORUVEU19JTwkoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyA0KQomIzQzOy8qCiYjNDM7ICogRmF1bHRpbmcgaW4gYSBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZyBmYWlsZWQgYmVjYXVzZSB0aGUgb3duZXImIzM5O3MgZmF1bHQKJiM0MzsgKiBoYW5kbGVyIGRlY2xpbmVkIHRvIGluc3RhbGwgYSBQVEUsIGUuZy4gYSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIHdob3NlCiYjNDM7ICogZGV2aWNlIG1lbW9yeSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKHRoZSBndWVzdCBjbGVhcmVkIFBDSV9DT01NQU5ELk1FTSkuCiYjNDM7ICogVGhlIG1lbXNsb3QgaXMgdmFsaWQ7IHRoZSBhY2Nlc3Mgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgTU1JTyByYXRoZXIgdGhhbiBhCiYjNDM7ICogZmF0YWwgLUVGQVVMVC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEtWTV9QRk5fRVJSX1BGTk1BUAkoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyA1KQogCiAvKgogICogZXJyb3IgcGZucyBpbmRpY2F0ZSB0aGF0IHRoZSBnZm4gaXMgaW4gc2xvdCBidXQgZmFpbGQgdG8KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDg4MWY5MmQ3YTQ2OWU3Li5mMjMyZmMyZjQyMzgwYSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0zMDE1LDcgJiM0MzszMDE1LDE0IEBAIGt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKQogCQlpZiAociA9PSAtRUFHQUlOKQogCQkJZ290byByZXRyeTsKIAkJaWYgKHIgJmx0OyAwKQotCQkJcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgb3duZXImIzM5O3MgZmF1bHQgaGFuZGxlciBkZWNsaW5lZCB0byBpbnN0YWxsIGEgUFRFCiYjNDM7CQkJICogKGUuZy4gYSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIHdpdGggZGV2aWNlIG1lbW9yeQomIzQzOwkJCSAqIGRpc2FibGVkKS4gRmxhZyBpdCBkaXN0aW5jdGx5IHNvIHRoZSBhcmNoIGZhdWx0CiYjNDM7CQkJICogaGFuZGxlciBjYW4gdHJlYXQgdGhlIGFjY2VzcyBhcyBNTUlPIGluc3RlYWQgb2YgYQomIzQzOwkJCSAqIGZhdGFsIC1FRkFVTFQuCiYjNDM7CQkJICovCiYjNDM7CQkJcGZuID0gS1ZNX1BGTl9FUlJfUEZOTUFQOwogCX0gZWxzZSB7CiAJCWlmICgoa2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX05PV0FJVCkgJmFtcDsmYW1wOwogCQkgICAgdm1hX2lzX3ZhbGlkKHZtYSwga2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX1dSSVRFKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gUGF0Y2ggZm9yIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gZmlsZXM6IGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1NVSBhbmQgaG9zdCBpbnRlcmZhY2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgbmV3IGVycm9yIFBGTiwgYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoZSB1c2Ugb2YgYFBGTk1BUGAgaW5kaWNhdGVzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIGZyYW1lIG51bWJlcnMsIGFuZCB0aGUgJiMzNDtlcnJvciYjMzQ7IHBhcnQgaXMgaW1wb3J0YW50LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIG1hbmFnZSBlcnJvcnMgcmVsYXRlZCB0byBmYXVsdGluZyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MsIHdoZXJlIHRoZSBvd25lciBvZiB0aGUgbWVtb3J5IG1hcHBpbmcgKGUuZy4sIGEgZGV2aWNlKSBpcyByZWZ1c2luZyB0byBwcm92aWRlIGEgdmFsaWQgUFRFLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlc291cmNlIG9yIHBlcm1pc3Npb24gaXNzdWUuCgpUaGUga2V5IGNoYW5nZSBpcyBpbiBgaHZhX3RvX3BmbmAsIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHNldCB0byBgS1ZNX1BGTl9FUlJfUEZOTUFQYCBpbnN0ZWFkIG9mIGBLVk1fUEZOX0VSUl9GQVVMVGAgd2hlbiBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgcmV0dXJucyBhbiBlcnJvci4gUmlnaHQsIHNvIGBodmFfdG9fcGZuYCBjYWxscyBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1vZGlmaWNhdGlvbi4gV2XigJlyZSBjaGFuZ2luZyAqaG93KiB3ZSBjbGFzc2lmeSB0aGVzZSBwYXJ0aWN1bGFyIGZhdWx0aW5nIHNjZW5hcmlvcy4gSW5zdGVhZCBvZiBhIGdlbmVyaWMgZmF1bHQsIHdl4oCZcmUgdXNpbmcgYSBtb3JlIHNwZWNpZmljIGVycm9yIGNvZGUuCgpJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgY2FsbCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY2VuYXJpbyB0aGUgY2hhbmdlIGFkZHJlc3Nlcy4gTGV0IG1lIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBodmFfdG9fcGZuYCBpcyBjYWxsZWQsIGFuZCBhbHNvIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGlzIGJlaW5nIHVzZWQsIGJlY2F1c2UgdGhlIGNvbW1lbnRzIHN1Z2dlc3QgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGZhdWx0aW5nIGluIHRoZSBwYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h2YV90b19wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yODUwLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTIte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg4MzpzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODQte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTM4LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTM5OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk0MC1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg0LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTg1Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5OTUtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTY6XHRpZiAoaHZhX3RvX3Bmbl9mYXN0KGtmcCwgXHUwMDI2cGZuKSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5Ny1cdFx0cmV0dXJuIHBmbjtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5OC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk5OTpcdG5wYWdlcyA9IGh2YV90b19wZm5fc2xvdyhrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMDAtXHRpZiAobnBhZ2VzID09IDEpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDEzLVx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTQ6XHRcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcdTAwMjZwZm4pO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVx0XHRpZiAociA9PSAtRUFHQUlOKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzAzNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MzpcdHJldHVybiBodmFfdG9fcGZuKGtmcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIEVycm9yIEhhbmRsaW5nIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gdGhlIEtWTSBjb2RlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGluIGBodmFfdG9fcGZuYCB3aXRoaW4gYGt2bV9tYWluLmNgIOKAkyBzcGVjaWZpY2FsbHksIHRoaXMgc2VjdGlvbjoKCmBgYGMKCWVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX0lPIHwgVk1fUEZOTUFQKSkgewoJCXIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCAmYW1wO3Bmbik7CgkJaWYgKHIgPT0gLUVBR0FJTikKCQkJZ290byByZXRyeTsKCQlpZiAociAmbHQ7IDApCgkJCXBmbiA9IEtWTV9QRk5fRVJSX1BGTk1BUDsKYGBgCgpJdCBsb29rcyBsaWtlIHRoZSBrZXkgaXMgaG93IHRoaXMgaGFuZGxlcyB0aGUgZXJyb3IgY2FzZSBmb3IgYFZNX0lPYCBhbmQgYFZNX1BGTk1BUGAgbWFwcGluZ3MsIHRyZWF0aW5nIHRoZW0gYXMgaWYgdGhleSYjMzk7cmUgTWVtb3J5LU1hcHBlZCBJL08uIEludGVyZXN0aW5nLiBBbmQgdGhlbiBpbiBgbW11LmNgOgoKYGBgYwoJaWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC0mZ3Q7cGZuKSkpIHsKCQlpZiAoZmF1bHQtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApCgkJCXJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTsKCgkJcmV0dXJuIGt2bV9oYW5kbGVfZXJyb3JfcGZuKHZjcHUsIGZhdWx0KTsKCX0KYGBgCgpUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSW5zdGVhZCBvZiBhIGZhdGFsIGVycm9yLCBpdCYjMzk7cyBoYW5kbGluZyBhIHNwZWNpZmljIE1NSU8tbGlrZSBjYXNlLiBEZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBhcmVhLgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIGFyb3VuZCBga3ZtX21tdV9mYXVsdGluX3BmbmAsIGBodmFfdG9fcGZuYCwgYW5kIGBodmFfdG9fcGZuX3JlbWFwcGVkYC4gV2FpdCwgYGh2YV90b19wZm5gIGlzIGEgaG90IHBhdGggZnVuY3Rpb24hIEl0JiMzOTtzIGludm9sdmVkIGluIGV2ZXJ5IHNpbmdsZSBwYWdlIGZhdWx0IHRoYXQgbmVlZHMgdG8gcmVzb2x2ZSBhIFBGTi4gYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGlzIGFub3RoZXIgaG90IHBhdGguIE9rYXksIGJ1dCBsZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBnZXRzIGNhbGxlZCBoZXJlLiBPaCwgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBpcyBjYWxsZWQgYXMgd2VsbC4gT2theS4KCmBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyBsZXNzIG9mIGEgaG90IHNwb3QsIGJ1dCBpdCYjMzk7cyBzcGVjaWZpYyB0byBgVk1fSU9gIGFuZCBgVk1fUEZOTUFQYCDigJMgdGhlIHZlcnkgY2FzZSB3ZSYjMzk7cmUgdGFyZ2V0aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yOTI4PXN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MzgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5Mzk6c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYy0yOTQwLVx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3Bmbilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5ODU9a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDEzLVx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTQ6XHRcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcdTAwMjZwZm4pO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVx0XHRpZiAociA9PSAtRUFHQUlOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgOgoKKipEaXZpbmcgaW50byBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHpvb20gaW4gb24gaXRzIHB1cnBvc2UgYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byBLVk0sIHRoZSBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lLiBUaGUgJiMzNDtub3Nsb3RfZmF1bHQmIzM0OyBwYXJ0IGxpa2VseSBpbmRpY2F0ZXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBpc3N1ZSByZWxhdGVkIHRvIG1lbW9yeSBzbG90IG1hbmFnZW1lbnQgd2l0aGluIGEgdmlydHVhbCBtYWNoaW5lJiMzOTtzIGFkZHJlc3Mgc3BhY2UuIFByb2JhYmx5LCB0aGUgaHlwZXJ2aXNvciBkZXRlY3RzIHRoYXQgdGhlIGd1ZXN0IE9TIGhhcyBhdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWVtb3J5IGxvY2F0aW9uIGl0IHNob3VsZG4mIzM5O3QuCgpOb3csIG15IG1pbmQgc3RhcnRzIHRvIHJhY2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXI6CgoqICAgKipXaGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhpcyBmYXVsdD8qKiBJcyBpdCBhIGd1ZXN0IE9TIGJ1ZywgYSBtaXNjb25maWd1cmVkIG1lbW9yeSBtYXBwaW5nLCBvciBzb21ldGhpbmcgbW9yZSBpbnNpZGlvdXM/IE15IGV4cGVydCBpbnR1aXRpb24ga2lja3MgaW4sIGFuZCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBjYXVzZXM6IHBhZ2UgdGFibGUgaXNzdWVzLCBpbmNvcnJlY3QgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBjYWxjdWxhdGlvbiwgb3IgbWF5YmUgYSBwcm9ibGVtIHdpdGggZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24uCiogICAqKldoYXQgYXJlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBmYXVsdD8qKiBJcyBpdCBhIHNpbXBsZSByZWNvdmVyYWJsZSBlcnJvciwgb3IgZG9lcyBpdCBtZWFuIHRoZSBWTSBpcyBpbiBhIHByZWNhcmlvdXMgc3RhdGU/IElzIGl0IHNhZmUgdG8gY29udGludWUsIG9yIGlzIGEgY29udHJvbGxlZCBzaHV0ZG93biBuZWNlc3Nhcnk/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGlzIGZhdWx0IG9jY3Vycy4KKiAgICoqV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHNvbHV0aW9ucz8qKiBEb2VzIHRoZSBjb2RlIGF0dGVtcHQgdG8gY29ycmVjdCB0aGUgZXJyb3IsIG9yIGRvZXMgaXQgc2ltcGx5IHJlcG9ydCBpdD8gQ2FuIHdlIHJlbWFwIHRoZSBtZW1vcnksIGludmFsaWRhdGUgdGhlIHRyYW5zbGF0aW9uLCBvciBldmVuIGVtdWxhdGUgdGhlIGZhaWxpbmcgb3BlcmF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMsIGlmIGl0IGNhbGxzIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gY29kZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG9mIHRoZSBvcHRpb25zIGFyZSByaXNreSBvciB3aGV0aGVyIGEgVk0gZXhpdCBpcyBuZWNlc3NhcnkuCiogICAqKldoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW4gdGhlIGxhcmdlciBwaWN0dXJlPyoqIFdoYXQgcGFydCBvZiB0aGUgS1ZNIGFyY2hpdGVjdHVyZSBpcyBpdCBpbnZvbHZlZCBpbj8gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsIHRvIHVuZGVyc3RhbmQgaG93IHNsb3RzLCBwYWdlIHRhYmxlcywgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXJlIHJlbGF0ZWQuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGZhdWx0cywgYW5kIHRoYXQgY2FuIHRyaWdnZXIgbG90cyBvZiBpbnRlcmVzdGluZyBxdWVzdGlvbnMuCgpTbywgSSB3aWxsIGJlZ2luIGJ5IGV4YW1pbmluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBmdW5jdGlvbiwgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgbG9nZ2luZyBzdGF0ZW1lbnRzLiBUaGVuIEkgY2FuIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBtYWtlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuIE15IHBsYW4gaXMgdG8gc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX25vc2xvdF9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNTA5PXN0YXRpYyBpbnQga3ZtX2hhbmRsZV9lcnJvcl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzUzMS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzUzMjpzdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzUzMy1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjY0PXN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjkyLVx0aWYgKHVubGlrZWx5KCFzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDY5MzpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Njk0LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDcyMS1cdFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3MjI6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzIzLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc3My1cdFx0aWYgKGZhdWx0LVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3NzQ6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Nzc1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc3OS1cdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDc4MDpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyBpbiBLVk0gTU1JTyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIG1pZ2h0IGJlIHNlZWluZyBwZXJmb3JtYW5jZSBoaXRzLCBwYXJ0aWN1bGFybHkgd2l0aCBNTUlPIGluIEtWTS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAuIEkga25vdyBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGl0IGdldHMgY2FsbGVkIGZvciBhbnkgTU1JTyBhY2Nlc3MsIHNvIGl0JiMzOTtzIGEgdmVyeSBob3QgcGF0aC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcGxhY2UgdG8gbG9vay4gQnV0IGBodmFfdG9fcGZuX3JlbWFwcGVkYC4uLiB0aGF0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIFZNX0lPIGFuZCBWTV9QRk5NQVAsIHNvIGl0IHdhcnJhbnRzIGNsb3NlIGV4YW1pbmF0aW9uIHRvby4KCk5vdyBJIG5lZWQgdG8gcmVtZW1iZXIgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcy4gSSBzdXNwZWN0IHRoYXQgS1ZNIGlzLCBvYnZpb3VzbHksIGEgcHJlcmVxdWlzaXRlLCBidXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIEtWTSBmb3IgYW55IHBvdGVudGlhbGx5IHJlbGV2YW50IG9wdGlvbnMg4oCTIEkmIzM5O2xsIHN0YXJ0IHdpdGggYHZpcnQva3ZtL0tjb25maWdgIGFuZCB0aGVuIG1heWJlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gVGhhdCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gY29uZmlndXJhYmxlIGVsZW1lbnRzIHRoYXQgbWlnaHQgYmUgYWZmZWN0aW5nIHRoZSBwZXJmb3JtYW5jZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIFBlcmZvcm1hbmNlIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgY29kZSDigJMgc3BlY2lmaWNhbGx5IGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGUgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGBLVk1gLCBzbyB0aGF0JiMzOTtzIGhlbHBmdWwgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmUuCgpUaGUgZmlyc3QgZnVuY3Rpb24gdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgLiBUaGF0IHNlZW1zIHNpZ25pZmljYW50LCBhbmQgdGhlIGNhbGwgc2l0ZXMgaW52b2x2ZSBgdm1hLSZndDt2bV9mbGFnc2Agd2l0aCBlaXRoZXIgYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBzZXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIHRob3VnaD8KCkFoLCBoZXJlJiMzOTtzIGFub3RoZXIgb25lOiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLiBUaGF0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGBmYXVsdC0mZ3Q7cGZuYCBpcyBlcXVhbCB0byBgS1ZNX1BGTl9FUlJfUEZOTUFQYC4gR29vZC4gSSB0aGluayBJIGNhbiB1c2UgYm90aCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBjaGFuZ2UuCgpXYWl0LCBpc24mIzM5O3QgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBvZnRlbiB1c2VkIGluIHRoZSBNTUlPIGhvdCBwYXRoPyBUaGF0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgb2Z0ZW4gaXQmIzM5O3MgZ2V0dGluZyBjYWxsZWQuIE5vdyBsZXQmIzM5O3MgY2hlY2sgaWYgYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIGFsc28gYSBob3QgcGF0aC4gSXQmIzM5O3Mgb25seSBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggZWl0aGVyIGBWTV9JT2Agb3IgYFZNX1BGTk1BUGAgZmxhZ3MsIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBJJiMzOTtsbCBub3cgZGlnIGludG8gYHZpcnQva3ZtL2t2bV9tYWluLmNgIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodmFfdG9fcGZuX3JlbWFwcGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9Mjk4NT1rdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTMtXHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNDpcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTUtXHRcdGlmIChyID09IC1FQUdBSU4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHJlYWxseSBzY3J1dGluaXplIHRoaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZnJlc2ggbWVudGFsIG1vZGVsIGFuZCB0aGVuIHZlcmlmeSBteSBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGNvcmUgbG9naWM6IHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQgd2l0aCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljcy4gQXJlIHdlIGhhbmRsaW5nIHBhZ2UgdGFibGVzIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHRoZSBleHBlY3RlZCBlZGdlIGNhc2VzLiBBbmQsIGltcG9ydGFudGx5LCBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgaXQgYmVoYXZlcyBwcmVkaWN0YWJseSBpbiB0aGUgZmFjZSBvZiB1bmV4cGVjdGVkIGlucHV0IG9yIHN5c3RlbSBzdGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkzOTpcdHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI5NDA6XHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4yOTQxOlx0e1xuMjk0MjpcdFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGtmcC1cdTAwM2VodmEgfTtcbjI5NDM6XHRcdGJvb2wgd3JpdGVfZmF1bHQgPSBrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEU7XG4yOTQ0Olx0XHRpbnQgcjtcbjI5NDU6XHRcbjI5NDY6XHRcdC8qXG4yOTQ3Olx0XHQgKiBSZW1hcHBlZCBtZW1vcnkgY2Fubm90IGJlIHBpbm5lZCBpbiBhbnkgbWVhbmluZ2Z1bCBzZW5zZS4gIEJhaWwgaWZcbjI5NDg6XHRcdCAqIHRoZSBjYWxsZXIgd2FudHMgdG8gcGluIHRoZSBwYWdlLCBpLmUuIGFjY2VzcyB0aGUgcGFnZSBvdXRzaWRlIG9mXG4yOTQ5Olx0XHQgKiBNTVUgbm90aWZpZXIgcHJvdGVjdGlvbiwgYW5kIHVuc2FmZSB1bWFwcGluZ3MgYXJlIGRpc2FsbG93ZWQuXG4yOTUwOlx0XHQgKi9cbjI5NTE6XHRcdGlmIChrZnAtXHUwMDNlcGluIFx1MDAyNlx1MDAyNiAhYWxsb3dfdW5zYWZlX21hcHBpbmdzKVxuMjk1MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI5NTM6XHRcbjI5NTQ6XHRcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuMjk1NTpcdFx0aWYgKHIpIHtcbjI5NTY6XHRcdFx0LypcbjI5NTc6XHRcdFx0ICogZ2V0X3VzZXJfcGFnZXMgZmFpbHMgZm9yIFZNX0lPIGFuZCBWTV9QRk5NQVAgdm1hcyBhbmQgZG9lc1xuMjk1ODpcdFx0XHQgKiBub3QgY2FsbCB0aGUgZmF1bHQgaGFuZGxlciwgc28gZG8gaXQgaGVyZS5cbjI5NTk6XHRcdFx0ICovXG4yOTYwOlx0XHRcdGJvb2wgdW5sb2NrZWQgPSBmYWxzZTtcbjI5NjE6XHRcdFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwga2ZwLVx1MDAzZWh2YSxcbjI5NjI6XHRcdFx0XHRcdCAgICAgKHdyaXRlX2ZhdWx0ID8gRkFVTFRfRkxBR19XUklURSA6IDApLFxuMjk2MzpcdFx0XHRcdFx0ICAgICBcdTAwMjZ1bmxvY2tlZCk7XG4yOTY0Olx0XHRcdGlmICh1bmxvY2tlZClcbjI5NjU6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjI5NjY6XHRcdFx0aWYgKHIpXG4yOTY3Olx0XHRcdFx0cmV0dXJuIHI7XG4yOTY4Olx0XG4yOTY5Olx0XHRcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuMjk3MDpcdFx0XHRpZiAocilcbjI5NzE6XHRcdFx0XHRyZXR1cm4gcjtcbjI5NzI6XHRcdH1cbjI5NzM6XHRcbjI5NzQ6XHRcdGlmICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgIWFyZ3Mud3JpdGFibGUpIHtcbjI5NzU6XHRcdFx0KnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7XG4yOTc2Olx0XHRcdGdvdG8gb3V0O1xuMjk3NzpcdFx0fVxuMjk3ODpcdFxuMjk3OTpcdFx0KnBfcGZuID0ga3ZtX3Jlc29sdmVfcGZuKGtmcCwgTlVMTCwgXHUwMDI2YXJncywgYXJncy53cml0YWJsZSk7XG4yOTgwOlx0b3V0OlxuMjk4MTpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4yOTgyOlx0XHRyZXR1cm4gcjtcbjI5ODM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmF1bHQgSGFuZGxpbmcgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRoZSBjaGFuZ2UgSSYjMzk7bSBzZWVpbmcgaXMgd2l0aGluIGBodmFfdG9fcGZuYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBkZWFsaW5nIHdpdGggYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBmbGFncy4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGh2YV90b19wZm5fcmVtYXBwZWRgIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0JiMzOTtzIGNsZWFybHkgaW52b2x2ZWQgaW4gdHJhbnNsYXRpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBmcmFtZSBudW1iZXJzIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KCkkgbm90aWNlZCBga3ZtX21tdV9mYXVsdGluX3BmbmAgd2FzIGFsc28gbW9kaWZpZWQsIGJ1dCBnaXZlbiB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG9uIGEgaG90IHBhdGgsIEkmIzM5O2QgcmF0aGVyIGZvY3VzIG9uIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGlzLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGNhbGxlZCB3aGVuIHRoZSBgZmF1bHQtJmd0O3BmbmAgaXMgZXF1YWwgdG8gYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoaXMgbWFrZXMgbWUgbGVhbiBldmVuIG1vcmUgdG93YXJkcyBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYmVpbmcgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLgoKTGV0JiMzOTtzIG5vdyB0dXJuIHRvIHRoZSBga3ZtX21tdV9mYXVsdGluX3BmbmAgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgbGV0JiMzOTtzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NzUwOlx0XHQgKiBEbyB0aGUgcHJlLWNoZWNrIGV2ZW4gZm9yIG5vbi1wcmVlbXRpYmxlIGtlcm5lbHMsIGkuZS4gZXZlbiBpZiBLVk1cbjQ3NTE6XHRcdCAqIHdpbGwgbmV2ZXIgeWllbGQgbW11X2xvY2sgaW4gcmVzcG9uc2UgdG8gY29udGVudGlvbiwgYXMgdGhpcyB2Q1BVIGlzXG40NzUyOlx0XHQgKiAqZ3VhcmFudGVlZCogdG8gbmVlZCB0byByZXRyeSwgaS5lLiB3YWl0aW5nIHVudGlsIG1tdV9sb2NrIGlzIGhlbGRcbjQ3NTM6XHRcdCAqIHRvIGRldGVjdCByZXRyeSBndWFyYW50ZWVzIHRoZSB3b3JzdCBjYXNlIGxhdGVuY3kgZm9yIHRoZSB2Q1BVLlxuNDc1NDpcdFx0ICovXG40NzU1Olx0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuX3Vuc2FmZShrdm0sIGZhdWx0LVx1MDAzZW1tdV9zZXEsIGZhdWx0LVx1MDAzZWdmbikpXG40NzU2Olx0XHRcdHJldHVybiBSRVRfUEZfUkVUUlk7XG40NzU3Olx0XG40NzU4Olx0XHRyZXQgPSBfX2t2bV9tbXVfZmF1bHRpbl9wZm4odmNwdSwgZmF1bHQpO1xuNDc1OTpcdFx0aWYgKHJldCAhPSBSRVRfUEZfQ09OVElOVUUpXG40NzYwOlx0XHRcdHJldHVybiByZXQ7XG40NzYxOlx0XG40NzYyOlx0XHRpZiAodW5saWtlbHkoaXNfZXJyb3JfcGZuKGZhdWx0LVx1MDAzZXBmbikpKSB7XG40NzYzOlx0XHRcdC8qXG40NzY0Olx0XHRcdCAqIEEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiBpcyBiYWNrZWQgYnkgYSBWTV9JTy9WTV9QRk5NQVBcbjQ3NjU6XHRcdFx0ICogbWFwcGluZyB3aG9zZSBmYXVsdCBoYW5kbGVyIHJlZnVzZXMgdG8gaW5zdGFsbCBhIFBURSB3aGlsZSB0aGVcbjQ3NjY6XHRcdFx0ICogZGV2aWNlJiMzOTtzIG1lbW9yeSBzcGFjZSBpcyBkaXNhYmxlZCAoZS5nLiB0aGUgZ3Vlc3QgY2xlYXJlZFxuNDc2NzpcdFx0XHQgKiBQQ0lfQ09NTUFORC5NRU0pLiBUaGUgZmF1bHQgdGhlbiBmYWlscyBldmVuIHRob3VnaCB0aGUgbWVtc2xvdFxuNDc2ODpcdFx0XHQgKiBpcyBzdGlsbCB2YWxpZC4gVHJlYXQgc3VjaCBhbiBhY2Nlc3MgYXMgTU1JTyBhbmQgZW11bGF0ZSBpdCBzb1xuNDc2OTpcdFx0XHQgKiB0aGUgZ3Vlc3Qgb2JzZXJ2ZXMgVW5zdXBwb3J0ZWQgUmVxdWVzdCBzZW1hbnRpY3MsIG1hdGNoaW5nXG40NzcwOlx0XHRcdCAqIGJhcmUgbWV0YWwsIGluc3RlYWQgb2Yga2lsbGluZyB0aGUgVk0gd2l0aCAtRUZBVUxULiBHZW51aW5lLFxuNDc3MTpcdFx0XHQgKiBub24tcGZubWFwIGVycm9ycyBzdGlsbCB0YWtlIHRoZSBmYXRhbCBwYXRoLlxuNDc3MjpcdFx0XHQgKi9cbjQ3NzM6XHRcdFx0aWYgKGZhdWx0LVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXG40Nzc0Olx0XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuNDc3NTpcdFxuNDc3NjpcdFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9lcnJvcl9wZm4odmNwdSwgZmF1bHQpO1xuNDc3NzpcdFx0fVxuNDc3ODpcdFxuNDc3OTpcdFx0aWYgKFdBUk5fT05fT05DRSghZmF1bHQtXHUwMDNlc2xvdCB8fCBpc19ub3Nsb3RfcGZuKGZhdWx0LVx1MDAzZXBmbikpKVxuNDc4MDpcdFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XG40NzgxOlx0XG40NzgyOlx0XHQvKlxuNDc4MzpcdFx0ICogQ2hlY2sgYWdhaW4gZm9yIGEgcmVsZXZhbnQgbW11X25vdGlmaWVyIGludmFsaWRhdGlvbiBldmVudCBwdXJlbHkgdG9cbjQ3ODQ6XHRcdCAqIGF2b2lkIGNvbnRlbmRpbmcgbW11X2xvY2suICBNb3N0IGludmFsaWRhdGlvbnMgd2lsbCBiZSBkZXRlY3RlZCBieVxuNDc4NTpcdFx0ICogdGhlIHByZXZpb3VzIGNoZWNrLCBidXQgY2hlY2tpbmcgaXMgZXh0cmVtZWx5IGNoZWFwIHJlbGF0aXZlIHRvIHRoZVxuNDc4NjpcdFx0ICogb3ZlcmFsbCBjb3N0IG9mIGZhaWxpbmcgdG8gZGV0ZWN0IHRoZSBpbnZhbGlkYXRpb24gdW50aWwgYWZ0ZXJcbjQ3ODc6XHRcdCAqIG1tdV9sb2NrIGlzIGFjcXVpcmVkLlxuNDc4ODpcdFx0ICovXG40Nzg5Olx0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuX3Vuc2FmZShrdm0sIGZhdWx0LVx1MDAzZW1tdV9zZXEsIGZhdWx0LVx1MDAzZWdmbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MzIKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogNTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGlzIHdpdGhpbiBga3ZtX21tdV9mYXVsdGluX3BmbmAsIGJ1dCB0aGF0JiMzOTtzIGEgaG90IHBhdGgsIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGluY2x1ZGluZyBpdCBkaXJlY3RseSBpbiBteSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBBZnRlciBhIGJpdCBvZiB0aG91Z2h0LCBpdCYjMzk7cyBjbGVhciB0aGF0IGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIGRlYWxpbmcgd2l0aCBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIG1hcHBpbmdzLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGFyZWEgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcuIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgbG9va2VkIHByb21pc2luZyBpbml0aWFsbHksIGJ1dCB0aGF0JiMzOTtzIGludm9rZWQgZm9yICphbGwqIE1NSU8gYWNjZXNzZXMsIHRvbyBicm9hZCBhIHNjb3BlIGZvciBteSBwdXJwb3Nlcy4gU28gYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIHRoZSBzd2VldCBzcG90LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgT2J2aW91c2x5LCBgS1ZNYCBpcyBlc3NlbnRpYWwuICBTaW5jZSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYSBQQ0kgQkFSIGFuZCBkaXNhYmxlZCBkZXZpY2UgbWVtb3J5LCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGxvb2sgZm9yIFZGSU8tc3BlY2lmaWMgb3B0aW9ucy4gQnV0LCB0aGUgZGVzY3JpcHRpb24gc2F5cyBpdCBjYW4gaGFwcGVuIGZvciBhbnkgYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBtYXBwaW5nLiAgU28sIEkgZG9uJiMzOTt0ICpzdHJpY3RseSogbmVlZCBWRklPLCBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgb3B0aW9uczsgYEtWTWAgYW5kIGBLVk1fWDg2YCBhcmUgYm90aCB0cmlzdGF0ZSBvcHRpb25zLiBJJiMzOTtsbCBhZGQgYEtWTWAgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgLgoKSnVzdCB0byByZWNhcDogdGhlIHBhdGNoIGFsdGVycyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlci4gSXQgdHJlYXRzIGZhaWx1cmVzIGR1cmluZyBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIG1hcHBpbmdzIGFzIE1NSU8gZXJyb3JzIHJhdGhlciB0aGFuIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBLVk0gbG9naWMgaXRzZWxmLCB3aGljaCBpcyBkZWZpbml0ZWx5IGZ1enotd29ydGh5LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24mIzM5O3QgbGVhZCB0byByZWdyZXNzaW9ucyBvciBjcmFzaGVzLiBTbywgdGhlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBjaG9pY2Ugb2YgYGh2YV90b19wZm5fcmVtYXBwZWRgIGFzIHRoZSBmb2N1cyBzeW1ib2wgaXMgdmFsaWQsIHNpbmNlIGl0IGlzIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkLgoKQSBxdWljayByZXZpZXcgb2YgdGhlIGNvZGUgY29uZmlybXMgdGhpcy4gU3BlY2lmaWNhbGx5LCB0aGUgYGh2YV90b19wZm5gIGZ1bmN0aW9uIHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2AsIGFuZCB0aGUgY29kZSBzaG93cyB0aGF0IGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gdGFyZ2V0LCBzaW5jZSB0aGUgcGF0aCB3aWxsIHJlc3VsdCBpbiBleGVjdXRpb24gb2YgYGh2YV90b19wZm5fcmVtYXBwZWRgLCB3aGljaCBpcyBub3QgYSBob3QgcGF0aC4KClNvLCBoZXJlJiMzOTtzIHRoZSBmaW5hbCBjYWxsOgoKKiAgIEZvY3VzIHN5bWJvbHM6IGBodmFfdG9fcGZuX3JlbWFwcGVkYAoqICAgRW5hYmxlIGNvbmZpZ3M6IGBLVk1gCgpJJiMzOTttIGNvbmZpZGVudCB3aXRoIHRoaXMsIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB0cmVhdCBmYWlsdXJlcyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBlcnJvcnMgKGUuZy4sIGRpc2FibGVkIFBDSSBCQVJzKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbXVsYXRlcyBNTUlPIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB0cmVhdCBmYWlsdXJlcyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBlcnJvcnMgKGUuZy4sIGRpc2FibGVkIFBDSSBCQVJzKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbXVsYXRlcyBNTUlPIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjEzLjg2MzYzOTY4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDkyODY1NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5fcmVtYXBwZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB0cmVhdCBmYWlsdXJlcyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBlcnJvcnMgKGUuZy4sIGRpc2FibGVkIFBDSSBCQVJzKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbXVsYXRlcyBNTUlPIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBjcmFzaGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDoxMy44NjM2NDUxODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODYzMzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1ODliN2MyM2U0NmZlZWQyNzJhOGRjNzhhNjIzNWJkNjAwNWVhY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjEgMTQ6MDA6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCA5MTg0M2U5MjI0ZDA0NS4uMTE1ZTJjNGRiNWZhMDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNDc1OSw4ICs0NzU5LDIyIEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChyZXQgIT0gUkVUX1BGX0NPTlRJTlVFKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC1cXHUwMDNlcGZuKSkpXFxuK1xcdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiBpcyBiYWNrZWQgYnkgYSBWTV9JTy9WTV9QRk5NQVBcXG4rXFx0XFx0ICogbWFwcGluZyB3aG9zZSBmYXVsdCBoYW5kbGVyIHJlZnVzZXMgdG8gaW5zdGFsbCBhIFBURSB3aGlsZSB0aGVcXG4rXFx0XFx0ICogZGV2aWNlJ3MgbWVtb3J5IHNwYWNlIGlzIGRpc2FibGVkIChlLmcuIHRoZSBndWVzdCBjbGVhcmVkXFxuK1xcdFxcdCAqIFBDSV9DT01NQU5ELk1FTSkuIFRoZSBmYXVsdCB0aGVuIGZhaWxzIGV2ZW4gdGhvdWdoIHRoZSBtZW1zbG90XFxuK1xcdFxcdCAqIGlzIHN0aWxsIHZhbGlkLiBUcmVhdCBzdWNoIGFuIGFjY2VzcyBhcyBNTUlPIGFuZCBlbXVsYXRlIGl0IHNvXFxuK1xcdFxcdCAqIHRoZSBndWVzdCBvYnNlcnZlcyBVbnN1cHBvcnRlZCBSZXF1ZXN0IHNlbWFudGljcywgbWF0Y2hpbmdcXG4rXFx0XFx0ICogYmFyZSBtZXRhbCwgaW5zdGVhZCBvZiBraWxsaW5nIHRoZSBWTSB3aXRoIC1FRkFVTFQuIEdlbnVpbmUsXFxuK1xcdFxcdCAqIG5vbi1wZm5tYXAgZXJyb3JzIHN0aWxsIHRha2UgdGhlIGZhdGFsIHBhdGguXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZmF1bHQtXFx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXFxuK1xcdFxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG4rXFxuIFxcdFxcdHJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVxcdTAwM2VzbG90IHx8IGlzX25vc2xvdF9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IDRjMTRhZWUxZmIwNjMzLi5kYzU5NzNlNDAwNzIxOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtOTksNiArOTksMTQgQEBcXG4gI2RlZmluZSBLVk1fUEZOX0VSUl9ST19GQVVMVFxcdChLVk1fUEZOX0VSUl9NQVNLICsgMilcXG4gI2RlZmluZSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HXFx0KEtWTV9QRk5fRVJSX01BU0sgKyAzKVxcbiAjZGVmaW5lIEtWTV9QRk5fRVJSX05FRURTX0lPXFx0KEtWTV9QRk5fRVJSX01BU0sgKyA0KVxcbisvKlxcbisgKiBGYXVsdGluZyBpbiBhIFZNX0lPL1ZNX1BGTk1BUCBtYXBwaW5nIGZhaWxlZCBiZWNhdXNlIHRoZSBvd25lcidzIGZhdWx0XFxuKyAqIGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURSwgZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2hvc2VcXG4rICogZGV2aWNlIG1lbW9yeSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKHRoZSBndWVzdCBjbGVhcmVkIFBDSV9DT01NQU5ELk1FTSkuXFxuKyAqIFRoZSBtZW1zbG90IGlzIHZhbGlkOyB0aGUgYWNjZXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIE1NSU8gcmF0aGVyIHRoYW4gYVxcbisgKiBmYXRhbCAtRUZBVUxULlxcbisgKi9cXG4rI2RlZmluZSBLVk1fUEZOX0VSUl9QRk5NQVBcXHQoS1ZNX1BGTl9FUlJfTUFTSyArIDUpXFxuIFxcbiAvKlxcbiAgKiBlcnJvciBwZm5zIGluZGljYXRlIHRoYXQgdGhlIGdmbiBpcyBpbiBzbG90IGJ1dCBmYWlsZCB0b1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbmluZGV4IDg4MWY5MmQ3YTQ2OWU3Li5mMjMyZmMyZjQyMzgwYSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0zMDE1LDcgKzMwMTUsMTQgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuIFxcdFxcdGlmIChyID09IC1FQUdBSU4pXFxuIFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBvd25lcidzIGZhdWx0IGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURVxcbitcXHRcXHRcXHQgKiAoZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2l0aCBkZXZpY2UgbWVtb3J5XFxuK1xcdFxcdFxcdCAqIGRpc2FibGVkKS4gRmxhZyBpdCBkaXN0aW5jdGx5IHNvIHRoZSBhcmNoIGZhdWx0XFxuK1xcdFxcdFxcdCAqIGhhbmRsZXIgY2FuIHRyZWF0IHRoZSBhY2Nlc3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGFcXG4rXFx0XFx0XFx0ICogZmF0YWwgLUVGQVVMVC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBmbiA9IEtWTV9QRk5fRVJSX1BGTk1BUDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKChrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9OT1dBSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjE0LjMyMjg2OTIzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMzM2Mjg0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHZhX3RvX3Bmbl9yZW1hcHBlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGVyIHRvIHRyZWF0IGZhaWx1cmVzIGluIFZNX0lPL1ZNX1BGTk1BUCBtYXBwaW5ncyBhcyBNTUlPIGluc3RlYWQgb2YgZmF0YWwgZXJyb3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIGVycm9ycyAoZS5nLiwgZGlzYWJsZWQgUENJIEJBUnMpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGVtdWxhdGVzIE1NSU8gYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGNyYXNoZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzU4OWI3YzIzZTQ2ZmVlZDI3MmE4ZGM3OGE2MjM1YmQ2MDA1ZWFjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDIxIDE0OjAwOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDkxODQzZTkyMjRkMDQ1Li4xMTVlMmM0ZGI1ZmEwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC00NzU5LDggKzQ3NTksMjIgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChyZXQgIT0gUkVUX1BGX0NPTlRJTlVFKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbitcdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXHUwMDNlcGZuKSkpIHtcbitcdFx0LypcbitcdFx0ICogQSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIGlzIGJhY2tlZCBieSBhIFZNX0lPL1ZNX1BGTk1BUFxuK1x0XHQgKiBtYXBwaW5nIHdob3NlIGZhdWx0IGhhbmRsZXIgcmVmdXNlcyB0byBpbnN0YWxsIGEgUFRFIHdoaWxlIHRoZVxuK1x0XHQgKiBkZXZpY2UncyBtZW1vcnkgc3BhY2UgaXMgZGlzYWJsZWQgKGUuZy4gdGhlIGd1ZXN0IGNsZWFyZWRcbitcdFx0ICogUENJX0NPTU1BTkQuTUVNKS4gVGhlIGZhdWx0IHRoZW4gZmFpbHMgZXZlbiB0aG91Z2ggdGhlIG1lbXNsb3RcbitcdFx0ICogaXMgc3RpbGwgdmFsaWQuIFRyZWF0IHN1Y2ggYW4gYWNjZXNzIGFzIE1NSU8gYW5kIGVtdWxhdGUgaXQgc29cbitcdFx0ICogdGhlIGd1ZXN0IG9ic2VydmVzIFVuc3VwcG9ydGVkIFJlcXVlc3Qgc2VtYW50aWNzLCBtYXRjaGluZ1xuK1x0XHQgKiBiYXJlIG1ldGFsLCBpbnN0ZWFkIG9mIGtpbGxpbmcgdGhlIFZNIHdpdGggLUVGQVVMVC4gR2VudWluZSxcbitcdFx0ICogbm9uLXBmbm1hcCBlcnJvcnMgc3RpbGwgdGFrZSB0aGUgZmF0YWwgcGF0aC5cbitcdFx0ICovXG4rXHRcdGlmIChmYXVsdC1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUEZOTUFQKVxuK1x0XHRcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcbitcbiBcdFx0cmV0dXJuIGt2bV9oYW5kbGVfZXJyb3JfcGZuKHZjcHUsIGZhdWx0KTtcbitcdH1cbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbiBcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggNGMxNGFlZTFmYjA2MzMuLmRjNTk3M2U0MDA3MjE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC05OSw2ICs5OSwxNCBAQFxuICNkZWZpbmUgS1ZNX1BGTl9FUlJfUk9fRkFVTFRcdChLVk1fUEZOX0VSUl9NQVNLICsgMilcbiAjZGVmaW5lIEtWTV9QRk5fRVJSX1NJR1BFTkRJTkdcdChLVk1fUEZOX0VSUl9NQVNLICsgMylcbiAjZGVmaW5lIEtWTV9QRk5fRVJSX05FRURTX0lPXHQoS1ZNX1BGTl9FUlJfTUFTSyArIDQpXG4rLypcbisgKiBGYXVsdGluZyBpbiBhIFZNX0lPL1ZNX1BGTk1BUCBtYXBwaW5nIGZhaWxlZCBiZWNhdXNlIHRoZSBvd25lcidzIGZhdWx0XG4rICogaGFuZGxlciBkZWNsaW5lZCB0byBpbnN0YWxsIGEgUFRFLCBlLmcuIGEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiB3aG9zZVxuKyAqIGRldmljZSBtZW1vcnkgaXMgY3VycmVudGx5IGRpc2FibGVkICh0aGUgZ3Vlc3QgY2xlYXJlZCBQQ0lfQ09NTUFORC5NRU0pLlxuKyAqIFRoZSBtZW1zbG90IGlzIHZhbGlkOyB0aGUgYWNjZXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIE1NSU8gcmF0aGVyIHRoYW4gYVxuKyAqIGZhdGFsIC1FRkFVTFQuXG4rICovXG4rI2RlZmluZSBLVk1fUEZOX0VSUl9QRk5NQVBcdChLVk1fUEZOX0VSUl9NQVNLICsgNSlcbiBcbiAvKlxuICAqIGVycm9yIHBmbnMgaW5kaWNhdGUgdGhhdCB0aGUgZ2ZuIGlzIGluIHNsb3QgYnV0IGZhaWxkIHRvXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDg4MWY5MmQ3YTQ2OWU3Li5mMjMyZmMyZjQyMzgwYSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0zMDE1LDcgKzMwMTUsMTQgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG4gXHRcdGlmIChyID09IC1FQUdBSU4pXG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0aWYgKHIgXHUwMDNjIDApXG4tXHRcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgb3duZXIncyBmYXVsdCBoYW5kbGVyIGRlY2xpbmVkIHRvIGluc3RhbGwgYSBQVEVcbitcdFx0XHQgKiAoZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2l0aCBkZXZpY2UgbWVtb3J5XG4rXHRcdFx0ICogZGlzYWJsZWQpLiBGbGFnIGl0IGRpc3RpbmN0bHkgc28gdGhlIGFyY2ggZmF1bHRcbitcdFx0XHQgKiBoYW5kbGVyIGNhbiB0cmVhdCB0aGUgYWNjZXNzIGFzIE1NSU8gaW5zdGVhZCBvZiBhXG4rXHRcdFx0ICogZmF0YWwgLUVGQVVMVC5cbitcdFx0XHQgKi9cbitcdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9QRk5NQVA7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoKGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9OT1dBSVQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdm1hX2lzX3ZhbGlkKHZtYSwga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjE0LjMyMjg3MDU2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTYxMjY3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIFBhdGNoIGZvciBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBzb21lIGNvcmUgS1ZNIGZpbGVzOiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBhbmQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1NVSBhbmQgaG9zdCBpbnRlcmZhY2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgbmV3IGVycm9yIFBGTiwgYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoZSB1c2Ugb2YgYFBGTk1BUGAgaW5kaWNhdGVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgZnJhbWUgbnVtYmVycywgYW5kIHRoZSBcImVycm9yXCIgcGFydCBpcyBpbXBvcnRhbnQuIEl0IGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBtYW5hZ2UgZXJyb3JzIHJlbGF0ZWQgdG8gZmF1bHRpbmcgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzLCB3aGVyZSB0aGUgb3duZXIgb2YgdGhlIG1lbW9yeSBtYXBwaW5nIChlLmcuLCBhIGRldmljZSkgaXMgcmVmdXNpbmcgdG8gcHJvdmlkZSBhIHZhbGlkIFBURS4gVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYSByZXNvdXJjZSBvciBwZXJtaXNzaW9uIGlzc3VlLlxuXG5UaGUga2V5IGNoYW5nZSBpcyBpbiBgaHZhX3RvX3BmbmAsIHdoZXJlIGl0J3MgYmVpbmcgc2V0IHRvIGBLVk1fUEZOX0VSUl9QRk5NQVBgIGluc3RlYWQgb2YgYEtWTV9QRk5fRVJSX0ZBVUxUYCB3aGVuIGBodmFfdG9fcGZuX3JlbWFwcGVkYCByZXR1cm5zIGFuIGVycm9yLiBSaWdodCwgc28gYGh2YV90b19wZm5gIGNhbGxzIGBodmFfdG9fcGZuX3JlbWFwcGVkYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBXZeKAmXJlIGNoYW5naW5nICpob3cqIHdlIGNsYXNzaWZ5IHRoZXNlIHBhcnRpY3VsYXIgZmF1bHRpbmcgc2NlbmFyaW9zLiBJbnN0ZWFkIG9mIGEgZ2VuZXJpYyBmYXVsdCwgd2XigJlyZSB1c2luZyBhIG1vcmUgc3BlY2lmaWMgZXJyb3IgY29kZS5cblxuSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2NlbmFyaW8gdGhlIGNoYW5nZSBhZGRyZXNzZXMuIExldCBtZSB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBgaHZhX3RvX3BmbmAgaXMgY2FsbGVkLCBhbmQgYWxzbyB0byB1bmRlcnN0YW5kIHdoZXJlIGBrdm1fbW11X2ZhdWx0aW5fcGZuYCBpcyBiZWluZyB1c2VkLCBiZWNhdXNlIHRoZSBjb21tZW50cyBzdWdnZXN0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBmYXVsdGluZyBpbiB0aGUgcGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjE5LjkxOTAwMDE2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY0NTg3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTM4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTQwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4NC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODU6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5NS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTY6XFx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFxcdTAwMjZwZm4pKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5Ny1cXHRcXHRyZXR1cm4gcGZuO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5OC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTk6XFx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDAwLVxcdGlmIChucGFnZXMgPT0gMSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxMy1cXHRlbHNlIGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNDpcXHRcXHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVxcdFxcdGlmIChyID09IC1FQUdBSU4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzc9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNTM6XFx0cmV0dXJuIGh2YV90b19wZm4oa2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDoyMC4yODU0Njk0MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjUyMTQ2OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBFcnJvciBIYW5kbGluZyBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiB0aGUgS1ZNIGNvZGUuIEl0IGxvb2tzIGxpa2UgaXQncyBpbiBgaHZhX3RvX3BmbmAgd2l0aGluIGBrdm1fbWFpbi5jYCDigJMgc3BlY2lmaWNhbGx5LCB0aGlzIHNlY3Rpb246XG5cbmBgYGNcblx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG5cdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG5cdFx0aWYgKHIgPT0gLUVBR0FJTilcblx0XHRcdGdvdG8gcmV0cnk7XG5cdFx0aWYgKHIgXHUwMDNjIDApXG5cdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9QRk5NQVA7XG5gYGBcblxuSXQgbG9va3MgbGlrZSB0aGUga2V5IGlzIGhvdyB0aGlzIGhhbmRsZXMgdGhlIGVycm9yIGNhc2UgZm9yIGBWTV9JT2AgYW5kIGBWTV9QRk5NQVBgIG1hcHBpbmdzLCB0cmVhdGluZyB0aGVtIGFzIGlmIHRoZXkncmUgTWVtb3J5LU1hcHBlZCBJL08uIEludGVyZXN0aW5nLiBBbmQgdGhlbiBpbiBgbW11LmNgOlxuXG5gYGBjXG5cdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXHUwMDNlcGZuKSkpIHtcblx0XHRpZiAoZmF1bHQtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1BGTk1BUClcblx0XHRcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcblxuXHRcdHJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7XG5cdH1cbmBgYFxuXG5UaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSW5zdGVhZCBvZiBhIGZhdGFsIGVycm9yLCBpdCdzIGhhbmRsaW5nIGEgc3BlY2lmaWMgTU1JTy1saWtlIGNhc2UuIERlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBhcm91bmQgYGt2bV9tbXVfZmF1bHRpbl9wZm5gLCBgaHZhX3RvX3BmbmAsIGFuZCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAuIFdhaXQsIGBodmFfdG9fcGZuYCBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uISBJdCdzIGludm9sdmVkIGluIGV2ZXJ5IHNpbmdsZSBwYWdlIGZhdWx0IHRoYXQgbmVlZHMgdG8gcmVzb2x2ZSBhIFBGTi4gYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGlzIGFub3RoZXIgaG90IHBhdGguIE9rYXksIGJ1dCBsZXQncyBzZWUgd2hhdCBlbHNlIGdldHMgY2FsbGVkIGhlcmUuIE9oLCBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGNhbGxlZCBhcyB3ZWxsLiBPa2F5LlxuXG5gaHZhX3RvX3Bmbl9yZW1hcHBlZGAgaXMgbGVzcyBvZiBhIGhvdCBzcG90LCBidXQgaXQncyBzcGVjaWZpYyB0byBgVk1fSU9gIGFuZCBgVk1fUEZOTUFQYCDigJMgdGhlIHZlcnkgY2FzZSB3ZSdyZSB0YXJnZXRpbmcuIExldCdzIHNlZSB3aGF0IGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6MjcuNTM3NjE4NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2MzY5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3Bmbl9yZW1hcHBlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MzgtXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTM5OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTg1PWt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDEzLVxcdGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzozMDE0OlxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTUtXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6MjcuNTkxMjU5NTQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMDkwNjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGFja2xpbmcgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YDpcblxuKipEaXZpbmcgaW50byBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiBpdHMgcHVycG9zZSBhbmQgdGhlIGNvbnRleHQgaXQgb3BlcmF0ZXMgd2l0aGluLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbiByZWxhdGVkIHRvIEtWTSwgdGhlIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUuIFRoZSBcIm5vc2xvdF9mYXVsdFwiIHBhcnQgbGlrZWx5IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gaXNzdWUgcmVsYXRlZCB0byBtZW1vcnkgc2xvdCBtYW5hZ2VtZW50IHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZSdzIGFkZHJlc3Mgc3BhY2UuIFByb2JhYmx5LCB0aGUgaHlwZXJ2aXNvciBkZXRlY3RzIHRoYXQgdGhlIGd1ZXN0IE9TIGhhcyBhdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWVtb3J5IGxvY2F0aW9uIGl0IHNob3VsZG4ndC5cblxuTm93LCBteSBtaW5kIHN0YXJ0cyB0byByYWNlLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXI6XG5cbiogICAqKldoYXQgZXhhY3RseSB0cmlnZ2VycyB0aGlzIGZhdWx0PyoqIElzIGl0IGEgZ3Vlc3QgT1MgYnVnLCBhIG1pc2NvbmZpZ3VyZWQgbWVtb3J5IG1hcHBpbmcsIG9yIHNvbWV0aGluZyBtb3JlIGluc2lkaW91cz8gTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbiwgYW5kIEkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGNhdXNlczogcGFnZSB0YWJsZSBpc3N1ZXMsIGluY29ycmVjdCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9uLCBvciBtYXliZSBhIHByb2JsZW0gd2l0aCBleHRlbmRlZCBwYWdlIHRhYmxlcyAoRVBUKSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uLlxuKiAgICoqV2hhdCBhcmUgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGZhdWx0PyoqIElzIGl0IGEgc2ltcGxlIHJlY292ZXJhYmxlIGVycm9yLCBvciBkb2VzIGl0IG1lYW4gdGhlIFZNIGlzIGluIGEgcHJlY2FyaW91cyBzdGF0ZT8gSXMgaXQgc2FmZSB0byBjb250aW51ZSwgb3IgaXMgYSBjb250cm9sbGVkIHNodXRkb3duIG5lY2Vzc2FyeT8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhpcyBmYXVsdCBvY2N1cnMuXG4qICAgKipXaGF0IGFyZSB0aGUgcG9zc2libGUgc29sdXRpb25zPyoqIERvZXMgdGhlIGNvZGUgYXR0ZW1wdCB0byBjb3JyZWN0IHRoZSBlcnJvciwgb3IgZG9lcyBpdCBzaW1wbHkgcmVwb3J0IGl0PyBDYW4gd2UgcmVtYXAgdGhlIG1lbW9yeSwgaW52YWxpZGF0ZSB0aGUgdHJhbnNsYXRpb24sIG9yIGV2ZW4gZW11bGF0ZSB0aGUgZmFpbGluZyBvcGVyYXRpb24/IEknbGwgcHJvYmFibHkgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3JzLCBpZiBpdCBjYWxscyBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGUuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG9mIHRoZSBvcHRpb25zIGFyZSByaXNreSBvciB3aGV0aGVyIGEgVk0gZXhpdCBpcyBuZWNlc3NhcnkuXG4qICAgKipXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGluIHRoZSBsYXJnZXIgcGljdHVyZT8qKiBXaGF0IHBhcnQgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUgaXMgaXQgaW52b2x2ZWQgaW4/IEknbGwgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsIHRvIHVuZGVyc3RhbmQgaG93IHNsb3RzLCBwYWdlIHRhYmxlcywgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXJlIHJlbGF0ZWQuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGZhdWx0cywgYW5kIHRoYXQgY2FuIHRyaWdnZXIgbG90cyBvZiBpbnRlcmVzdGluZyBxdWVzdGlvbnMuXG5cblNvLCBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBsb2dnaW5nIHN0YXRlbWVudHMuIFRoZW4gSSBjYW4gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCB0aGUgZnVuY3Rpb24gaXRzZWxmIG1ha2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgcGxhbiBpcyB0byBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzEzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6MzIuMzIyMTY4NDIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTk3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNTA5PXN0YXRpYyBpbnQga3ZtX2hhbmRsZV9lcnJvcl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zNTMxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzUzMjpzdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM1MzMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDY2ND1zdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjkyLVxcdGlmICh1bmxpa2VseSghc2xvdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjkzOlxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3MjEtXFx0XFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NzIyOlxcdFxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3MjMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3NzMtXFx0XFx0aWYgKGZhdWx0LVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUEZOTUFQKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDc3NDpcXHRcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Nzc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Nzc5LVxcdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVxcdTAwM2VzbG90IHx8IGlzX25vc2xvdF9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDc4MDpcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDozMi4zNzgzNjg3MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1MDgzNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MgaW4gS1ZNIE1NSU8gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgd2UgbWlnaHQgYmUgc2VlaW5nIHBlcmZvcm1hbmNlIGhpdHMsIHBhcnRpY3VsYXJseSB3aXRoIE1NSU8gaW4gS1ZNLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gSSBrbm93IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgaXQgZ2V0cyBjYWxsZWQgZm9yIGFueSBNTUlPIGFjY2Vzcywgc28gaXQncyBhIHZlcnkgaG90IHBhdGguIFRoYXQncyBkZWZpbml0ZWx5IGEgcGxhY2UgdG8gbG9vay4gQnV0IGBodmFfdG9fcGZuX3JlbWFwcGVkYC4uLiB0aGF0J3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gVk1fSU8gYW5kIFZNX1BGTk1BUCwgc28gaXQgd2FycmFudHMgY2xvc2UgZXhhbWluYXRpb24gdG9vLlxuXG5Ob3cgSSBuZWVkIHRvIHJlbWVtYmVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuIEkgc3VzcGVjdCB0aGF0IEtWTSBpcywgb2J2aW91c2x5LCBhIHByZXJlcXVpc2l0ZSwgYnV0IEkgd2FudCB0byBiZSB0aG9yb3VnaC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBLVk0gZm9yIGFueSBwb3RlbnRpYWxseSByZWxldmFudCBvcHRpb25zIOKAkyBJJ2xsIHN0YXJ0IHdpdGggYHZpcnQva3ZtL0tjb25maWdgIGFuZCB0aGVuIG1heWJlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gVGhhdCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gY29uZmlndXJhYmxlIGVsZW1lbnRzIHRoYXQgbWlnaHQgYmUgYWZmZWN0aW5nIHRoZSBwZXJmb3JtYW5jZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjM2LjE5MzQ1NDQwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MjY3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDozNi4yNDY4ODkyNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxMzgyNTQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgUGVyZm9ybWFuY2UgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHkgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZSBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgYEtWTWAsIHNvIHRoYXQncyBoZWxwZnVsIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlLlxuXG5UaGUgZmlyc3QgZnVuY3Rpb24gdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgLiBUaGF0IHNlZW1zIHNpZ25pZmljYW50LCBhbmQgdGhlIGNhbGwgc2l0ZXMgaW52b2x2ZSBgdm1hLVx1MDAzZXZtX2ZsYWdzYCB3aXRoIGVpdGhlciBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIHNldC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCB0aG91Z2g/XG5cbkFoLCBoZXJlJ3MgYW5vdGhlciBvbmU6IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAuIFRoYXQncyB0cmlnZ2VyZWQgd2hlbiBgZmF1bHQtXHUwMDNlcGZuYCBpcyBlcXVhbCB0byBgS1ZNX1BGTl9FUlJfUEZOTUFQYC4gR29vZC4gSSB0aGluayBJIGNhbiB1c2UgYm90aCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBjaGFuZ2UuXG5cbldhaXQsIGlzbid0IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgb2Z0ZW4gdXNlZCBpbiB0aGUgTU1JTyBob3QgcGF0aD8gVGhhdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgb2Z0ZW4gaXQncyBnZXR0aW5nIGNhbGxlZC4gTm93IGxldCdzIGNoZWNrIGlmIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyBhbHNvIGEgaG90IHBhdGguIEl0J3Mgb25seSBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggZWl0aGVyIGBWTV9JT2Agb3IgYFZNX1BGTk1BUGAgZmxhZ3MsIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBJJ2xsIG5vdyBkaWcgaW50byBgdmlydC9rdm0va3ZtX21haW4uY2AgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24gdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6NDEuNTYwNzE2NTU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkyODkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodmFfdG9fcGZuX3JlbWFwcGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0yOTI4PXN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5Mzk6c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk0MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5ODU9a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTMtXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTQ6XFx0XFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFxcdTAwMjZwZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNS1cXHRcXHRpZiAociA9PSAtRUFHQUlOKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDo0MS42MTU2NDg0NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDg5NTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGh2YV90b19wZm5fcmVtYXBwZWRgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHJlYWxseSBzY3J1dGluaXplIHRoaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCdzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGZyZXNoIG1lbnRhbCBtb2RlbCBhbmQgdGhlbiB2ZXJpZnkgbXkgYXNzdW1wdGlvbnMuIEknbGwgZm9jdXMgb24gdGhlIGNvcmUgbG9naWM6IHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQgd2l0aCB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWNzLiBBcmUgd2UgaGFuZGxpbmcgcGFnZSB0YWJsZXMgY29ycmVjdGx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlIGV4cGVjdGVkIGVkZ2UgY2FzZXMuIEFuZCwgaW1wb3J0YW50bHksIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGl0IGJlaGF2ZXMgcHJlZGljdGFibHkgaW4gdGhlIGZhY2Ugb2YgdW5leHBlY3RlZCBpbnB1dCBvciBzeXN0ZW0gc3RhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6NDQuOTA2NTQ3MDY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MzksXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5Mzk6XFx0c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI5NDA6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbjI5NDE6XFx0e1xcbjI5NDI6XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGtmcC1cXHUwMDNlaHZhIH07XFxuMjk0MzpcXHRcXHRib29sIHdyaXRlX2ZhdWx0ID0ga2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEU7XFxuMjk0NDpcXHRcXHRpbnQgcjtcXG4yOTQ1OlxcdFxcbjI5NDY6XFx0XFx0LypcXG4yOTQ3OlxcdFxcdCAqIFJlbWFwcGVkIG1lbW9yeSBjYW5ub3QgYmUgcGlubmVkIGluIGFueSBtZWFuaW5nZnVsIHNlbnNlLiAgQmFpbCBpZlxcbjI5NDg6XFx0XFx0ICogdGhlIGNhbGxlciB3YW50cyB0byBwaW4gdGhlIHBhZ2UsIGkuZS4gYWNjZXNzIHRoZSBwYWdlIG91dHNpZGUgb2ZcXG4yOTQ5OlxcdFxcdCAqIE1NVSBub3RpZmllciBwcm90ZWN0aW9uLCBhbmQgdW5zYWZlIHVtYXBwaW5ncyBhcmUgZGlzYWxsb3dlZC5cXG4yOTUwOlxcdFxcdCAqL1xcbjI5NTE6XFx0XFx0aWYgKGtmcC1cXHUwMDNlcGluIFxcdTAwMjZcXHUwMDI2ICFhbGxvd191bnNhZmVfbWFwcGluZ3MpXFxuMjk1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yOTUzOlxcdFxcbjI5NTQ6XFx0XFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbjI5NTU6XFx0XFx0aWYgKHIpIHtcXG4yOTU2OlxcdFxcdFxcdC8qXFxuMjk1NzpcXHRcXHRcXHQgKiBnZXRfdXNlcl9wYWdlcyBmYWlscyBmb3IgVk1fSU8gYW5kIFZNX1BGTk1BUCB2bWFzIGFuZCBkb2VzXFxuMjk1ODpcXHRcXHRcXHQgKiBub3QgY2FsbCB0aGUgZmF1bHQgaGFuZGxlciwgc28gZG8gaXQgaGVyZS5cXG4yOTU5OlxcdFxcdFxcdCAqL1xcbjI5NjA6XFx0XFx0XFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xcbjI5NjE6XFx0XFx0XFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIGtmcC1cXHUwMDNlaHZhLFxcbjI5NjI6XFx0XFx0XFx0XFx0XFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXFxuMjk2MzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ1bmxvY2tlZCk7XFxuMjk2NDpcXHRcXHRcXHRpZiAodW5sb2NrZWQpXFxuMjk2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4yOTY2OlxcdFxcdFxcdGlmIChyKVxcbjI5Njc6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMjk2ODpcXHRcXG4yOTY5OlxcdFxcdFxcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG4yOTcwOlxcdFxcdFxcdGlmIChyKVxcbjI5NzE6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMjk3MjpcXHRcXHR9XFxuMjk3MzpcXHRcXG4yOTc0OlxcdFxcdGlmICh3cml0ZV9mYXVsdCBcXHUwMDI2XFx1MDAyNiAhYXJncy53cml0YWJsZSkge1xcbjI5NzU6XFx0XFx0XFx0KnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7XFxuMjk3NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yOTc3OlxcdFxcdH1cXG4yOTc4OlxcdFxcbjI5Nzk6XFx0XFx0KnBfcGZuID0ga3ZtX3Jlc29sdmVfcGZuKGtmcCwgTlVMTCwgXFx1MDAyNmFyZ3MsIGFyZ3Mud3JpdGFibGUpO1xcbjI5ODA6XFx0b3V0OlxcbjI5ODE6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjI5ODI6XFx0XFx0cmV0dXJuIHI7XFxuMjk4MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjQ0LjkwNjc5MTk3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTA3MzU5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmF1bHQgSGFuZGxpbmcgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0aGUgY2hhbmdlIEknbSBzZWVpbmcgaXMgd2l0aGluIGBodmFfdG9fcGZuYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBkZWFsaW5nIHdpdGggYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBmbGFncy4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGh2YV90b19wZm5fcmVtYXBwZWRgIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0J3MgY2xlYXJseSBpbnZvbHZlZCBpbiB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5JIG5vdGljZWQgYGt2bV9tbXVfZmF1bHRpbl9wZm5gIHdhcyBhbHNvIG1vZGlmaWVkLCBidXQgZ2l2ZW4gdGhhdCBpdCdzIHByb2JhYmx5IG9uIGEgaG90IHBhdGgsIEknZCByYXRoZXIgZm9jdXMgb24gdGhlIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24uIE5vdywgSSdtIHRyeWluZyB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gdGhpcy4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBpcyBjYWxsZWQgd2hlbiB0aGUgYGZhdWx0LVx1MDAzZXBmbmAgaXMgZXF1YWwgdG8gYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoaXMgbWFrZXMgbWUgbGVhbiBldmVuIG1vcmUgdG93YXJkcyBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYmVpbmcgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLlxuXG5MZXQncyBub3cgdHVybiB0byB0aGUgYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGZ1bmN0aW9uIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGxldCdzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDo1My44MTQxNTM4MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDc1MDpcXHRcXHQgKiBEbyB0aGUgcHJlLWNoZWNrIGV2ZW4gZm9yIG5vbi1wcmVlbXRpYmxlIGtlcm5lbHMsIGkuZS4gZXZlbiBpZiBLVk1cXG40NzUxOlxcdFxcdCAqIHdpbGwgbmV2ZXIgeWllbGQgbW11X2xvY2sgaW4gcmVzcG9uc2UgdG8gY29udGVudGlvbiwgYXMgdGhpcyB2Q1BVIGlzXFxuNDc1MjpcXHRcXHQgKiAqZ3VhcmFudGVlZCogdG8gbmVlZCB0byByZXRyeSwgaS5lLiB3YWl0aW5nIHVudGlsIG1tdV9sb2NrIGlzIGhlbGRcXG40NzUzOlxcdFxcdCAqIHRvIGRldGVjdCByZXRyeSBndWFyYW50ZWVzIHRoZSB3b3JzdCBjYXNlIGxhdGVuY3kgZm9yIHRoZSB2Q1BVLlxcbjQ3NTQ6XFx0XFx0ICovXFxuNDc1NTpcXHRcXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuX3Vuc2FmZShrdm0sIGZhdWx0LVxcdTAwM2VtbXVfc2VxLCBmYXVsdC1cXHUwMDNlZ2ZuKSlcXG40NzU2OlxcdFxcdFxcdHJldHVybiBSRVRfUEZfUkVUUlk7XFxuNDc1NzpcXHRcXG40NzU4OlxcdFxcdHJldCA9IF9fa3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCk7XFxuNDc1OTpcXHRcXHRpZiAocmV0ICE9IFJFVF9QRl9DT05USU5VRSlcXG40NzYwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDc2MTpcXHRcXG40NzYyOlxcdFxcdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKSB7XFxuNDc2MzpcXHRcXHRcXHQvKlxcbjQ3NjQ6XFx0XFx0XFx0ICogQSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIGlzIGJhY2tlZCBieSBhIFZNX0lPL1ZNX1BGTk1BUFxcbjQ3NjU6XFx0XFx0XFx0ICogbWFwcGluZyB3aG9zZSBmYXVsdCBoYW5kbGVyIHJlZnVzZXMgdG8gaW5zdGFsbCBhIFBURSB3aGlsZSB0aGVcXG40NzY2OlxcdFxcdFxcdCAqIGRldmljZSdzIG1lbW9yeSBzcGFjZSBpcyBkaXNhYmxlZCAoZS5nLiB0aGUgZ3Vlc3QgY2xlYXJlZFxcbjQ3Njc6XFx0XFx0XFx0ICogUENJX0NPTU1BTkQuTUVNKS4gVGhlIGZhdWx0IHRoZW4gZmFpbHMgZXZlbiB0aG91Z2ggdGhlIG1lbXNsb3RcXG40NzY4OlxcdFxcdFxcdCAqIGlzIHN0aWxsIHZhbGlkLiBUcmVhdCBzdWNoIGFuIGFjY2VzcyBhcyBNTUlPIGFuZCBlbXVsYXRlIGl0IHNvXFxuNDc2OTpcXHRcXHRcXHQgKiB0aGUgZ3Vlc3Qgb2JzZXJ2ZXMgVW5zdXBwb3J0ZWQgUmVxdWVzdCBzZW1hbnRpY3MsIG1hdGNoaW5nXFxuNDc3MDpcXHRcXHRcXHQgKiBiYXJlIG1ldGFsLCBpbnN0ZWFkIG9mIGtpbGxpbmcgdGhlIFZNIHdpdGggLUVGQVVMVC4gR2VudWluZSxcXG40NzcxOlxcdFxcdFxcdCAqIG5vbi1wZm5tYXAgZXJyb3JzIHN0aWxsIHRha2UgdGhlIGZhdGFsIHBhdGguXFxuNDc3MjpcXHRcXHRcXHQgKi9cXG40NzczOlxcdFxcdFxcdGlmIChmYXVsdC1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1BGTk1BUClcXG40Nzc0OlxcdFxcdFxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG40Nzc1OlxcdFxcbjQ3NzY6XFx0XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfZXJyb3JfcGZuKHZjcHUsIGZhdWx0KTtcXG40Nzc3OlxcdFxcdH1cXG40Nzc4OlxcdFxcbjQ3Nzk6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZmF1bHQtXFx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cXHUwMDNlcGZuKSkpXFxuNDc4MDpcXHRcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuNDc4MTpcXHRcXG40NzgyOlxcdFxcdC8qXFxuNDc4MzpcXHRcXHQgKiBDaGVjayBhZ2FpbiBmb3IgYSByZWxldmFudCBtbXVfbm90aWZpZXIgaW52YWxpZGF0aW9uIGV2ZW50IHB1cmVseSB0b1xcbjQ3ODQ6XFx0XFx0ICogYXZvaWQgY29udGVuZGluZyBtbXVfbG9jay4gIE1vc3QgaW52YWxpZGF0aW9ucyB3aWxsIGJlIGRldGVjdGVkIGJ5XFxuNDc4NTpcXHRcXHQgKiB0aGUgcHJldmlvdXMgY2hlY2ssIGJ1dCBjaGVja2luZyBpcyBleHRyZW1lbHkgY2hlYXAgcmVsYXRpdmUgdG8gdGhlXFxuNDc4NjpcXHRcXHQgKiBvdmVyYWxsIGNvc3Qgb2YgZmFpbGluZyB0byBkZXRlY3QgdGhlIGludmFsaWRhdGlvbiB1bnRpbCBhZnRlclxcbjQ3ODc6XFx0XFx0ICogbW11X2xvY2sgaXMgYWNxdWlyZWQuXFxuNDc4ODpcXHRcXHQgKi9cXG40Nzg5OlxcdFxcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5fdW5zYWZlKGt2bSwgZmF1bHQtXFx1MDAzZW1tdV9zZXEsIGZhdWx0LVxcdTAwM2VnZm4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjUzLjgxNDQxOTcxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ2MDA5NTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIGBrdm1fbW11X2ZhdWx0aW5fcGZuYCwgYnV0IHRoYXQncyBhIGhvdCBwYXRoLCBzbyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNsdWRpbmcgaXQgZGlyZWN0bHkgaW4gbXkgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gQWZ0ZXIgYSBiaXQgb2YgdGhvdWdodCwgaXQncyBjbGVhciB0aGF0IGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJdCdzIG9ubHkgY2FsbGVkIHdoZW4gZGVhbGluZyB3aXRoIGBWTV9JT2Agb3IgYFZNX1BGTk1BUGAgbWFwcGluZ3MsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgYXJlYSB0aGlzIHBhdGNoIGlzIHRhcmdldGluZy4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBsb29rZWQgcHJvbWlzaW5nIGluaXRpYWxseSwgYnV0IHRoYXQncyBpbnZva2VkIGZvciAqYWxsKiBNTUlPIGFjY2Vzc2VzLCB0b28gYnJvYWQgYSBzY29wZSBmb3IgbXkgcHVycG9zZXMuIFNvIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUgc3dlZXQgc3BvdC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBPYnZpb3VzbHksIGBLVk1gIGlzIGVzc2VudGlhbC4gIFNpbmNlIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBhIFBDSSBCQVIgYW5kIGRpc2FibGVkIGRldmljZSBtZW1vcnksIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbG9vayBmb3IgVkZJTy1zcGVjaWZpYyBvcHRpb25zLiBCdXQsIHRoZSBkZXNjcmlwdGlvbiBzYXlzIGl0IGNhbiBoYXBwZW4gZm9yIGFueSBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIG1hcHBpbmcuICBTbywgSSBkb24ndCAqc3RyaWN0bHkqIG5lZWQgVkZJTywgYEtWTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuICBJJ2xsIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgb3B0aW9uczsgYEtWTWAgYW5kIGBLVk1fWDg2YCBhcmUgYm90aCB0cmlzdGF0ZSBvcHRpb25zLiBJJ2xsIGFkZCBgS1ZNYCB0byBteSBgRW5hYmxlQ29uZmlnc2AuXG5cbkp1c3QgdG8gcmVjYXA6IHRoZSBwYXRjaCBhbHRlcnMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIuIEl0IHRyZWF0cyBmYWlsdXJlcyBkdXJpbmcgYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBtYXBwaW5ncyBhcyBNTUlPIGVycm9ycyByYXRoZXIgdGhhbiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIGl0c2VsZiwgd2hpY2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggY29ycmVjdGx5IGVtdWxhdGVzIE1NSU8gYW5kIGRvZXNuJ3QgbGVhZCB0byByZWdyZXNzaW9ucyBvciBjcmFzaGVzLiBTbywgdGhlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBjaG9pY2Ugb2YgYGh2YV90b19wZm5fcmVtYXBwZWRgIGFzIHRoZSBmb2N1cyBzeW1ib2wgaXMgdmFsaWQsIHNpbmNlIGl0IGlzIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkLlxuXG5BIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBjb25maXJtcyB0aGlzLiBTcGVjaWZpY2FsbHksIHRoZSBgaHZhX3RvX3BmbmAgZnVuY3Rpb24gd2l0aGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIHRoZSBjb2RlIHNob3dzIHRoYXQgYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIHRoZSByaWdodCBmdW5jdGlvbiB0byB0YXJnZXQsIHNpbmNlIHRoZSBwYXRoIHdpbGwgcmVzdWx0IGluIGV4ZWN1dGlvbiBvZiBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAsIHdoaWNoIGlzIG5vdCBhIGhvdCBwYXRoLlxuXG5TbywgaGVyZSdzIHRoZSBmaW5hbCBjYWxsOlxuXG4qICAgRm9jdXMgc3ltYm9sczogYGh2YV90b19wZm5fcmVtYXBwZWRgXG4qICAgRW5hYmxlIGNvbmZpZ3M6IGBLVk1gXG5cbkknbSBjb25maWRlbnQgd2l0aCB0aGlzLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzIsIk91dHB1dFRva2VucyI6MTI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDE6MDQuMjc0NTE3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTc2MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodmFfdG9fcGZuX3JlbWFwcGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodmFfdG9fcGZuX3JlbWFwcGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-21 13:52:34 +0000 UTC FinishedAt: 2026-06-21 14:01:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "08c7183f5b9ffe4408e74fff848a4cc2105361d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "08c7183f5b9ffe4408e74fff848a4cc2105361d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "hva_to_pfn_remapped" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm5fcmVtYXBwZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNTg5YjdjMjNlNDZmZWVkMjcyYThkYzc4YTYyMzViZDYwMDVlYWNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdW4gMjEgMTQ6MDA6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDkxODQzZTkyMjRkMDQ1Li4xMTVlMmM0ZGI1ZmEwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC00NzU5LDggJiM0Mzs0NzU5LDIyIEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAocmV0ICE9IFJFVF9QRl9DT05USU5VRSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXHUwMDNlcGZuKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC1cdTAwM2VwZm4pKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiBpcyBiYWNrZWQgYnkgYSBWTV9JTy9WTV9QRk5NQVBcbiYjNDM7XHRcdCAqIG1hcHBpbmcgd2hvc2UgZmF1bHQgaGFuZGxlciByZWZ1c2VzIHRvIGluc3RhbGwgYSBQVEUgd2hpbGUgdGhlXG4mIzQzO1x0XHQgKiBkZXZpY2UmIzM5O3MgbWVtb3J5IHNwYWNlIGlzIGRpc2FibGVkIChlLmcuIHRoZSBndWVzdCBjbGVhcmVkXG4mIzQzO1x0XHQgKiBQQ0lfQ09NTUFORC5NRU0pLiBUaGUgZmF1bHQgdGhlbiBmYWlscyBldmVuIHRob3VnaCB0aGUgbWVtc2xvdFxuJiM0MztcdFx0ICogaXMgc3RpbGwgdmFsaWQuIFRyZWF0IHN1Y2ggYW4gYWNjZXNzIGFzIE1NSU8gYW5kIGVtdWxhdGUgaXQgc29cbiYjNDM7XHRcdCAqIHRoZSBndWVzdCBvYnNlcnZlcyBVbnN1cHBvcnRlZCBSZXF1ZXN0IHNlbWFudGljcywgbWF0Y2hpbmdcbiYjNDM7XHRcdCAqIGJhcmUgbWV0YWwsIGluc3RlYWQgb2Yga2lsbGluZyB0aGUgVk0gd2l0aCAtRUZBVUxULiBHZW51aW5lLFxuJiM0MztcdFx0ICogbm9uLXBmbm1hcCBlcnJvcnMgc3RpbGwgdGFrZSB0aGUgZmF0YWwgcGF0aC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZhdWx0LVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXG4mIzQzO1x0XHRcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcbiYjNDM7XG4gXHRcdHJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghZmF1bHQtXHUwMDNlc2xvdCB8fCBpc19ub3Nsb3RfcGZuKGZhdWx0LVx1MDAzZXBmbikpKVxuIFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA0YzE0YWVlMWZiMDYzMy4uZGM1OTczZTQwMDcyMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTk5LDYgJiM0Mzs5OSwxNCBAQFxuICNkZWZpbmUgS1ZNX1BGTl9FUlJfUk9fRkFVTFRcdChLVk1fUEZOX0VSUl9NQVNLICYjNDM7IDIpXG4gI2RlZmluZSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HXHQoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyAzKVxuICNkZWZpbmUgS1ZNX1BGTl9FUlJfTkVFRFNfSU9cdChLVk1fUEZOX0VSUl9NQVNLICYjNDM7IDQpXG4mIzQzOy8qXG4mIzQzOyAqIEZhdWx0aW5nIGluIGEgVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmcgZmFpbGVkIGJlY2F1c2UgdGhlIG93bmVyJiMzOTtzIGZhdWx0XG4mIzQzOyAqIGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURSwgZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2hvc2VcbiYjNDM7ICogZGV2aWNlIG1lbW9yeSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKHRoZSBndWVzdCBjbGVhcmVkIFBDSV9DT01NQU5ELk1FTSkuXG4mIzQzOyAqIFRoZSBtZW1zbG90IGlzIHZhbGlkOyB0aGUgYWNjZXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIE1NSU8gcmF0aGVyIHRoYW4gYVxuJiM0MzsgKiBmYXRhbCAtRUZBVUxULlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLVk1fUEZOX0VSUl9QRk5NQVBcdChLVk1fUEZOX0VSUl9NQVNLICYjNDM7IDUpXG4gXG4gLypcbiAgKiBlcnJvciBwZm5zIGluZGljYXRlIHRoYXQgdGhlIGdmbiBpcyBpbiBzbG90IGJ1dCBmYWlsZCB0b1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCA4ODFmOTJkN2E0NjllNy4uZjIzMmZjMmY0MjM4MGEgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMzAxNSw3ICYjNDM7MzAxNSwxNCBAQCBrdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbiBcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiBcdFx0XHRnb3RvIHJldHJ5O1xuIFx0XHRpZiAociBcdTAwM2MgMClcbi1cdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9GQVVMVDtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIG93bmVyJiMzOTtzIGZhdWx0IGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURVxuJiM0MztcdFx0XHQgKiAoZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2l0aCBkZXZpY2UgbWVtb3J5XG4mIzQzO1x0XHRcdCAqIGRpc2FibGVkKS4gRmxhZyBpdCBkaXN0aW5jdGx5IHNvIHRoZSBhcmNoIGZhdWx0XG4mIzQzO1x0XHRcdCAqIGhhbmRsZXIgY2FuIHRyZWF0IHRoZSBhY2Nlc3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGFcbiYjNDM7XHRcdFx0ICogZmF0YWwgLUVGQVVMVC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBmbiA9IEtWTV9QRk5fRVJSX1BGTk1BUDtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICgoa2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX05PV0FJVCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h2YV90b19wZm5fcmVtYXBwZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1ODliN2MyM2U0NmZlZWQyNzJhOGRjNzhhNjIzNWJkNjAwNWVhY2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1biAyMSAxNDowMDoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDkxODQzZTkyMjRkMDQ1Li4xMTVlMmM0ZGI1ZmEwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC00NzU5LDggJiM0Mzs0NzU5LDIyIEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJaWYgKHJldCAhPSBSRVRfUEZfQ09OVElOVUUpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAodW5saWtlbHkoaXNfZXJyb3JfcGZuKGZhdWx0LSZndDtwZm4pKSkKJiM0MzsJaWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC0mZ3Q7cGZuKSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgaXMgYmFja2VkIGJ5IGEgVk1fSU8vVk1fUEZOTUFQCiYjNDM7CQkgKiBtYXBwaW5nIHdob3NlIGZhdWx0IGhhbmRsZXIgcmVmdXNlcyB0byBpbnN0YWxsIGEgUFRFIHdoaWxlIHRoZQomIzQzOwkJICogZGV2aWNlJiMzOTtzIG1lbW9yeSBzcGFjZSBpcyBkaXNhYmxlZCAoZS5nLiB0aGUgZ3Vlc3QgY2xlYXJlZAomIzQzOwkJICogUENJX0NPTU1BTkQuTUVNKS4gVGhlIGZhdWx0IHRoZW4gZmFpbHMgZXZlbiB0aG91Z2ggdGhlIG1lbXNsb3QKJiM0MzsJCSAqIGlzIHN0aWxsIHZhbGlkLiBUcmVhdCBzdWNoIGFuIGFjY2VzcyBhcyBNTUlPIGFuZCBlbXVsYXRlIGl0IHNvCiYjNDM7CQkgKiB0aGUgZ3Vlc3Qgb2JzZXJ2ZXMgVW5zdXBwb3J0ZWQgUmVxdWVzdCBzZW1hbnRpY3MsIG1hdGNoaW5nCiYjNDM7CQkgKiBiYXJlIG1ldGFsLCBpbnN0ZWFkIG9mIGtpbGxpbmcgdGhlIFZNIHdpdGggLUVGQVVMVC4gR2VudWluZSwKJiM0MzsJCSAqIG5vbi1wZm5tYXAgZXJyb3JzIHN0aWxsIHRha2UgdGhlIGZhdGFsIHBhdGguCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChmYXVsdC0mZ3Q7cGZuID09IEtWTV9QRk5fRVJSX1BGTk1BUCkKJiM0MzsJCQlyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7CiYjNDM7CiAJCXJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7CiYjNDM7CX0KIAogCWlmIChXQVJOX09OX09OQ0UoIWZhdWx0LSZndDtzbG90IHx8IGlzX25vc2xvdF9wZm4oZmF1bHQtJmd0O3BmbikpKQogCQlyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggNGMxNGFlZTFmYjA2MzMuLmRjNTk3M2U0MDA3MjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC05OSw2ICYjNDM7OTksMTQgQEAKICNkZWZpbmUgS1ZNX1BGTl9FUlJfUk9fRkFVTFQJKEtWTV9QRk5fRVJSX01BU0sgJiM0MzsgMikKICNkZWZpbmUgS1ZNX1BGTl9FUlJfU0lHUEVORElORwkoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyAzKQogI2RlZmluZSBLVk1fUEZOX0VSUl9ORUVEU19JTwkoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyA0KQomIzQzOy8qCiYjNDM7ICogRmF1bHRpbmcgaW4gYSBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZyBmYWlsZWQgYmVjYXVzZSB0aGUgb3duZXImIzM5O3MgZmF1bHQKJiM0MzsgKiBoYW5kbGVyIGRlY2xpbmVkIHRvIGluc3RhbGwgYSBQVEUsIGUuZy4gYSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIHdob3NlCiYjNDM7ICogZGV2aWNlIG1lbW9yeSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKHRoZSBndWVzdCBjbGVhcmVkIFBDSV9DT01NQU5ELk1FTSkuCiYjNDM7ICogVGhlIG1lbXNsb3QgaXMgdmFsaWQ7IHRoZSBhY2Nlc3Mgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgTU1JTyByYXRoZXIgdGhhbiBhCiYjNDM7ICogZmF0YWwgLUVGQVVMVC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEtWTV9QRk5fRVJSX1BGTk1BUAkoS1ZNX1BGTl9FUlJfTUFTSyAmIzQzOyA1KQogCiAvKgogICogZXJyb3IgcGZucyBpbmRpY2F0ZSB0aGF0IHRoZSBnZm4gaXMgaW4gc2xvdCBidXQgZmFpbGQgdG8KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDg4MWY5MmQ3YTQ2OWU3Li5mMjMyZmMyZjQyMzgwYSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0zMDE1LDcgJiM0MzszMDE1LDE0IEBAIGt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKQogCQlpZiAociA9PSAtRUFHQUlOKQogCQkJZ290byByZXRyeTsKIAkJaWYgKHIgJmx0OyAwKQotCQkJcGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgb3duZXImIzM5O3MgZmF1bHQgaGFuZGxlciBkZWNsaW5lZCB0byBpbnN0YWxsIGEgUFRFCiYjNDM7CQkJICogKGUuZy4gYSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIHdpdGggZGV2aWNlIG1lbW9yeQomIzQzOwkJCSAqIGRpc2FibGVkKS4gRmxhZyBpdCBkaXN0aW5jdGx5IHNvIHRoZSBhcmNoIGZhdWx0CiYjNDM7CQkJICogaGFuZGxlciBjYW4gdHJlYXQgdGhlIGFjY2VzcyBhcyBNTUlPIGluc3RlYWQgb2YgYQomIzQzOwkJCSAqIGZhdGFsIC1FRkFVTFQuCiYjNDM7CQkJICovCiYjNDM7CQkJcGZuID0gS1ZNX1BGTl9FUlJfUEZOTUFQOwogCX0gZWxzZSB7CiAJCWlmICgoa2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX05PV0FJVCkgJmFtcDsmYW1wOwogCQkgICAgdm1hX2lzX3ZhbGlkKHZtYSwga2ZwLSZndDtmbGFncyAmYW1wOyBGT0xMX1dSSVRFKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gUGF0Y2ggZm9yIEVycm9yIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgY29yZSBLVk0gZmlsZXM6IGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgYGluY2x1ZGUvbGludXgva3ZtX2hvc3QuaGAsIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1NVSBhbmQgaG9zdCBpbnRlcmZhY2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgbmV3IGVycm9yIFBGTiwgYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoZSB1c2Ugb2YgYFBGTk1BUGAgaW5kaWNhdGVzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIGZyYW1lIG51bWJlcnMsIGFuZCB0aGUgJiMzNDtlcnJvciYjMzQ7IHBhcnQgaXMgaW1wb3J0YW50LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIG1hbmFnZSBlcnJvcnMgcmVsYXRlZCB0byBmYXVsdGluZyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MsIHdoZXJlIHRoZSBvd25lciBvZiB0aGUgbWVtb3J5IG1hcHBpbmcgKGUuZy4sIGEgZGV2aWNlKSBpcyByZWZ1c2luZyB0byBwcm92aWRlIGEgdmFsaWQgUFRFLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlc291cmNlIG9yIHBlcm1pc3Npb24gaXNzdWUuCgpUaGUga2V5IGNoYW5nZSBpcyBpbiBgaHZhX3RvX3BmbmAsIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHNldCB0byBgS1ZNX1BGTl9FUlJfUEZOTUFQYCBpbnN0ZWFkIG9mIGBLVk1fUEZOX0VSUl9GQVVMVGAgd2hlbiBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgcmV0dXJucyBhbiBlcnJvci4gUmlnaHQsIHNvIGBodmFfdG9fcGZuYCBjYWxscyBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1vZGlmaWNhdGlvbi4gV2XigJlyZSBjaGFuZ2luZyAqaG93KiB3ZSBjbGFzc2lmeSB0aGVzZSBwYXJ0aWN1bGFyIGZhdWx0aW5nIHNjZW5hcmlvcy4gSW5zdGVhZCBvZiBhIGdlbmVyaWMgZmF1bHQsIHdl4oCZcmUgdXNpbmcgYSBtb3JlIHNwZWNpZmljIGVycm9yIGNvZGUuCgpJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgY2FsbCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY2VuYXJpbyB0aGUgY2hhbmdlIGFkZHJlc3Nlcy4gTGV0IG1lIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIHdoZXJlIGBodmFfdG9fcGZuYCBpcyBjYWxsZWQsIGFuZCBhbHNvIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGlzIGJlaW5nIHVzZWQsIGJlY2F1c2UgdGhlIGNvbW1lbnRzIHN1Z2dlc3QgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGZhdWx0aW5nIGluIHRoZSBwYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h2YV90b19wZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yODUwLSAqL1xudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTIte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjg4MzpzdGF0aWMgaW50IGh2YV90b19wZm5fc2xvdyhzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4ODQte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTM4LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTM5OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk0MC1cdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg0LVxudmlydC9rdm0va3ZtX21haW4uYzoyOTg1Omt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5OTUtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTY6XHRpZiAoaHZhX3RvX3Bmbl9mYXN0KGtmcCwgXHUwMDI2cGZuKSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5Ny1cdFx0cmV0dXJuIHBmbjtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5OC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6Mjk5OTpcdG5wYWdlcyA9IGh2YV90b19wZm5fc2xvdyhrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMDAtXHRpZiAobnBhZ2VzID09IDEpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDEzLVx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTQ6XHRcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcdTAwMjZwZm4pO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVx0XHRpZiAociA9PSAtRUFHQUlOKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzAzNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9mb2xsb3dfcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzA1MzpcdHJldHVybiBodmFfdG9fcGZuKGtmcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIEVycm9yIEhhbmRsaW5nIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgaW4gdGhlIEtWTSBjb2RlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGluIGBodmFfdG9fcGZuYCB3aXRoaW4gYGt2bV9tYWluLmNgIOKAkyBzcGVjaWZpY2FsbHksIHRoaXMgc2VjdGlvbjoKCmBgYGMKCWVsc2UgaWYgKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgKFZNX0lPIHwgVk1fUEZOTUFQKSkgewoJCXIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCAmYW1wO3Bmbik7CgkJaWYgKHIgPT0gLUVBR0FJTikKCQkJZ290byByZXRyeTsKCQlpZiAociAmbHQ7IDApCgkJCXBmbiA9IEtWTV9QRk5fRVJSX1BGTk1BUDsKYGBgCgpJdCBsb29rcyBsaWtlIHRoZSBrZXkgaXMgaG93IHRoaXMgaGFuZGxlcyB0aGUgZXJyb3IgY2FzZSBmb3IgYFZNX0lPYCBhbmQgYFZNX1BGTk1BUGAgbWFwcGluZ3MsIHRyZWF0aW5nIHRoZW0gYXMgaWYgdGhleSYjMzk7cmUgTWVtb3J5LU1hcHBlZCBJL08uIEludGVyZXN0aW5nLiBBbmQgdGhlbiBpbiBgbW11LmNgOgoKYGBgYwoJaWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC0mZ3Q7cGZuKSkpIHsKCQlpZiAoZmF1bHQtJmd0O3BmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApCgkJCXJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTsKCgkJcmV0dXJuIGt2bV9oYW5kbGVfZXJyb3JfcGZuKHZjcHUsIGZhdWx0KTsKCX0KYGBgCgpUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSW5zdGVhZCBvZiBhIGZhdGFsIGVycm9yLCBpdCYjMzk7cyBoYW5kbGluZyBhIHNwZWNpZmljIE1NSU8tbGlrZSBjYXNlLiBEZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBhcmVhLgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIGFyb3VuZCBga3ZtX21tdV9mYXVsdGluX3BmbmAsIGBodmFfdG9fcGZuYCwgYW5kIGBodmFfdG9fcGZuX3JlbWFwcGVkYC4gV2FpdCwgYGh2YV90b19wZm5gIGlzIGEgaG90IHBhdGggZnVuY3Rpb24hIEl0JiMzOTtzIGludm9sdmVkIGluIGV2ZXJ5IHNpbmdsZSBwYWdlIGZhdWx0IHRoYXQgbmVlZHMgdG8gcmVzb2x2ZSBhIFBGTi4gYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGlzIGFub3RoZXIgaG90IHBhdGguIE9rYXksIGJ1dCBsZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBnZXRzIGNhbGxlZCBoZXJlLiBPaCwgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBpcyBjYWxsZWQgYXMgd2VsbC4gT2theS4KCmBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyBsZXNzIG9mIGEgaG90IHNwb3QsIGJ1dCBpdCYjMzk7cyBzcGVjaWZpYyB0byBgVk1fSU9gIGFuZCBgVk1fUEZOTUFQYCDigJMgdGhlIHZlcnkgY2FzZSB3ZSYjMzk7cmUgdGFyZ2V0aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yOTI4PXN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MzgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5Mzk6c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxudmlydC9rdm0va3ZtX21haW4uYy0yOTQwLVx0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3Bmbilcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5ODU9a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMDEzLVx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTQ6XHRcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcdTAwMjZwZm4pO1xudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVx0XHRpZiAociA9PSAtRUFHQUlOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgOgoKKipEaXZpbmcgaW50byBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHpvb20gaW4gb24gaXRzIHB1cnBvc2UgYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byBLVk0sIHRoZSBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lLiBUaGUgJiMzNDtub3Nsb3RfZmF1bHQmIzM0OyBwYXJ0IGxpa2VseSBpbmRpY2F0ZXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBpc3N1ZSByZWxhdGVkIHRvIG1lbW9yeSBzbG90IG1hbmFnZW1lbnQgd2l0aGluIGEgdmlydHVhbCBtYWNoaW5lJiMzOTtzIGFkZHJlc3Mgc3BhY2UuIFByb2JhYmx5LCB0aGUgaHlwZXJ2aXNvciBkZXRlY3RzIHRoYXQgdGhlIGd1ZXN0IE9TIGhhcyBhdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWVtb3J5IGxvY2F0aW9uIGl0IHNob3VsZG4mIzM5O3QuCgpOb3csIG15IG1pbmQgc3RhcnRzIHRvIHJhY2UuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXI6CgoqICAgKipXaGF0IGV4YWN0bHkgdHJpZ2dlcnMgdGhpcyBmYXVsdD8qKiBJcyBpdCBhIGd1ZXN0IE9TIGJ1ZywgYSBtaXNjb25maWd1cmVkIG1lbW9yeSBtYXBwaW5nLCBvciBzb21ldGhpbmcgbW9yZSBpbnNpZGlvdXM/IE15IGV4cGVydCBpbnR1aXRpb24ga2lja3MgaW4sIGFuZCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBjYXVzZXM6IHBhZ2UgdGFibGUgaXNzdWVzLCBpbmNvcnJlY3QgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBjYWxjdWxhdGlvbiwgb3IgbWF5YmUgYSBwcm9ibGVtIHdpdGggZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24uCiogICAqKldoYXQgYXJlIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBmYXVsdD8qKiBJcyBpdCBhIHNpbXBsZSByZWNvdmVyYWJsZSBlcnJvciwgb3IgZG9lcyBpdCBtZWFuIHRoZSBWTSBpcyBpbiBhIHByZWNhcmlvdXMgc3RhdGU/IElzIGl0IHNhZmUgdG8gY29udGludWUsIG9yIGlzIGEgY29udHJvbGxlZCBzaHV0ZG93biBuZWNlc3Nhcnk/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzeXN0ZW0gc3RhdGUgd2hlbiB0aGlzIGZhdWx0IG9jY3Vycy4KKiAgICoqV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHNvbHV0aW9ucz8qKiBEb2VzIHRoZSBjb2RlIGF0dGVtcHQgdG8gY29ycmVjdCB0aGUgZXJyb3IsIG9yIGRvZXMgaXQgc2ltcGx5IHJlcG9ydCBpdD8gQ2FuIHdlIHJlbWFwIHRoZSBtZW1vcnksIGludmFsaWRhdGUgdGhlIHRyYW5zbGF0aW9uLCBvciBldmVuIGVtdWxhdGUgdGhlIGZhaWxpbmcgb3BlcmF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlcnJvcnMsIGlmIGl0IGNhbGxzIG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gY29kZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG9mIHRoZSBvcHRpb25zIGFyZSByaXNreSBvciB3aGV0aGVyIGEgVk0gZXhpdCBpcyBuZWNlc3NhcnkuCiogICAqKldoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW4gdGhlIGxhcmdlciBwaWN0dXJlPyoqIFdoYXQgcGFydCBvZiB0aGUgS1ZNIGFyY2hpdGVjdHVyZSBpcyBpdCBpbnZvbHZlZCBpbj8gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsIHRvIHVuZGVyc3RhbmQgaG93IHNsb3RzLCBwYWdlIHRhYmxlcywgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXJlIHJlbGF0ZWQuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGZhdWx0cywgYW5kIHRoYXQgY2FuIHRyaWdnZXIgbG90cyBvZiBpbnRlcmVzdGluZyBxdWVzdGlvbnMuCgpTbywgSSB3aWxsIGJlZ2luIGJ5IGV4YW1pbmluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBmdW5jdGlvbiwgaXRzIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgbG9nZ2luZyBzdGF0ZW1lbnRzLiBUaGVuIEkgY2FuIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBtYWtlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuIE15IHBsYW4gaXMgdG8gc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX25vc2xvdF9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tbXUvbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNTA5PXN0YXRpYyBpbnQga3ZtX2hhbmRsZV9lcnJvcl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzUzMS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzUzMjpzdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtMzUzMy1cdFx0XHRcdCAgIHN0cnVjdCBrdm1fcGFnZV9mYXVsdCAqZmF1bHQsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00NjY0PXN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjkyLVx0aWYgKHVubGlrZWx5KCFzbG90KSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDY5MzpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Njk0LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDcyMS1cdFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3MjI6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzIzLVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc3My1cdFx0aWYgKGZhdWx0LVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjQ3NzQ6XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Nzc1LVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDc3OS1cdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDc4MDpcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyBpbiBLVk0gTU1JTyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHdlIG1pZ2h0IGJlIHNlZWluZyBwZXJmb3JtYW5jZSBoaXRzLCBwYXJ0aWN1bGFybHkgd2l0aCBNTUlPIGluIEtWTS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAuIEkga25vdyBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGl0IGdldHMgY2FsbGVkIGZvciBhbnkgTU1JTyBhY2Nlc3MsIHNvIGl0JiMzOTtzIGEgdmVyeSBob3QgcGF0aC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcGxhY2UgdG8gbG9vay4gQnV0IGBodmFfdG9fcGZuX3JlbWFwcGVkYC4uLiB0aGF0JiMzOTtzIHNwZWNpZmljYWxseSB0aWVkIHRvIFZNX0lPIGFuZCBWTV9QRk5NQVAsIHNvIGl0IHdhcnJhbnRzIGNsb3NlIGV4YW1pbmF0aW9uIHRvby4KCk5vdyBJIG5lZWQgdG8gcmVtZW1iZXIgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcy4gSSBzdXNwZWN0IHRoYXQgS1ZNIGlzLCBvYnZpb3VzbHksIGEgcHJlcmVxdWlzaXRlLCBidXQgSSB3YW50IHRvIGJlIHRob3JvdWdoLiBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyByZWxhdGVkIHRvIEtWTSBmb3IgYW55IHBvdGVudGlhbGx5IHJlbGV2YW50IG9wdGlvbnMg4oCTIEkmIzM5O2xsIHN0YXJ0IHdpdGggYHZpcnQva3ZtL0tjb25maWdgIGFuZCB0aGVuIG1heWJlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gVGhhdCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gY29uZmlndXJhYmxlIGVsZW1lbnRzIHRoYXQgbWlnaHQgYmUgYWZmZWN0aW5nIHRoZSBwZXJmb3JtYW5jZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIFBlcmZvcm1hbmNlIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgY29kZSDigJMgc3BlY2lmaWNhbGx5IGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhbmQgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGUgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGBLVk1gLCBzbyB0aGF0JiMzOTtzIGhlbHBmdWwgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcmUuCgpUaGUgZmlyc3QgZnVuY3Rpb24gdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgLiBUaGF0IHNlZW1zIHNpZ25pZmljYW50LCBhbmQgdGhlIGNhbGwgc2l0ZXMgaW52b2x2ZSBgdm1hLSZndDt2bV9mbGFnc2Agd2l0aCBlaXRoZXIgYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBzZXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIHRob3VnaD8KCkFoLCBoZXJlJiMzOTtzIGFub3RoZXIgb25lOiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLiBUaGF0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGBmYXVsdC0mZ3Q7cGZuYCBpcyBlcXVhbCB0byBgS1ZNX1BGTl9FUlJfUEZOTUFQYC4gR29vZC4gSSB0aGluayBJIGNhbiB1c2UgYm90aCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBjaGFuZ2UuCgpXYWl0LCBpc24mIzM5O3QgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBvZnRlbiB1c2VkIGluIHRoZSBNTUlPIGhvdCBwYXRoPyBUaGF0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgb2Z0ZW4gaXQmIzM5O3MgZ2V0dGluZyBjYWxsZWQuIE5vdyBsZXQmIzM5O3MgY2hlY2sgaWYgYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIGFsc28gYSBob3QgcGF0aC4gSXQmIzM5O3Mgb25seSBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggZWl0aGVyIGBWTV9JT2Agb3IgYFZNX1BGTk1BUGAgZmxhZ3MsIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBJJiMzOTtsbCBub3cgZGlnIGludG8gYHZpcnQva3ZtL2t2bV9tYWluLmNgIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodmFfdG9fcGZuX3JlbWFwcGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9Mjk4NT1rdm1fcGZuX3QgaHZhX3RvX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTMtXHRlbHNlIGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNDpcdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTUtXHRcdGlmIChyID09IC1FQUdBSU4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHJlYWxseSBzY3J1dGluaXplIHRoaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZnJlc2ggbWVudGFsIG1vZGVsIGFuZCB0aGVuIHZlcmlmeSBteSBhc3N1bXB0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGNvcmUgbG9naWM6IHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQgd2l0aCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljcy4gQXJlIHdlIGhhbmRsaW5nIHBhZ2UgdGFibGVzIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHRoZSBleHBlY3RlZCBlZGdlIGNhc2VzLiBBbmQsIGltcG9ydGFudGx5LCBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgaXQgYmVoYXZlcyBwcmVkaWN0YWJseSBpbiB0aGUgZmFjZSBvZiB1bmV4cGVjdGVkIGlucHV0IG9yIHN5c3RlbSBzdGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkzOTpcdHN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI5NDA6XHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXG4yOTQxOlx0e1xuMjk0MjpcdFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGtmcC1cdTAwM2VodmEgfTtcbjI5NDM6XHRcdGJvb2wgd3JpdGVfZmF1bHQgPSBrZnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEU7XG4yOTQ0Olx0XHRpbnQgcjtcbjI5NDU6XHRcbjI5NDY6XHRcdC8qXG4yOTQ3Olx0XHQgKiBSZW1hcHBlZCBtZW1vcnkgY2Fubm90IGJlIHBpbm5lZCBpbiBhbnkgbWVhbmluZ2Z1bCBzZW5zZS4gIEJhaWwgaWZcbjI5NDg6XHRcdCAqIHRoZSBjYWxsZXIgd2FudHMgdG8gcGluIHRoZSBwYWdlLCBpLmUuIGFjY2VzcyB0aGUgcGFnZSBvdXRzaWRlIG9mXG4yOTQ5Olx0XHQgKiBNTVUgbm90aWZpZXIgcHJvdGVjdGlvbiwgYW5kIHVuc2FmZSB1bWFwcGluZ3MgYXJlIGRpc2FsbG93ZWQuXG4yOTUwOlx0XHQgKi9cbjI5NTE6XHRcdGlmIChrZnAtXHUwMDNlcGluIFx1MDAyNlx1MDAyNiAhYWxsb3dfdW5zYWZlX21hcHBpbmdzKVxuMjk1MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI5NTM6XHRcbjI5NTQ6XHRcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuMjk1NTpcdFx0aWYgKHIpIHtcbjI5NTY6XHRcdFx0LypcbjI5NTc6XHRcdFx0ICogZ2V0X3VzZXJfcGFnZXMgZmFpbHMgZm9yIFZNX0lPIGFuZCBWTV9QRk5NQVAgdm1hcyBhbmQgZG9lc1xuMjk1ODpcdFx0XHQgKiBub3QgY2FsbCB0aGUgZmF1bHQgaGFuZGxlciwgc28gZG8gaXQgaGVyZS5cbjI5NTk6XHRcdFx0ICovXG4yOTYwOlx0XHRcdGJvb2wgdW5sb2NrZWQgPSBmYWxzZTtcbjI5NjE6XHRcdFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwga2ZwLVx1MDAzZWh2YSxcbjI5NjI6XHRcdFx0XHRcdCAgICAgKHdyaXRlX2ZhdWx0ID8gRkFVTFRfRkxBR19XUklURSA6IDApLFxuMjk2MzpcdFx0XHRcdFx0ICAgICBcdTAwMjZ1bmxvY2tlZCk7XG4yOTY0Olx0XHRcdGlmICh1bmxvY2tlZClcbjI5NjU6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjI5NjY6XHRcdFx0aWYgKHIpXG4yOTY3Olx0XHRcdFx0cmV0dXJuIHI7XG4yOTY4Olx0XG4yOTY5Olx0XHRcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuMjk3MDpcdFx0XHRpZiAocilcbjI5NzE6XHRcdFx0XHRyZXR1cm4gcjtcbjI5NzI6XHRcdH1cbjI5NzM6XHRcbjI5NzQ6XHRcdGlmICh3cml0ZV9mYXVsdCBcdTAwMjZcdTAwMjYgIWFyZ3Mud3JpdGFibGUpIHtcbjI5NzU6XHRcdFx0KnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7XG4yOTc2Olx0XHRcdGdvdG8gb3V0O1xuMjk3NzpcdFx0fVxuMjk3ODpcdFxuMjk3OTpcdFx0KnBfcGZuID0ga3ZtX3Jlc29sdmVfcGZuKGtmcCwgTlVMTCwgXHUwMDI2YXJncywgYXJncy53cml0YWJsZSk7XG4yOTgwOlx0b3V0OlxuMjk4MTpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4yOTgyOlx0XHRyZXR1cm4gcjtcbjI5ODM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDE0OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmF1bHQgSGFuZGxpbmcgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRoZSBjaGFuZ2UgSSYjMzk7bSBzZWVpbmcgaXMgd2l0aGluIGBodmFfdG9fcGZuYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBkZWFsaW5nIHdpdGggYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBmbGFncy4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGh2YV90b19wZm5fcmVtYXBwZWRgIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0JiMzOTtzIGNsZWFybHkgaW52b2x2ZWQgaW4gdHJhbnNsYXRpbmcgaG9zdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBmcmFtZSBudW1iZXJzIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KCkkgbm90aWNlZCBga3ZtX21tdV9mYXVsdGluX3BmbmAgd2FzIGFsc28gbW9kaWZpZWQsIGJ1dCBnaXZlbiB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG9uIGEgaG90IHBhdGgsIEkmIzM5O2QgcmF0aGVyIGZvY3VzIG9uIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9uLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGlzLiBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGNhbGxlZCB3aGVuIHRoZSBgZmF1bHQtJmd0O3BmbmAgaXMgZXF1YWwgdG8gYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoaXMgbWFrZXMgbWUgbGVhbiBldmVuIG1vcmUgdG93YXJkcyBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYmVpbmcgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLgoKTGV0JiMzOTtzIG5vdyB0dXJuIHRvIHRoZSBga3ZtX21tdV9mYXVsdGluX3BmbmAgZnVuY3Rpb24gd2l0aGluIGBhcmNoL3g4Ni9rdm0vbW11L21tdS5jYCwgbGV0JiMzOTtzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NzUwOlx0XHQgKiBEbyB0aGUgcHJlLWNoZWNrIGV2ZW4gZm9yIG5vbi1wcmVlbXRpYmxlIGtlcm5lbHMsIGkuZS4gZXZlbiBpZiBLVk1cbjQ3NTE6XHRcdCAqIHdpbGwgbmV2ZXIgeWllbGQgbW11X2xvY2sgaW4gcmVzcG9uc2UgdG8gY29udGVudGlvbiwgYXMgdGhpcyB2Q1BVIGlzXG40NzUyOlx0XHQgKiAqZ3VhcmFudGVlZCogdG8gbmVlZCB0byByZXRyeSwgaS5lLiB3YWl0aW5nIHVudGlsIG1tdV9sb2NrIGlzIGhlbGRcbjQ3NTM6XHRcdCAqIHRvIGRldGVjdCByZXRyeSBndWFyYW50ZWVzIHRoZSB3b3JzdCBjYXNlIGxhdGVuY3kgZm9yIHRoZSB2Q1BVLlxuNDc1NDpcdFx0ICovXG40NzU1Olx0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuX3Vuc2FmZShrdm0sIGZhdWx0LVx1MDAzZW1tdV9zZXEsIGZhdWx0LVx1MDAzZWdmbikpXG40NzU2Olx0XHRcdHJldHVybiBSRVRfUEZfUkVUUlk7XG40NzU3Olx0XG40NzU4Olx0XHRyZXQgPSBfX2t2bV9tbXVfZmF1bHRpbl9wZm4odmNwdSwgZmF1bHQpO1xuNDc1OTpcdFx0aWYgKHJldCAhPSBSRVRfUEZfQ09OVElOVUUpXG40NzYwOlx0XHRcdHJldHVybiByZXQ7XG40NzYxOlx0XG40NzYyOlx0XHRpZiAodW5saWtlbHkoaXNfZXJyb3JfcGZuKGZhdWx0LVx1MDAzZXBmbikpKSB7XG40NzYzOlx0XHRcdC8qXG40NzY0Olx0XHRcdCAqIEEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiBpcyBiYWNrZWQgYnkgYSBWTV9JTy9WTV9QRk5NQVBcbjQ3NjU6XHRcdFx0ICogbWFwcGluZyB3aG9zZSBmYXVsdCBoYW5kbGVyIHJlZnVzZXMgdG8gaW5zdGFsbCBhIFBURSB3aGlsZSB0aGVcbjQ3NjY6XHRcdFx0ICogZGV2aWNlJiMzOTtzIG1lbW9yeSBzcGFjZSBpcyBkaXNhYmxlZCAoZS5nLiB0aGUgZ3Vlc3QgY2xlYXJlZFxuNDc2NzpcdFx0XHQgKiBQQ0lfQ09NTUFORC5NRU0pLiBUaGUgZmF1bHQgdGhlbiBmYWlscyBldmVuIHRob3VnaCB0aGUgbWVtc2xvdFxuNDc2ODpcdFx0XHQgKiBpcyBzdGlsbCB2YWxpZC4gVHJlYXQgc3VjaCBhbiBhY2Nlc3MgYXMgTU1JTyBhbmQgZW11bGF0ZSBpdCBzb1xuNDc2OTpcdFx0XHQgKiB0aGUgZ3Vlc3Qgb2JzZXJ2ZXMgVW5zdXBwb3J0ZWQgUmVxdWVzdCBzZW1hbnRpY3MsIG1hdGNoaW5nXG40NzcwOlx0XHRcdCAqIGJhcmUgbWV0YWwsIGluc3RlYWQgb2Yga2lsbGluZyB0aGUgVk0gd2l0aCAtRUZBVUxULiBHZW51aW5lLFxuNDc3MTpcdFx0XHQgKiBub24tcGZubWFwIGVycm9ycyBzdGlsbCB0YWtlIHRoZSBmYXRhbCBwYXRoLlxuNDc3MjpcdFx0XHQgKi9cbjQ3NzM6XHRcdFx0aWYgKGZhdWx0LVx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXG40Nzc0Olx0XHRcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuNDc3NTpcdFxuNDc3NjpcdFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9lcnJvcl9wZm4odmNwdSwgZmF1bHQpO1xuNDc3NzpcdFx0fVxuNDc3ODpcdFxuNDc3OTpcdFx0aWYgKFdBUk5fT05fT05DRSghZmF1bHQtXHUwMDNlc2xvdCB8fCBpc19ub3Nsb3RfcGZuKGZhdWx0LVx1MDAzZXBmbikpKVxuNDc4MDpcdFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XG40NzgxOlx0XG40NzgyOlx0XHQvKlxuNDc4MzpcdFx0ICogQ2hlY2sgYWdhaW4gZm9yIGEgcmVsZXZhbnQgbW11X25vdGlmaWVyIGludmFsaWRhdGlvbiBldmVudCBwdXJlbHkgdG9cbjQ3ODQ6XHRcdCAqIGF2b2lkIGNvbnRlbmRpbmcgbW11X2xvY2suICBNb3N0IGludmFsaWRhdGlvbnMgd2lsbCBiZSBkZXRlY3RlZCBieVxuNDc4NTpcdFx0ICogdGhlIHByZXZpb3VzIGNoZWNrLCBidXQgY2hlY2tpbmcgaXMgZXh0cmVtZWx5IGNoZWFwIHJlbGF0aXZlIHRvIHRoZVxuNDc4NjpcdFx0ICogb3ZlcmFsbCBjb3N0IG9mIGZhaWxpbmcgdG8gZGV0ZWN0IHRoZSBpbnZhbGlkYXRpb24gdW50aWwgYWZ0ZXJcbjQ3ODc6XHRcdCAqIG1tdV9sb2NrIGlzIGFjcXVpcmVkLlxuNDc4ODpcdFx0ICovXG40Nzg5Olx0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuX3Vuc2FmZShrdm0sIGZhdWx0LVx1MDAzZW1tdV9zZXEsIGZhdWx0LVx1MDAzZWdmbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMTQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MzIKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogNTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGlzIHdpdGhpbiBga3ZtX21tdV9mYXVsdGluX3BmbmAsIGJ1dCB0aGF0JiMzOTtzIGEgaG90IHBhdGgsIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IGluY2x1ZGluZyBpdCBkaXJlY3RseSBpbiBteSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBBZnRlciBhIGJpdCBvZiB0aG91Z2h0LCBpdCYjMzk7cyBjbGVhciB0aGF0IGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJdCYjMzk7cyBvbmx5IGNhbGxlZCB3aGVuIGRlYWxpbmcgd2l0aCBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIG1hcHBpbmdzLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGFyZWEgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcuIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgbG9va2VkIHByb21pc2luZyBpbml0aWFsbHksIGJ1dCB0aGF0JiMzOTtzIGludm9rZWQgZm9yICphbGwqIE1NSU8gYWNjZXNzZXMsIHRvbyBicm9hZCBhIHNjb3BlIGZvciBteSBwdXJwb3Nlcy4gU28gYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIHRoZSBzd2VldCBzcG90LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgT2J2aW91c2x5LCBgS1ZNYCBpcyBlc3NlbnRpYWwuICBTaW5jZSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYSBQQ0kgQkFSIGFuZCBkaXNhYmxlZCBkZXZpY2UgbWVtb3J5LCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGxvb2sgZm9yIFZGSU8tc3BlY2lmaWMgb3B0aW9ucy4gQnV0LCB0aGUgZGVzY3JpcHRpb24gc2F5cyBpdCBjYW4gaGFwcGVuIGZvciBhbnkgYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBtYXBwaW5nLiAgU28sIEkgZG9uJiMzOTt0ICpzdHJpY3RseSogbmVlZCBWRklPLCBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgb3B0aW9uczsgYEtWTWAgYW5kIGBLVk1fWDg2YCBhcmUgYm90aCB0cmlzdGF0ZSBvcHRpb25zLiBJJiMzOTtsbCBhZGQgYEtWTWAgdG8gbXkgYEVuYWJsZUNvbmZpZ3NgLgoKSnVzdCB0byByZWNhcDogdGhlIHBhdGNoIGFsdGVycyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlci4gSXQgdHJlYXRzIGZhaWx1cmVzIGR1cmluZyBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIG1hcHBpbmdzIGFzIE1NSU8gZXJyb3JzIHJhdGhlciB0aGFuIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgY29yZSBLVk0gbG9naWMgaXRzZWxmLCB3aGljaCBpcyBkZWZpbml0ZWx5IGZ1enotd29ydGh5LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwYXRjaCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24mIzM5O3QgbGVhZCB0byByZWdyZXNzaW9ucyBvciBjcmFzaGVzLiBTbywgdGhlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBjaG9pY2Ugb2YgYGh2YV90b19wZm5fcmVtYXBwZWRgIGFzIHRoZSBmb2N1cyBzeW1ib2wgaXMgdmFsaWQsIHNpbmNlIGl0IGlzIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkLgoKQSBxdWljayByZXZpZXcgb2YgdGhlIGNvZGUgY29uZmlybXMgdGhpcy4gU3BlY2lmaWNhbGx5LCB0aGUgYGh2YV90b19wZm5gIGZ1bmN0aW9uIHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2AsIGFuZCB0aGUgY29kZSBzaG93cyB0aGF0IGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gdGFyZ2V0LCBzaW5jZSB0aGUgcGF0aCB3aWxsIHJlc3VsdCBpbiBleGVjdXRpb24gb2YgYGh2YV90b19wZm5fcmVtYXBwZWRgLCB3aGljaCBpcyBub3QgYSBob3QgcGF0aC4KClNvLCBoZXJlJiMzOTtzIHRoZSBmaW5hbCBjYWxsOgoKKiAgIEZvY3VzIHN5bWJvbHM6IGBodmFfdG9fcGZuX3JlbWFwcGVkYAoqICAgRW5hYmxlIGNvbmZpZ3M6IGBLVk1gCgpJJiMzOTttIGNvbmZpZGVudCB3aXRoIHRoaXMsIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAxNDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB0cmVhdCBmYWlsdXJlcyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBlcnJvcnMgKGUuZy4sIGRpc2FibGVkIFBDSSBCQVJzKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbXVsYXRlcyBNTUlPIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHZhX3RvX3Bmbl9yZW1hcHBlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB0cmVhdCBmYWlsdXJlcyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBlcnJvcnMgKGUuZy4sIGRpc2FibGVkIFBDSSBCQVJzKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbXVsYXRlcyBNTUlPIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjEzLjg2MzYzOTY4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDkyODY1NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh2YV90b19wZm5fcmVtYXBwZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB0cmVhdCBmYWlsdXJlcyBpbiBWTV9JTy9WTV9QRk5NQVAgbWFwcGluZ3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGZhdGFsIGVycm9ycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBlcnJvcnMgKGUuZy4sIGRpc2FibGVkIFBDSSBCQVJzKSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBlbXVsYXRlcyBNTUlPIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBjcmFzaGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDoxMy44NjM2NDUxODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODYzMzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1ODliN2MyM2U0NmZlZWQyNzJhOGRjNzhhNjIzNWJkNjAwNWVhY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjEgMTQ6MDA6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCA5MTg0M2U5MjI0ZDA0NS4uMTE1ZTJjNGRiNWZhMDIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5AQCAtNDc1OSw4ICs0NzU5LDIyIEBAIHN0YXRpYyBpbnQga3ZtX21tdV9mYXVsdGluX3BmbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGlmIChyZXQgIT0gUkVUX1BGX0NPTlRJTlVFKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC1cXHUwMDNlcGZuKSkpXFxuK1xcdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiBpcyBiYWNrZWQgYnkgYSBWTV9JTy9WTV9QRk5NQVBcXG4rXFx0XFx0ICogbWFwcGluZyB3aG9zZSBmYXVsdCBoYW5kbGVyIHJlZnVzZXMgdG8gaW5zdGFsbCBhIFBURSB3aGlsZSB0aGVcXG4rXFx0XFx0ICogZGV2aWNlJ3MgbWVtb3J5IHNwYWNlIGlzIGRpc2FibGVkIChlLmcuIHRoZSBndWVzdCBjbGVhcmVkXFxuK1xcdFxcdCAqIFBDSV9DT01NQU5ELk1FTSkuIFRoZSBmYXVsdCB0aGVuIGZhaWxzIGV2ZW4gdGhvdWdoIHRoZSBtZW1zbG90XFxuK1xcdFxcdCAqIGlzIHN0aWxsIHZhbGlkLiBUcmVhdCBzdWNoIGFuIGFjY2VzcyBhcyBNTUlPIGFuZCBlbXVsYXRlIGl0IHNvXFxuK1xcdFxcdCAqIHRoZSBndWVzdCBvYnNlcnZlcyBVbnN1cHBvcnRlZCBSZXF1ZXN0IHNlbWFudGljcywgbWF0Y2hpbmdcXG4rXFx0XFx0ICogYmFyZSBtZXRhbCwgaW5zdGVhZCBvZiBraWxsaW5nIHRoZSBWTSB3aXRoIC1FRkFVTFQuIEdlbnVpbmUsXFxuK1xcdFxcdCAqIG5vbi1wZm5tYXAgZXJyb3JzIHN0aWxsIHRha2UgdGhlIGZhdGFsIHBhdGguXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZmF1bHQtXFx1MDAzZXBmbiA9PSBLVk1fUEZOX0VSUl9QRk5NQVApXFxuK1xcdFxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG4rXFxuIFxcdFxcdHJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVxcdTAwM2VzbG90IHx8IGlzX25vc2xvdF9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKVxcbiBcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbmluZGV4IDRjMTRhZWUxZmIwNjMzLi5kYzU5NzNlNDAwNzIxOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtOTksNiArOTksMTQgQEBcXG4gI2RlZmluZSBLVk1fUEZOX0VSUl9ST19GQVVMVFxcdChLVk1fUEZOX0VSUl9NQVNLICsgMilcXG4gI2RlZmluZSBLVk1fUEZOX0VSUl9TSUdQRU5ESU5HXFx0KEtWTV9QRk5fRVJSX01BU0sgKyAzKVxcbiAjZGVmaW5lIEtWTV9QRk5fRVJSX05FRURTX0lPXFx0KEtWTV9QRk5fRVJSX01BU0sgKyA0KVxcbisvKlxcbisgKiBGYXVsdGluZyBpbiBhIFZNX0lPL1ZNX1BGTk1BUCBtYXBwaW5nIGZhaWxlZCBiZWNhdXNlIHRoZSBvd25lcidzIGZhdWx0XFxuKyAqIGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURSwgZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2hvc2VcXG4rICogZGV2aWNlIG1lbW9yeSBpcyBjdXJyZW50bHkgZGlzYWJsZWQgKHRoZSBndWVzdCBjbGVhcmVkIFBDSV9DT01NQU5ELk1FTSkuXFxuKyAqIFRoZSBtZW1zbG90IGlzIHZhbGlkOyB0aGUgYWNjZXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIE1NSU8gcmF0aGVyIHRoYW4gYVxcbisgKiBmYXRhbCAtRUZBVUxULlxcbisgKi9cXG4rI2RlZmluZSBLVk1fUEZOX0VSUl9QRk5NQVBcXHQoS1ZNX1BGTl9FUlJfTUFTSyArIDUpXFxuIFxcbiAvKlxcbiAgKiBlcnJvciBwZm5zIGluZGljYXRlIHRoYXQgdGhlIGdmbiBpcyBpbiBzbG90IGJ1dCBmYWlsZCB0b1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbmluZGV4IDg4MWY5MmQ3YTQ2OWU3Li5mMjMyZmMyZjQyMzgwYSAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0zMDE1LDcgKzMwMTUsMTQgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuIFxcdFxcdGlmIChyID09IC1FQUdBSU4pXFxuIFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBvd25lcidzIGZhdWx0IGhhbmRsZXIgZGVjbGluZWQgdG8gaW5zdGFsbCBhIFBURVxcbitcXHRcXHRcXHQgKiAoZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2l0aCBkZXZpY2UgbWVtb3J5XFxuK1xcdFxcdFxcdCAqIGRpc2FibGVkKS4gRmxhZyBpdCBkaXN0aW5jdGx5IHNvIHRoZSBhcmNoIGZhdWx0XFxuK1xcdFxcdFxcdCAqIGhhbmRsZXIgY2FuIHRyZWF0IHRoZSBhY2Nlc3MgYXMgTU1JTyBpbnN0ZWFkIG9mIGFcXG4rXFx0XFx0XFx0ICogZmF0YWwgLUVGQVVMVC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBmbiA9IEtWTV9QRk5fRVJSX1BGTk1BUDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKChrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9OT1dBSVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICB2bWFfaXNfdmFsaWQodm1hLCBrZnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRk9MTF9XUklURSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjE0LjMyMjg2OTIzM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMzM2Mjg0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHZhX3RvX3Bmbl9yZW1hcHBlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGVyIHRvIHRyZWF0IGZhaWx1cmVzIGluIFZNX0lPL1ZNX1BGTk1BUCBtYXBwaW5ncyBhcyBNTUlPIGluc3RlYWQgb2YgZmF0YWwgZXJyb3JzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIGVycm9ycyAoZS5nLiwgZGlzYWJsZWQgUENJIEJBUnMpLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGVtdWxhdGVzIE1NSU8gYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGNyYXNoZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzU4OWI3YzIzZTQ2ZmVlZDI3MmE4ZGM3OGE2MjM1YmQ2MDA1ZWFjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDIxIDE0OjAwOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDkxODQzZTkyMjRkMDQ1Li4xMTVlMmM0ZGI1ZmEwMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC00NzU5LDggKzQ3NTksMjIgQEAgc3RhdGljIGludCBrdm1fbW11X2ZhdWx0aW5fcGZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmIChyZXQgIT0gUkVUX1BGX0NPTlRJTlVFKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2Vycm9yX3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbitcdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXHUwMDNlcGZuKSkpIHtcbitcdFx0LypcbitcdFx0ICogQSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIGlzIGJhY2tlZCBieSBhIFZNX0lPL1ZNX1BGTk1BUFxuK1x0XHQgKiBtYXBwaW5nIHdob3NlIGZhdWx0IGhhbmRsZXIgcmVmdXNlcyB0byBpbnN0YWxsIGEgUFRFIHdoaWxlIHRoZVxuK1x0XHQgKiBkZXZpY2UncyBtZW1vcnkgc3BhY2UgaXMgZGlzYWJsZWQgKGUuZy4gdGhlIGd1ZXN0IGNsZWFyZWRcbitcdFx0ICogUENJX0NPTU1BTkQuTUVNKS4gVGhlIGZhdWx0IHRoZW4gZmFpbHMgZXZlbiB0aG91Z2ggdGhlIG1lbXNsb3RcbitcdFx0ICogaXMgc3RpbGwgdmFsaWQuIFRyZWF0IHN1Y2ggYW4gYWNjZXNzIGFzIE1NSU8gYW5kIGVtdWxhdGUgaXQgc29cbitcdFx0ICogdGhlIGd1ZXN0IG9ic2VydmVzIFVuc3VwcG9ydGVkIFJlcXVlc3Qgc2VtYW50aWNzLCBtYXRjaGluZ1xuK1x0XHQgKiBiYXJlIG1ldGFsLCBpbnN0ZWFkIG9mIGtpbGxpbmcgdGhlIFZNIHdpdGggLUVGQVVMVC4gR2VudWluZSxcbitcdFx0ICogbm9uLXBmbm1hcCBlcnJvcnMgc3RpbGwgdGFrZSB0aGUgZmF0YWwgcGF0aC5cbitcdFx0ICovXG4rXHRcdGlmIChmYXVsdC1cdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUEZOTUFQKVxuK1x0XHRcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcbitcbiBcdFx0cmV0dXJuIGt2bV9oYW5kbGVfZXJyb3JfcGZuKHZjcHUsIGZhdWx0KTtcbitcdH1cbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cdTAwM2VwZm4pKSlcbiBcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHZjcHUsIGZhdWx0LCBhY2Nlc3MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggNGMxNGFlZTFmYjA2MzMuLmRjNTk3M2U0MDA3MjE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbkBAIC05OSw2ICs5OSwxNCBAQFxuICNkZWZpbmUgS1ZNX1BGTl9FUlJfUk9fRkFVTFRcdChLVk1fUEZOX0VSUl9NQVNLICsgMilcbiAjZGVmaW5lIEtWTV9QRk5fRVJSX1NJR1BFTkRJTkdcdChLVk1fUEZOX0VSUl9NQVNLICsgMylcbiAjZGVmaW5lIEtWTV9QRk5fRVJSX05FRURTX0lPXHQoS1ZNX1BGTl9FUlJfTUFTSyArIDQpXG4rLypcbisgKiBGYXVsdGluZyBpbiBhIFZNX0lPL1ZNX1BGTk1BUCBtYXBwaW5nIGZhaWxlZCBiZWNhdXNlIHRoZSBvd25lcidzIGZhdWx0XG4rICogaGFuZGxlciBkZWNsaW5lZCB0byBpbnN0YWxsIGEgUFRFLCBlLmcuIGEgcGFzc2VkLXRocm91Z2ggUENJIEJBUiB3aG9zZVxuKyAqIGRldmljZSBtZW1vcnkgaXMgY3VycmVudGx5IGRpc2FibGVkICh0aGUgZ3Vlc3QgY2xlYXJlZCBQQ0lfQ09NTUFORC5NRU0pLlxuKyAqIFRoZSBtZW1zbG90IGlzIHZhbGlkOyB0aGUgYWNjZXNzIHNob3VsZCBiZSB0cmVhdGVkIGFzIE1NSU8gcmF0aGVyIHRoYW4gYVxuKyAqIGZhdGFsIC1FRkFVTFQuXG4rICovXG4rI2RlZmluZSBLVk1fUEZOX0VSUl9QRk5NQVBcdChLVk1fUEZOX0VSUl9NQVNLICsgNSlcbiBcbiAvKlxuICAqIGVycm9yIHBmbnMgaW5kaWNhdGUgdGhhdCB0aGUgZ2ZuIGlzIGluIHNsb3QgYnV0IGZhaWxkIHRvXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbmluZGV4IDg4MWY5MmQ3YTQ2OWU3Li5mMjMyZmMyZjQyMzgwYSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0zMDE1LDcgKzMwMTUsMTQgQEAga3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXG4gXHRcdGlmIChyID09IC1FQUdBSU4pXG4gXHRcdFx0Z290byByZXRyeTtcbiBcdFx0aWYgKHIgXHUwMDNjIDApXG4tXHRcdFx0cGZuID0gS1ZNX1BGTl9FUlJfRkFVTFQ7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgb3duZXIncyBmYXVsdCBoYW5kbGVyIGRlY2xpbmVkIHRvIGluc3RhbGwgYSBQVEVcbitcdFx0XHQgKiAoZS5nLiBhIHBhc3NlZC10aHJvdWdoIFBDSSBCQVIgd2l0aCBkZXZpY2UgbWVtb3J5XG4rXHRcdFx0ICogZGlzYWJsZWQpLiBGbGFnIGl0IGRpc3RpbmN0bHkgc28gdGhlIGFyY2ggZmF1bHRcbitcdFx0XHQgKiBoYW5kbGVyIGNhbiB0cmVhdCB0aGUgYWNjZXNzIGFzIE1NSU8gaW5zdGVhZCBvZiBhXG4rXHRcdFx0ICogZmF0YWwgLUVGQVVMVC5cbitcdFx0XHQgKi9cbitcdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9QRk5NQVA7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoKGtmcC1cdTAwM2VmbGFncyBcdTAwMjYgRk9MTF9OT1dBSVQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgdm1hX2lzX3ZhbGlkKHZtYSwga2ZwLVx1MDAzZWZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjE0LjMyMjg3MDU2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTYxMjY3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIFBhdGNoIGZvciBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBzb21lIGNvcmUgS1ZNIGZpbGVzOiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgLCBhbmQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIE1NVSBhbmQgaG9zdCBpbnRlcmZhY2VzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgbmV3IGVycm9yIFBGTiwgYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoZSB1c2Ugb2YgYFBGTk1BUGAgaW5kaWNhdGVzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgZnJhbWUgbnVtYmVycywgYW5kIHRoZSBcImVycm9yXCIgcGFydCBpcyBpbXBvcnRhbnQuIEl0IGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBtYW5hZ2UgZXJyb3JzIHJlbGF0ZWQgdG8gZmF1bHRpbmcgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzLCB3aGVyZSB0aGUgb3duZXIgb2YgdGhlIG1lbW9yeSBtYXBwaW5nIChlLmcuLCBhIGRldmljZSkgaXMgcmVmdXNpbmcgdG8gcHJvdmlkZSBhIHZhbGlkIFBURS4gVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYSByZXNvdXJjZSBvciBwZXJtaXNzaW9uIGlzc3VlLlxuXG5UaGUga2V5IGNoYW5nZSBpcyBpbiBgaHZhX3RvX3BmbmAsIHdoZXJlIGl0J3MgYmVpbmcgc2V0IHRvIGBLVk1fUEZOX0VSUl9QRk5NQVBgIGluc3RlYWQgb2YgYEtWTV9QRk5fRVJSX0ZBVUxUYCB3aGVuIGBodmFfdG9fcGZuX3JlbWFwcGVkYCByZXR1cm5zIGFuIGVycm9yLiBSaWdodCwgc28gYGh2YV90b19wZm5gIGNhbGxzIGBodmFfdG9fcGZuX3JlbWFwcGVkYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBXZeKAmXJlIGNoYW5naW5nICpob3cqIHdlIGNsYXNzaWZ5IHRoZXNlIHBhcnRpY3VsYXIgZmF1bHRpbmcgc2NlbmFyaW9zLiBJbnN0ZWFkIG9mIGEgZ2VuZXJpYyBmYXVsdCwgd2XigJlyZSB1c2luZyBhIG1vcmUgc3BlY2lmaWMgZXJyb3IgY29kZS5cblxuSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2NlbmFyaW8gdGhlIGNoYW5nZSBhZGRyZXNzZXMuIExldCBtZSB1c2UgYGdyZXBwZXJgIHRvIHNlZSB3aGVyZSBgaHZhX3RvX3BmbmAgaXMgY2FsbGVkLCBhbmQgYWxzbyB0byB1bmRlcnN0YW5kIHdoZXJlIGBrdm1fbW11X2ZhdWx0aW5fcGZuYCBpcyBiZWluZyB1c2VkLCBiZWNhdXNlIHRoZSBjb21tZW50cyBzdWdnZXN0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBmYXVsdGluZyBpbiB0aGUgcGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjE5LjkxOTAwMDE2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY0NTg3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3BmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjgyNz1zdGF0aWMga3ZtX3Bmbl90IGt2bV9yZXNvbHZlX3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI4NTAtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyODUxOnN0YXRpYyBib29sIGh2YV90b19wZm5fZmFzdChzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwZm4pXFxudmlydC9rdm0va3ZtX21haW4uYy0yODUyLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4Mi0gKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI4ODM6c3RhdGljIGludCBodmFfdG9fcGZuX3Nsb3coc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcGZuKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjg4NC17XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mjg9c3RhdGljIGJvb2wgdm1hX2lzX3ZhbGlkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sIHdyaXRlX2ZhdWx0KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTM4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjkzOTpzdGF0aWMgaW50IGh2YV90b19wZm5fcmVtYXBwZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTQwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcCwga3ZtX3Bmbl90ICpwX3BmbilcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk4NC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5ODU6a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxudmlydC9rdm0va3ZtX21haW4uYy0yOTg2LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5NS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTY6XFx0aWYgKGh2YV90b19wZm5fZmFzdChrZnAsIFxcdTAwMjZwZm4pKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5Ny1cXHRcXHRyZXR1cm4gcGZuO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk5OC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5OTk6XFx0bnBhZ2VzID0gaHZhX3RvX3Bmbl9zbG93KGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDAwLVxcdGlmIChucGFnZXMgPT0gMSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxMy1cXHRlbHNlIGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzAxNDpcXHRcXHRyID0gaHZhX3RvX3Bmbl9yZW1hcHBlZCh2bWEsIGtmcCwgXFx1MDAyNnBmbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMDE1LVxcdFxcdGlmIChyID09IC1FQUdBSU4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTMwMzc9c3RhdGljIGt2bV9wZm5fdCBrdm1fZm9sbG93X3BmbihzdHJ1Y3Qga3ZtX2ZvbGxvd19wZm4gKmtmcClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzA1Mi1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwNTM6XFx0cmV0dXJuIGh2YV90b19wZm4oa2ZwKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwNTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDoyMC4yODU0Njk0MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjUyMTQ2OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBFcnJvciBIYW5kbGluZyBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiB0aGUgS1ZNIGNvZGUuIEl0IGxvb2tzIGxpa2UgaXQncyBpbiBgaHZhX3RvX3BmbmAgd2l0aGluIGBrdm1fbWFpbi5jYCDigJMgc3BlY2lmaWNhbGx5LCB0aGlzIHNlY3Rpb246XG5cbmBgYGNcblx0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XG5cdFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFx1MDAyNnBmbik7XG5cdFx0aWYgKHIgPT0gLUVBR0FJTilcblx0XHRcdGdvdG8gcmV0cnk7XG5cdFx0aWYgKHIgXHUwMDNjIDApXG5cdFx0XHRwZm4gPSBLVk1fUEZOX0VSUl9QRk5NQVA7XG5gYGBcblxuSXQgbG9va3MgbGlrZSB0aGUga2V5IGlzIGhvdyB0aGlzIGhhbmRsZXMgdGhlIGVycm9yIGNhc2UgZm9yIGBWTV9JT2AgYW5kIGBWTV9QRk5NQVBgIG1hcHBpbmdzLCB0cmVhdGluZyB0aGVtIGFzIGlmIHRoZXkncmUgTWVtb3J5LU1hcHBlZCBJL08uIEludGVyZXN0aW5nLiBBbmQgdGhlbiBpbiBgbW11LmNgOlxuXG5gYGBjXG5cdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXHUwMDNlcGZuKSkpIHtcblx0XHRpZiAoZmF1bHQtXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1BGTk1BUClcblx0XHRcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcblxuXHRcdHJldHVybiBrdm1faGFuZGxlX2Vycm9yX3Bmbih2Y3B1LCBmYXVsdCk7XG5cdH1cbmBgYFxuXG5UaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSW5zdGVhZCBvZiBhIGZhdGFsIGVycm9yLCBpdCdzIGhhbmRsaW5nIGEgc3BlY2lmaWMgTU1JTy1saWtlIGNhc2UuIERlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGlzIGFyZWEuXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBhcm91bmQgYGt2bV9tbXVfZmF1bHRpbl9wZm5gLCBgaHZhX3RvX3BmbmAsIGFuZCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAuIFdhaXQsIGBodmFfdG9fcGZuYCBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uISBJdCdzIGludm9sdmVkIGluIGV2ZXJ5IHNpbmdsZSBwYWdlIGZhdWx0IHRoYXQgbmVlZHMgdG8gcmVzb2x2ZSBhIFBGTi4gYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGlzIGFub3RoZXIgaG90IHBhdGguIE9rYXksIGJ1dCBsZXQncyBzZWUgd2hhdCBlbHNlIGdldHMgY2FsbGVkIGhlcmUuIE9oLCBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgIGlzIGNhbGxlZCBhcyB3ZWxsLiBPa2F5LlxuXG5gaHZhX3RvX3Bmbl9yZW1hcHBlZGAgaXMgbGVzcyBvZiBhIGhvdCBzcG90LCBidXQgaXQncyBzcGVjaWZpYyB0byBgVk1fSU9gIGFuZCBgVk1fUEZOTUFQYCDigJMgdGhlIHZlcnkgY2FzZSB3ZSdyZSB0YXJnZXRpbmcuIExldCdzIHNlZSB3aGF0IGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6MjcuNTM3NjE4NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2MzY5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHZhX3RvX3Bmbl9yZW1hcHBlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjkyOD1zdGF0aWMgYm9vbCB2bWFfaXNfdmFsaWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgd3JpdGVfZmF1bHQpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5MzgtXFxudmlydC9rdm0va3ZtX21haW4uYzoyOTM5OnN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NDAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTg1PWt2bV9wZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMDEzLVxcdGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fSU8gfCBWTV9QRk5NQVApKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzozMDE0OlxcdFxcdHIgPSBodmFfdG9fcGZuX3JlbWFwcGVkKHZtYSwga2ZwLCBcXHUwMDI2cGZuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTUtXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6MjcuNTkxMjU5NTQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMDkwNjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGFja2xpbmcgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YDpcblxuKipEaXZpbmcgaW50byBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiBpdHMgcHVycG9zZSBhbmQgdGhlIGNvbnRleHQgaXQgb3BlcmF0ZXMgd2l0aGluLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbiByZWxhdGVkIHRvIEtWTSwgdGhlIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUuIFRoZSBcIm5vc2xvdF9mYXVsdFwiIHBhcnQgbGlrZWx5IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gaXNzdWUgcmVsYXRlZCB0byBtZW1vcnkgc2xvdCBtYW5hZ2VtZW50IHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZSdzIGFkZHJlc3Mgc3BhY2UuIFByb2JhYmx5LCB0aGUgaHlwZXJ2aXNvciBkZXRlY3RzIHRoYXQgdGhlIGd1ZXN0IE9TIGhhcyBhdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWVtb3J5IGxvY2F0aW9uIGl0IHNob3VsZG4ndC5cblxuTm93LCBteSBtaW5kIHN0YXJ0cyB0byByYWNlLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXI6XG5cbiogICAqKldoYXQgZXhhY3RseSB0cmlnZ2VycyB0aGlzIGZhdWx0PyoqIElzIGl0IGEgZ3Vlc3QgT1MgYnVnLCBhIG1pc2NvbmZpZ3VyZWQgbWVtb3J5IG1hcHBpbmcsIG9yIHNvbWV0aGluZyBtb3JlIGluc2lkaW91cz8gTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbiwgYW5kIEkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGNhdXNlczogcGFnZSB0YWJsZSBpc3N1ZXMsIGluY29ycmVjdCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9uLCBvciBtYXliZSBhIHByb2JsZW0gd2l0aCBleHRlbmRlZCBwYWdlIHRhYmxlcyAoRVBUKSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uLlxuKiAgICoqV2hhdCBhcmUgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGZhdWx0PyoqIElzIGl0IGEgc2ltcGxlIHJlY292ZXJhYmxlIGVycm9yLCBvciBkb2VzIGl0IG1lYW4gdGhlIFZNIGlzIGluIGEgcHJlY2FyaW91cyBzdGF0ZT8gSXMgaXQgc2FmZSB0byBjb250aW51ZSwgb3IgaXMgYSBjb250cm9sbGVkIHNodXRkb3duIG5lY2Vzc2FyeT8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgc3lzdGVtIHN0YXRlIHdoZW4gdGhpcyBmYXVsdCBvY2N1cnMuXG4qICAgKipXaGF0IGFyZSB0aGUgcG9zc2libGUgc29sdXRpb25zPyoqIERvZXMgdGhlIGNvZGUgYXR0ZW1wdCB0byBjb3JyZWN0IHRoZSBlcnJvciwgb3IgZG9lcyBpdCBzaW1wbHkgcmVwb3J0IGl0PyBDYW4gd2UgcmVtYXAgdGhlIG1lbW9yeSwgaW52YWxpZGF0ZSB0aGUgdHJhbnNsYXRpb24sIG9yIGV2ZW4gZW11bGF0ZSB0aGUgZmFpbGluZyBvcGVyYXRpb24/IEknbGwgcHJvYmFibHkgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3JzLCBpZiBpdCBjYWxscyBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGUuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IG9mIHRoZSBvcHRpb25zIGFyZSByaXNreSBvciB3aGV0aGVyIGEgVk0gZXhpdCBpcyBuZWNlc3NhcnkuXG4qICAgKipXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGluIHRoZSBsYXJnZXIgcGljdHVyZT8qKiBXaGF0IHBhcnQgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUgaXMgaXQgaW52b2x2ZWQgaW4/IEknbGwgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGVsIHRvIHVuZGVyc3RhbmQgaG93IHNsb3RzLCBwYWdlIHRhYmxlcywgYW5kIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMgYXJlIHJlbGF0ZWQuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IGZhdWx0cywgYW5kIHRoYXQgY2FuIHRyaWdnZXIgbG90cyBvZiBpbnRlcmVzdGluZyBxdWVzdGlvbnMuXG5cblNvLCBJIHdpbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBpdHMgcGFyYW1ldGVycywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBsb2dnaW5nIHN0YXRlbWVudHMuIFRoZW4gSSBjYW4gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCB0aGUgZnVuY3Rpb24gaXRzZWxmIG1ha2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgcGxhbiBpcyB0byBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzEzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6MzIuMzIyMTY4NDIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTk3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21tdS9tbXUuYz0zNTA5PXN0YXRpYyBpbnQga3ZtX2hhbmRsZV9lcnJvcl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3BhZ2VfZmF1bHQgKmZhdWx0KVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy0zNTMxLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6MzUzMjpzdGF0aWMgaW50IGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTM1MzMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9wYWdlX2ZhdWx0ICpmYXVsdCxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDY2ND1zdGF0aWMgaW50IGt2bV9tbXVfZmF1bHRpbl9wZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NjkyLVxcdGlmICh1bmxpa2VseSghc2xvdCkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NjkzOlxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ2OTQtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3MjEtXFx0XFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo0NzIyOlxcdFxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3MjMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTQ3NzMtXFx0XFx0aWYgKGZhdWx0LVxcdTAwM2VwZm4gPT0gS1ZNX1BGTl9FUlJfUEZOTUFQKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDc3NDpcXHRcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Nzc1LVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00Nzc5LVxcdGlmIChXQVJOX09OX09OQ0UoIWZhdWx0LVxcdTAwM2VzbG90IHx8IGlzX25vc2xvdF9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDc4MDpcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00NzgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDozMi4zNzgzNjg3MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE1MDgzNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MgaW4gS1ZNIE1NSU8gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgd2UgbWlnaHQgYmUgc2VlaW5nIHBlcmZvcm1hbmNlIGhpdHMsIHBhcnRpY3VsYXJseSB3aXRoIE1NSU8gaW4gS1ZNLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBhbmQgYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YC4gSSBrbm93IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgaXQgZ2V0cyBjYWxsZWQgZm9yIGFueSBNTUlPIGFjY2Vzcywgc28gaXQncyBhIHZlcnkgaG90IHBhdGguIFRoYXQncyBkZWZpbml0ZWx5IGEgcGxhY2UgdG8gbG9vay4gQnV0IGBodmFfdG9fcGZuX3JlbWFwcGVkYC4uLiB0aGF0J3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gVk1fSU8gYW5kIFZNX1BGTk1BUCwgc28gaXQgd2FycmFudHMgY2xvc2UgZXhhbWluYXRpb24gdG9vLlxuXG5Ob3cgSSBuZWVkIHRvIHJlbWVtYmVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuIEkgc3VzcGVjdCB0aGF0IEtWTSBpcywgb2J2aW91c2x5LCBhIHByZXJlcXVpc2l0ZSwgYnV0IEkgd2FudCB0byBiZSB0aG9yb3VnaC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBLVk0gZm9yIGFueSBwb3RlbnRpYWxseSByZWxldmFudCBvcHRpb25zIOKAkyBJJ2xsIHN0YXJ0IHdpdGggYHZpcnQva3ZtL0tjb25maWdgIGFuZCB0aGVuIG1heWJlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gVGhhdCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gY29uZmlndXJhYmxlIGVsZW1lbnRzIHRoYXQgbWlnaHQgYmUgYWZmZWN0aW5nIHRoZSBwZXJmb3JtYW5jZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjM2LjE5MzQ1NDQwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MjY3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDozNi4yNDY4ODkyNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxMzgyNTQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgUGVyZm9ybWFuY2UgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2gsIGFuZCBpdCdzIHRvdWNoaW5nIHNvbWUgY29yZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHkgYHZpcnQva3ZtL2t2bV9tYWluLmNgIGFuZCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AuIFRoZSBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgYEtWTWAsIHNvIHRoYXQncyBoZWxwZnVsIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlLlxuXG5UaGUgZmlyc3QgZnVuY3Rpb24gdGhhdCBqdW1wcyBvdXQgYXQgbWUgaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgLiBUaGF0IHNlZW1zIHNpZ25pZmljYW50LCBhbmQgdGhlIGNhbGwgc2l0ZXMgaW52b2x2ZSBgdm1hLVx1MDAzZXZtX2ZsYWdzYCB3aXRoIGVpdGhlciBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIHNldC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCB0aG91Z2g/XG5cbkFoLCBoZXJlJ3MgYW5vdGhlciBvbmU6IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAuIFRoYXQncyB0cmlnZ2VyZWQgd2hlbiBgZmF1bHQtXHUwMDNlcGZuYCBpcyBlcXVhbCB0byBgS1ZNX1BGTl9FUlJfUEZOTUFQYC4gR29vZC4gSSB0aGluayBJIGNhbiB1c2UgYm90aCBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYW5kIGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBjaGFuZ2UuXG5cbldhaXQsIGlzbid0IGBrdm1faGFuZGxlX25vc2xvdF9mYXVsdGAgb2Z0ZW4gdXNlZCBpbiB0aGUgTU1JTyBob3QgcGF0aD8gVGhhdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyIGZvciBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHNlZSBob3cgb2Z0ZW4gaXQncyBnZXR0aW5nIGNhbGxlZC4gTm93IGxldCdzIGNoZWNrIGlmIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyBhbHNvIGEgaG90IHBhdGguIEl0J3Mgb25seSBjYWxsZWQgd2hlbiBkZWFsaW5nIHdpdGggZWl0aGVyIGBWTV9JT2Agb3IgYFZNX1BGTk1BUGAgZmxhZ3MsIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93LiBJJ2xsIG5vdyBkaWcgaW50byBgdmlydC9rdm0va3ZtX21haW4uY2AgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24gdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6NDEuNTYwNzE2NTU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkyODkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodmFfdG9fcGZuX3JlbWFwcGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0yOTI4PXN0YXRpYyBib29sIHZtYV9pc192YWxpZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgYm9vbCB3cml0ZV9mYXVsdClcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjkzOC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI5Mzk6c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk0MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnAsIGt2bV9wZm5fdCAqcF9wZm4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5ODU9a3ZtX3Bmbl90IGh2YV90b19wZm4oc3RydWN0IGt2bV9mb2xsb3dfcGZuICprZnApXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMwMTMtXFx0ZWxzZSBpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMwMTQ6XFx0XFx0ciA9IGh2YV90b19wZm5fcmVtYXBwZWQodm1hLCBrZnAsIFxcdTAwMjZwZm4pO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzAxNS1cXHRcXHRpZiAociA9PSAtRUFHQUlOKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDo0MS42MTU2NDg0NTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDg5NTg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGh2YV90b19wZm5fcmVtYXBwZWRgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHJlYWxseSBzY3J1dGluaXplIHRoaXMgYGh2YV90b19wZm5fcmVtYXBwZWRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCdzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGZyZXNoIG1lbnRhbCBtb2RlbCBhbmQgdGhlbiB2ZXJpZnkgbXkgYXNzdW1wdGlvbnMuIEknbGwgZm9jdXMgb24gdGhlIGNvcmUgbG9naWM6IHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGFsaWduZWQgd2l0aCB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3BlY2lmaWNzLiBBcmUgd2UgaGFuZGxpbmcgcGFnZSB0YWJsZXMgY29ycmVjdGx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlIGV4cGVjdGVkIGVkZ2UgY2FzZXMuIEFuZCwgaW1wb3J0YW50bHksIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGl0IGJlaGF2ZXMgcHJlZGljdGFibHkgaW4gdGhlIGZhY2Ugb2YgdW5leHBlY3RlZCBpbnB1dCBvciBzeXN0ZW0gc3RhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDA6NDQuOTA2NTQ3MDY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MzksXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5Mzk6XFx0c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI5NDA6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fZm9sbG93X3BmbiAqa2ZwLCBrdm1fcGZuX3QgKnBfcGZuKVxcbjI5NDE6XFx0e1xcbjI5NDI6XFx0XFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGtmcC1cXHUwMDNlaHZhIH07XFxuMjk0MzpcXHRcXHRib29sIHdyaXRlX2ZhdWx0ID0ga2ZwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZPTExfV1JJVEU7XFxuMjk0NDpcXHRcXHRpbnQgcjtcXG4yOTQ1OlxcdFxcbjI5NDY6XFx0XFx0LypcXG4yOTQ3OlxcdFxcdCAqIFJlbWFwcGVkIG1lbW9yeSBjYW5ub3QgYmUgcGlubmVkIGluIGFueSBtZWFuaW5nZnVsIHNlbnNlLiAgQmFpbCBpZlxcbjI5NDg6XFx0XFx0ICogdGhlIGNhbGxlciB3YW50cyB0byBwaW4gdGhlIHBhZ2UsIGkuZS4gYWNjZXNzIHRoZSBwYWdlIG91dHNpZGUgb2ZcXG4yOTQ5OlxcdFxcdCAqIE1NVSBub3RpZmllciBwcm90ZWN0aW9uLCBhbmQgdW5zYWZlIHVtYXBwaW5ncyBhcmUgZGlzYWxsb3dlZC5cXG4yOTUwOlxcdFxcdCAqL1xcbjI5NTE6XFx0XFx0aWYgKGtmcC1cXHUwMDNlcGluIFxcdTAwMjZcXHUwMDI2ICFhbGxvd191bnNhZmVfbWFwcGluZ3MpXFxuMjk1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yOTUzOlxcdFxcbjI5NTQ6XFx0XFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbjI5NTU6XFx0XFx0aWYgKHIpIHtcXG4yOTU2OlxcdFxcdFxcdC8qXFxuMjk1NzpcXHRcXHRcXHQgKiBnZXRfdXNlcl9wYWdlcyBmYWlscyBmb3IgVk1fSU8gYW5kIFZNX1BGTk1BUCB2bWFzIGFuZCBkb2VzXFxuMjk1ODpcXHRcXHRcXHQgKiBub3QgY2FsbCB0aGUgZmF1bHQgaGFuZGxlciwgc28gZG8gaXQgaGVyZS5cXG4yOTU5OlxcdFxcdFxcdCAqL1xcbjI5NjA6XFx0XFx0XFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xcbjI5NjE6XFx0XFx0XFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIGtmcC1cXHUwMDNlaHZhLFxcbjI5NjI6XFx0XFx0XFx0XFx0XFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXFxuMjk2MzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ1bmxvY2tlZCk7XFxuMjk2NDpcXHRcXHRcXHRpZiAodW5sb2NrZWQpXFxuMjk2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4yOTY2OlxcdFxcdFxcdGlmIChyKVxcbjI5Njc6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMjk2ODpcXHRcXG4yOTY5OlxcdFxcdFxcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG4yOTcwOlxcdFxcdFxcdGlmIChyKVxcbjI5NzE6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMjk3MjpcXHRcXHR9XFxuMjk3MzpcXHRcXG4yOTc0OlxcdFxcdGlmICh3cml0ZV9mYXVsdCBcXHUwMDI2XFx1MDAyNiAhYXJncy53cml0YWJsZSkge1xcbjI5NzU6XFx0XFx0XFx0KnBfcGZuID0gS1ZNX1BGTl9FUlJfUk9fRkFVTFQ7XFxuMjk3NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yOTc3OlxcdFxcdH1cXG4yOTc4OlxcdFxcbjI5Nzk6XFx0XFx0KnBfcGZuID0ga3ZtX3Jlc29sdmVfcGZuKGtmcCwgTlVMTCwgXFx1MDAyNmFyZ3MsIGFyZ3Mud3JpdGFibGUpO1xcbjI5ODA6XFx0b3V0OlxcbjI5ODE6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjI5ODI6XFx0XFx0cmV0dXJuIHI7XFxuMjk4MzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjQ0LjkwNjc5MTk3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTA3MzU5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRmF1bHQgSGFuZGxpbmcgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0aGUgY2hhbmdlIEknbSBzZWVpbmcgaXMgd2l0aGluIGBodmFfdG9fcGZuYCBpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhpcyBjb25kaXRpb25hbCBkZWFsaW5nIHdpdGggYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBmbGFncy4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGh2YV90b19wZm5fcmVtYXBwZWRgIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0J3MgY2xlYXJseSBpbnZvbHZlZCBpbiB0cmFuc2xhdGluZyBob3N0IHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGZyYW1lIG51bWJlcnMgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5JIG5vdGljZWQgYGt2bV9tbXVfZmF1bHRpbl9wZm5gIHdhcyBhbHNvIG1vZGlmaWVkLCBidXQgZ2l2ZW4gdGhhdCBpdCdzIHByb2JhYmx5IG9uIGEgaG90IHBhdGgsIEknZCByYXRoZXIgZm9jdXMgb24gdGhlIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb24uIE5vdywgSSdtIHRyeWluZyB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gdGhpcy4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBpcyBjYWxsZWQgd2hlbiB0aGUgYGZhdWx0LVx1MDAzZXBmbmAgaXMgZXF1YWwgdG8gYEtWTV9QRk5fRVJSX1BGTk1BUGAuIFRoaXMgbWFrZXMgbWUgbGVhbiBldmVuIG1vcmUgdG93YXJkcyBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAgYmVpbmcgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLlxuXG5MZXQncyBub3cgdHVybiB0byB0aGUgYGt2bV9tbXVfZmF1bHRpbl9wZm5gIGZ1bmN0aW9uIHdpdGhpbiBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AsIGxldCdzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQxNDowMDo1My44MTQxNTM4MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDc1MDpcXHRcXHQgKiBEbyB0aGUgcHJlLWNoZWNrIGV2ZW4gZm9yIG5vbi1wcmVlbXRpYmxlIGtlcm5lbHMsIGkuZS4gZXZlbiBpZiBLVk1cXG40NzUxOlxcdFxcdCAqIHdpbGwgbmV2ZXIgeWllbGQgbW11X2xvY2sgaW4gcmVzcG9uc2UgdG8gY29udGVudGlvbiwgYXMgdGhpcyB2Q1BVIGlzXFxuNDc1MjpcXHRcXHQgKiAqZ3VhcmFudGVlZCogdG8gbmVlZCB0byByZXRyeSwgaS5lLiB3YWl0aW5nIHVudGlsIG1tdV9sb2NrIGlzIGhlbGRcXG40NzUzOlxcdFxcdCAqIHRvIGRldGVjdCByZXRyeSBndWFyYW50ZWVzIHRoZSB3b3JzdCBjYXNlIGxhdGVuY3kgZm9yIHRoZSB2Q1BVLlxcbjQ3NTQ6XFx0XFx0ICovXFxuNDc1NTpcXHRcXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnlfZ2ZuX3Vuc2FmZShrdm0sIGZhdWx0LVxcdTAwM2VtbXVfc2VxLCBmYXVsdC1cXHUwMDNlZ2ZuKSlcXG40NzU2OlxcdFxcdFxcdHJldHVybiBSRVRfUEZfUkVUUlk7XFxuNDc1NzpcXHRcXG40NzU4OlxcdFxcdHJldCA9IF9fa3ZtX21tdV9mYXVsdGluX3Bmbih2Y3B1LCBmYXVsdCk7XFxuNDc1OTpcXHRcXHRpZiAocmV0ICE9IFJFVF9QRl9DT05USU5VRSlcXG40NzYwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDc2MTpcXHRcXG40NzYyOlxcdFxcdGlmICh1bmxpa2VseShpc19lcnJvcl9wZm4oZmF1bHQtXFx1MDAzZXBmbikpKSB7XFxuNDc2MzpcXHRcXHRcXHQvKlxcbjQ3NjQ6XFx0XFx0XFx0ICogQSBwYXNzZWQtdGhyb3VnaCBQQ0kgQkFSIGlzIGJhY2tlZCBieSBhIFZNX0lPL1ZNX1BGTk1BUFxcbjQ3NjU6XFx0XFx0XFx0ICogbWFwcGluZyB3aG9zZSBmYXVsdCBoYW5kbGVyIHJlZnVzZXMgdG8gaW5zdGFsbCBhIFBURSB3aGlsZSB0aGVcXG40NzY2OlxcdFxcdFxcdCAqIGRldmljZSdzIG1lbW9yeSBzcGFjZSBpcyBkaXNhYmxlZCAoZS5nLiB0aGUgZ3Vlc3QgY2xlYXJlZFxcbjQ3Njc6XFx0XFx0XFx0ICogUENJX0NPTU1BTkQuTUVNKS4gVGhlIGZhdWx0IHRoZW4gZmFpbHMgZXZlbiB0aG91Z2ggdGhlIG1lbXNsb3RcXG40NzY4OlxcdFxcdFxcdCAqIGlzIHN0aWxsIHZhbGlkLiBUcmVhdCBzdWNoIGFuIGFjY2VzcyBhcyBNTUlPIGFuZCBlbXVsYXRlIGl0IHNvXFxuNDc2OTpcXHRcXHRcXHQgKiB0aGUgZ3Vlc3Qgb2JzZXJ2ZXMgVW5zdXBwb3J0ZWQgUmVxdWVzdCBzZW1hbnRpY3MsIG1hdGNoaW5nXFxuNDc3MDpcXHRcXHRcXHQgKiBiYXJlIG1ldGFsLCBpbnN0ZWFkIG9mIGtpbGxpbmcgdGhlIFZNIHdpdGggLUVGQVVMVC4gR2VudWluZSxcXG40NzcxOlxcdFxcdFxcdCAqIG5vbi1wZm5tYXAgZXJyb3JzIHN0aWxsIHRha2UgdGhlIGZhdGFsIHBhdGguXFxuNDc3MjpcXHRcXHRcXHQgKi9cXG40NzczOlxcdFxcdFxcdGlmIChmYXVsdC1cXHUwMDNlcGZuID09IEtWTV9QRk5fRVJSX1BGTk1BUClcXG40Nzc0OlxcdFxcdFxcdFxcdHJldHVybiBrdm1faGFuZGxlX25vc2xvdF9mYXVsdCh2Y3B1LCBmYXVsdCwgYWNjZXNzKTtcXG40Nzc1OlxcdFxcbjQ3NzY6XFx0XFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfZXJyb3JfcGZuKHZjcHUsIGZhdWx0KTtcXG40Nzc3OlxcdFxcdH1cXG40Nzc4OlxcdFxcbjQ3Nzk6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghZmF1bHQtXFx1MDAzZXNsb3QgfHwgaXNfbm9zbG90X3BmbihmYXVsdC1cXHUwMDNlcGZuKSkpXFxuNDc4MDpcXHRcXHRcXHRyZXR1cm4ga3ZtX2hhbmRsZV9ub3Nsb3RfZmF1bHQodmNwdSwgZmF1bHQsIGFjY2Vzcyk7XFxuNDc4MTpcXHRcXG40NzgyOlxcdFxcdC8qXFxuNDc4MzpcXHRcXHQgKiBDaGVjayBhZ2FpbiBmb3IgYSByZWxldmFudCBtbXVfbm90aWZpZXIgaW52YWxpZGF0aW9uIGV2ZW50IHB1cmVseSB0b1xcbjQ3ODQ6XFx0XFx0ICogYXZvaWQgY29udGVuZGluZyBtbXVfbG9jay4gIE1vc3QgaW52YWxpZGF0aW9ucyB3aWxsIGJlIGRldGVjdGVkIGJ5XFxuNDc4NTpcXHRcXHQgKiB0aGUgcHJldmlvdXMgY2hlY2ssIGJ1dCBjaGVja2luZyBpcyBleHRyZW1lbHkgY2hlYXAgcmVsYXRpdmUgdG8gdGhlXFxuNDc4NjpcXHRcXHQgKiBvdmVyYWxsIGNvc3Qgb2YgZmFpbGluZyB0byBkZXRlY3QgdGhlIGludmFsaWRhdGlvbiB1bnRpbCBhZnRlclxcbjQ3ODc6XFx0XFx0ICogbW11X2xvY2sgaXMgYWNxdWlyZWQuXFxuNDc4ODpcXHRcXHQgKi9cXG40Nzg5OlxcdFxcdGlmIChtbXVfaW52YWxpZGF0ZV9yZXRyeV9nZm5fdW5zYWZlKGt2bSwgZmF1bHQtXFx1MDAzZW1tdV9zZXEsIGZhdWx0LVxcdTAwM2VnZm4pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDE0OjAwOjUzLjgxNDQxOTcxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ2MDA5NTY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIGBrdm1fbW11X2ZhdWx0aW5fcGZuYCwgYnV0IHRoYXQncyBhIGhvdCBwYXRoLCBzbyBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBpbmNsdWRpbmcgaXQgZGlyZWN0bHkgaW4gbXkgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gQWZ0ZXIgYSBiaXQgb2YgdGhvdWdodCwgaXQncyBjbGVhciB0aGF0IGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJdCdzIG9ubHkgY2FsbGVkIHdoZW4gZGVhbGluZyB3aXRoIGBWTV9JT2Agb3IgYFZNX1BGTk1BUGAgbWFwcGluZ3MsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgYXJlYSB0aGlzIHBhdGNoIGlzIHRhcmdldGluZy4gYGt2bV9oYW5kbGVfbm9zbG90X2ZhdWx0YCBsb29rZWQgcHJvbWlzaW5nIGluaXRpYWxseSwgYnV0IHRoYXQncyBpbnZva2VkIGZvciAqYWxsKiBNTUlPIGFjY2Vzc2VzLCB0b28gYnJvYWQgYSBzY29wZSBmb3IgbXkgcHVycG9zZXMuIFNvIGBodmFfdG9fcGZuX3JlbWFwcGVkYCBpcyB0aGUgc3dlZXQgc3BvdC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBPYnZpb3VzbHksIGBLVk1gIGlzIGVzc2VudGlhbC4gIFNpbmNlIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBhIFBDSSBCQVIgYW5kIGRpc2FibGVkIGRldmljZSBtZW1vcnksIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbG9vayBmb3IgVkZJTy1zcGVjaWZpYyBvcHRpb25zLiBCdXQsIHRoZSBkZXNjcmlwdGlvbiBzYXlzIGl0IGNhbiBoYXBwZW4gZm9yIGFueSBgVk1fSU9gIG9yIGBWTV9QRk5NQVBgIG1hcHBpbmcuICBTbywgSSBkb24ndCAqc3RyaWN0bHkqIG5lZWQgVkZJTywgYEtWTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuICBJJ2xsIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWcgb3B0aW9uczsgYEtWTWAgYW5kIGBLVk1fWDg2YCBhcmUgYm90aCB0cmlzdGF0ZSBvcHRpb25zLiBJJ2xsIGFkZCBgS1ZNYCB0byBteSBgRW5hYmxlQ29uZmlnc2AuXG5cbkp1c3QgdG8gcmVjYXA6IHRoZSBwYXRjaCBhbHRlcnMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIuIEl0IHRyZWF0cyBmYWlsdXJlcyBkdXJpbmcgYFZNX0lPYCBvciBgVk1fUEZOTUFQYCBtYXBwaW5ncyBhcyBNTUlPIGVycm9ycyByYXRoZXIgdGhhbiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhlIGNvcmUgS1ZNIGxvZ2ljIGl0c2VsZiwgd2hpY2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggY29ycmVjdGx5IGVtdWxhdGVzIE1NSU8gYW5kIGRvZXNuJ3QgbGVhZCB0byByZWdyZXNzaW9ucyBvciBjcmFzaGVzLiBTbywgdGhlIGp1c3RpZmljYXRpb24gZm9yIHRoZSBjaG9pY2Ugb2YgYGh2YV90b19wZm5fcmVtYXBwZWRgIGFzIHRoZSBmb2N1cyBzeW1ib2wgaXMgdmFsaWQsIHNpbmNlIGl0IGlzIHRoZSBjb2RlIGJlaW5nIG1vZGlmaWVkLlxuXG5BIHF1aWNrIHJldmlldyBvZiB0aGUgY29kZSBjb25maXJtcyB0aGlzLiBTcGVjaWZpY2FsbHksIHRoZSBgaHZhX3RvX3BmbmAgZnVuY3Rpb24gd2l0aGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgYW5kIHRoZSBjb2RlIHNob3dzIHRoYXQgYGh2YV90b19wZm5fcmVtYXBwZWRgIGlzIHRoZSByaWdodCBmdW5jdGlvbiB0byB0YXJnZXQsIHNpbmNlIHRoZSBwYXRoIHdpbGwgcmVzdWx0IGluIGV4ZWN1dGlvbiBvZiBgaHZhX3RvX3Bmbl9yZW1hcHBlZGAsIHdoaWNoIGlzIG5vdCBhIGhvdCBwYXRoLlxuXG5TbywgaGVyZSdzIHRoZSBmaW5hbCBjYWxsOlxuXG4qICAgRm9jdXMgc3ltYm9sczogYGh2YV90b19wZm5fcmVtYXBwZWRgXG4qICAgRW5hYmxlIGNvbmZpZ3M6IGBLVk1gXG5cbkknbSBjb25maWRlbnQgd2l0aCB0aGlzLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzIsIk91dHB1dFRva2VucyI6MTI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMTQ6MDE6MDQuMjc0NTE3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTc2MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodmFfdG9fcGZuX3JlbWFwcGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodmFfdG9fcGZuX3JlbWFwcGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdHJlYXQgZmFpbHVyZXMgaW4gVk1fSU8vVk1fUEZOTUFQIG1hcHBpbmdzIGFzIE1NSU8gaW5zdGVhZCBvZiBmYXRhbCBlcnJvcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgZXJyb3JzIChlLmcuLCBkaXNhYmxlZCBQQ0kgQkFScyksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgZW11bGF0ZXMgTU1JTyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[1] Phase: Succeeded StartedAt: 2026-06-21 14:01:15 +0000 UTC FinishedAt: 2026-06-21 14:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-21 14:01:15 +0000 UTC FinishedAt: 2026-06-21 14:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2] Phase: Succeeded StartedAt: 2026-06-21 14:01:15 +0000 UTC FinishedAt: 2026-06-21 17:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-21 14:01:15 +0000 UTC FinishedAt: 2026-06-21 17:57:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-21 14:01:15 +0000 UTC FinishedAt: 2026-06-21 14:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-21 14:01:15 +0000 UTC FinishedAt: 2026-06-21 14:01:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow66xmc/series-workflow66xmc-convert-artifact-3847641570/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-21 14:01:25 +0000 UTC FinishedAt: 2026-06-21 14:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-21 14:01:25 +0000 UTC FinishedAt: 2026-06-21 14:22:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee2a34e6-d1a0-4a67-aa5d-ecdfecbd0aaf,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-workflow66xmc/series-workflow66xmc-convert-artifact-3847641570/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": "8f00fe47-ab73-451a-8ff5-00644411222b", "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-workflow66xmc/series-workflow66xmc-build-action-4106334624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-21 14:01:25 +0000 UTC FinishedAt: 2026-06-21 14:22:18 +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:*ee2a34e6-d1a0-4a67-aa5d-ecdfecbd0aaf,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-workflow66xmc/series-workflow66xmc-convert-artifact-3847641570/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": "8f00fe47-ab73-451a-8ff5-00644411222b", "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-workflow66xmc/series-workflow66xmc-build-action-4106334624/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-21 14:22:28 +0000 UTC FinishedAt: 2026-06-21 14:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-21 14:22:28 +0000 UTC FinishedAt: 2026-06-21 14:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-21 14:22:28 +0000 UTC FinishedAt: 2026-06-21 14:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-21 14:22:28 +0000 UTC FinishedAt: 2026-06-21 14:22:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow66xmc/series-workflow66xmc-convert-artifact-2872858941/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-21 14:22:38 +0000 UTC FinishedAt: 2026-06-21 14:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-21 14:22:38 +0000 UTC FinishedAt: 2026-06-21 14:25:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f00fe47-ab73-451a-8ff5-00644411222b,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-workflow66xmc/series-workflow66xmc-build-action-4106334624/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-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-21 14:25:27 +0000 UTC FinishedAt: 2026-06-21 14:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-21 14:25:27 +0000 UTC FinishedAt: 2026-06-21 14:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-21 14:25:27 +0000 UTC FinishedAt: 2026-06-21 14:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-21 14:25:27 +0000 UTC FinishedAt: 2026-06-21 14:53:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ee2a34e6-d1a0-4a67-aa5d-ecdfecbd0aaf,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-workflow66xmc/series-workflow66xmc-convert-artifact-2872858941/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": "ee2b7172-bd62-45cf-9aeb-b5fa6bbaa11c", "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-workflow66xmc/series-workflow66xmc-build-action-719001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-21 14:25:27 +0000 UTC FinishedAt: 2026-06-21 14:53:48 +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:*ee2a34e6-d1a0-4a67-aa5d-ecdfecbd0aaf,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-workflow66xmc/series-workflow66xmc-convert-artifact-2872858941/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": "ee2b7172-bd62-45cf-9aeb-b5fa6bbaa11c", "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-workflow66xmc/series-workflow66xmc-build-action-719001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-21 14:53:58 +0000 UTC FinishedAt: 2026-06-21 14:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-21 14:53:58 +0000 UTC FinishedAt: 2026-06-21 14:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-21 14:53:58 +0000 UTC FinishedAt: 2026-06-21 14:55:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-21 14:53:58 +0000 UTC FinishedAt: 2026-06-21 14:55:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee2b7172-bd62-45cf-9aeb-b5fa6bbaa11c,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-workflow66xmc/series-workflow66xmc-build-action-719001/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-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 17:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 17:57:40 +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":["hva_to_pfn_remapped"],"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:*8f00fe47-ab73-451a-8ff5-00644411222b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee2b7172-bd62-45cf-9aeb-b5fa6bbaa11c,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-workflow66xmc/series-workflow66xmc-build-action-4106334624/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-workflow66xmc/series-workflow66xmc-build-action-719001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 14:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 14:55:42 +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":["hva_to_pfn_remapped"],"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-workflow66xmc/series-workflow66xmc-convert-artifact-3721071810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 14:55:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 14:55:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-21 14:55:35 +0000 UTC FinishedAt: 2026-06-21 14:55:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-21 14:56:29 +0000 UTC FinishedAt: 2026-06-21 17:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow66xmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["hva_to_pfn_remapped"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"08c7183f5b9ffe4408e74fff848a4cc2105361d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"4a6dd463-47a9-4aa2-a7c9-bc3fab9c345f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-21 14:56:29 +0000 UTC FinishedAt: 2026-06-21 17:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f00fe47-ab73-451a-8ff5-00644411222b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ee2b7172-bd62-45cf-9aeb-b5fa6bbaa11c,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-workflow66xmc/series-workflow66xmc-build-action-4106334624/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-workflow66xmc/series-workflow66xmc-build-action-719001/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-workflow66xmc/series-workflow66xmc-convert-artifact-3721071810/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,}