Name: series-workflowsnczr Phase: Succeeded StartedAt: 2026-08-20 12:11:53 +0000 UTC FinishedAt: 2026-08-20 12:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[0] Phase: Succeeded StartedAt: 2026-08-20 12:11:53 +0000 UTC FinishedAt: 2026-08-20 12:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 12:11:53 +0000 UTC FinishedAt: 2026-08-20 12:46:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a51cbdf02aec619f90db7e9f06e295adb8009d4d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a51cbdf02aec619f90db7e9f06e295adb8009d4d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "b5cc56f3-471d-4c1a-a63d-5ad543508aa0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_swapon", "folio_dup_swap", "swap_dup_entry_direct", "swap_retry_table_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDssCiAgICAmIzM0O2ZvbGlvX2R1cF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJ5X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzIGluIHRoZSBzd2FwIHN1YnN5c3RlbTpcbjEuIEEgcmFjZSBjb25kaXRpb24gaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgd2hlcmUgYGNpLVx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBhbmQgYGNpLVx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGFsbG9jYXRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvbmN1cnJlbnQgdGhyZWFkcyBjYWxsaW5nIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgZm9yIHNvbGlkLXN0YXRlIGRyaXZlcy5cbjMuIE1pbm9yIGNsZWFudXBzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxuXG5BbGwgbWVtb3J5IGFsbG9jYXRpb25zIGludm9sdmVkIChga3Z6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX29iamAsIGBiaXRtYXBfemFsbG9jYCwgYF9fR0ZQX1pFUk9gLCBga21lbV9jYWNoZV96YWxsb2NgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYnVncyBmaXhlZCBhcmUgcmFjZSBjb25kaXRpb25zIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzIG1lY2hhbmlzbXMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2ZTgxMTI2MTY5Y2UwZGJmNTliMzVlZTYxNjYzNTZjMGVlODRkNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxMjozOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNjE1ZDkwODY3MTExMy4uZmYxYjFmYzM2NGI5MiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC00NjYsOCAmIzQzOzQ2Niw2IEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4tXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbkBAIC00ODcsNiAmIzQzOzQ4NSwxMiBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuICNlbmRpZlxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2UgdGFibGVzIHZpc2libGUgdG8gY2x1c3Rlcl9pc191c2FibGUoKSBhZnRlciBldmVyeXRoaW5nIGlzXG4mIzQzO1x0ICogcmVhZHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTUxMSwyMCAmIzQzOzE1MTUsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbi1cdGJvb2wgY2FuX2ZyZWUgPSB0cnVlO1xuIFxuIFx0aWYgKCFjaS1cdTAwM2VleHRlbmRfdGFibGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNXQVBGSUxFX0NMVVNURVI7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChjaS1cdTAwM2VleHRlbmRfdGFibGVbaV0pXG4tXHRcdFx0Y2FuX2ZyZWUgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGNhbl9mcmVlKSB7XG4tXHRcdGtmcmVlKGNpLVx1MDAzZWV4dGVuZF90YWJsZSk7XG4tXHRcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0a2ZyZWUoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKTtcbiYjNDM7XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuIH1cbiBcbiAvKiBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBvbmUgc2xvdCwgd2l0aG91dCBmcmVlaW5nIGl0ICovXG5AQCAtMTcxNiw3ICYjNDM7MTcxNyw2IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBmYWlsZWQ6XG4gXHR3aGlsZSAoY2lfb2ZmLS0gXHUwMDNlIGNpX3N0YXJ0KVxuIFx0XHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XG4tXHRzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTM1ODgsMTEgJiM0MzszNTg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcbiBcdG1heHBhZ2VzID0gc2ktXHUwMDNlbWF4O1xuIFxuLVx0LyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqL1xuLVx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuLVxuIFx0aWYgKHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cdTAwM2ViZGV2KSlcbiBcdFx0c2ktXHUwMDNlZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7XG4gXG5AQCAtMzYwNiw2ICYjNDM7MzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxuIFx0XHRpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbiYjNDM7XHQgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XG4mIzQzO1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDssCiAgICAmIzM0O2ZvbGlvX2R1cF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJ5X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc3dhcGZpbGUgbG9naWMsIGluY2x1ZGluZyBzd2FwIGNsdXN0ZXIgdGFibGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIGR1cGxpY2F0aW9uLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHN5c19zd2Fwb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmU4MTEyNjE2OWNlMGRiZjU5YjM1ZWU2MTY2MzU2YzBlZTg0ZDY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTI6Mzk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA2MTVkOTA4NjcxMTEzLi5mZjFiMWZjMzY0YjkyIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ2Niw4ICYjNDM7NDY2LDYgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKQogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGNpLSZndDt0YWJsZSwgdGFibGUpOwotCiAjaWZkZWYgQ09ORklHX01FTUNHCiAJaWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHsKIAkJVk1fV0FSTl9PTl9PTkNFKGNpLSZndDttZW1jZ190YWJsZSk7CkBAIC00ODcsNiAmIzQzOzQ4NSwxMiBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHRhYmxlcyB2aXNpYmxlIHRvIGNsdXN0ZXJfaXNfdXNhYmxlKCkgYWZ0ZXIgZXZlcnl0aGluZyBpcwomIzQzOwkgKiByZWFkeS4KJiM0MzsJICovCiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxMSwyMCAmIzQzOzE1MTUsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIHN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwotCWJvb2wgY2FuX2ZyZWUgPSB0cnVlOwogCiAJaWYgKCFjaS0mZ3Q7ZXh0ZW5kX3RhYmxlKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgU1dBUEZJTEVfQ0xVU1RFUjsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGNpLSZndDtleHRlbmRfdGFibGVbaV0pCi0JCQljYW5fZnJlZSA9IGZhbHNlOwomIzQzOwkJCXJldHVybjsKIAl9CiAKLQlpZiAoY2FuX2ZyZWUpIHsKLQkJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7Ci0JCWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwotCX0KJiM0MzsJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7CiYjNDM7CWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwogfQogCiAvKiBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBvbmUgc2xvdCwgd2l0aG91dCBmcmVlaW5nIGl0ICovCkBAIC0xNzE2LDcgJiM0MzsxNzE3LDYgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogZmFpbGVkOgogCXdoaWxlIChjaV9vZmYtLSAmZ3Q7IGNpX3N0YXJ0KQogCQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7Ci0Jc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTg4LDExICYjNDM7MzU4OCw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpCiAKIAltYXhwYWdlcyA9IHNpLSZndDttYXg7CiAKLQkvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovCi0JZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTsKLQogCWlmIChzaS0mZ3Q7YmRldiAmYW1wOyZhbXA7IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS0mZ3Q7YmRldikpCiAJCXNpLSZndDtmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUzsKIApAQCAtMzYwNiw2ICYjNDM7MzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQogCQlpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gYWZ0ZXIgU1dQXyBmbGFncyBoYW5kbGluZyBhcwomIzQzOwkgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7CiYjNDM7CiAJaWYgKChzd2FwX2ZsYWdzICZhbXA7IFNXQVBfRkxBR19ESVNDQVJEKSAmYW1wOyZhbXA7CiAJICAgIHNpLSZndDtiZGV2ICZhbXA7JmFtcDsgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLSZndDtiZGV2KSkgewogCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIFN1YnN5c3RlbSBQYXRjaCBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3N3YXBmaWxlLmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIHN3YXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgc29tZSBmdW5jdGlvbiBjaGFuZ2VzLiBJIHNlZSB0aGVzZSBzcGVjaWZpYyBjaGFuZ2VzOiB0aGUgYXNzaWdubWVudCBvZiB0aGUgc3dhcCB0YWJsZSBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBoYXMgYmVlbiBtb3ZlZDsgdGhlIGxvZ2ljIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgaGFzIGJlZW4gc2ltcGxpZmllZCwgYW5kIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgaGFzIGJlZW4gcmVtb3ZlZCBpbiBhIGNlcnRhaW4gZXJyb3IgcGF0aCBpbiBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYDsgYW5kIGZpbmFsbHksIGEgcmVvcmRlcmluZyBvZiBjYWxscyB3aXRoaW4gYHN5c19zd2Fwb25gLCBtb3ZpbmcgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgZG93biB0aGUgY2FsbCBzdGFjay4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG5ldyB2dWxuZXJhYmlsaXRpZXM/IE9yLCBtb3JlIGltcG9ydGFudGx5IGZvciBmdXp6aW5nLCBhcmUgdGhleSBjcmVhdGluZyBhbnkgbmV3IGludGVyZXN0aW5nIGNvZGUgcGF0aHM/CgpJJiMzOTttIHF1aWNrbHkgY2hlY2tpbmcgcmVhY2hhYmlsaXR5LiAgYHN5c19zd2Fwb25gIGlzIGEgc3lzY2FsbCBzbyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgaXMgcmVhY2hhYmxlIHRvby4gQW5kIEkgc2VlIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGFyZSBhbHNvIHJlYWNoYWJsZS4gSG93ZXZlciwgYWgsIEkgc2VlLCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBhcmUgYHN0YXRpY2AuICBUaGF0IGxpbWl0cyBob3cgZWFzaWx5IEkgY2FuIGRpcmVjdGx5IHRhcmdldCB0aGVtLiBgc3lzX3N3YXBvbmAgaXMgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgYW5kIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpcyBub3QgYHN0YXRpY2AuCgpUaGUgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFRodXMsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gZW50cnkgcG9pbnRzIGFuZCBhbnkgZnVuY3Rpb25zIHRoYXQgYXJlIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBmaWxlLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAsIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAsIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLCBhbmQgYHN5c19zd2Fwb25gLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCBjYWxscyBpbnRvIHRoZW0gdG8gaWRlbnRpZnkgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgc3RhY2tzLiBTaW5jZSBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYHN5c19zd2Fwb25gIGFuZCB0aGVuIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBJJiMzOTtsbCBncmVwIGZvciB0aGUgbGF0dGVyIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9NDIxPXN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vc3dhcGZpbGUuYy00NDgtXG5tbS9zd2FwZmlsZS5jOjQ0OTpzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG5tbS9zd2FwZmlsZS5jLTQ1MC17XG4tLVxubW0vc3dhcGZpbGUuYz01MzE9c3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTU0NC1cbm1tL3N3YXBmaWxlLmM6NTQ1Olx0aWYgKCFzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoY2ksIF9fR0ZQX0hJR0ggfCBfX0dGUF9OT01FTUFMTE9DIHxcbm1tL3N3YXBmaWxlLmMtNTQ2LVx0XHRcdFx0XHQgIF9fR0ZQX05PV0FSTikpXG4tLVxubW0vc3dhcGZpbGUuYy01NTgtXG5tbS9zd2FwZmlsZS5jOjU1OTpcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShjaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfFxubW0vc3dhcGZpbGUuYy01NjAtXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuLS1cbm1tL3N3YXBmaWxlLmM9NzkxPXN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTgxOC1cdC8qIE5lZWQgdG8gYWxsb2NhdGUgc3dhcCB0YWJsZSBmaXJzdCBmb3IgaW5pdGlhbCBiYWQgc2xvdCBtYXJraW5nLiAqL1xubW0vc3dhcGZpbGUuYzo4MTk6XHRpZiAoIWNpLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNiBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoY2ksIEdGUF9LRVJORUwpKVxubW0vc3dhcGZpbGUuYy04MjAtXHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENsdXN0ZXIgUG9wdWxhdGlvbiBpbiB0aGUgU3dhcCBTdWJzeXN0ZW0qKgoKT2theSwgc28gYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgaXMgYmVpbmcgaW52b2tlZCBieSBgc3dhcF9hbGxvY19jbHVzdGVyYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRoZSBleHBlY3RlZCBjYWxsIGNoYWluLiBJJiMzOTtsbCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhlIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgYHN3YXBfYWxsb2NfY2x1c3RlcmAgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgb3IgY3JlYXRpbmcgYSBzd2FwIGNsdXN0ZXIsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQsIGFmdGVyIGFsbG9jYXRpbmcgb25lLCBpdCB3b3VsZCAqdGhlbiogaGFuZCBvZmYgcG9wdWxhdGlvbi4gQnV0IEkgY2FuJiMzOTt0IGFzc3VtZS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5leHBlY3RlZCBlbnRyeSBwb2ludHMsIG9yLCB3b3JzZSwgdW5pbnRlbmRlZCByZWN1cnNpdmUgY2FsbHMgb3IgZGF0YSByYWNlcyBoZXJlLiBBIHF1aWNrIGNvZGUgZGl2ZSB0byB0cmFjZSB0aGUgY2FsbGVyL2NhbGxlZSByZWxhdGlvbnNoaXBzIGlzIHRoZSBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgY2x1c3RlciBwb3B1bGF0aW9uIGVudGFpbHMuLi4gaXMgaXQganVzdCB6ZXJvaW5nLCBvciBhcmUgd2UgbG9hZGluZyBhY3R1YWwgZGF0YSBpbW1lZGlhdGVseT8gVGhlIGxhdHRlciBjb3VsZCBsZWFkIHRvIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTUzMD1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcbm1tL3N3YXBmaWxlLmM6NTMxOnN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTUzMi1cdFx0XHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwZmlsZS5jPTYyNz1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3Rlcihcbi0tXG5tbS9zd2FwZmlsZS5jLTY1NC1cdFx0Vk1fV0FSTl9PTl9PTkNFKGNsdXN0ZXJfdGFibGVfaXNfYWxsb2NlZChmb3VuZCkpO1xubW0vc3dhcGZpbGUuYzo2NTU6XHRcdHJldHVybiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc2ksIGZvdW5kKTtcbm1tL3N3YXBmaWxlLmMtNjU2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgaXNvbGF0ZV9sb2NrX2NsdXN0ZXJgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgaXNvbGF0ZV9sb2NrX2NsdXN0ZXJgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IGEgZmV3IHNwZWNpZmljIGFzcGVjdHMgaW1tZWRpYXRlbHkuIElzIGl0IGNvcnJlY3RseSBpc29sYXRpbmcgbG9jay1yZWxhdGVkIG9wZXJhdGlvbnMgZnJvbSBvdGhlciBjbHVzdGVyIGZ1bmN0aW9uYWxpdGllcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGlzb2xhdGlvbiwgcGVyZm9ybWFuY2Utd2lzZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW50cm9kdWNlZCwgb3IgYXJlIHdlIGFjaGlldmluZyB0aGUgZXhwZWN0ZWQgYmVuZWZpdHMgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgYW5kIGZhdWx0IGlzb2xhdGlvbj8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIHRoYXQgbW9kdWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IG1hbmFnZXMgcmVzb3VyY2UgY29udGVudGlvbiwgcG90ZW50aWFsIGRlYWRsb2NrcywgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciB1bmRlciBoaWdoIGxvYWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdCYjMzk7cyByZXNwZWN0aW5nIGFueSB1bmRlcmx5aW5nIGxvY2sgc2VtYW50aWNzIHdlJiMzOTt2ZSBkZWZpbmVkIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBkaXN0cmlidXRlZCBjb25zZW5zdXMgbWVjaGFuaXNtcyAoaWYgYW55KSBhcyBpbnRlbmRlZC4gSSYjMzk7bGwgbWVudGFsbHkgcnVuIHRocm91Z2ggYSBmZXcgZWRnZSBjYXNlIHNjZW5hcmlvcyB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCBmYWNpbmcgYW55IHVuZXhwZWN0ZWQgcHJvYmxlbXMuIEkgd2lsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIHRocmVhZCBzYWZldHkgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucywgdG9vLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBjbHVzdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfbG9ja19jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTYxMD1zdGF0aWMgdm9pZCBfX2ZyZWVfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vc3dhcGZpbGUuYy02MjYtICovXG5tbS9zd2FwZmlsZS5jOjYyNzpzdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3Rlcihcbm1tL3N3YXBmaWxlLmMtNjI4LVx0XHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vc3dhcGZpbGUuYz0xMDE5PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTAyNi1cdGRvIHtcbm1tL3N3YXBmaWxlLmM6MTAyNzpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IGlzb2xhdGVfbG9ja19jbHVzdGVyKHNpLCBsaXN0KTtcbm1tL3N3YXBmaWxlLmMtMTAyOC1cdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XG4tLVxubW0vc3dhcGZpbGUuYz0xMDQxPXN0YXRpYyB2b2lkIHN3YXBfcmVjbGFpbV9mdWxsX2NsdXN0ZXJzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgYm9vbCBmb3JjZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTEwNTEtXG5tbS9zd2FwZmlsZS5jOjEwNTI6XHR3aGlsZSAoKGNpID0gaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoc2ksIFx1MDAyNnNpLVx1MDAzZWZ1bGxfY2x1c3RlcnMpKSkge1xubW0vc3dhcGZpbGUuYy0xMDUzLVx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gU3dhcCBSZWNsYW1hdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN3YXAgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IG1hbmFnaW5nIGl0cyBzd2FwIHNwYWNlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgYWxsb2Nfc3dhcF9zY2FuX2xpc3RgIGFuZCBgc3dhcF9yZWNsYWltX2Z1bGxfY2x1c3RlcnNgLiBUaGVzZSB0d28gYXJlIGxpa2VseSBrZXkgcGxheWVycyBpbiBob3cgd2UgaWRlbnRpZnksIHByaW9yaXRpemUsIGFuZCB1bHRpbWF0ZWx5IGhhbmRsZSBzd2FwIHNwYWNlIHRoYXQmIzM5O3MgZWl0aGVyIGF2YWlsYWJsZSBmb3IgdXNlLCBvciBjdXJyZW50bHkgaG9sZGluZyBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgdXAuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFuZCB0aGUgbWVjaGFuaWNzIG9mIHJlY2xhaW1pbmcgZnVsbCBjbHVzdGVycyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBvdmVyYWxsIHJlY2xhbWF0aW9uIHByb2Nlc3MuIEkgYW50aWNpcGF0ZSB0aGVzZSB3aWxsIHByb3ZpZGUgYSBjbGVhciBpbnNpZ2h0IGludG8gdGhlIGtlcm5lbCYjMzk7cyBzd2FwIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zd2FwX3NjYW5fbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz05Njg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xMDE4LVxubW0vc3dhcGZpbGUuYzoxMDE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xMDIwLVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9zd2FwZmlsZS5jPTEwOTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTExMzUtXHRpZiAoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9QQUdFX0RJU0NBUkQpIHtcbm1tL3N3YXBmaWxlLmM6MTEzNjpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXHUwMDI2c2ktXHUwMDNlZnJlZV9jbHVzdGVycywgZm9saW8sIGZhbHNlKTtcbm1tL3N3YXBmaWxlLmMtMTEzNy1cdFx0aWYgKGZvdW5kKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTE0MS1cdGlmIChvcmRlciBcdTAwM2MgUE1EX09SREVSKSB7XG5tbS9zd2FwZmlsZS5jOjExNDI6XHRcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc2ksIFx1MDAyNnNpLVx1MDAzZW5vbmZ1bGxfY2x1c3RlcnNbb3JkZXJdLCBmb2xpbywgdHJ1ZSk7XG5tbS9zd2FwZmlsZS5jLTExNDMtXHRcdGlmIChmb3VuZClcbi0tXG5tbS9zd2FwZmlsZS5jLTExNDctXHRpZiAoIShzaS1cdTAwM2VmbGFncyBcdTAwMjYgU1dQX1BBR0VfRElTQ0FSRCkpIHtcbm1tL3N3YXBmaWxlLmM6MTE0ODpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXHUwMDI2c2ktXHUwMDNlZnJlZV9jbHVzdGVycywgZm9saW8sIGZhbHNlKTtcbm1tL3N3YXBmaWxlLmMtMTE0OS1cdFx0aWYgKGZvdW5kKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTE2My1cdFx0ICovXG5tbS9zd2FwZmlsZS5jOjExNjQ6XHRcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc2ksIFx1MDAyNnNpLVx1MDAzZWZyYWdfY2x1c3RlcnNbb3JkZXJdLCBmb2xpbywgZmFsc2UpO1xubW0vc3dhcGZpbGUuYy0xMTY1LVx0XHRpZiAoZm91bmQpXG4tLVxubW0vc3dhcGZpbGUuYy0xMTc3LVx0XHQgKi9cbm1tL3N3YXBmaWxlLmM6MTE3ODpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXHUwMDI2c2ktXHUwMDNlZnJhZ19jbHVzdGVyc1tvXSwgZm9saW8sIHRydWUpO1xubW0vc3dhcGZpbGUuYy0xMTc5LVx0XHRpZiAoZm91bmQpXG4tLVxubW0vc3dhcGZpbGUuYy0xMTgxLVxubW0vc3dhcGZpbGUuYzoxMTgyOlx0XHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcdTAwMjZzaS1cdTAwM2Vub25mdWxsX2NsdXN0ZXJzW29dLCBmb2xpbywgdHJ1ZSk7XG5tbS9zd2FwZmlsZS5jLTExODMtXHRcdGlmIChmb3VuZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipUcmFjaW5nIHRoZSBBbGxvY2F0aW9uIFBhdGggZm9yIFN3YXAgRW50cmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgc3dhcCBlbnRyaWVzIGFyZSBhbGxvY2F0ZWQgYW5kIGl0IGxvb2tzIGxpa2UgYGNsdXN0ZXJfYWxsb2Nfc3dhcF9lbnRyeWAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gVGhlIGNhbGwgc3RhY2sgcmV2ZWFscyB0aGUgZm9sbG93aW5nOiBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCBnZXRzIGNhbGxlZCBieSBgZ2V0X3N3YXBfcGFnZXNgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgYWRkX3RvX3N3YXBgLiBBbmQsIGNyaXRpY2FsbHksIGBhZGRfdG9fc3dhcGAgaXMgdWx0aW1hdGVseSByZWFjaGVkIHRocm91Z2ggYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBwYXRoIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHN3YXAgbWVjaGFuaXNtLiBUaGlzIGlzIHJlYWNoYWJsZSwgc28gSSBzaG91bGQgaW52ZXN0aWdhdGUgaXQgZnVydGhlci4KCk5leHQsIEkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9kdXBfZW50cmllc19jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE2NDA9c3RhdGljIGludCBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2NzktLyoqXG5tbS9zd2FwZmlsZS5jOjE2ODA6ICogc3dhcF9kdXBfZW50cmllc19jbHVzdGVyOiBJbmNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXIuXG5tbS9zd2FwZmlsZS5jLTE2ODEtICogQHNpOiBUaGUgc3dhcCBkZXZpY2UuXG4tLVxubW0vc3dhcGZpbGUuYy0xNjg5LSAqL1xubW0vc3dhcGZpbGUuYzoxNjkwOnN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMTY5MS1cdFx0XHRcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTc5OD1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODEwLVxubW0vc3dhcGZpbGUuYzoxODExOlx0cmV0dXJuIHN3YXBfZHVwX2VudHJpZXNfY2x1c3Rlcihzd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLFxubW0vc3dhcGZpbGUuYy0xODEyLVx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5KSwgbnJfcGFnZXMpO1xuLS1cbm1tL3N3YXBmaWxlLmM9Mzc1MD1pbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMzc2Ni1cbm1tL3N3YXBmaWxlLmM6Mzc2NzpcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCAxKTtcbm1tL3N3YXBmaWxlLmMtMzc2OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipQVEUgU3dhcHBpbmcgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBpbnZvbHZpbmcgYGZvbGlvX2R1cF9zd2FwYC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqPyBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgbW0vbWVtb3J5LmNgLCBhbmQgc3BlY2lmaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3ByZXNlbnRfcHRlYCBvciBhbnl0aGluZyB0aGF0IGhhbmRsZXMgUFRFIChQYWdlIFRhYmxlIEVudHJ5KSBkdXBsaWNhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byBzd2FwcGluZywgYGZvbGlvX2R1cF9zd2FwYCBpcyBsaWtlbHkgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIG5ldyB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYSBwaHlzaWNhbCBwYWdlIHRoYXQgbWlnaHQgYmUgZ29pbmcgdGhyb3VnaCwgb3IganVzdCBjYW1lIG91dCBvZiwgc3dhcC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIHF1aWNrbHkuIE15IG5leHQgbW92ZSB3aWxsIGJlIHRvIGNoZWNrIHRob3NlIGZ1bmN0aW9ucyBkaXJlY3RseSBhbmQgc2VlIGlmIGBmb2xpb19kdXBfc3dhcGAgaXMgaW5kZWVkIHByZXNlbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IGluIHdoaWNoIHRoZSBzd2FwIGR1cGxpY2F0aW9uIGlzIGhhcHBlbmluZy4gSXMgaXQgZHVyaW5nIGEgZm9yaz8gQ09XIChDb3B5LW9uLVdyaXRlKT8gUGVyaGFwcyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHJlc3RvcmluZyBhIHN3YXBwZWQtb3V0IHBhZ2U/IEtub3dpbmcgdGhlIGNhbGxlciBpcyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19kdXBfc3dhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yMjgzLVxubW0vcm1hcC5jOjIyODQ6XHRcdFx0aWYgKGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBzdWJwYWdlKSBcdTAwM2MgMCkge1xubW0vcm1hcC5jLTIyODUtXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbi0tXG5tbS9zaG1lbS5jPTE1OTM9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLFxuLS1cbm1tL3NobWVtLmMtMTcwMC1cbm1tL3NobWVtLmM6MTcwMTpcdFx0Zm9saW9fZHVwX3N3YXAoZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYy0xNzAyLVx0XHRzaG1lbV9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKGZvbGlvLCBzd3BfdG9fcmFkaXhfZW50cnkoZm9saW8tXHUwMDNlc3dhcCkpO1xuLS1cbm1tL3N3YXAuaD0yMTE9ZXh0ZXJuIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApO1xuLS1cbm1tL3N3YXAuaC0yMjQtICpcbm1tL3N3YXAuaDoyMjU6ICogZm9saW9fZHVwX3N3YXAoKTogaW5jcmVhc2VzIHRoZSBzd2FwIGNvdW50IG9mIGEgZm9saW8sIHVzdWFsbHlcbm1tL3N3YXAuaC0yMjYtICogZHVyaW5nIGl0IGdldHMgdW5tYXBwZWQgYW5kIGEgc3dhcCBlbnRyeSBpcyBpbnN0YWxsZWQgdG8gcmVwbGFjZVxuLS1cbm1tL3N3YXAuaC0yMjktICpcbm1tL3N3YXAuaDoyMzA6ICogZm9saW9fcHV0X3N3YXAoKTogZG9lcyB0aGUgb3Bwb3NpdGUgdGhpbmcgb2YgZm9saW9fZHVwX3N3YXAoKS5cbm1tL3N3YXAuaC0yMzEtICovXG5tbS9zd2FwLmg9MjMyPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oOjIzMzppbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpO1xubW0vc3dhcC5oLTIzNC12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzdWJwYWdlKTtcbi0tXG5tbS9zd2FwLmg9MzcwPXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmgtMzc0LVxubW0vc3dhcC5oOjM3NTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL3N3YXAuaC0zNzYte1xuLS1cbm1tL3N3YXBmaWxlLmM9MTczND1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTc4MS0vKipcbm1tL3N3YXBmaWxlLmM6MTc4MjogKiBmb2xpb19kdXBfc3dhcCgpIC0gSW5jcmVhc2Ugc3dhcCBjb3VudCBvZiBzd2FwIGVudHJpZXMgb2YgYSBmb2xpby5cbm1tL3N3YXBmaWxlLmMtMTc4My0gKiBAZm9saW86IGZvbGlvIHdpdGggc3dhcCBlbnRyaWVzIGJvdW5kZWQuXG4tLVxubW0vc3dhcGZpbGUuYy0xNzk3LSAqL1xubW0vc3dhcGZpbGUuYzoxNzk4OmludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSlcbm1tL3N3YXBmaWxlLmMtMTc5OS17XG4tLVxubW0vc3dhcGZpbGUuYz0xOTkwPWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMjAxNi0gKiBnbyBmcm9tIG5vdC1zd2FwcGVkIHRvIHN3YXBwZWQgYmVjYXVzZSB0aGUgaW5pdGlhbCBzd2FwIGNvdW50IGluY3JlbWVudCBjYW5cbm1tL3N3YXBmaWxlLmM6MjAxNzogKiBvbmx5IGJlIGRvbmUgYnkgZm9saW9fZHVwX3N3YXAsIHdoaWNoIGFsc28gbG9ja3MgdGhlIGZvbGlvLiBCdXQgYSBjb25jdXJyZW50XG5tbS9zd2FwZmlsZS5jLTIwMTgtICogZGVjcmVhc2Ugb2Ygc3dhcCBjb3VudCBpcyBwb3NzaWJsZSB0aHJvdWdoIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0LCBzbyB0aGlzXG4tLVxubW0vc3dhcGZpbGUuYz0zNzE5PXZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbClcbi0tXG5tbS9zd2FwZmlsZS5jLTM3NDYtICogb3duZXIuIGUuZy4sIGxvY2tpbmcgdGhlIFBUTCBvZiBhIFBURSBjb250YWluaW5nIHRoZSBlbnRyeSBiZWluZyBpbmNyZWFzZWQuXG5tbS9zd2FwZmlsZS5jOjM3NDc6ICogQWxzbyB0aGUgc3dhcCBlbnRyeSBtdXN0IGhhdmUgYSBjb3VudCBcdTAwM2U9IDEuIE90aGVyd2lzZSBmb2xpb19kdXBfc3dhcCBzaG91bGRcbm1tL3N3YXBmaWxlLmMtMzc0OC0gKiBiZSB1c2VkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gRHVwbGljYXRlIFN3YXBzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgZHVwbGljYXRlIGVudHJpZXMgYW5kIHN3YXBzIGFyZSBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIGBmb2xpb19kdXBfc3dhcGAgaXMgaW52b2tlZCBmcm9tIHR3byBwcmltYXJ5IGxvY2F0aW9uczogYHRyeV90b191bm1hcF9vbmVgIGFuZCBgc2htZW1fd3JpdGVvdXRgLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2hlbiB3ZSYjMzk7cmUgdW5tYXBwaW5nIG9yIHdyaXRpbmcgYmFjayBzaGFyZWQgbWVtb3J5LCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWxseSBkdXBsaWNhdGVkIHN3YXAgZW50cmllcy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuLi4gSSAqdGhpbmsqIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgIGdldHMgY2FsbGVkIGZyb20gYGNvcHlfcHJlc2VudF9wdGVgLCBidXQgSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGFjY3VyYXRlLiBHb29kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrcywgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgZm9yZ290dGVuIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZHVwX2VudHJ5X2RpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy05NTItXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xubW0vbWVtb3J5LmM6OTUzOlx0XHRpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSBcdTAwM2MgMClcbm1tL21lbW9yeS5jLTk1NC1cdFx0XHRyZXR1cm4gLUVJTztcbi0tXG5tbS9zd2FwZmlsZS5jPTM3MTk9dm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqdmFsKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzczNi0vKlxubW0vc3dhcGZpbGUuYzozNzM3OiAqIHN3YXBfZHVwX2VudHJ5X2RpcmVjdCgpIC0gSW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50IG9mIGEgc3dhcCBlbnRyeSBieSBvbmUuXG5tbS9zd2FwZmlsZS5jLTM3MzgtICogQGVudHJ5OiBmaXJzdCBzd2FwIGVudHJ5IGZyb20gd2hpY2ggd2Ugd2FudCB0byBpbmNyZWFzZSB0aGUgcmVmY291bnQuXG4tLVxubW0vc3dhcGZpbGUuYy0zNzQ5LSAqL1xubW0vc3dhcGZpbGUuYzozNzUwOmludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpXG5tbS9zd2FwZmlsZS5jLTM3NTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipGb2N1c2luZyBpbiBvbiB0aGUgU3dhcCBPcGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyLiBJdCBsb29rcyBsaWtlIGl0IGNhbGxzIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBjb25uZWN0aW9uIG1ha2VzIG1lIHRoaW5rIHRoYXQgYHN5c19zd2Fwb25gLCBgZm9saW9fZHVwX3N3YXBgLCBhbmQsIG9mIGNvdXJzZSwgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgaXRzZWxmIGFyZSBzdHJvbmcgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3dhcCBzcGFjZS4gVG8gZGlnIGRlZXBlciwgSSB0aGluayBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBzeXNfc3dhcG9uYCwgd2hpY2ggSSBiZWxpZXZlIGlzIGRlZmluZWQgaW4gYG1tL3N3YXBmaWxlLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORTJcXChzd2Fwb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzQwNz1zdGF0aWMgaW50IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0zNDg2LVxubW0vc3dhcGZpbGUuYzozNDg3OlNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG5tbS9zd2FwZmlsZS5jLTM0ODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTA5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTd2Fwb24gU3lzdGVtIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc3lzX3N3YXBvbmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBuZWVkaW5nIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHNldHRpbmdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LiBSaWdodCwgYENPTkZJR19TV0FQYCBzZWVtcyB0byBiZSB0aGUga2V5IGZvciBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBOZXh0IHN0ZXAsIEkmIzM5O2xsIGdvIHJpZ2h0IGZvciBgbW0vTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGFsbCBidWlsdCBhbmQgbGlua2VkIHRvZ2V0aGVyLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgbW9yZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19TV0FQYCwgZGVmaW5pdGVseSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBIYW5nIG9uLCBJIHNlZSBgQ09ORklHX01FTUNHYCBtZW50aW9uZWQgdG9vIGluIHRoZSBjb2RlIGJsb2NrOgoKYGBgYwojaWZkZWYgQ09ORklHX01FTUNHCglpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkgewoJCVZNX1dBUk5fT05fT05DRShjaS0mZ3Q7bWVtY2dfdGFibGUpOwpgYGAKClRoZSBwYXRjaCBqdXN0IHNoaWZ0cyBhIGxpbmUgb2YgY29kZSAoYHJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTtgKSBiZWxvdyB0aGF0IGAjaWZkZWZgIGJsb2NrLiAgU28gaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpc24mIzM5O3QgKnN0cmljdGx5KiByZXF1aXJlZCBmb3IgdGhlIGJ1ZywgYnV0IGl0IGNvdWxkIGRlZmluaXRlbHkgYmUgcmVsYXRlZCBzb21laG93LiBJJiMzOTtsbCBpbmNsdWRlIGJvdGggYFNXQVBgIGFuZCBgTUVNQ0dgIGluIG15IGFuYWx5c2lzIHRvIGJlIHNhZmUuCgpOb3csIHRoZSBzeXNjYWxsIG5hbWUgaXMgYHN5c19zd2Fwb25gLCByaWdodD8gVGhvdWdoIHNvbWV0aW1lcyB0aGV5IHVzZSBgX194NjRfc3lzX3N3YXBvbmAgb3IgYHN3YXBvbmAuIEhtbSwgaXQmIzM5O3MgZ2VuZXJhbGx5IGJlc3QgdG8gdXNlIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZSBmb3IgRm9jdXNTeW1ib2xzLCBidXQgZm9yIHN5emthbGxlciwgYHN5c19zd2Fwb25gIGlzIHRoZSBzdGFuZGFyZCBuYW1lIGZvciB0aGUgZW50cnkgcG9pbnQuIE9rYXksIEkgcmVjYWxsIG5vdzogYFNZU0NBTExfREVGSU5FMihzd2Fwb24sIC4uLilgIGdlbmVyYXRlcyBib3RoIGBzeXNfc3dhcG9uYCBhbmQgYF9feDY0X3N5c19zd2Fwb25gLiBJJiMzOTtsbCBqdXN0IGdvIHdpdGggYHN5c19zd2Fwb25gLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbnRyeSBwb2ludCwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuCgpUaW1lIHRvIHJldmlzaXQgc29tZSByZWxhdGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBMZXQmIzM5O3MgbG9vayBhdCBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBhbmQgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCwgdGhvc2UgYXJlIGBzdGF0aWNgLiBTbyBJIGNhbiBpZ25vcmUgdGhlbS4gYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgYXJlbiYjMzk7dCBzdGF0aWMgdGhvdWdoLiBBbmQgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgaXMuIEFscmlnaHQsIG1vdmluZyBvbiB0byBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE0NjE9c3RhdGljIGludCBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNDk2LVxubW0vc3dhcGZpbGUuYzoxNDk3OmludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG5tbS9zd2FwZmlsZS5jLTE0OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMgaW1tZWRpYXRlbHkgdGhyb3dzIHVwIGEgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBvdGVudGlhbCBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uLiBJZiBpdCYjMzk7cyBub3Qgc3RhdGljLCBpdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSwgbWF5YmUgZXZlbiBmcm9tIGNvbXBsZXRlbHkgZGlmZmVyZW50IG1vZHVsZXMuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoIGFuZCBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIElzIGl0IHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG9yIGRvZXMgaXQgaGF2ZSBleHRlcm5hbCBjYWxsZXJzPyBUaGlzIHdpbGwgaW5mbHVlbmNlIG15IGFuYWx5c2lzIG9mIGl0cyBzYWZldHksIHRoZSBwb3RlbnRpYWwgZm9yIHNpZGUgZWZmZWN0cywgYW5kIGhvdyBhbnkgY2hhbmdlcyBtaWdodCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTEyMjQ9Y29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vbWVtb3J5LmMtMTM1MS1cdFx0Vk1fV0FSTl9PTl9PTkNFKCFlbnRyeS52YWwpO1xubW0vbWVtb3J5LmM6MTM1MjpcdFx0aWYgKHN3YXBfcmV0cnlfdGFibGVfYWxsb2MoZW50cnksIEdGUF9LRVJORUwpIFx1MDAzYyAwKSB7XG5tbS9tZW1vcnkuYy0xMzUzLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tLVxubW0vc3dhcC5oPTIwNj1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jbHVzdGVyX3VubG9ja19pcnEoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwLmgtMjEwLVxubW0vc3dhcC5oOjIxMTpleHRlcm4gaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCk7XG5tbS9zd2FwLmgtMjEyLVxuLS1cbm1tL3N3YXAuaD00MzA9c3RhdGljIGlubGluZSBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXAuaC00MzUtXG5tbS9zd2FwLmg6NDM2OnN0YXRpYyBpbmxpbmUgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbm1tL3N3YXAuaC00Mzcte1xuLS1cbm1tL3N3YXBmaWxlLmM9MTQ2MT1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE0OTYtXG5tbS9zd2FwZmlsZS5jOjE0OTc6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbm1tL3N3YXBmaWxlLmMtMTQ5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc3CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTd2FwLVJlbGF0ZWQgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIGlkZW50aWZ5IHN1aXRhYmxlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIHRyYWNlZCB0aGUgY2FsbCBwYXRoIG9mIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBiYWNrIHRvIGBjb3B5X3B0ZV9yYW5nZWAgaW4gYG1tL21lbW9yeS5jYCwgY29uZmlybWluZyBpdHMgcmVsZXZhbmNlLiBUaGVyZWZvcmUsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpcyBhIHNvbGlkIGNhbmRpZGF0ZSB0byBpbmNsdWRlLgoKSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOiBgc3lzX3N3YXBvbmAsIGBmb2xpb19kdXBfc3dhcGAsIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgLCBhbmQgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLiBJIGp1c3QgdmVyaWZpZWQgdGhhdCBgc3lzX3N3YXBvbmAgaXMgdGhlIGNvcnJlY3QgbmFtZSwgZ2l2ZW4gdGhhdCBzeXprYWxsZXIgZ2VuZXJhbGx5IGZ1enplcyBzeXNjYWxscyBkaXJlY3RseS4KCk5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBmdXJ0aGVyLiBJdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIHRoZXNlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGwgcGF0aHM6CgoxLiAgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgKHBhcnQgb2YgcmVjbGFpbSksIGxlYWRpbmcgdG8gYHNocmlua19mb2xpb19saXN0YCAocGFnZSByZWNsYWltKTogQ2FsbGVkIGZyb20gYSBwYXRoIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC0mZ3Q7IGBpc29sYXRlX2xvY2tfY2x1c3RlcmAgLSZndDsgYGFsbG9jX3N3YXBfc2Nhbl9saXN0YCAtJmd0OyBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCAtJmd0OyBgZ2V0X3N3YXBfcGFnZXNgIC0mZ3Q7IGBhZGRfdG9fc3dhcGAgLSZndDsgYHNocmlua19mb2xpb19saXN0YC4KMi4gIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgKHJlbGF0ZWQgdG8gc3dhcHBpbmcgb3V0KTogY2FsbGVkIGJ5IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLCB3aGljaCBjb25uZWN0cyB0byBgZm9saW9fZHVwX3N3YXBgIGFuZCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YC4KMy4gIGBzeXNfc3dhcG9uYC4KClNvIHRoZSBpbml0aWFsIGxpc3QgaG9sZHMsIGFuZCBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoZXNlIGNob2ljZXMsIGFzIHRoZXkgYXJlIHNwZWNpZmljIHRvIHN3YXAgb3BlcmF0aW9ucy4gSSBjb25zaWRlcmVkIGBnZXRfc3dhcF9wYWdlc2Agb3IgYGFkZF90b19zd2FwYCBhcyB3ZWxsLCBidXQgdGhvc2UgYXJlIGhvdCBwYXRocyBhbmQgSSBwcmVmZXIgdG8gYXZvaWQgZ2VuZXJpYyBob3QgcGF0aHMgd2hlbiBJIGNhbi4gV2hpbGUgYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgbWlnaHQgZ2V0IHNvbWUgdXNlIG9uIGhvdCBwYXRocyBkdWUgdG8gZm9yay9tcmVtYXAvZXRjLCB0aG9zZSBhcmUgc3dhcC1zcGVjaWZpYy4KCkkgdGhlbiBkaWQgYSBkZWVwZXIgZGl2ZSBhbmQgbG9va2VkIGF0IHRoZSBjYWxsZXJzIG9mIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLiBgX19zd2FwX2NsdXN0ZXJfZHVwX2VudHJ5YCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgYXJlIHN0YXRpYzsgYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgYXJlIG5vdC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgY2hlY2tlZCB0aGUgY2FsbGVycyBvZiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYC4gSXQgYWxzbyBpcyBjYWxsZWQgZnJvbSBgc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90YCB3aGljaCBpbiB0dXJuIGNhbGxzIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc3lzX3N3YXBvbmAuIFRoYXQgbWVhbnMgYHN5c19zd2Fwb25gIHN1ZmZpY2llbnRseSBjb3ZlcnMgdGhhdCBjb2RlIHBhdGguCgpGaW5hbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBTV0FQYCBhbmQgYE1FTUNHYC4gTm93LCBJJiMzOTttIHJlYWR5IHRvIGNyYWZ0IHRoZSBzZXQtcmVzdWx0cyBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb24mIzM0OywKICAgICYjMzQ7Zm9saW9fZHVwX3N3YXAmIzM0OywKICAgICYjMzQ7c3dhcF9kdXBfZW50cnlfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb24mIzM0OywKICAgICYjMzQ7Zm9saW9fZHVwX3N3YXAmIzM0OywKICAgICYjMzQ7c3dhcF9kdXBfZW50cnlfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtOlxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXHUwMDNldGFibGVgIHdhcyBwdWJsaXNoZWQgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgIGJlZm9yZSBgY2ktXHUwMDNlbWVtY2dfdGFibGVgIGFuZCBgY2ktXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxuMi4gQSBsb2dpYyBidWcgaW4gYHN3YXBvbmAgd2hlcmUgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2Agd2FzIGNhbGxlZCBiZWZvcmUgdGhlIGBTV1BfU09MSURTVEFURWAgZmxhZyB3YXMgc2V0LCBjYXVzaW5nIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gb2YgYHNpLVx1MDAzZWdsb2JhbF9jbHVzdGVyYCBmb3Igc29saWQtc3RhdGUgZHJpdmVzLlxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXG5cbkFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW52b2x2ZWQgKGBrdnphbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGJpdG1hcF96YWxsb2NgLCBgX19HRlBfWkVST2AsIGBrbWVtX2NhY2hlX3phbGxvY2ApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBidWdzIGZpeGVkIGFyZSByYWNlIGNvbmRpdGlvbnMgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbmNvcnJlY3QgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29udHJvbCBmbG93LCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMgbWVjaGFuaXNtcyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlc2UgdHlwZXMgb2YgaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmU4MTEyNjE2OWNlMGRiZjU5YjM1ZWU2MTY2MzU2YzBlZTg0ZDY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTI6Mzk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA2MTVkOTA4NjcxMTEzLi5mZjFiMWZjMzY0YjkyIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ2Niw4ICYjNDM7NDY2LDYgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKQogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGNpLSZndDt0YWJsZSwgdGFibGUpOwotCiAjaWZkZWYgQ09ORklHX01FTUNHCiAJaWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHsKIAkJVk1fV0FSTl9PTl9PTkNFKGNpLSZndDttZW1jZ190YWJsZSk7CkBAIC00ODcsNiAmIzQzOzQ4NSwxMiBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHRhYmxlcyB2aXNpYmxlIHRvIGNsdXN0ZXJfaXNfdXNhYmxlKCkgYWZ0ZXIgZXZlcnl0aGluZyBpcwomIzQzOwkgKiByZWFkeS4KJiM0MzsJICovCiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxMSwyMCAmIzQzOzE1MTUsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIHN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwotCWJvb2wgY2FuX2ZyZWUgPSB0cnVlOwogCiAJaWYgKCFjaS0mZ3Q7ZXh0ZW5kX3RhYmxlKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgU1dBUEZJTEVfQ0xVU1RFUjsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGNpLSZndDtleHRlbmRfdGFibGVbaV0pCi0JCQljYW5fZnJlZSA9IGZhbHNlOwomIzQzOwkJCXJldHVybjsKIAl9CiAKLQlpZiAoY2FuX2ZyZWUpIHsKLQkJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7Ci0JCWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwotCX0KJiM0MzsJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7CiYjNDM7CWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwogfQogCiAvKiBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBvbmUgc2xvdCwgd2l0aG91dCBmcmVlaW5nIGl0ICovCkBAIC0xNzE2LDcgJiM0MzsxNzE3LDYgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogZmFpbGVkOgogCXdoaWxlIChjaV9vZmYtLSAmZ3Q7IGNpX3N0YXJ0KQogCQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7Ci0Jc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTg4LDExICYjNDM7MzU4OCw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpCiAKIAltYXhwYWdlcyA9IHNpLSZndDttYXg7CiAKLQkvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovCi0JZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTsKLQogCWlmIChzaS0mZ3Q7YmRldiAmYW1wOyZhbXA7IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS0mZ3Q7YmRldikpCiAJCXNpLSZndDtmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUzsKIApAQCAtMzYwNiw2ICYjNDM7MzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQogCQlpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gYWZ0ZXIgU1dQXyBmbGFncyBoYW5kbGluZyBhcwomIzQzOwkgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7CiYjNDM7CiAJaWYgKChzd2FwX2ZsYWdzICZhbXA7IFNXQVBfRkxBR19ESVNDQVJEKSAmYW1wOyZhbXA7CiAJICAgIHNpLSZndDtiZGV2ICZhbXA7JmFtcDsgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLSZndDtiZGV2KSkgewogCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXBmaWxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3N3YXBmaWxlLmNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGlzc3VlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBtZW1vcnkgc2FmZXR5LgoKRmlyc3QsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVvcmRlcmVkIHRoaW5ncyBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBtb3ZlZCB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTtgIGNhbGwgKmFmdGVyKiB0aGUgYG1lbWNnX3RhYmxlYCBhbGxvY2F0aW9uLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gZ3Vlc3NpbmcgdGhleSYjMzk7cmUgZG9pbmcgdGhpcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gYGNsdXN0ZXJfaXNfdXNhYmxlKClgLiBTb21lb25lIG1pZ2h0IGhhdmUgYmVlbiBjaGVja2luZyBgY2ktJmd0O3RhYmxlYCBiZWZvcmUgYGNpLSZndDttZW1jZ190YWJsZWAgd2FzIGFsbG9jYXRlZCwgbGVhZGluZyB0byBlaXRoZXIgYSBOVUxMIGRlcmVmZXJlbmNlIG9yLCB3b3JzZSwgYWNjZXNzIHRvIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyBgY2lgIGFsbG9jYXRlZCB3aXRoIGBrdmNhbGxvY2Agb3Igc2ltaWxhcj8KCk5leHQsIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgc2VlbXMgdG8gYmUgc2ltcGxpZmllZCwgd2hpY2ggaXMgZ29vZC4gVGhleSYjMzk7cmUgcmV0dXJuaW5nIGVhcmx5IGZyb20gdGhlIGxvb3AgaWYgYGNpLSZndDtleHRlbmRfdGFibGVbaV1gIGlzIGFscmVhZHkgbnVsbCBhbmQgcmVtb3ZpbmcgdGhlIGBjYW5fZnJlZWAgdmFyaWFibGUuIFRoaXMgc291bmRzIGxpa2UgYSBjbGVhbnVwLgoKVGhlbiwgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgaGFzIGEgbWlub3IgY2hhbmdlOyB0aGUgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTtgIGNhbGwgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBgZmFpbGVkOmAgcGF0aC4gUHJvYmFibHkgbWFrZXMgdGhlIGNvZGUgbW9yZSBlZmZpY2llbnQgYW5kIHNhZmUuCgpGaW5hbGx5LCBpbiB0aGUgYHN3YXBvbmAgc3lzY2FsbCwgdGhleSYjMzk7cmUgbW92aW5nIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7YCBhZnRlciB0aGUgZmxhZ3MgYFNXUF9TVEFCTEVfV1JJVEVTYCBhbmQgYFNXUF9TT0xJRFNUQVRFYCBhcmUgc2V0LiBNYWtlcyBzZW5zZS4gVGhleSYjMzk7cmUgcHJvYmFibHkgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IHRoZSBzd2FwIGNsdXN0ZXIgaW5mb3JtYXRpb24gaXMgc2V0IHVwIGNvbnNpc3RlbnRseSBhZnRlciBzZXR0aW5nIHRoZSBjcml0aWNhbCBmbGFncy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3aXRoIHRoZXNlIGNoYW5nZXM/IFRoZSBiaWdnZXN0IG9uZSBsb29rcyBsaWtlIHRoZSByZW9yZGVyaW5nIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBCeSBtb3ZpbmcgdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwsIHRoZXkgKnNob3VsZCogYmUgcHJldmVudGluZyBhIHJhY2Ugd2hlcmUgYW5vdGhlciB0aHJlYWQgbWlnaHQgc2VlIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGBjaWAuIElmIGBjaS0mZ3Q7bWVtY2dfdGFibGVgIHdlcmUgYWNjZXNzZWQgYmVmb3JlIGFsbG9jYXRpb24sIGl0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIEtBU0FOIG9yIHN0YW5kYXJkIG9vcHMgc2hvdWxkIGNhdGNoKSBvciBhbiBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjaWAgaXMgYWxsb2NhdGVkLiBJZiBpdCYjMzk7cyB6ZXJvLWFsbG9jYXRlZCwgYW4gdW5pbml0aWFsaXplZCBhY2Nlc3Mgc2hvdWxkIHJlc29sdmUgdG8gemVybyBhbmQgdGhlcmVmb3JlIGJlIHNhZmVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgY2lgIGlzLCBpbiBmYWN0LCB6ZXJvLWluaXRpYWxpemVkLiBJIHNob3VsZCBjaGVjayB0aGUgYWxsb2NhdGlvbiBvZiBgc3dhcF9jbHVzdGVyX2luZm9gIGFuZCBhbHNvIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJZiBpdCBpcywgdGhlbiB0aGUgcmlzayBzaG91bGQgYmUgbWluaW1hbC4gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIGxvb2tpbmcgYXQgc29tZSBwb3RlbnRpYWxseSBuYXN0eSB3aWxkIHBvaW50ZXIgYmVoYXZpb3IsIGFuZCB0aGVuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzM0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3N3YXBfaGVhZGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTM0MDYtXG5tbS9zd2FwZmlsZS5jOjM0MDc6c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0zNDA4LVx0XHRcdFx0ICAgIHVuaW9uIHN3YXBfaGVhZGVyICpzd2FwX2hlYWRlcixcbi0tXG5tbS9zd2FwZmlsZS5jPTM0ODc9U1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbi0tXG5tbS9zd2FwZmlsZS5jLTM2MDUtXHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbm1tL3N3YXBmaWxlLmM6MzYwNjpcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cbm1tL3N3YXBmaWxlLmMtMzYwNy1cdCAqL1xubW0vc3dhcGZpbGUuYzozNjA4Olx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG5tbS9zd2FwZmlsZS5jLTM2MDktXHRpZiAoZXJyb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gc3dhcGZpbGUuYzogc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9zd2FwZmlsZS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGZ1bmN0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBvciBjb25maWd1cmluZyBzb21lIGFzcGVjdCBvZiBzd2FwIHNwYWNlIGNsdXN0ZXJpbmcg4oCTIGFuIGludGVyZXN0aW5nIHRlY2huaXF1ZSwgYW5kIG9uZSB0aGF0IGlzIHByb2JhYmx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBpbnZvbHZlZCBpbiBvcHRpbWl6aW5nIHN3YXAgSS9PIGJ5IGdyb3VwaW5nIHJlbGF0ZWQgcGFnZXMgdG9nZXRoZXIgb24gZGlzaywgb3IgaWYgaXQgaGFzIGEgZGlmZmVyZW50IHB1cnBvc2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBvdmVyYWxsIHB1cnBvc2UgYW5kIGRlc2lnbiBjaG9pY2VzIG9mIHRoZSBmdW5jdGlvbiB3aXRoIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQwNzpcdHN0YXRpYyBpbnQgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbjM0MDg6XHRcdFx0XHRcdCAgICB1bmlvbiBzd2FwX2hlYWRlciAqc3dhcF9oZWFkZXIsXG4zNDA5Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBtYXhwYWdlcylcbjM0MTA6XHR7XG4zNDExOlx0XHR1bnNpZ25lZCBsb25nIG5yX2NsdXN0ZXJzID0gRElWX1JPVU5EX1VQKG1heHBhZ2VzLCBTV0FQRklMRV9DTFVTVEVSKTtcbjM0MTI6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvO1xuMzQxMzpcdFx0aW50IGVyciA9IC1FTk9NRU07XG4zNDE0Olx0XHR1bnNpZ25lZCBsb25nIGk7XG4zNDE1Olx0XG4zNDE2Olx0XHRjbHVzdGVyX2luZm8gPSBrdnphbGxvY19vYmpzKCpjbHVzdGVyX2luZm8sIG5yX2NsdXN0ZXJzKTtcbjM0MTc6XHRcdGlmICghY2x1c3Rlcl9pbmZvKVxuMzQxODpcdFx0XHRnb3RvIGVycjtcbjM0MTk6XHRcbjM0MjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2NsdXN0ZXJzOyBpJiM0MzsmIzQzOylcbjM0MjE6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2x1c3Rlcl9pbmZvW2ldLmxvY2spO1xuMzQyMjpcdFxuMzQyMzpcdFx0aWYgKCEoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TT0xJRFNUQVRFKSkge1xuMzQyNDpcdFx0XHRzaS1cdTAwM2VnbG9iYWxfY2x1c3RlciA9IGttYWxsb2Nfb2JqKCpzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcik7XG4zNDI1Olx0XHRcdGlmICghc2ktXHUwMDNlZ2xvYmFsX2NsdXN0ZXIpXG4zNDI2Olx0XHRcdFx0Z290byBlcnI7XG4zNDI3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNXQVBfTlJfT1JERVJTOyBpJiM0MzsmIzQzOylcbjM0Mjg6XHRcdFx0XHRzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlci1cdTAwM2VuZXh0W2ldID0gU1dBUF9FTlRSWV9JTlZBTElEO1xuMzQyOTpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcl9sb2NrKTtcbjM0MzA6XHRcdH1cbjM0MzE6XHRcbjM0MzI6XHRcdC8qXG4zNDMzOlx0XHQgKiBNYXJrIHVudXNhYmxlIHBhZ2VzIChoZWFkZXIgcGFnZSwgYmFkIHBhZ2VzLCBhbmQgdGhlIEVPRiBwYXJ0IG9mXG4zNDM0Olx0XHQgKiB0aGUgbGFzdCBjbHVzdGVyKSBhcyB1bmF2YWlsYWJsZS4gVGhlIGNsdXN0ZXJzIGFyZW4mIzM5O3QgbWFya2VkIGZyZWVcbjM0MzU6XHRcdCAqIHlldCwgc28gbm8gbGlzdCBvcGVyYXRpb25zIGFyZSBpbnZvbHZlZCB5ZXQuXG4zNDM2Olx0XHQgKi9cbjM0Mzc6XHRcdGVyciA9IHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdChzaSwgY2x1c3Rlcl9pbmZvLCAwLCBmYWxzZSk7XG4zNDM4Olx0XHRpZiAoZXJyKVxuMzQzOTpcdFx0XHRnb3RvIGVycjtcbjM0NDA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN3YXBfaGVhZGVyLVx1MDAzZWluZm8ubnJfYmFkcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4zNDQxOlx0XHRcdHVuc2lnbmVkIGludCBwYWdlX25yID0gc3dhcF9oZWFkZXItXHUwMDNlaW5mby5iYWRwYWdlc1tpXTtcbjM0NDI6XHRcbjM0NDM6XHRcdFx0aWYgKCFwYWdlX25yIHx8IHBhZ2VfbnIgXHUwMDNlIHN3YXBfaGVhZGVyLVx1MDAzZWluZm8ubGFzdF9wYWdlKSB7XG4zNDQ0Olx0XHRcdFx0cHJfd2FybihcJiMzNDtCYWQgc2xvdCBvZmZzZXQgaXMgb3V0IG9mIGJvcmRlcjogJWQgKGxhc3RfcGFnZTogJWQpXFxuXCYjMzQ7LFxuMzQ0NTpcdFx0XHRcdFx0cGFnZV9uciwgc3dhcF9oZWFkZXItXHUwMDNlaW5mby5sYXN0X3BhZ2UpO1xuMzQ0NjpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDQ3Olx0XHRcdFx0Z290byBlcnI7XG4zNDQ4Olx0XHRcdH1cbjM0NDk6XHRcdFx0ZXJyID0gc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHNpLCBjbHVzdGVyX2luZm8sIHBhZ2VfbnIsIGZhbHNlKTtcbjM0NTA6XHRcdFx0aWYgKGVycilcbjM0NTE6XHRcdFx0XHRnb3RvIGVycjtcbjM0NTI6XHRcdH1cbjM0NTM6XHRcdGZvciAoaSA9IG1heHBhZ2VzOyBpIFx1MDAzYyByb3VuZF91cChtYXhwYWdlcywgU1dBUEZJTEVfQ0xVU1RFUik7IGkmIzQzOyYjNDM7KSB7XG4zNDU0Olx0XHRcdGVyciA9IHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdChzaSwgY2x1c3Rlcl9pbmZvLCBpLCB0cnVlKTtcbjM0NTU6XHRcdFx0aWYgKGVycilcbjM0NTY6XHRcdFx0XHRnb3RvIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBTd2FwIENsdXN0ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBub25lIG9mIHRoZXNlIGRpcmVjdGx5IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIHRoZSBrZXkgY29uY2Vybi4gVGhlIG1lbW9yeSBhbGxvY2F0aW9uIHZpYSBga3Z6YWxsb2Nfb2Jqc2AgZW5zdXJlcyB6ZXJvLWluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBnb29kLgoKVGhlIGZpcnN0IGNyaXRpY2FsIGFkanVzdG1lbnQgaW52b2x2ZXMgdGhlIHBsYWNlbWVudCBvZiBgcmN1X2Fzc2lnbl9wb2ludGVyKGNpLSZndDt0YWJsZSwgdGFibGUpO2AuIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSByZWFzb24gZm9yIG1vdmluZyB0aGlzIGlzIHRvIHByZXZlbnQgYGNsdXN0ZXJfaXNfdXNhYmxlKClgIGZyb20gZXJyb25lb3VzbHkgZGV0ZWN0aW5nIGBjaS0mZ3Q7dGFibGVgIGFzIHZhbGlkIGJlZm9yZSBgY2ktJmd0O21lbWNnX3RhYmxlYCBpcyBhbGxvY2F0ZWQuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBjaS0mZ3Q7bWVtY2dfdGFibGVgLiBNYWtlcyBzZW5zZSwgd2UmIzM5O3JlIHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UgY29uZGl0aW9uIGFuZCBlbnN1cmluZyB0aGF0IHRoZSB0YWJsZSBwb2ludGVyIGlzIG9ubHkgY29uc2lkZXJlZCB2YWxpZCAqYWZ0ZXIqIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwLgoKVGhlIHNlY29uZCBjaGFuZ2UgZm9jdXNlcyBvbiBzaGlmdGluZyBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCBhZnRlciBzZXR0aW5nIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcuIFRoZSBvcmlnaW5hbCBjb25jZXJuIGhlcmUgc2VlbXMgdG8gYmUgYW4gYWxsb2NhdGlvbiBpc3N1ZS4gSWYgd2UgY2FsbGVkIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gICpiZWZvcmUqIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgd2UgbWlnaHQgYWxsb2NhdGUgYHNpLSZndDtnbG9iYWxfY2x1c3RlcmAgd2hlbiBpdOKAmXMgbm90IGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBlaXRoZXIgYSBtZW1vcnkgbGVhaywgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgbWlzY29uZmlndXJhdGlvbi4gSXQmIzM5O3Mgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgc3RpbGwgYSBsb2dpYyBmbGF3IGFuZCBhIHBvdGVudGlhbCByZXNvdXJjZSB3YXN0ZS4KClRoZSBjaGFuZ2VzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYXBwZWFyIHRvIGJlIHNpbXBsaWZpY2F0aW9ucyBhbmQgYXJlIGxpa2VseSBub3Qgc2lnbmlmaWNhbnQuCgpIb3dldmVyLCB0aGUgcmVtb3ZhbCBvZiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO2AgaW4gdGhlIGBmYWlsZWQ6YCBwYXRoIG9mIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGNhdWdodCBteSBleWUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgYSBsb2dpYyBlcnJvciBpbiBob3cgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhhdCBzcGVjaWZpYyBlcnJvciBwYXRoLiBJdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBzZXF1ZW5jZSBpbiB0aGF0IGFyZWEsIGJ1dCBteSBodW5jaCBpcyBpdCYjMzk7cyBhIGJ1ZyBmaXguCgpPdmVyYWxsLCBpdCBzZWVtcyB0aGUgY29yZSBpc3N1ZXMgYXJlOgoKKiAgIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByb3RlY3Rpb24sIHdpdGggdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIG1vdmVtZW50CiogICBBIHJlc291cmNlIGxlYWsgcHJldmVudGlvbi9jb3JyZWN0IGluaXRpYWxpemF0aW9uIGxvZ2ljIHdpdGggdGhlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGNoYW5nZQoqICAgQSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgZml4IGluIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgCgpUbyBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBsZXQmIzM5O3MgdmVyaWZ5IHdoYXQgYHRhYmxlYCBhbmQgYG1lbWNnX3RhYmxlYCBhcmUsIGJ5IGV4YW1pbmluZyBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBhbmQgaG93IHRob3NlIGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTg6XHRcbiA0NTk6XHRcdGlmIChTV1BfVEFCTEVfVVNFX1BBR0UpIHtcbiA0NjA6XHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhnZnAgfCBfX0dGUF9aRVJPLCAwKTtcbiA0NjE6XHRcdFx0aWYgKGZvbGlvKVxuIDQ2MjpcdFx0XHRcdHRhYmxlID0gZm9saW9fYWRkcmVzcyhmb2xpbyk7XG4gNDYzOlx0XHR9IGVsc2Uge1xuIDQ2NDpcdFx0XHR0YWJsZSA9IGttZW1fY2FjaGVfemFsbG9jKHN3YXBfdGFibGVfY2FjaGVwLCBnZnApO1xuIDQ2NTpcdFx0fVxuIDQ2NjpcdFx0aWYgKCF0YWJsZSlcbiA0Njc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDY4Olx0XG4gNDY5Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDQ3MDpcdFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiA0NzE6XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbiA0NzI6XHRcdFx0Y2ktXHUwMDNlbWVtY2dfdGFibGUgPSBremFsbG9jX29iaigqY2ktXHUwMDNlbWVtY2dfdGFibGUsIGdmcCk7XG4gNDczOlx0XHRcdGlmICghY2ktXHUwMDNlbWVtY2dfdGFibGUpIHtcbiA0NzQ6XHRcdFx0XHRzd2FwX2NsdXN0ZXJfZnJlZV90YWJsZShjaSk7XG4gNDc1Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDc2Olx0XHRcdH1cbiA0Nzc6XHRcdH1cbiA0Nzg6XHQjZW5kaWZcbiA0Nzk6XHRcbiA0ODA6XHQjaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXG4gNDgxOlx0XHRWTV9XQVJOX09OX09OQ0UoY2ktXHUwMDNlemVyb19iaXRtYXApO1xuIDQ4MjpcdFx0Y2ktXHUwMDNlemVyb19iaXRtYXAgPSBiaXRtYXBfemFsbG9jKFNXQVBGSUxFX0NMVVNURVIsIGdmcCk7XG4gNDgzOlx0XHRpZiAoIWNpLVx1MDAzZXplcm9fYml0bWFwKSB7XG4gNDg0Olx0XHRcdHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKGNpKTtcbiA0ODU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDg2Olx0XHR9XG4gNDg3Olx0I2VuZGlmXG4gNDg4Olx0XG4gNDg5Olx0XHQvKlxuIDQ5MDpcdFx0ICogTWFrZSB0YWJsZXMgdmlzaWJsZSB0byBjbHVzdGVyX2lzX3VzYWJsZSgpIGFmdGVyIGV2ZXJ5dGhpbmcgaXNcbiA0OTE6XHRcdCAqIHJlYWR5LlxuIDQ5MjpcdFx0ICovXG4gNDkzOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtcbiA0OTQ6XHRcdHJldHVybiAwO1xuIDQ5NTpcdH1cbiA0OTY6XHRcbiA0OTc6XHQvKlxuIDQ5ODpcdCAqIFNhbml0eSBjaGVjayB0byBlbnN1cmUgbm90aGluZyBsZWFrZWQsIGFuZCB0aGUgc3BlY2lmaWVkIHJhbmdlIGlzIGVtcHR5LlxuIDQ5OTpcdCAqIE9uZSBzcGVjaWFsIGNhc2UgaXMgdGhhdCBiYWQgc2xvdHMgY2FuJiMzOTt0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXG4gNTAwOlx0ICogYmFkIHNsb3RzIGZvciBzd2Fwb2ZmLCBhbmQgbm9uLXN3YXBvZmYgcGF0aCBtdXN0IG5ldmVyIGZyZWUgYmFkIHNsb3RzLlxuIDUwMTpcdCAqL1xuIDUwMjpcdHN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiA1MDM6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjaV9vZmYsIHVuc2lnbmVkIGludCBucixcbiA1MDQ6XHRcdFx0XHRcdCAgICAgIGJvb2wgc3dhcG9mZilcbiA1MDU6XHR7XG4gNTA2Olx0XHR1bnNpZ25lZCBpbnQgY2lfZW5kID0gY2lfb2ZmICYjNDM7IG5yO1xuIDUwNzpcdFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhlc2UgS2VybmVsIElzc3VlcyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZXJlIGFyZSBhIGZldyBkaXN0aW5jdCBtZW1vcnktcmVsYXRlZCBwcm9ibGVtcyBoZXJlLCBub25lIG9mIHdoaWNoIGFwcGVhciB0byBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGlzIGEgcmVsaWVmLgoKRmlyc3QsIHRoZXJlJiMzOTtzIGEgY29uY3VycmVuY3kgYnVnLiBJIGNhbiBzZWUgdGhhdCBgdGFibGVgIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgc29tZXRoaW5nIGxpa2UgYF9fR0ZQX1pFUk9gIG9yIGBrbWVtX2NhY2hlX3phbGxvY2AsIGBjaS0mZ3Q7bWVtY2dfdGFibGVgIGdldHMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBhbmQgYGNpLSZndDt6ZXJvX2JpdG1hcGAgd2l0aCBgYml0bWFwX3phbGxvY2AuIFRoZSBrZXkgaXNzdWUgaXMgdGhlICpvcmRlciogb2YgaW5pdGlhbGl6YXRpb24gYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIGBjaS0mZ3Q7dGFibGVgIHBvaW50ZXIgaXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIHRocmVhZHMgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgLiBJZiBhbm90aGVyIHRocmVhZCBjYW4gc2VlIGBjaS0mZ3Q7dGFibGVgIGJlZm9yZSBgY2ktJmd0O21lbWNnX3RhYmxlYCBpcyBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCwgaXQmIzM5O3MgZ29pbmcgdG8gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIsIGFzc3VtaW5nIHRoYXQgaWYgYGNpLSZndDt0YWJsZWAgaXNuJiMzOTt0IG51bGwsIHRoZW4gYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIGtlcm5lbCBwYW5pYyBvciBLQVNBTiBmaW5kaW5nIGEgcHJvYmxlbSBiZWNhdXNlIG9mIHRoZSBhdHRlbXB0ZWQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLgoKVGhlIHNlY29uZCBpc3N1ZSBpcyB3aXRoaW4gYHN3YXBvbmAgYW5kIHRoZSBmdW5jdGlvbiBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGVyZSB3YXMgYSBsb2dpYyBlcnJvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldC4gVGh1cywgdGhlIGNoZWNrIGBzaS0mZ3Q7ZmxhZ3MgJmFtcDsgU1dQX1NPTElEU1RBVEVgIHdvdWxkIGFsd2F5cyBldmFsdWF0ZSB0byBmYWxzZS4gVGhlIGNvbnNlcXVlbmNlPyBgc2ktJmd0O2dsb2JhbF9jbHVzdGVyYCB3b3VsZCBhbHdheXMgYmUgYWxsb2NhdGVkLCBldmVuIG9uIHNvbGlkLXN0YXRlIGRyaXZlcyB3aGVyZSBpdCBtaWdodCBub3QgYmUgbmVlZGVkLiBUaGlzIGlzIG5vdCBhIG1lbW9yeSByZWFkLCBidXQgYSBtZW1vcnkgbGVhayBhbmQgZ2VuZXJhbCBiZWhhdmlvcmFsIGVycm9yLiBJdCB3b3VsZCBiZSBpbmVmZmljaWVudCBmb3IgU1NEIGRldmljZXMuCgpGaW5hbGx5LCB0aGVyZSYjMzk7cyBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgbG9naWMgd2FzIHRvIGNoZWNrIGlmIGFueSBlbGVtZW50IHdpdGhpbiBgY2ktJmd0O2V4dGVuZF90YWJsZWAgd2FzIG5vbi1udWxsLCBhbmQgdGhlbiBvbmx5IGZyZWUgdGhlIHdob2xlIHRhYmxlIGlmIGFsbCB3ZXJlIG51bGwuIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoaXMsIHJldHVybmluZyBlYXJseSBpZiAqYW55KiBlbnRyeSBpc24mIzM5O3QgbnVsbCwgYW5kIG9ubHkgZnJlZWluZyB0aGUgd2hvbGUgaWYgYWxsIGVudHJpZXMgYXJlIG51bGwuIFRoZSBjb25jZXJuIG5vdyBpcyB0aGUgY2FsbCB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpYCBpbiB0aGUgYGZhaWxlZDpgIHBhdGggb2YgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBgZXh0ZW5kX3RhYmxlYCBtaWdodCBzdGlsbCBiZSBpbiB1c2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZnJlZWluZyB0aGUgdGFibGUgcHJlbWF0dXJlbHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIHVzZXMgdGhpcyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIGRldGVybWluZSBpZiBhIGRvdWJsZS1mcmVlIGlzIHBvc3NpYmxlIG9yIGlmIG1lbW9yeSBpcyBiZWluZyBmcmVlZCBiZWZvcmUgaXQmIzM5O3MgYWN0dWFsbHkgc2FmZSB0byBkbyBzby4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjYWxsZXIgdG8gc2VlIHdoZXRoZXIgb3Igbm90IHRoYXQgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgdGhhdCYjMzk7cyBzdGlsbCBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2OTA6XHRzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4xNjkxOlx0XHRcdFx0XHQgICAgcGdvZmZfdCBvZmZzZXQsIGludCBucilcbjE2OTI6XHR7XG4xNjkzOlx0XHRpbnQgZXJyO1xuMTY5NDpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbjE2OTU6XHRcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4xNjk2Olx0XG4xNjk3Olx0XHRjaV9zdGFydCA9IG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVI7XG4xNjk4Olx0XHRjaV9lbmQgPSBjaV9zdGFydCAmIzQzOyBucjtcbjE2OTk6XHRcdGNpX29mZiA9IGNpX3N0YXJ0O1xuMTcwMDpcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcbjE3MDE6XHRyZXN0YXJ0OlxuMTcwMjpcdFx0ZG8ge1xuMTcwMzpcdFx0XHRlcnIgPSBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoY2ksIGNpX29mZik7XG4xNzA0Olx0XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4xNzA1Olx0XHRcdFx0aWYgKGVyciA9PSAtRU5PTUVNKSB7XG4xNzA2Olx0XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbjE3MDc6XHRcdFx0XHRcdGVyciA9IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHNpLCBjaSwgY2lfb2ZmLCBHRlBfQVRPTUlDKTtcbjE3MDg6XHRcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbjE3MDk6XHRcdFx0XHRcdGlmICghZXJyKVxuMTcxMDpcdFx0XHRcdFx0XHRnb3RvIHJlc3RhcnQ7XG4xNzExOlx0XHRcdFx0fVxuMTcxMjpcdFx0XHRcdGdvdG8gZmFpbGVkO1xuMTcxMzpcdFx0XHR9XG4xNzE0Olx0XHR9IHdoaWxlICgmIzQzOyYjNDM7Y2lfb2ZmIFx1MDAzYyBjaV9lbmQpO1xuMTcxNTpcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4xNzE2Olx0XHRyZXR1cm4gMDtcbjE3MTc6XHRmYWlsZWQ6XG4xNzE4Olx0XHR3aGlsZSAoY2lfb2ZmLS0gXHUwMDNlIGNpX3N0YXJ0KVxuMTcxOTpcdFx0XHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XG4xNzIwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbjE3MjE6XHRcdHJldHVybiBlcnI7XG4xNzIyOlx0fVxuMTcyMzpcdFxuMTcyNDpcdC8qKlxuMTcyNTpcdCAqIGZvbGlvX2FsbG9jX3N3YXAgLSBhbGxvY2F0ZSBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG4xNzI2Olx0ICogQGZvbGlvOiBmb2xpbyB3ZSB3YW50IHRvIG1vdmUgdG8gc3dhcFxuMTcyNzpcdCAqXG4xNzI4Olx0ICogQWxsb2NhdGUgc3dhcCBzcGFjZSBmb3IgdGhlIGZvbGlvIGFuZCBhZGQgdGhlIGZvbGlvIHRvIHRoZVxuMTcyOTpcdCAqIHN3YXAgY2FjaGUuXG4xNzMwOlx0ICpcbjE3MzE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB0aGUgZm9saW8gbG9jay5cbjE3MzI6XHQgKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS5cbjE3MzM6XHQgKi9cbjE3MzQ6XHRpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTczNTpcdHtcbjE3MzY6XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbjE3Mzc6XHRcdHVuc2lnbmVkIGludCBzaXplID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4xNzM4Olx0XG4xNzM5Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQxCgkJCQkJCQlvdXRwdXQ6IDMwNwoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBSZWNlbnQgS2VybmVsIENoYW5nZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhleSYjMzk7dmUgcmVtb3ZlZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGZyb20gdGhlIGBmYWlsZWQ6YCBwYXRoLiBJdCBsb29rcyBsaWtlIHRoZSBsb2dpYyBnb2VzOiBhbGxvY2F0ZSB0YWJsZSAoYHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jYCksIGFuZCBpZiB0aGF0ICpmYWlscyosIGl0IGhpdHMgYGZhaWxlZDpgLiBJZiB0aGUgYWxsb2NhdGlvbiAqc3VjY2VlZHMqLCBpdCBnb2VzIHRvIGByZXN0YXJ0OmAuIExhdGVyICpmYWlsdXJlcyogYWxzbyBoaXQgYGZhaWxlZDpgLiBJbiBgZmFpbGVkOmAsIGl0IHVuZG9lcyB0aGUgZHVwbGljYXRlcy4gTXkgZmlyc3QgdGhvdWdodCB3YXMgbWF5YmUgdGhlIGZyZWUgd2FzbiYjMzk7dCBuZWVkZWQgb3Igd2FzIGRhbmdlcm91cyB0byB0aGUgbWVtb3J5IGxheW91dC4gQnV0LCB3YWl0LCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIG9ubHkgZnJlZXMgaWYgKmFsbCogZW50cmllcyBhcmUgTlVMTCwgc28gaXQgd291bGRuJiMzOTt0IGZyZWUgYSB0YWJsZSBpbiB1c2UuIFNvIHdoeSB3YXMgaXQgcmVtb3ZlZD8gTWF5YmUgaXQgd2FzIGp1c3QgcmVkdW5kYW50LiBPciBtYXliZSBpdCAqZGlkKiBjYXVzZSBzb21lIGlzc3VlIHRoZXJlLCBsZWFkaW5nIHRvIGEgYnVnLCB0aGF0IHdhc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXQmIzM5O3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgbm90IGFueSB1bmluaXRpYWxpemVkIHJlYWRzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4KClNvLCBoZXJlJiMzOTtzIHRoZSBvdmVyYWxsIGdpc3Qgb2YgdGhlc2UgY2hhbmdlczoKCjEuICBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYDogRml4ZXMgYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGBjaS0mZ3Q7dGFibGVgIG1pZ2h0IGhhdmUgYmVlbiBwdWJsaXNoZWQgYmVmb3JlIGBjaS0mZ3Q7bWVtY2dfdGFibGVgIGFuZCBgY2ktJmd0O3plcm9fYml0bWFwYCB3ZXJlIGV2ZW4gYWxsb2NhdGVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC4KMi4gIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWA6IFNpbXBsaWZpZXMgYSBsb29wLgozLiAgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmA6IFJlbW92ZXMgdGhpcyBzZWVtaW5nbHkgdW5uZWNlc3NhcnkgY2FsbCB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLgo0LiAgYHN3YXBvbmA6IEZpeGVzIHRoZSBvcmRlciBvZiBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgaXMgY29ycmVjdGx5IHNlZW4sIHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktJmd0O2dsb2JhbF9jbHVzdGVyYC4KCk5vbmUgb2YgdGhlc2UgY2hhbmdlcyB0b3VjaCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mbyBsZWFrcywgb3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQWxsIHRoZSBhbGxvY2F0aW9ucyBhcmUgemVyb2VkIHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLCB3aGljaCBpcyBrZXkuIFRoZXNlIGZpeGVzIGFyZSBhbGwgYWJvdXQgcmFjZSBjb25kaXRpb25zLCBsb2dpYyBlcnJvcnMsIGFuZCBzb21lIG1lbW9yeSBsZWFrcy4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIHNpbXBsZSBrZXJuZWwgb29wcyBzaG91bGQgY2F0Y2ggYWxsIHRoZXNlIHByb2JsZW1zLiBUaGlzIG1lYW5zIHRoYXQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGZpeGVzLCBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzIGluIHRoZSBzd2FwIHN1YnN5c3RlbTpcbjEuIEEgcmFjZSBjb25kaXRpb24gaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgd2hlcmUgYGNpLVx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBhbmQgYGNpLVx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGFsbG9jYXRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvbmN1cnJlbnQgdGhyZWFkcyBjYWxsaW5nIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgZm9yIHNvbGlkLXN0YXRlIGRyaXZlcy5cbjMuIE1pbm9yIGNsZWFudXBzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxuXG5BbGwgbWVtb3J5IGFsbG9jYXRpb25zIGludm9sdmVkIChga3Z6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX29iamAsIGBiaXRtYXBfemFsbG9jYCwgYF9fR0ZQX1pFUk9gLCBga21lbV9jYWNoZV96YWxsb2NgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYnVncyBmaXhlZCBhcmUgcmFjZSBjb25kaXRpb25zIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzIG1lY2hhbmlzbXMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XG4xLiBBIHJhY2UgY29uZGl0aW9uIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgIHdoZXJlIGBjaS1cdTAwM2V0YWJsZWAgd2FzIHB1Ymxpc2hlZCB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAgYmVmb3JlIGBjaS1cdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cdTAwM2V6ZXJvX2JpdG1hcGAgd2VyZSBhbGxvY2F0ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBjb25jdXJyZW50IHRocmVhZHMgY2FsbGluZyBgY2x1c3Rlcl9pc191c2FibGUoKWAuXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgc3dhcG9uYCB3aGVyZSBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIHdhcyBzZXQsIGNhdXNpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXG4zLiBNaW5vciBjbGVhbnVwcyBpbiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYC5cblxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjM5OjA2LjE1MjgxMjUwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjQzNDI5MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb25cIixcbiAgICBcImZvbGlvX2R1cF9zd2FwXCIsXG4gICAgXCJzd2FwX2R1cF9lbnRyeV9kaXJlY3RcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XFxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXFx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVxcdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxcbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXFxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXFxuXFxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6Mzk6MDYuMTUyODI5ODE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM1ODk3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNmU4MTEyNjE2OWNlMGRiZjU5YjM1ZWU2MTY2MzU2YzBlZTg0ZDY2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDEyOjM5OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggNjE1ZDkwODY3MTExMy4uZmYxYjFmYzM2NGI5MiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC00NjYsOCArNDY2LDYgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihjaS1cXHUwMDNldGFibGUsIHRhYmxlKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcXG4gXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVxcdTAwM2VtZW1jZ190YWJsZSk7XFxuQEAgLTQ4Nyw2ICs0ODUsMTIgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiAjZW5kaWZcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1ha2UgdGFibGVzIHZpc2libGUgdG8gY2x1c3Rlcl9pc191c2FibGUoKSBhZnRlciBldmVyeXRoaW5nIGlzXFxuK1xcdCAqIHJlYWR5LlxcbitcXHQgKi9cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVxcdTAwM2V0YWJsZSwgdGFibGUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTUxMSwyMCArMTUxNSwxNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxcbiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4tXFx0Ym9vbCBjYW5fZnJlZSA9IHRydWU7XFxuIFxcbiBcXHRpZiAoIWNpLVxcdTAwM2VleHRlbmRfdGFibGUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpKyspIHtcXG4gXFx0XFx0aWYgKGNpLVxcdTAwM2VleHRlbmRfdGFibGVbaV0pXFxuLVxcdFxcdFxcdGNhbl9mcmVlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGNhbl9mcmVlKSB7XFxuLVxcdFxcdGtmcmVlKGNpLVxcdTAwM2VleHRlbmRfdGFibGUpO1xcbi1cXHRcXHRjaS1cXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcXG4tXFx0fVxcbitcXHRrZnJlZShjaS1cXHUwMDNlZXh0ZW5kX3RhYmxlKTtcXG4rXFx0Y2ktXFx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XFxuIH1cXG4gXFxuIC8qIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIG9uZSBzbG90LCB3aXRob3V0IGZyZWVpbmcgaXQgKi9cXG5AQCAtMTcxNiw3ICsxNzE3LDYgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBmYWlsZWQ6XFxuIFxcdHdoaWxlIChjaV9vZmYtLSBcXHUwMDNlIGNpX3N0YXJ0KVxcbiBcXHRcXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XFxuLVxcdHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMzU4OCwxMSArMzU4OCw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuIFxcbiBcXHRtYXhwYWdlcyA9IHNpLVxcdTAwM2VtYXg7XFxuIFxcbi1cXHQvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovXFxuLVxcdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xcbi1cXG4gXFx0aWYgKHNpLVxcdTAwM2ViZGV2IFxcdTAwMjZcXHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cXHUwMDNlYmRldikpXFxuIFxcdFxcdHNpLVxcdTAwM2VmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUztcXG4gXFxuQEAgLTM2MDYsNiArMzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxcbiBcXHRcXHRpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gYWZ0ZXIgU1dQXyBmbGFncyBoYW5kbGluZyBhc1xcbitcXHQgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTtcXG4rXFxuIFxcdGlmICgoc3dhcF9mbGFncyBcXHUwMDI2IFNXQVBfRkxBR19ESVNDQVJEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgc2ktXFx1MDAzZWJkZXYgXFx1MDAyNlxcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVxcdTAwM2ViZGV2KSkge1xcbiBcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOTowNi44MTc0Mzk5ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDI0OTEzNzEzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9uXCIsXG4gICAgXCJmb2xpb19kdXBfc3dhcFwiLFxuICAgIFwic3dhcF9kdXBfZW50cnlfZGlyZWN0XCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZlODExMjYxNjljZTBkYmY1OWIzNWVlNjE2NjM1NmMwZWU4NGQ2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDEyOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDYxNWQ5MDg2NzExMTMuLmZmMWIxZmMzNjRiOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtNDY2LDggKzQ2Niw2IEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4tXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbkBAIC00ODcsNiArNDg1LDEyIEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gI2VuZGlmXG4rXG4rXHQvKlxuK1x0ICogTWFrZSB0YWJsZXMgdmlzaWJsZSB0byBjbHVzdGVyX2lzX3VzYWJsZSgpIGFmdGVyIGV2ZXJ5dGhpbmcgaXNcbitcdCAqIHJlYWR5LlxuK1x0ICovXG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNTExLDIwICsxNTE1LDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gc3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcbiBcbiBcdGlmICghY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpKyspIHtcbiBcdFx0aWYgKGNpLVx1MDAzZWV4dGVuZF90YWJsZVtpXSlcbi1cdFx0XHRjYW5fZnJlZSA9IGZhbHNlO1xuK1x0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChjYW5fZnJlZSkge1xuLVx0XHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuLVx0XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuLVx0fVxuK1x0a2ZyZWUoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKTtcbitcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4gfVxuIFxuIC8qIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIG9uZSBzbG90LCB3aXRob3V0IGZyZWVpbmcgaXQgKi9cbkBAIC0xNzE2LDcgKzE3MTcsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gZmFpbGVkOlxuIFx0d2hpbGUgKGNpX29mZi0tIFx1MDAzZSBjaV9zdGFydClcbiBcdFx0X19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpO1xuLVx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0zNTg4LDExICszNTg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcbiBcdG1heHBhZ2VzID0gc2ktXHUwMDNlbWF4O1xuIFxuLVx0LyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqL1xuLVx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuLVxuIFx0aWYgKHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cdTAwM2ViZGV2KSlcbiBcdFx0c2ktXHUwMDNlZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7XG4gXG5AQCAtMzYwNiw2ICszNjAxLDE0IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG4gXHRcdGluY2VkX25yX3JvdGF0ZV9zd2FwID0gdHJ1ZTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbitcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cbitcdCAqL1xuK1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuK1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOTowNi44MTc0NDI1MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYwOTkzMjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBTdWJzeXN0ZW0gUGF0Y2ggZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vc3dhcGZpbGUuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIHRvdWNoaW5nIHRoZSBzd2FwIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHNvbWUgZnVuY3Rpb24gY2hhbmdlcy4gSSBzZWUgdGhlc2Ugc3BlY2lmaWMgY2hhbmdlczogdGhlIGFzc2lnbm1lbnQgb2YgdGhlIHN3YXAgdGFibGUgaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgaGFzIGJlZW4gbW92ZWQ7IHRoZSBsb2dpYyBpbiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGhhcyBiZWVuIHNpbXBsaWZpZWQsIGFuZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGhhcyBiZWVuIHJlbW92ZWQgaW4gYSBjZXJ0YWluIGVycm9yIHBhdGggaW4gYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmA7IGFuZCBmaW5hbGx5LCBhIHJlb3JkZXJpbmcgb2YgY2FsbHMgd2l0aGluIGBzeXNfc3dhcG9uYCwgbW92aW5nIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGRvd24gdGhlIGNhbGwgc3RhY2suXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG5ldyB2dWxuZXJhYmlsaXRpZXM/IE9yLCBtb3JlIGltcG9ydGFudGx5IGZvciBmdXp6aW5nLCBhcmUgdGhleSBjcmVhdGluZyBhbnkgbmV3IGludGVyZXN0aW5nIGNvZGUgcGF0aHM/XG5cbkknbSBxdWlja2x5IGNoZWNraW5nIHJlYWNoYWJpbGl0eS4gIGBzeXNfc3dhcG9uYCBpcyBhIHN5c2NhbGwgc28gZGVmaW5pdGVseSByZWFjaGFibGUuIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgIGlzIHJlYWNoYWJsZSB0b28uIEFuZCBJIHNlZSBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBhcmUgYWxzbyByZWFjaGFibGUuIEhvd2V2ZXIsIGFoLCBJIHNlZSwgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgYXJlIGBzdGF0aWNgLiAgVGhhdCBsaW1pdHMgaG93IGVhc2lseSBJIGNhbiBkaXJlY3RseSB0YXJnZXQgdGhlbS4gYHN5c19zd2Fwb25gIGlzIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGFuZCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AgaXMgbm90IGBzdGF0aWNgLlxuXG5UaGUgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFRodXMsIEknbGwgbmVlZCB0byBmb2N1cyBvbiBlbnRyeSBwb2ludHMgYW5kIGFueSBmdW5jdGlvbnMgdGhhdCBhcmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGZpbGUuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIEkgc2VlIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgYW5kIGBzeXNfc3dhcG9uYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCBjYWxscyBpbnRvIHRoZW0gdG8gaWRlbnRpZnkgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgc3RhY2tzLiBTaW5jZSBpdCdzIGEgY3JpdGljYWwgYXJlYSwgSSdsbCBzdGFydCB3aXRoIGBzeXNfc3dhcG9uYCBhbmQgdGhlbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYC4gSSdsbCBncmVwIGZvciB0aGUgbGF0dGVyIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjM5OjE3LjQyNzM4MzY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjM1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9NDIxPXN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTQ0OC1cXG5tbS9zd2FwZmlsZS5jOjQ0OTpzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXFxubW0vc3dhcGZpbGUuYy00NTAte1xcbi0tXFxubW0vc3dhcGZpbGUuYz01MzE9c3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNTQ0LVxcbm1tL3N3YXBmaWxlLmM6NTQ1OlxcdGlmICghc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XFxubW0vc3dhcGZpbGUuYy01NDYtXFx0XFx0XFx0XFx0XFx0ICBfX0dGUF9OT1dBUk4pKVxcbi0tXFxubW0vc3dhcGZpbGUuYy01NTgtXFxubW0vc3dhcGZpbGUuYzo1NTk6XFx0cmV0ID0gc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XFxubW0vc3dhcGZpbGUuYy01NjAtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTc5MT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTgxOC1cXHQvKiBOZWVkIHRvIGFsbG9jYXRlIHN3YXAgdGFibGUgZmlyc3QgZm9yIGluaXRpYWwgYmFkIHNsb3QgbWFya2luZy4gKi9cXG5tbS9zd2FwZmlsZS5jOjgxOTpcXHRpZiAoIWNpLVxcdTAwM2Vjb3VudCBcXHUwMDI2XFx1MDAyNiBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoY2ksIEdGUF9LRVJORUwpKVxcbm1tL3N3YXBmaWxlLmMtODIwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOToxNy40ODk2MzgwOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTM2MjE2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIENsdXN0ZXIgUG9wdWxhdGlvbiBpbiB0aGUgU3dhcCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYCBpcyBiZWluZyBpbnZva2VkIGJ5IGBzd2FwX2FsbG9jX2NsdXN0ZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGV4cGVjdGVkIGNhbGwgY2hhaW4uIEknbGwgbWVudGFsbHkgd2FsayB0aHJvdWdoIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3Mg4oCTIGBzd2FwX2FsbG9jX2NsdXN0ZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIG9yIGNyZWF0aW5nIGEgc3dhcCBjbHVzdGVyLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0LCBhZnRlciBhbGxvY2F0aW5nIG9uZSwgaXQgd291bGQgKnRoZW4qIGhhbmQgb2ZmIHBvcHVsYXRpb24uIEJ1dCBJIGNhbid0IGFzc3VtZS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIGVudHJ5IHBvaW50cywgb3IsIHdvcnNlLCB1bmludGVuZGVkIHJlY3Vyc2l2ZSBjYWxscyBvciBkYXRhIHJhY2VzIGhlcmUuIEEgcXVpY2sgY29kZSBkaXZlIHRvIHRyYWNlIHRoZSBjYWxsZXIvY2FsbGVlIHJlbGF0aW9uc2hpcHMgaXMgdGhlIG5leHQgc3RlcC4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgdGhlIGNsdXN0ZXIgcG9wdWxhdGlvbiBlbnRhaWxzLi4uIGlzIGl0IGp1c3QgemVyb2luZywgb3IgYXJlIHdlIGxvYWRpbmcgYWN0dWFsIGRhdGEgaW1tZWRpYXRlbHk/IFRoZSBsYXR0ZXIgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6Mzk6MjYuNjI1ODYyMjg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDU4ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2x1c3Rlcl9wb3B1bGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9NTMwPXN0YXRpYyBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKlxcbm1tL3N3YXBmaWxlLmM6NTMxOnN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy01MzItXFx0XFx0XFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTYyNz1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3RlcihcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNjU0LVxcdFxcdFZNX1dBUk5fT05fT05DRShjbHVzdGVyX3RhYmxlX2lzX2FsbG9jZWQoZm91bmQpKTtcXG5tbS9zd2FwZmlsZS5jOjY1NTpcXHRcXHRyZXR1cm4gc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHNpLCBmb3VuZCk7XFxubW0vc3dhcGZpbGUuYy02NTYtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOToyNi43MTUzMzMwOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU5MzAxMjE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYGlzb2xhdGVfbG9ja19jbHVzdGVyYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpc29sYXRlX2xvY2tfY2x1c3RlcmAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcm9iYWJseSB0aGlua2luZyBhYm91dCBhIGZldyBzcGVjaWZpYyBhc3BlY3RzIGltbWVkaWF0ZWx5LiBJcyBpdCBjb3JyZWN0bHkgaXNvbGF0aW5nIGxvY2stcmVsYXRlZCBvcGVyYXRpb25zIGZyb20gb3RoZXIgY2x1c3RlciBmdW5jdGlvbmFsaXRpZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpc29sYXRpb24sIHBlcmZvcm1hbmNlLXdpc2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGludHJvZHVjZWQsIG9yIGFyZSB3ZSBhY2hpZXZpbmcgdGhlIGV4cGVjdGVkIGJlbmVmaXRzIGluIHRlcm1zIG9mIGNvbmN1cnJlbmN5IGFuZCBmYXVsdCBpc29sYXRpb24/XG5cbkknbGwgYmUgbG9va2luZyBhdCB0aGUgY29kZSBmb3IgdGhhdCBtb2R1bGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgbWFuYWdlcyByZXNvdXJjZSBjb250ZW50aW9uLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yIHVuZGVyIGhpZ2ggbG9hZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXQncyByZXNwZWN0aW5nIGFueSB1bmRlcmx5aW5nIGxvY2sgc2VtYW50aWNzIHdlJ3ZlIGRlZmluZWQgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIGRpc3RyaWJ1dGVkIGNvbnNlbnN1cyBtZWNoYW5pc21zIChpZiBhbnkpIGFzIGludGVuZGVkLiBJJ2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIGEgZmV3IGVkZ2UgY2FzZSBzY2VuYXJpb3MgdG8gbWFrZSBzdXJlIHdlIGFyZSBub3QgZmFjaW5nIGFueSB1bmV4cGVjdGVkIHByb2JsZW1zLiBJIHdpbGwgbG9vayBmb3IgYW55IHBvdGVudGlhbCB0aHJlYWQgc2FmZXR5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMsIHRvby4gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBjbHVzdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTI1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6Mzk6NTguMzA4MzQ4MTQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNzY1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzb2xhdGVfbG9ja19jbHVzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz02MTA9c3RhdGljIHZvaWQgX19mcmVlX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy02MjYtICovXFxubW0vc3dhcGZpbGUuYzo2Mjc6c3RhdGljIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoXFxubW0vc3dhcGZpbGUuYy02MjgtXFx0XFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vc3dhcGZpbGUuYz0xMDE5PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMDI2LVxcdGRvIHtcXG5tbS9zd2FwZmlsZS5jOjEwMjc6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IGlzb2xhdGVfbG9ja19jbHVzdGVyKHNpLCBsaXN0KTtcXG5tbS9zd2FwZmlsZS5jLTEwMjgtXFx0XFx0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwNDE9c3RhdGljIHZvaWQgc3dhcF9yZWNsYWltX2Z1bGxfY2x1c3RlcnMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBib29sIGZvcmNlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMDUxLVxcbm1tL3N3YXBmaWxlLmM6MTA1MjpcXHR3aGlsZSAoKGNpID0gaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoc2ksIFxcdTAwMjZzaS1cXHUwMDNlZnVsbF9jbHVzdGVycykpKSB7XFxubW0vc3dhcGZpbGUuYy0xMDUzLVxcdFxcdG9mZnNldCA9IGNsdXN0ZXJfb2Zmc2V0KHNpLCBjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjM5OjU4LjM5MTEyMDUzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTYzOTgxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBTd2FwIFJlY2xhbWF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBzd2FwIHJlY2xhbWF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBtYW5hZ2luZyBpdHMgc3dhcCBzcGFjZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgYGFsbG9jX3N3YXBfc2Nhbl9saXN0YCBhbmQgYHN3YXBfcmVjbGFpbV9mdWxsX2NsdXN0ZXJzYC4gVGhlc2UgdHdvIGFyZSBsaWtlbHkga2V5IHBsYXllcnMgaW4gaG93IHdlIGlkZW50aWZ5LCBwcmlvcml0aXplLCBhbmQgdWx0aW1hdGVseSBoYW5kbGUgc3dhcCBzcGFjZSB0aGF0J3MgZWl0aGVyIGF2YWlsYWJsZSBmb3IgdXNlLCBvciBjdXJyZW50bHkgaG9sZGluZyBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgdXAuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgcmVjbGFpbWluZyBmdWxsIGNsdXN0ZXJzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIG92ZXJhbGwgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSSBhbnRpY2lwYXRlIHRoZXNlIHdpbGwgcHJvdmlkZSBhIGNsZWFyIGluc2lnaHQgaW50byB0aGUga2VybmVsJ3Mgc3dhcCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQwOjA4LjIwNzUyMjMxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMjEzMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3N3YXBfc2Nhbl9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz05Njg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEwMTgtXFxubW0vc3dhcGZpbGUuYzoxMDE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMTAyMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTA5Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbHVzdGVyX2FsbG9jX3N3YXBfZW50cnkoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTM1LVxcdGlmIChzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfUEFHRV9ESVNDQVJEKSB7XFxubW0vc3dhcGZpbGUuYzoxMTM2OlxcdFxcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc2ksIFxcdTAwMjZzaS1cXHUwMDNlZnJlZV9jbHVzdGVycywgZm9saW8sIGZhbHNlKTtcXG5tbS9zd2FwZmlsZS5jLTExMzctXFx0XFx0aWYgKGZvdW5kKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTQxLVxcdGlmIChvcmRlciBcXHUwMDNjIFBNRF9PUkRFUikge1xcbm1tL3N3YXBmaWxlLmM6MTE0MjpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZW5vbmZ1bGxfY2x1c3RlcnNbb3JkZXJdLCBmb2xpbywgdHJ1ZSk7XFxubW0vc3dhcGZpbGUuYy0xMTQzLVxcdFxcdGlmIChmb3VuZClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTE0Ny1cXHRpZiAoIShzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfUEFHRV9ESVNDQVJEKSkge1xcbm1tL3N3YXBmaWxlLmM6MTE0ODpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZWZyZWVfY2x1c3RlcnMsIGZvbGlvLCBmYWxzZSk7XFxubW0vc3dhcGZpbGUuYy0xMTQ5LVxcdFxcdGlmIChmb3VuZClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTE2My1cXHRcXHQgKi9cXG5tbS9zd2FwZmlsZS5jOjExNjQ6XFx0XFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXFx1MDAyNnNpLVxcdTAwM2VmcmFnX2NsdXN0ZXJzW29yZGVyXSwgZm9saW8sIGZhbHNlKTtcXG5tbS9zd2FwZmlsZS5jLTExNjUtXFx0XFx0aWYgKGZvdW5kKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTc3LVxcdFxcdCAqL1xcbm1tL3N3YXBmaWxlLmM6MTE3ODpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZWZyYWdfY2x1c3RlcnNbb10sIGZvbGlvLCB0cnVlKTtcXG5tbS9zd2FwZmlsZS5jLTExNzktXFx0XFx0aWYgKGZvdW5kKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTgxLVxcbm1tL3N3YXBmaWxlLmM6MTE4MjpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZW5vbmZ1bGxfY2x1c3RlcnNbb10sIGZvbGlvLCB0cnVlKTtcXG5tbS9zd2FwZmlsZS5jLTExODMtXFx0XFx0aWYgKGZvdW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDowOC4zMDc3NDQwMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NjM0MjI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24gUGF0aCBmb3IgU3dhcCBFbnRyaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgc3dhcCBlbnRyaWVzIGFyZSBhbGxvY2F0ZWQgYW5kIGl0IGxvb2tzIGxpa2UgYGNsdXN0ZXJfYWxsb2Nfc3dhcF9lbnRyeWAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gVGhlIGNhbGwgc3RhY2sgcmV2ZWFscyB0aGUgZm9sbG93aW5nOiBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCBnZXRzIGNhbGxlZCBieSBgZ2V0X3N3YXBfcGFnZXNgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgYWRkX3RvX3N3YXBgLiBBbmQsIGNyaXRpY2FsbHksIGBhZGRfdG9fc3dhcGAgaXMgdWx0aW1hdGVseSByZWFjaGVkIHRocm91Z2ggYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIFRoYXQgbWVhbnMgdGhlcmUncyBhIGRlZmluaXRlIHBhdGggdG8gdGhpcyBmdW5jdGlvbiwgYW5kIGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBzd2FwIG1lY2hhbmlzbS4gVGhpcyBpcyByZWFjaGFibGUsIHNvIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0IGZ1cnRoZXIuXG5cbk5leHQsIEkgdGhpbmsgSSdsbCBkaXZlIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDA6MTIuOTY0MDkxMTU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4MjM4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9kdXBfZW50cmllc19jbHVzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNjQwPXN0YXRpYyBpbnQgX19zd2FwX2NsdXN0ZXJfZHVwX2VudHJ5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2NzktLyoqXFxubW0vc3dhcGZpbGUuYzoxNjgwOiAqIHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcjogSW5jcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygc2xvdHMgd2l0aGluIG9uZSBjbHVzdGVyLlxcbm1tL3N3YXBmaWxlLmMtMTY4MS0gKiBAc2k6IFRoZSBzd2FwIGRldmljZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTY4OS0gKi9cXG5tbS9zd2FwZmlsZS5jOjE2OTA6c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMTY5MS1cXHRcXHRcXHRcXHQgICAgcGdvZmZfdCBvZmZzZXQsIGludCBucilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTc5OD1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4MTAtXFxubW0vc3dhcGZpbGUuYzoxODExOlxcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSxcXG5tbS9zd2FwZmlsZS5jLTE4MTItXFx0XFx0XFx0XFx0XFx0c3dwX29mZnNldChlbnRyeSksIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9Mzc1MD1pbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zNzY2LVxcbm1tL3N3YXBmaWxlLmM6Mzc2NzpcXHRyZXR1cm4gc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSwgMSk7XFxubW0vc3dhcGZpbGUuYy0zNzY4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDA6MTMuNDM1OTIzNjkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDQ2MDkwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlBURSBTd2FwcGluZyBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBpbnZvbHZpbmcgYGZvbGlvX2R1cF9zd2FwYC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqPyBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgbW0vbWVtb3J5LmNgLCBhbmQgc3BlY2lmaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3ByZXNlbnRfcHRlYCBvciBhbnl0aGluZyB0aGF0IGhhbmRsZXMgUFRFIChQYWdlIFRhYmxlIEVudHJ5KSBkdXBsaWNhdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgc2luY2UgdGhpcyBpcyByZWxhdGVkIHRvIHN3YXBwaW5nLCBgZm9saW9fZHVwX3N3YXBgIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgbmV3IHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhIHBoeXNpY2FsIHBhZ2UgdGhhdCBtaWdodCBiZSBnb2luZyB0aHJvdWdoLCBvciBqdXN0IGNhbWUgb3V0IG9mLCBzd2FwLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gcXVpY2tseS4gTXkgbmV4dCBtb3ZlIHdpbGwgYmUgdG8gY2hlY2sgdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGFuZCBzZWUgaWYgYGZvbGlvX2R1cF9zd2FwYCBpcyBpbmRlZWQgcHJlc2VudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggdGhlIHN3YXAgZHVwbGljYXRpb24gaXMgaGFwcGVuaW5nLiBJcyBpdCBkdXJpbmcgYSBmb3JrPyBDT1cgKENvcHktb24tV3JpdGUpPyBQZXJoYXBzIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nIHdoZW4gcmVzdG9yaW5nIGEgc3dhcHBlZC1vdXQgcGFnZT8gS25vd2luZyB0aGUgY2FsbGVyIGlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoxNy40NDA1MzY1MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTQ4NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2R1cF9zd2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTIyODMtXFxubW0vcm1hcC5jOjIyODQ6XFx0XFx0XFx0aWYgKGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBzdWJwYWdlKSBcXHUwMDNjIDApIHtcXG5tbS9ybWFwLmMtMjI4NS1cXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG4tLVxcbm1tL3NobWVtLmM9MTU5Mz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXFxuLS1cXG5tbS9zaG1lbS5jLTE3MDAtXFxubW0vc2htZW0uYzoxNzAxOlxcdFxcdGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jLTE3MDItXFx0XFx0c2htZW1fZGVsZXRlX2Zyb21fcGFnZV9jYWNoZShmb2xpbywgc3dwX3RvX3JhZGl4X2VudHJ5KGZvbGlvLVxcdTAwM2Vzd2FwKSk7XFxuLS1cXG5tbS9zd2FwLmg9MjExPWV4dGVybiBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3N3YXAuaC0yMjQtICpcXG5tbS9zd2FwLmg6MjI1OiAqIGZvbGlvX2R1cF9zd2FwKCk6IGluY3JlYXNlcyB0aGUgc3dhcCBjb3VudCBvZiBhIGZvbGlvLCB1c3VhbGx5XFxubW0vc3dhcC5oLTIyNi0gKiBkdXJpbmcgaXQgZ2V0cyB1bm1hcHBlZCBhbmQgYSBzd2FwIGVudHJ5IGlzIGluc3RhbGxlZCB0byByZXBsYWNlXFxuLS1cXG5tbS9zd2FwLmgtMjI5LSAqXFxubW0vc3dhcC5oOjIzMDogKiBmb2xpb19wdXRfc3dhcCgpOiBkb2VzIHRoZSBvcHBvc2l0ZSB0aGluZyBvZiBmb2xpb19kdXBfc3dhcCgpLlxcbm1tL3N3YXAuaC0yMzEtICovXFxubW0vc3dhcC5oPTIzMj1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmg6MjMzOmludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSk7XFxubW0vc3dhcC5oLTIzNC12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzdWJwYWdlKTtcXG4tLVxcbm1tL3N3YXAuaD0zNzA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcC5oLTM3NC1cXG5tbS9zd2FwLmg6Mzc1OnN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2R1cF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL3N3YXAuaC0zNzYte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNzM0PWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3ODEtLyoqXFxubW0vc3dhcGZpbGUuYzoxNzgyOiAqIGZvbGlvX2R1cF9zd2FwKCkgLSBJbmNyZWFzZSBzd2FwIGNvdW50IG9mIHN3YXAgZW50cmllcyBvZiBhIGZvbGlvLlxcbm1tL3N3YXBmaWxlLmMtMTc4My0gKiBAZm9saW86IGZvbGlvIHdpdGggc3dhcCBlbnRyaWVzIGJvdW5kZWQuXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3OTctICovXFxubW0vc3dhcGZpbGUuYzoxNzk4OmludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSlcXG5tbS9zd2FwZmlsZS5jLTE3OTkte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xOTkwPWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMDE2LSAqIGdvIGZyb20gbm90LXN3YXBwZWQgdG8gc3dhcHBlZCBiZWNhdXNlIHRoZSBpbml0aWFsIHN3YXAgY291bnQgaW5jcmVtZW50IGNhblxcbm1tL3N3YXBmaWxlLmM6MjAxNzogKiBvbmx5IGJlIGRvbmUgYnkgZm9saW9fZHVwX3N3YXAsIHdoaWNoIGFsc28gbG9ja3MgdGhlIGZvbGlvLiBCdXQgYSBjb25jdXJyZW50XFxubW0vc3dhcGZpbGUuYy0yMDE4LSAqIGRlY3JlYXNlIG9mIHN3YXAgY291bnQgaXMgcG9zc2libGUgdGhyb3VnaCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCwgc28gdGhpc1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNzE5PXZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzc0Ni0gKiBvd25lci4gZS5nLiwgbG9ja2luZyB0aGUgUFRMIG9mIGEgUFRFIGNvbnRhaW5pbmcgdGhlIGVudHJ5IGJlaW5nIGluY3JlYXNlZC5cXG5tbS9zd2FwZmlsZS5jOjM3NDc6ICogQWxzbyB0aGUgc3dhcCBlbnRyeSBtdXN0IGhhdmUgYSBjb3VudCBcXHUwMDNlPSAxLiBPdGhlcndpc2UgZm9saW9fZHVwX3N3YXAgc2hvdWxkXFxubW0vc3dhcGZpbGUuYy0zNzQ4LSAqIGJlIHVzZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQwOjE3LjUzMjQ4OTg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODM4MjIwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gRHVwbGljYXRlIFN3YXBzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGR1cGxpY2F0ZSBlbnRyaWVzIGFuZCBzd2FwcyBhcmUgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBgZm9saW9fZHVwX3N3YXBgIGlzIGludm9rZWQgZnJvbSB0d28gcHJpbWFyeSBsb2NhdGlvbnM6IGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHNobWVtX3dyaXRlb3V0YC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdoZW4gd2UncmUgdW5tYXBwaW5nIG9yIHdyaXRpbmcgYmFjayBzaGFyZWQgbWVtb3J5LCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWxseSBkdXBsaWNhdGVkIHN3YXAgZW50cmllcy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuLi4gSSAqdGhpbmsqIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgIGdldHMgY2FsbGVkIGZyb20gYGNvcHlfcHJlc2VudF9wdGVgLCBidXQgSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGFjY3VyYXRlLiBHb29kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrcywgdG8gZW5zdXJlIEkgaGF2ZW4ndCBmb3Jnb3R0ZW4gdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQwOjIxLjAxNjMxNTUwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MTg2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9kdXBfZW50cnlfZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1Mi1cXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xcbm1tL21lbW9yeS5jOjk1MzpcXHRcXHRpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSBcXHUwMDNjIDApXFxubW0vbWVtb3J5LmMtOTU0LVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNzE5PXZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzczNi0vKlxcbm1tL3N3YXBmaWxlLmM6MzczNzogKiBzd2FwX2R1cF9lbnRyeV9kaXJlY3QoKSAtIEluY3JlYXNlIHJlZmVyZW5jZSBjb3VudCBvZiBhIHN3YXAgZW50cnkgYnkgb25lLlxcbm1tL3N3YXBmaWxlLmMtMzczOC0gKiBAZW50cnk6IGZpcnN0IHN3YXAgZW50cnkgZnJvbSB3aGljaCB3ZSB3YW50IHRvIGluY3JlYXNlIHRoZSByZWZjb3VudC5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzc0OS0gKi9cXG5tbS9zd2FwZmlsZS5jOjM3NTA6aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSlcXG5tbS9zd2FwZmlsZS5jLTM3NTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyMS4wOTg3NDEzMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3Njg1MjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipGb2N1c2luZyBpbiBvbiB0aGUgU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IGNvbm5lY3Rpb24gbWFrZXMgbWUgdGhpbmsgdGhhdCBgc3lzX3N3YXBvbmAsIGBmb2xpb19kdXBfc3dhcGAsIGFuZCwgb2YgY291cnNlLCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YCBpdHNlbGYgYXJlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzd2FwIHNwYWNlLiBUbyBkaWcgZGVlcGVyLCBJIHRoaW5rIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgc3lzX3N3YXBvbmAsIHdoaWNoIEkgYmVsaWV2ZSBpcyBkZWZpbmVkIGluIGBtbS9zd2FwZmlsZS5jYC4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyNC45NzU1OTY5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTQyNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FMlxcXFwoc3dhcG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0zNDA3PXN0YXRpYyBpbnQgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzQ4Ni1cXG5tbS9zd2FwZmlsZS5jOjM0ODc6U1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcXG5tbS9zd2FwZmlsZS5jLTM0ODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyNS4xMTExNDg3NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjYxMDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFN3YXBvbiBTeXN0ZW0gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgc3lzX3N3YXBvbmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIG5lZWRpbmcgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gUmlnaHQsIGBDT05GSUdfU1dBUGAgc2VlbXMgdG8gYmUgdGhlIGtleSBmb3IgYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gTmV4dCBzdGVwLCBJJ2xsIGdvIHJpZ2h0IGZvciBgbW0vTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWxsIGJ1aWx0IGFuZCBsaW5rZWQgdG9nZXRoZXIuIFRoaXMgaXMgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIG1vcmUgYnJlYWRjcnVtYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyOC44NzM3NjM1ODVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjM1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBmaWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDA6MjguOTY0MDA0ODAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDU5MzQ0MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19TV0FQYCwgZGVmaW5pdGVseSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBIYW5nIG9uLCBJIHNlZSBgQ09ORklHX01FTUNHYCBtZW50aW9uZWQgdG9vIGluIHRoZSBjb2RlIGJsb2NrOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX01FTUNHXG5cdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG5cdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbmBgYFxuXG5UaGUgcGF0Y2gganVzdCBzaGlmdHMgYSBsaW5lIG9mIGNvZGUgKGByY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtgKSBiZWxvdyB0aGF0IGAjaWZkZWZgIGJsb2NrLiAgU28gaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpc24ndCAqc3RyaWN0bHkqIHJlcXVpcmVkIGZvciB0aGUgYnVnLCBidXQgaXQgY291bGQgZGVmaW5pdGVseSBiZSByZWxhdGVkIHNvbWVob3cuIEknbGwgaW5jbHVkZSBib3RoIGBTV0FQYCBhbmQgYE1FTUNHYCBpbiBteSBhbmFseXNpcyB0byBiZSBzYWZlLlxuXG5Ob3csIHRoZSBzeXNjYWxsIG5hbWUgaXMgYHN5c19zd2Fwb25gLCByaWdodD8gVGhvdWdoIHNvbWV0aW1lcyB0aGV5IHVzZSBgX194NjRfc3lzX3N3YXBvbmAgb3IgYHN3YXBvbmAuIEhtbSwgaXQncyBnZW5lcmFsbHkgYmVzdCB0byB1c2UgdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGZvciBGb2N1c1N5bWJvbHMsIGJ1dCBmb3Igc3l6a2FsbGVyLCBgc3lzX3N3YXBvbmAgaXMgdGhlIHN0YW5kYXJkIG5hbWUgZm9yIHRoZSBlbnRyeSBwb2ludC4gT2theSwgSSByZWNhbGwgbm93OiBgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgLi4uKWAgZ2VuZXJhdGVzIGJvdGggYHN5c19zd2Fwb25gIGFuZCBgX194NjRfc3lzX3N3YXBvbmAuIEknbGwganVzdCBnbyB3aXRoIGBzeXNfc3dhcG9uYC4gVGhhdCdzIHRoZSBtb3N0IGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbnRyeSBwb2ludCwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuXG5cblRpbWUgdG8gcmV2aXNpdCBzb21lIHJlbGF0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHN1cmUuIExldCdzIGxvb2sgYXQgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgYW5kIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAsIHRob3NlIGFyZSBgc3RhdGljYC4gU28gSSBjYW4gaWdub3JlIHRoZW0uIGBmb2xpb19kdXBfc3dhcGAgYW5kIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgIGFyZW4ndCBzdGF0aWMgdGhvdWdoLiBBbmQgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgaXMuIEFscmlnaHQsIG1vdmluZyBvbiB0byBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjA3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQxOjEyLjAyMzM1NDE2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MjU5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTQ2MT1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTQ5Ni1cXG5tbS9zd2FwZmlsZS5jOjE0OTc6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG5tbS9zd2FwZmlsZS5jLTE0OTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MToxMi4wODgxOTE5MDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwODI4NjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCdzIFNjb3BlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLiBUaGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHRocm93cyB1cCBhIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi4gSWYgaXQncyBub3Qgc3RhdGljLCBpdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLCBtYXliZSBldmVuIGZyb20gY29tcGxldGVseSBkaWZmZXJlbnQgbW9kdWxlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCByb2xlIGluIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBncmFwaCBhbmQgZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIElzIGl0IHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG9yIGRvZXMgaXQgaGF2ZSBleHRlcm5hbCBjYWxsZXJzPyBUaGlzIHdpbGwgaW5mbHVlbmNlIG15IGFuYWx5c2lzIG9mIGl0cyBzYWZldHksIHRoZSBwb3RlbnRpYWwgZm9yIHNpZGUgZWZmZWN0cywgYW5kIGhvdyBhbnkgY2hhbmdlcyBtaWdodCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQxOjIwLjQ5NjQ4MjIxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzODU4NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTIyND1jb3B5X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTEzNTEtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFlbnRyeS52YWwpO1xcbm1tL21lbW9yeS5jOjEzNTI6XFx0XFx0aWYgKHN3YXBfcmV0cnlfdGFibGVfYWxsb2MoZW50cnksIEdGUF9LRVJORUwpIFxcdTAwM2MgMCkge1xcbm1tL21lbW9yeS5jLTEzNTMtXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbm1tL3N3YXAuaD0yMDY9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9zd2FwLmgtMjEwLVxcbm1tL3N3YXAuaDoyMTE6ZXh0ZXJuIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApO1xcbm1tL3N3YXAuaC0yMTItXFxuLS1cXG5tbS9zd2FwLmg9NDMwPXN0YXRpYyBpbmxpbmUgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXAuaC00MzUtXFxubW0vc3dhcC5oOjQzNjpzdGF0aWMgaW5saW5lIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxubW0vc3dhcC5oLTQzNy17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE0NjE9c3RhdGljIGludCBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE0OTYtXFxubW0vc3dhcGZpbGUuYzoxNDk3OmludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxubW0vc3dhcGZpbGUuYy0xNDk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDE6MjAuNTU5ODc3MzQ0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODYzMjI1Njg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTd2FwLVJlbGF0ZWQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBpZGVudGlmeSBzdWl0YWJsZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBwYXRoIG9mIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBiYWNrIHRvIGBjb3B5X3B0ZV9yYW5nZWAgaW4gYG1tL21lbW9yeS5jYCwgY29uZmlybWluZyBpdHMgcmVsZXZhbmNlLiBUaGVyZWZvcmUsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpcyBhIHNvbGlkIGNhbmRpZGF0ZSB0byBpbmNsdWRlLlxuXG5JJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgZm9jdXMgc3ltYm9sczogYHN5c19zd2Fwb25gLCBgZm9saW9fZHVwX3N3YXBgLCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YCwgYW5kIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYC4gSSBqdXN0IHZlcmlmaWVkIHRoYXQgYHN5c19zd2Fwb25gIGlzIHRoZSBjb3JyZWN0IG5hbWUsIGdpdmVuIHRoYXQgc3l6a2FsbGVyIGdlbmVyYWxseSBmdXp6ZXMgc3lzY2FsbHMgZGlyZWN0bHkuXG5cbk5vdywgbGV0J3MgZGlzc2VjdCB0aGUgcGF0Y2gncyBpbXBhY3QgZnVydGhlci4gSXQgbG9va3MgbGlrZSBpdCBtb2RpZmllcyB0aGVzZSBrZXkgZnVuY3Rpb25zIGFuZCB0aGVpciBjYWxsIHBhdGhzOlxuXG4xLiAgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgKHBhcnQgb2YgcmVjbGFpbSksIGxlYWRpbmcgdG8gYHNocmlua19mb2xpb19saXN0YCAocGFnZSByZWNsYWltKTogQ2FsbGVkIGZyb20gYSBwYXRoIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC1cdTAwM2UgYGlzb2xhdGVfbG9ja19jbHVzdGVyYCAtXHUwMDNlIGBhbGxvY19zd2FwX3NjYW5fbGlzdGAgLVx1MDAzZSBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCAtXHUwMDNlIGBnZXRfc3dhcF9wYWdlc2AgLVx1MDAzZSBgYWRkX3RvX3N3YXBgIC1cdTAwM2UgYHNocmlua19mb2xpb19saXN0YC5cbjIuICBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIChyZWxhdGVkIHRvIHN3YXBwaW5nIG91dCk6IGNhbGxlZCBieSBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgd2hpY2ggY29ubmVjdHMgdG8gYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAuXG4zLiAgYHN5c19zd2Fwb25gLlxuXG5TbyB0aGUgaW5pdGlhbCBsaXN0IGhvbGRzLCBhbmQgSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoZXNlIGNob2ljZXMsIGFzIHRoZXkgYXJlIHNwZWNpZmljIHRvIHN3YXAgb3BlcmF0aW9ucy4gSSBjb25zaWRlcmVkIGBnZXRfc3dhcF9wYWdlc2Agb3IgYGFkZF90b19zd2FwYCBhcyB3ZWxsLCBidXQgdGhvc2UgYXJlIGhvdCBwYXRocyBhbmQgSSBwcmVmZXIgdG8gYXZvaWQgZ2VuZXJpYyBob3QgcGF0aHMgd2hlbiBJIGNhbi4gV2hpbGUgYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgbWlnaHQgZ2V0IHNvbWUgdXNlIG9uIGhvdCBwYXRocyBkdWUgdG8gZm9yay9tcmVtYXAvZXRjLCB0aG9zZSBhcmUgc3dhcC1zcGVjaWZpYy5cblxuSSB0aGVuIGRpZCBhIGRlZXBlciBkaXZlIGFuZCBsb29rZWQgYXQgdGhlIGNhbGxlcnMgb2YgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuIGBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnlgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBhcmUgc3RhdGljOyBgZm9saW9fZHVwX3N3YXBgIGFuZCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YCBhcmUgbm90LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIGNoZWNrZWQgdGhlIGNhbGxlcnMgb2YgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAuIEl0IGFsc28gaXMgY2FsbGVkIGZyb20gYHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdGAgd2hpY2ggaW4gdHVybiBjYWxscyBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHN5c19zd2Fwb25gLiBUaGF0IG1lYW5zIGBzeXNfc3dhcG9uYCBzdWZmaWNpZW50bHkgY292ZXJzIHRoYXQgY29kZSBwYXRoLlxuXG5GaW5hbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYFNXQVBgIGFuZCBgTUVNQ0dgLiBOb3csIEknbSByZWFkeSB0byBjcmFmdCB0aGUgc2V0LXJlc3VsdHMgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzcsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjA5LjE5MjE0MDI2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjY2NDcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9uXCIsXG4gICAgXCJmb2xpb19kdXBfc3dhcFwiLFxuICAgIFwic3dhcF9kdXBfZW50cnlfZGlyZWN0XCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb25cIixcbiAgICBcImZvbGlvX2R1cF9zd2FwXCIsXG4gICAgXCJzd2FwX2R1cF9lbnRyeV9kaXJlY3RcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHN3YXBmaWxlIGxvZ2ljLCBpbmNsdWRpbmcgc3dhcCBjbHVzdGVyIHRhYmxlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBkdXBsaWNhdGlvbi4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiBzeXNfc3dhcG9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MzowOS4zMDg4MjIyNTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzI3ODI2ODQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjA5LjMwOTU4NTg4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODMyNzc0OTgwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XFxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXFx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVxcdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxcbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXFxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXFxuXFxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZlODExMjYxNjljZTBkYmY1OWIzNWVlNjE2NjM1NmMwZWU4NGQ2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDEyOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDYxNWQ5MDg2NzExMTMuLmZmMWIxZmMzNjRiOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtNDY2LDggKzQ2Niw2IEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4tXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbkBAIC00ODcsNiArNDg1LDEyIEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gI2VuZGlmXG4rXG4rXHQvKlxuK1x0ICogTWFrZSB0YWJsZXMgdmlzaWJsZSB0byBjbHVzdGVyX2lzX3VzYWJsZSgpIGFmdGVyIGV2ZXJ5dGhpbmcgaXNcbitcdCAqIHJlYWR5LlxuK1x0ICovXG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNTExLDIwICsxNTE1LDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gc3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcbiBcbiBcdGlmICghY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpKyspIHtcbiBcdFx0aWYgKGNpLVx1MDAzZWV4dGVuZF90YWJsZVtpXSlcbi1cdFx0XHRjYW5fZnJlZSA9IGZhbHNlO1xuK1x0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChjYW5fZnJlZSkge1xuLVx0XHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuLVx0XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuLVx0fVxuK1x0a2ZyZWUoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKTtcbitcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4gfVxuIFxuIC8qIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIG9uZSBzbG90LCB3aXRob3V0IGZyZWVpbmcgaXQgKi9cbkBAIC0xNzE2LDcgKzE3MTcsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gZmFpbGVkOlxuIFx0d2hpbGUgKGNpX29mZi0tIFx1MDAzZSBjaV9zdGFydClcbiBcdFx0X19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpO1xuLVx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0zNTg4LDExICszNTg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcbiBcdG1heHBhZ2VzID0gc2ktXHUwMDNlbWF4O1xuIFxuLVx0LyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqL1xuLVx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuLVxuIFx0aWYgKHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cdTAwM2ViZGV2KSlcbiBcdFx0c2ktXHUwMDNlZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7XG4gXG5AQCAtMzYwNiw2ICszNjAxLDE0IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG4gXHRcdGluY2VkX25yX3JvdGF0ZV9zd2FwID0gdHJ1ZTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbitcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cbitcdCAqL1xuK1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuK1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MzowOS4zMDk1OTM4OTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0NjY3MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXBmaWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vc3dhcGZpbGUuY2AuIExldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCBhdCBtZSBhcyBhIHBvdGVudGlhbCBpc3N1ZSwgZXNwZWNpYWxseSByZWdhcmRpbmcgbWVtb3J5IHNhZmV0eS5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZW9yZGVyZWQgdGhpbmdzIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgbW92ZWQgdGhlIGByY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtgIGNhbGwgKmFmdGVyKiB0aGUgYG1lbWNnX3RhYmxlYCBhbGxvY2F0aW9uLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSBndWVzc2luZyB0aGV5J3JlIGRvaW5nIHRoaXMgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC4gU29tZW9uZSBtaWdodCBoYXZlIGJlZW4gY2hlY2tpbmcgYGNpLVx1MDAzZXRhYmxlYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCB3YXMgYWxsb2NhdGVkLCBsZWFkaW5nIHRvIGVpdGhlciBhIE5VTEwgZGVyZWZlcmVuY2Ugb3IsIHdvcnNlLCBhY2Nlc3MgdG8gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIGBjaWAgYWxsb2NhdGVkIHdpdGggYGt2Y2FsbG9jYCBvciBzaW1pbGFyP1xuXG5OZXh0LCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIHNlZW1zIHRvIGJlIHNpbXBsaWZpZWQsIHdoaWNoIGlzIGdvb2QuIFRoZXkncmUgcmV0dXJuaW5nIGVhcmx5IGZyb20gdGhlIGxvb3AgaWYgYGNpLVx1MDAzZWV4dGVuZF90YWJsZVtpXWAgaXMgYWxyZWFkeSBudWxsIGFuZCByZW1vdmluZyB0aGUgYGNhbl9mcmVlYCB2YXJpYWJsZS4gVGhpcyBzb3VuZHMgbGlrZSBhIGNsZWFudXAuXG5cblRoZW4sIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGhhcyBhIG1pbm9yIGNoYW5nZTsgdGhlIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7YCBjYWxsIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYGZhaWxlZDpgIHBhdGguIFByb2JhYmx5IG1ha2VzIHRoZSBjb2RlIG1vcmUgZWZmaWNpZW50IGFuZCBzYWZlLlxuXG5GaW5hbGx5LCBpbiB0aGUgYHN3YXBvbmAgc3lzY2FsbCwgdGhleSdyZSBtb3ZpbmcgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTtgIGFmdGVyIHRoZSBmbGFncyBgU1dQX1NUQUJMRV9XUklURVNgIGFuZCBgU1dQX1NPTElEU1RBVEVgIGFyZSBzZXQuIE1ha2VzIHNlbnNlLiBUaGV5J3JlIHByb2JhYmx5IHRyeWluZyB0byBlbnN1cmUgdGhhdCB0aGUgc3dhcCBjbHVzdGVyIGluZm9ybWF0aW9uIGlzIHNldCB1cCBjb25zaXN0ZW50bHkgYWZ0ZXIgc2V0dGluZyB0aGUgY3JpdGljYWwgZmxhZ3MuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3aXRoIHRoZXNlIGNoYW5nZXM/IFRoZSBiaWdnZXN0IG9uZSBsb29rcyBsaWtlIHRoZSByZW9yZGVyaW5nIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBCeSBtb3ZpbmcgdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwsIHRoZXkgKnNob3VsZCogYmUgcHJldmVudGluZyBhIHJhY2Ugd2hlcmUgYW5vdGhlciB0aHJlYWQgbWlnaHQgc2VlIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGBjaWAuIElmIGBjaS1cdTAwM2VtZW1jZ190YWJsZWAgd2VyZSBhY2Nlc3NlZCBiZWZvcmUgYWxsb2NhdGlvbiwgaXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAod2hpY2ggS0FTQU4gb3Igc3RhbmRhcmQgb29wcyBzaG91bGQgY2F0Y2gpIG9yIGFuIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGNpYCBpcyBhbGxvY2F0ZWQuIElmIGl0J3MgemVyby1hbGxvY2F0ZWQsIGFuIHVuaW5pdGlhbGl6ZWQgYWNjZXNzIHNob3VsZCByZXNvbHZlIHRvIHplcm8gYW5kIHRoZXJlZm9yZSBiZSBzYWZlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgY2lgIGlzLCBpbiBmYWN0LCB6ZXJvLWluaXRpYWxpemVkLiBJIHNob3VsZCBjaGVjayB0aGUgYWxsb2NhdGlvbiBvZiBgc3dhcF9jbHVzdGVyX2luZm9gIGFuZCBhbHNvIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQncyBoYXBwZW5pbmcuIElmIGl0IGlzLCB0aGVuIHRoZSByaXNrIHNob3VsZCBiZSBtaW5pbWFsLiBPdGhlcndpc2UsIEkgbWlnaHQgYmUgbG9va2luZyBhdCBzb21lIHBvdGVudGlhbGx5IG5hc3R5IHdpbGQgcG9pbnRlciBiZWhhdmlvciwgYW5kIHRoZW4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjE3LjA1NjI3MzYzNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MTU3NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MzM0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3N3YXBfaGVhZGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzQwNi1cXG5tbS9zd2FwZmlsZS5jOjM0MDc6c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMzQwOC1cXHRcXHRcXHRcXHQgICAgdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyLFxcbi0tXFxubW0vc3dhcGZpbGUuYz0zNDg3PVNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM2MDUtXFx0ICogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyBhZnRlciBTV1BfIGZsYWdzIGhhbmRsaW5nIGFzXFxubW0vc3dhcGZpbGUuYzozNjA2OlxcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cXG5tbS9zd2FwZmlsZS5jLTM2MDctXFx0ICovXFxubW0vc3dhcGZpbGUuYzozNjA4OlxcdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xcbm1tL3N3YXBmaWxlLmMtMzYwOS1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjE3LjI3MTQ1NjIyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ2OTM1ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gc3dhcGZpbGUuYzogc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL3N3YXBmaWxlLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgZnVuY3Rpb24uIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgb3IgY29uZmlndXJpbmcgc29tZSBhc3BlY3Qgb2Ygc3dhcCBzcGFjZSBjbHVzdGVyaW5nIOKAkyBhbiBpbnRlcmVzdGluZyB0ZWNobmlxdWUsIGFuZCBvbmUgdGhhdCBpcyBwcm9iYWJseSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gSSB3b25kZXIgaWYgaXQncyBpbnZvbHZlZCBpbiBvcHRpbWl6aW5nIHN3YXAgSS9PIGJ5IGdyb3VwaW5nIHJlbGF0ZWQgcGFnZXMgdG9nZXRoZXIgb24gZGlzaywgb3IgaWYgaXQgaGFzIGEgZGlmZmVyZW50IHB1cnBvc2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBvdmVyYWxsIHB1cnBvc2UgYW5kIGRlc2lnbiBjaG9pY2VzIG9mIHRoZSBmdW5jdGlvbiB3aXRoIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDQ6MTYuNzQwODE4NTU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MDc6XFx0c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbjM0MDg6XFx0XFx0XFx0XFx0XFx0ICAgIHVuaW9uIHN3YXBfaGVhZGVyICpzd2FwX2hlYWRlcixcXG4zNDA5OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG1heHBhZ2VzKVxcbjM0MTA6XFx0e1xcbjM0MTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9jbHVzdGVycyA9IERJVl9ST1VORF9VUChtYXhwYWdlcywgU1dBUEZJTEVfQ0xVU1RFUik7XFxuMzQxMjpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbztcXG4zNDEzOlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbjM0MTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbjM0MTU6XFx0XFxuMzQxNjpcXHRcXHRjbHVzdGVyX2luZm8gPSBrdnphbGxvY19vYmpzKCpjbHVzdGVyX2luZm8sIG5yX2NsdXN0ZXJzKTtcXG4zNDE3OlxcdFxcdGlmICghY2x1c3Rlcl9pbmZvKVxcbjM0MTg6XFx0XFx0XFx0Z290byBlcnI7XFxuMzQxOTpcXHRcXG4zNDIwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jbHVzdGVyczsgaSsrKVxcbjM0MjE6XFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmNsdXN0ZXJfaW5mb1tpXS5sb2NrKTtcXG4zNDIyOlxcdFxcbjM0MjM6XFx0XFx0aWYgKCEoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NPTElEU1RBVEUpKSB7XFxuMzQyNDpcXHRcXHRcXHRzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXIgPSBrbWFsbG9jX29iaigqc2ktXFx1MDAzZWdsb2JhbF9jbHVzdGVyKTtcXG4zNDI1OlxcdFxcdFxcdGlmICghc2ktXFx1MDAzZWdsb2JhbF9jbHVzdGVyKVxcbjM0MjY6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMzQyNzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgU1dBUF9OUl9PUkRFUlM7IGkrKylcXG4zNDI4OlxcdFxcdFxcdFxcdHNpLVxcdTAwM2VnbG9iYWxfY2x1c3Rlci1cXHUwMDNlbmV4dFtpXSA9IFNXQVBfRU5UUllfSU5WQUxJRDtcXG4zNDI5OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJfbG9jayk7XFxuMzQzMDpcXHRcXHR9XFxuMzQzMTpcXHRcXG4zNDMyOlxcdFxcdC8qXFxuMzQzMzpcXHRcXHQgKiBNYXJrIHVudXNhYmxlIHBhZ2VzIChoZWFkZXIgcGFnZSwgYmFkIHBhZ2VzLCBhbmQgdGhlIEVPRiBwYXJ0IG9mXFxuMzQzNDpcXHRcXHQgKiB0aGUgbGFzdCBjbHVzdGVyKSBhcyB1bmF2YWlsYWJsZS4gVGhlIGNsdXN0ZXJzIGFyZW4ndCBtYXJrZWQgZnJlZVxcbjM0MzU6XFx0XFx0ICogeWV0LCBzbyBubyBsaXN0IG9wZXJhdGlvbnMgYXJlIGludm9sdmVkIHlldC5cXG4zNDM2OlxcdFxcdCAqL1xcbjM0Mzc6XFx0XFx0ZXJyID0gc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHNpLCBjbHVzdGVyX2luZm8sIDAsIGZhbHNlKTtcXG4zNDM4OlxcdFxcdGlmIChlcnIpXFxuMzQzOTpcXHRcXHRcXHRnb3RvIGVycjtcXG4zNDQwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzd2FwX2hlYWRlci1cXHUwMDNlaW5mby5ucl9iYWRwYWdlczsgaSsrKSB7XFxuMzQ0MTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGFnZV9uciA9IHN3YXBfaGVhZGVyLVxcdTAwM2VpbmZvLmJhZHBhZ2VzW2ldO1xcbjM0NDI6XFx0XFxuMzQ0MzpcXHRcXHRcXHRpZiAoIXBhZ2VfbnIgfHwgcGFnZV9uciBcXHUwMDNlIHN3YXBfaGVhZGVyLVxcdTAwM2VpbmZvLmxhc3RfcGFnZSkge1xcbjM0NDQ6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQmFkIHNsb3Qgb2Zmc2V0IGlzIG91dCBvZiBib3JkZXI6ICVkIChsYXN0X3BhZ2U6ICVkKVxcXFxuXFxcIixcXG4zNDQ1OlxcdFxcdFxcdFxcdFxcdHBhZ2VfbnIsIHN3YXBfaGVhZGVyLVxcdTAwM2VpbmZvLmxhc3RfcGFnZSk7XFxuMzQ0NjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM0NDc6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMzQ0ODpcXHRcXHRcXHR9XFxuMzQ0OTpcXHRcXHRcXHRlcnIgPSBzd2FwX2NsdXN0ZXJfc2V0dXBfYmFkX3Nsb3Qoc2ksIGNsdXN0ZXJfaW5mbywgcGFnZV9uciwgZmFsc2UpO1xcbjM0NTA6XFx0XFx0XFx0aWYgKGVycilcXG4zNDUxOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjM0NTI6XFx0XFx0fVxcbjM0NTM6XFx0XFx0Zm9yIChpID0gbWF4cGFnZXM7IGkgXFx1MDAzYyByb3VuZF91cChtYXhwYWdlcywgU1dBUEZJTEVfQ0xVU1RFUik7IGkrKykge1xcbjM0NTQ6XFx0XFx0XFx0ZXJyID0gc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHNpLCBjbHVzdGVyX2luZm8sIGksIHRydWUpO1xcbjM0NTU6XFx0XFx0XFx0aWYgKGVycilcXG4zNDU2OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0NDoxNi43NDExMjk2NjdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2ODg0OTAzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgU3dhcCBDbHVzdGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IG5vbmUgb2YgdGhlc2UgZGlyZWN0bHkgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggaXMgdGhlIGtleSBjb25jZXJuLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gdmlhIGBrdnphbGxvY19vYmpzYCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIGdvb2QuXG5cblRoZSBmaXJzdCBjcml0aWNhbCBhZGp1c3RtZW50IGludm9sdmVzIHRoZSBwbGFjZW1lbnQgb2YgYHJjdV9hc3NpZ25fcG9pbnRlcihjaS1cdTAwM2V0YWJsZSwgdGFibGUpO2AuIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSByZWFzb24gZm9yIG1vdmluZyB0aGlzIGlzIHRvIHByZXZlbnQgYGNsdXN0ZXJfaXNfdXNhYmxlKClgIGZyb20gZXJyb25lb3VzbHkgZGV0ZWN0aW5nIGBjaS1cdTAwM2V0YWJsZWAgYXMgdmFsaWQgYmVmb3JlIGBjaS1cdTAwM2VtZW1jZ190YWJsZWAgaXMgYWxsb2NhdGVkLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgY2ktXHUwMDNlbWVtY2dfdGFibGVgLiBNYWtlcyBzZW5zZSwgd2UncmUgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyaW5nIHRoYXQgdGhlIHRhYmxlIHBvaW50ZXIgaXMgb25seSBjb25zaWRlcmVkIHZhbGlkICphZnRlciogZXZlcnl0aGluZyBpcyBzZXQgdXAuXG5cblRoZSBzZWNvbmQgY2hhbmdlIGZvY3VzZXMgb24gc2hpZnRpbmcgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgYWZ0ZXIgc2V0dGluZyB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnLiBUaGUgb3JpZ2luYWwgY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFuIGFsbG9jYXRpb24gaXNzdWUuIElmIHdlIGNhbGxlZCBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCAqYmVmb3JlKiB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIHdhcyBzZXQsIHdlIG1pZ2h0IGFsbG9jYXRlIGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgd2hlbiBpdOKAmXMgbm90IGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBlaXRoZXIgYSBtZW1vcnkgbGVhaywgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgbWlzY29uZmlndXJhdGlvbi4gSXQncyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBzdGlsbCBhIGxvZ2ljIGZsYXcgYW5kIGEgcG90ZW50aWFsIHJlc291cmNlIHdhc3RlLlxuXG5UaGUgY2hhbmdlcyBpbiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFwcGVhciB0byBiZSBzaW1wbGlmaWNhdGlvbnMgYW5kIGFyZSBsaWtlbHkgbm90IHNpZ25pZmljYW50LlxuXG5Ib3dldmVyLCB0aGUgcmVtb3ZhbCBvZiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO2AgaW4gdGhlIGBmYWlsZWQ6YCBwYXRoIG9mIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGNhdWdodCBteSBleWUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgYSBsb2dpYyBlcnJvciBpbiBob3cgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhhdCBzcGVjaWZpYyBlcnJvciBwYXRoLiBJdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBzZXF1ZW5jZSBpbiB0aGF0IGFyZWEsIGJ1dCBteSBodW5jaCBpcyBpdCdzIGEgYnVnIGZpeC5cblxuT3ZlcmFsbCwgaXQgc2VlbXMgdGhlIGNvcmUgaXNzdWVzIGFyZTpcblxuKiAgIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByb3RlY3Rpb24sIHdpdGggdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIG1vdmVtZW50XG4qICAgQSByZXNvdXJjZSBsZWFrIHByZXZlbnRpb24vY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYyB3aXRoIHRoZSBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCBjaGFuZ2VcbiogICBBIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBmaXggaW4gYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmBcblxuVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgbGV0J3MgdmVyaWZ5IHdoYXQgYHRhYmxlYCBhbmQgYG1lbWNnX3RhYmxlYCBhcmUsIGJ5IGV4YW1pbmluZyBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBhbmQgaG93IHRob3NlIGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQ0OjU0LjQyOTYzMjIyOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcGZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRpZiAoU1dQX1RBQkxFX1VTRV9QQUdFKSB7XFxuIDQ2MDpcXHRcXHRcXHRmb2xpbyA9IGZvbGlvX2FsbG9jKGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xcbiA0NjE6XFx0XFx0XFx0aWYgKGZvbGlvKVxcbiA0NjI6XFx0XFx0XFx0XFx0dGFibGUgPSBmb2xpb19hZGRyZXNzKGZvbGlvKTtcXG4gNDYzOlxcdFxcdH0gZWxzZSB7XFxuIDQ2NDpcXHRcXHRcXHR0YWJsZSA9IGttZW1fY2FjaGVfemFsbG9jKHN3YXBfdGFibGVfY2FjaGVwLCBnZnApO1xcbiA0NjU6XFx0XFx0fVxcbiA0NjY6XFx0XFx0aWYgKCF0YWJsZSlcXG4gNDY3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDQ3MDpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbiA0NzE6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVxcdTAwM2VtZW1jZ190YWJsZSk7XFxuIDQ3MjpcXHRcXHRcXHRjaS1cXHUwMDNlbWVtY2dfdGFibGUgPSBremFsbG9jX29iaigqY2ktXFx1MDAzZW1lbWNnX3RhYmxlLCBnZnApO1xcbiA0NzM6XFx0XFx0XFx0aWYgKCFjaS1cXHUwMDNlbWVtY2dfdGFibGUpIHtcXG4gNDc0OlxcdFxcdFxcdFxcdHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKGNpKTtcXG4gNDc1OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0NzY6XFx0XFx0XFx0fVxcbiA0Nzc6XFx0XFx0fVxcbiA0Nzg6XFx0I2VuZGlmXFxuIDQ3OTpcXHRcXG4gNDgwOlxcdCNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcXG4gNDgxOlxcdFxcdFZNX1dBUk5fT05fT05DRShjaS1cXHUwMDNlemVyb19iaXRtYXApO1xcbiA0ODI6XFx0XFx0Y2ktXFx1MDAzZXplcm9fYml0bWFwID0gYml0bWFwX3phbGxvYyhTV0FQRklMRV9DTFVTVEVSLCBnZnApO1xcbiA0ODM6XFx0XFx0aWYgKCFjaS1cXHUwMDNlemVyb19iaXRtYXApIHtcXG4gNDg0OlxcdFxcdFxcdHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKGNpKTtcXG4gNDg1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0ODY6XFx0XFx0fVxcbiA0ODc6XFx0I2VuZGlmXFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdC8qXFxuIDQ5MDpcXHRcXHQgKiBNYWtlIHRhYmxlcyB2aXNpYmxlIHRvIGNsdXN0ZXJfaXNfdXNhYmxlKCkgYWZ0ZXIgZXZlcnl0aGluZyBpc1xcbiA0OTE6XFx0XFx0ICogcmVhZHkuXFxuIDQ5MjpcXHRcXHQgKi9cXG4gNDkzOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjaS1cXHUwMDNldGFibGUsIHRhYmxlKTtcXG4gNDk0OlxcdFxcdHJldHVybiAwO1xcbiA0OTU6XFx0fVxcbiA0OTY6XFx0XFxuIDQ5NzpcXHQvKlxcbiA0OTg6XFx0ICogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBub3RoaW5nIGxlYWtlZCwgYW5kIHRoZSBzcGVjaWZpZWQgcmFuZ2UgaXMgZW1wdHkuXFxuIDQ5OTpcXHQgKiBPbmUgc3BlY2lhbCBjYXNlIGlzIHRoYXQgYmFkIHNsb3RzIGNhbid0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXFxuIDUwMDpcXHQgKiBiYWQgc2xvdHMgZm9yIHN3YXBvZmYsIGFuZCBub24tc3dhcG9mZiBwYXRoIG11c3QgbmV2ZXIgZnJlZSBiYWQgc2xvdHMuXFxuIDUwMTpcXHQgKi9cXG4gNTAyOlxcdHN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gNTAzOlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBjaV9vZmYsIHVuc2lnbmVkIGludCBucixcXG4gNTA0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgc3dhcG9mZilcXG4gNTA1OlxcdHtcXG4gNTA2OlxcdFxcdHVuc2lnbmVkIGludCBjaV9lbmQgPSBjaV9vZmYgKyBucjtcXG4gNTA3OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0NDo1NC40MzAxOTY4MjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0MTc2NDYzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhlc2UgS2VybmVsIElzc3VlcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGVyZSBhcmUgYSBmZXcgZGlzdGluY3QgbWVtb3J5LXJlbGF0ZWQgcHJvYmxlbXMgaGVyZSwgbm9uZSBvZiB3aGljaCBhcHBlYXIgdG8gYmUgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHJlYWRzLCB3aGljaCBpcyBhIHJlbGllZi5cblxuRmlyc3QsIHRoZXJlJ3MgYSBjb25jdXJyZW5jeSBidWcuIEkgY2FuIHNlZSB0aGF0IGB0YWJsZWAgaXMgemVyby1pbml0aWFsaXplZCB1c2luZyBzb21ldGhpbmcgbGlrZSBgX19HRlBfWkVST2Agb3IgYGttZW1fY2FjaGVfemFsbG9jYCwgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBnZXRzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgYW5kIGBjaS1cdTAwM2V6ZXJvX2JpdG1hcGAgd2l0aCBgYml0bWFwX3phbGxvY2AuIFRoZSBrZXkgaXNzdWUgaXMgdGhlICpvcmRlciogb2YgaW5pdGlhbGl6YXRpb24gYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIGBjaS1cdTAwM2V0YWJsZWAgcG9pbnRlciBpcyBtYWRlIHZpc2libGUgdG8gb3RoZXIgdGhyZWFkcyB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIElmIGFub3RoZXIgdGhyZWFkIGNhbiBzZWUgYGNpLVx1MDAzZXRhYmxlYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBpcyBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCwgaXQncyBnb2luZyB0byBkZXJlZmVyZW5jZSBhIG51bGwgcG9pbnRlciwgYXNzdW1pbmcgdGhhdCBpZiBgY2ktXHUwMDNldGFibGVgIGlzbid0IG51bGwsIHRoZW4gYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIGtlcm5lbCBwYW5pYyBvciBLQVNBTiBmaW5kaW5nIGEgcHJvYmxlbSBiZWNhdXNlIG9mIHRoZSBhdHRlbXB0ZWQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5UaGUgc2Vjb25kIGlzc3VlIGlzIHdpdGhpbiBgc3dhcG9uYCBhbmQgdGhlIGZ1bmN0aW9uIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIGxvZ2ljIGVycm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBiZWZvcmUgdGhlIGBTV1BfU09MSURTVEFURWAgZmxhZyB3YXMgc2V0LiBUaHVzLCB0aGUgY2hlY2sgYHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU09MSURTVEFURWAgd291bGQgYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLiBUaGUgY29uc2VxdWVuY2U/IGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgd291bGQgYWx3YXlzIGJlIGFsbG9jYXRlZCwgZXZlbiBvbiBzb2xpZC1zdGF0ZSBkcml2ZXMgd2hlcmUgaXQgbWlnaHQgbm90IGJlIG5lZWRlZC4gVGhpcyBpcyBub3QgYSBtZW1vcnkgcmVhZCwgYnV0IGEgbWVtb3J5IGxlYWsgYW5kIGdlbmVyYWwgYmVoYXZpb3JhbCBlcnJvci4gSXQgd291bGQgYmUgaW5lZmZpY2llbnQgZm9yIFNTRCBkZXZpY2VzLlxuXG5GaW5hbGx5LCB0aGVyZSdzIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgdG8gY2hlY2sgaWYgYW55IGVsZW1lbnQgd2l0aGluIGBjaS1cdTAwM2VleHRlbmRfdGFibGVgIHdhcyBub24tbnVsbCwgYW5kIHRoZW4gb25seSBmcmVlIHRoZSB3aG9sZSB0YWJsZSBpZiBhbGwgd2VyZSBudWxsLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGlzLCByZXR1cm5pbmcgZWFybHkgaWYgKmFueSogZW50cnkgaXNuJ3QgbnVsbCwgYW5kIG9ubHkgZnJlZWluZyB0aGUgd2hvbGUgaWYgYWxsIGVudHJpZXMgYXJlIG51bGwuIFRoZSBjb25jZXJuIG5vdyBpcyB0aGUgY2FsbCB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpYCBpbiB0aGUgYGZhaWxlZDpgIHBhdGggb2YgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBgZXh0ZW5kX3RhYmxlYCBtaWdodCBzdGlsbCBiZSBpbiB1c2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZnJlZWluZyB0aGUgdGFibGUgcHJlbWF0dXJlbHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIHVzZXMgdGhpcyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIGRldGVybWluZSBpZiBhIGRvdWJsZS1mcmVlIGlzIHBvc3NpYmxlIG9yIGlmIG1lbW9yeSBpcyBiZWluZyBmcmVlZCBiZWZvcmUgaXQncyBhY3R1YWxseSBzYWZlIHRvIGRvIHNvLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlciB0byBzZWUgd2hldGhlciBvciBub3QgdGhhdCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9uIHNvbWV0aGluZyB0aGF0J3Mgc3RpbGwgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQ1OjU2Ljg0Nzg0NjkyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcGZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjkwOlxcdHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4xNjkxOlxcdFxcdFxcdFxcdFxcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxcbjE2OTI6XFx0e1xcbjE2OTM6XFx0XFx0aW50IGVycjtcXG4xNjk0OlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuMTY5NTpcXHRcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbjE2OTY6XFx0XFxuMTY5NzpcXHRcXHRjaV9zdGFydCA9IG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVI7XFxuMTY5ODpcXHRcXHRjaV9lbmQgPSBjaV9zdGFydCArIG5yO1xcbjE2OTk6XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuMTcwMDpcXHRcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBvZmZzZXQpO1xcbjE3MDE6XFx0cmVzdGFydDpcXG4xNzAyOlxcdFxcdGRvIHtcXG4xNzAzOlxcdFxcdFxcdGVyciA9IF9fc3dhcF9jbHVzdGVyX2R1cF9lbnRyeShjaSwgY2lfb2ZmKTtcXG4xNzA0OlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuMTcwNTpcXHRcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcXG4xNzA2OlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuMTcwNzpcXHRcXHRcXHRcXHRcXHRlcnIgPSBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzaSwgY2ksIGNpX29mZiwgR0ZQX0FUT01JQyk7XFxuMTcwODpcXHRcXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4xNzA5OlxcdFxcdFxcdFxcdFxcdGlmICghZXJyKVxcbjE3MTA6XFx0XFx0XFx0XFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbjE3MTE6XFx0XFx0XFx0XFx0fVxcbjE3MTI6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuMTcxMzpcXHRcXHRcXHR9XFxuMTcxNDpcXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuMTcxNTpcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4xNzE2OlxcdFxcdHJldHVybiAwO1xcbjE3MTc6XFx0ZmFpbGVkOlxcbjE3MTg6XFx0XFx0d2hpbGUgKGNpX29mZi0tIFxcdTAwM2UgY2lfc3RhcnQpXFxuMTcxOTpcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XFxuMTcyMDpcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4xNzIxOlxcdFxcdHJldHVybiBlcnI7XFxuMTcyMjpcXHR9XFxuMTcyMzpcXHRcXG4xNzI0OlxcdC8qKlxcbjE3MjU6XFx0ICogZm9saW9fYWxsb2Nfc3dhcCAtIGFsbG9jYXRlIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG4xNzI2OlxcdCAqIEBmb2xpbzogZm9saW8gd2Ugd2FudCB0byBtb3ZlIHRvIHN3YXBcXG4xNzI3OlxcdCAqXFxuMTcyODpcXHQgKiBBbGxvY2F0ZSBzd2FwIHNwYWNlIGZvciB0aGUgZm9saW8gYW5kIGFkZCB0aGUgZm9saW8gdG8gdGhlXFxuMTcyOTpcXHQgKiBzd2FwIGNhY2hlLlxcbjE3MzA6XFx0ICpcXG4xNzMxOlxcdCAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxcbjE3MzI6XFx0ICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXFxuMTczMzpcXHQgKi9cXG4xNzM0OlxcdGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTczNTpcXHR7XFxuMTczNjpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuMTczNzpcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuMTczODpcXHRcXG4xNzM5OlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQ1OjU2Ljg0ODAzNzM1MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTczOTAxNjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZWNlbnQgS2VybmVsIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGV5J3ZlIHJlbW92ZWQgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBmcm9tIHRoZSBgZmFpbGVkOmAgcGF0aC4gSXQgbG9va3MgbGlrZSB0aGUgbG9naWMgZ29lczogYWxsb2NhdGUgdGFibGUgKGBzd2FwX2V4dGVuZF90YWJsZV9hbGxvY2ApLCBhbmQgaWYgdGhhdCAqZmFpbHMqLCBpdCBoaXRzIGBmYWlsZWQ6YC4gSWYgdGhlIGFsbG9jYXRpb24gKnN1Y2NlZWRzKiwgaXQgZ29lcyB0byBgcmVzdGFydDpgLiBMYXRlciAqZmFpbHVyZXMqIGFsc28gaGl0IGBmYWlsZWQ6YC4gSW4gYGZhaWxlZDpgLCBpdCB1bmRvZXMgdGhlIGR1cGxpY2F0ZXMuIE15IGZpcnN0IHRob3VnaHQgd2FzIG1heWJlIHRoZSBmcmVlIHdhc24ndCBuZWVkZWQgb3Igd2FzIGRhbmdlcm91cyB0byB0aGUgbWVtb3J5IGxheW91dC4gQnV0LCB3YWl0LCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIG9ubHkgZnJlZXMgaWYgKmFsbCogZW50cmllcyBhcmUgTlVMTCwgc28gaXQgd291bGRuJ3QgZnJlZSBhIHRhYmxlIGluIHVzZS4gU28gd2h5IHdhcyBpdCByZW1vdmVkPyBNYXliZSBpdCB3YXMganVzdCByZWR1bmRhbnQuIE9yIG1heWJlIGl0ICpkaWQqIGNhdXNlIHNvbWUgaXNzdWUgdGhlcmUsIGxlYWRpbmcgdG8gYSBidWcsIHRoYXQgd2Fzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMuIEl0J3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgbm90IGFueSB1bmluaXRpYWxpemVkIHJlYWRzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi5cblxuU28sIGhlcmUncyB0aGUgb3ZlcmFsbCBnaXN0IG9mIHRoZXNlIGNoYW5nZXM6XG5cbjEuICBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYDogRml4ZXMgYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGBjaS1cdTAwM2V0YWJsZWAgbWlnaHQgaGF2ZSBiZWVuIHB1Ymxpc2hlZCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBhbmQgYGNpLVx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGV2ZW4gYWxsb2NhdGVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cbjIuICBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgOiBTaW1wbGlmaWVzIGEgbG9vcC5cbjMuICBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYDogUmVtb3ZlcyB0aGlzIHNlZW1pbmdseSB1bm5lY2Vzc2FyeSBjYWxsIHRvIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAuXG40LiAgYHN3YXBvbmA6IEZpeGVzIHRoZSBvcmRlciBvZiBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgaXMgY29ycmVjdGx5IHNlZW4sIHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MsIG9yIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIEFsbCB0aGUgYWxsb2NhdGlvbnMgYXJlIHplcm9lZCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9ycywgd2hpY2ggaXMga2V5LiBUaGVzZSBmaXhlcyBhcmUgYWxsIGFib3V0IHJhY2UgY29uZGl0aW9ucywgbG9naWMgZXJyb3JzLCBhbmQgc29tZSBtZW1vcnkgbGVha3MuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBzaW1wbGUga2VybmVsIG9vcHMgc2hvdWxkIGNhdGNoIGFsbCB0aGVzZSBwcm9ibGVtcy4gVGhpcyBtZWFucyB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBmaXhlcywgTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDEsIk91dHB1dFRva2VucyI6MzA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDY6MTIuNTg3MDU2NDAxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtOlxcbjEuIEEgcmFjZSBjb25kaXRpb24gaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgd2hlcmUgYGNpLVxcdTAwM2V0YWJsZWAgd2FzIHB1Ymxpc2hlZCB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAgYmVmb3JlIGBjaS1cXHUwMDNlbWVtY2dfdGFibGVgIGFuZCBgY2ktXFx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGFsbG9jYXRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvbmN1cnJlbnQgdGhyZWFkcyBjYWxsaW5nIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgc3dhcG9uYCB3aGVyZSBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIHdhcyBzZXQsIGNhdXNpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktXFx1MDAzZWdsb2JhbF9jbHVzdGVyYCBmb3Igc29saWQtc3RhdGUgZHJpdmVzLlxcbjMuIE1pbm9yIGNsZWFudXBzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxcblxcbkFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW52b2x2ZWQgKGBrdnphbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGJpdG1hcF96YWxsb2NgLCBgX19HRlBfWkVST2AsIGBrbWVtX2NhY2hlX3phbGxvY2ApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBidWdzIGZpeGVkIGFyZSByYWNlIGNvbmRpdGlvbnMgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbmNvcnJlY3QgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29udHJvbCBmbG93LCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMgbWVjaGFuaXNtcyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlc2UgdHlwZXMgb2YgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XFxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXFx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVxcdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxcbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXFxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXFxuXFxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsnczr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 12:11:53 +0000 UTC FinishedAt: 2026-08-20 12:46:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a51cbdf02aec619f90db7e9f06e295adb8009d4d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a51cbdf02aec619f90db7e9f06e295adb8009d4d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG" ], "series_id": "b5cc56f3-471d-4c1a-a63d-5ad543508aa0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_swapon", "folio_dup_swap", "swap_dup_entry_direct", "swap_retry_table_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDssCiAgICAmIzM0O2ZvbGlvX2R1cF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJ5X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzIGluIHRoZSBzd2FwIHN1YnN5c3RlbTpcbjEuIEEgcmFjZSBjb25kaXRpb24gaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgd2hlcmUgYGNpLVx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBhbmQgYGNpLVx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGFsbG9jYXRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvbmN1cnJlbnQgdGhyZWFkcyBjYWxsaW5nIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgZm9yIHNvbGlkLXN0YXRlIGRyaXZlcy5cbjMuIE1pbm9yIGNsZWFudXBzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxuXG5BbGwgbWVtb3J5IGFsbG9jYXRpb25zIGludm9sdmVkIChga3Z6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX29iamAsIGBiaXRtYXBfemFsbG9jYCwgYF9fR0ZQX1pFUk9gLCBga21lbV9jYWNoZV96YWxsb2NgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYnVncyBmaXhlZCBhcmUgcmFjZSBjb25kaXRpb25zIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzIG1lY2hhbmlzbXMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2ZTgxMTI2MTY5Y2UwZGJmNTliMzVlZTYxNjYzNTZjMGVlODRkNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxMjozOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNjE1ZDkwODY3MTExMy4uZmYxYjFmYzM2NGI5MiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC00NjYsOCAmIzQzOzQ2Niw2IEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4tXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbkBAIC00ODcsNiAmIzQzOzQ4NSwxMiBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuICNlbmRpZlxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1ha2UgdGFibGVzIHZpc2libGUgdG8gY2x1c3Rlcl9pc191c2FibGUoKSBhZnRlciBldmVyeXRoaW5nIGlzXG4mIzQzO1x0ICogcmVhZHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTUxMSwyMCAmIzQzOzE1MTUsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbi1cdGJvb2wgY2FuX2ZyZWUgPSB0cnVlO1xuIFxuIFx0aWYgKCFjaS1cdTAwM2VleHRlbmRfdGFibGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNXQVBGSUxFX0NMVVNURVI7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChjaS1cdTAwM2VleHRlbmRfdGFibGVbaV0pXG4tXHRcdFx0Y2FuX2ZyZWUgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGNhbl9mcmVlKSB7XG4tXHRcdGtmcmVlKGNpLVx1MDAzZWV4dGVuZF90YWJsZSk7XG4tXHRcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4tXHR9XG4mIzQzO1x0a2ZyZWUoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKTtcbiYjNDM7XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuIH1cbiBcbiAvKiBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBvbmUgc2xvdCwgd2l0aG91dCBmcmVlaW5nIGl0ICovXG5AQCAtMTcxNiw3ICYjNDM7MTcxNyw2IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBmYWlsZWQ6XG4gXHR3aGlsZSAoY2lfb2ZmLS0gXHUwMDNlIGNpX3N0YXJ0KVxuIFx0XHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XG4tXHRzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTM1ODgsMTEgJiM0MzszNTg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcbiBcdG1heHBhZ2VzID0gc2ktXHUwMDNlbWF4O1xuIFxuLVx0LyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqL1xuLVx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuLVxuIFx0aWYgKHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cdTAwM2ViZGV2KSlcbiBcdFx0c2ktXHUwMDNlZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7XG4gXG5AQCAtMzYwNiw2ICYjNDM7MzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxuIFx0XHRpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbiYjNDM7XHQgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XG4mIzQzO1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDssCiAgICAmIzM0O2ZvbGlvX2R1cF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJ5X2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgc3dhcGZpbGUgbG9naWMsIGluY2x1ZGluZyBzd2FwIGNsdXN0ZXIgdGFibGUgYWxsb2NhdGlvbiwgZnJlZWluZywgYW5kIGR1cGxpY2F0aW9uLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHN5c19zd2Fwb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmU4MTEyNjE2OWNlMGRiZjU5YjM1ZWU2MTY2MzU2YzBlZTg0ZDY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTI6Mzk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA2MTVkOTA4NjcxMTEzLi5mZjFiMWZjMzY0YjkyIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ2Niw4ICYjNDM7NDY2LDYgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKQogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGNpLSZndDt0YWJsZSwgdGFibGUpOwotCiAjaWZkZWYgQ09ORklHX01FTUNHCiAJaWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHsKIAkJVk1fV0FSTl9PTl9PTkNFKGNpLSZndDttZW1jZ190YWJsZSk7CkBAIC00ODcsNiAmIzQzOzQ4NSwxMiBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHRhYmxlcyB2aXNpYmxlIHRvIGNsdXN0ZXJfaXNfdXNhYmxlKCkgYWZ0ZXIgZXZlcnl0aGluZyBpcwomIzQzOwkgKiByZWFkeS4KJiM0MzsJICovCiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxMSwyMCAmIzQzOzE1MTUsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIHN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwotCWJvb2wgY2FuX2ZyZWUgPSB0cnVlOwogCiAJaWYgKCFjaS0mZ3Q7ZXh0ZW5kX3RhYmxlKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgU1dBUEZJTEVfQ0xVU1RFUjsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGNpLSZndDtleHRlbmRfdGFibGVbaV0pCi0JCQljYW5fZnJlZSA9IGZhbHNlOwomIzQzOwkJCXJldHVybjsKIAl9CiAKLQlpZiAoY2FuX2ZyZWUpIHsKLQkJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7Ci0JCWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwotCX0KJiM0MzsJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7CiYjNDM7CWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwogfQogCiAvKiBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBvbmUgc2xvdCwgd2l0aG91dCBmcmVlaW5nIGl0ICovCkBAIC0xNzE2LDcgJiM0MzsxNzE3LDYgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogZmFpbGVkOgogCXdoaWxlIChjaV9vZmYtLSAmZ3Q7IGNpX3N0YXJ0KQogCQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7Ci0Jc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTg4LDExICYjNDM7MzU4OCw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpCiAKIAltYXhwYWdlcyA9IHNpLSZndDttYXg7CiAKLQkvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovCi0JZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTsKLQogCWlmIChzaS0mZ3Q7YmRldiAmYW1wOyZhbXA7IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS0mZ3Q7YmRldikpCiAJCXNpLSZndDtmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUzsKIApAQCAtMzYwNiw2ICYjNDM7MzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQogCQlpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gYWZ0ZXIgU1dQXyBmbGFncyBoYW5kbGluZyBhcwomIzQzOwkgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7CiYjNDM7CiAJaWYgKChzd2FwX2ZsYWdzICZhbXA7IFNXQVBfRkxBR19ESVNDQVJEKSAmYW1wOyZhbXA7CiAJICAgIHNpLSZndDtiZGV2ICZhbXA7JmFtcDsgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLSZndDtiZGV2KSkgewogCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIFN1YnN5c3RlbSBQYXRjaCBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3N3YXBmaWxlLmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIHN3YXAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgc29tZSBmdW5jdGlvbiBjaGFuZ2VzLiBJIHNlZSB0aGVzZSBzcGVjaWZpYyBjaGFuZ2VzOiB0aGUgYXNzaWdubWVudCBvZiB0aGUgc3dhcCB0YWJsZSBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBoYXMgYmVlbiBtb3ZlZDsgdGhlIGxvZ2ljIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgaGFzIGJlZW4gc2ltcGxpZmllZCwgYW5kIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgaGFzIGJlZW4gcmVtb3ZlZCBpbiBhIGNlcnRhaW4gZXJyb3IgcGF0aCBpbiBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYDsgYW5kIGZpbmFsbHksIGEgcmVvcmRlcmluZyBvZiBjYWxscyB3aXRoaW4gYHN5c19zd2Fwb25gLCBtb3ZpbmcgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgZG93biB0aGUgY2FsbCBzdGFjay4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG5ldyB2dWxuZXJhYmlsaXRpZXM/IE9yLCBtb3JlIGltcG9ydGFudGx5IGZvciBmdXp6aW5nLCBhcmUgdGhleSBjcmVhdGluZyBhbnkgbmV3IGludGVyZXN0aW5nIGNvZGUgcGF0aHM/CgpJJiMzOTttIHF1aWNrbHkgY2hlY2tpbmcgcmVhY2hhYmlsaXR5LiAgYHN5c19zd2Fwb25gIGlzIGEgc3lzY2FsbCBzbyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgaXMgcmVhY2hhYmxlIHRvby4gQW5kIEkgc2VlIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGFyZSBhbHNvIHJlYWNoYWJsZS4gSG93ZXZlciwgYWgsIEkgc2VlLCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBhcmUgYHN0YXRpY2AuICBUaGF0IGxpbWl0cyBob3cgZWFzaWx5IEkgY2FuIGRpcmVjdGx5IHRhcmdldCB0aGVtLiBgc3lzX3N3YXBvbmAgaXMgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgYW5kIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpcyBub3QgYHN0YXRpY2AuCgpUaGUgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFRodXMsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gZW50cnkgcG9pbnRzIGFuZCBhbnkgZnVuY3Rpb25zIHRoYXQgYXJlIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoZSBmaWxlLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAsIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAsIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLCBhbmQgYHN5c19zd2Fwb25gLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCBjYWxscyBpbnRvIHRoZW0gdG8gaWRlbnRpZnkgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgc3RhY2tzLiBTaW5jZSBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYHN5c19zd2Fwb25gIGFuZCB0aGVuIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBJJiMzOTtsbCBncmVwIGZvciB0aGUgbGF0dGVyIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9NDIxPXN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vc3dhcGZpbGUuYy00NDgtXG5tbS9zd2FwZmlsZS5jOjQ0OTpzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG5tbS9zd2FwZmlsZS5jLTQ1MC17XG4tLVxubW0vc3dhcGZpbGUuYz01MzE9c3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTU0NC1cbm1tL3N3YXBmaWxlLmM6NTQ1Olx0aWYgKCFzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoY2ksIF9fR0ZQX0hJR0ggfCBfX0dGUF9OT01FTUFMTE9DIHxcbm1tL3N3YXBmaWxlLmMtNTQ2LVx0XHRcdFx0XHQgIF9fR0ZQX05PV0FSTikpXG4tLVxubW0vc3dhcGZpbGUuYy01NTgtXG5tbS9zd2FwZmlsZS5jOjU1OTpcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShjaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfFxubW0vc3dhcGZpbGUuYy01NjAtXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuLS1cbm1tL3N3YXBmaWxlLmM9NzkxPXN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTgxOC1cdC8qIE5lZWQgdG8gYWxsb2NhdGUgc3dhcCB0YWJsZSBmaXJzdCBmb3IgaW5pdGlhbCBiYWQgc2xvdCBtYXJraW5nLiAqL1xubW0vc3dhcGZpbGUuYzo4MTk6XHRpZiAoIWNpLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNiBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoY2ksIEdGUF9LRVJORUwpKVxubW0vc3dhcGZpbGUuYy04MjAtXHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENsdXN0ZXIgUG9wdWxhdGlvbiBpbiB0aGUgU3dhcCBTdWJzeXN0ZW0qKgoKT2theSwgc28gYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgaXMgYmVpbmcgaW52b2tlZCBieSBgc3dhcF9hbGxvY19jbHVzdGVyYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRoZSBleHBlY3RlZCBjYWxsIGNoYWluLiBJJiMzOTtsbCBtZW50YWxseSB3YWxrIHRocm91Z2ggdGhlIGFsbG9jYXRpb24gcHJvY2VzcyDigJMgYHN3YXBfYWxsb2NfY2x1c3RlcmAgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgb3IgY3JlYXRpbmcgYSBzd2FwIGNsdXN0ZXIsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQsIGFmdGVyIGFsbG9jYXRpbmcgb25lLCBpdCB3b3VsZCAqdGhlbiogaGFuZCBvZmYgcG9wdWxhdGlvbi4gQnV0IEkgY2FuJiMzOTt0IGFzc3VtZS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5leHBlY3RlZCBlbnRyeSBwb2ludHMsIG9yLCB3b3JzZSwgdW5pbnRlbmRlZCByZWN1cnNpdmUgY2FsbHMgb3IgZGF0YSByYWNlcyBoZXJlLiBBIHF1aWNrIGNvZGUgZGl2ZSB0byB0cmFjZSB0aGUgY2FsbGVyL2NhbGxlZSByZWxhdGlvbnNoaXBzIGlzIHRoZSBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgY2x1c3RlciBwb3B1bGF0aW9uIGVudGFpbHMuLi4gaXMgaXQganVzdCB6ZXJvaW5nLCBvciBhcmUgd2UgbG9hZGluZyBhY3R1YWwgZGF0YSBpbW1lZGlhdGVseT8gVGhlIGxhdHRlciBjb3VsZCBsZWFkIHRvIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTUzMD1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcbm1tL3N3YXBmaWxlLmM6NTMxOnN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTUzMi1cdFx0XHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwZmlsZS5jPTYyNz1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3Rlcihcbi0tXG5tbS9zd2FwZmlsZS5jLTY1NC1cdFx0Vk1fV0FSTl9PTl9PTkNFKGNsdXN0ZXJfdGFibGVfaXNfYWxsb2NlZChmb3VuZCkpO1xubW0vc3dhcGZpbGUuYzo2NTU6XHRcdHJldHVybiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc2ksIGZvdW5kKTtcbm1tL3N3YXBmaWxlLmMtNjU2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgaXNvbGF0ZV9sb2NrX2NsdXN0ZXJgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgaXNvbGF0ZV9sb2NrX2NsdXN0ZXJgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IGEgZmV3IHNwZWNpZmljIGFzcGVjdHMgaW1tZWRpYXRlbHkuIElzIGl0IGNvcnJlY3RseSBpc29sYXRpbmcgbG9jay1yZWxhdGVkIG9wZXJhdGlvbnMgZnJvbSBvdGhlciBjbHVzdGVyIGZ1bmN0aW9uYWxpdGllcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGlzb2xhdGlvbiwgcGVyZm9ybWFuY2Utd2lzZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW50cm9kdWNlZCwgb3IgYXJlIHdlIGFjaGlldmluZyB0aGUgZXhwZWN0ZWQgYmVuZWZpdHMgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgYW5kIGZhdWx0IGlzb2xhdGlvbj8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIHRoYXQgbW9kdWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IG1hbmFnZXMgcmVzb3VyY2UgY29udGVudGlvbiwgcG90ZW50aWFsIGRlYWRsb2NrcywgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciB1bmRlciBoaWdoIGxvYWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdCYjMzk7cyByZXNwZWN0aW5nIGFueSB1bmRlcmx5aW5nIGxvY2sgc2VtYW50aWNzIHdlJiMzOTt2ZSBkZWZpbmVkIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSBkaXN0cmlidXRlZCBjb25zZW5zdXMgbWVjaGFuaXNtcyAoaWYgYW55KSBhcyBpbnRlbmRlZC4gSSYjMzk7bGwgbWVudGFsbHkgcnVuIHRocm91Z2ggYSBmZXcgZWRnZSBjYXNlIHNjZW5hcmlvcyB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCBmYWNpbmcgYW55IHVuZXhwZWN0ZWQgcHJvYmxlbXMuIEkgd2lsbCBsb29rIGZvciBhbnkgcG90ZW50aWFsIHRocmVhZCBzYWZldHkgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucywgdG9vLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBjbHVzdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2xhdGVfbG9ja19jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTYxMD1zdGF0aWMgdm9pZCBfX2ZyZWVfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vc3dhcGZpbGUuYy02MjYtICovXG5tbS9zd2FwZmlsZS5jOjYyNzpzdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3Rlcihcbm1tL3N3YXBmaWxlLmMtNjI4LVx0XHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vc3dhcGZpbGUuYz0xMDE5PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTAyNi1cdGRvIHtcbm1tL3N3YXBmaWxlLmM6MTAyNzpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IGlzb2xhdGVfbG9ja19jbHVzdGVyKHNpLCBsaXN0KTtcbm1tL3N3YXBmaWxlLmMtMTAyOC1cdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XG4tLVxubW0vc3dhcGZpbGUuYz0xMDQxPXN0YXRpYyB2b2lkIHN3YXBfcmVjbGFpbV9mdWxsX2NsdXN0ZXJzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgYm9vbCBmb3JjZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTEwNTEtXG5tbS9zd2FwZmlsZS5jOjEwNTI6XHR3aGlsZSAoKGNpID0gaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoc2ksIFx1MDAyNnNpLVx1MDAzZWZ1bGxfY2x1c3RlcnMpKSkge1xubW0vc3dhcGZpbGUuYy0xMDUzLVx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gU3dhcCBSZWNsYW1hdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHN3YXAgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IG1hbmFnaW5nIGl0cyBzd2FwIHNwYWNlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgYWxsb2Nfc3dhcF9zY2FuX2xpc3RgIGFuZCBgc3dhcF9yZWNsYWltX2Z1bGxfY2x1c3RlcnNgLiBUaGVzZSB0d28gYXJlIGxpa2VseSBrZXkgcGxheWVycyBpbiBob3cgd2UgaWRlbnRpZnksIHByaW9yaXRpemUsIGFuZCB1bHRpbWF0ZWx5IGhhbmRsZSBzd2FwIHNwYWNlIHRoYXQmIzM5O3MgZWl0aGVyIGF2YWlsYWJsZSBmb3IgdXNlLCBvciBjdXJyZW50bHkgaG9sZGluZyBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgdXAuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFuZCB0aGUgbWVjaGFuaWNzIG9mIHJlY2xhaW1pbmcgZnVsbCBjbHVzdGVycyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBvdmVyYWxsIHJlY2xhbWF0aW9uIHByb2Nlc3MuIEkgYW50aWNpcGF0ZSB0aGVzZSB3aWxsIHByb3ZpZGUgYSBjbGVhciBpbnNpZ2h0IGludG8gdGhlIGtlcm5lbCYjMzk7cyBzd2FwIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zd2FwX3NjYW5fbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz05Njg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xMDE4LVxubW0vc3dhcGZpbGUuYzoxMDE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xMDIwLVx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS9zd2FwZmlsZS5jPTEwOTY9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTExMzUtXHRpZiAoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9QQUdFX0RJU0NBUkQpIHtcbm1tL3N3YXBmaWxlLmM6MTEzNjpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXHUwMDI2c2ktXHUwMDNlZnJlZV9jbHVzdGVycywgZm9saW8sIGZhbHNlKTtcbm1tL3N3YXBmaWxlLmMtMTEzNy1cdFx0aWYgKGZvdW5kKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTE0MS1cdGlmIChvcmRlciBcdTAwM2MgUE1EX09SREVSKSB7XG5tbS9zd2FwZmlsZS5jOjExNDI6XHRcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc2ksIFx1MDAyNnNpLVx1MDAzZW5vbmZ1bGxfY2x1c3RlcnNbb3JkZXJdLCBmb2xpbywgdHJ1ZSk7XG5tbS9zd2FwZmlsZS5jLTExNDMtXHRcdGlmIChmb3VuZClcbi0tXG5tbS9zd2FwZmlsZS5jLTExNDctXHRpZiAoIShzaS1cdTAwM2VmbGFncyBcdTAwMjYgU1dQX1BBR0VfRElTQ0FSRCkpIHtcbm1tL3N3YXBmaWxlLmM6MTE0ODpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXHUwMDI2c2ktXHUwMDNlZnJlZV9jbHVzdGVycywgZm9saW8sIGZhbHNlKTtcbm1tL3N3YXBmaWxlLmMtMTE0OS1cdFx0aWYgKGZvdW5kKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTE2My1cdFx0ICovXG5tbS9zd2FwZmlsZS5jOjExNjQ6XHRcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc2ksIFx1MDAyNnNpLVx1MDAzZWZyYWdfY2x1c3RlcnNbb3JkZXJdLCBmb2xpbywgZmFsc2UpO1xubW0vc3dhcGZpbGUuYy0xMTY1LVx0XHRpZiAoZm91bmQpXG4tLVxubW0vc3dhcGZpbGUuYy0xMTc3LVx0XHQgKi9cbm1tL3N3YXBmaWxlLmM6MTE3ODpcdFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXHUwMDI2c2ktXHUwMDNlZnJhZ19jbHVzdGVyc1tvXSwgZm9saW8sIHRydWUpO1xubW0vc3dhcGZpbGUuYy0xMTc5LVx0XHRpZiAoZm91bmQpXG4tLVxubW0vc3dhcGZpbGUuYy0xMTgxLVxubW0vc3dhcGZpbGUuYzoxMTgyOlx0XHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcdTAwMjZzaS1cdTAwM2Vub25mdWxsX2NsdXN0ZXJzW29dLCBmb2xpbywgdHJ1ZSk7XG5tbS9zd2FwZmlsZS5jLTExODMtXHRcdGlmIChmb3VuZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipUcmFjaW5nIHRoZSBBbGxvY2F0aW9uIFBhdGggZm9yIFN3YXAgRW50cmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgc3dhcCBlbnRyaWVzIGFyZSBhbGxvY2F0ZWQgYW5kIGl0IGxvb2tzIGxpa2UgYGNsdXN0ZXJfYWxsb2Nfc3dhcF9lbnRyeWAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gVGhlIGNhbGwgc3RhY2sgcmV2ZWFscyB0aGUgZm9sbG93aW5nOiBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCBnZXRzIGNhbGxlZCBieSBgZ2V0X3N3YXBfcGFnZXNgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgYWRkX3RvX3N3YXBgLiBBbmQsIGNyaXRpY2FsbHksIGBhZGRfdG9fc3dhcGAgaXMgdWx0aW1hdGVseSByZWFjaGVkIHRocm91Z2ggYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBwYXRoIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHN3YXAgbWVjaGFuaXNtLiBUaGlzIGlzIHJlYWNoYWJsZSwgc28gSSBzaG91bGQgaW52ZXN0aWdhdGUgaXQgZnVydGhlci4KCk5leHQsIEkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9kdXBfZW50cmllc19jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE2NDA9c3RhdGljIGludCBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2NzktLyoqXG5tbS9zd2FwZmlsZS5jOjE2ODA6ICogc3dhcF9kdXBfZW50cmllc19jbHVzdGVyOiBJbmNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXIuXG5tbS9zd2FwZmlsZS5jLTE2ODEtICogQHNpOiBUaGUgc3dhcCBkZXZpY2UuXG4tLVxubW0vc3dhcGZpbGUuYy0xNjg5LSAqL1xubW0vc3dhcGZpbGUuYzoxNjkwOnN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMTY5MS1cdFx0XHRcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTc5OD1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODEwLVxubW0vc3dhcGZpbGUuYzoxODExOlx0cmV0dXJuIHN3YXBfZHVwX2VudHJpZXNfY2x1c3Rlcihzd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLFxubW0vc3dhcGZpbGUuYy0xODEyLVx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5KSwgbnJfcGFnZXMpO1xuLS1cbm1tL3N3YXBmaWxlLmM9Mzc1MD1pbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMzc2Ni1cbm1tL3N3YXBmaWxlLmM6Mzc2NzpcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCAxKTtcbm1tL3N3YXBmaWxlLmMtMzc2OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipQVEUgU3dhcHBpbmcgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBpbnZvbHZpbmcgYGZvbGlvX2R1cF9zd2FwYC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqPyBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgbW0vbWVtb3J5LmNgLCBhbmQgc3BlY2lmaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3ByZXNlbnRfcHRlYCBvciBhbnl0aGluZyB0aGF0IGhhbmRsZXMgUFRFIChQYWdlIFRhYmxlIEVudHJ5KSBkdXBsaWNhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byBzd2FwcGluZywgYGZvbGlvX2R1cF9zd2FwYCBpcyBsaWtlbHkgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBhIG5ldyB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYSBwaHlzaWNhbCBwYWdlIHRoYXQgbWlnaHQgYmUgZ29pbmcgdGhyb3VnaCwgb3IganVzdCBjYW1lIG91dCBvZiwgc3dhcC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIHF1aWNrbHkuIE15IG5leHQgbW92ZSB3aWxsIGJlIHRvIGNoZWNrIHRob3NlIGZ1bmN0aW9ucyBkaXJlY3RseSBhbmQgc2VlIGlmIGBmb2xpb19kdXBfc3dhcGAgaXMgaW5kZWVkIHByZXNlbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IGluIHdoaWNoIHRoZSBzd2FwIGR1cGxpY2F0aW9uIGlzIGhhcHBlbmluZy4gSXMgaXQgZHVyaW5nIGEgZm9yaz8gQ09XIChDb3B5LW9uLVdyaXRlKT8gUGVyaGFwcyBkdXJpbmcgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHJlc3RvcmluZyBhIHN3YXBwZWQtb3V0IHBhZ2U/IEtub3dpbmcgdGhlIGNhbGxlciBpcyB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19kdXBfc3dhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yMjgzLVxubW0vcm1hcC5jOjIyODQ6XHRcdFx0aWYgKGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBzdWJwYWdlKSBcdTAwM2MgMCkge1xubW0vcm1hcC5jLTIyODUtXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbi0tXG5tbS9zaG1lbS5jPTE1OTM9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLFxuLS1cbm1tL3NobWVtLmMtMTcwMC1cbm1tL3NobWVtLmM6MTcwMTpcdFx0Zm9saW9fZHVwX3N3YXAoZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYy0xNzAyLVx0XHRzaG1lbV9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKGZvbGlvLCBzd3BfdG9fcmFkaXhfZW50cnkoZm9saW8tXHUwMDNlc3dhcCkpO1xuLS1cbm1tL3N3YXAuaD0yMTE9ZXh0ZXJuIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApO1xuLS1cbm1tL3N3YXAuaC0yMjQtICpcbm1tL3N3YXAuaDoyMjU6ICogZm9saW9fZHVwX3N3YXAoKTogaW5jcmVhc2VzIHRoZSBzd2FwIGNvdW50IG9mIGEgZm9saW8sIHVzdWFsbHlcbm1tL3N3YXAuaC0yMjYtICogZHVyaW5nIGl0IGdldHMgdW5tYXBwZWQgYW5kIGEgc3dhcCBlbnRyeSBpcyBpbnN0YWxsZWQgdG8gcmVwbGFjZVxuLS1cbm1tL3N3YXAuaC0yMjktICpcbm1tL3N3YXAuaDoyMzA6ICogZm9saW9fcHV0X3N3YXAoKTogZG9lcyB0aGUgb3Bwb3NpdGUgdGhpbmcgb2YgZm9saW9fZHVwX3N3YXAoKS5cbm1tL3N3YXAuaC0yMzEtICovXG5tbS9zd2FwLmg9MjMyPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oOjIzMzppbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpO1xubW0vc3dhcC5oLTIzNC12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzdWJwYWdlKTtcbi0tXG5tbS9zd2FwLmg9MzcwPXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmgtMzc0LVxubW0vc3dhcC5oOjM3NTpzdGF0aWMgaW5saW5lIGludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL3N3YXAuaC0zNzYte1xuLS1cbm1tL3N3YXBmaWxlLmM9MTczND1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTc4MS0vKipcbm1tL3N3YXBmaWxlLmM6MTc4MjogKiBmb2xpb19kdXBfc3dhcCgpIC0gSW5jcmVhc2Ugc3dhcCBjb3VudCBvZiBzd2FwIGVudHJpZXMgb2YgYSBmb2xpby5cbm1tL3N3YXBmaWxlLmMtMTc4My0gKiBAZm9saW86IGZvbGlvIHdpdGggc3dhcCBlbnRyaWVzIGJvdW5kZWQuXG4tLVxubW0vc3dhcGZpbGUuYy0xNzk3LSAqL1xubW0vc3dhcGZpbGUuYzoxNzk4OmludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSlcbm1tL3N3YXBmaWxlLmMtMTc5OS17XG4tLVxubW0vc3dhcGZpbGUuYz0xOTkwPWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMjAxNi0gKiBnbyBmcm9tIG5vdC1zd2FwcGVkIHRvIHN3YXBwZWQgYmVjYXVzZSB0aGUgaW5pdGlhbCBzd2FwIGNvdW50IGluY3JlbWVudCBjYW5cbm1tL3N3YXBmaWxlLmM6MjAxNzogKiBvbmx5IGJlIGRvbmUgYnkgZm9saW9fZHVwX3N3YXAsIHdoaWNoIGFsc28gbG9ja3MgdGhlIGZvbGlvLiBCdXQgYSBjb25jdXJyZW50XG5tbS9zd2FwZmlsZS5jLTIwMTgtICogZGVjcmVhc2Ugb2Ygc3dhcCBjb3VudCBpcyBwb3NzaWJsZSB0aHJvdWdoIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0LCBzbyB0aGlzXG4tLVxubW0vc3dhcGZpbGUuYz0zNzE5PXZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbClcbi0tXG5tbS9zd2FwZmlsZS5jLTM3NDYtICogb3duZXIuIGUuZy4sIGxvY2tpbmcgdGhlIFBUTCBvZiBhIFBURSBjb250YWluaW5nIHRoZSBlbnRyeSBiZWluZyBpbmNyZWFzZWQuXG5tbS9zd2FwZmlsZS5jOjM3NDc6ICogQWxzbyB0aGUgc3dhcCBlbnRyeSBtdXN0IGhhdmUgYSBjb3VudCBcdTAwM2U9IDEuIE90aGVyd2lzZSBmb2xpb19kdXBfc3dhcCBzaG91bGRcbm1tL3N3YXBmaWxlLmMtMzc0OC0gKiBiZSB1c2VkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gRHVwbGljYXRlIFN3YXBzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgZHVwbGljYXRlIGVudHJpZXMgYW5kIHN3YXBzIGFyZSBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIGBmb2xpb19kdXBfc3dhcGAgaXMgaW52b2tlZCBmcm9tIHR3byBwcmltYXJ5IGxvY2F0aW9uczogYHRyeV90b191bm1hcF9vbmVgIGFuZCBgc2htZW1fd3JpdGVvdXRgLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2hlbiB3ZSYjMzk7cmUgdW5tYXBwaW5nIG9yIHdyaXRpbmcgYmFjayBzaGFyZWQgbWVtb3J5LCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWxseSBkdXBsaWNhdGVkIHN3YXAgZW50cmllcy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuLi4gSSAqdGhpbmsqIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgIGdldHMgY2FsbGVkIGZyb20gYGNvcHlfcHJlc2VudF9wdGVgLCBidXQgSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGFjY3VyYXRlLiBHb29kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrcywgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgZm9yZ290dGVuIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZHVwX2VudHJ5X2RpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy05NTItXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xubW0vbWVtb3J5LmM6OTUzOlx0XHRpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSBcdTAwM2MgMClcbm1tL21lbW9yeS5jLTk1NC1cdFx0XHRyZXR1cm4gLUVJTztcbi0tXG5tbS9zd2FwZmlsZS5jPTM3MTk9dm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqdmFsKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzczNi0vKlxubW0vc3dhcGZpbGUuYzozNzM3OiAqIHN3YXBfZHVwX2VudHJ5X2RpcmVjdCgpIC0gSW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50IG9mIGEgc3dhcCBlbnRyeSBieSBvbmUuXG5tbS9zd2FwZmlsZS5jLTM3MzgtICogQGVudHJ5OiBmaXJzdCBzd2FwIGVudHJ5IGZyb20gd2hpY2ggd2Ugd2FudCB0byBpbmNyZWFzZSB0aGUgcmVmY291bnQuXG4tLVxubW0vc3dhcGZpbGUuYy0zNzQ5LSAqL1xubW0vc3dhcGZpbGUuYzozNzUwOmludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpXG5tbS9zd2FwZmlsZS5jLTM3NTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipGb2N1c2luZyBpbiBvbiB0aGUgU3dhcCBPcGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyLiBJdCBsb29rcyBsaWtlIGl0IGNhbGxzIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBjb25uZWN0aW9uIG1ha2VzIG1lIHRoaW5rIHRoYXQgYHN5c19zd2Fwb25gLCBgZm9saW9fZHVwX3N3YXBgLCBhbmQsIG9mIGNvdXJzZSwgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgaXRzZWxmIGFyZSBzdHJvbmcgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3dhcCBzcGFjZS4gVG8gZGlnIGRlZXBlciwgSSB0aGluayBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBzeXNfc3dhcG9uYCwgd2hpY2ggSSBiZWxpZXZlIGlzIGRlZmluZWQgaW4gYG1tL3N3YXBmaWxlLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORTJcXChzd2Fwb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzQwNz1zdGF0aWMgaW50IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0zNDg2LVxubW0vc3dhcGZpbGUuYzozNDg3OlNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG5tbS9zd2FwZmlsZS5jLTM0ODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTA5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTd2Fwb24gU3lzdGVtIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc3lzX3N3YXBvbmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBuZWVkaW5nIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHNldHRpbmdzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LiBSaWdodCwgYENPTkZJR19TV0FQYCBzZWVtcyB0byBiZSB0aGUga2V5IGZvciBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBOZXh0IHN0ZXAsIEkmIzM5O2xsIGdvIHJpZ2h0IGZvciBgbW0vTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGFsbCBidWlsdCBhbmQgbGlua2VkIHRvZ2V0aGVyLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgbW9yZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19TV0FQYCwgZGVmaW5pdGVseSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBIYW5nIG9uLCBJIHNlZSBgQ09ORklHX01FTUNHYCBtZW50aW9uZWQgdG9vIGluIHRoZSBjb2RlIGJsb2NrOgoKYGBgYwojaWZkZWYgQ09ORklHX01FTUNHCglpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkgewoJCVZNX1dBUk5fT05fT05DRShjaS0mZ3Q7bWVtY2dfdGFibGUpOwpgYGAKClRoZSBwYXRjaCBqdXN0IHNoaWZ0cyBhIGxpbmUgb2YgY29kZSAoYHJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTtgKSBiZWxvdyB0aGF0IGAjaWZkZWZgIGJsb2NrLiAgU28gaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpc24mIzM5O3QgKnN0cmljdGx5KiByZXF1aXJlZCBmb3IgdGhlIGJ1ZywgYnV0IGl0IGNvdWxkIGRlZmluaXRlbHkgYmUgcmVsYXRlZCBzb21laG93LiBJJiMzOTtsbCBpbmNsdWRlIGJvdGggYFNXQVBgIGFuZCBgTUVNQ0dgIGluIG15IGFuYWx5c2lzIHRvIGJlIHNhZmUuCgpOb3csIHRoZSBzeXNjYWxsIG5hbWUgaXMgYHN5c19zd2Fwb25gLCByaWdodD8gVGhvdWdoIHNvbWV0aW1lcyB0aGV5IHVzZSBgX194NjRfc3lzX3N3YXBvbmAgb3IgYHN3YXBvbmAuIEhtbSwgaXQmIzM5O3MgZ2VuZXJhbGx5IGJlc3QgdG8gdXNlIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZSBmb3IgRm9jdXNTeW1ib2xzLCBidXQgZm9yIHN5emthbGxlciwgYHN5c19zd2Fwb25gIGlzIHRoZSBzdGFuZGFyZCBuYW1lIGZvciB0aGUgZW50cnkgcG9pbnQuIE9rYXksIEkgcmVjYWxsIG5vdzogYFNZU0NBTExfREVGSU5FMihzd2Fwb24sIC4uLilgIGdlbmVyYXRlcyBib3RoIGBzeXNfc3dhcG9uYCBhbmQgYF9feDY0X3N5c19zd2Fwb25gLiBJJiMzOTtsbCBqdXN0IGdvIHdpdGggYHN5c19zd2Fwb25gLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbnRyeSBwb2ludCwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuCgpUaW1lIHRvIHJldmlzaXQgc29tZSByZWxhdGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBMZXQmIzM5O3MgbG9vayBhdCBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBhbmQgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCwgdGhvc2UgYXJlIGBzdGF0aWNgLiBTbyBJIGNhbiBpZ25vcmUgdGhlbS4gYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgYXJlbiYjMzk7dCBzdGF0aWMgdGhvdWdoLiBBbmQgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgaXMuIEFscmlnaHQsIG1vdmluZyBvbiB0byBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE0NjE9c3RhdGljIGludCBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNDk2LVxubW0vc3dhcGZpbGUuYzoxNDk3OmludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG5tbS9zd2FwZmlsZS5jLTE0OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMgaW1tZWRpYXRlbHkgdGhyb3dzIHVwIGEgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHBvdGVudGlhbCBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uLiBJZiBpdCYjMzk7cyBub3Qgc3RhdGljLCBpdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSwgbWF5YmUgZXZlbiBmcm9tIGNvbXBsZXRlbHkgZGlmZmVyZW50IG1vZHVsZXMuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgdW5kZXJzdGFuZGluZyBkZXBlbmRlbmNpZXMgYW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoIGFuZCBkZXRlcm1pbmUgcHJlY2lzZWx5IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIElzIGl0IHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG9yIGRvZXMgaXQgaGF2ZSBleHRlcm5hbCBjYWxsZXJzPyBUaGlzIHdpbGwgaW5mbHVlbmNlIG15IGFuYWx5c2lzIG9mIGl0cyBzYWZldHksIHRoZSBwb3RlbnRpYWwgZm9yIHNpZGUgZWZmZWN0cywgYW5kIGhvdyBhbnkgY2hhbmdlcyBtaWdodCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTEyMjQ9Y29weV9wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vbWVtb3J5LmMtMTM1MS1cdFx0Vk1fV0FSTl9PTl9PTkNFKCFlbnRyeS52YWwpO1xubW0vbWVtb3J5LmM6MTM1MjpcdFx0aWYgKHN3YXBfcmV0cnlfdGFibGVfYWxsb2MoZW50cnksIEdGUF9LRVJORUwpIFx1MDAzYyAwKSB7XG5tbS9tZW1vcnkuYy0xMzUzLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tLVxubW0vc3dhcC5oPTIwNj1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jbHVzdGVyX3VubG9ja19pcnEoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwLmgtMjEwLVxubW0vc3dhcC5oOjIxMTpleHRlcm4gaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCk7XG5tbS9zd2FwLmgtMjEyLVxuLS1cbm1tL3N3YXAuaD00MzA9c3RhdGljIGlubGluZSBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXAuaC00MzUtXG5tbS9zd2FwLmg6NDM2OnN0YXRpYyBpbmxpbmUgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbm1tL3N3YXAuaC00Mzcte1xuLS1cbm1tL3N3YXBmaWxlLmM9MTQ2MT1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE0OTYtXG5tbS9zd2FwZmlsZS5jOjE0OTc6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbm1tL3N3YXBmaWxlLmMtMTQ5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc3CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDU1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTd2FwLVJlbGF0ZWQgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIGlkZW50aWZ5IHN1aXRhYmxlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIHRyYWNlZCB0aGUgY2FsbCBwYXRoIG9mIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBiYWNrIHRvIGBjb3B5X3B0ZV9yYW5nZWAgaW4gYG1tL21lbW9yeS5jYCwgY29uZmlybWluZyBpdHMgcmVsZXZhbmNlLiBUaGVyZWZvcmUsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpcyBhIHNvbGlkIGNhbmRpZGF0ZSB0byBpbmNsdWRlLgoKSSYjMzk7dmUgZ290IGEgcHJlbGltaW5hcnkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzOiBgc3lzX3N3YXBvbmAsIGBmb2xpb19kdXBfc3dhcGAsIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgLCBhbmQgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLiBJIGp1c3QgdmVyaWZpZWQgdGhhdCBgc3lzX3N3YXBvbmAgaXMgdGhlIGNvcnJlY3QgbmFtZSwgZ2l2ZW4gdGhhdCBzeXprYWxsZXIgZ2VuZXJhbGx5IGZ1enplcyBzeXNjYWxscyBkaXJlY3RseS4KCk5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBmdXJ0aGVyLiBJdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIHRoZXNlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGwgcGF0aHM6CgoxLiAgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgKHBhcnQgb2YgcmVjbGFpbSksIGxlYWRpbmcgdG8gYHNocmlua19mb2xpb19saXN0YCAocGFnZSByZWNsYWltKTogQ2FsbGVkIGZyb20gYSBwYXRoIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC0mZ3Q7IGBpc29sYXRlX2xvY2tfY2x1c3RlcmAgLSZndDsgYGFsbG9jX3N3YXBfc2Nhbl9saXN0YCAtJmd0OyBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCAtJmd0OyBgZ2V0X3N3YXBfcGFnZXNgIC0mZ3Q7IGBhZGRfdG9fc3dhcGAgLSZndDsgYHNocmlua19mb2xpb19saXN0YC4KMi4gIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgKHJlbGF0ZWQgdG8gc3dhcHBpbmcgb3V0KTogY2FsbGVkIGJ5IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLCB3aGljaCBjb25uZWN0cyB0byBgZm9saW9fZHVwX3N3YXBgIGFuZCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YC4KMy4gIGBzeXNfc3dhcG9uYC4KClNvIHRoZSBpbml0aWFsIGxpc3QgaG9sZHMsIGFuZCBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoZXNlIGNob2ljZXMsIGFzIHRoZXkgYXJlIHNwZWNpZmljIHRvIHN3YXAgb3BlcmF0aW9ucy4gSSBjb25zaWRlcmVkIGBnZXRfc3dhcF9wYWdlc2Agb3IgYGFkZF90b19zd2FwYCBhcyB3ZWxsLCBidXQgdGhvc2UgYXJlIGhvdCBwYXRocyBhbmQgSSBwcmVmZXIgdG8gYXZvaWQgZ2VuZXJpYyBob3QgcGF0aHMgd2hlbiBJIGNhbi4gV2hpbGUgYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgbWlnaHQgZ2V0IHNvbWUgdXNlIG9uIGhvdCBwYXRocyBkdWUgdG8gZm9yay9tcmVtYXAvZXRjLCB0aG9zZSBhcmUgc3dhcC1zcGVjaWZpYy4KCkkgdGhlbiBkaWQgYSBkZWVwZXIgZGl2ZSBhbmQgbG9va2VkIGF0IHRoZSBjYWxsZXJzIG9mIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLiBgX19zd2FwX2NsdXN0ZXJfZHVwX2VudHJ5YCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgYXJlIHN0YXRpYzsgYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgYXJlIG5vdC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgY2hlY2tlZCB0aGUgY2FsbGVycyBvZiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYC4gSXQgYWxzbyBpcyBjYWxsZWQgZnJvbSBgc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90YCB3aGljaCBpbiB0dXJuIGNhbGxzIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc3lzX3N3YXBvbmAuIFRoYXQgbWVhbnMgYHN5c19zd2Fwb25gIHN1ZmZpY2llbnRseSBjb3ZlcnMgdGhhdCBjb2RlIHBhdGguCgpGaW5hbGx5LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBTV0FQYCBhbmQgYE1FTUNHYC4gTm93LCBJJiMzOTttIHJlYWR5IHRvIGNyYWZ0IHRoZSBzZXQtcmVzdWx0cyBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb24mIzM0OywKICAgICYjMzQ7Zm9saW9fZHVwX3N3YXAmIzM0OywKICAgICYjMzQ7c3dhcF9kdXBfZW50cnlfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb24mIzM0OywKICAgICYjMzQ7Zm9saW9fZHVwX3N3YXAmIzM0OywKICAgICYjMzQ7c3dhcF9kdXBfZW50cnlfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtOlxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXHUwMDNldGFibGVgIHdhcyBwdWJsaXNoZWQgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgIGJlZm9yZSBgY2ktXHUwMDNlbWVtY2dfdGFibGVgIGFuZCBgY2ktXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxuMi4gQSBsb2dpYyBidWcgaW4gYHN3YXBvbmAgd2hlcmUgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2Agd2FzIGNhbGxlZCBiZWZvcmUgdGhlIGBTV1BfU09MSURTVEFURWAgZmxhZyB3YXMgc2V0LCBjYXVzaW5nIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gb2YgYHNpLVx1MDAzZWdsb2JhbF9jbHVzdGVyYCBmb3Igc29saWQtc3RhdGUgZHJpdmVzLlxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXG5cbkFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW52b2x2ZWQgKGBrdnphbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGJpdG1hcF96YWxsb2NgLCBgX19HRlBfWkVST2AsIGBrbWVtX2NhY2hlX3phbGxvY2ApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBidWdzIGZpeGVkIGFyZSByYWNlIGNvbmRpdGlvbnMgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbmNvcnJlY3QgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29udHJvbCBmbG93LCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMgbWVjaGFuaXNtcyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlc2UgdHlwZXMgb2YgaXNzdWVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNmU4MTEyNjE2OWNlMGRiZjU5YjM1ZWU2MTY2MzU2YzBlZTg0ZDY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMTI6Mzk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA2MTVkOTA4NjcxMTEzLi5mZjFiMWZjMzY0YjkyIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ2Niw4ICYjNDM7NDY2LDYgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKQogCWlmICghdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGNpLSZndDt0YWJsZSwgdGFibGUpOwotCiAjaWZkZWYgQ09ORklHX01FTUNHCiAJaWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHsKIAkJVk1fV0FSTl9PTl9PTkNFKGNpLSZndDttZW1jZ190YWJsZSk7CkBAIC00ODcsNiAmIzQzOzQ4NSwxMiBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYWtlIHRhYmxlcyB2aXNpYmxlIHRvIGNsdXN0ZXJfaXNfdXNhYmxlKCkgYWZ0ZXIgZXZlcnl0aGluZyBpcwomIzQzOwkgKiByZWFkeS4KJiM0MzsJICovCiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxMSwyMCAmIzQzOzE1MTUsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIHN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwotCWJvb2wgY2FuX2ZyZWUgPSB0cnVlOwogCiAJaWYgKCFjaS0mZ3Q7ZXh0ZW5kX3RhYmxlKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgU1dBUEZJTEVfQ0xVU1RFUjsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGNpLSZndDtleHRlbmRfdGFibGVbaV0pCi0JCQljYW5fZnJlZSA9IGZhbHNlOwomIzQzOwkJCXJldHVybjsKIAl9CiAKLQlpZiAoY2FuX2ZyZWUpIHsKLQkJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7Ci0JCWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwotCX0KJiM0MzsJa2ZyZWUoY2ktJmd0O2V4dGVuZF90YWJsZSk7CiYjNDM7CWNpLSZndDtleHRlbmRfdGFibGUgPSBOVUxMOwogfQogCiAvKiBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBvbmUgc2xvdCwgd2l0aG91dCBmcmVlaW5nIGl0ICovCkBAIC0xNzE2LDcgJiM0MzsxNzE3LDYgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogZmFpbGVkOgogCXdoaWxlIChjaV9vZmYtLSAmZ3Q7IGNpX3N0YXJ0KQogCQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7Ci0Jc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTg4LDExICYjNDM7MzU4OCw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpCiAKIAltYXhwYWdlcyA9IHNpLSZndDttYXg7CiAKLQkvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovCi0JZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTsKLQogCWlmIChzaS0mZ3Q7YmRldiAmYW1wOyZhbXA7IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS0mZ3Q7YmRldikpCiAJCXNpLSZndDtmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUzsKIApAQCAtMzYwNiw2ICYjNDM7MzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQogCQlpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gYWZ0ZXIgU1dQXyBmbGFncyBoYW5kbGluZyBhcwomIzQzOwkgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7CiYjNDM7CiAJaWYgKChzd2FwX2ZsYWdzICZhbXA7IFNXQVBfRkxBR19ESVNDQVJEKSAmYW1wOyZhbXA7CiAJICAgIHNpLSZndDtiZGV2ICZhbXA7JmFtcDsgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLSZndDtiZGV2KSkgewogCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXBmaWxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3N3YXBmaWxlLmNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGF0IG1lIGFzIGEgcG90ZW50aWFsIGlzc3VlLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBtZW1vcnkgc2FmZXR5LgoKRmlyc3QsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVvcmRlcmVkIHRoaW5ncyBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBtb3ZlZCB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcihjaS0mZ3Q7dGFibGUsIHRhYmxlKTtgIGNhbGwgKmFmdGVyKiB0aGUgYG1lbWNnX3RhYmxlYCBhbGxvY2F0aW9uLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gZ3Vlc3NpbmcgdGhleSYjMzk7cmUgZG9pbmcgdGhpcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gYGNsdXN0ZXJfaXNfdXNhYmxlKClgLiBTb21lb25lIG1pZ2h0IGhhdmUgYmVlbiBjaGVja2luZyBgY2ktJmd0O3RhYmxlYCBiZWZvcmUgYGNpLSZndDttZW1jZ190YWJsZWAgd2FzIGFsbG9jYXRlZCwgbGVhZGluZyB0byBlaXRoZXIgYSBOVUxMIGRlcmVmZXJlbmNlIG9yLCB3b3JzZSwgYWNjZXNzIHRvIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyBgY2lgIGFsbG9jYXRlZCB3aXRoIGBrdmNhbGxvY2Agb3Igc2ltaWxhcj8KCk5leHQsIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgc2VlbXMgdG8gYmUgc2ltcGxpZmllZCwgd2hpY2ggaXMgZ29vZC4gVGhleSYjMzk7cmUgcmV0dXJuaW5nIGVhcmx5IGZyb20gdGhlIGxvb3AgaWYgYGNpLSZndDtleHRlbmRfdGFibGVbaV1gIGlzIGFscmVhZHkgbnVsbCBhbmQgcmVtb3ZpbmcgdGhlIGBjYW5fZnJlZWAgdmFyaWFibGUuIFRoaXMgc291bmRzIGxpa2UgYSBjbGVhbnVwLgoKVGhlbiwgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgaGFzIGEgbWlub3IgY2hhbmdlOyB0aGUgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTtgIGNhbGwgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBgZmFpbGVkOmAgcGF0aC4gUHJvYmFibHkgbWFrZXMgdGhlIGNvZGUgbW9yZSBlZmZpY2llbnQgYW5kIHNhZmUuCgpGaW5hbGx5LCBpbiB0aGUgYHN3YXBvbmAgc3lzY2FsbCwgdGhleSYjMzk7cmUgbW92aW5nIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7YCBhZnRlciB0aGUgZmxhZ3MgYFNXUF9TVEFCTEVfV1JJVEVTYCBhbmQgYFNXUF9TT0xJRFNUQVRFYCBhcmUgc2V0LiBNYWtlcyBzZW5zZS4gVGhleSYjMzk7cmUgcHJvYmFibHkgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IHRoZSBzd2FwIGNsdXN0ZXIgaW5mb3JtYXRpb24gaXMgc2V0IHVwIGNvbnNpc3RlbnRseSBhZnRlciBzZXR0aW5nIHRoZSBjcml0aWNhbCBmbGFncy4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3aXRoIHRoZXNlIGNoYW5nZXM/IFRoZSBiaWdnZXN0IG9uZSBsb29rcyBsaWtlIHRoZSByZW9yZGVyaW5nIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBCeSBtb3ZpbmcgdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwsIHRoZXkgKnNob3VsZCogYmUgcHJldmVudGluZyBhIHJhY2Ugd2hlcmUgYW5vdGhlciB0aHJlYWQgbWlnaHQgc2VlIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGBjaWAuIElmIGBjaS0mZ3Q7bWVtY2dfdGFibGVgIHdlcmUgYWNjZXNzZWQgYmVmb3JlIGFsbG9jYXRpb24sIGl0IGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgKHdoaWNoIEtBU0FOIG9yIHN0YW5kYXJkIG9vcHMgc2hvdWxkIGNhdGNoKSBvciBhbiBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBjaWAgaXMgYWxsb2NhdGVkLiBJZiBpdCYjMzk7cyB6ZXJvLWFsbG9jYXRlZCwgYW4gdW5pbml0aWFsaXplZCBhY2Nlc3Mgc2hvdWxkIHJlc29sdmUgdG8gemVybyBhbmQgdGhlcmVmb3JlIGJlIHNhZmVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgY2lgIGlzLCBpbiBmYWN0LCB6ZXJvLWluaXRpYWxpemVkLiBJIHNob3VsZCBjaGVjayB0aGUgYWxsb2NhdGlvbiBvZiBgc3dhcF9jbHVzdGVyX2luZm9gIGFuZCBhbHNvIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJZiBpdCBpcywgdGhlbiB0aGUgcmlzayBzaG91bGQgYmUgbWluaW1hbC4gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIGxvb2tpbmcgYXQgc29tZSBwb3RlbnRpYWxseSBuYXN0eSB3aWxkIHBvaW50ZXIgYmVoYXZpb3IsIGFuZCB0aGVuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzM0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3N3YXBfaGVhZGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTM0MDYtXG5tbS9zd2FwZmlsZS5jOjM0MDc6c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0zNDA4LVx0XHRcdFx0ICAgIHVuaW9uIHN3YXBfaGVhZGVyICpzd2FwX2hlYWRlcixcbi0tXG5tbS9zd2FwZmlsZS5jPTM0ODc9U1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbi0tXG5tbS9zd2FwZmlsZS5jLTM2MDUtXHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbm1tL3N3YXBmaWxlLmM6MzYwNjpcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cbm1tL3N3YXBmaWxlLmMtMzYwNy1cdCAqL1xubW0vc3dhcGZpbGUuYzozNjA4Olx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG5tbS9zd2FwZmlsZS5jLTM2MDktXHRpZiAoZXJyb3IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gc3dhcGZpbGUuYzogc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9zd2FwZmlsZS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGZ1bmN0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBvciBjb25maWd1cmluZyBzb21lIGFzcGVjdCBvZiBzd2FwIHNwYWNlIGNsdXN0ZXJpbmcg4oCTIGFuIGludGVyZXN0aW5nIHRlY2huaXF1ZSwgYW5kIG9uZSB0aGF0IGlzIHByb2JhYmx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBpbnZvbHZlZCBpbiBvcHRpbWl6aW5nIHN3YXAgSS9PIGJ5IGdyb3VwaW5nIHJlbGF0ZWQgcGFnZXMgdG9nZXRoZXIgb24gZGlzaywgb3IgaWYgaXQgaGFzIGEgZGlmZmVyZW50IHB1cnBvc2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBvdmVyYWxsIHB1cnBvc2UgYW5kIGRlc2lnbiBjaG9pY2VzIG9mIHRoZSBmdW5jdGlvbiB3aXRoIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQwNzpcdHN0YXRpYyBpbnQgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbjM0MDg6XHRcdFx0XHRcdCAgICB1bmlvbiBzd2FwX2hlYWRlciAqc3dhcF9oZWFkZXIsXG4zNDA5Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBtYXhwYWdlcylcbjM0MTA6XHR7XG4zNDExOlx0XHR1bnNpZ25lZCBsb25nIG5yX2NsdXN0ZXJzID0gRElWX1JPVU5EX1VQKG1heHBhZ2VzLCBTV0FQRklMRV9DTFVTVEVSKTtcbjM0MTI6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvO1xuMzQxMzpcdFx0aW50IGVyciA9IC1FTk9NRU07XG4zNDE0Olx0XHR1bnNpZ25lZCBsb25nIGk7XG4zNDE1Olx0XG4zNDE2Olx0XHRjbHVzdGVyX2luZm8gPSBrdnphbGxvY19vYmpzKCpjbHVzdGVyX2luZm8sIG5yX2NsdXN0ZXJzKTtcbjM0MTc6XHRcdGlmICghY2x1c3Rlcl9pbmZvKVxuMzQxODpcdFx0XHRnb3RvIGVycjtcbjM0MTk6XHRcbjM0MjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2NsdXN0ZXJzOyBpJiM0MzsmIzQzOylcbjM0MjE6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2x1c3Rlcl9pbmZvW2ldLmxvY2spO1xuMzQyMjpcdFxuMzQyMzpcdFx0aWYgKCEoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TT0xJRFNUQVRFKSkge1xuMzQyNDpcdFx0XHRzaS1cdTAwM2VnbG9iYWxfY2x1c3RlciA9IGttYWxsb2Nfb2JqKCpzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcik7XG4zNDI1Olx0XHRcdGlmICghc2ktXHUwMDNlZ2xvYmFsX2NsdXN0ZXIpXG4zNDI2Olx0XHRcdFx0Z290byBlcnI7XG4zNDI3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNXQVBfTlJfT1JERVJTOyBpJiM0MzsmIzQzOylcbjM0Mjg6XHRcdFx0XHRzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlci1cdTAwM2VuZXh0W2ldID0gU1dBUF9FTlRSWV9JTlZBTElEO1xuMzQyOTpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcl9sb2NrKTtcbjM0MzA6XHRcdH1cbjM0MzE6XHRcbjM0MzI6XHRcdC8qXG4zNDMzOlx0XHQgKiBNYXJrIHVudXNhYmxlIHBhZ2VzIChoZWFkZXIgcGFnZSwgYmFkIHBhZ2VzLCBhbmQgdGhlIEVPRiBwYXJ0IG9mXG4zNDM0Olx0XHQgKiB0aGUgbGFzdCBjbHVzdGVyKSBhcyB1bmF2YWlsYWJsZS4gVGhlIGNsdXN0ZXJzIGFyZW4mIzM5O3QgbWFya2VkIGZyZWVcbjM0MzU6XHRcdCAqIHlldCwgc28gbm8gbGlzdCBvcGVyYXRpb25zIGFyZSBpbnZvbHZlZCB5ZXQuXG4zNDM2Olx0XHQgKi9cbjM0Mzc6XHRcdGVyciA9IHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdChzaSwgY2x1c3Rlcl9pbmZvLCAwLCBmYWxzZSk7XG4zNDM4Olx0XHRpZiAoZXJyKVxuMzQzOTpcdFx0XHRnb3RvIGVycjtcbjM0NDA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN3YXBfaGVhZGVyLVx1MDAzZWluZm8ubnJfYmFkcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4zNDQxOlx0XHRcdHVuc2lnbmVkIGludCBwYWdlX25yID0gc3dhcF9oZWFkZXItXHUwMDNlaW5mby5iYWRwYWdlc1tpXTtcbjM0NDI6XHRcbjM0NDM6XHRcdFx0aWYgKCFwYWdlX25yIHx8IHBhZ2VfbnIgXHUwMDNlIHN3YXBfaGVhZGVyLVx1MDAzZWluZm8ubGFzdF9wYWdlKSB7XG4zNDQ0Olx0XHRcdFx0cHJfd2FybihcJiMzNDtCYWQgc2xvdCBvZmZzZXQgaXMgb3V0IG9mIGJvcmRlcjogJWQgKGxhc3RfcGFnZTogJWQpXFxuXCYjMzQ7LFxuMzQ0NTpcdFx0XHRcdFx0cGFnZV9uciwgc3dhcF9oZWFkZXItXHUwMDNlaW5mby5sYXN0X3BhZ2UpO1xuMzQ0NjpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDQ3Olx0XHRcdFx0Z290byBlcnI7XG4zNDQ4Olx0XHRcdH1cbjM0NDk6XHRcdFx0ZXJyID0gc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHNpLCBjbHVzdGVyX2luZm8sIHBhZ2VfbnIsIGZhbHNlKTtcbjM0NTA6XHRcdFx0aWYgKGVycilcbjM0NTE6XHRcdFx0XHRnb3RvIGVycjtcbjM0NTI6XHRcdH1cbjM0NTM6XHRcdGZvciAoaSA9IG1heHBhZ2VzOyBpIFx1MDAzYyByb3VuZF91cChtYXhwYWdlcywgU1dBUEZJTEVfQ0xVU1RFUik7IGkmIzQzOyYjNDM7KSB7XG4zNDU0Olx0XHRcdGVyciA9IHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdChzaSwgY2x1c3Rlcl9pbmZvLCBpLCB0cnVlKTtcbjM0NTU6XHRcdFx0aWYgKGVycilcbjM0NTY6XHRcdFx0XHRnb3RvIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBTd2FwIENsdXN0ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBub25lIG9mIHRoZXNlIGRpcmVjdGx5IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIHRoZSBrZXkgY29uY2Vybi4gVGhlIG1lbW9yeSBhbGxvY2F0aW9uIHZpYSBga3Z6YWxsb2Nfb2Jqc2AgZW5zdXJlcyB6ZXJvLWluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBnb29kLgoKVGhlIGZpcnN0IGNyaXRpY2FsIGFkanVzdG1lbnQgaW52b2x2ZXMgdGhlIHBsYWNlbWVudCBvZiBgcmN1X2Fzc2lnbl9wb2ludGVyKGNpLSZndDt0YWJsZSwgdGFibGUpO2AuIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSByZWFzb24gZm9yIG1vdmluZyB0aGlzIGlzIHRvIHByZXZlbnQgYGNsdXN0ZXJfaXNfdXNhYmxlKClgIGZyb20gZXJyb25lb3VzbHkgZGV0ZWN0aW5nIGBjaS0mZ3Q7dGFibGVgIGFzIHZhbGlkIGJlZm9yZSBgY2ktJmd0O21lbWNnX3RhYmxlYCBpcyBhbGxvY2F0ZWQuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBjaS0mZ3Q7bWVtY2dfdGFibGVgLiBNYWtlcyBzZW5zZSwgd2UmIzM5O3JlIHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UgY29uZGl0aW9uIGFuZCBlbnN1cmluZyB0aGF0IHRoZSB0YWJsZSBwb2ludGVyIGlzIG9ubHkgY29uc2lkZXJlZCB2YWxpZCAqYWZ0ZXIqIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwLgoKVGhlIHNlY29uZCBjaGFuZ2UgZm9jdXNlcyBvbiBzaGlmdGluZyBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCBhZnRlciBzZXR0aW5nIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcuIFRoZSBvcmlnaW5hbCBjb25jZXJuIGhlcmUgc2VlbXMgdG8gYmUgYW4gYWxsb2NhdGlvbiBpc3N1ZS4gSWYgd2UgY2FsbGVkIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gICpiZWZvcmUqIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgd2UgbWlnaHQgYWxsb2NhdGUgYHNpLSZndDtnbG9iYWxfY2x1c3RlcmAgd2hlbiBpdOKAmXMgbm90IGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBlaXRoZXIgYSBtZW1vcnkgbGVhaywgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgbWlzY29uZmlndXJhdGlvbi4gSXQmIzM5O3Mgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgc3RpbGwgYSBsb2dpYyBmbGF3IGFuZCBhIHBvdGVudGlhbCByZXNvdXJjZSB3YXN0ZS4KClRoZSBjaGFuZ2VzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYXBwZWFyIHRvIGJlIHNpbXBsaWZpY2F0aW9ucyBhbmQgYXJlIGxpa2VseSBub3Qgc2lnbmlmaWNhbnQuCgpIb3dldmVyLCB0aGUgcmVtb3ZhbCBvZiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO2AgaW4gdGhlIGBmYWlsZWQ6YCBwYXRoIG9mIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGNhdWdodCBteSBleWUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgYSBsb2dpYyBlcnJvciBpbiBob3cgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhhdCBzcGVjaWZpYyBlcnJvciBwYXRoLiBJdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBzZXF1ZW5jZSBpbiB0aGF0IGFyZWEsIGJ1dCBteSBodW5jaCBpcyBpdCYjMzk7cyBhIGJ1ZyBmaXguCgpPdmVyYWxsLCBpdCBzZWVtcyB0aGUgY29yZSBpc3N1ZXMgYXJlOgoKKiAgIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByb3RlY3Rpb24sIHdpdGggdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIG1vdmVtZW50CiogICBBIHJlc291cmNlIGxlYWsgcHJldmVudGlvbi9jb3JyZWN0IGluaXRpYWxpemF0aW9uIGxvZ2ljIHdpdGggdGhlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGNoYW5nZQoqICAgQSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgZml4IGluIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgCgpUbyBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBsZXQmIzM5O3MgdmVyaWZ5IHdoYXQgYHRhYmxlYCBhbmQgYG1lbWNnX3RhYmxlYCBhcmUsIGJ5IGV4YW1pbmluZyBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBhbmQgaG93IHRob3NlIGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTg6XHRcbiA0NTk6XHRcdGlmIChTV1BfVEFCTEVfVVNFX1BBR0UpIHtcbiA0NjA6XHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhnZnAgfCBfX0dGUF9aRVJPLCAwKTtcbiA0NjE6XHRcdFx0aWYgKGZvbGlvKVxuIDQ2MjpcdFx0XHRcdHRhYmxlID0gZm9saW9fYWRkcmVzcyhmb2xpbyk7XG4gNDYzOlx0XHR9IGVsc2Uge1xuIDQ2NDpcdFx0XHR0YWJsZSA9IGttZW1fY2FjaGVfemFsbG9jKHN3YXBfdGFibGVfY2FjaGVwLCBnZnApO1xuIDQ2NTpcdFx0fVxuIDQ2NjpcdFx0aWYgKCF0YWJsZSlcbiA0Njc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDY4Olx0XG4gNDY5Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDQ3MDpcdFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiA0NzE6XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbiA0NzI6XHRcdFx0Y2ktXHUwMDNlbWVtY2dfdGFibGUgPSBremFsbG9jX29iaigqY2ktXHUwMDNlbWVtY2dfdGFibGUsIGdmcCk7XG4gNDczOlx0XHRcdGlmICghY2ktXHUwMDNlbWVtY2dfdGFibGUpIHtcbiA0NzQ6XHRcdFx0XHRzd2FwX2NsdXN0ZXJfZnJlZV90YWJsZShjaSk7XG4gNDc1Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDc2Olx0XHRcdH1cbiA0Nzc6XHRcdH1cbiA0Nzg6XHQjZW5kaWZcbiA0Nzk6XHRcbiA0ODA6XHQjaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXG4gNDgxOlx0XHRWTV9XQVJOX09OX09OQ0UoY2ktXHUwMDNlemVyb19iaXRtYXApO1xuIDQ4MjpcdFx0Y2ktXHUwMDNlemVyb19iaXRtYXAgPSBiaXRtYXBfemFsbG9jKFNXQVBGSUxFX0NMVVNURVIsIGdmcCk7XG4gNDgzOlx0XHRpZiAoIWNpLVx1MDAzZXplcm9fYml0bWFwKSB7XG4gNDg0Olx0XHRcdHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKGNpKTtcbiA0ODU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDg2Olx0XHR9XG4gNDg3Olx0I2VuZGlmXG4gNDg4Olx0XG4gNDg5Olx0XHQvKlxuIDQ5MDpcdFx0ICogTWFrZSB0YWJsZXMgdmlzaWJsZSB0byBjbHVzdGVyX2lzX3VzYWJsZSgpIGFmdGVyIGV2ZXJ5dGhpbmcgaXNcbiA0OTE6XHRcdCAqIHJlYWR5LlxuIDQ5MjpcdFx0ICovXG4gNDkzOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtcbiA0OTQ6XHRcdHJldHVybiAwO1xuIDQ5NTpcdH1cbiA0OTY6XHRcbiA0OTc6XHQvKlxuIDQ5ODpcdCAqIFNhbml0eSBjaGVjayB0byBlbnN1cmUgbm90aGluZyBsZWFrZWQsIGFuZCB0aGUgc3BlY2lmaWVkIHJhbmdlIGlzIGVtcHR5LlxuIDQ5OTpcdCAqIE9uZSBzcGVjaWFsIGNhc2UgaXMgdGhhdCBiYWQgc2xvdHMgY2FuJiMzOTt0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXG4gNTAwOlx0ICogYmFkIHNsb3RzIGZvciBzd2Fwb2ZmLCBhbmQgbm9uLXN3YXBvZmYgcGF0aCBtdXN0IG5ldmVyIGZyZWUgYmFkIHNsb3RzLlxuIDUwMTpcdCAqL1xuIDUwMjpcdHN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiA1MDM6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjaV9vZmYsIHVuc2lnbmVkIGludCBucixcbiA1MDQ6XHRcdFx0XHRcdCAgICAgIGJvb2wgc3dhcG9mZilcbiA1MDU6XHR7XG4gNTA2Olx0XHR1bnNpZ25lZCBpbnQgY2lfZW5kID0gY2lfb2ZmICYjNDM7IG5yO1xuIDUwNzpcdFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDEyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhlc2UgS2VybmVsIElzc3VlcyoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoZXJlIGFyZSBhIGZldyBkaXN0aW5jdCBtZW1vcnktcmVsYXRlZCBwcm9ibGVtcyBoZXJlLCBub25lIG9mIHdoaWNoIGFwcGVhciB0byBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGlzIGEgcmVsaWVmLgoKRmlyc3QsIHRoZXJlJiMzOTtzIGEgY29uY3VycmVuY3kgYnVnLiBJIGNhbiBzZWUgdGhhdCBgdGFibGVgIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgc29tZXRoaW5nIGxpa2UgYF9fR0ZQX1pFUk9gIG9yIGBrbWVtX2NhY2hlX3phbGxvY2AsIGBjaS0mZ3Q7bWVtY2dfdGFibGVgIGdldHMgYWxsb2NhdGVkIHZpYSBga3phbGxvY19vYmpgLCBhbmQgYGNpLSZndDt6ZXJvX2JpdG1hcGAgd2l0aCBgYml0bWFwX3phbGxvY2AuIFRoZSBrZXkgaXNzdWUgaXMgdGhlICpvcmRlciogb2YgaW5pdGlhbGl6YXRpb24gYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIGBjaS0mZ3Q7dGFibGVgIHBvaW50ZXIgaXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIHRocmVhZHMgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgLiBJZiBhbm90aGVyIHRocmVhZCBjYW4gc2VlIGBjaS0mZ3Q7dGFibGVgIGJlZm9yZSBgY2ktJmd0O21lbWNnX3RhYmxlYCBpcyBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCwgaXQmIzM5O3MgZ29pbmcgdG8gZGVyZWZlcmVuY2UgYSBudWxsIHBvaW50ZXIsIGFzc3VtaW5nIHRoYXQgaWYgYGNpLSZndDt0YWJsZWAgaXNuJiMzOTt0IG51bGwsIHRoZW4gYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIGtlcm5lbCBwYW5pYyBvciBLQVNBTiBmaW5kaW5nIGEgcHJvYmxlbSBiZWNhdXNlIG9mIHRoZSBhdHRlbXB0ZWQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLgoKVGhlIHNlY29uZCBpc3N1ZSBpcyB3aXRoaW4gYHN3YXBvbmAgYW5kIHRoZSBmdW5jdGlvbiBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGVyZSB3YXMgYSBsb2dpYyBlcnJvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldC4gVGh1cywgdGhlIGNoZWNrIGBzaS0mZ3Q7ZmxhZ3MgJmFtcDsgU1dQX1NPTElEU1RBVEVgIHdvdWxkIGFsd2F5cyBldmFsdWF0ZSB0byBmYWxzZS4gVGhlIGNvbnNlcXVlbmNlPyBgc2ktJmd0O2dsb2JhbF9jbHVzdGVyYCB3b3VsZCBhbHdheXMgYmUgYWxsb2NhdGVkLCBldmVuIG9uIHNvbGlkLXN0YXRlIGRyaXZlcyB3aGVyZSBpdCBtaWdodCBub3QgYmUgbmVlZGVkLiBUaGlzIGlzIG5vdCBhIG1lbW9yeSByZWFkLCBidXQgYSBtZW1vcnkgbGVhayBhbmQgZ2VuZXJhbCBiZWhhdmlvcmFsIGVycm9yLiBJdCB3b3VsZCBiZSBpbmVmZmljaWVudCBmb3IgU1NEIGRldmljZXMuCgpGaW5hbGx5LCB0aGVyZSYjMzk7cyBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgbG9naWMgd2FzIHRvIGNoZWNrIGlmIGFueSBlbGVtZW50IHdpdGhpbiBgY2ktJmd0O2V4dGVuZF90YWJsZWAgd2FzIG5vbi1udWxsLCBhbmQgdGhlbiBvbmx5IGZyZWUgdGhlIHdob2xlIHRhYmxlIGlmIGFsbCB3ZXJlIG51bGwuIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoaXMsIHJldHVybmluZyBlYXJseSBpZiAqYW55KiBlbnRyeSBpc24mIzM5O3QgbnVsbCwgYW5kIG9ubHkgZnJlZWluZyB0aGUgd2hvbGUgaWYgYWxsIGVudHJpZXMgYXJlIG51bGwuIFRoZSBjb25jZXJuIG5vdyBpcyB0aGUgY2FsbCB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpYCBpbiB0aGUgYGZhaWxlZDpgIHBhdGggb2YgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBgZXh0ZW5kX3RhYmxlYCBtaWdodCBzdGlsbCBiZSBpbiB1c2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZnJlZWluZyB0aGUgdGFibGUgcHJlbWF0dXJlbHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIHVzZXMgdGhpcyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIGRldGVybWluZSBpZiBhIGRvdWJsZS1mcmVlIGlzIHBvc3NpYmxlIG9yIGlmIG1lbW9yeSBpcyBiZWluZyBmcmVlZCBiZWZvcmUgaXQmIzM5O3MgYWN0dWFsbHkgc2FmZSB0byBkbyBzby4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjYWxsZXIgdG8gc2VlIHdoZXRoZXIgb3Igbm90IHRoYXQgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgdGhhdCYjMzk7cyBzdGlsbCBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2OTA6XHRzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4xNjkxOlx0XHRcdFx0XHQgICAgcGdvZmZfdCBvZmZzZXQsIGludCBucilcbjE2OTI6XHR7XG4xNjkzOlx0XHRpbnQgZXJyO1xuMTY5NDpcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbjE2OTU6XHRcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4xNjk2Olx0XG4xNjk3Olx0XHRjaV9zdGFydCA9IG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVI7XG4xNjk4Olx0XHRjaV9lbmQgPSBjaV9zdGFydCAmIzQzOyBucjtcbjE2OTk6XHRcdGNpX29mZiA9IGNpX3N0YXJ0O1xuMTcwMDpcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcbjE3MDE6XHRyZXN0YXJ0OlxuMTcwMjpcdFx0ZG8ge1xuMTcwMzpcdFx0XHRlcnIgPSBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoY2ksIGNpX29mZik7XG4xNzA0Olx0XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4xNzA1Olx0XHRcdFx0aWYgKGVyciA9PSAtRU5PTUVNKSB7XG4xNzA2Olx0XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbjE3MDc6XHRcdFx0XHRcdGVyciA9IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHNpLCBjaSwgY2lfb2ZmLCBHRlBfQVRPTUlDKTtcbjE3MDg6XHRcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbjE3MDk6XHRcdFx0XHRcdGlmICghZXJyKVxuMTcxMDpcdFx0XHRcdFx0XHRnb3RvIHJlc3RhcnQ7XG4xNzExOlx0XHRcdFx0fVxuMTcxMjpcdFx0XHRcdGdvdG8gZmFpbGVkO1xuMTcxMzpcdFx0XHR9XG4xNzE0Olx0XHR9IHdoaWxlICgmIzQzOyYjNDM7Y2lfb2ZmIFx1MDAzYyBjaV9lbmQpO1xuMTcxNTpcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4xNzE2Olx0XHRyZXR1cm4gMDtcbjE3MTc6XHRmYWlsZWQ6XG4xNzE4Olx0XHR3aGlsZSAoY2lfb2ZmLS0gXHUwMDNlIGNpX3N0YXJ0KVxuMTcxOTpcdFx0XHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XG4xNzIwOlx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbjE3MjE6XHRcdHJldHVybiBlcnI7XG4xNzIyOlx0fVxuMTcyMzpcdFxuMTcyNDpcdC8qKlxuMTcyNTpcdCAqIGZvbGlvX2FsbG9jX3N3YXAgLSBhbGxvY2F0ZSBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG4xNzI2Olx0ICogQGZvbGlvOiBmb2xpbyB3ZSB3YW50IHRvIG1vdmUgdG8gc3dhcFxuMTcyNzpcdCAqXG4xNzI4Olx0ICogQWxsb2NhdGUgc3dhcCBzcGFjZSBmb3IgdGhlIGZvbGlvIGFuZCBhZGQgdGhlIGZvbGlvIHRvIHRoZVxuMTcyOTpcdCAqIHN3YXAgY2FjaGUuXG4xNzMwOlx0ICpcbjE3MzE6XHQgKiBDb250ZXh0OiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB0aGUgZm9saW8gbG9jay5cbjE3MzI6XHQgKiBSZXR1cm46IFdoZXRoZXIgdGhlIGZvbGlvIHdhcyBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZS5cbjE3MzM6XHQgKi9cbjE3MzQ6XHRpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTczNTpcdHtcbjE3MzY6XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbjE3Mzc6XHRcdHVuc2lnbmVkIGludCBzaXplID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4xNzM4Olx0XG4xNzM5Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODQxCgkJCQkJCQlvdXRwdXQ6IDMwNwoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBSZWNlbnQgS2VybmVsIENoYW5nZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhleSYjMzk7dmUgcmVtb3ZlZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGZyb20gdGhlIGBmYWlsZWQ6YCBwYXRoLiBJdCBsb29rcyBsaWtlIHRoZSBsb2dpYyBnb2VzOiBhbGxvY2F0ZSB0YWJsZSAoYHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jYCksIGFuZCBpZiB0aGF0ICpmYWlscyosIGl0IGhpdHMgYGZhaWxlZDpgLiBJZiB0aGUgYWxsb2NhdGlvbiAqc3VjY2VlZHMqLCBpdCBnb2VzIHRvIGByZXN0YXJ0OmAuIExhdGVyICpmYWlsdXJlcyogYWxzbyBoaXQgYGZhaWxlZDpgLiBJbiBgZmFpbGVkOmAsIGl0IHVuZG9lcyB0aGUgZHVwbGljYXRlcy4gTXkgZmlyc3QgdGhvdWdodCB3YXMgbWF5YmUgdGhlIGZyZWUgd2FzbiYjMzk7dCBuZWVkZWQgb3Igd2FzIGRhbmdlcm91cyB0byB0aGUgbWVtb3J5IGxheW91dC4gQnV0LCB3YWl0LCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIG9ubHkgZnJlZXMgaWYgKmFsbCogZW50cmllcyBhcmUgTlVMTCwgc28gaXQgd291bGRuJiMzOTt0IGZyZWUgYSB0YWJsZSBpbiB1c2UuIFNvIHdoeSB3YXMgaXQgcmVtb3ZlZD8gTWF5YmUgaXQgd2FzIGp1c3QgcmVkdW5kYW50LiBPciBtYXliZSBpdCAqZGlkKiBjYXVzZSBzb21lIGlzc3VlIHRoZXJlLCBsZWFkaW5nIHRvIGEgYnVnLCB0aGF0IHdhc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXQmIzM5O3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgbm90IGFueSB1bmluaXRpYWxpemVkIHJlYWRzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4KClNvLCBoZXJlJiMzOTtzIHRoZSBvdmVyYWxsIGdpc3Qgb2YgdGhlc2UgY2hhbmdlczoKCjEuICBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYDogRml4ZXMgYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGBjaS0mZ3Q7dGFibGVgIG1pZ2h0IGhhdmUgYmVlbiBwdWJsaXNoZWQgYmVmb3JlIGBjaS0mZ3Q7bWVtY2dfdGFibGVgIGFuZCBgY2ktJmd0O3plcm9fYml0bWFwYCB3ZXJlIGV2ZW4gYWxsb2NhdGVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC4KMi4gIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWA6IFNpbXBsaWZpZXMgYSBsb29wLgozLiAgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmA6IFJlbW92ZXMgdGhpcyBzZWVtaW5nbHkgdW5uZWNlc3NhcnkgY2FsbCB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLgo0LiAgYHN3YXBvbmA6IEZpeGVzIHRoZSBvcmRlciBvZiBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgaXMgY29ycmVjdGx5IHNlZW4sIHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktJmd0O2dsb2JhbF9jbHVzdGVyYC4KCk5vbmUgb2YgdGhlc2UgY2hhbmdlcyB0b3VjaCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mbyBsZWFrcywgb3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gQWxsIHRoZSBhbGxvY2F0aW9ucyBhcmUgemVyb2VkIHVzaW5nIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLCB3aGljaCBpcyBrZXkuIFRoZXNlIGZpeGVzIGFyZSBhbGwgYWJvdXQgcmFjZSBjb25kaXRpb25zLCBsb2dpYyBlcnJvcnMsIGFuZCBzb21lIG1lbW9yeSBsZWFrcy4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgYW5kIHNpbXBsZSBrZXJuZWwgb29wcyBzaG91bGQgY2F0Y2ggYWxsIHRoZXNlIHByb2JsZW1zLiBUaGlzIG1lYW5zIHRoYXQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGZpeGVzLCBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNldmVyYWwgaXNzdWVzIGluIHRoZSBzd2FwIHN1YnN5c3RlbTpcbjEuIEEgcmFjZSBjb25kaXRpb24gaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgd2hlcmUgYGNpLVx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBhbmQgYGNpLVx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGFsbG9jYXRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvbmN1cnJlbnQgdGhyZWFkcyBjYWxsaW5nIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgZm9yIHNvbGlkLXN0YXRlIGRyaXZlcy5cbjMuIE1pbm9yIGNsZWFudXBzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxuXG5BbGwgbWVtb3J5IGFsbG9jYXRpb25zIGludm9sdmVkIChga3Z6YWxsb2Nfb2Jqc2AsIGBremFsbG9jX29iamAsIGBiaXRtYXBfemFsbG9jYCwgYF9fR0ZQX1pFUk9gLCBga21lbV9jYWNoZV96YWxsb2NgKSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYnVncyBmaXhlZCBhcmUgcmFjZSBjb25kaXRpb25zIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbnRyb2wgZmxvdywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBvb3BzIG1lY2hhbmlzbXMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XG4xLiBBIHJhY2UgY29uZGl0aW9uIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgIHdoZXJlIGBjaS1cdTAwM2V0YWJsZWAgd2FzIHB1Ymxpc2hlZCB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAgYmVmb3JlIGBjaS1cdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cdTAwM2V6ZXJvX2JpdG1hcGAgd2VyZSBhbGxvY2F0ZWQuIFRoaXMgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBjb25jdXJyZW50IHRocmVhZHMgY2FsbGluZyBgY2x1c3Rlcl9pc191c2FibGUoKWAuXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgc3dhcG9uYCB3aGVyZSBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIHdhcyBzZXQsIGNhdXNpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXG4zLiBNaW5vciBjbGVhbnVwcyBpbiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYC5cblxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjM5OjA2LjE1MjgxMjUwNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjQzNDI5MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb25cIixcbiAgICBcImZvbGlvX2R1cF9zd2FwXCIsXG4gICAgXCJzd2FwX2R1cF9lbnRyeV9kaXJlY3RcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XFxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXFx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVxcdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxcbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXFxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXFxuXFxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6Mzk6MDYuMTUyODI5ODE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM1ODk3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNmU4MTEyNjE2OWNlMGRiZjU5YjM1ZWU2MTY2MzU2YzBlZTg0ZDY2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDEyOjM5OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggNjE1ZDkwODY3MTExMy4uZmYxYjFmYzM2NGI5MiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC00NjYsOCArNDY2LDYgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRpZiAoIXRhYmxlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihjaS1cXHUwMDNldGFibGUsIHRhYmxlKTtcXG4tXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcXG4gXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVxcdTAwM2VtZW1jZ190YWJsZSk7XFxuQEAgLTQ4Nyw2ICs0ODUsMTIgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiAjZW5kaWZcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE1ha2UgdGFibGVzIHZpc2libGUgdG8gY2x1c3Rlcl9pc191c2FibGUoKSBhZnRlciBldmVyeXRoaW5nIGlzXFxuK1xcdCAqIHJlYWR5LlxcbitcXHQgKi9cXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVxcdTAwM2V0YWJsZSwgdGFibGUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTUxMSwyMCArMTUxNSwxNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxcbiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4tXFx0Ym9vbCBjYW5fZnJlZSA9IHRydWU7XFxuIFxcbiBcXHRpZiAoIWNpLVxcdTAwM2VleHRlbmRfdGFibGUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpKyspIHtcXG4gXFx0XFx0aWYgKGNpLVxcdTAwM2VleHRlbmRfdGFibGVbaV0pXFxuLVxcdFxcdFxcdGNhbl9mcmVlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGNhbl9mcmVlKSB7XFxuLVxcdFxcdGtmcmVlKGNpLVxcdTAwM2VleHRlbmRfdGFibGUpO1xcbi1cXHRcXHRjaS1cXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcXG4tXFx0fVxcbitcXHRrZnJlZShjaS1cXHUwMDNlZXh0ZW5kX3RhYmxlKTtcXG4rXFx0Y2ktXFx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XFxuIH1cXG4gXFxuIC8qIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIG9uZSBzbG90LCB3aXRob3V0IGZyZWVpbmcgaXQgKi9cXG5AQCAtMTcxNiw3ICsxNzE3LDYgQEAgc3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBmYWlsZWQ6XFxuIFxcdHdoaWxlIChjaV9vZmYtLSBcXHUwMDNlIGNpX3N0YXJ0KVxcbiBcXHRcXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XFxuLVxcdHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTtcXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMzU4OCwxMSArMzU4OCw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuIFxcbiBcXHRtYXhwYWdlcyA9IHNpLVxcdTAwM2VtYXg7XFxuIFxcbi1cXHQvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovXFxuLVxcdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xcbi1cXG4gXFx0aWYgKHNpLVxcdTAwM2ViZGV2IFxcdTAwMjZcXHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cXHUwMDNlYmRldikpXFxuIFxcdFxcdHNpLVxcdTAwM2VmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUztcXG4gXFxuQEAgLTM2MDYsNiArMzYwMSwxNCBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxcbiBcXHRcXHRpbmNlZF9ucl9yb3RhdGVfc3dhcCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gYWZ0ZXIgU1dQXyBmbGFncyBoYW5kbGluZyBhc1xcbitcXHQgKiBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oKSBjaGVja3MgU1dQX1NPTElEU1RBVEUuXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTtcXG4rXFxuIFxcdGlmICgoc3dhcF9mbGFncyBcXHUwMDI2IFNXQVBfRkxBR19ESVNDQVJEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgc2ktXFx1MDAzZWJkZXYgXFx1MDAyNlxcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVxcdTAwM2ViZGV2KSkge1xcbiBcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOTowNi44MTc0Mzk5ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDI0OTEzNzEzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9uXCIsXG4gICAgXCJmb2xpb19kdXBfc3dhcFwiLFxuICAgIFwic3dhcF9kdXBfZW50cnlfZGlyZWN0XCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZlODExMjYxNjljZTBkYmY1OWIzNWVlNjE2NjM1NmMwZWU4NGQ2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDEyOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDYxNWQ5MDg2NzExMTMuLmZmMWIxZmMzNjRiOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtNDY2LDggKzQ2Niw2IEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4tXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbkBAIC00ODcsNiArNDg1LDEyIEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gI2VuZGlmXG4rXG4rXHQvKlxuK1x0ICogTWFrZSB0YWJsZXMgdmlzaWJsZSB0byBjbHVzdGVyX2lzX3VzYWJsZSgpIGFmdGVyIGV2ZXJ5dGhpbmcgaXNcbitcdCAqIHJlYWR5LlxuK1x0ICovXG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNTExLDIwICsxNTE1LDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gc3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcbiBcbiBcdGlmICghY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpKyspIHtcbiBcdFx0aWYgKGNpLVx1MDAzZWV4dGVuZF90YWJsZVtpXSlcbi1cdFx0XHRjYW5fZnJlZSA9IGZhbHNlO1xuK1x0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChjYW5fZnJlZSkge1xuLVx0XHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuLVx0XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuLVx0fVxuK1x0a2ZyZWUoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKTtcbitcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4gfVxuIFxuIC8qIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIG9uZSBzbG90LCB3aXRob3V0IGZyZWVpbmcgaXQgKi9cbkBAIC0xNzE2LDcgKzE3MTcsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gZmFpbGVkOlxuIFx0d2hpbGUgKGNpX29mZi0tIFx1MDAzZSBjaV9zdGFydClcbiBcdFx0X19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpO1xuLVx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0zNTg4LDExICszNTg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcbiBcdG1heHBhZ2VzID0gc2ktXHUwMDNlbWF4O1xuIFxuLVx0LyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqL1xuLVx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuLVxuIFx0aWYgKHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cdTAwM2ViZGV2KSlcbiBcdFx0c2ktXHUwMDNlZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7XG4gXG5AQCAtMzYwNiw2ICszNjAxLDE0IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG4gXHRcdGluY2VkX25yX3JvdGF0ZV9zd2FwID0gdHJ1ZTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbitcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cbitcdCAqL1xuK1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuK1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOTowNi44MTc0NDI1MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDYwOTkzMjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBTdWJzeXN0ZW0gUGF0Y2ggZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vc3dhcGZpbGUuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIHRvdWNoaW5nIHRoZSBzd2FwIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHNvbWUgZnVuY3Rpb24gY2hhbmdlcy4gSSBzZWUgdGhlc2Ugc3BlY2lmaWMgY2hhbmdlczogdGhlIGFzc2lnbm1lbnQgb2YgdGhlIHN3YXAgdGFibGUgaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgaGFzIGJlZW4gbW92ZWQ7IHRoZSBsb2dpYyBpbiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGhhcyBiZWVuIHNpbXBsaWZpZWQsIGFuZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGhhcyBiZWVuIHJlbW92ZWQgaW4gYSBjZXJ0YWluIGVycm9yIHBhdGggaW4gYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmA7IGFuZCBmaW5hbGx5LCBhIHJlb3JkZXJpbmcgb2YgY2FsbHMgd2l0aGluIGBzeXNfc3dhcG9uYCwgbW92aW5nIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGRvd24gdGhlIGNhbGwgc3RhY2suXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIG5ldyB2dWxuZXJhYmlsaXRpZXM/IE9yLCBtb3JlIGltcG9ydGFudGx5IGZvciBmdXp6aW5nLCBhcmUgdGhleSBjcmVhdGluZyBhbnkgbmV3IGludGVyZXN0aW5nIGNvZGUgcGF0aHM/XG5cbkknbSBxdWlja2x5IGNoZWNraW5nIHJlYWNoYWJpbGl0eS4gIGBzeXNfc3dhcG9uYCBpcyBhIHN5c2NhbGwgc28gZGVmaW5pdGVseSByZWFjaGFibGUuIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgIGlzIHJlYWNoYWJsZSB0b28uIEFuZCBJIHNlZSBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBhcmUgYWxzbyByZWFjaGFibGUuIEhvd2V2ZXIsIGFoLCBJIHNlZSwgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgYXJlIGBzdGF0aWNgLiAgVGhhdCBsaW1pdHMgaG93IGVhc2lseSBJIGNhbiBkaXJlY3RseSB0YXJnZXQgdGhlbS4gYHN5c19zd2Fwb25gIGlzIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGFuZCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AgaXMgbm90IGBzdGF0aWNgLlxuXG5UaGUgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFRodXMsIEknbGwgbmVlZCB0byBmb2N1cyBvbiBlbnRyeSBwb2ludHMgYW5kIGFueSBmdW5jdGlvbnMgdGhhdCBhcmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIGZpbGUuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIEkgc2VlIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgYW5kIGBzeXNfc3dhcG9uYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCBjYWxscyBpbnRvIHRoZW0gdG8gaWRlbnRpZnkgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgc3RhY2tzLiBTaW5jZSBpdCdzIGEgY3JpdGljYWwgYXJlYSwgSSdsbCBzdGFydCB3aXRoIGBzeXNfc3dhcG9uYCBhbmQgdGhlbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYC4gSSdsbCBncmVwIGZvciB0aGUgbGF0dGVyIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjM5OjE3LjQyNzM4MzY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjM1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9NDIxPXN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTQ0OC1cXG5tbS9zd2FwZmlsZS5jOjQ0OTpzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXFxubW0vc3dhcGZpbGUuYy00NTAte1xcbi0tXFxubW0vc3dhcGZpbGUuYz01MzE9c3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNTQ0LVxcbm1tL3N3YXBmaWxlLmM6NTQ1OlxcdGlmICghc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XFxubW0vc3dhcGZpbGUuYy01NDYtXFx0XFx0XFx0XFx0XFx0ICBfX0dGUF9OT1dBUk4pKVxcbi0tXFxubW0vc3dhcGZpbGUuYy01NTgtXFxubW0vc3dhcGZpbGUuYzo1NTk6XFx0cmV0ID0gc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XFxubW0vc3dhcGZpbGUuYy01NjAtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTc5MT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTgxOC1cXHQvKiBOZWVkIHRvIGFsbG9jYXRlIHN3YXAgdGFibGUgZmlyc3QgZm9yIGluaXRpYWwgYmFkIHNsb3QgbWFya2luZy4gKi9cXG5tbS9zd2FwZmlsZS5jOjgxOTpcXHRpZiAoIWNpLVxcdTAwM2Vjb3VudCBcXHUwMDI2XFx1MDAyNiBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoY2ksIEdGUF9LRVJORUwpKVxcbm1tL3N3YXBmaWxlLmMtODIwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOToxNy40ODk2MzgwOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTM2MjE2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIENsdXN0ZXIgUG9wdWxhdGlvbiBpbiB0aGUgU3dhcCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYCBpcyBiZWluZyBpbnZva2VkIGJ5IGBzd2FwX2FsbG9jX2NsdXN0ZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGV4cGVjdGVkIGNhbGwgY2hhaW4uIEknbGwgbWVudGFsbHkgd2FsayB0aHJvdWdoIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3Mg4oCTIGBzd2FwX2FsbG9jX2NsdXN0ZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIG9yIGNyZWF0aW5nIGEgc3dhcCBjbHVzdGVyLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0LCBhZnRlciBhbGxvY2F0aW5nIG9uZSwgaXQgd291bGQgKnRoZW4qIGhhbmQgb2ZmIHBvcHVsYXRpb24uIEJ1dCBJIGNhbid0IGFzc3VtZS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSB1bmV4cGVjdGVkIGVudHJ5IHBvaW50cywgb3IsIHdvcnNlLCB1bmludGVuZGVkIHJlY3Vyc2l2ZSBjYWxscyBvciBkYXRhIHJhY2VzIGhlcmUuIEEgcXVpY2sgY29kZSBkaXZlIHRvIHRyYWNlIHRoZSBjYWxsZXIvY2FsbGVlIHJlbGF0aW9uc2hpcHMgaXMgdGhlIG5leHQgc3RlcC4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgdGhlIGNsdXN0ZXIgcG9wdWxhdGlvbiBlbnRhaWxzLi4uIGlzIGl0IGp1c3QgemVyb2luZywgb3IgYXJlIHdlIGxvYWRpbmcgYWN0dWFsIGRhdGEgaW1tZWRpYXRlbHk/IFRoZSBsYXR0ZXIgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6Mzk6MjYuNjI1ODYyMjg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDU4ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2x1c3Rlcl9wb3B1bGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9NTMwPXN0YXRpYyBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKlxcbm1tL3N3YXBmaWxlLmM6NTMxOnN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy01MzItXFx0XFx0XFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTYyNz1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3RlcihcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNjU0LVxcdFxcdFZNX1dBUk5fT05fT05DRShjbHVzdGVyX3RhYmxlX2lzX2FsbG9jZWQoZm91bmQpKTtcXG5tbS9zd2FwZmlsZS5jOjY1NTpcXHRcXHRyZXR1cm4gc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHNpLCBmb3VuZCk7XFxubW0vc3dhcGZpbGUuYy02NTYtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjozOToyNi43MTUzMzMwOTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU5MzAxMjE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYGlzb2xhdGVfbG9ja19jbHVzdGVyYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpc29sYXRlX2xvY2tfY2x1c3RlcmAgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcm9iYWJseSB0aGlua2luZyBhYm91dCBhIGZldyBzcGVjaWZpYyBhc3BlY3RzIGltbWVkaWF0ZWx5LiBJcyBpdCBjb3JyZWN0bHkgaXNvbGF0aW5nIGxvY2stcmVsYXRlZCBvcGVyYXRpb25zIGZyb20gb3RoZXIgY2x1c3RlciBmdW5jdGlvbmFsaXRpZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpc29sYXRpb24sIHBlcmZvcm1hbmNlLXdpc2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGludHJvZHVjZWQsIG9yIGFyZSB3ZSBhY2hpZXZpbmcgdGhlIGV4cGVjdGVkIGJlbmVmaXRzIGluIHRlcm1zIG9mIGNvbmN1cnJlbmN5IGFuZCBmYXVsdCBpc29sYXRpb24/XG5cbkknbGwgYmUgbG9va2luZyBhdCB0aGUgY29kZSBmb3IgdGhhdCBtb2R1bGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgbWFuYWdlcyByZXNvdXJjZSBjb250ZW50aW9uLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yIHVuZGVyIGhpZ2ggbG9hZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaXQncyByZXNwZWN0aW5nIGFueSB1bmRlcmx5aW5nIGxvY2sgc2VtYW50aWNzIHdlJ3ZlIGRlZmluZWQgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIGRpc3RyaWJ1dGVkIGNvbnNlbnN1cyBtZWNoYW5pc21zIChpZiBhbnkpIGFzIGludGVuZGVkLiBJJ2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIGEgZmV3IGVkZ2UgY2FzZSBzY2VuYXJpb3MgdG8gbWFrZSBzdXJlIHdlIGFyZSBub3QgZmFjaW5nIGFueSB1bmV4cGVjdGVkIHByb2JsZW1zLiBJIHdpbGwgbG9vayBmb3IgYW55IHBvdGVudGlhbCB0aHJlYWQgc2FmZXR5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMsIHRvby4gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBjbHVzdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTI1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6Mzk6NTguMzA4MzQ4MTQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNzY1NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzb2xhdGVfbG9ja19jbHVzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz02MTA9c3RhdGljIHZvaWQgX19mcmVlX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy02MjYtICovXFxubW0vc3dhcGZpbGUuYzo2Mjc6c3RhdGljIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoXFxubW0vc3dhcGZpbGUuYy02MjgtXFx0XFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vc3dhcGZpbGUuYz0xMDE5PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMDI2LVxcdGRvIHtcXG5tbS9zd2FwZmlsZS5jOjEwMjc6XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IGlzb2xhdGVfbG9ja19jbHVzdGVyKHNpLCBsaXN0KTtcXG5tbS9zd2FwZmlsZS5jLTEwMjgtXFx0XFx0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwNDE9c3RhdGljIHZvaWQgc3dhcF9yZWNsYWltX2Z1bGxfY2x1c3RlcnMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBib29sIGZvcmNlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMDUxLVxcbm1tL3N3YXBmaWxlLmM6MTA1MjpcXHR3aGlsZSAoKGNpID0gaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoc2ksIFxcdTAwMjZzaS1cXHUwMDNlZnVsbF9jbHVzdGVycykpKSB7XFxubW0vc3dhcGZpbGUuYy0xMDUzLVxcdFxcdG9mZnNldCA9IGNsdXN0ZXJfb2Zmc2V0KHNpLCBjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjM5OjU4LjM5MTEyMDUzN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTYzOTgxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBTd2FwIFJlY2xhbWF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBzd2FwIHJlY2xhbWF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBtYW5hZ2luZyBpdHMgc3dhcCBzcGFjZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgYGFsbG9jX3N3YXBfc2Nhbl9saXN0YCBhbmQgYHN3YXBfcmVjbGFpbV9mdWxsX2NsdXN0ZXJzYC4gVGhlc2UgdHdvIGFyZSBsaWtlbHkga2V5IHBsYXllcnMgaW4gaG93IHdlIGlkZW50aWZ5LCBwcmlvcml0aXplLCBhbmQgdWx0aW1hdGVseSBoYW5kbGUgc3dhcCBzcGFjZSB0aGF0J3MgZWl0aGVyIGF2YWlsYWJsZSBmb3IgdXNlLCBvciBjdXJyZW50bHkgaG9sZGluZyBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgdXAuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgcmVjbGFpbWluZyBmdWxsIGNsdXN0ZXJzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIG92ZXJhbGwgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSSBhbnRpY2lwYXRlIHRoZXNlIHdpbGwgcHJvdmlkZSBhIGNsZWFyIGluc2lnaHQgaW50byB0aGUga2VybmVsJ3Mgc3dhcCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQwOjA4LjIwNzUyMjMxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMjEzMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3N3YXBfc2Nhbl9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz05Njg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEwMTgtXFxubW0vc3dhcGZpbGUuYzoxMDE5OnN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMTAyMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTA5Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbHVzdGVyX2FsbG9jX3N3YXBfZW50cnkoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTM1LVxcdGlmIChzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfUEFHRV9ESVNDQVJEKSB7XFxubW0vc3dhcGZpbGUuYzoxMTM2OlxcdFxcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2xpc3Qoc2ksIFxcdTAwMjZzaS1cXHUwMDNlZnJlZV9jbHVzdGVycywgZm9saW8sIGZhbHNlKTtcXG5tbS9zd2FwZmlsZS5jLTExMzctXFx0XFx0aWYgKGZvdW5kKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTQxLVxcdGlmIChvcmRlciBcXHUwMDNjIFBNRF9PUkRFUikge1xcbm1tL3N3YXBmaWxlLmM6MTE0MjpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZW5vbmZ1bGxfY2x1c3RlcnNbb3JkZXJdLCBmb2xpbywgdHJ1ZSk7XFxubW0vc3dhcGZpbGUuYy0xMTQzLVxcdFxcdGlmIChmb3VuZClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTE0Ny1cXHRpZiAoIShzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfUEFHRV9ESVNDQVJEKSkge1xcbm1tL3N3YXBmaWxlLmM6MTE0ODpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZWZyZWVfY2x1c3RlcnMsIGZvbGlvLCBmYWxzZSk7XFxubW0vc3dhcGZpbGUuYy0xMTQ5LVxcdFxcdGlmIChmb3VuZClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTE2My1cXHRcXHQgKi9cXG5tbS9zd2FwZmlsZS5jOjExNjQ6XFx0XFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fbGlzdChzaSwgXFx1MDAyNnNpLVxcdTAwM2VmcmFnX2NsdXN0ZXJzW29yZGVyXSwgZm9saW8sIGZhbHNlKTtcXG5tbS9zd2FwZmlsZS5jLTExNjUtXFx0XFx0aWYgKGZvdW5kKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTc3LVxcdFxcdCAqL1xcbm1tL3N3YXBmaWxlLmM6MTE3ODpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZWZyYWdfY2x1c3RlcnNbb10sIGZvbGlvLCB0cnVlKTtcXG5tbS9zd2FwZmlsZS5jLTExNzktXFx0XFx0aWYgKGZvdW5kKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMTgxLVxcbm1tL3N3YXBmaWxlLmM6MTE4MjpcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9saXN0KHNpLCBcXHUwMDI2c2ktXFx1MDAzZW5vbmZ1bGxfY2x1c3RlcnNbb10sIGZvbGlvLCB0cnVlKTtcXG5tbS9zd2FwZmlsZS5jLTExODMtXFx0XFx0aWYgKGZvdW5kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDowOC4zMDc3NDQwMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NjM0MjI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlRyYWNpbmcgdGhlIEFsbG9jYXRpb24gUGF0aCBmb3IgU3dhcCBFbnRyaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgc3dhcCBlbnRyaWVzIGFyZSBhbGxvY2F0ZWQgYW5kIGl0IGxvb2tzIGxpa2UgYGNsdXN0ZXJfYWxsb2Nfc3dhcF9lbnRyeWAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZS4gVGhlIGNhbGwgc3RhY2sgcmV2ZWFscyB0aGUgZm9sbG93aW5nOiBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCBnZXRzIGNhbGxlZCBieSBgZ2V0X3N3YXBfcGFnZXNgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgYWRkX3RvX3N3YXBgLiBBbmQsIGNyaXRpY2FsbHksIGBhZGRfdG9fc3dhcGAgaXMgdWx0aW1hdGVseSByZWFjaGVkIHRocm91Z2ggYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgcGFnZSByZWNsYWltIHByb2Nlc3MuIFRoYXQgbWVhbnMgdGhlcmUncyBhIGRlZmluaXRlIHBhdGggdG8gdGhpcyBmdW5jdGlvbiwgYW5kIGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBzd2FwIG1lY2hhbmlzbS4gVGhpcyBpcyByZWFjaGFibGUsIHNvIEkgc2hvdWxkIGludmVzdGlnYXRlIGl0IGZ1cnRoZXIuXG5cbk5leHQsIEkgdGhpbmsgSSdsbCBkaXZlIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDA6MTIuOTY0MDkxMTU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4MjM4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9kdXBfZW50cmllc19jbHVzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNjQwPXN0YXRpYyBpbnQgX19zd2FwX2NsdXN0ZXJfZHVwX2VudHJ5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2NzktLyoqXFxubW0vc3dhcGZpbGUuYzoxNjgwOiAqIHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcjogSW5jcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygc2xvdHMgd2l0aGluIG9uZSBjbHVzdGVyLlxcbm1tL3N3YXBmaWxlLmMtMTY4MS0gKiBAc2k6IFRoZSBzd2FwIGRldmljZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTY4OS0gKi9cXG5tbS9zd2FwZmlsZS5jOjE2OTA6c3RhdGljIGludCBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMTY5MS1cXHRcXHRcXHRcXHQgICAgcGdvZmZfdCBvZmZzZXQsIGludCBucilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTc5OD1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4MTAtXFxubW0vc3dhcGZpbGUuYzoxODExOlxcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSxcXG5tbS9zd2FwZmlsZS5jLTE4MTItXFx0XFx0XFx0XFx0XFx0c3dwX29mZnNldChlbnRyeSksIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9Mzc1MD1pbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zNzY2LVxcbm1tL3N3YXBmaWxlLmM6Mzc2NzpcXHRyZXR1cm4gc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSwgMSk7XFxubW0vc3dhcGZpbGUuYy0zNzY4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDA6MTMuNDM1OTIzNjkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDQ2MDkwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKlBURSBTd2FwcGluZyBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBpbnZvbHZpbmcgYGZvbGlvX2R1cF9zd2FwYC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqPyBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBgbW0vbWVtb3J5LmNgLCBhbmQgc3BlY2lmaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3ByZXNlbnRfcHRlYCBvciBhbnl0aGluZyB0aGF0IGhhbmRsZXMgUFRFIChQYWdlIFRhYmxlIEVudHJ5KSBkdXBsaWNhdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgc2luY2UgdGhpcyBpcyByZWxhdGVkIHRvIHN3YXBwaW5nLCBgZm9saW9fZHVwX3N3YXBgIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgbmV3IHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhIHBoeXNpY2FsIHBhZ2UgdGhhdCBtaWdodCBiZSBnb2luZyB0aHJvdWdoLCBvciBqdXN0IGNhbWUgb3V0IG9mLCBzd2FwLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gcXVpY2tseS4gTXkgbmV4dCBtb3ZlIHdpbGwgYmUgdG8gY2hlY2sgdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGFuZCBzZWUgaWYgYGZvbGlvX2R1cF9zd2FwYCBpcyBpbmRlZWQgcHJlc2VudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgaW4gd2hpY2ggdGhlIHN3YXAgZHVwbGljYXRpb24gaXMgaGFwcGVuaW5nLiBJcyBpdCBkdXJpbmcgYSBmb3JrPyBDT1cgKENvcHktb24tV3JpdGUpPyBQZXJoYXBzIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nIHdoZW4gcmVzdG9yaW5nIGEgc3dhcHBlZC1vdXQgcGFnZT8gS25vd2luZyB0aGUgY2FsbGVyIGlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoxNy40NDA1MzY1MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxOTQ4NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2R1cF9zd2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTIyODMtXFxubW0vcm1hcC5jOjIyODQ6XFx0XFx0XFx0aWYgKGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBzdWJwYWdlKSBcXHUwMDNjIDApIHtcXG5tbS9ybWFwLmMtMjI4NS1cXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG4tLVxcbm1tL3NobWVtLmM9MTU5Mz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXFxuLS1cXG5tbS9zaG1lbS5jLTE3MDAtXFxubW0vc2htZW0uYzoxNzAxOlxcdFxcdGZvbGlvX2R1cF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jLTE3MDItXFx0XFx0c2htZW1fZGVsZXRlX2Zyb21fcGFnZV9jYWNoZShmb2xpbywgc3dwX3RvX3JhZGl4X2VudHJ5KGZvbGlvLVxcdTAwM2Vzd2FwKSk7XFxuLS1cXG5tbS9zd2FwLmg9MjExPWV4dGVybiBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3N3YXAuaC0yMjQtICpcXG5tbS9zd2FwLmg6MjI1OiAqIGZvbGlvX2R1cF9zd2FwKCk6IGluY3JlYXNlcyB0aGUgc3dhcCBjb3VudCBvZiBhIGZvbGlvLCB1c3VhbGx5XFxubW0vc3dhcC5oLTIyNi0gKiBkdXJpbmcgaXQgZ2V0cyB1bm1hcHBlZCBhbmQgYSBzd2FwIGVudHJ5IGlzIGluc3RhbGxlZCB0byByZXBsYWNlXFxuLS1cXG5tbS9zd2FwLmgtMjI5LSAqXFxubW0vc3dhcC5oOjIzMDogKiBmb2xpb19wdXRfc3dhcCgpOiBkb2VzIHRoZSBvcHBvc2l0ZSB0aGluZyBvZiBmb2xpb19kdXBfc3dhcCgpLlxcbm1tL3N3YXAuaC0yMzEtICovXFxubW0vc3dhcC5oPTIzMj1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9zd2FwLmg6MjMzOmludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSk7XFxubW0vc3dhcC5oLTIzNC12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpzdWJwYWdlKTtcXG4tLVxcbm1tL3N3YXAuaD0zNzA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcC5oLTM3NC1cXG5tbS9zd2FwLmg6Mzc1OnN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2R1cF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL3N3YXAuaC0zNzYte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNzM0PWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3ODEtLyoqXFxubW0vc3dhcGZpbGUuYzoxNzgyOiAqIGZvbGlvX2R1cF9zd2FwKCkgLSBJbmNyZWFzZSBzd2FwIGNvdW50IG9mIHN3YXAgZW50cmllcyBvZiBhIGZvbGlvLlxcbm1tL3N3YXBmaWxlLmMtMTc4My0gKiBAZm9saW86IGZvbGlvIHdpdGggc3dhcCBlbnRyaWVzIGJvdW5kZWQuXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3OTctICovXFxubW0vc3dhcGZpbGUuYzoxNzk4OmludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSlcXG5tbS9zd2FwZmlsZS5jLTE3OTkte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xOTkwPWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMDE2LSAqIGdvIGZyb20gbm90LXN3YXBwZWQgdG8gc3dhcHBlZCBiZWNhdXNlIHRoZSBpbml0aWFsIHN3YXAgY291bnQgaW5jcmVtZW50IGNhblxcbm1tL3N3YXBmaWxlLmM6MjAxNzogKiBvbmx5IGJlIGRvbmUgYnkgZm9saW9fZHVwX3N3YXAsIHdoaWNoIGFsc28gbG9ja3MgdGhlIGZvbGlvLiBCdXQgYSBjb25jdXJyZW50XFxubW0vc3dhcGZpbGUuYy0yMDE4LSAqIGRlY3JlYXNlIG9mIHN3YXAgY291bnQgaXMgcG9zc2libGUgdGhyb3VnaCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCwgc28gdGhpc1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNzE5PXZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzc0Ni0gKiBvd25lci4gZS5nLiwgbG9ja2luZyB0aGUgUFRMIG9mIGEgUFRFIGNvbnRhaW5pbmcgdGhlIGVudHJ5IGJlaW5nIGluY3JlYXNlZC5cXG5tbS9zd2FwZmlsZS5jOjM3NDc6ICogQWxzbyB0aGUgc3dhcCBlbnRyeSBtdXN0IGhhdmUgYSBjb3VudCBcXHUwMDNlPSAxLiBPdGhlcndpc2UgZm9saW9fZHVwX3N3YXAgc2hvdWxkXFxubW0vc3dhcGZpbGUuYy0zNzQ4LSAqIGJlIHVzZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQwOjE3LjUzMjQ4OTg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODM4MjIwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IC0gRHVwbGljYXRlIFN3YXBzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGR1cGxpY2F0ZSBlbnRyaWVzIGFuZCBzd2FwcyBhcmUgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBgZm9saW9fZHVwX3N3YXBgIGlzIGludm9rZWQgZnJvbSB0d28gcHJpbWFyeSBsb2NhdGlvbnM6IGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHNobWVtX3dyaXRlb3V0YC4gVGhhdCBtYWtlcyBzZW5zZSAtIHdoZW4gd2UncmUgdW5tYXBwaW5nIG9yIHdyaXRpbmcgYmFjayBzaGFyZWQgbWVtb3J5LCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWxseSBkdXBsaWNhdGVkIHN3YXAgZW50cmllcy4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuLi4gSSAqdGhpbmsqIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgIGdldHMgY2FsbGVkIGZyb20gYGNvcHlfcHJlc2VudF9wdGVgLCBidXQgSSB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB0byBtYWtlIHN1cmUgbXkgbWVudGFsIG1vZGVsIGlzIGFjY3VyYXRlLiBHb29kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrcywgdG8gZW5zdXJlIEkgaGF2ZW4ndCBmb3Jnb3R0ZW4gdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQwOjIxLjAxNjMxNTUwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MTg2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9kdXBfZW50cnlfZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1Mi1cXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xcbm1tL21lbW9yeS5jOjk1MzpcXHRcXHRpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSBcXHUwMDNjIDApXFxubW0vbWVtb3J5LmMtOTU0LVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNzE5PXZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzczNi0vKlxcbm1tL3N3YXBmaWxlLmM6MzczNzogKiBzd2FwX2R1cF9lbnRyeV9kaXJlY3QoKSAtIEluY3JlYXNlIHJlZmVyZW5jZSBjb3VudCBvZiBhIHN3YXAgZW50cnkgYnkgb25lLlxcbm1tL3N3YXBmaWxlLmMtMzczOC0gKiBAZW50cnk6IGZpcnN0IHN3YXAgZW50cnkgZnJvbSB3aGljaCB3ZSB3YW50IHRvIGluY3JlYXNlIHRoZSByZWZjb3VudC5cXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzc0OS0gKi9cXG5tbS9zd2FwZmlsZS5jOjM3NTA6aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSlcXG5tbS9zd2FwZmlsZS5jLTM3NTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyMS4wOTg3NDEzMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3Njg1MjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipGb2N1c2luZyBpbiBvbiB0aGUgU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IGNvbm5lY3Rpb24gbWFrZXMgbWUgdGhpbmsgdGhhdCBgc3lzX3N3YXBvbmAsIGBmb2xpb19kdXBfc3dhcGAsIGFuZCwgb2YgY291cnNlLCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YCBpdHNlbGYgYXJlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzd2FwIHNwYWNlLiBUbyBkaWcgZGVlcGVyLCBJIHRoaW5rIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgc3lzX3N3YXBvbmAsIHdoaWNoIEkgYmVsaWV2ZSBpcyBkZWZpbmVkIGluIGBtbS9zd2FwZmlsZS5jYC4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyNC45NzU1OTY5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTQyNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FMlxcXFwoc3dhcG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0zNDA3PXN0YXRpYyBpbnQgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzQ4Ni1cXG5tbS9zd2FwZmlsZS5jOjM0ODc6U1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcXG5tbS9zd2FwZmlsZS5jLTM0ODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyNS4xMTExNDg3NTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjYxMDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFN3YXBvbiBTeXN0ZW0gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgc3lzX3N3YXBvbmAgc3lzdGVtIGNhbGwuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIG5lZWRpbmcgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseS4gUmlnaHQsIGBDT05GSUdfU1dBUGAgc2VlbXMgdG8gYmUgdGhlIGtleSBmb3IgYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gTmV4dCBzdGVwLCBJJ2xsIGdvIHJpZ2h0IGZvciBgbW0vTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWxsIGJ1aWx0IGFuZCBsaW5rZWQgdG9nZXRoZXIuIFRoaXMgaXMgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIG1vcmUgYnJlYWRjcnVtYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MDksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MDoyOC44NzM3NjM1ODVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjM1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBmaWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDA6MjguOTY0MDA0ODAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDU5MzQ0MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19TV0FQYCwgZGVmaW5pdGVseSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBIYW5nIG9uLCBJIHNlZSBgQ09ORklHX01FTUNHYCBtZW50aW9uZWQgdG9vIGluIHRoZSBjb2RlIGJsb2NrOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX01FTUNHXG5cdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG5cdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbmBgYFxuXG5UaGUgcGF0Y2gganVzdCBzaGlmdHMgYSBsaW5lIG9mIGNvZGUgKGByY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtgKSBiZWxvdyB0aGF0IGAjaWZkZWZgIGJsb2NrLiAgU28gaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpc24ndCAqc3RyaWN0bHkqIHJlcXVpcmVkIGZvciB0aGUgYnVnLCBidXQgaXQgY291bGQgZGVmaW5pdGVseSBiZSByZWxhdGVkIHNvbWVob3cuIEknbGwgaW5jbHVkZSBib3RoIGBTV0FQYCBhbmQgYE1FTUNHYCBpbiBteSBhbmFseXNpcyB0byBiZSBzYWZlLlxuXG5Ob3csIHRoZSBzeXNjYWxsIG5hbWUgaXMgYHN5c19zd2Fwb25gLCByaWdodD8gVGhvdWdoIHNvbWV0aW1lcyB0aGV5IHVzZSBgX194NjRfc3lzX3N3YXBvbmAgb3IgYHN3YXBvbmAuIEhtbSwgaXQncyBnZW5lcmFsbHkgYmVzdCB0byB1c2UgdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGZvciBGb2N1c1N5bWJvbHMsIGJ1dCBmb3Igc3l6a2FsbGVyLCBgc3lzX3N3YXBvbmAgaXMgdGhlIHN0YW5kYXJkIG5hbWUgZm9yIHRoZSBlbnRyeSBwb2ludC4gT2theSwgSSByZWNhbGwgbm93OiBgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgLi4uKWAgZ2VuZXJhdGVzIGJvdGggYHN5c19zd2Fwb25gIGFuZCBgX194NjRfc3lzX3N3YXBvbmAuIEknbGwganVzdCBnbyB3aXRoIGBzeXNfc3dhcG9uYC4gVGhhdCdzIHRoZSBtb3N0IGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbnRyeSBwb2ludCwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuXG5cblRpbWUgdG8gcmV2aXNpdCBzb21lIHJlbGF0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHN1cmUuIExldCdzIGxvb2sgYXQgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgYW5kIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAsIHRob3NlIGFyZSBgc3RhdGljYC4gU28gSSBjYW4gaWdub3JlIHRoZW0uIGBmb2xpb19kdXBfc3dhcGAgYW5kIGBzd2FwX2R1cF9lbnRyeV9kaXJlY3RgIGFyZW4ndCBzdGF0aWMgdGhvdWdoLiBBbmQgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgaXMuIEFscmlnaHQsIG1vdmluZyBvbiB0byBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjA3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQxOjEyLjAyMzM1NDE2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MjU5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTQ2MT1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTQ5Ni1cXG5tbS9zd2FwZmlsZS5jOjE0OTc6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG5tbS9zd2FwZmlsZS5jLTE0OTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MToxMi4wODgxOTE5MDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwODI4NjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCdzIFNjb3BlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLiBUaGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljIGltbWVkaWF0ZWx5IHRocm93cyB1cCBhIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi4gSWYgaXQncyBub3Qgc3RhdGljLCBpdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLCBtYXliZSBldmVuIGZyb20gY29tcGxldGVseSBkaWZmZXJlbnQgbW9kdWxlcy4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCByb2xlIGluIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBncmFwaCBhbmQgZGV0ZXJtaW5lIHByZWNpc2VseSB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIElzIGl0IHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIG9yIGRvZXMgaXQgaGF2ZSBleHRlcm5hbCBjYWxsZXJzPyBUaGlzIHdpbGwgaW5mbHVlbmNlIG15IGFuYWx5c2lzIG9mIGl0cyBzYWZldHksIHRoZSBwb3RlbnRpYWwgZm9yIHNpZGUgZWZmZWN0cywgYW5kIGhvdyBhbnkgY2hhbmdlcyBtaWdodCByaXBwbGUgdGhyb3VnaCB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQxOjIwLjQ5NjQ4MjIxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzODU4NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9MTIyND1jb3B5X3B0ZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTEzNTEtXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFlbnRyeS52YWwpO1xcbm1tL21lbW9yeS5jOjEzNTI6XFx0XFx0aWYgKHN3YXBfcmV0cnlfdGFibGVfYWxsb2MoZW50cnksIEdGUF9LRVJORUwpIFxcdTAwM2MgMCkge1xcbm1tL21lbW9yeS5jLTEzNTMtXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbm1tL3N3YXAuaD0yMDY9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9zd2FwLmgtMjEwLVxcbm1tL3N3YXAuaDoyMTE6ZXh0ZXJuIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApO1xcbm1tL3N3YXAuaC0yMTItXFxuLS1cXG5tbS9zd2FwLmg9NDMwPXN0YXRpYyBpbmxpbmUgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXAuaC00MzUtXFxubW0vc3dhcC5oOjQzNjpzdGF0aWMgaW5saW5lIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxubW0vc3dhcC5oLTQzNy17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE0NjE9c3RhdGljIGludCBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE0OTYtXFxubW0vc3dhcGZpbGUuYzoxNDk3OmludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxubW0vc3dhcGZpbGUuYy0xNDk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDE6MjAuNTU5ODc3MzQ0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODYzMjI1Njg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTd2FwLVJlbGF0ZWQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byBpZGVudGlmeSBzdWl0YWJsZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJ3ZlIHRyYWNlZCB0aGUgY2FsbCBwYXRoIG9mIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBiYWNrIHRvIGBjb3B5X3B0ZV9yYW5nZWAgaW4gYG1tL21lbW9yeS5jYCwgY29uZmlybWluZyBpdHMgcmVsZXZhbmNlLiBUaGVyZWZvcmUsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpcyBhIHNvbGlkIGNhbmRpZGF0ZSB0byBpbmNsdWRlLlxuXG5JJ3ZlIGdvdCBhIHByZWxpbWluYXJ5IGxpc3Qgb2YgZm9jdXMgc3ltYm9sczogYHN5c19zd2Fwb25gLCBgZm9saW9fZHVwX3N3YXBgLCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YCwgYW5kIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYC4gSSBqdXN0IHZlcmlmaWVkIHRoYXQgYHN5c19zd2Fwb25gIGlzIHRoZSBjb3JyZWN0IG5hbWUsIGdpdmVuIHRoYXQgc3l6a2FsbGVyIGdlbmVyYWxseSBmdXp6ZXMgc3lzY2FsbHMgZGlyZWN0bHkuXG5cbk5vdywgbGV0J3MgZGlzc2VjdCB0aGUgcGF0Y2gncyBpbXBhY3QgZnVydGhlci4gSXQgbG9va3MgbGlrZSBpdCBtb2RpZmllcyB0aGVzZSBrZXkgZnVuY3Rpb25zIGFuZCB0aGVpciBjYWxsIHBhdGhzOlxuXG4xLiAgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgKHBhcnQgb2YgcmVjbGFpbSksIGxlYWRpbmcgdG8gYHNocmlua19mb2xpb19saXN0YCAocGFnZSByZWNsYWltKTogQ2FsbGVkIGZyb20gYSBwYXRoIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC1cdTAwM2UgYGlzb2xhdGVfbG9ja19jbHVzdGVyYCAtXHUwMDNlIGBhbGxvY19zd2FwX3NjYW5fbGlzdGAgLVx1MDAzZSBgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5YCAtXHUwMDNlIGBnZXRfc3dhcF9wYWdlc2AgLVx1MDAzZSBgYWRkX3RvX3N3YXBgIC1cdTAwM2UgYHNocmlua19mb2xpb19saXN0YC5cbjIuICBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIChyZWxhdGVkIHRvIHN3YXBwaW5nIG91dCk6IGNhbGxlZCBieSBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgd2hpY2ggY29ubmVjdHMgdG8gYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAuXG4zLiAgYHN5c19zd2Fwb25gLlxuXG5TbyB0aGUgaW5pdGlhbCBsaXN0IGhvbGRzLCBhbmQgSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoZXNlIGNob2ljZXMsIGFzIHRoZXkgYXJlIHNwZWNpZmljIHRvIHN3YXAgb3BlcmF0aW9ucy4gSSBjb25zaWRlcmVkIGBnZXRfc3dhcF9wYWdlc2Agb3IgYGFkZF90b19zd2FwYCBhcyB3ZWxsLCBidXQgdGhvc2UgYXJlIGhvdCBwYXRocyBhbmQgSSBwcmVmZXIgdG8gYXZvaWQgZ2VuZXJpYyBob3QgcGF0aHMgd2hlbiBJIGNhbi4gV2hpbGUgYGZvbGlvX2R1cF9zd2FwYCBhbmQgYHN3YXBfZHVwX2VudHJ5X2RpcmVjdGAgbWlnaHQgZ2V0IHNvbWUgdXNlIG9uIGhvdCBwYXRocyBkdWUgdG8gZm9yay9tcmVtYXAvZXRjLCB0aG9zZSBhcmUgc3dhcC1zcGVjaWZpYy5cblxuSSB0aGVuIGRpZCBhIGRlZXBlciBkaXZlIGFuZCBsb29rZWQgYXQgdGhlIGNhbGxlcnMgb2YgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuIGBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnlgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBhcmUgc3RhdGljOyBgZm9saW9fZHVwX3N3YXBgIGFuZCBgc3dhcF9kdXBfZW50cnlfZGlyZWN0YCBhcmUgbm90LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIGNoZWNrZWQgdGhlIGNhbGxlcnMgb2YgYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAuIEl0IGFsc28gaXMgY2FsbGVkIGZyb20gYHN3YXBfY2x1c3Rlcl9zZXR1cF9iYWRfc2xvdGAgd2hpY2ggaW4gdHVybiBjYWxscyBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHN5c19zd2Fwb25gLiBUaGF0IG1lYW5zIGBzeXNfc3dhcG9uYCBzdWZmaWNpZW50bHkgY292ZXJzIHRoYXQgY29kZSBwYXRoLlxuXG5GaW5hbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYFNXQVBgIGFuZCBgTUVNQ0dgLiBOb3csIEknbSByZWFkeSB0byBjcmFmdCB0aGUgc2V0LXJlc3VsdHMgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzcsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjA5LjE5MjE0MDI2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjY2NDcyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9uXCIsXG4gICAgXCJmb2xpb19kdXBfc3dhcFwiLFxuICAgIFwic3dhcF9kdXBfZW50cnlfZGlyZWN0XCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBzd2FwZmlsZSBsb2dpYywgaW5jbHVkaW5nIHN3YXAgY2x1c3RlciB0YWJsZSBhbGxvY2F0aW9uLCBmcmVlaW5nLCBhbmQgZHVwbGljYXRpb24uIEl0IGFsc28gY2hhbmdlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gc3lzX3N3YXBvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb25cIixcbiAgICBcImZvbGlvX2R1cF9zd2FwXCIsXG4gICAgXCJzd2FwX2R1cF9lbnRyeV9kaXJlY3RcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHN3YXBmaWxlIGxvZ2ljLCBpbmNsdWRpbmcgc3dhcCBjbHVzdGVyIHRhYmxlIGFsbG9jYXRpb24sIGZyZWVpbmcsIGFuZCBkdXBsaWNhdGlvbi4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiBzeXNfc3dhcG9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MzowOS4zMDg4MjIyNTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzI3ODI2ODQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjA5LjMwOTU4NTg4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODMyNzc0OTgwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XFxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXFx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVxcdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxcbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXFxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXFxuXFxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDZlODExMjYxNjljZTBkYmY1OWIzNWVlNjE2NjM1NmMwZWU4NGQ2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDEyOjM5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDYxNWQ5MDg2NzExMTMuLmZmMWIxZmMzNjRiOTIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtNDY2LDggKzQ2Niw2IEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdGlmICghdGFibGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGNpLVx1MDAzZXRhYmxlLCB0YWJsZSk7XG4tXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbkBAIC00ODcsNiArNDg1LDEyIEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gI2VuZGlmXG4rXG4rXHQvKlxuK1x0ICogTWFrZSB0YWJsZXMgdmlzaWJsZSB0byBjbHVzdGVyX2lzX3VzYWJsZSgpIGFmdGVyIGV2ZXJ5dGhpbmcgaXNcbitcdCAqIHJlYWR5LlxuK1x0ICovXG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNTExLDIwICsxNTE1LDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gc3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcbiBcbiBcdGlmICghY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpKyspIHtcbiBcdFx0aWYgKGNpLVx1MDAzZWV4dGVuZF90YWJsZVtpXSlcbi1cdFx0XHRjYW5fZnJlZSA9IGZhbHNlO1xuK1x0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChjYW5fZnJlZSkge1xuLVx0XHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuLVx0XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuLVx0fVxuK1x0a2ZyZWUoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKTtcbitcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4gfVxuIFxuIC8qIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIG9uZSBzbG90LCB3aXRob3V0IGZyZWVpbmcgaXQgKi9cbkBAIC0xNzE2LDcgKzE3MTcsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gZmFpbGVkOlxuIFx0d2hpbGUgKGNpX29mZi0tIFx1MDAzZSBjaV9zdGFydClcbiBcdFx0X19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpO1xuLVx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0zNTg4LDExICszNTg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcbiBcdG1heHBhZ2VzID0gc2ktXHUwMDNlbWF4O1xuIFxuLVx0LyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqL1xuLVx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuLVxuIFx0aWYgKHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfc3RhYmxlX3dyaXRlcyhzaS1cdTAwM2ViZGV2KSlcbiBcdFx0c2ktXHUwMDNlZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7XG4gXG5AQCAtMzYwNiw2ICszNjAxLDE0IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG4gXHRcdGluY2VkX25yX3JvdGF0ZV9zd2FwID0gdHJ1ZTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvIGFmdGVyIFNXUF8gZmxhZ3MgaGFuZGxpbmcgYXNcbitcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cbitcdCAqL1xuK1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gYmFkX3N3YXBfdW5sb2NrX2lub2RlO1xuK1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0MzowOS4zMDk1OTM4OTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0NjY3MjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXBmaWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vc3dhcGZpbGUuY2AuIExldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCBhdCBtZSBhcyBhIHBvdGVudGlhbCBpc3N1ZSwgZXNwZWNpYWxseSByZWdhcmRpbmcgbWVtb3J5IHNhZmV0eS5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSByZW9yZGVyZWQgdGhpbmdzIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgbW92ZWQgdGhlIGByY3VfYXNzaWduX3BvaW50ZXIoY2ktXHUwMDNldGFibGUsIHRhYmxlKTtgIGNhbGwgKmFmdGVyKiB0aGUgYG1lbWNnX3RhYmxlYCBhbGxvY2F0aW9uLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSBndWVzc2luZyB0aGV5J3JlIGRvaW5nIHRoaXMgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC4gU29tZW9uZSBtaWdodCBoYXZlIGJlZW4gY2hlY2tpbmcgYGNpLVx1MDAzZXRhYmxlYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCB3YXMgYWxsb2NhdGVkLCBsZWFkaW5nIHRvIGVpdGhlciBhIE5VTEwgZGVyZWZlcmVuY2Ugb3IsIHdvcnNlLCBhY2Nlc3MgdG8gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIGBjaWAgYWxsb2NhdGVkIHdpdGggYGt2Y2FsbG9jYCBvciBzaW1pbGFyP1xuXG5OZXh0LCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIHNlZW1zIHRvIGJlIHNpbXBsaWZpZWQsIHdoaWNoIGlzIGdvb2QuIFRoZXkncmUgcmV0dXJuaW5nIGVhcmx5IGZyb20gdGhlIGxvb3AgaWYgYGNpLVx1MDAzZWV4dGVuZF90YWJsZVtpXWAgaXMgYWxyZWFkeSBudWxsIGFuZCByZW1vdmluZyB0aGUgYGNhbl9mcmVlYCB2YXJpYWJsZS4gVGhpcyBzb3VuZHMgbGlrZSBhIGNsZWFudXAuXG5cblRoZW4sIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGhhcyBhIG1pbm9yIGNoYW5nZTsgdGhlIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7YCBjYWxsIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYGZhaWxlZDpgIHBhdGguIFByb2JhYmx5IG1ha2VzIHRoZSBjb2RlIG1vcmUgZWZmaWNpZW50IGFuZCBzYWZlLlxuXG5GaW5hbGx5LCBpbiB0aGUgYHN3YXBvbmAgc3lzY2FsbCwgdGhleSdyZSBtb3ZpbmcgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTtgIGFmdGVyIHRoZSBmbGFncyBgU1dQX1NUQUJMRV9XUklURVNgIGFuZCBgU1dQX1NPTElEU1RBVEVgIGFyZSBzZXQuIE1ha2VzIHNlbnNlLiBUaGV5J3JlIHByb2JhYmx5IHRyeWluZyB0byBlbnN1cmUgdGhhdCB0aGUgc3dhcCBjbHVzdGVyIGluZm9ybWF0aW9uIGlzIHNldCB1cCBjb25zaXN0ZW50bHkgYWZ0ZXIgc2V0dGluZyB0aGUgY3JpdGljYWwgZmxhZ3MuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB3aXRoIHRoZXNlIGNoYW5nZXM/IFRoZSBiaWdnZXN0IG9uZSBsb29rcyBsaWtlIHRoZSByZW9yZGVyaW5nIGluIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLiBCeSBtb3ZpbmcgdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNhbGwsIHRoZXkgKnNob3VsZCogYmUgcHJldmVudGluZyBhIHJhY2Ugd2hlcmUgYW5vdGhlciB0aHJlYWQgbWlnaHQgc2VlIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGBjaWAuIElmIGBjaS1cdTAwM2VtZW1jZ190YWJsZWAgd2VyZSBhY2Nlc3NlZCBiZWZvcmUgYWxsb2NhdGlvbiwgaXQgY291bGQgbGVhZCB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSAod2hpY2ggS0FTQU4gb3Igc3RhbmRhcmQgb29wcyBzaG91bGQgY2F0Y2gpIG9yIGFuIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYGNpYCBpcyBhbGxvY2F0ZWQuIElmIGl0J3MgemVyby1hbGxvY2F0ZWQsIGFuIHVuaW5pdGlhbGl6ZWQgYWNjZXNzIHNob3VsZCByZXNvbHZlIHRvIHplcm8gYW5kIHRoZXJlZm9yZSBiZSBzYWZlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgY2lgIGlzLCBpbiBmYWN0LCB6ZXJvLWluaXRpYWxpemVkLiBJIHNob3VsZCBjaGVjayB0aGUgYWxsb2NhdGlvbiBvZiBgc3dhcF9jbHVzdGVyX2luZm9gIGFuZCBhbHNvIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQncyBoYXBwZW5pbmcuIElmIGl0IGlzLCB0aGVuIHRoZSByaXNrIHNob3VsZCBiZSBtaW5pbWFsLiBPdGhlcndpc2UsIEkgbWlnaHQgYmUgbG9va2luZyBhdCBzb21lIHBvdGVudGlhbGx5IG5hc3R5IHdpbGQgcG9pbnRlciBiZWhhdmlvciwgYW5kIHRoZW4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjE3LjA1NjI3MzYzNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MTU3NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MzM0ND1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3N3YXBfaGVhZGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzQwNi1cXG5tbS9zd2FwZmlsZS5jOjM0MDc6c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMzQwOC1cXHRcXHRcXHRcXHQgICAgdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyLFxcbi0tXFxubW0vc3dhcGZpbGUuYz0zNDg3PVNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM2MDUtXFx0ICogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyBhZnRlciBTV1BfIGZsYWdzIGhhbmRsaW5nIGFzXFxubW0vc3dhcGZpbGUuYzozNjA2OlxcdCAqIHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbygpIGNoZWNrcyBTV1BfU09MSURTVEFURS5cXG5tbS9zd2FwZmlsZS5jLTM2MDctXFx0ICovXFxubW0vc3dhcGZpbGUuYzozNjA4OlxcdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xcbm1tL3N3YXBmaWxlLmMtMzYwOS1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQzOjE3LjI3MTQ1NjIyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQ2OTM1ODI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gc3dhcGZpbGUuYzogc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL3N3YXBmaWxlLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgZnVuY3Rpb24uIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgb3IgY29uZmlndXJpbmcgc29tZSBhc3BlY3Qgb2Ygc3dhcCBzcGFjZSBjbHVzdGVyaW5nIOKAkyBhbiBpbnRlcmVzdGluZyB0ZWNobmlxdWUsIGFuZCBvbmUgdGhhdCBpcyBwcm9iYWJseSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gSSB3b25kZXIgaWYgaXQncyBpbnZvbHZlZCBpbiBvcHRpbWl6aW5nIHN3YXAgSS9PIGJ5IGdyb3VwaW5nIHJlbGF0ZWQgcGFnZXMgdG9nZXRoZXIgb24gZGlzaywgb3IgaWYgaXQgaGFzIGEgZGlmZmVyZW50IHB1cnBvc2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSBvdmVyYWxsIHB1cnBvc2UgYW5kIGRlc2lnbiBjaG9pY2VzIG9mIHRoZSBmdW5jdGlvbiB3aXRoIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDQ6MTYuNzQwODE4NTU3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0MDc6XFx0c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbjM0MDg6XFx0XFx0XFx0XFx0XFx0ICAgIHVuaW9uIHN3YXBfaGVhZGVyICpzd2FwX2hlYWRlcixcXG4zNDA5OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG1heHBhZ2VzKVxcbjM0MTA6XFx0e1xcbjM0MTE6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9jbHVzdGVycyA9IERJVl9ST1VORF9VUChtYXhwYWdlcywgU1dBUEZJTEVfQ0xVU1RFUik7XFxuMzQxMjpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbztcXG4zNDEzOlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbjM0MTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbjM0MTU6XFx0XFxuMzQxNjpcXHRcXHRjbHVzdGVyX2luZm8gPSBrdnphbGxvY19vYmpzKCpjbHVzdGVyX2luZm8sIG5yX2NsdXN0ZXJzKTtcXG4zNDE3OlxcdFxcdGlmICghY2x1c3Rlcl9pbmZvKVxcbjM0MTg6XFx0XFx0XFx0Z290byBlcnI7XFxuMzQxOTpcXHRcXG4zNDIwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jbHVzdGVyczsgaSsrKVxcbjM0MjE6XFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmNsdXN0ZXJfaW5mb1tpXS5sb2NrKTtcXG4zNDIyOlxcdFxcbjM0MjM6XFx0XFx0aWYgKCEoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NPTElEU1RBVEUpKSB7XFxuMzQyNDpcXHRcXHRcXHRzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXIgPSBrbWFsbG9jX29iaigqc2ktXFx1MDAzZWdsb2JhbF9jbHVzdGVyKTtcXG4zNDI1OlxcdFxcdFxcdGlmICghc2ktXFx1MDAzZWdsb2JhbF9jbHVzdGVyKVxcbjM0MjY6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMzQyNzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgU1dBUF9OUl9PUkRFUlM7IGkrKylcXG4zNDI4OlxcdFxcdFxcdFxcdHNpLVxcdTAwM2VnbG9iYWxfY2x1c3Rlci1cXHUwMDNlbmV4dFtpXSA9IFNXQVBfRU5UUllfSU5WQUxJRDtcXG4zNDI5OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJfbG9jayk7XFxuMzQzMDpcXHRcXHR9XFxuMzQzMTpcXHRcXG4zNDMyOlxcdFxcdC8qXFxuMzQzMzpcXHRcXHQgKiBNYXJrIHVudXNhYmxlIHBhZ2VzIChoZWFkZXIgcGFnZSwgYmFkIHBhZ2VzLCBhbmQgdGhlIEVPRiBwYXJ0IG9mXFxuMzQzNDpcXHRcXHQgKiB0aGUgbGFzdCBjbHVzdGVyKSBhcyB1bmF2YWlsYWJsZS4gVGhlIGNsdXN0ZXJzIGFyZW4ndCBtYXJrZWQgZnJlZVxcbjM0MzU6XFx0XFx0ICogeWV0LCBzbyBubyBsaXN0IG9wZXJhdGlvbnMgYXJlIGludm9sdmVkIHlldC5cXG4zNDM2OlxcdFxcdCAqL1xcbjM0Mzc6XFx0XFx0ZXJyID0gc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHNpLCBjbHVzdGVyX2luZm8sIDAsIGZhbHNlKTtcXG4zNDM4OlxcdFxcdGlmIChlcnIpXFxuMzQzOTpcXHRcXHRcXHRnb3RvIGVycjtcXG4zNDQwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzd2FwX2hlYWRlci1cXHUwMDNlaW5mby5ucl9iYWRwYWdlczsgaSsrKSB7XFxuMzQ0MTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGFnZV9uciA9IHN3YXBfaGVhZGVyLVxcdTAwM2VpbmZvLmJhZHBhZ2VzW2ldO1xcbjM0NDI6XFx0XFxuMzQ0MzpcXHRcXHRcXHRpZiAoIXBhZ2VfbnIgfHwgcGFnZV9uciBcXHUwMDNlIHN3YXBfaGVhZGVyLVxcdTAwM2VpbmZvLmxhc3RfcGFnZSkge1xcbjM0NDQ6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQmFkIHNsb3Qgb2Zmc2V0IGlzIG91dCBvZiBib3JkZXI6ICVkIChsYXN0X3BhZ2U6ICVkKVxcXFxuXFxcIixcXG4zNDQ1OlxcdFxcdFxcdFxcdFxcdHBhZ2VfbnIsIHN3YXBfaGVhZGVyLVxcdTAwM2VpbmZvLmxhc3RfcGFnZSk7XFxuMzQ0NjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM0NDc6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMzQ0ODpcXHRcXHRcXHR9XFxuMzQ0OTpcXHRcXHRcXHRlcnIgPSBzd2FwX2NsdXN0ZXJfc2V0dXBfYmFkX3Nsb3Qoc2ksIGNsdXN0ZXJfaW5mbywgcGFnZV9uciwgZmFsc2UpO1xcbjM0NTA6XFx0XFx0XFx0aWYgKGVycilcXG4zNDUxOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjM0NTI6XFx0XFx0fVxcbjM0NTM6XFx0XFx0Zm9yIChpID0gbWF4cGFnZXM7IGkgXFx1MDAzYyByb3VuZF91cChtYXhwYWdlcywgU1dBUEZJTEVfQ0xVU1RFUik7IGkrKykge1xcbjM0NTQ6XFx0XFx0XFx0ZXJyID0gc3dhcF9jbHVzdGVyX3NldHVwX2JhZF9zbG90KHNpLCBjbHVzdGVyX2luZm8sIGksIHRydWUpO1xcbjM0NTU6XFx0XFx0XFx0aWYgKGVycilcXG4zNDU2OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0NDoxNi43NDExMjk2NjdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2ODg0OTAzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgU3dhcCBDbHVzdGVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IG5vbmUgb2YgdGhlc2UgZGlyZWN0bHkgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggaXMgdGhlIGtleSBjb25jZXJuLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gdmlhIGBrdnphbGxvY19vYmpzYCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIGdvb2QuXG5cblRoZSBmaXJzdCBjcml0aWNhbCBhZGp1c3RtZW50IGludm9sdmVzIHRoZSBwbGFjZW1lbnQgb2YgYHJjdV9hc3NpZ25fcG9pbnRlcihjaS1cdTAwM2V0YWJsZSwgdGFibGUpO2AuIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSByZWFzb24gZm9yIG1vdmluZyB0aGlzIGlzIHRvIHByZXZlbnQgYGNsdXN0ZXJfaXNfdXNhYmxlKClgIGZyb20gZXJyb25lb3VzbHkgZGV0ZWN0aW5nIGBjaS1cdTAwM2V0YWJsZWAgYXMgdmFsaWQgYmVmb3JlIGBjaS1cdTAwM2VtZW1jZ190YWJsZWAgaXMgYWxsb2NhdGVkLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgY2ktXHUwMDNlbWVtY2dfdGFibGVgLiBNYWtlcyBzZW5zZSwgd2UncmUgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyaW5nIHRoYXQgdGhlIHRhYmxlIHBvaW50ZXIgaXMgb25seSBjb25zaWRlcmVkIHZhbGlkICphZnRlciogZXZlcnl0aGluZyBpcyBzZXQgdXAuXG5cblRoZSBzZWNvbmQgY2hhbmdlIGZvY3VzZXMgb24gc2hpZnRpbmcgYHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mb2AgYWZ0ZXIgc2V0dGluZyB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnLiBUaGUgb3JpZ2luYWwgY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFuIGFsbG9jYXRpb24gaXNzdWUuIElmIHdlIGNhbGxlZCBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCAqYmVmb3JlKiB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIHdhcyBzZXQsIHdlIG1pZ2h0IGFsbG9jYXRlIGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgd2hlbiBpdOKAmXMgbm90IGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBlaXRoZXIgYSBtZW1vcnkgbGVhaywgYW4gdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgbWlzY29uZmlndXJhdGlvbi4gSXQncyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBzdGlsbCBhIGxvZ2ljIGZsYXcgYW5kIGEgcG90ZW50aWFsIHJlc291cmNlIHdhc3RlLlxuXG5UaGUgY2hhbmdlcyBpbiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFwcGVhciB0byBiZSBzaW1wbGlmaWNhdGlvbnMgYW5kIGFyZSBsaWtlbHkgbm90IHNpZ25pZmljYW50LlxuXG5Ib3dldmVyLCB0aGUgcmVtb3ZhbCBvZiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO2AgaW4gdGhlIGBmYWlsZWQ6YCBwYXRoIG9mIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGNhdWdodCBteSBleWUuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgYSBsb2dpYyBlcnJvciBpbiBob3cgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhhdCBzcGVjaWZpYyBlcnJvciBwYXRoLiBJdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGF0IHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBzZXF1ZW5jZSBpbiB0aGF0IGFyZWEsIGJ1dCBteSBodW5jaCBpcyBpdCdzIGEgYnVnIGZpeC5cblxuT3ZlcmFsbCwgaXQgc2VlbXMgdGhlIGNvcmUgaXNzdWVzIGFyZTpcblxuKiAgIEEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHByb3RlY3Rpb24sIHdpdGggdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIG1vdmVtZW50XG4qICAgQSByZXNvdXJjZSBsZWFrIHByZXZlbnRpb24vY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYyB3aXRoIHRoZSBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCBjaGFuZ2VcbiogICBBIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSBmaXggaW4gYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmBcblxuVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgbGV0J3MgdmVyaWZ5IHdoYXQgYHRhYmxlYCBhbmQgYG1lbWNnX3RhYmxlYCBhcmUsIGJ5IGV4YW1pbmluZyBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCBhbmQgaG93IHRob3NlIGRhdGEgc3RydWN0dXJlcyBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQ0OjU0LjQyOTYzMjIyOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcGZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRpZiAoU1dQX1RBQkxFX1VTRV9QQUdFKSB7XFxuIDQ2MDpcXHRcXHRcXHRmb2xpbyA9IGZvbGlvX2FsbG9jKGdmcCB8IF9fR0ZQX1pFUk8sIDApO1xcbiA0NjE6XFx0XFx0XFx0aWYgKGZvbGlvKVxcbiA0NjI6XFx0XFx0XFx0XFx0dGFibGUgPSBmb2xpb19hZGRyZXNzKGZvbGlvKTtcXG4gNDYzOlxcdFxcdH0gZWxzZSB7XFxuIDQ2NDpcXHRcXHRcXHR0YWJsZSA9IGttZW1fY2FjaGVfemFsbG9jKHN3YXBfdGFibGVfY2FjaGVwLCBnZnApO1xcbiA0NjU6XFx0XFx0fVxcbiA0NjY6XFx0XFx0aWYgKCF0YWJsZSlcXG4gNDY3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuIDQ3MDpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkge1xcbiA0NzE6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVxcdTAwM2VtZW1jZ190YWJsZSk7XFxuIDQ3MjpcXHRcXHRcXHRjaS1cXHUwMDNlbWVtY2dfdGFibGUgPSBremFsbG9jX29iaigqY2ktXFx1MDAzZW1lbWNnX3RhYmxlLCBnZnApO1xcbiA0NzM6XFx0XFx0XFx0aWYgKCFjaS1cXHUwMDNlbWVtY2dfdGFibGUpIHtcXG4gNDc0OlxcdFxcdFxcdFxcdHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKGNpKTtcXG4gNDc1OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0NzY6XFx0XFx0XFx0fVxcbiA0Nzc6XFx0XFx0fVxcbiA0Nzg6XFx0I2VuZGlmXFxuIDQ3OTpcXHRcXG4gNDgwOlxcdCNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcXG4gNDgxOlxcdFxcdFZNX1dBUk5fT05fT05DRShjaS1cXHUwMDNlemVyb19iaXRtYXApO1xcbiA0ODI6XFx0XFx0Y2ktXFx1MDAzZXplcm9fYml0bWFwID0gYml0bWFwX3phbGxvYyhTV0FQRklMRV9DTFVTVEVSLCBnZnApO1xcbiA0ODM6XFx0XFx0aWYgKCFjaS1cXHUwMDNlemVyb19iaXRtYXApIHtcXG4gNDg0OlxcdFxcdFxcdHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKGNpKTtcXG4gNDg1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0ODY6XFx0XFx0fVxcbiA0ODc6XFx0I2VuZGlmXFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdC8qXFxuIDQ5MDpcXHRcXHQgKiBNYWtlIHRhYmxlcyB2aXNpYmxlIHRvIGNsdXN0ZXJfaXNfdXNhYmxlKCkgYWZ0ZXIgZXZlcnl0aGluZyBpc1xcbiA0OTE6XFx0XFx0ICogcmVhZHkuXFxuIDQ5MjpcXHRcXHQgKi9cXG4gNDkzOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjaS1cXHUwMDNldGFibGUsIHRhYmxlKTtcXG4gNDk0OlxcdFxcdHJldHVybiAwO1xcbiA0OTU6XFx0fVxcbiA0OTY6XFx0XFxuIDQ5NzpcXHQvKlxcbiA0OTg6XFx0ICogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBub3RoaW5nIGxlYWtlZCwgYW5kIHRoZSBzcGVjaWZpZWQgcmFuZ2UgaXMgZW1wdHkuXFxuIDQ5OTpcXHQgKiBPbmUgc3BlY2lhbCBjYXNlIGlzIHRoYXQgYmFkIHNsb3RzIGNhbid0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXFxuIDUwMDpcXHQgKiBiYWQgc2xvdHMgZm9yIHN3YXBvZmYsIGFuZCBub24tc3dhcG9mZiBwYXRoIG11c3QgbmV2ZXIgZnJlZSBiYWQgc2xvdHMuXFxuIDUwMTpcXHQgKi9cXG4gNTAyOlxcdHN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gNTAzOlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBjaV9vZmYsIHVuc2lnbmVkIGludCBucixcXG4gNTA0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgc3dhcG9mZilcXG4gNTA1OlxcdHtcXG4gNTA2OlxcdFxcdHVuc2lnbmVkIGludCBjaV9lbmQgPSBjaV9vZmYgKyBucjtcXG4gNTA3OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxMjo0NDo1NC40MzAxOTY4MjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0MTc2NDYzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhlc2UgS2VybmVsIElzc3VlcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGVyZSBhcmUgYSBmZXcgZGlzdGluY3QgbWVtb3J5LXJlbGF0ZWQgcHJvYmxlbXMgaGVyZSwgbm9uZSBvZiB3aGljaCBhcHBlYXIgdG8gYmUgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHJlYWRzLCB3aGljaCBpcyBhIHJlbGllZi5cblxuRmlyc3QsIHRoZXJlJ3MgYSBjb25jdXJyZW5jeSBidWcuIEkgY2FuIHNlZSB0aGF0IGB0YWJsZWAgaXMgemVyby1pbml0aWFsaXplZCB1c2luZyBzb21ldGhpbmcgbGlrZSBgX19HRlBfWkVST2Agb3IgYGttZW1fY2FjaGVfemFsbG9jYCwgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBnZXRzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2Nfb2JqYCwgYW5kIGBjaS1cdTAwM2V6ZXJvX2JpdG1hcGAgd2l0aCBgYml0bWFwX3phbGxvY2AuIFRoZSBrZXkgaXNzdWUgaXMgdGhlICpvcmRlciogb2YgaW5pdGlhbGl6YXRpb24gYW5kLCBjcml0aWNhbGx5LCBob3cgdGhlIGBjaS1cdTAwM2V0YWJsZWAgcG9pbnRlciBpcyBtYWRlIHZpc2libGUgdG8gb3RoZXIgdGhyZWFkcyB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIElmIGFub3RoZXIgdGhyZWFkIGNhbiBzZWUgYGNpLVx1MDAzZXRhYmxlYCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBpcyBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCwgaXQncyBnb2luZyB0byBkZXJlZmVyZW5jZSBhIG51bGwgcG9pbnRlciwgYXNzdW1pbmcgdGhhdCBpZiBgY2ktXHUwMDNldGFibGVgIGlzbid0IG51bGwsIHRoZW4gYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiwgbGlrZWx5IHJlc3VsdGluZyBpbiBhIGtlcm5lbCBwYW5pYyBvciBLQVNBTiBmaW5kaW5nIGEgcHJvYmxlbSBiZWNhdXNlIG9mIHRoZSBhdHRlbXB0ZWQgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5UaGUgc2Vjb25kIGlzc3VlIGlzIHdpdGhpbiBgc3dhcG9uYCBhbmQgdGhlIGZ1bmN0aW9uIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIGxvZ2ljIGVycm9yIHdoZXJlIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBiZWZvcmUgdGhlIGBTV1BfU09MSURTVEFURWAgZmxhZyB3YXMgc2V0LiBUaHVzLCB0aGUgY2hlY2sgYHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU09MSURTVEFURWAgd291bGQgYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLiBUaGUgY29uc2VxdWVuY2U/IGBzaS1cdTAwM2VnbG9iYWxfY2x1c3RlcmAgd291bGQgYWx3YXlzIGJlIGFsbG9jYXRlZCwgZXZlbiBvbiBzb2xpZC1zdGF0ZSBkcml2ZXMgd2hlcmUgaXQgbWlnaHQgbm90IGJlIG5lZWRlZC4gVGhpcyBpcyBub3QgYSBtZW1vcnkgcmVhZCwgYnV0IGEgbWVtb3J5IGxlYWsgYW5kIGdlbmVyYWwgYmVoYXZpb3JhbCBlcnJvci4gSXQgd291bGQgYmUgaW5lZmZpY2llbnQgZm9yIFNTRCBkZXZpY2VzLlxuXG5GaW5hbGx5LCB0aGVyZSdzIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgdG8gY2hlY2sgaWYgYW55IGVsZW1lbnQgd2l0aGluIGBjaS1cdTAwM2VleHRlbmRfdGFibGVgIHdhcyBub24tbnVsbCwgYW5kIHRoZW4gb25seSBmcmVlIHRoZSB3aG9sZSB0YWJsZSBpZiBhbGwgd2VyZSBudWxsLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGlzLCByZXR1cm5pbmcgZWFybHkgaWYgKmFueSogZW50cnkgaXNuJ3QgbnVsbCwgYW5kIG9ubHkgZnJlZWluZyB0aGUgd2hvbGUgaWYgYWxsIGVudHJpZXMgYXJlIG51bGwuIFRoZSBjb25jZXJuIG5vdyBpcyB0aGUgY2FsbCB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpYCBpbiB0aGUgYGZhaWxlZDpgIHBhdGggb2YgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBgZXh0ZW5kX3RhYmxlYCBtaWdodCBzdGlsbCBiZSBpbiB1c2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZnJlZWluZyB0aGUgdGFibGUgcHJlbWF0dXJlbHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIHVzZXMgdGhpcyBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIGRldGVybWluZSBpZiBhIGRvdWJsZS1mcmVlIGlzIHBvc3NpYmxlIG9yIGlmIG1lbW9yeSBpcyBiZWluZyBmcmVlZCBiZWZvcmUgaXQncyBhY3R1YWxseSBzYWZlIHRvIGRvIHNvLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlciB0byBzZWUgd2hldGhlciBvciBub3QgdGhhdCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG9uIHNvbWV0aGluZyB0aGF0J3Mgc3RpbGwgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQ1OjU2Ljg0Nzg0NjkyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcGZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjkwOlxcdHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4xNjkxOlxcdFxcdFxcdFxcdFxcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxcbjE2OTI6XFx0e1xcbjE2OTM6XFx0XFx0aW50IGVycjtcXG4xNjk0OlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuMTY5NTpcXHRcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbjE2OTY6XFx0XFxuMTY5NzpcXHRcXHRjaV9zdGFydCA9IG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVI7XFxuMTY5ODpcXHRcXHRjaV9lbmQgPSBjaV9zdGFydCArIG5yO1xcbjE2OTk6XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuMTcwMDpcXHRcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBvZmZzZXQpO1xcbjE3MDE6XFx0cmVzdGFydDpcXG4xNzAyOlxcdFxcdGRvIHtcXG4xNzAzOlxcdFxcdFxcdGVyciA9IF9fc3dhcF9jbHVzdGVyX2R1cF9lbnRyeShjaSwgY2lfb2ZmKTtcXG4xNzA0OlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuMTcwNTpcXHRcXHRcXHRcXHRpZiAoZXJyID09IC1FTk9NRU0pIHtcXG4xNzA2OlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuMTcwNzpcXHRcXHRcXHRcXHRcXHRlcnIgPSBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzaSwgY2ksIGNpX29mZiwgR0ZQX0FUT01JQyk7XFxuMTcwODpcXHRcXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4xNzA5OlxcdFxcdFxcdFxcdFxcdGlmICghZXJyKVxcbjE3MTA6XFx0XFx0XFx0XFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbjE3MTE6XFx0XFx0XFx0XFx0fVxcbjE3MTI6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuMTcxMzpcXHRcXHRcXHR9XFxuMTcxNDpcXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuMTcxNTpcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4xNzE2OlxcdFxcdHJldHVybiAwO1xcbjE3MTc6XFx0ZmFpbGVkOlxcbjE3MTg6XFx0XFx0d2hpbGUgKGNpX29mZi0tIFxcdTAwM2UgY2lfc3RhcnQpXFxuMTcxOTpcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XFxuMTcyMDpcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4xNzIxOlxcdFxcdHJldHVybiBlcnI7XFxuMTcyMjpcXHR9XFxuMTcyMzpcXHRcXG4xNzI0OlxcdC8qKlxcbjE3MjU6XFx0ICogZm9saW9fYWxsb2Nfc3dhcCAtIGFsbG9jYXRlIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG4xNzI2OlxcdCAqIEBmb2xpbzogZm9saW8gd2Ugd2FudCB0byBtb3ZlIHRvIHN3YXBcXG4xNzI3OlxcdCAqXFxuMTcyODpcXHQgKiBBbGxvY2F0ZSBzd2FwIHNwYWNlIGZvciB0aGUgZm9saW8gYW5kIGFkZCB0aGUgZm9saW8gdG8gdGhlXFxuMTcyOTpcXHQgKiBzd2FwIGNhY2hlLlxcbjE3MzA6XFx0ICpcXG4xNzMxOlxcdCAqIENvbnRleHQ6IENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBmb2xpbyBsb2NrLlxcbjE3MzI6XFx0ICogUmV0dXJuOiBXaGV0aGVyIHRoZSBmb2xpbyB3YXMgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUuXFxuMTczMzpcXHQgKi9cXG4xNzM0OlxcdGludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTczNTpcXHR7XFxuMTczNjpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuMTczNzpcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuMTczODpcXHRcXG4xNzM5OlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDEyOjQ1OjU2Ljg0ODAzNzM1MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTczOTAxNjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZWNlbnQgS2VybmVsIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGV5J3ZlIHJlbW92ZWQgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBmcm9tIHRoZSBgZmFpbGVkOmAgcGF0aC4gSXQgbG9va3MgbGlrZSB0aGUgbG9naWMgZ29lczogYWxsb2NhdGUgdGFibGUgKGBzd2FwX2V4dGVuZF90YWJsZV9hbGxvY2ApLCBhbmQgaWYgdGhhdCAqZmFpbHMqLCBpdCBoaXRzIGBmYWlsZWQ6YC4gSWYgdGhlIGFsbG9jYXRpb24gKnN1Y2NlZWRzKiwgaXQgZ29lcyB0byBgcmVzdGFydDpgLiBMYXRlciAqZmFpbHVyZXMqIGFsc28gaGl0IGBmYWlsZWQ6YC4gSW4gYGZhaWxlZDpgLCBpdCB1bmRvZXMgdGhlIGR1cGxpY2F0ZXMuIE15IGZpcnN0IHRob3VnaHQgd2FzIG1heWJlIHRoZSBmcmVlIHdhc24ndCBuZWVkZWQgb3Igd2FzIGRhbmdlcm91cyB0byB0aGUgbWVtb3J5IGxheW91dC4gQnV0LCB3YWl0LCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIG9ubHkgZnJlZXMgaWYgKmFsbCogZW50cmllcyBhcmUgTlVMTCwgc28gaXQgd291bGRuJ3QgZnJlZSBhIHRhYmxlIGluIHVzZS4gU28gd2h5IHdhcyBpdCByZW1vdmVkPyBNYXliZSBpdCB3YXMganVzdCByZWR1bmRhbnQuIE9yIG1heWJlIGl0ICpkaWQqIGNhdXNlIHNvbWUgaXNzdWUgdGhlcmUsIGxlYWRpbmcgdG8gYSBidWcsIHRoYXQgd2Fzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMuIEl0J3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgbm90IGFueSB1bmluaXRpYWxpemVkIHJlYWRzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi5cblxuU28sIGhlcmUncyB0aGUgb3ZlcmFsbCBnaXN0IG9mIHRoZXNlIGNoYW5nZXM6XG5cbjEuICBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYDogRml4ZXMgYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBhIGBjaS1cdTAwM2V0YWJsZWAgbWlnaHQgaGF2ZSBiZWVuIHB1Ymxpc2hlZCBiZWZvcmUgYGNpLVx1MDAzZW1lbWNnX3RhYmxlYCBhbmQgYGNpLVx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGV2ZW4gYWxsb2NhdGVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cbjIuICBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgOiBTaW1wbGlmaWVzIGEgbG9vcC5cbjMuICBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYDogUmVtb3ZlcyB0aGlzIHNlZW1pbmdseSB1bm5lY2Vzc2FyeSBjYWxsIHRvIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAuXG40LiAgYHN3YXBvbmA6IEZpeGVzIHRoZSBvcmRlciBvZiBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgaXMgY29ycmVjdGx5IHNlZW4sIHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgdG91Y2ggb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MsIG9yIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIEFsbCB0aGUgYWxsb2NhdGlvbnMgYXJlIHplcm9lZCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9ycywgd2hpY2ggaXMga2V5LiBUaGVzZSBmaXhlcyBhcmUgYWxsIGFib3V0IHJhY2UgY29uZGl0aW9ucywgbG9naWMgZXJyb3JzLCBhbmQgc29tZSBtZW1vcnkgbGVha3MuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBzaW1wbGUga2VybmVsIG9vcHMgc2hvdWxkIGNhdGNoIGFsbCB0aGVzZSBwcm9ibGVtcy4gVGhpcyBtZWFucyB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBmaXhlcywgTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDEsIk91dHB1dFRva2VucyI6MzA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTI6NDY6MTIuNTg3MDU2NDAxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc2V2ZXJhbCBpc3N1ZXMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtOlxcbjEuIEEgcmFjZSBjb25kaXRpb24gaW4gYHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZWAgd2hlcmUgYGNpLVxcdTAwM2V0YWJsZWAgd2FzIHB1Ymxpc2hlZCB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAgYmVmb3JlIGBjaS1cXHUwMDNlbWVtY2dfdGFibGVgIGFuZCBgY2ktXFx1MDAzZXplcm9fYml0bWFwYCB3ZXJlIGFsbG9jYXRlZC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGNvbmN1cnJlbnQgdGhyZWFkcyBjYWxsaW5nIGBjbHVzdGVyX2lzX3VzYWJsZSgpYC5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgc3dhcG9uYCB3aGVyZSBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCB3YXMgY2FsbGVkIGJlZm9yZSB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIHdhcyBzZXQsIGNhdXNpbmcgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbiBvZiBgc2ktXFx1MDAzZWdsb2JhbF9jbHVzdGVyYCBmb3Igc29saWQtc3RhdGUgZHJpdmVzLlxcbjMuIE1pbm9yIGNsZWFudXBzIGluIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLlxcblxcbkFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW52b2x2ZWQgKGBrdnphbGxvY19vYmpzYCwgYGt6YWxsb2Nfb2JqYCwgYGJpdG1hcF96YWxsb2NgLCBgX19HRlBfWkVST2AsIGBrbWVtX2NhY2hlX3phbGxvY2ApIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBidWdzIGZpeGVkIGFyZSByYWNlIGNvbmRpdGlvbnMgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbmNvcnJlY3QgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29udHJvbCBmbG93LCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIG9vcHMgbWVjaGFuaXNtcyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byBkZXRlY3QgdGhlc2UgdHlwZXMgb2YgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBzZXZlcmFsIGlzc3VlcyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW06XFxuMS4gQSByYWNlIGNvbmRpdGlvbiBpbiBgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlYCB3aGVyZSBgY2ktXFx1MDAzZXRhYmxlYCB3YXMgcHVibGlzaGVkIHZpYSBgcmN1X2Fzc2lnbl9wb2ludGVyYCBiZWZvcmUgYGNpLVxcdTAwM2VtZW1jZ190YWJsZWAgYW5kIGBjaS1cXHUwMDNlemVyb19iaXRtYXBgIHdlcmUgYWxsb2NhdGVkLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gY29uY3VycmVudCB0aHJlYWRzIGNhbGxpbmcgYGNsdXN0ZXJfaXNfdXNhYmxlKClgLlxcbjIuIEEgbG9naWMgYnVnIGluIGBzd2Fwb25gIHdoZXJlIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIHdhcyBjYWxsZWQgYmVmb3JlIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgd2FzIHNldCwgY2F1c2luZyB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIGBzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJgIGZvciBzb2xpZC1zdGF0ZSBkcml2ZXMuXFxuMy4gTWlub3IgY2xlYW51cHMgaW4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBhbmQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAuXFxuXFxuQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbnZvbHZlZCAoYGt2emFsbG9jX29ianNgLCBga3phbGxvY19vYmpgLCBgYml0bWFwX3phbGxvY2AsIGBfX0dGUF9aRVJPYCwgYGttZW1fY2FjaGVfemFsbG9jYCkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIGJ1Z3MgZml4ZWQgYXJlIHJhY2UgY29uZGl0aW9ucyBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBsb2dpYywgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3MuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb250cm9sIGZsb3csIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgb29wcyBtZWNoYW5pc21zIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIGRldGVjdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsnczr[1] Phase: Succeeded StartedAt: 2026-08-20 12:46:24 +0000 UTC FinishedAt: 2026-08-20 12:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 12:46:24 +0000 UTC FinishedAt: 2026-08-20 12:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[2] Phase: Succeeded StartedAt: 2026-08-20 12:46:24 +0000 UTC FinishedAt: 2026-08-20 12:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-20 12:46:24 +0000 UTC FinishedAt: 2026-08-20 12:55:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 12:46:24 +0000 UTC FinishedAt: 2026-08-20 12:46:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 12:46:24 +0000 UTC FinishedAt: 2026-08-20 12:46:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsnczr/series-workflowsnczr-convert-artifact-1307807486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 12:46:34 +0000 UTC FinishedAt: 2026-08-20 12:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 12:46:34 +0000 UTC FinishedAt: 2026-08-20 12:55:24 +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:*eb87a6ef-01ec-42f7-a9dc-635c60d6bbab,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-workflowsnczr/series-workflowsnczr-convert-artifact-1307807486/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": "0cec5a3c-8830-4e29-9c5f-259c7d1b2b08", "success": false },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-workflowsnczr/series-workflowsnczr-build-action-576878308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 12:46:34 +0000 UTC FinishedAt: 2026-08-20 12:55:14 +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:*eb87a6ef-01ec-42f7-a9dc-635c60d6bbab,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-workflowsnczr/series-workflowsnczr-convert-artifact-1307807486/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": "0cec5a3c-8830-4e29-9c5f-259c7d1b2b08", "success": false },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-workflowsnczr/series-workflowsnczr-build-action-576878308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-08-20 12:55:24 +0000 UTC FinishedAt: 2026-08-20 12:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsnczr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapon","folio_dup_swap","swap_dup_entry_direct","swap_retry_table_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"b5cc56f3-471d-4c1a-a63d-5ad543508aa0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-08-20 12:55:24 +0000 UTC FinishedAt: 2026-08-20 12:55:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}