Name: series-workflowgglpz Phase: Succeeded StartedAt: 2026-07-20 08:14:49 +0000 UTC FinishedAt: 2026-07-20 09:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[0] Phase: Succeeded StartedAt: 2026-07-20 08:14:49 +0000 UTC FinishedAt: 2026-07-20 08:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 08:14:49 +0000 UTC FinishedAt: 2026-07-20 08:45: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": "37d0baf9-a670-4ea1-b243-a8644f3cf69c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_cluster_populate", "swap_dup_entries_cluster", "swap_extend_table_try_free", "sys_swapon" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2NsdXN0ZXJfcG9wdWxhdGUmIzM0OywKICAgICYjMzQ7c3dhcF9kdXBfZW50cmllc19jbHVzdGVyJiMzNDssCiAgICAmIzM0O3N3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlJiMzNDssCiAgICAmIzM0O3N5c19zd2Fwb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjbHVzdGVyIGFsbG9jYXRpb24sIGNvcHlpbmcsIGFuZCBmcmVlaW5nIGxvZ2ljLCBhcyB3ZWxsIGFzIGFkanVzdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGhlIHN3YXBvbiBzeXNjYWxsLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3dhcG9uIGFuZCBzd2FwIGFsbG9jYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMDEzZDdmYmQxMGNlZmNjNGUyNGJjYjU3ZDczMjk3YmIzMmMyNGJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDg6NDQ6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDYxNWQ5MDg2NzExMTNmLi5mYzlmMTZiYzJlNGUwYyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC00OTAsNiAmIzQzOzQ5MCwyMCBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqZF9jaSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpzX2NpKVxuJiM0Mzt7XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGRfY2ktXHUwMDNldGFibGUsIHJjdV9hY2Nlc3NfcG9pbnRlcihzX2NpLVx1MDAzZXRhYmxlKSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO1x0ZF9jaS1cdTAwM2VtZW1jZ190YWJsZSA9IHNfY2ktXHUwMDNlbWVtY2dfdGFibGU7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmICFTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xuJiM0MztcdGRfY2ktXHUwMDNlemVyb19iaXRtYXAgPSBzX2NpLVx1MDAzZXplcm9fYml0bWFwO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFNhbml0eSBjaGVjayB0byBlbnN1cmUgbm90aGluZyBsZWFrZWQsIGFuZCB0aGUgc3BlY2lmaWVkIHJhbmdlIGlzIGVtcHR5LlxuICAqIE9uZSBzcGVjaWFsIGNhc2UgaXMgdGhhdCBiYWQgc2xvdHMgY2FuJiMzOTt0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXG5AQCAtNTI3LDYgJiM0Mzs1NDEsNyBAQCBzdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcbiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gdG1wX2NpO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qXG5AQCAtNTUyLDcgJiM0Mzs1NjcsOCBAQCBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcl9sb2NrKTtcbiBcdGxvY2FsX3VubG9jayhcdTAwMjZwZXJjcHVfc3dhcF9jbHVzdGVyLmxvY2spO1xuIFxuLVx0cmV0ID0gc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XG4mIzQzO1x0dG1wX2NpID0gKmNpO1xuJiM0MztcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShcdTAwMjZ0bXBfY2ksIF9fR0ZQX0hJR0ggfCBfX0dGUF9OT01FTUFMTE9DIHxcbiBcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gXG4gXHQvKlxuQEAgLTU3Myw2ICYjNDM7NTg5LDkgQEAgc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBVcGRhdGUgdGFibGVzIGluIGF0b21pYyBjb250ZXh0ICovXG4mIzQzO1x0c3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoY2ksIFx1MDAyNnRtcF9jaSk7XG4gXHRyZXR1cm4gY2k7XG4gfVxuIFxuQEAgLTE1MTEsMjAgJiM0MzsxNTMwLDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gc3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcbiBcbiBcdGlmICghY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlW2ldKVxuLVx0XHRcdGNhbl9mcmVlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChjYW5fZnJlZSkge1xuLVx0XHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuLVx0XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGtmcmVlKGNpLVx1MDAzZWV4dGVuZF90YWJsZSk7XG4mIzQzO1x0Y2ktXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcbiB9XG4gXG4gLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqL1xuQEAgLTE3MTYsNyAmIzQzOzE3MzIsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gZmFpbGVkOlxuIFx0d2hpbGUgKGNpX29mZi0tIFx1MDAzZSBjaV9zdGFydClcbiBcdFx0X19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpO1xuLVx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0zNTg4LDExICYjNDM7MzYwMyw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG4gXG4gXHRtYXhwYWdlcyA9IHNpLVx1MDAzZW1heDtcbiBcbi1cdC8qIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gKi9cbi1cdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTtcbi1cbiBcdGlmIChzaS1cdTAwM2ViZGV2IFx1MDAyNlx1MDAyNiBiZGV2X3N0YWJsZV93cml0ZXMoc2ktXHUwMDNlYmRldikpXG4gXHRcdHNpLVx1MDAzZWZsYWdzIHw9IFNXUF9TVEFCTEVfV1JJVEVTO1xuIFxuQEAgLTM2MDYsNiAmIzQzOzM2MTYsMTQgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcdFx0aW5jZWRfbnJfcm90YXRlX3N3YXAgPSB0cnVlO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mby4gU1dQX1NPTElEU1RBVEUgaXMgdXNlZCBmb3JcbiYjNDM7XHQgKiBnbG9iYWxfY2x1c3RlciBhbGxvY2F0aW9uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XG4mIzQzO1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfY2x1c3Rlcl9wb3B1bGF0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXImIzM0OywKICAgICYjMzQ7c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7c3lzX3N3YXBvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNsdXN0ZXIgYWxsb2NhdGlvbiwgY29weWluZywgYW5kIGZyZWVpbmcgbG9naWMsIGFzIHdlbGwgYXMgYWRqdXN0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0aGUgc3dhcG9uIHN5c2NhbGwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzd2Fwb24gYW5kIHN3YXAgYWxsb2NhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjAxM2Q3ZmJkMTBjZWZjYzRlMjRiY2I1N2Q3MzI5N2JiMzJjMjRiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDA4OjQ0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNjE1ZDkwODY3MTExM2YuLmZjOWYxNmJjMmU0ZTBjIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ5MCw2ICYjNDM7NDkwLDIwIEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqZF9jaSwKJiM0MzsJCQkJICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqc19jaSkKJiM0Mzt7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihkX2NpLSZndDt0YWJsZSwgcmN1X2FjY2Vzc19wb2ludGVyKHNfY2ktJmd0O3RhYmxlKSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzOwlkX2NpLSZndDttZW1jZ190YWJsZSA9IHNfY2ktJmd0O21lbWNnX3RhYmxlOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUcKJiM0MzsJZF9jaS0mZ3Q7emVyb19iaXRtYXAgPSBzX2NpLSZndDt6ZXJvX2JpdG1hcDsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiAvKgogICogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBub3RoaW5nIGxlYWtlZCwgYW5kIHRoZSBzcGVjaWZpZWQgcmFuZ2UgaXMgZW1wdHkuCiAgKiBPbmUgc3BlY2lhbCBjYXNlIGlzIHRoYXQgYmFkIHNsb3RzIGNhbiYjMzk7dCBiZSBmcmVlZCwgc28gY2hlY2sgdGhlIG51bWJlciBvZgpAQCAtNTI3LDYgJiM0Mzs1NDEsNyBAQCBzdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICoKIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCQkgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSkKIHsKJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvIHRtcF9jaTsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTU1Miw3ICYjNDM7NTY3LDggQEAgc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJc3Bpbl91bmxvY2soJmFtcDtzaS0mZ3Q7Z2xvYmFsX2NsdXN0ZXJfbG9jayk7CiAJbG9jYWxfdW5sb2NrKCZhbXA7cGVyY3B1X3N3YXBfY2x1c3Rlci5sb2NrKTsKIAotCXJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShjaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfAomIzQzOwl0bXBfY2kgPSAqY2k7CiYjNDM7CXJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZSgmYW1wO3RtcF9jaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfAogCQkJCQkgICBHRlBfS0VSTkVMKTsKIAogCS8qCkBAIC01NzMsNiAmIzQzOzU4OSw5IEBAIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCXNwaW5fdW5sb2NrKCZhbXA7Y2ktJmd0O2xvY2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CiYjNDM7CiYjNDM7CS8qIFVwZGF0ZSB0YWJsZXMgaW4gYXRvbWljIGNvbnRleHQgKi8KJiM0MzsJc3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoY2ksICZhbXA7dG1wX2NpKTsKIAlyZXR1cm4gY2k7CiB9CiAKQEAgLTE1MTEsMjAgJiM0MzsxNTMwLDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApCiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogewogCXVuc2lnbmVkIGxvbmcgaTsKLQlib29sIGNhbl9mcmVlID0gdHJ1ZTsKIAogCWlmICghY2ktJmd0O2V4dGVuZF90YWJsZSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IFNXQVBGSUxFX0NMVVNURVI7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChjaS0mZ3Q7ZXh0ZW5kX3RhYmxlW2ldKQotCQkJY2FuX2ZyZWUgPSBmYWxzZTsKJiM0MzsJCQlyZXR1cm47CiAJfQogCi0JaWYgKGNhbl9mcmVlKSB7Ci0JCWtmcmVlKGNpLSZndDtleHRlbmRfdGFibGUpOwotCQljaS0mZ3Q7ZXh0ZW5kX3RhYmxlID0gTlVMTDsKLQl9CiYjNDM7CWtmcmVlKGNpLSZndDtleHRlbmRfdGFibGUpOwomIzQzOwljaS0mZ3Q7ZXh0ZW5kX3RhYmxlID0gTlVMTDsKIH0KIAogLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqLwpAQCAtMTcxNiw3ICYjNDM7MTczMiw2IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIGZhaWxlZDoKIAl3aGlsZSAoY2lfb2ZmLS0gJmd0OyBjaV9zdGFydCkKIAkJX19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpOwotCXN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzU4OCwxMSAmIzQzOzM2MDMsNiBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQogCiAJbWF4cGFnZXMgPSBzaS0mZ3Q7bWF4OwogCi0JLyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqLwotCWVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpOwotCWlmIChlcnJvcikKLQkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7Ci0KIAlpZiAoc2ktJmd0O2JkZXYgJmFtcDsmYW1wOyBiZGV2X3N0YWJsZV93cml0ZXMoc2ktJmd0O2JkZXYpKQogCQlzaS0mZ3Q7ZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7CiAKQEAgLTM2MDYsNiAmIzQzOzM2MTYsMTQgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncykKIAkJaW5jZWRfbnJfcm90YXRlX3N3YXAgPSB0cnVlOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvLiBTV1BfU09MSURTVEFURSBpcyB1c2VkIGZvcgomIzQzOwkgKiBnbG9iYWxfY2x1c3RlciBhbGxvY2F0aW9uCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7CiYjNDM7CiAJaWYgKChzd2FwX2ZsYWdzICZhbXA7IFNXQVBfRkxBR19ESVNDQVJEKSAmYW1wOyZhbXA7CiAJICAgIHNpLSZndDtiZGV2ICZhbXA7JmFtcDsgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLSZndDtiZGV2KSkgewogCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbXBhY3RmdWwuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBzd2FwX2NsdXN0ZXJfY29weV90YWJsZWAgYW5kIGludGVncmF0aW5nIGl0IGludG8gYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IHRhYmxlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBpbiBwb3B1bGF0aW9uLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFyZSBhbHNvIGNhdGNoaW5nIG15IGV5ZTsgc2hvcnQtY2lyY3VpdGluZyBhbmQgZnJlZWluZyBvbmx5IGlmIGFsbCBlbnRyaWVzIGFyZSB6ZXJvIHN1Z2dlc3RzIG9wdGltaXphdGlvbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucy4gVGhlIHJlbW92YWwgb2YgdGhlIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSlgIGNhbGwgZnJvbSB0aGUgZXJyb3IgcGF0aCBpbiBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBpcyBhIGJpdCBjb25jZXJuaW5nIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQgd2FzIHJlbW92ZWQgYW5kIGlmIHRoZSBlcnJvciBoYW5kbGluZyBpcyBzdGlsbCByb2J1c3QuIEZpbmFsbHksIG1vdmluZyBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCBpbiB0aGUgYHN3YXBvbmAgc3lzY2FsbCBhZnRlciB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIGlzIHNldC4uLiB0aGF0JiMzOTtzIGEgc3RydWN0dXJhbCBjaGFuZ2UgcmVsYXRlZCB0byBzb2xpZC1zdGF0ZSBkcml2ZXMsIHdoaWNoIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24uCgpGdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBzd2FwIHN1YnN5c3RlbSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3dhcG9uYCBzeXNjYWxsIGFuZCwgY3J1Y2lhbGx5LCBzd2FwIGFsbG9jYXRpb24gcGF0aHMuIFRoYXQgbWVhbnMgZnV6emVyIHRpbWUsIHdpdGhvdXQgYSBkb3VidC4gSSBuZWVkIHRvIGdldCB0aGlzIGNvdmVyZWQgd2l0aCBzb21lIGZ1enppbmcgY2FtcGFpZ25zLgoKTGV0JiMzOTtzIHNlZeKApiBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfU1dBUGAgaXMgYSBwcmUtcmVxdWlzaXRlLiBBbmQsIGFoYSwgYENPTkZJR19NRU1DR2AgaXMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYC4gVGhpcyBtaWdodCBiZSBpbnRlcmVzdGluZywgc2luY2UgSSYjMzk7bSBzZWVpbmcgYW4gaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkgbmVlZCB0byBmb2N1cyBvbjoKKiAgIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC0gVGhpcyBpcyB3aGVyZSB0aGUgbmV3IHRhYmxlIGlzIHVzZWQuCiogICBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIC0gVGhlIG9wdGltaXplZCBmcmVlIHBhdGguCiogICBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCAtIFVuZGVyc3RhbmQgdGhhdCBlcnJvciBwYXRoIGNoYW5nZS4KKiAgIGBzeXNfc3dhcG9uYCAob3IgYF9feDY0X3N5c19zd2Fwb25gKSAtIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgdGh1cyBhbiBpbXBvcnRhbnQgYXR0YWNrIHN1cmZhY2UuCgpUaW1lIHRvIGNvbnN1bHQgS2NvbmZpZyBmb3IgYENPTkZJR19TV0FQYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBpcyBzcG90IG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbmZpZ3VyaW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCB1c2VzIGBTV0FQYCBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgaW5pdGlhbCBzZXR1cC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3JpdGljYWwgZGV0YWlscy4gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nIOKAkyB0aGF0JiMzOTtzIGEga2V5IGVsZW1lbnQgaW4gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJIHdhbnQgdG8gYmUgY2VydGFpbiB3ZSBoYXZlIGl0IHNldCBjb3JyZWN0bHkgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uIEdvdHRhIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFBvbmRlcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYE1FTUNHYC4gTm93LCB3aGVyZSBleGFjdGx5IGRpZCBJIHNlZSB0aGUgZGVmaW5pdGlvbiBmb3IgaXQ/IEhtbSwgd2FzIGl0IGx1cmtpbmcgaW4gYGluaXQvS2NvbmZpZ2Agb3Igd2FzIGl0IHR1Y2tlZCBhd2F5IGluIGBtbS9LY29uZmlnYD8gSXQgZmVlbHMgbGlrZSBpdCBzaG91bGQgYmUgdGhlIGxhdHRlciwgYnV0IHNvbWV0aW1lcyB0aGUgYnJvYWRlciBpbml0aWFsaXphdGlvbiB0aGluZ3Mgc25lYWsgaW50byBgaW5pdGAuIEkgbmVlZCB0byB0cmFjayB0aGlzIGRvd24gcXVpY2tseSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA1Mj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA2MS1cbmluaXQvS2NvbmZpZzoxMDYyOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNjMtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwNzAtXG5pbml0L0tjb25maWc6MTA3MTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwNzItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IENHcm91cHMgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGNvbmZpZ3MgYWZmZWN0ZWQgYXJlIGBTV0FQYCBhbmQgYE1FTUNHYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0LgoKSSBzZWUgdGhhdCBhIGZldyBjb3JlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgdGhlIHN3YXAgY2x1c3RlciB0YWJsZSwgaGFzIHNlZW4gc29tZSBjb250ZXh0IGNoYW5nZXMuIFRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uLCBgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGVgLCB3aGljaCBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIOKAkyBsaWtlbHkgcmVsYXRlZCB0byBjb3B5aW5nIG9yIHJlcGxpY2F0aW5nIHRhYmxlIGRhdGEuIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIGlzIGluIHRoZSBtaXg7IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIG5vdyBhbmQgaWYgaXQgaGFzIGFueSBzaGFyZWQgcmVzb3VyY2UgaW1wbGljYXRpb25zLiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIHN1Z2dlc3RzIHBvdGVudGlhbGx5IGFuIGF0dGVtcHQgYXQgbWVtb3J5IHJlY2xhbWF0aW9uIHdoZW4gdGhlIHN3YXAgdGFibGUgaXMgZXh0ZW5kZWQuIEFsc28sIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIG1ha2VzIG1lIHRoaW5rIHRoZXJlJiMzOTtzIHNvbWUgc29ydCBvZiBjbHVzdGVyIGVudHJ5IGR1cGxpY2F0aW9uIGludm9sdmVkLiBBbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBzeXNfc3dhcG9uYCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgc3lzdGVtIGNhbGwgbGV2ZWwuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgLSBJIHN1c3BlY3QgaXQmIzM5O3MgcHJvYmFibHkgc3RhdGljLCBidXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBmdWxseS4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCB1bmludGVudGlvbmFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTU0MD1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcbm1tL3N3YXBmaWxlLmM6NTQxOnN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTU0Mi1cdFx0XHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwZmlsZS5jPTY0Mj1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3Rlcihcbi0tXG5tbS9zd2FwZmlsZS5jLTY2OS1cdFx0Vk1fV0FSTl9PTl9PTkNFKGNsdXN0ZXJfdGFibGVfaXNfYWxsb2NlZChmb3VuZCkpO1xubW0vc3dhcGZpbGUuYzo2NzA6XHRcdHJldHVybiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc2ksIGZvdW5kKTtcbm1tL3N3YXBmaWxlLmMtNjcxLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqU3RhdGljIEZ1bmN0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGNvZGUmIzM5O3MgZ290IG15IGF0dGVudGlvbiBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9ucywgYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIHNuaXBwZXQsIGlzIHRvIGltbWVkaWF0ZWx5IGNvbmZpcm0gd2hldGhlciBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYCBpcyBpbmRlZWQgc3RhdGljLiBLbm93aW5nIHRoYXQgY2hhbmdlcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSBhbmQgcG90ZW50aWFsbHkgaG93IHRoZSBsaW5rZXIgaGFuZGxlcyBpdC4gSXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IHRoYXQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgaXMgYWxzbyBzdGF0aWM/IFRoZXNlIGtpbmRzIG9mIGRlc2lnbiBkZWNpc2lvbnMgYWZmZWN0IG1haW50YWluYWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSwgYnV0IHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQmIzM5O3MgaGl0dGluZyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9kdXBfZW50cmllc19jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE2NTU9c3RhdGljIGludCBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2OTQtLyoqXG5tbS9zd2FwZmlsZS5jOjE2OTU6ICogc3dhcF9kdXBfZW50cmllc19jbHVzdGVyOiBJbmNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXIuXG5tbS9zd2FwZmlsZS5jLTE2OTYtICogQHNpOiBUaGUgc3dhcCBkZXZpY2UuXG4tLVxubW0vc3dhcGZpbGUuYy0xNzA0LSAqL1xubW0vc3dhcGZpbGUuYzoxNzA1OnN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMTcwNi1cdFx0XHRcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTgxMz1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODI1LVxubW0vc3dhcGZpbGUuYzoxODI2Olx0cmV0dXJuIHN3YXBfZHVwX2VudHJpZXNfY2x1c3Rlcihzd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLFxubW0vc3dhcGZpbGUuYy0xODI3LVx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5KSwgbnJfcGFnZXMpO1xuLS1cbm1tL3N3YXBmaWxlLmM9Mzc2NT1pbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMzc4MS1cbm1tL3N3YXBmaWxlLmM6Mzc4MjpcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCAxKTtcbm1tL3N3YXBmaWxlLmMtMzc4My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1ODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHRzLCBmb2N1c2luZyBvbiB0aGUgZGV0YWlscyBwcm92aWRlZCBhbmQgdGhlaXIgaW1wbGljYXRpb25zOgoKKipTdGF0aWMgRnVuY3Rpb24gRGVjbGFyYXRpb25zIGluIHRoZSBDb2RlKioKCk9rYXksIHNvIEkgc2VlIHRoZXNlIHR3byBmdW5jdGlvbnMgZGVjbGFyZWQgYXMgYHN0YXRpY2A6IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGFuZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gQmVpbmcgZGVjbGFyZWQgYHN0YXRpY2AgbWVhbnMgdGhleSBoYXZlIGludGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IChlLmcuLCB0aGUgY3VycmVudCBgLmNgIGZpbGUpLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBkZXNpZ25lZCB0byBwZXJmb3JtIHNwZWNpZmljLCBpc29sYXRlZCB0YXNrcyB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlIG9yIGRhdGEgc3RydWN0dXJlIG1hbmFnZW1lbnQgc3lzdGVtLiBJdCBhbHNvIGltcGxpZXMgdGhleSBhcmUgbm90IG1lYW50IHRvIGJlIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgdHJhbnNsYXRpb24gdW5pdC4gSSB3b25kZXIgd2hhdCB0aGUgY29udGV4dCBpcywgaXMgaXQgc29tZSBzb3J0IG9mIGNhY2hpbmcgb3IgdGFibGUgbWFuYWdlbWVudCBzdHJhdGVneT8gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3b3VsZCBpbW1lZGlhdGVseSBzaGVkIGxpZ2h0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgcm9sZXMgaW4gdGhlIGJpZyBwaWN0dXJlLCBvZiBjb3Vyc2UuIEZvciBub3csIGl0JiMzOTtzIGp1c3QgdGhpcyBpbW1lZGlhdGUgb2JzZXJ2YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE1MTI9aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbi0tXG5tbS9zd2FwZmlsZS5jLTE1MjktXG5tbS9zd2FwZmlsZS5jOjE1MzA6c3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbm1tL3N3YXBmaWxlLmMtMTUzMS17XG4tLVxubW0vc3dhcGZpbGUuYz0xNTQ3PXN0YXRpYyB2b2lkIF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTU4MS1cdGlmICh1bmxpa2VseShjb3VudCA9PSBTV1BfVEJfQ09VTlRfTUFYIC0gMiB8fCBjb3VudCA9PSBTV1BfVEJfQ09VTlRfTUFYIC0gMSkpXG5tbS9zd2FwZmlsZS5jOjE1ODI6XHRcdHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTtcbm1tL3N3YXBmaWxlLmMtMTU4My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgJiMzOTtzd2Fwb24mIzM5OyBTeXN0ZW0gQ2FsbCoqCgpBbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIGNhbGwgaW4gcXVlc3Rpb24gaXMgYHN3YXBvbmAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIGl0cyBmdW5jdGlvbjogYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIGZvciB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbXBsaWNhdGlvbnMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc2ltcGxlIGZ1bmN0aW9uIGNhbGw7IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIGhvdyB0aGUgT1MgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuIEkmIzM5O20gY29uc2lkZXJpbmcgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCYjMzk7cyB1c2VkOiB3aGVuIFJBTSBpcyBleGhhdXN0ZWQsIGl0IGFsbG93cyB0aGUga2VybmVsIHRvIG1pZ3JhdGUgbGVzcy11c2VkIHBhZ2VzIHRvIGRpc2sgKHRoZSBzd2FwIHNwYWNlKSB0byBmcmVlIHVwIHBoeXNpY2FsIG1lbW9yeS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFyZ3VtZW50czogSSBuZWVkIHRvIHJlY2FsbCB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGRldmljZSBpcyBzcGVjaWZpZWQsIGxpa2VseSB0aHJvdWdoIGEgZGV2aWNlIHBhdGggb3IgYSBmaWxlIGRlc2NyaXB0b3IsIGFuZCBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGRlZmluZSBwcmlvcml0aWVzIG9yIHNpemUgY29uc3RyYWludHMuIFdoYXQgYXJlIHRoZSBwZXJtaXNzaW9uIGNoZWNrcyB0aGF0IG11c3Qgb2NjdXI/IEl0IGNhbiYjMzk7dCBiZSBqdXN0IGFueW9uZSBjYWxsaW5nIHRoaXMsIHJpZ2h0PyBJJiMzOTttIHBpY3R1cmluZyB0aGUga2VybmVsIGNvZGUgdGhhdCBoYW5kbGVzIHRoaXMg4oCTIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgcGFnZSB0YWJsZXMsIHRoZSBkaXJ0eSBwYWdlIGZsdXNoaW5nLCB0aGUgY29udGV4dCBzd2l0Y2hpbmcgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZS4KCkkmIzM5O20gYWxzbyBwb25kZXJpbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgY29tbW9uIHBpdGZhbGxzLiBGb3IgZXhhbXBsZSwgYW0gSSB3b3JyaWVkIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIG9uIGEgaGlnaC1sYXRlbmN5IHN0b3JhZ2UgbWVkaXVtLCBsaWtlIGEgbmV0d29ya2VkIGRyaXZlPyBIb3cgZG9lcyB0aGlzIGRlY2lzaW9uIGltcGFjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uIG9mIHRoZSBzd2FwIHNwYWNlLiBXaGF0IGFib3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gcmVnYXJkcyB0byBkYXRhIGF0IHJlc3Q/IElzIHRoZSBzd2FwIHNwYWNlIGVuY3J5cHRlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBzd2FwIGRldmljZSBpcyBjb3JydXB0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlY292ZXJ5PwoKRmluYWxseSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGNvbXBhcmluZyBpdCB0byBpdHMgY291bnRlcnBhcnQsIGBzd2Fwb2ZmYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBtZW50YWwgY2hlY2tsaXN0IG9mIGVycm9yIGNvbmRpdGlvbnMgSSYjMzk7ZCBleHBlY3QgdG8gc2VlOiBpbnZhbGlkIGRldmljZSwgaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zLCByZXNvdXJjZSBleGhhdXN0aW9uLCBhbmQgc28gb24uIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgZGVidWdnaW5nIHRvb2xzIGFuZCB0cmFjaW5nIG1lY2hhbmlzbXMgd291bGQgYmUgbW9zdCBlZmZlY3RpdmUgZm9yIHRyb3VibGVzaG9vdGluZyBhIGBzd2Fwb25gIGlzc3VlLiBJIGFtIGFsc28gcmVtZW1iZXJpbmcgb3RoZXIgcmVsYXRlZCBzeXN0ZW0gY2FsbHMsIGxpa2UgYG1tYXBgIG9yIGBtdW5tYXBgLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0gYW5kIHRoZSBgc3dhcG9uYCBjYWxsLiBJdCYjMzk7cyBtb3JlIHRoYW4ganVzdCBrbm93aW5nIHdoYXQgaXQgZG9lcywgaXQmIzM5O3MgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBhbGwgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnN3YXBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0zNDIyPXN0YXRpYyBpbnQgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTM1MDEtXG5tbS9zd2FwZmlsZS5jOjM1MDI6U1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbm1tL3N3YXBmaWxlLmMtMzUwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBTdWJzeXN0ZW0gTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSB3YXkgdGhlIHN3YXAgc3Vic3lzdGVtIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGl0IG1hbmFnZXMgdGhlc2UgJiMzOTtzd2FwIGNsdXN0ZXIgdGFibGVzLiYjMzk7IFRoZSBrZXkgc3lzY2FsbCBpbnZvbHZlZCBoZXJlIGlzIGBzeXNfc3dhcG9uYCDigJMgdGhhdCYjMzk7cyBteSBkaXJlY3QgZW50cnkgcG9pbnQgdG8gdGhlIGNoYW5nZXMuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAsIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLCBhbmQgb2YgY291cnNlLCBgc3lzX3N3YXBvbmAgaXRzZWxmLCBiZWNhdXNlIHRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIG9wZXJhdGlvbmFsIGNoYW5nZXMuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgc3dhcG9uYCBzeXNjYWxsIGFuZCB0aHJvdWdoIHN3YXBwaW5nLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBjaGFuZ2VzIHRvIGFsbG9jYXRpb24sIGR1cGxpY2F0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZXNlIGNsdXN0ZXIgdGFibGVzLCBhbG9uZyB3aXRoIHNvbWUgdHdlYWtzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gYHN3YXBvbmAuIFRoaXMga2luZCBvZiBjb3JlLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhY2Nlc3NpYmxlIHZpYSBhIHVzZXItc3BhY2Ugc3lzY2FsbCwgYWx3YXlzIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEl0IGFmZmVjdHMgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19NRU1DR2AgaXMgdXNlZCBpbiBgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGVgLCBidXQgaXMgdGhhdCB0aGUgb25seSBjb25maWc/IEFuZCBgU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdgIGlzIHRoZXJlLCBidXQgdGhhdOKAmXMgbm90IGEgY29uZmlnIG9wdGlvbiwgcmlnaHQ/IExldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NXQVBfVEFCTEVfSEFTX1pFUk9GTEFHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuaD0xMT1leHRlcm4gaW50IHBhZ2VfY2x1c3Rlcjtcbi0tXG5tbS9zd2FwLmgtMjUtLyogSWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGJlc2lkZXMgUEZOIGFuZCBtYXJrZXIsIHN0b3JlIHplcm8gZmxhZyBpbmxpbmUgKi9cbm1tL3N3YXAuaDoyNjojZGVmaW5lIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXHRcdCgoQklUU19QRVJfTE9ORyAtIFNXQVBfQ0FDSEVfUEZOX01BUktfQklUUyAtIFxcXG5tbS9zd2FwLmgtMjctXHRcdFx0XHRcdCAgU1dBUF9DQUNIRV9QRk5fQklUUykgXHUwMDNlIFNXQVBfQ09VTlRfTUlOX0JJVFMpXG4tLVxubW0vc3dhcC5oPTQ4PXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyB7XG4tLVxubW0vc3dhcC5oLTYxLSNlbmRpZlxubW0vc3dhcC5oOjYyOiNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXAuaC02My1cdHVuc2lnbmVkIGxvbmcgKnplcm9fYml0bWFwO1xuLS1cbm1tL3N3YXBfdGFibGUuaD0xNT1zdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4tLVxubW0vc3dhcF90YWJsZS5oLTcxLSNkZWZpbmUgU1dQX1RCX0ZMQUdTX0JJVFNcdG1pbig1LCBCSVRTX1BFUl9MT05HIC0gU1dQX1RCX1BGTl9CSVRTKVxubW0vc3dhcF90YWJsZS5oOjcyOiNkZWZpbmUgU1dQX1RCX0NPVU5UX0JJVFNcdChTV1BfVEJfRkxBR1NfQklUUyAtIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHKVxubW0vc3dhcF90YWJsZS5oLTczLSNkZWZpbmUgU1dQX1RCX0ZMQUdTX01BU0tcdCh+KCh+MFVMKSBcdTAwM2VcdTAwM2UgU1dQX1RCX0ZMQUdTX0JJVFMpKVxuLS1cbm1tL3N3YXBfdGFibGUuaC03Ny0jZGVmaW5lIFNXUF9UQl9DT1VOVF9NQVggICAgICAgKCgxIFx1MDAzY1x1MDAzYyBTV1BfVEJfQ09VTlRfQklUUykgLSAxKVxubW0vc3dhcF90YWJsZS5oOjc4Oi8qIFRoZSBmaXJzdCBmbGFnIGlzIHplcm8gYml0IChTV0FQX1RBQkxFX0hBU19aRVJPRkxBRykgKi9cbm1tL3N3YXBfdGFibGUuaC03OS0jZGVmaW5lIFNXUF9UQl9aRVJPX0ZMQUdcdEJJVChCSVRTX1BFUl9MT05HIC0gU1dQX1RCX0ZMQUdTX0JJVFMpXG4tLVxubW0vc3dhcF90YWJsZS5oPTI2Nz1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX3RhYmxlX3NldF96ZXJvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF90YWJsZS5oLTI2OS17XG5tbS9zd2FwX3RhYmxlLmg6MjcwOiNpZiBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xubW0vc3dhcF90YWJsZS5oLTI3MS1cdHVuc2lnbmVkIGxvbmcgc3dwX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi0tXG5tbS9zd2FwX3RhYmxlLmg9MjgzPXN0YXRpYyBpbmxpbmUgYm9vbCBfX3N3YXBfdGFibGVfdGVzdF96ZXJvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF90YWJsZS5oLTI4NS17XG5tbS9zd2FwX3RhYmxlLmg6Mjg2OiNpZiBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xubW0vc3dhcF90YWJsZS5oLTI4Ny1cdHVuc2lnbmVkIGxvbmcgc3dwX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi0tXG5tbS9zd2FwX3RhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfdGFibGVfY2xlYXJfemVybyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfdGFibGUuaC0yOTgte1xubW0vc3dhcF90YWJsZS5oOjI5OTojaWYgU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXBfdGFibGUuaC0zMDAtXHR1bnNpZ25lZCBsb25nIHN3cF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4tLVxubW0vc3dhcGZpbGUuYz00MjE9c3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2ZyZWVfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTQyOS1cbm1tL3N3YXBmaWxlLmM6NDMwOiNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXBmaWxlLmMtNDMxLVx0a2ZyZWUoY2ktXHUwMDNlemVyb19iaXRtYXApO1xuLS1cbm1tL3N3YXBmaWxlLmM9NDQ5PXN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbi0tXG5tbS9zd2FwZmlsZS5jLTQ4MS1cbm1tL3N3YXBmaWxlLmM6NDgyOiNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXBmaWxlLmMtNDgzLVx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZXplcm9fYml0bWFwKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTQ5Mz1zdGF0aWMgdm9pZCBzd2FwX2NsdXN0ZXJfY29weV90YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmRfY2ksXG4tLVxubW0vc3dhcGZpbGUuYy01MDEtXG5tbS9zd2FwZmlsZS5jOjUwMjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXG5tbS9zd2FwZmlsZS5jLTUwMy1cdGRfY2ktXHUwMDNlemVyb19iaXRtYXAgPSBzX2NpLVx1MDAzZXplcm9fYml0bWFwO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTkyND12b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xOTQ2LVx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xubW0vc3dhcGZpbGUuYzoxOTQ3Olx0XHRpZiAoIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHKVxubW0vc3dhcGZpbGUuYy0xOTQ4LVx0XHRcdF9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBjaV9vZmYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUzCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyBsaWtlIGEga2VybmVsIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgU3dhcCBUYWJsZSBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgc28gYFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHYCAtIHRoYXQmIzM5O3MgYSBtYWNybywgdGhlIGtpbmQgdGhhdCBwcm9iYWJseSBkaWN0YXRlcyBzb21lIGNvbXBpbGUtdGltZSBiZWhhdmlvdXIgYXJvdW5kIGhvdyB0aGUgc3dhcCB0YWJsZSBpcyBtYW5hZ2VkLiBOb3csIGxldCYjMzk7cyBzZWUsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN3YXAtcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGtleSBvbmVzIHNlZW0gdG8gYmUgYFNXQVBgIGl0c2VsZiwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsLCBhbmQgYE1FTUNHYCwgd2hpY2ggdGVsbHMgbWUgd2UgYXJlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuIFRob3NlIGFyZSBteSBwcmltYXJ5IGNvbnNpZGVyYXRpb25zIGhlcmUuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggY29kZSBzZWN0aW9ucyBhcmUgcGVydGluZW50LiBUaGUgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsLCBnaXZlbiB0aGUgY29udGV4dCwgYXJlIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgLCB3aGljaCBpcyBvYnZpb3VzbHkgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHN3YXAgY2x1c3Rlci4gVGhlcmUmIzM5O3MgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAsIHdoaWNoIGluZGljYXRlcyB3ZSBhcmUgZGVhbGluZyB3aXRoIGR1cGxpY2F0aW5nIGVudHJpZXMgaW4gdGhlIHN3YXAgdGFibGUvY2x1c3Rlci4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCwgd2hpY2ggbGlrZWx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIHRhYmxlIGV4cGFuc2lvbiBhbmQgcG90ZW50aWFsIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIGBzeXNfc3dhcG9uYCB3aGljaCBoYXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIHRoZSBzeXN0ZW0tbGV2ZWwgZnVuY3Rpb24gZm9yIHR1cm5pbmcgb24gc3dhcCBtZW1vcnksIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBmZWF0dXJlLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSBjb3JlIG9wZXJhdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB3ZSBhcmUgZGVhbGluZyB3aXRoLgoKTm93LCBpdCYjMzk7cyB0aW1lIHRvIHRlc3QgdGhlIGNvZGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJpZXNfY2x1c3RlciYjMzQ7LAogICAgJiMzNDtzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZSYjMzQ7LAogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJpZXNfY2x1c3RlciYjMzQ7LAogICAgJiMzNDtzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZSYjMzQ7LAogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuMDQ1NDUyNDk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExOTYwMTEyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2NsdXN0ZXJfcG9wdWxhdGVcIixcbiAgICBcInN3YXBfZHVwX2VudHJpZXNfY2x1c3RlclwiLFxuICAgIFwic3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVcIixcbiAgICBcInN5c19zd2Fwb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNsdXN0ZXIgYWxsb2NhdGlvbiwgY29weWluZywgYW5kIGZyZWVpbmcgbG9naWMsIGFzIHdlbGwgYXMgYWRqdXN0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0aGUgc3dhcG9uIHN5c2NhbGwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzd2Fwb24gYW5kIHN3YXAgYWxsb2NhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuMDQ1NDU4NTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIwODk1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMDEzZDdmYmQxMGNlZmNjNGUyNGJjYjU3ZDczMjk3YmIzMmMyNGJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDA4OjQ0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggNjE1ZDkwODY3MTExM2YuLmZjOWYxNmJjMmU0ZTBjIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBmaWxlLmNcXG4rKysgYi9tbS9zd2FwZmlsZS5jXFxuQEAgLTQ5MCw2ICs0OTAsMjAgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpkX2NpLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpzX2NpKVxcbit7XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihkX2NpLVxcdTAwM2V0YWJsZSwgcmN1X2FjY2Vzc19wb2ludGVyKHNfY2ktXFx1MDAzZXRhYmxlKSk7XFxuK1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK1xcdGRfY2ktXFx1MDAzZW1lbWNnX3RhYmxlID0gc19jaS1cXHUwMDNlbWVtY2dfdGFibGU7XFxuKyNlbmRpZlxcbitcXG4rI2lmICFTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xcbitcXHRkX2NpLVxcdTAwM2V6ZXJvX2JpdG1hcCA9IHNfY2ktXFx1MDAzZXplcm9fYml0bWFwO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gLypcXG4gICogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBub3RoaW5nIGxlYWtlZCwgYW5kIHRoZSBzcGVjaWZpZWQgcmFuZ2UgaXMgZW1wdHkuXFxuICAqIE9uZSBzcGVjaWFsIGNhc2UgaXMgdGhhdCBiYWQgc2xvdHMgY2FuJ3QgYmUgZnJlZWQsIHNvIGNoZWNrIHRoZSBudW1iZXIgb2ZcXG5AQCAtNTI3LDYgKzU0MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKlxcbiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRcXHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4ge1xcbitcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gdG1wX2NpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0LypcXG5AQCAtNTUyLDcgKzU2Nyw4IEBAIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJfbG9jayk7XFxuIFxcdGxvY2FsX3VubG9jayhcXHUwMDI2cGVyY3B1X3N3YXBfY2x1c3Rlci5sb2NrKTtcXG4gXFxuLVxcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShjaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfFxcbitcXHR0bXBfY2kgPSAqY2k7XFxuK1xcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShcXHUwMDI2dG1wX2NpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XFxuIFxcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbiBcXG4gXFx0LypcXG5AQCAtNTczLDYgKzU4OSw5IEBAIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBVcGRhdGUgdGFibGVzIGluIGF0b21pYyBjb250ZXh0ICovXFxuK1xcdHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlKGNpLCBcXHUwMDI2dG1wX2NpKTtcXG4gXFx0cmV0dXJuIGNpO1xcbiB9XFxuIFxcbkBAIC0xNTExLDIwICsxNTMwLDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxuIHN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpO1xcbi1cXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcXG4gXFxuIFxcdGlmICghY2ktXFx1MDAzZWV4dGVuZF90YWJsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNXQVBGSUxFX0NMVVNURVI7IGkrKykge1xcbiBcXHRcXHRpZiAoY2ktXFx1MDAzZWV4dGVuZF90YWJsZVtpXSlcXG4tXFx0XFx0XFx0Y2FuX2ZyZWUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoY2FuX2ZyZWUpIHtcXG4tXFx0XFx0a2ZyZWUoY2ktXFx1MDAzZWV4dGVuZF90YWJsZSk7XFxuLVxcdFxcdGNpLVxcdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xcbi1cXHR9XFxuK1xcdGtmcmVlKGNpLVxcdTAwM2VleHRlbmRfdGFibGUpO1xcbitcXHRjaS1cXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcXG4gfVxcbiBcXG4gLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqL1xcbkBAIC0xNzE2LDcgKzE3MzIsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIGZhaWxlZDpcXG4gXFx0d2hpbGUgKGNpX29mZi0tIFxcdTAwM2UgY2lfc3RhcnQpXFxuIFxcdFxcdF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShjaSwgY2lfb2ZmKTtcXG4tXFx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC0zNTg4LDExICszNjAzLDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcXG4gXFxuIFxcdG1heHBhZ2VzID0gc2ktXFx1MDAzZW1heDtcXG4gXFxuLVxcdC8qIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gKi9cXG4tXFx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XFxuLVxcbiBcXHRpZiAoc2ktXFx1MDAzZWJkZXYgXFx1MDAyNlxcdTAwMjYgYmRldl9zdGFibGVfd3JpdGVzKHNpLVxcdTAwM2ViZGV2KSlcXG4gXFx0XFx0c2ktXFx1MDAzZWZsYWdzIHw9IFNXUF9TVEFCTEVfV1JJVEVTO1xcbiBcXG5AQCAtMzYwNiw2ICszNjE2LDE0IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuIFxcdFxcdGluY2VkX25yX3JvdGF0ZV9zd2FwID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mby4gU1dQX1NPTElEU1RBVEUgaXMgdXNlZCBmb3JcXG4rXFx0ICogZ2xvYmFsX2NsdXN0ZXIgYWxsb2NhdGlvblxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XFxuK1xcbiBcXHRpZiAoKHN3YXBfZmxhZ3MgXFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHNpLVxcdTAwM2ViZGV2IFxcdTAwMjZcXHUwMDI2IGJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzaS1cXHUwMDNlYmRldikpIHtcXG4gXFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuNTM4NTE0NjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcwMjkzNjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfY2x1c3Rlcl9wb3B1bGF0ZVwiLFxuICAgIFwic3dhcF9kdXBfZW50cmllc19jbHVzdGVyXCIsXG4gICAgXCJzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZVwiLFxuICAgIFwic3lzX3N3YXBvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwMTNkN2ZiZDEwY2VmY2M0ZTI0YmNiNTdkNzMyOTdiYjMyYzI0YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwODo0NDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCA2MTVkOTA4NjcxMTEzZi4uZmM5ZjE2YmMyZTRlMGMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtNDkwLDYgKzQ5MCwyMCBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpkX2NpLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqc19jaSlcbit7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoZF9jaS1cdTAwM2V0YWJsZSwgcmN1X2FjY2Vzc19wb2ludGVyKHNfY2ktXHUwMDNldGFibGUpKTtcbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRkX2NpLVx1MDAzZW1lbWNnX3RhYmxlID0gc19jaS1cdTAwM2VtZW1jZ190YWJsZTtcbisjZW5kaWZcbitcbisjaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXG4rXHRkX2NpLVx1MDAzZXplcm9fYml0bWFwID0gc19jaS1cdTAwM2V6ZXJvX2JpdG1hcDtcbisjZW5kaWZcbit9XG4rXG4gLypcbiAgKiBTYW5pdHkgY2hlY2sgdG8gZW5zdXJlIG5vdGhpbmcgbGVha2VkLCBhbmQgdGhlIHNwZWNpZmllZCByYW5nZSBpcyBlbXB0eS5cbiAgKiBPbmUgc3BlY2lhbCBjYXNlIGlzIHRoYXQgYmFkIHNsb3RzIGNhbid0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXG5AQCAtNTI3LDYgKzU0MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKlxuIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4ge1xuK1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvIHRtcF9jaTtcbiBcdGludCByZXQ7XG4gXG4gXHQvKlxuQEAgLTU1Miw3ICs1NjcsOCBAQCBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcl9sb2NrKTtcbiBcdGxvY2FsX3VubG9jayhcdTAwMjZwZXJjcHVfc3dhcF9jbHVzdGVyLmxvY2spO1xuIFxuLVx0cmV0ID0gc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XG4rXHR0bXBfY2kgPSAqY2k7XG4rXHRyZXQgPSBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoXHUwMDI2dG1wX2NpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XG4gXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuIFxuIFx0LypcbkBAIC01NzMsNiArNTg5LDkgQEAgc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuK1xuK1x0LyogVXBkYXRlIHRhYmxlcyBpbiBhdG9taWMgY29udGV4dCAqL1xuK1x0c3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoY2ksIFx1MDAyNnRtcF9jaSk7XG4gXHRyZXR1cm4gY2k7XG4gfVxuIFxuQEAgLTE1MTEsMjAgKzE1MzAsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbi1cdGJvb2wgY2FuX2ZyZWUgPSB0cnVlO1xuIFxuIFx0aWYgKCFjaS1cdTAwM2VleHRlbmRfdGFibGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNXQVBGSUxFX0NMVVNURVI7IGkrKykge1xuIFx0XHRpZiAoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlW2ldKVxuLVx0XHRcdGNhbl9mcmVlID0gZmFsc2U7XG4rXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGNhbl9mcmVlKSB7XG4tXHRcdGtmcmVlKGNpLVx1MDAzZWV4dGVuZF90YWJsZSk7XG4tXHRcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4tXHR9XG4rXHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuK1x0Y2ktXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcbiB9XG4gXG4gLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqL1xuQEAgLTE3MTYsNyArMTczMiw2IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBmYWlsZWQ6XG4gXHR3aGlsZSAoY2lfb2ZmLS0gXHUwMDNlIGNpX3N0YXJ0KVxuIFx0XHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XG4tXHRzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTM1ODgsMTEgKzM2MDMsNiBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxuIFxuIFx0bWF4cGFnZXMgPSBzaS1cdTAwM2VtYXg7XG4gXG4tXHQvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovXG4tXHRlcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XG4tXG4gXHRpZiAoc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9zdGFibGVfd3JpdGVzKHNpLVx1MDAzZWJkZXYpKVxuIFx0XHRzaS1cdTAwM2VmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUztcbiBcbkBAIC0zNjA2LDYgKzM2MTYsMTQgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcdFx0aW5jZWRfbnJfcm90YXRlX3N3YXAgPSB0cnVlO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8uIFNXUF9TT0xJRFNUQVRFIGlzIHVzZWQgZm9yXG4rXHQgKiBnbG9iYWxfY2x1c3RlciBhbGxvY2F0aW9uXG4rXHQgKi9cbitcdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTtcbitcbiBcdGlmICgoc3dhcF9mbGFncyBcdTAwMjYgU1dBUF9GTEFHX0RJU0NBUkQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzaS1cdTAwM2ViZGV2KSkge1xuIFx0XHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuNTM4NTE2NzgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyNTk2NTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXAgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbXBhY3RmdWwuIEl0IGxvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiBjYWxsZWQgYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYCBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyB0YWJsZSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBpbiBwb3B1bGF0aW9uLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFyZSBhbHNvIGNhdGNoaW5nIG15IGV5ZTsgc2hvcnQtY2lyY3VpdGluZyBhbmQgZnJlZWluZyBvbmx5IGlmIGFsbCBlbnRyaWVzIGFyZSB6ZXJvIHN1Z2dlc3RzIG9wdGltaXphdGlvbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKWAgY2FsbCBmcm9tIHRoZSBlcnJvciBwYXRoIGluIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGlzIGEgYml0IGNvbmNlcm5pbmcg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCB3YXMgcmVtb3ZlZCBhbmQgaWYgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHN0aWxsIHJvYnVzdC4gRmluYWxseSwgbW92aW5nIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGluIHRoZSBgc3dhcG9uYCBzeXNjYWxsIGFmdGVyIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgaXMgc2V0Li4uIHRoYXQncyBhIHN0cnVjdHVyYWwgY2hhbmdlIHJlbGF0ZWQgdG8gc29saWQtc3RhdGUgZHJpdmVzLCB3aGljaCBuZWVkcyBjYXJlZnVsIGV4YW1pbmF0aW9uLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBzd2FwIHN1YnN5c3RlbSwgYW5kIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBzd2Fwb25gIHN5c2NhbGwgYW5kLCBjcnVjaWFsbHksIHN3YXAgYWxsb2NhdGlvbiBwYXRocy4gVGhhdCBtZWFucyBmdXp6ZXIgdGltZSwgd2l0aG91dCBhIGRvdWJ0LiBJIG5lZWQgdG8gZ2V0IHRoaXMgY292ZXJlZCB3aXRoIHNvbWUgZnV6emluZyBjYW1wYWlnbnMuXG5cbkxldCdzIHNlZeKApiBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfU1dBUGAgaXMgYSBwcmUtcmVxdWlzaXRlLiBBbmQsIGFoYSwgYENPTkZJR19NRU1DR2AgaXMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYC4gVGhpcyBtaWdodCBiZSBpbnRlcmVzdGluZywgc2luY2UgSSdtIHNlZWluZyBhbiBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkgbmVlZCB0byBmb2N1cyBvbjpcbiogICBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYCAtIFRoaXMgaXMgd2hlcmUgdGhlIG5ldyB0YWJsZSBpcyB1c2VkLlxuKiAgIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgLSBUaGUgb3B0aW1pemVkIGZyZWUgcGF0aC5cbiogICBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCAtIFVuZGVyc3RhbmQgdGhhdCBlcnJvciBwYXRoIGNoYW5nZS5cbiogICBgc3lzX3N3YXBvbmAgKG9yIGBfX3g2NF9zeXNfc3dhcG9uYCkgLSBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIHRodXMgYW4gaW1wb3J0YW50IGF0dGFjayBzdXJmYWNlLlxuXG5UaW1lIHRvIGNvbnN1bHQgS2NvbmZpZyBmb3IgYENPTkZJR19TV0FQYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBpcyBzcG90IG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjkuNTY0NDg1MTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTA0MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjkuNjMwNDAyNzc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1NjYwODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uZmlndXJpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCB1c2VzIGBTV0FQYCBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBpbml0aWFsIHNldHVwLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgY3JpdGljYWwgZGV0YWlscy4gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBDT05GSUdfTUVNQ0dgIHNldHRpbmcg4oCTIHRoYXQncyBhIGtleSBlbGVtZW50IGluIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSB3YW50IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZSBpdCBzZXQgY29ycmVjdGx5IGZvciB0aGlzIGltcGxlbWVudGF0aW9uLiBHb3R0YSBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHJlc291cmNlIGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDozMi4zODcwMTMwMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyODgzOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDozMi40NDczMTY0NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMyOTA3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIFBvbmRlcmluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBNRU1DR2AuIE5vdywgd2hlcmUgZXhhY3RseSBkaWQgSSBzZWUgdGhlIGRlZmluaXRpb24gZm9yIGl0PyBIbW0sIHdhcyBpdCBsdXJraW5nIGluIGBpbml0L0tjb25maWdgIG9yIHdhcyBpdCB0dWNrZWQgYXdheSBpbiBgbW0vS2NvbmZpZ2A/IEl0IGZlZWxzIGxpa2UgaXQgc2hvdWxkIGJlIHRoZSBsYXR0ZXIsIGJ1dCBzb21ldGltZXMgdGhlIGJyb2FkZXIgaW5pdGlhbGl6YXRpb24gdGhpbmdzIHNuZWFrIGludG8gYGluaXRgLiBJIG5lZWQgdG8gdHJhY2sgdGhpcyBkb3duIHF1aWNrbHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjM1LjU4MDIyNjA1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjI4ODM3MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNTI9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA2MS1cXG5pbml0L0tjb25maWc6MTA2Mjpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA2My1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcwLVxcbmluaXQvS2NvbmZpZzoxMDcxOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwNzItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MzguODA5MDcwNjkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3Njk0ODcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IENHcm91cHMgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBjb25maWdzIGFmZmVjdGVkIGFyZSBgU1dBUGAgYW5kIGBNRU1DR2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmFjdC5cblxuSSBzZWUgdGhhdCBhIGZldyBjb3JlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLCB3aGljaCBJJ20gYXNzdW1pbmcgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgc3dhcCBjbHVzdGVyIHRhYmxlLCBoYXMgc2VlbiBzb21lIGNvbnRleHQgY2hhbmdlcy4gVGhlcmUncyBhIG5ldyBmdW5jdGlvbiwgYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYCwgd2hpY2ggSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIOKAkyBsaWtlbHkgcmVsYXRlZCB0byBjb3B5aW5nIG9yIHJlcGxpY2F0aW5nIHRhYmxlIGRhdGEuIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIGlzIGluIHRoZSBtaXg7IEknbGwgbmVlZCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCBub3cgYW5kIGlmIGl0IGhhcyBhbnkgc2hhcmVkIHJlc291cmNlIGltcGxpY2F0aW9ucy4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBzdWdnZXN0cyBwb3RlbnRpYWxseSBhbiBhdHRlbXB0IGF0IG1lbW9yeSByZWNsYW1hdGlvbiB3aGVuIHRoZSBzd2FwIHRhYmxlIGlzIGV4dGVuZGVkLiBBbHNvLCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBtYWtlcyBtZSB0aGluayB0aGVyZSdzIHNvbWUgc29ydCBvZiBjbHVzdGVyIGVudHJ5IGR1cGxpY2F0aW9uIGludm9sdmVkLiBBbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBzeXNfc3dhcG9uYCDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBzeXN0ZW0gY2FsbCBsZXZlbC5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9uIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC0gSSBzdXNwZWN0IGl0J3MgcHJvYmFibHkgc3RhdGljLCBidXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBmdWxseS4gR290dGEgbWFrZSBzdXJlIGl0J3Mgbm90IHVuaW50ZW50aW9uYWxseSBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDIuNzg2MDIyMDMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ5MzQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2NsdXN0ZXJfcG9wdWxhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTU0MD1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcXG5tbS9zd2FwZmlsZS5jOjU0MTpzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtNTQyLVxcdFxcdFxcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYz02NDI9c3RhdGljIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTY2OS1cXHRcXHRWTV9XQVJOX09OX09OQ0UoY2x1c3Rlcl90YWJsZV9pc19hbGxvY2VkKGZvdW5kKSk7XFxubW0vc3dhcGZpbGUuYzo2NzA6XFx0XFx0cmV0dXJuIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzaSwgZm91bmQpO1xcbm1tL3N3YXBmaWxlLmMtNjcxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDIuODQ2NTI3MDQ4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjYxMTUzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBUaGUgY29kZSdzIGdvdCBteSBhdHRlbnRpb24gZm9jdXNlZCBvbiB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYC4gTXkgZmlyc3QgaW5zdGluY3QsIGJhc2VkIG9uIHRoZSBzbmlwcGV0LCBpcyB0byBpbW1lZGlhdGVseSBjb25maXJtIHdoZXRoZXIgYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgaXMgaW5kZWVkIHN0YXRpYy4gS25vd2luZyB0aGF0IGNoYW5nZXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtb2R1bGUgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGUgbGlua2VyIGhhbmRsZXMgaXQuIElzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGlzIGFsc28gc3RhdGljPyBUaGVzZSBraW5kcyBvZiBkZXNpZ24gZGVjaXNpb25zIGFmZmVjdCBtYWludGFpbmFiaWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSBJJ20gbG9va2luZyBhdCB0aGVzZSwgYnV0IHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQncyBoaXR0aW5nIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDUuNzcyNjQ4MjI2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg2NzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTE2NTU9c3RhdGljIGludCBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTY5NC0vKipcXG5tbS9zd2FwZmlsZS5jOjE2OTU6ICogc3dhcF9kdXBfZW50cmllc19jbHVzdGVyOiBJbmNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXIuXFxubW0vc3dhcGZpbGUuYy0xNjk2LSAqIEBzaTogVGhlIHN3YXAgZGV2aWNlLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzA0LSAqL1xcbm1tL3N3YXBmaWxlLmM6MTcwNTpzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0xNzA2LVxcdFxcdFxcdFxcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxcbi0tXFxubW0vc3dhcGZpbGUuYz0xODEzPWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTgyNS1cXG5tbS9zd2FwZmlsZS5jOjE4MjY6XFx0cmV0dXJuIHN3YXBfZHVwX2VudHJpZXNfY2x1c3Rlcihzd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLFxcbm1tL3N3YXBmaWxlLmMtMTgyNy1cXHRcXHRcXHRcXHRcXHRzd3Bfb2Zmc2V0KGVudHJ5KSwgbnJfcGFnZXMpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNzY1PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM3ODEtXFxubW0vc3dhcGZpbGUuYzozNzgyOlxcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCAxKTtcXG5tbS9zd2FwZmlsZS5jLTM3ODMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDo0NS44NTE1MjI5MTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3OTQxNDIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBkZXRhaWxzIHByb3ZpZGVkIGFuZCB0aGVpciBpbXBsaWNhdGlvbnM6XG5cbioqU3RhdGljIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyBpbiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXNlIHR3byBmdW5jdGlvbnMgZGVjbGFyZWQgYXMgYHN0YXRpY2A6IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGFuZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gQmVpbmcgZGVjbGFyZWQgYHN0YXRpY2AgbWVhbnMgdGhleSBoYXZlIGludGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IChlLmcuLCB0aGUgY3VycmVudCBgLmNgIGZpbGUpLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHByb2JhYmx5IGRlc2lnbmVkIHRvIHBlcmZvcm0gc3BlY2lmaWMsIGlzb2xhdGVkIHRhc2tzIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUgb3IgZGF0YSBzdHJ1Y3R1cmUgbWFuYWdlbWVudCBzeXN0ZW0uIEl0IGFsc28gaW1wbGllcyB0aGV5IGFyZSBub3QgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSB0cmFuc2xhdGlvbiB1bml0LiBJIHdvbmRlciB3aGF0IHRoZSBjb250ZXh0IGlzLCBpcyBpdCBzb21lIHNvcnQgb2YgY2FjaGluZyBvciB0YWJsZSBtYW5hZ2VtZW50IHN0cmF0ZWd5PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHNoZWQgbGlnaHQuIEknbGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZWlyIHNwZWNpZmljIHJvbGVzIGluIHRoZSBiaWcgcGljdHVyZSwgb2YgY291cnNlLiBGb3Igbm93LCBpdCdzIGp1c3QgdGhpcyBpbW1lZGlhdGUgb2JzZXJ2YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDo0OS4xMzA5NDAyNTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTY1OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNTEyPWludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE1MjktXFxubW0vc3dhcGZpbGUuYzoxNTMwOnN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxubW0vc3dhcGZpbGUuYy0xNTMxLXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTU0Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTU4MS1cXHRpZiAodW5saWtlbHkoY291bnQgPT0gU1dQX1RCX0NPVU5UX01BWCAtIDIgfHwgY291bnQgPT0gU1dQX1RCX0NPVU5UX01BWCAtIDEpKVxcbm1tL3N3YXBmaWxlLmM6MTU4MjpcXHRcXHRzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7XFxubW0vc3dhcGZpbGUuYy0xNTgzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDkuMTk3NTE0MTk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDI1MzY0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlciBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgJ3N3YXBvbicgU3lzdGVtIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIGNhbGwgaW4gcXVlc3Rpb24gaXMgYHN3YXBvbmAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIGl0cyBmdW5jdGlvbjogYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIGZvciB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucy4gSXQncyBub3QganVzdCBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsOyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIGhvdyB0aGUgT1MgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuIEknbSBjb25zaWRlcmluZyB0aGUgc2NlbmFyaW9zIHdoZXJlIGl0J3MgdXNlZDogd2hlbiBSQU0gaXMgZXhoYXVzdGVkLCBpdCBhbGxvd3MgdGhlIGtlcm5lbCB0byBtaWdyYXRlIGxlc3MtdXNlZCBwYWdlcyB0byBkaXNrICh0aGUgc3dhcCBzcGFjZSkgdG8gZnJlZSB1cCBwaHlzaWNhbCBtZW1vcnkuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgYXJndW1lbnRzOiBJIG5lZWQgdG8gcmVjYWxsIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgZGV2aWNlIGlzIHNwZWNpZmllZCwgbGlrZWx5IHRocm91Z2ggYSBkZXZpY2UgcGF0aCBvciBhIGZpbGUgZGVzY3JpcHRvciwgYW5kIEknbSBhbHNvIGNvbnNpZGVyaW5nIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBkZWZpbmUgcHJpb3JpdGllcyBvciBzaXplIGNvbnN0cmFpbnRzLiBXaGF0IGFyZSB0aGUgcGVybWlzc2lvbiBjaGVja3MgdGhhdCBtdXN0IG9jY3VyPyBJdCBjYW4ndCBiZSBqdXN0IGFueW9uZSBjYWxsaW5nIHRoaXMsIHJpZ2h0PyBJJ20gcGljdHVyaW5nIHRoZSBrZXJuZWwgY29kZSB0aGF0IGhhbmRsZXMgdGhpcyDigJMgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBwYWdlIHRhYmxlcywgdGhlIGRpcnR5IHBhZ2UgZmx1c2hpbmcsIHRoZSBjb250ZXh0IHN3aXRjaGluZyBpbnZvbHZlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLlxuXG5JJ20gYWxzbyBwb25kZXJpbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgY29tbW9uIHBpdGZhbGxzLiBGb3IgZXhhbXBsZSwgYW0gSSB3b3JyaWVkIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIG9uIGEgaGlnaC1sYXRlbmN5IHN0b3JhZ2UgbWVkaXVtLCBsaWtlIGEgbmV0d29ya2VkIGRyaXZlPyBIb3cgZG9lcyB0aGlzIGRlY2lzaW9uIGltcGFjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uIG9mIHRoZSBzd2FwIHNwYWNlLiBXaGF0IGFib3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gcmVnYXJkcyB0byBkYXRhIGF0IHJlc3Q/IElzIHRoZSBzd2FwIHNwYWNlIGVuY3J5cHRlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBzd2FwIGRldmljZSBpcyBjb3JydXB0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlY292ZXJ5P1xuXG5GaW5hbGx5LCBJJ20gYWxyZWFkeSBtZW50YWxseSBjb21wYXJpbmcgaXQgdG8gaXRzIGNvdW50ZXJwYXJ0LCBgc3dhcG9mZmAuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBtZW50YWwgY2hlY2tsaXN0IG9mIGVycm9yIGNvbmRpdGlvbnMgSSdkIGV4cGVjdCB0byBzZWU6IGludmFsaWQgZGV2aWNlLCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMsIHJlc291cmNlIGV4aGF1c3Rpb24sIGFuZCBzbyBvbi4gSSdtIHdvbmRlcmluZyB3aGF0IGRlYnVnZ2luZyB0b29scyBhbmQgdHJhY2luZyBtZWNoYW5pc21zIHdvdWxkIGJlIG1vc3QgZWZmZWN0aXZlIGZvciB0cm91Ymxlc2hvb3RpbmcgYSBgc3dhcG9uYCBpc3N1ZS4gSSBhbSBhbHNvIHJlbWVtYmVyaW5nIG90aGVyIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLCBsaWtlIGBtbWFwYCBvciBgbXVubWFwYCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtIGFuZCB0aGUgYHN3YXBvbmAgY2FsbC4gSXQncyBtb3JlIHRoYW4ganVzdCBrbm93aW5nIHdoYXQgaXQgZG9lcywgaXQncyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGFsbCBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDo1My45NDAwNTQyODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODQ0MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLipzd2Fwb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTM0MjI9c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0zNTAxLVxcbm1tL3N3YXBmaWxlLmM6MzUwMjpTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxcbm1tL3N3YXBmaWxlLmMtMzUwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjU0LjAwNDkwNDY3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI1Mzk1MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFN3YXAgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgd2F5IHRoZSBzd2FwIHN1YnN5c3RlbSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBpdCBtYW5hZ2VzIHRoZXNlICdzd2FwIGNsdXN0ZXIgdGFibGVzLicgVGhlIGtleSBzeXNjYWxsIGludm9sdmVkIGhlcmUgaXMgYHN5c19zd2Fwb25gIOKAkyB0aGF0J3MgbXkgZGlyZWN0IGVudHJ5IHBvaW50IHRvIHRoZSBjaGFuZ2VzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgLCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCwgYW5kIG9mIGNvdXJzZSwgYHN5c19zd2Fwb25gIGl0c2VsZiwgYmVjYXVzZSB0aGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBvcGVyYXRpb25hbCBjaGFuZ2VzLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYHN3YXBvbmAgc3lzY2FsbCBhbmQgdGhyb3VnaCBzd2FwcGluZy5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBjaGFuZ2VzIHRvIGFsbG9jYXRpb24sIGR1cGxpY2F0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZXNlIGNsdXN0ZXIgdGFibGVzLCBhbG9uZyB3aXRoIHNvbWUgdHdlYWtzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gYHN3YXBvbmAuIFRoaXMga2luZCBvZiBjb3JlLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhY2Nlc3NpYmxlIHZpYSBhIHVzZXItc3BhY2Ugc3lzY2FsbCwgYWx3YXlzIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEl0IGFmZmVjdHMgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX01FTUNHYCBpcyB1c2VkIGluIGBzd2FwX2NsdXN0ZXJfY29weV90YWJsZWAsIGJ1dCBpcyB0aGF0IHRoZSBvbmx5IGNvbmZpZz8gQW5kIGBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR2AgaXMgdGhlcmUsIGJ1dCB0aGF04oCZcyBub3QgYSBjb25maWcgb3B0aW9uLCByaWdodD8gTGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzI5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjU4LjUzMDMwMzE2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzOTAxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXAuaD0xMT1leHRlcm4gaW50IHBhZ2VfY2x1c3RlcjtcXG4tLVxcbm1tL3N3YXAuaC0yNS0vKiBJZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYmVzaWRlcyBQRk4gYW5kIG1hcmtlciwgc3RvcmUgemVybyBmbGFnIGlubGluZSAqL1xcbm1tL3N3YXAuaDoyNjojZGVmaW5lIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFx0XFx0KChCSVRTX1BFUl9MT05HIC0gU1dBUF9DQUNIRV9QRk5fTUFSS19CSVRTIC0gXFxcXFxcbm1tL3N3YXAuaC0yNy1cXHRcXHRcXHRcXHRcXHQgIFNXQVBfQ0FDSEVfUEZOX0JJVFMpIFxcdTAwM2UgU1dBUF9DT1VOVF9NSU5fQklUUylcXG4tLVxcbm1tL3N3YXAuaD00OD1zdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8ge1xcbi0tXFxubW0vc3dhcC5oLTYxLSNlbmRpZlxcbm1tL3N3YXAuaDo2MjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcC5oLTYzLVxcdHVuc2lnbmVkIGxvbmcgKnplcm9fYml0bWFwO1xcbi0tXFxubW0vc3dhcF90YWJsZS5oPTE1PXN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcXG4tLVxcbm1tL3N3YXBfdGFibGUuaC03MS0jZGVmaW5lIFNXUF9UQl9GTEFHU19CSVRTXFx0bWluKDUsIEJJVFNfUEVSX0xPTkcgLSBTV1BfVEJfUEZOX0JJVFMpXFxubW0vc3dhcF90YWJsZS5oOjcyOiNkZWZpbmUgU1dQX1RCX0NPVU5UX0JJVFNcXHQoU1dQX1RCX0ZMQUdTX0JJVFMgLSBTV0FQX1RBQkxFX0hBU19aRVJPRkxBRylcXG5tbS9zd2FwX3RhYmxlLmgtNzMtI2RlZmluZSBTV1BfVEJfRkxBR1NfTUFTS1xcdCh+KCh+MFVMKSBcXHUwMDNlXFx1MDAzZSBTV1BfVEJfRkxBR1NfQklUUykpXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmgtNzctI2RlZmluZSBTV1BfVEJfQ09VTlRfTUFYICAgICAgICgoMSBcXHUwMDNjXFx1MDAzYyBTV1BfVEJfQ09VTlRfQklUUykgLSAxKVxcbm1tL3N3YXBfdGFibGUuaDo3ODovKiBUaGUgZmlyc3QgZmxhZyBpcyB6ZXJvIGJpdCAoU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUcpICovXFxubW0vc3dhcF90YWJsZS5oLTc5LSNkZWZpbmUgU1dQX1RCX1pFUk9fRkxBR1xcdEJJVChCSVRTX1BFUl9MT05HIC0gU1dQX1RCX0ZMQUdTX0JJVFMpXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmg9MjY3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfdGFibGVfc2V0X3plcm8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfdGFibGUuaC0yNjkte1xcbm1tL3N3YXBfdGFibGUuaDoyNzA6I2lmIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcF90YWJsZS5oLTI3MS1cXHR1bnNpZ25lZCBsb25nIHN3cF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuLS1cXG5tbS9zd2FwX3RhYmxlLmg9MjgzPXN0YXRpYyBpbmxpbmUgYm9vbCBfX3N3YXBfdGFibGVfdGVzdF96ZXJvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmgtMjg1LXtcXG5tbS9zd2FwX3RhYmxlLmg6Mjg2OiNpZiBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xcbm1tL3N3YXBfdGFibGUuaC0yODctXFx0dW5zaWduZWQgbG9uZyBzd3BfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbi0tXFxubW0vc3dhcF90YWJsZS5oPTI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfdGFibGUuaC0yOTgte1xcbm1tL3N3YXBfdGFibGUuaDoyOTk6I2lmIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcF90YWJsZS5oLTMwMC1cXHR1bnNpZ25lZCBsb25nIHN3cF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTQyMT1zdGF0aWMgdm9pZCBzd2FwX2NsdXN0ZXJfZnJlZV90YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy00MjktXFxubW0vc3dhcGZpbGUuYzo0MzA6I2lmICFTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xcbm1tL3N3YXBmaWxlLmMtNDMxLVxcdGtmcmVlKGNpLVxcdTAwM2V6ZXJvX2JpdG1hcCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTQ0OT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTQ4MS1cXG5tbS9zd2FwZmlsZS5jOjQ4MjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcGZpbGUuYy00ODMtXFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVxcdTAwM2V6ZXJvX2JpdG1hcCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTQ5Mz1zdGF0aWMgdm9pZCBzd2FwX2NsdXN0ZXJfY29weV90YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmRfY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTUwMS1cXG5tbS9zd2FwZmlsZS5jOjUwMjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcGZpbGUuYy01MDMtXFx0ZF9jaS1cXHUwMDNlemVyb19iaXRtYXAgPSBzX2NpLVxcdTAwM2V6ZXJvX2JpdG1hcDtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTkyND12b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5NDYtXFx0XFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTtcXG5tbS9zd2FwZmlsZS5jOjE5NDc6XFx0XFx0aWYgKCFTV0FQX1RBQkxFX0hBU19aRVJPRkxBRylcXG5tbS9zd2FwZmlsZS5jLTE5NDgtXFx0XFx0XFx0X19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIGNpX29mZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjU4LjYwMDcwMjM0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ2OTAzNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgbGlrZSBhIGtlcm5lbCBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgU3dhcCBUYWJsZSBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdgIC0gdGhhdCdzIGEgbWFjcm8sIHRoZSBraW5kIHRoYXQgcHJvYmFibHkgZGljdGF0ZXMgc29tZSBjb21waWxlLXRpbWUgYmVoYXZpb3VyIGFyb3VuZCBob3cgdGhlIHN3YXAgdGFibGUgaXMgbWFuYWdlZC4gTm93LCBsZXQncyBzZWUsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc3dhcC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGUga2V5IG9uZXMgc2VlbSB0byBiZSBgU1dBUGAgaXRzZWxmLCB3aGljaCBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIGFuZCBgTUVNQ0dgLCB3aGljaCB0ZWxscyBtZSB3ZSBhcmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhvc2UgYXJlIG15IHByaW1hcnkgY29uc2lkZXJhdGlvbnMgaGVyZS5cblxuTm93LCBsZXQncyBzZWUgd2hpY2ggY29kZSBzZWN0aW9ucyBhcmUgcGVydGluZW50LiBUaGUgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsLCBnaXZlbiB0aGUgY29udGV4dCwgYXJlIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgLCB3aGljaCBpcyBvYnZpb3VzbHkgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHN3YXAgY2x1c3Rlci4gVGhlcmUncyBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgd2hpY2ggaW5kaWNhdGVzIHdlIGFyZSBkZWFsaW5nIHdpdGggZHVwbGljYXRpbmcgZW50cmllcyBpbiB0aGUgc3dhcCB0YWJsZS9jbHVzdGVyLiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLCB3aGljaCBsaWtlbHkgY29uY2VybnMgaXRzZWxmIHdpdGggdGFibGUgZXhwYW5zaW9uIGFuZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhbWF0aW9uLCBhbmQgYHN5c19zd2Fwb25gIHdoaWNoIGhhcyB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIHN5c3RlbS1sZXZlbCBmdW5jdGlvbiBmb3IgdHVybmluZyBvbiBzd2FwIG1lbW9yeSwgb3IgYXQgbGVhc3QgYSByZWxhdGVkIGZlYXR1cmUuIFRoaXMgdGVsbHMgbWUgYWJvdXQgdGhlIGNvcmUgb3BlcmF0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHdlIGFyZSBkZWFsaW5nIHdpdGguXG5cbk5vdywgaXQncyB0aW1lIHRvIHRlc3QgdGhlIGNvZGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1MywiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NTowMy4xNDc2MDk4ODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzgzNTcxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2NsdXN0ZXJfcG9wdWxhdGVcIixcbiAgICBcInN3YXBfZHVwX2VudHJpZXNfY2x1c3RlclwiLFxuICAgIFwic3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVcIixcbiAgICBcInN5c19zd2Fwb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNsdXN0ZXIgYWxsb2NhdGlvbiwgY29weWluZywgYW5kIGZyZWVpbmcgbG9naWMsIGFzIHdlbGwgYXMgYWRqdXN0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0aGUgc3dhcG9uIHN5c2NhbGwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzd2Fwb24gYW5kIHN3YXAgYWxsb2NhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfY2x1c3Rlcl9wb3B1bGF0ZVwiLFxuICAgIFwic3dhcF9kdXBfZW50cmllc19jbHVzdGVyXCIsXG4gICAgXCJzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZVwiLFxuICAgIFwic3lzX3N3YXBvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgglpz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 08:14:49 +0000 UTC FinishedAt: 2026-07-20 08:45:04 +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": "37d0baf9-a670-4ea1-b243-a8644f3cf69c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_cluster_populate", "swap_dup_entries_cluster", "swap_extend_table_try_free", "sys_swapon" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2NsdXN0ZXJfcG9wdWxhdGUmIzM0OywKICAgICYjMzQ7c3dhcF9kdXBfZW50cmllc19jbHVzdGVyJiMzNDssCiAgICAmIzM0O3N3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlJiMzNDssCiAgICAmIzM0O3N5c19zd2Fwb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjbHVzdGVyIGFsbG9jYXRpb24sIGNvcHlpbmcsIGFuZCBmcmVlaW5nIGxvZ2ljLCBhcyB3ZWxsIGFzIGFkanVzdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgaW4gdGhlIHN3YXBvbiBzeXNjYWxsLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3dhcG9uIGFuZCBzd2FwIGFsbG9jYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMDEzZDdmYmQxMGNlZmNjNGUyNGJjYjU3ZDczMjk3YmIzMmMyNGJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMDg6NDQ6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDYxNWQ5MDg2NzExMTNmLi5mYzlmMTZiYzJlNGUwYyAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC00OTAsNiAmIzQzOzQ5MCwyMCBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqZF9jaSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpzX2NpKVxuJiM0Mzt7XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGRfY2ktXHUwMDNldGFibGUsIHJjdV9hY2Nlc3NfcG9pbnRlcihzX2NpLVx1MDAzZXRhYmxlKSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4mIzQzO1x0ZF9jaS1cdTAwM2VtZW1jZ190YWJsZSA9IHNfY2ktXHUwMDNlbWVtY2dfdGFibGU7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmICFTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xuJiM0MztcdGRfY2ktXHUwMDNlemVyb19iaXRtYXAgPSBzX2NpLVx1MDAzZXplcm9fYml0bWFwO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFNhbml0eSBjaGVjayB0byBlbnN1cmUgbm90aGluZyBsZWFrZWQsIGFuZCB0aGUgc3BlY2lmaWVkIHJhbmdlIGlzIGVtcHR5LlxuICAqIE9uZSBzcGVjaWFsIGNhc2UgaXMgdGhhdCBiYWQgc2xvdHMgY2FuJiMzOTt0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXG5AQCAtNTI3LDYgJiM0Mzs1NDEsNyBAQCBzdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcbiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gdG1wX2NpO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qXG5AQCAtNTUyLDcgJiM0Mzs1NjcsOCBAQCBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcl9sb2NrKTtcbiBcdGxvY2FsX3VubG9jayhcdTAwMjZwZXJjcHVfc3dhcF9jbHVzdGVyLmxvY2spO1xuIFxuLVx0cmV0ID0gc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XG4mIzQzO1x0dG1wX2NpID0gKmNpO1xuJiM0MztcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShcdTAwMjZ0bXBfY2ksIF9fR0ZQX0hJR0ggfCBfX0dGUF9OT01FTUFMTE9DIHxcbiBcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4gXG4gXHQvKlxuQEAgLTU3Myw2ICYjNDM7NTg5LDkgQEAgc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBVcGRhdGUgdGFibGVzIGluIGF0b21pYyBjb250ZXh0ICovXG4mIzQzO1x0c3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoY2ksIFx1MDAyNnRtcF9jaSk7XG4gXHRyZXR1cm4gY2k7XG4gfVxuIFxuQEAgLTE1MTEsMjAgJiM0MzsxNTMwLDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gc3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4tXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcbiBcbiBcdGlmICghY2ktXHUwMDNlZXh0ZW5kX3RhYmxlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTV0FQRklMRV9DTFVTVEVSOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlW2ldKVxuLVx0XHRcdGNhbl9mcmVlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGlmIChjYW5fZnJlZSkge1xuLVx0XHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuLVx0XHRjaS1cdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGtmcmVlKGNpLVx1MDAzZWV4dGVuZF90YWJsZSk7XG4mIzQzO1x0Y2ktXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcbiB9XG4gXG4gLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqL1xuQEAgLTE3MTYsNyAmIzQzOzE3MzIsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gZmFpbGVkOlxuIFx0d2hpbGUgKGNpX29mZi0tIFx1MDAzZSBjaV9zdGFydClcbiBcdFx0X19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpO1xuLVx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0zNTg4LDExICYjNDM7MzYwMyw2IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXG4gXG4gXHRtYXhwYWdlcyA9IHNpLVx1MDAzZW1heDtcbiBcbi1cdC8qIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gKi9cbi1cdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTtcbi1cbiBcdGlmIChzaS1cdTAwM2ViZGV2IFx1MDAyNlx1MDAyNiBiZGV2X3N0YWJsZV93cml0ZXMoc2ktXHUwMDNlYmRldikpXG4gXHRcdHNpLVx1MDAzZWZsYWdzIHw9IFNXUF9TVEFCTEVfV1JJVEVTO1xuIFxuQEAgLTM2MDYsNiAmIzQzOzM2MTYsMTQgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcdFx0aW5jZWRfbnJfcm90YXRlX3N3YXAgPSB0cnVlO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mby4gU1dQX1NPTElEU1RBVEUgaXMgdXNlZCBmb3JcbiYjNDM7XHQgKiBnbG9iYWxfY2x1c3RlciBhbGxvY2F0aW9uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XG4mIzQzO1xuIFx0aWYgKChzd2FwX2ZsYWdzIFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLVx1MDAzZWJkZXYpKSB7XG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfY2x1c3Rlcl9wb3B1bGF0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXImIzM0OywKICAgICYjMzQ7c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUmIzM0OywKICAgICYjMzQ7c3lzX3N3YXBvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNsdXN0ZXIgYWxsb2NhdGlvbiwgY29weWluZywgYW5kIGZyZWVpbmcgbG9naWMsIGFzIHdlbGwgYXMgYWRqdXN0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0aGUgc3dhcG9uIHN5c2NhbGwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzd2Fwb24gYW5kIHN3YXAgYWxsb2NhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjAxM2Q3ZmJkMTBjZWZjYzRlMjRiY2I1N2Q3MzI5N2JiMzJjMjRiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDA4OjQ0OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNjE1ZDkwODY3MTExM2YuLmZjOWYxNmJjMmU0ZTBjIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ5MCw2ICYjNDM7NDkwLDIwIEBAIHN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqZF9jaSwKJiM0MzsJCQkJICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqc19jaSkKJiM0Mzt7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihkX2NpLSZndDt0YWJsZSwgcmN1X2FjY2Vzc19wb2ludGVyKHNfY2ktJmd0O3RhYmxlKSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwomIzQzOwlkX2NpLSZndDttZW1jZ190YWJsZSA9IHNfY2ktJmd0O21lbWNnX3RhYmxlOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUcKJiM0MzsJZF9jaS0mZ3Q7emVyb19iaXRtYXAgPSBzX2NpLSZndDt6ZXJvX2JpdG1hcDsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiAvKgogICogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBub3RoaW5nIGxlYWtlZCwgYW5kIHRoZSBzcGVjaWZpZWQgcmFuZ2UgaXMgZW1wdHkuCiAgKiBPbmUgc3BlY2lhbCBjYXNlIGlzIHRoYXQgYmFkIHNsb3RzIGNhbiYjMzk7dCBiZSBmcmVlZCwgc28gY2hlY2sgdGhlIG51bWJlciBvZgpAQCAtNTI3LDYgJiM0Mzs1NDEsNyBAQCBzdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICoKIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCQkgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSkKIHsKJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvIHRtcF9jaTsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTU1Miw3ICYjNDM7NTY3LDggQEAgc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJc3Bpbl91bmxvY2soJmFtcDtzaS0mZ3Q7Z2xvYmFsX2NsdXN0ZXJfbG9jayk7CiAJbG9jYWxfdW5sb2NrKCZhbXA7cGVyY3B1X3N3YXBfY2x1c3Rlci5sb2NrKTsKIAotCXJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShjaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfAomIzQzOwl0bXBfY2kgPSAqY2k7CiYjNDM7CXJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZSgmYW1wO3RtcF9jaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfAogCQkJCQkgICBHRlBfS0VSTkVMKTsKIAogCS8qCkBAIC01NzMsNiAmIzQzOzU4OSw5IEBAIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCXNwaW5fdW5sb2NrKCZhbXA7Y2ktJmd0O2xvY2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CiYjNDM7CiYjNDM7CS8qIFVwZGF0ZSB0YWJsZXMgaW4gYXRvbWljIGNvbnRleHQgKi8KJiM0MzsJc3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoY2ksICZhbXA7dG1wX2NpKTsKIAlyZXR1cm4gY2k7CiB9CiAKQEAgLTE1MTEsMjAgJiM0MzsxNTMwLDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApCiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKQogewogCXVuc2lnbmVkIGxvbmcgaTsKLQlib29sIGNhbl9mcmVlID0gdHJ1ZTsKIAogCWlmICghY2ktJmd0O2V4dGVuZF90YWJsZSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IFNXQVBGSUxFX0NMVVNURVI7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChjaS0mZ3Q7ZXh0ZW5kX3RhYmxlW2ldKQotCQkJY2FuX2ZyZWUgPSBmYWxzZTsKJiM0MzsJCQlyZXR1cm47CiAJfQogCi0JaWYgKGNhbl9mcmVlKSB7Ci0JCWtmcmVlKGNpLSZndDtleHRlbmRfdGFibGUpOwotCQljaS0mZ3Q7ZXh0ZW5kX3RhYmxlID0gTlVMTDsKLQl9CiYjNDM7CWtmcmVlKGNpLSZndDtleHRlbmRfdGFibGUpOwomIzQzOwljaS0mZ3Q7ZXh0ZW5kX3RhYmxlID0gTlVMTDsKIH0KIAogLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqLwpAQCAtMTcxNiw3ICYjNDM7MTczMiw2IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIGZhaWxlZDoKIAl3aGlsZSAoY2lfb2ZmLS0gJmd0OyBjaV9zdGFydCkKIAkJX19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KGNpLCBjaV9vZmYpOwotCXN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTsKIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzU4OCwxMSAmIzQzOzM2MDMsNiBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKQogCiAJbWF4cGFnZXMgPSBzaS0mZ3Q7bWF4OwogCi0JLyogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mbyAqLwotCWVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpOwotCWlmIChlcnJvcikKLQkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7Ci0KIAlpZiAoc2ktJmd0O2JkZXYgJmFtcDsmYW1wOyBiZGV2X3N0YWJsZV93cml0ZXMoc2ktJmd0O2JkZXYpKQogCQlzaS0mZ3Q7ZmxhZ3MgfD0gU1dQX1NUQUJMRV9XUklURVM7CiAKQEAgLTM2MDYsNiAmIzQzOzM2MTYsMTQgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncykKIAkJaW5jZWRfbnJfcm90YXRlX3N3YXAgPSB0cnVlOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvLiBTV1BfU09MSURTVEFURSBpcyB1c2VkIGZvcgomIzQzOwkgKiBnbG9iYWxfY2x1c3RlciBhbGxvY2F0aW9uCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7CiYjNDM7CiAJaWYgKChzd2FwX2ZsYWdzICZhbXA7IFNXQVBfRkxBR19ESVNDQVJEKSAmYW1wOyZhbXA7CiAJICAgIHNpLSZndDtiZGV2ICZhbXA7JmFtcDsgYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKHNpLSZndDtiZGV2KSkgewogCQkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTIyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbXBhY3RmdWwuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBzd2FwX2NsdXN0ZXJfY29weV90YWJsZWAgYW5kIGludGVncmF0aW5nIGl0IGludG8gYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IHRhYmxlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBpbiBwb3B1bGF0aW9uLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFyZSBhbHNvIGNhdGNoaW5nIG15IGV5ZTsgc2hvcnQtY2lyY3VpdGluZyBhbmQgZnJlZWluZyBvbmx5IGlmIGFsbCBlbnRyaWVzIGFyZSB6ZXJvIHN1Z2dlc3RzIG9wdGltaXphdGlvbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucy4gVGhlIHJlbW92YWwgb2YgdGhlIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSlgIGNhbGwgZnJvbSB0aGUgZXJyb3IgcGF0aCBpbiBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBpcyBhIGJpdCBjb25jZXJuaW5nIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQgd2FzIHJlbW92ZWQgYW5kIGlmIHRoZSBlcnJvciBoYW5kbGluZyBpcyBzdGlsbCByb2J1c3QuIEZpbmFsbHksIG1vdmluZyBgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvYCBpbiB0aGUgYHN3YXBvbmAgc3lzY2FsbCBhZnRlciB0aGUgYFNXUF9TT0xJRFNUQVRFYCBmbGFnIGlzIHNldC4uLiB0aGF0JiMzOTtzIGEgc3RydWN0dXJhbCBjaGFuZ2UgcmVsYXRlZCB0byBzb2xpZC1zdGF0ZSBkcml2ZXMsIHdoaWNoIG5lZWRzIGNhcmVmdWwgZXhhbWluYXRpb24uCgpGdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBzd2FwIHN1YnN5c3RlbSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgc3dhcG9uYCBzeXNjYWxsIGFuZCwgY3J1Y2lhbGx5LCBzd2FwIGFsbG9jYXRpb24gcGF0aHMuIFRoYXQgbWVhbnMgZnV6emVyIHRpbWUsIHdpdGhvdXQgYSBkb3VidC4gSSBuZWVkIHRvIGdldCB0aGlzIGNvdmVyZWQgd2l0aCBzb21lIGZ1enppbmcgY2FtcGFpZ25zLgoKTGV0JiMzOTtzIHNlZeKApiBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfU1dBUGAgaXMgYSBwcmUtcmVxdWlzaXRlLiBBbmQsIGFoYSwgYENPTkZJR19NRU1DR2AgaXMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYC4gVGhpcyBtaWdodCBiZSBpbnRlcmVzdGluZywgc2luY2UgSSYjMzk7bSBzZWVpbmcgYW4gaW50ZXJhY3Rpb24gd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkgbmVlZCB0byBmb2N1cyBvbjoKKiAgIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC0gVGhpcyBpcyB3aGVyZSB0aGUgbmV3IHRhYmxlIGlzIHVzZWQuCiogICBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIC0gVGhlIG9wdGltaXplZCBmcmVlIHBhdGguCiogICBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCAtIFVuZGVyc3RhbmQgdGhhdCBlcnJvciBwYXRoIGNoYW5nZS4KKiAgIGBzeXNfc3dhcG9uYCAob3IgYF9feDY0X3N5c19zd2Fwb25gKSAtIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgdGh1cyBhbiBpbXBvcnRhbnQgYXR0YWNrIHN1cmZhY2UuCgpUaW1lIHRvIGNvbnN1bHQgS2NvbmZpZyBmb3IgYENPTkZJR19TV0FQYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBpcyBzcG90IG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgxNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbmZpZ3VyaW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCB1c2VzIGBTV0FQYCBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgaW5pdGlhbCBzZXR1cC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgY3JpdGljYWwgZGV0YWlscy4gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nIOKAkyB0aGF0JiMzOTtzIGEga2V5IGVsZW1lbnQgaW4gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJIHdhbnQgdG8gYmUgY2VydGFpbiB3ZSBoYXZlIGl0IHNldCBjb3JyZWN0bHkgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24uIEdvdHRhIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIFBvbmRlcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYE1FTUNHYC4gTm93LCB3aGVyZSBleGFjdGx5IGRpZCBJIHNlZSB0aGUgZGVmaW5pdGlvbiBmb3IgaXQ/IEhtbSwgd2FzIGl0IGx1cmtpbmcgaW4gYGluaXQvS2NvbmZpZ2Agb3Igd2FzIGl0IHR1Y2tlZCBhd2F5IGluIGBtbS9LY29uZmlnYD8gSXQgZmVlbHMgbGlrZSBpdCBzaG91bGQgYmUgdGhlIGxhdHRlciwgYnV0IHNvbWV0aW1lcyB0aGUgYnJvYWRlciBpbml0aWFsaXphdGlvbiB0aGluZ3Mgc25lYWsgaW50byBgaW5pdGAuIEkgbmVlZCB0byB0cmFjayB0aGlzIGRvd24gcXVpY2tseSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA1Mj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA2MS1cbmluaXQvS2NvbmZpZzoxMDYyOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNjMtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwNzAtXG5pbml0L0tjb25maWc6MTA3MTpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwNzItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwNzctXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDc5LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IENHcm91cHMgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGNvbmZpZ3MgYWZmZWN0ZWQgYXJlIGBTV0FQYCBhbmQgYE1FTUNHYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0LgoKSSBzZWUgdGhhdCBhIGZldyBjb3JlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gb2YgdGhlIHN3YXAgY2x1c3RlciB0YWJsZSwgaGFzIHNlZW4gc29tZSBjb250ZXh0IGNoYW5nZXMuIFRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uLCBgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGVgLCB3aGljaCBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIOKAkyBsaWtlbHkgcmVsYXRlZCB0byBjb3B5aW5nIG9yIHJlcGxpY2F0aW5nIHRhYmxlIGRhdGEuIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIGlzIGluIHRoZSBtaXg7IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIG5vdyBhbmQgaWYgaXQgaGFzIGFueSBzaGFyZWQgcmVzb3VyY2UgaW1wbGljYXRpb25zLiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIHN1Z2dlc3RzIHBvdGVudGlhbGx5IGFuIGF0dGVtcHQgYXQgbWVtb3J5IHJlY2xhbWF0aW9uIHdoZW4gdGhlIHN3YXAgdGFibGUgaXMgZXh0ZW5kZWQuIEFsc28sIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIG1ha2VzIG1lIHRoaW5rIHRoZXJlJiMzOTtzIHNvbWUgc29ydCBvZiBjbHVzdGVyIGVudHJ5IGR1cGxpY2F0aW9uIGludm9sdmVkLiBBbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBzeXNfc3dhcG9uYCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgc3lzdGVtIGNhbGwgbGV2ZWwuCgpOb3csIGEgcXVpY2sgY2hlY2sgb24gYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgLSBJIHN1c3BlY3QgaXQmIzM5O3MgcHJvYmFibHkgc3RhdGljLCBidXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBmdWxseS4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCB1bmludGVudGlvbmFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTU0MD1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcbm1tL3N3YXBmaWxlLmM6NTQxOnN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTU0Mi1cdFx0XHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwZmlsZS5jPTY0Mj1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppc29sYXRlX2xvY2tfY2x1c3Rlcihcbi0tXG5tbS9zd2FwZmlsZS5jLTY2OS1cdFx0Vk1fV0FSTl9PTl9PTkNFKGNsdXN0ZXJfdGFibGVfaXNfYWxsb2NlZChmb3VuZCkpO1xubW0vc3dhcGZpbGUuYzo2NzA6XHRcdHJldHVybiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc2ksIGZvdW5kKTtcbm1tL3N3YXBmaWxlLmMtNjcxLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqU3RhdGljIEZ1bmN0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGNvZGUmIzM5O3MgZ290IG15IGF0dGVudGlvbiBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9ucywgYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgYW5kIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIHNuaXBwZXQsIGlzIHRvIGltbWVkaWF0ZWx5IGNvbmZpcm0gd2hldGhlciBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYCBpcyBpbmRlZWQgc3RhdGljLiBLbm93aW5nIHRoYXQgY2hhbmdlcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSBhbmQgcG90ZW50aWFsbHkgaG93IHRoZSBsaW5rZXIgaGFuZGxlcyBpdC4gSXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IHRoYXQgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAgaXMgYWxzbyBzdGF0aWM/IFRoZXNlIGtpbmRzIG9mIGRlc2lnbiBkZWNpc2lvbnMgYWZmZWN0IG1haW50YWluYWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSwgYnV0IHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQmIzM5O3MgaGl0dGluZyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9kdXBfZW50cmllc19jbHVzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE2NTU9c3RhdGljIGludCBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2OTQtLyoqXG5tbS9zd2FwZmlsZS5jOjE2OTU6ICogc3dhcF9kdXBfZW50cmllc19jbHVzdGVyOiBJbmNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXIuXG5tbS9zd2FwZmlsZS5jLTE2OTYtICogQHNpOiBUaGUgc3dhcCBkZXZpY2UuXG4tLVxubW0vc3dhcGZpbGUuYy0xNzA0LSAqL1xubW0vc3dhcGZpbGUuYzoxNzA1OnN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMTcwNi1cdFx0XHRcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTgxMz1pbnQgZm9saW9fZHVwX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnN1YnBhZ2UpXG4tLVxubW0vc3dhcGZpbGUuYy0xODI1LVxubW0vc3dhcGZpbGUuYzoxODI2Olx0cmV0dXJuIHN3YXBfZHVwX2VudHJpZXNfY2x1c3Rlcihzd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLFxubW0vc3dhcGZpbGUuYy0xODI3LVx0XHRcdFx0XHRzd3Bfb2Zmc2V0KGVudHJ5KSwgbnJfcGFnZXMpO1xuLS1cbm1tL3N3YXBmaWxlLmM9Mzc2NT1pbnQgc3dhcF9kdXBfZW50cnlfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMzc4MS1cbm1tL3N3YXBmaWxlLmM6Mzc4MjpcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCAxKTtcbm1tL3N3YXBmaWxlLmMtMzc4My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1ODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHRzLCBmb2N1c2luZyBvbiB0aGUgZGV0YWlscyBwcm92aWRlZCBhbmQgdGhlaXIgaW1wbGljYXRpb25zOgoKKipTdGF0aWMgRnVuY3Rpb24gRGVjbGFyYXRpb25zIGluIHRoZSBDb2RlKioKCk9rYXksIHNvIEkgc2VlIHRoZXNlIHR3byBmdW5jdGlvbnMgZGVjbGFyZWQgYXMgYHN0YXRpY2A6IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGFuZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gQmVpbmcgZGVjbGFyZWQgYHN0YXRpY2AgbWVhbnMgdGhleSBoYXZlIGludGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IChlLmcuLCB0aGUgY3VycmVudCBgLmNgIGZpbGUpLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBkZXNpZ25lZCB0byBwZXJmb3JtIHNwZWNpZmljLCBpc29sYXRlZCB0YXNrcyB3aXRoaW4gYSBsYXJnZXIgbW9kdWxlIG9yIGRhdGEgc3RydWN0dXJlIG1hbmFnZW1lbnQgc3lzdGVtLiBJdCBhbHNvIGltcGxpZXMgdGhleSBhcmUgbm90IG1lYW50IHRvIGJlIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgdHJhbnNsYXRpb24gdW5pdC4gSSB3b25kZXIgd2hhdCB0aGUgY29udGV4dCBpcywgaXMgaXQgc29tZSBzb3J0IG9mIGNhY2hpbmcgb3IgdGFibGUgbWFuYWdlbWVudCBzdHJhdGVneT8gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3b3VsZCBpbW1lZGlhdGVseSBzaGVkIGxpZ2h0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgcm9sZXMgaW4gdGhlIGJpZyBwaWN0dXJlLCBvZiBjb3Vyc2UuIEZvciBub3csIGl0JiMzOTtzIGp1c3QgdGhpcyBpbW1lZGlhdGUgb2JzZXJ2YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE1MTI9aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbi0tXG5tbS9zd2FwZmlsZS5jLTE1MjktXG5tbS9zd2FwZmlsZS5jOjE1MzA6c3RhdGljIHZvaWQgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbm1tL3N3YXBmaWxlLmMtMTUzMS17XG4tLVxubW0vc3dhcGZpbGUuYz0xNTQ3PXN0YXRpYyB2b2lkIF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTU4MS1cdGlmICh1bmxpa2VseShjb3VudCA9PSBTV1BfVEJfQ09VTlRfTUFYIC0gMiB8fCBjb3VudCA9PSBTV1BfVEJfQ09VTlRfTUFYIC0gMSkpXG5tbS9zd2FwZmlsZS5jOjE1ODI6XHRcdHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKTtcbm1tL3N3YXBmaWxlLmMtMTU4My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwOTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCB1c2VyIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgJiMzOTtzd2Fwb24mIzM5OyBTeXN0ZW0gQ2FsbCoqCgpBbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIGNhbGwgaW4gcXVlc3Rpb24gaXMgYHN3YXBvbmAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIGl0cyBmdW5jdGlvbjogYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIGZvciB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbXBsaWNhdGlvbnMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc2ltcGxlIGZ1bmN0aW9uIGNhbGw7IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIGhvdyB0aGUgT1MgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuIEkmIzM5O20gY29uc2lkZXJpbmcgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCYjMzk7cyB1c2VkOiB3aGVuIFJBTSBpcyBleGhhdXN0ZWQsIGl0IGFsbG93cyB0aGUga2VybmVsIHRvIG1pZ3JhdGUgbGVzcy11c2VkIHBhZ2VzIHRvIGRpc2sgKHRoZSBzd2FwIHNwYWNlKSB0byBmcmVlIHVwIHBoeXNpY2FsIG1lbW9yeS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFyZ3VtZW50czogSSBuZWVkIHRvIHJlY2FsbCB0aGUgZGV0YWlscyBvZiBob3cgdGhlIGRldmljZSBpcyBzcGVjaWZpZWQsIGxpa2VseSB0aHJvdWdoIGEgZGV2aWNlIHBhdGggb3IgYSBmaWxlIGRlc2NyaXB0b3IsIGFuZCBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGRlZmluZSBwcmlvcml0aWVzIG9yIHNpemUgY29uc3RyYWludHMuIFdoYXQgYXJlIHRoZSBwZXJtaXNzaW9uIGNoZWNrcyB0aGF0IG11c3Qgb2NjdXI/IEl0IGNhbiYjMzk7dCBiZSBqdXN0IGFueW9uZSBjYWxsaW5nIHRoaXMsIHJpZ2h0PyBJJiMzOTttIHBpY3R1cmluZyB0aGUga2VybmVsIGNvZGUgdGhhdCBoYW5kbGVzIHRoaXMg4oCTIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgcGFnZSB0YWJsZXMsIHRoZSBkaXJ0eSBwYWdlIGZsdXNoaW5nLCB0aGUgY29udGV4dCBzd2l0Y2hpbmcgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZS4KCkkmIzM5O20gYWxzbyBwb25kZXJpbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgY29tbW9uIHBpdGZhbGxzLiBGb3IgZXhhbXBsZSwgYW0gSSB3b3JyaWVkIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIG9uIGEgaGlnaC1sYXRlbmN5IHN0b3JhZ2UgbWVkaXVtLCBsaWtlIGEgbmV0d29ya2VkIGRyaXZlPyBIb3cgZG9lcyB0aGlzIGRlY2lzaW9uIGltcGFjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uIG9mIHRoZSBzd2FwIHNwYWNlLiBXaGF0IGFib3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gcmVnYXJkcyB0byBkYXRhIGF0IHJlc3Q/IElzIHRoZSBzd2FwIHNwYWNlIGVuY3J5cHRlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBzd2FwIGRldmljZSBpcyBjb3JydXB0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlY292ZXJ5PwoKRmluYWxseSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGNvbXBhcmluZyBpdCB0byBpdHMgY291bnRlcnBhcnQsIGBzd2Fwb2ZmYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBtZW50YWwgY2hlY2tsaXN0IG9mIGVycm9yIGNvbmRpdGlvbnMgSSYjMzk7ZCBleHBlY3QgdG8gc2VlOiBpbnZhbGlkIGRldmljZSwgaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zLCByZXNvdXJjZSBleGhhdXN0aW9uLCBhbmQgc28gb24uIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgZGVidWdnaW5nIHRvb2xzIGFuZCB0cmFjaW5nIG1lY2hhbmlzbXMgd291bGQgYmUgbW9zdCBlZmZlY3RpdmUgZm9yIHRyb3VibGVzaG9vdGluZyBhIGBzd2Fwb25gIGlzc3VlLiBJIGFtIGFsc28gcmVtZW1iZXJpbmcgb3RoZXIgcmVsYXRlZCBzeXN0ZW0gY2FsbHMsIGxpa2UgYG1tYXBgIG9yIGBtdW5tYXBgLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0gYW5kIHRoZSBgc3dhcG9uYCBjYWxsLiBJdCYjMzk7cyBtb3JlIHRoYW4ganVzdCBrbm93aW5nIHdoYXQgaXQgZG9lcywgaXQmIzM5O3MgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBhbGwgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnN3YXBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0zNDIyPXN0YXRpYyBpbnQgc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTM1MDEtXG5tbS9zd2FwZmlsZS5jOjM1MDI6U1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbm1tL3N3YXBmaWxlLmMtMzUwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBTdWJzeXN0ZW0gTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSB3YXkgdGhlIHN3YXAgc3Vic3lzdGVtIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGl0IG1hbmFnZXMgdGhlc2UgJiMzOTtzd2FwIGNsdXN0ZXIgdGFibGVzLiYjMzk7IFRoZSBrZXkgc3lzY2FsbCBpbnZvbHZlZCBoZXJlIGlzIGBzeXNfc3dhcG9uYCDigJMgdGhhdCYjMzk7cyBteSBkaXJlY3QgZW50cnkgcG9pbnQgdG8gdGhlIGNoYW5nZXMuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAsIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgLCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLCBhbmQgb2YgY291cnNlLCBgc3lzX3N3YXBvbmAgaXRzZWxmLCBiZWNhdXNlIHRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgb2YgdGhlIG9wZXJhdGlvbmFsIGNoYW5nZXMuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgc3dhcG9uYCBzeXNjYWxsIGFuZCB0aHJvdWdoIHN3YXBwaW5nLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBjaGFuZ2VzIHRvIGFsbG9jYXRpb24sIGR1cGxpY2F0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZXNlIGNsdXN0ZXIgdGFibGVzLCBhbG9uZyB3aXRoIHNvbWUgdHdlYWtzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gYHN3YXBvbmAuIFRoaXMga2luZCBvZiBjb3JlLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhY2Nlc3NpYmxlIHZpYSBhIHVzZXItc3BhY2Ugc3lzY2FsbCwgYWx3YXlzIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEl0IGFmZmVjdHMgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19NRU1DR2AgaXMgdXNlZCBpbiBgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGVgLCBidXQgaXMgdGhhdCB0aGUgb25seSBjb25maWc/IEFuZCBgU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdgIGlzIHRoZXJlLCBidXQgdGhhdOKAmXMgbm90IGEgY29uZmlnIG9wdGlvbiwgcmlnaHQ/IExldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NXQVBfVEFCTEVfSEFTX1pFUk9GTEFHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXAuaD0xMT1leHRlcm4gaW50IHBhZ2VfY2x1c3Rlcjtcbi0tXG5tbS9zd2FwLmgtMjUtLyogSWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGJlc2lkZXMgUEZOIGFuZCBtYXJrZXIsIHN0b3JlIHplcm8gZmxhZyBpbmxpbmUgKi9cbm1tL3N3YXAuaDoyNjojZGVmaW5lIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXHRcdCgoQklUU19QRVJfTE9ORyAtIFNXQVBfQ0FDSEVfUEZOX01BUktfQklUUyAtIFxcXG5tbS9zd2FwLmgtMjctXHRcdFx0XHRcdCAgU1dBUF9DQUNIRV9QRk5fQklUUykgXHUwMDNlIFNXQVBfQ09VTlRfTUlOX0JJVFMpXG4tLVxubW0vc3dhcC5oPTQ4PXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyB7XG4tLVxubW0vc3dhcC5oLTYxLSNlbmRpZlxubW0vc3dhcC5oOjYyOiNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXAuaC02My1cdHVuc2lnbmVkIGxvbmcgKnplcm9fYml0bWFwO1xuLS1cbm1tL3N3YXBfdGFibGUuaD0xNT1zdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4tLVxubW0vc3dhcF90YWJsZS5oLTcxLSNkZWZpbmUgU1dQX1RCX0ZMQUdTX0JJVFNcdG1pbig1LCBCSVRTX1BFUl9MT05HIC0gU1dQX1RCX1BGTl9CSVRTKVxubW0vc3dhcF90YWJsZS5oOjcyOiNkZWZpbmUgU1dQX1RCX0NPVU5UX0JJVFNcdChTV1BfVEJfRkxBR1NfQklUUyAtIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHKVxubW0vc3dhcF90YWJsZS5oLTczLSNkZWZpbmUgU1dQX1RCX0ZMQUdTX01BU0tcdCh+KCh+MFVMKSBcdTAwM2VcdTAwM2UgU1dQX1RCX0ZMQUdTX0JJVFMpKVxuLS1cbm1tL3N3YXBfdGFibGUuaC03Ny0jZGVmaW5lIFNXUF9UQl9DT1VOVF9NQVggICAgICAgKCgxIFx1MDAzY1x1MDAzYyBTV1BfVEJfQ09VTlRfQklUUykgLSAxKVxubW0vc3dhcF90YWJsZS5oOjc4Oi8qIFRoZSBmaXJzdCBmbGFnIGlzIHplcm8gYml0IChTV0FQX1RBQkxFX0hBU19aRVJPRkxBRykgKi9cbm1tL3N3YXBfdGFibGUuaC03OS0jZGVmaW5lIFNXUF9UQl9aRVJPX0ZMQUdcdEJJVChCSVRTX1BFUl9MT05HIC0gU1dQX1RCX0ZMQUdTX0JJVFMpXG4tLVxubW0vc3dhcF90YWJsZS5oPTI2Nz1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX3RhYmxlX3NldF96ZXJvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF90YWJsZS5oLTI2OS17XG5tbS9zd2FwX3RhYmxlLmg6MjcwOiNpZiBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xubW0vc3dhcF90YWJsZS5oLTI3MS1cdHVuc2lnbmVkIGxvbmcgc3dwX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi0tXG5tbS9zd2FwX3RhYmxlLmg9MjgzPXN0YXRpYyBpbmxpbmUgYm9vbCBfX3N3YXBfdGFibGVfdGVzdF96ZXJvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF90YWJsZS5oLTI4NS17XG5tbS9zd2FwX3RhYmxlLmg6Mjg2OiNpZiBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xubW0vc3dhcF90YWJsZS5oLTI4Ny1cdHVuc2lnbmVkIGxvbmcgc3dwX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi0tXG5tbS9zd2FwX3RhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfdGFibGVfY2xlYXJfemVybyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfdGFibGUuaC0yOTgte1xubW0vc3dhcF90YWJsZS5oOjI5OTojaWYgU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXBfdGFibGUuaC0zMDAtXHR1bnNpZ25lZCBsb25nIHN3cF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4tLVxubW0vc3dhcGZpbGUuYz00MjE9c3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2ZyZWVfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTQyOS1cbm1tL3N3YXBmaWxlLmM6NDMwOiNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXBmaWxlLmMtNDMxLVx0a2ZyZWUoY2ktXHUwMDNlemVyb19iaXRtYXApO1xuLS1cbm1tL3N3YXBmaWxlLmM9NDQ5PXN0YXRpYyBpbnQgc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIGdmcF90IGdmcClcbi0tXG5tbS9zd2FwZmlsZS5jLTQ4MS1cbm1tL3N3YXBmaWxlLmM6NDgyOiNpZiAhU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcbm1tL3N3YXBmaWxlLmMtNDgzLVx0Vk1fV0FSTl9PTl9PTkNFKGNpLVx1MDAzZXplcm9fYml0bWFwKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTQ5Mz1zdGF0aWMgdm9pZCBzd2FwX2NsdXN0ZXJfY29weV90YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmRfY2ksXG4tLVxubW0vc3dhcGZpbGUuYy01MDEtXG5tbS9zd2FwZmlsZS5jOjUwMjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXG5tbS9zd2FwZmlsZS5jLTUwMy1cdGRfY2ktXHUwMDNlemVyb19iaXRtYXAgPSBzX2NpLVx1MDAzZXplcm9fYml0bWFwO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTkyND12b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xOTQ2LVx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xubW0vc3dhcGZpbGUuYzoxOTQ3Olx0XHRpZiAoIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHKVxubW0vc3dhcGZpbGUuYy0xOTQ4LVx0XHRcdF9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBjaV9vZmYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUzCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLCB0aGlua2luZyBsaWtlIGEga2VybmVsIGV4cGVydDoKCioqVW5kZXJzdGFuZGluZyB0aGUgU3dhcCBUYWJsZSBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgc28gYFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHYCAtIHRoYXQmIzM5O3MgYSBtYWNybywgdGhlIGtpbmQgdGhhdCBwcm9iYWJseSBkaWN0YXRlcyBzb21lIGNvbXBpbGUtdGltZSBiZWhhdmlvdXIgYXJvdW5kIGhvdyB0aGUgc3dhcCB0YWJsZSBpcyBtYW5hZ2VkLiBOb3csIGxldCYjMzk7cyBzZWUsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN3YXAtcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhlIGtleSBvbmVzIHNlZW0gdG8gYmUgYFNXQVBgIGl0c2VsZiwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsLCBhbmQgYE1FTUNHYCwgd2hpY2ggdGVsbHMgbWUgd2UgYXJlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuIFRob3NlIGFyZSBteSBwcmltYXJ5IGNvbnNpZGVyYXRpb25zIGhlcmUuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggY29kZSBzZWN0aW9ucyBhcmUgcGVydGluZW50LiBUaGUgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsLCBnaXZlbiB0aGUgY29udGV4dCwgYXJlIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgLCB3aGljaCBpcyBvYnZpb3VzbHkgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHN3YXAgY2x1c3Rlci4gVGhlcmUmIzM5O3MgYHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcmAsIHdoaWNoIGluZGljYXRlcyB3ZSBhcmUgZGVhbGluZyB3aXRoIGR1cGxpY2F0aW5nIGVudHJpZXMgaW4gdGhlIHN3YXAgdGFibGUvY2x1c3Rlci4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCwgd2hpY2ggbGlrZWx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIHRhYmxlIGV4cGFuc2lvbiBhbmQgcG90ZW50aWFsIG1lbW9yeSByZWNsYW1hdGlvbiwgYW5kIGBzeXNfc3dhcG9uYCB3aGljaCBoYXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIHRoZSBzeXN0ZW0tbGV2ZWwgZnVuY3Rpb24gZm9yIHR1cm5pbmcgb24gc3dhcCBtZW1vcnksIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBmZWF0dXJlLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSBjb3JlIG9wZXJhdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB3ZSBhcmUgZGVhbGluZyB3aXRoLgoKTm93LCBpdCYjMzk7cyB0aW1lIHRvIHRlc3QgdGhlIGNvZGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJpZXNfY2x1c3RlciYjMzQ7LAogICAgJiMzNDtzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZSYjMzQ7LAogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF9jbHVzdGVyX3BvcHVsYXRlJiMzNDssCiAgICAmIzM0O3N3YXBfZHVwX2VudHJpZXNfY2x1c3RlciYjMzQ7LAogICAgJiMzNDtzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZSYjMzQ7LAogICAgJiMzNDtzeXNfc3dhcG9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuMDQ1NDUyNDk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExOTYwMTEyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2NsdXN0ZXJfcG9wdWxhdGVcIixcbiAgICBcInN3YXBfZHVwX2VudHJpZXNfY2x1c3RlclwiLFxuICAgIFwic3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVcIixcbiAgICBcInN5c19zd2Fwb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNsdXN0ZXIgYWxsb2NhdGlvbiwgY29weWluZywgYW5kIGZyZWVpbmcgbG9naWMsIGFzIHdlbGwgYXMgYWRqdXN0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0aGUgc3dhcG9uIHN5c2NhbGwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzd2Fwb24gYW5kIHN3YXAgYWxsb2NhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuMDQ1NDU4NTg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIwODk1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMDEzZDdmYmQxMGNlZmNjNGUyNGJjYjU3ZDczMjk3YmIzMmMyNGJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDA4OjQ0OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggNjE1ZDkwODY3MTExM2YuLmZjOWYxNmJjMmU0ZTBjIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBmaWxlLmNcXG4rKysgYi9tbS9zd2FwZmlsZS5jXFxuQEAgLTQ5MCw2ICs0OTAsMjAgQEAgc3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpkX2NpLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpzX2NpKVxcbit7XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihkX2NpLVxcdTAwM2V0YWJsZSwgcmN1X2FjY2Vzc19wb2ludGVyKHNfY2ktXFx1MDAzZXRhYmxlKSk7XFxuK1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK1xcdGRfY2ktXFx1MDAzZW1lbWNnX3RhYmxlID0gc19jaS1cXHUwMDNlbWVtY2dfdGFibGU7XFxuKyNlbmRpZlxcbitcXG4rI2lmICFTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xcbitcXHRkX2NpLVxcdTAwM2V6ZXJvX2JpdG1hcCA9IHNfY2ktXFx1MDAzZXplcm9fYml0bWFwO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gLypcXG4gICogU2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBub3RoaW5nIGxlYWtlZCwgYW5kIHRoZSBzcGVjaWZpZWQgcmFuZ2UgaXMgZW1wdHkuXFxuICAqIE9uZSBzcGVjaWFsIGNhc2UgaXMgdGhhdCBiYWQgc2xvdHMgY2FuJ3QgYmUgZnJlZWQsIHNvIGNoZWNrIHRoZSBudW1iZXIgb2ZcXG5AQCAtNTI3LDYgKzU0MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKlxcbiBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRcXHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4ge1xcbitcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gdG1wX2NpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0LypcXG5AQCAtNTUyLDcgKzU2Nyw4IEBAIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzaS1cXHUwMDNlZ2xvYmFsX2NsdXN0ZXJfbG9jayk7XFxuIFxcdGxvY2FsX3VubG9jayhcXHUwMDI2cGVyY3B1X3N3YXBfY2x1c3Rlci5sb2NrKTtcXG4gXFxuLVxcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShjaSwgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfFxcbitcXHR0bXBfY2kgPSAqY2k7XFxuK1xcdHJldCA9IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShcXHUwMDI2dG1wX2NpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XFxuIFxcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbiBcXG4gXFx0LypcXG5AQCAtNTczLDYgKzU4OSw5IEBAIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBVcGRhdGUgdGFibGVzIGluIGF0b21pYyBjb250ZXh0ICovXFxuK1xcdHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlKGNpLCBcXHUwMDI2dG1wX2NpKTtcXG4gXFx0cmV0dXJuIGNpO1xcbiB9XFxuIFxcbkBAIC0xNTExLDIwICsxNTMwLDE3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxuIHN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpO1xcbi1cXHRib29sIGNhbl9mcmVlID0gdHJ1ZTtcXG4gXFxuIFxcdGlmICghY2ktXFx1MDAzZWV4dGVuZF90YWJsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNXQVBGSUxFX0NMVVNURVI7IGkrKykge1xcbiBcXHRcXHRpZiAoY2ktXFx1MDAzZWV4dGVuZF90YWJsZVtpXSlcXG4tXFx0XFx0XFx0Y2FuX2ZyZWUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoY2FuX2ZyZWUpIHtcXG4tXFx0XFx0a2ZyZWUoY2ktXFx1MDAzZWV4dGVuZF90YWJsZSk7XFxuLVxcdFxcdGNpLVxcdTAwM2VleHRlbmRfdGFibGUgPSBOVUxMO1xcbi1cXHR9XFxuK1xcdGtmcmVlKGNpLVxcdTAwM2VleHRlbmRfdGFibGUpO1xcbitcXHRjaS1cXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcXG4gfVxcbiBcXG4gLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqL1xcbkBAIC0xNzE2LDcgKzE3MzIsNiBAQCBzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIGZhaWxlZDpcXG4gXFx0d2hpbGUgKGNpX29mZi0tIFxcdTAwM2UgY2lfc3RhcnQpXFxuIFxcdFxcdF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShjaSwgY2lfb2ZmKTtcXG4tXFx0c3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWUoY2kpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC0zNTg4LDExICszNjAzLDYgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcXG4gXFxuIFxcdG1heHBhZ2VzID0gc2ktXFx1MDAzZW1heDtcXG4gXFxuLVxcdC8qIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8gKi9cXG4tXFx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XFxuLVxcbiBcXHRpZiAoc2ktXFx1MDAzZWJkZXYgXFx1MDAyNlxcdTAwMjYgYmRldl9zdGFibGVfd3JpdGVzKHNpLVxcdTAwM2ViZGV2KSlcXG4gXFx0XFx0c2ktXFx1MDAzZWZsYWdzIHw9IFNXUF9TVEFCTEVfV1JJVEVTO1xcbiBcXG5AQCAtMzYwNiw2ICszNjE2LDE0IEBAIFNZU0NBTExfREVGSU5FMihzd2Fwb24sIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlLCBpbnQsIHN3YXBfZmxhZ3MpXFxuIFxcdFxcdGluY2VkX25yX3JvdGF0ZV9zd2FwID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogU2V0IHVwIHRoZSBzd2FwIGNsdXN0ZXIgaW5mby4gU1dQX1NPTElEU1RBVEUgaXMgdXNlZCBmb3JcXG4rXFx0ICogZ2xvYmFsX2NsdXN0ZXIgYWxsb2NhdGlvblxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc2ksIHN3YXBfaGVhZGVyLCBtYXhwYWdlcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XFxuK1xcbiBcXHRpZiAoKHN3YXBfZmxhZ3MgXFx1MDAyNiBTV0FQX0ZMQUdfRElTQ0FSRCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHNpLVxcdTAwM2ViZGV2IFxcdTAwMjZcXHUwMDI2IGJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzaS1cXHUwMDNlYmRldikpIHtcXG4gXFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuNTM4NTE0NjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcwMjkzNjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfY2x1c3Rlcl9wb3B1bGF0ZVwiLFxuICAgIFwic3dhcF9kdXBfZW50cmllc19jbHVzdGVyXCIsXG4gICAgXCJzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZVwiLFxuICAgIFwic3lzX3N3YXBvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwMTNkN2ZiZDEwY2VmY2M0ZTI0YmNiNTdkNzMyOTdiYjMyYzI0YmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwODo0NDoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCA2MTVkOTA4NjcxMTEzZi4uZmM5ZjE2YmMyZTRlMGMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtNDkwLDYgKzQ5MCwyMCBAQCBzdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpkX2NpLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqc19jaSlcbit7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoZF9jaS1cdTAwM2V0YWJsZSwgcmN1X2FjY2Vzc19wb2ludGVyKHNfY2ktXHUwMDNldGFibGUpKTtcbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rXHRkX2NpLVx1MDAzZW1lbWNnX3RhYmxlID0gc19jaS1cdTAwM2VtZW1jZ190YWJsZTtcbisjZW5kaWZcbitcbisjaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXG4rXHRkX2NpLVx1MDAzZXplcm9fYml0bWFwID0gc19jaS1cdTAwM2V6ZXJvX2JpdG1hcDtcbisjZW5kaWZcbit9XG4rXG4gLypcbiAgKiBTYW5pdHkgY2hlY2sgdG8gZW5zdXJlIG5vdGhpbmcgbGVha2VkLCBhbmQgdGhlIHNwZWNpZmllZCByYW5nZSBpcyBlbXB0eS5cbiAgKiBPbmUgc3BlY2lhbCBjYXNlIGlzIHRoYXQgYmFkIHNsb3RzIGNhbid0IGJlIGZyZWVkLCBzbyBjaGVjayB0aGUgbnVtYmVyIG9mXG5AQCAtNTI3LDYgKzU0MSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKlxuIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4ge1xuK1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvIHRtcF9jaTtcbiBcdGludCByZXQ7XG4gXG4gXHQvKlxuQEAgLTU1Miw3ICs1NjcsOCBAQCBzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZzaS1cdTAwM2VnbG9iYWxfY2x1c3Rlcl9sb2NrKTtcbiBcdGxvY2FsX3VubG9jayhcdTAwMjZwZXJjcHVfc3dhcF9jbHVzdGVyLmxvY2spO1xuIFxuLVx0cmV0ID0gc3dhcF9jbHVzdGVyX2FsbG9jX3RhYmxlKGNpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XG4rXHR0bXBfY2kgPSAqY2k7XG4rXHRyZXQgPSBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoXHUwMDI2dG1wX2NpLCBfX0dGUF9ISUdIIHwgX19HRlBfTk9NRU1BTExPQyB8XG4gXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuIFxuIFx0LypcbkBAIC01NzMsNiArNTg5LDkgQEAgc3dhcF9jbHVzdGVyX3BvcHVsYXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuK1xuK1x0LyogVXBkYXRlIHRhYmxlcyBpbiBhdG9taWMgY29udGV4dCAqL1xuK1x0c3dhcF9jbHVzdGVyX2NvcHlfdGFibGUoY2ksIFx1MDAyNnRtcF9jaSk7XG4gXHRyZXR1cm4gY2k7XG4gfVxuIFxuQEAgLTE1MTEsMjAgKzE1MzAsMTcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBzdGF0aWMgdm9pZCBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbi1cdGJvb2wgY2FuX2ZyZWUgPSB0cnVlO1xuIFxuIFx0aWYgKCFjaS1cdTAwM2VleHRlbmRfdGFibGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNXQVBGSUxFX0NMVVNURVI7IGkrKykge1xuIFx0XHRpZiAoY2ktXHUwMDNlZXh0ZW5kX3RhYmxlW2ldKVxuLVx0XHRcdGNhbl9mcmVlID0gZmFsc2U7XG4rXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKGNhbl9mcmVlKSB7XG4tXHRcdGtmcmVlKGNpLVx1MDAzZWV4dGVuZF90YWJsZSk7XG4tXHRcdGNpLVx1MDAzZWV4dGVuZF90YWJsZSA9IE5VTEw7XG4tXHR9XG4rXHRrZnJlZShjaS1cdTAwM2VleHRlbmRfdGFibGUpO1xuK1x0Y2ktXHUwMDNlZXh0ZW5kX3RhYmxlID0gTlVMTDtcbiB9XG4gXG4gLyogRGVjcmVhc2UgdGhlIHN3YXAgY291bnQgb2Ygb25lIHNsb3QsIHdpdGhvdXQgZnJlZWluZyBpdCAqL1xuQEAgLTE3MTYsNyArMTczMiw2IEBAIHN0YXRpYyBpbnQgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBmYWlsZWQ6XG4gXHR3aGlsZSAoY2lfb2ZmLS0gXHUwMDNlIGNpX3N0YXJ0KVxuIFx0XHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIGNpX29mZik7XG4tXHRzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTM1ODgsMTEgKzM2MDMsNiBAQCBTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxuIFxuIFx0bWF4cGFnZXMgPSBzaS1cdTAwM2VtYXg7XG4gXG4tXHQvKiBTZXQgdXAgdGhlIHN3YXAgY2x1c3RlciBpbmZvICovXG4tXHRlcnJvciA9IHNldHVwX3N3YXBfY2x1c3RlcnNfaW5mbyhzaSwgc3dhcF9oZWFkZXIsIG1heHBhZ2VzKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBiYWRfc3dhcF91bmxvY2tfaW5vZGU7XG4tXG4gXHRpZiAoc2ktXHUwMDNlYmRldiBcdTAwMjZcdTAwMjYgYmRldl9zdGFibGVfd3JpdGVzKHNpLVx1MDAzZWJkZXYpKVxuIFx0XHRzaS1cdTAwM2VmbGFncyB8PSBTV1BfU1RBQkxFX1dSSVRFUztcbiBcbkBAIC0zNjA2LDYgKzM2MTYsMTQgQEAgU1lTQ0FMTF9ERUZJTkUyKHN3YXBvbiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUsIGludCwgc3dhcF9mbGFncylcbiBcdFx0aW5jZWRfbnJfcm90YXRlX3N3YXAgPSB0cnVlO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIFNldCB1cCB0aGUgc3dhcCBjbHVzdGVyIGluZm8uIFNXUF9TT0xJRFNUQVRFIGlzIHVzZWQgZm9yXG4rXHQgKiBnbG9iYWxfY2x1c3RlciBhbGxvY2F0aW9uXG4rXHQgKi9cbitcdGVycm9yID0gc2V0dXBfc3dhcF9jbHVzdGVyc19pbmZvKHNpLCBzd2FwX2hlYWRlciwgbWF4cGFnZXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGJhZF9zd2FwX3VubG9ja19pbm9kZTtcbitcbiBcdGlmICgoc3dhcF9mbGFncyBcdTAwMjYgU1dBUF9GTEFHX0RJU0NBUkQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHNpLVx1MDAzZWJkZXYgXHUwMDI2XHUwMDI2IGJkZXZfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzaS1cdTAwM2ViZGV2KSkge1xuIFx0XHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjIuNTM4NTE2NzgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyNTk2NTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXAgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbXBhY3RmdWwuIEl0IGxvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiBjYWxsZWQgYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYCBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyB0YWJsZSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCBpbiBwb3B1bGF0aW9uLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgIGFyZSBhbHNvIGNhdGNoaW5nIG15IGV5ZTsgc2hvcnQtY2lyY3VpdGluZyBhbmQgZnJlZWluZyBvbmx5IGlmIGFsbCBlbnRyaWVzIGFyZSB6ZXJvIHN1Z2dlc3RzIG9wdGltaXphdGlvbiwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKGNpKWAgY2FsbCBmcm9tIHRoZSBlcnJvciBwYXRoIGluIGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGlzIGEgYml0IGNvbmNlcm5pbmcg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCB3YXMgcmVtb3ZlZCBhbmQgaWYgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHN0aWxsIHJvYnVzdC4gRmluYWxseSwgbW92aW5nIGBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm9gIGluIHRoZSBgc3dhcG9uYCBzeXNjYWxsIGFmdGVyIHRoZSBgU1dQX1NPTElEU1RBVEVgIGZsYWcgaXMgc2V0Li4uIHRoYXQncyBhIHN0cnVjdHVyYWwgY2hhbmdlIHJlbGF0ZWQgdG8gc29saWQtc3RhdGUgZHJpdmVzLCB3aGljaCBuZWVkcyBjYXJlZnVsIGV4YW1pbmF0aW9uLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBzd2FwIHN1YnN5c3RlbSwgYW5kIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBzd2Fwb25gIHN5c2NhbGwgYW5kLCBjcnVjaWFsbHksIHN3YXAgYWxsb2NhdGlvbiBwYXRocy4gVGhhdCBtZWFucyBmdXp6ZXIgdGltZSwgd2l0aG91dCBhIGRvdWJ0LiBJIG5lZWQgdG8gZ2V0IHRoaXMgY292ZXJlZCB3aXRoIHNvbWUgZnV6emluZyBjYW1wYWlnbnMuXG5cbkxldCdzIHNlZeKApiBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfU1dBUGAgaXMgYSBwcmUtcmVxdWlzaXRlLiBBbmQsIGFoYSwgYENPTkZJR19NRU1DR2AgaXMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYC4gVGhpcyBtaWdodCBiZSBpbnRlcmVzdGluZywgc2luY2UgSSdtIHNlZWluZyBhbiBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkgbmVlZCB0byBmb2N1cyBvbjpcbiogICBgc3dhcF9jbHVzdGVyX3BvcHVsYXRlYCAtIFRoaXMgaXMgd2hlcmUgdGhlIG5ldyB0YWJsZSBpcyB1c2VkLlxuKiAgIGBzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZWAgLSBUaGUgb3B0aW1pemVkIGZyZWUgcGF0aC5cbiogICBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCAtIFVuZGVyc3RhbmQgdGhhdCBlcnJvciBwYXRoIGNoYW5nZS5cbiogICBgc3lzX3N3YXBvbmAgKG9yIGBfX3g2NF9zeXNfc3dhcG9uYCkgLSBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIHRodXMgYW4gaW1wb3J0YW50IGF0dGFjayBzdXJmYWNlLlxuXG5UaW1lIHRvIGNvbnN1bHQgS2NvbmZpZyBmb3IgYENPTkZJR19TV0FQYCBhbmQgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyBpcyBzcG90IG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjkuNTY0NDg1MTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTA0MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MjkuNjMwNDAyNzc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1NjYwODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uZmlndXJpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCB1c2VzIGBTV0FQYCBmb3IgaXRzIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBpbml0aWFsIHNldHVwLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgY3JpdGljYWwgZGV0YWlscy4gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBDT05GSUdfTUVNQ0dgIHNldHRpbmcg4oCTIHRoYXQncyBhIGtleSBlbGVtZW50IGluIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSB3YW50IHRvIGJlIGNlcnRhaW4gd2UgaGF2ZSBpdCBzZXQgY29ycmVjdGx5IGZvciB0aGlzIGltcGxlbWVudGF0aW9uLiBHb3R0YSBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHJlc291cmNlIGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDozMi4zODcwMTMwMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyODgzOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDozMi40NDczMTY0NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMyOTA3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIFBvbmRlcmluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBNRU1DR2AuIE5vdywgd2hlcmUgZXhhY3RseSBkaWQgSSBzZWUgdGhlIGRlZmluaXRpb24gZm9yIGl0PyBIbW0sIHdhcyBpdCBsdXJraW5nIGluIGBpbml0L0tjb25maWdgIG9yIHdhcyBpdCB0dWNrZWQgYXdheSBpbiBgbW0vS2NvbmZpZ2A/IEl0IGZlZWxzIGxpa2UgaXQgc2hvdWxkIGJlIHRoZSBsYXR0ZXIsIGJ1dCBzb21ldGltZXMgdGhlIGJyb2FkZXIgaW5pdGlhbGl6YXRpb24gdGhpbmdzIHNuZWFrIGludG8gYGluaXRgLiBJIG5lZWQgdG8gdHJhY2sgdGhpcyBkb3duIHF1aWNrbHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjM1LjU4MDIyNjA1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjI4ODM3MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNTI9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA2MS1cXG5pbml0L0tjb25maWc6MTA2Mjpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA2My1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcwLVxcbmluaXQvS2NvbmZpZzoxMDcxOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwNzItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6MzguODA5MDcwNjkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3Njk0ODcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgTWVtb3J5IENHcm91cHMgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGtleSBjb25maWdzIGFmZmVjdGVkIGFyZSBgU1dBUGAgYW5kIGBNRU1DR2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmFjdC5cblxuSSBzZWUgdGhhdCBhIGZldyBjb3JlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBTcGVjaWZpY2FsbHksIGBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGVgLCB3aGljaCBJJ20gYXNzdW1pbmcgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgc3dhcCBjbHVzdGVyIHRhYmxlLCBoYXMgc2VlbiBzb21lIGNvbnRleHQgY2hhbmdlcy4gVGhlcmUncyBhIG5ldyBmdW5jdGlvbiwgYHN3YXBfY2x1c3Rlcl9jb3B5X3RhYmxlYCwgd2hpY2ggSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIOKAkyBsaWtlbHkgcmVsYXRlZCB0byBjb3B5aW5nIG9yIHJlcGxpY2F0aW5nIHRhYmxlIGRhdGEuIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIGlzIGluIHRoZSBtaXg7IEknbGwgbmVlZCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZCBub3cgYW5kIGlmIGl0IGhhcyBhbnkgc2hhcmVkIHJlc291cmNlIGltcGxpY2F0aW9ucy4gYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCBzdWdnZXN0cyBwb3RlbnRpYWxseSBhbiBhdHRlbXB0IGF0IG1lbW9yeSByZWNsYW1hdGlvbiB3aGVuIHRoZSBzd2FwIHRhYmxlIGlzIGV4dGVuZGVkLiBBbHNvLCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCBtYWtlcyBtZSB0aGluayB0aGVyZSdzIHNvbWUgc29ydCBvZiBjbHVzdGVyIGVudHJ5IGR1cGxpY2F0aW9uIGludm9sdmVkLiBBbmQgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBzeXNfc3dhcG9uYCDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBzeXN0ZW0gY2FsbCBsZXZlbC5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9uIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIC0gSSBzdXNwZWN0IGl0J3MgcHJvYmFibHkgc3RhdGljLCBidXQgSSBzaG91bGQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24gdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBmdWxseS4gR290dGEgbWFrZSBzdXJlIGl0J3Mgbm90IHVuaW50ZW50aW9uYWxseSBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDIuNzg2MDIyMDMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ5MzQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2NsdXN0ZXJfcG9wdWxhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTU0MD1zdGF0aWMgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpcXG5tbS9zd2FwZmlsZS5jOjU0MTpzd2FwX2NsdXN0ZXJfcG9wdWxhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtNTQyLVxcdFxcdFxcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYz02NDI9c3RhdGljIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaXNvbGF0ZV9sb2NrX2NsdXN0ZXIoXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTY2OS1cXHRcXHRWTV9XQVJOX09OX09OQ0UoY2x1c3Rlcl90YWJsZV9pc19hbGxvY2VkKGZvdW5kKSk7XFxubW0vc3dhcGZpbGUuYzo2NzA6XFx0XFx0cmV0dXJuIHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZShzaSwgZm91bmQpO1xcbm1tL3N3YXBmaWxlLmMtNjcxLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDIuODQ2NTI3MDQ4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjYxMTUzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBUaGUgY29kZSdzIGdvdCBteSBhdHRlbnRpb24gZm9jdXNlZCBvbiB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgIGFuZCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYC4gTXkgZmlyc3QgaW5zdGluY3QsIGJhc2VkIG9uIHRoZSBzbmlwcGV0LCBpcyB0byBpbW1lZGlhdGVseSBjb25maXJtIHdoZXRoZXIgYHN3YXBfY2x1c3Rlcl9wb3B1bGF0ZWAgaXMgaW5kZWVkIHN0YXRpYy4gS25vd2luZyB0aGF0IGNoYW5nZXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtb2R1bGUgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGUgbGlua2VyIGhhbmRsZXMgaXQuIElzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGlzIGFsc28gc3RhdGljPyBUaGVzZSBraW5kcyBvZiBkZXNpZ24gZGVjaXNpb25zIGFmZmVjdCBtYWludGFpbmFiaWxpdHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSBJJ20gbG9va2luZyBhdCB0aGVzZSwgYnV0IHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQncyBoaXR0aW5nIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDUuNzcyNjQ4MjI2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg2NzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTE2NTU9c3RhdGljIGludCBfX3N3YXBfY2x1c3Rlcl9kdXBfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTY5NC0vKipcXG5tbS9zd2FwZmlsZS5jOjE2OTU6ICogc3dhcF9kdXBfZW50cmllc19jbHVzdGVyOiBJbmNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXIuXFxubW0vc3dhcGZpbGUuYy0xNjk2LSAqIEBzaTogVGhlIHN3YXAgZGV2aWNlLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzA0LSAqL1xcbm1tL3N3YXBmaWxlLmM6MTcwNTpzdGF0aWMgaW50IHN3YXBfZHVwX2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0xNzA2LVxcdFxcdFxcdFxcdCAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yKVxcbi0tXFxubW0vc3dhcGZpbGUuYz0xODEzPWludCBmb2xpb19kdXBfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqc3VicGFnZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTgyNS1cXG5tbS9zd2FwZmlsZS5jOjE4MjY6XFx0cmV0dXJuIHN3YXBfZHVwX2VudHJpZXNfY2x1c3Rlcihzd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLFxcbm1tL3N3YXBmaWxlLmMtMTgyNy1cXHRcXHRcXHRcXHRcXHRzd3Bfb2Zmc2V0KGVudHJ5KSwgbnJfcGFnZXMpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0zNzY1PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTM3ODEtXFxubW0vc3dhcGZpbGUuYzozNzgyOlxcdHJldHVybiBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCAxKTtcXG5tbS9zd2FwZmlsZS5jLTM3ODMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDo0NS44NTE1MjI5MTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3OTQxNDIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodHMsIGZvY3VzaW5nIG9uIHRoZSBkZXRhaWxzIHByb3ZpZGVkIGFuZCB0aGVpciBpbXBsaWNhdGlvbnM6XG5cbioqU3RhdGljIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyBpbiB0aGUgQ29kZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZXNlIHR3byBmdW5jdGlvbnMgZGVjbGFyZWQgYXMgYHN0YXRpY2A6IGBzd2FwX2R1cF9lbnRyaWVzX2NsdXN0ZXJgIGFuZCBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVzZSBhcmUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4gQmVpbmcgZGVjbGFyZWQgYHN0YXRpY2AgbWVhbnMgdGhleSBoYXZlIGludGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IChlLmcuLCB0aGUgY3VycmVudCBgLmNgIGZpbGUpLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UsIHByb2JhYmx5IGRlc2lnbmVkIHRvIHBlcmZvcm0gc3BlY2lmaWMsIGlzb2xhdGVkIHRhc2tzIHdpdGhpbiBhIGxhcmdlciBtb2R1bGUgb3IgZGF0YSBzdHJ1Y3R1cmUgbWFuYWdlbWVudCBzeXN0ZW0uIEl0IGFsc28gaW1wbGllcyB0aGV5IGFyZSBub3QgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSB0cmFuc2xhdGlvbiB1bml0LiBJIHdvbmRlciB3aGF0IHRoZSBjb250ZXh0IGlzLCBpcyBpdCBzb21lIHNvcnQgb2YgY2FjaGluZyBvciB0YWJsZSBtYW5hZ2VtZW50IHN0cmF0ZWd5PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHNoZWQgbGlnaHQuIEknbGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZWlyIHNwZWNpZmljIHJvbGVzIGluIHRoZSBiaWcgcGljdHVyZSwgb2YgY291cnNlLiBGb3Igbm93LCBpdCdzIGp1c3QgdGhpcyBpbW1lZGlhdGUgb2JzZXJ2YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDo0OS4xMzA5NDAyNTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTY1OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNTEyPWludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE1MjktXFxubW0vc3dhcGZpbGUuYzoxNTMwOnN0YXRpYyB2b2lkIHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxubW0vc3dhcGZpbGUuYy0xNTMxLXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTU0Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTU4MS1cXHRpZiAodW5saWtlbHkoY291bnQgPT0gU1dQX1RCX0NPVU5UX01BWCAtIDIgfHwgY291bnQgPT0gU1dQX1RCX0NPVU5UX01BWCAtIDEpKVxcbm1tL3N3YXBmaWxlLmM6MTU4MjpcXHRcXHRzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZShjaSk7XFxubW0vc3dhcGZpbGUuYy0xNTgzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDg6NDQ6NDkuMTk3NTE0MTk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDI1MzY0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlciBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgJ3N3YXBvbicgU3lzdGVtIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgc3lzdGVtIGNhbGwgaW4gcXVlc3Rpb24gaXMgYHN3YXBvbmAuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIGl0cyBmdW5jdGlvbjogYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIGZvciB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucy4gSXQncyBub3QganVzdCBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsOyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIGhvdyB0aGUgT1MgaGFuZGxlcyBtZW1vcnkgcHJlc3N1cmUuIEknbSBjb25zaWRlcmluZyB0aGUgc2NlbmFyaW9zIHdoZXJlIGl0J3MgdXNlZDogd2hlbiBSQU0gaXMgZXhoYXVzdGVkLCBpdCBhbGxvd3MgdGhlIGtlcm5lbCB0byBtaWdyYXRlIGxlc3MtdXNlZCBwYWdlcyB0byBkaXNrICh0aGUgc3dhcCBzcGFjZSkgdG8gZnJlZSB1cCBwaHlzaWNhbCBtZW1vcnkuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgYXJndW1lbnRzOiBJIG5lZWQgdG8gcmVjYWxsIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgZGV2aWNlIGlzIHNwZWNpZmllZCwgbGlrZWx5IHRocm91Z2ggYSBkZXZpY2UgcGF0aCBvciBhIGZpbGUgZGVzY3JpcHRvciwgYW5kIEknbSBhbHNvIGNvbnNpZGVyaW5nIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBkZWZpbmUgcHJpb3JpdGllcyBvciBzaXplIGNvbnN0cmFpbnRzLiBXaGF0IGFyZSB0aGUgcGVybWlzc2lvbiBjaGVja3MgdGhhdCBtdXN0IG9jY3VyPyBJdCBjYW4ndCBiZSBqdXN0IGFueW9uZSBjYWxsaW5nIHRoaXMsIHJpZ2h0PyBJJ20gcGljdHVyaW5nIHRoZSBrZXJuZWwgY29kZSB0aGF0IGhhbmRsZXMgdGhpcyDigJMgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBwYWdlIHRhYmxlcywgdGhlIGRpcnR5IHBhZ2UgZmx1c2hpbmcsIHRoZSBjb250ZXh0IHN3aXRjaGluZyBpbnZvbHZlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLlxuXG5JJ20gYWxzbyBwb25kZXJpbmcgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhbmQgY29tbW9uIHBpdGZhbGxzLiBGb3IgZXhhbXBsZSwgYW0gSSB3b3JyaWVkIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYWN0aXZhdGluZyBhIHN3YXAgZGV2aWNlIG9uIGEgaGlnaC1sYXRlbmN5IHN0b3JhZ2UgbWVkaXVtLCBsaWtlIGEgbmV0d29ya2VkIGRyaXZlPyBIb3cgZG9lcyB0aGlzIGRlY2lzaW9uIGltcGFjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBmcmFnbWVudGF0aW9uIG9mIHRoZSBzd2FwIHNwYWNlLiBXaGF0IGFib3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gcmVnYXJkcyB0byBkYXRhIGF0IHJlc3Q/IElzIHRoZSBzd2FwIHNwYWNlIGVuY3J5cHRlZD8gV2hhdCBoYXBwZW5zIGlmIHRoZSBzd2FwIGRldmljZSBpcyBjb3JydXB0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlY292ZXJ5P1xuXG5GaW5hbGx5LCBJJ20gYWxyZWFkeSBtZW50YWxseSBjb21wYXJpbmcgaXQgdG8gaXRzIGNvdW50ZXJwYXJ0LCBgc3dhcG9mZmAuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBtZW50YWwgY2hlY2tsaXN0IG9mIGVycm9yIGNvbmRpdGlvbnMgSSdkIGV4cGVjdCB0byBzZWU6IGludmFsaWQgZGV2aWNlLCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMsIHJlc291cmNlIGV4aGF1c3Rpb24sIGFuZCBzbyBvbi4gSSdtIHdvbmRlcmluZyB3aGF0IGRlYnVnZ2luZyB0b29scyBhbmQgdHJhY2luZyBtZWNoYW5pc21zIHdvdWxkIGJlIG1vc3QgZWZmZWN0aXZlIGZvciB0cm91Ymxlc2hvb3RpbmcgYSBgc3dhcG9uYCBpc3N1ZS4gSSBhbSBhbHNvIHJlbWVtYmVyaW5nIG90aGVyIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLCBsaWtlIGBtbWFwYCBvciBgbXVubWFwYCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtIGFuZCB0aGUgYHN3YXBvbmAgY2FsbC4gSXQncyBtb3JlIHRoYW4ganVzdCBrbm93aW5nIHdoYXQgaXQgZG9lcywgaXQncyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIGFsbCBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NDo1My45NDAwNTQyODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0ODQ0MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLipzd2Fwb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTM0MjI9c3RhdGljIGludCBzZXR1cF9zd2FwX2NsdXN0ZXJzX2luZm8oc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0zNTAxLVxcbm1tL3N3YXBmaWxlLmM6MzUwMjpTWVNDQUxMX0RFRklORTIoc3dhcG9uLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSwgaW50LCBzd2FwX2ZsYWdzKVxcbm1tL3N3YXBmaWxlLmMtMzUwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjU0LjAwNDkwNDY3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI1Mzk1MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFN3YXAgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgd2F5IHRoZSBzd2FwIHN1YnN5c3RlbSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBpdCBtYW5hZ2VzIHRoZXNlICdzd2FwIGNsdXN0ZXIgdGFibGVzLicgVGhlIGtleSBzeXNjYWxsIGludm9sdmVkIGhlcmUgaXMgYHN5c19zd2Fwb25gIOKAkyB0aGF0J3MgbXkgZGlyZWN0IGVudHJ5IHBvaW50IHRvIHRoZSBjaGFuZ2VzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgLCBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgYHN3YXBfZXh0ZW5kX3RhYmxlX3RyeV9mcmVlYCwgYW5kIG9mIGNvdXJzZSwgYHN5c19zd2Fwb25gIGl0c2VsZiwgYmVjYXVzZSB0aGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBvcGVyYXRpb25hbCBjaGFuZ2VzLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYHN3YXBvbmAgc3lzY2FsbCBhbmQgdGhyb3VnaCBzd2FwcGluZy5cblxuVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBjaGFuZ2VzIHRvIGFsbG9jYXRpb24sIGR1cGxpY2F0aW9uLCBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZXNlIGNsdXN0ZXIgdGFibGVzLCBhbG9uZyB3aXRoIHNvbWUgdHdlYWtzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aXRoaW4gYHN3YXBvbmAuIFRoaXMga2luZCBvZiBjb3JlLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBhY2Nlc3NpYmxlIHZpYSBhIHVzZXItc3BhY2Ugc3lzY2FsbCwgYWx3YXlzIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEl0IGFmZmVjdHMgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX01FTUNHYCBpcyB1c2VkIGluIGBzd2FwX2NsdXN0ZXJfY29weV90YWJsZWAsIGJ1dCBpcyB0aGF0IHRoZSBvbmx5IGNvbmZpZz8gQW5kIGBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR2AgaXMgdGhlcmUsIGJ1dCB0aGF04oCZcyBub3QgYSBjb25maWcgb3B0aW9uLCByaWdodD8gTGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzI5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjU4LjUzMDMwMzE2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzOTAxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXAuaD0xMT1leHRlcm4gaW50IHBhZ2VfY2x1c3RlcjtcXG4tLVxcbm1tL3N3YXAuaC0yNS0vKiBJZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYmVzaWRlcyBQRk4gYW5kIG1hcmtlciwgc3RvcmUgemVybyBmbGFnIGlubGluZSAqL1xcbm1tL3N3YXAuaDoyNjojZGVmaW5lIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFx0XFx0KChCSVRTX1BFUl9MT05HIC0gU1dBUF9DQUNIRV9QRk5fTUFSS19CSVRTIC0gXFxcXFxcbm1tL3N3YXAuaC0yNy1cXHRcXHRcXHRcXHRcXHQgIFNXQVBfQ0FDSEVfUEZOX0JJVFMpIFxcdTAwM2UgU1dBUF9DT1VOVF9NSU5fQklUUylcXG4tLVxcbm1tL3N3YXAuaD00OD1zdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8ge1xcbi0tXFxubW0vc3dhcC5oLTYxLSNlbmRpZlxcbm1tL3N3YXAuaDo2MjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcC5oLTYzLVxcdHVuc2lnbmVkIGxvbmcgKnplcm9fYml0bWFwO1xcbi0tXFxubW0vc3dhcF90YWJsZS5oPTE1PXN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcXG4tLVxcbm1tL3N3YXBfdGFibGUuaC03MS0jZGVmaW5lIFNXUF9UQl9GTEFHU19CSVRTXFx0bWluKDUsIEJJVFNfUEVSX0xPTkcgLSBTV1BfVEJfUEZOX0JJVFMpXFxubW0vc3dhcF90YWJsZS5oOjcyOiNkZWZpbmUgU1dQX1RCX0NPVU5UX0JJVFNcXHQoU1dQX1RCX0ZMQUdTX0JJVFMgLSBTV0FQX1RBQkxFX0hBU19aRVJPRkxBRylcXG5tbS9zd2FwX3RhYmxlLmgtNzMtI2RlZmluZSBTV1BfVEJfRkxBR1NfTUFTS1xcdCh+KCh+MFVMKSBcXHUwMDNlXFx1MDAzZSBTV1BfVEJfRkxBR1NfQklUUykpXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmgtNzctI2RlZmluZSBTV1BfVEJfQ09VTlRfTUFYICAgICAgICgoMSBcXHUwMDNjXFx1MDAzYyBTV1BfVEJfQ09VTlRfQklUUykgLSAxKVxcbm1tL3N3YXBfdGFibGUuaDo3ODovKiBUaGUgZmlyc3QgZmxhZyBpcyB6ZXJvIGJpdCAoU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUcpICovXFxubW0vc3dhcF90YWJsZS5oLTc5LSNkZWZpbmUgU1dQX1RCX1pFUk9fRkxBR1xcdEJJVChCSVRTX1BFUl9MT05HIC0gU1dQX1RCX0ZMQUdTX0JJVFMpXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmg9MjY3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfdGFibGVfc2V0X3plcm8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfdGFibGUuaC0yNjkte1xcbm1tL3N3YXBfdGFibGUuaDoyNzA6I2lmIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcF90YWJsZS5oLTI3MS1cXHR1bnNpZ25lZCBsb25nIHN3cF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuLS1cXG5tbS9zd2FwX3RhYmxlLmg9MjgzPXN0YXRpYyBpbmxpbmUgYm9vbCBfX3N3YXBfdGFibGVfdGVzdF96ZXJvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmgtMjg1LXtcXG5tbS9zd2FwX3RhYmxlLmg6Mjg2OiNpZiBTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xcbm1tL3N3YXBfdGFibGUuaC0yODctXFx0dW5zaWduZWQgbG9uZyBzd3BfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbi0tXFxubW0vc3dhcF90YWJsZS5oPTI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfdGFibGUuaC0yOTgte1xcbm1tL3N3YXBfdGFibGUuaDoyOTk6I2lmIFNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcF90YWJsZS5oLTMwMC1cXHR1bnNpZ25lZCBsb25nIHN3cF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTQyMT1zdGF0aWMgdm9pZCBzd2FwX2NsdXN0ZXJfZnJlZV90YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy00MjktXFxubW0vc3dhcGZpbGUuYzo0MzA6I2lmICFTV0FQX1RBQkxFX0hBU19aRVJPRkxBR1xcbm1tL3N3YXBmaWxlLmMtNDMxLVxcdGtmcmVlKGNpLVxcdTAwM2V6ZXJvX2JpdG1hcCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTQ0OT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTQ4MS1cXG5tbS9zd2FwZmlsZS5jOjQ4MjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcGZpbGUuYy00ODMtXFx0Vk1fV0FSTl9PTl9PTkNFKGNpLVxcdTAwM2V6ZXJvX2JpdG1hcCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTQ5Mz1zdGF0aWMgdm9pZCBzd2FwX2NsdXN0ZXJfY29weV90YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmRfY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTUwMS1cXG5tbS9zd2FwZmlsZS5jOjUwMjojaWYgIVNXQVBfVEFCTEVfSEFTX1pFUk9GTEFHXFxubW0vc3dhcGZpbGUuYy01MDMtXFx0ZF9jaS1cXHUwMDNlemVyb19iaXRtYXAgPSBzX2NpLVxcdTAwM2V6ZXJvX2JpdG1hcDtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTkyND12b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE5NDYtXFx0XFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTtcXG5tbS9zd2FwZmlsZS5jOjE5NDc6XFx0XFx0aWYgKCFTV0FQX1RBQkxFX0hBU19aRVJPRkxBRylcXG5tbS9zd2FwZmlsZS5jLTE5NDgtXFx0XFx0XFx0X19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIGNpX29mZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDA4OjQ0OjU4LjYwMDcwMjM0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ2OTAzNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgbGlrZSBhIGtlcm5lbCBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgU3dhcCBUYWJsZSBhbmQgUmVsZXZhbnQgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgU1dBUF9UQUJMRV9IQVNfWkVST0ZMQUdgIC0gdGhhdCdzIGEgbWFjcm8sIHRoZSBraW5kIHRoYXQgcHJvYmFibHkgZGljdGF0ZXMgc29tZSBjb21waWxlLXRpbWUgYmVoYXZpb3VyIGFyb3VuZCBob3cgdGhlIHN3YXAgdGFibGUgaXMgbWFuYWdlZC4gTm93LCBsZXQncyBzZWUsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgc3dhcC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGUga2V5IG9uZXMgc2VlbSB0byBiZSBgU1dBUGAgaXRzZWxmLCB3aGljaCBpcyBwcmV0dHkgZnVuZGFtZW50YWwsIGFuZCBgTUVNQ0dgLCB3aGljaCB0ZWxscyBtZSB3ZSBhcmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhvc2UgYXJlIG15IHByaW1hcnkgY29uc2lkZXJhdGlvbnMgaGVyZS5cblxuTm93LCBsZXQncyBzZWUgd2hpY2ggY29kZSBzZWN0aW9ucyBhcmUgcGVydGluZW50LiBUaGUgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsLCBnaXZlbiB0aGUgY29udGV4dCwgYXJlIGBzd2FwX2NsdXN0ZXJfcG9wdWxhdGVgLCB3aGljaCBpcyBvYnZpb3VzbHkgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhlIHN3YXAgY2x1c3Rlci4gVGhlcmUncyBgc3dhcF9kdXBfZW50cmllc19jbHVzdGVyYCwgd2hpY2ggaW5kaWNhdGVzIHdlIGFyZSBkZWFsaW5nIHdpdGggZHVwbGljYXRpbmcgZW50cmllcyBpbiB0aGUgc3dhcCB0YWJsZS9jbHVzdGVyLiBgc3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVgLCB3aGljaCBsaWtlbHkgY29uY2VybnMgaXRzZWxmIHdpdGggdGFibGUgZXhwYW5zaW9uIGFuZCBwb3RlbnRpYWwgbWVtb3J5IHJlY2xhbWF0aW9uLCBhbmQgYHN5c19zd2Fwb25gIHdoaWNoIGhhcyB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhlIHN5c3RlbS1sZXZlbCBmdW5jdGlvbiBmb3IgdHVybmluZyBvbiBzd2FwIG1lbW9yeSwgb3IgYXQgbGVhc3QgYSByZWxhdGVkIGZlYXR1cmUuIFRoaXMgdGVsbHMgbWUgYWJvdXQgdGhlIGNvcmUgb3BlcmF0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHdlIGFyZSBkZWFsaW5nIHdpdGguXG5cbk5vdywgaXQncyB0aW1lIHRvIHRlc3QgdGhlIGNvZGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1MywiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwODo0NTowMy4xNDc2MDk4ODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzgzNTcxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2NsdXN0ZXJfcG9wdWxhdGVcIixcbiAgICBcInN3YXBfZHVwX2VudHJpZXNfY2x1c3RlclwiLFxuICAgIFwic3dhcF9leHRlbmRfdGFibGVfdHJ5X2ZyZWVcIixcbiAgICBcInN5c19zd2Fwb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNsdXN0ZXIgYWxsb2NhdGlvbiwgY29weWluZywgYW5kIGZyZWVpbmcgbG9naWMsIGFzIHdlbGwgYXMgYWRqdXN0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBpbiB0aGUgc3dhcG9uIHN5c2NhbGwuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzd2Fwb24gYW5kIHN3YXAgYWxsb2NhdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfY2x1c3Rlcl9wb3B1bGF0ZVwiLFxuICAgIFwic3dhcF9kdXBfZW50cmllc19jbHVzdGVyXCIsXG4gICAgXCJzd2FwX2V4dGVuZF90YWJsZV90cnlfZnJlZVwiLFxuICAgIFwic3lzX3N3YXBvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2x1c3RlciBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgZnJlZWluZyBsb2dpYywgYXMgd2VsbCBhcyBhZGp1c3RpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yZGVyIGluIHRoZSBzd2Fwb24gc3lzY2FsbC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN3YXBvbiBhbmQgc3dhcCBhbGxvY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgglpz[1] Phase: Succeeded StartedAt: 2026-07-20 08:45:14 +0000 UTC FinishedAt: 2026-07-20 08:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 08:45:14 +0000 UTC FinishedAt: 2026-07-20 08:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[2] Phase: Succeeded StartedAt: 2026-07-20 08:45:14 +0000 UTC FinishedAt: 2026-07-20 09:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","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-07-20 08:45:14 +0000 UTC FinishedAt: 2026-07-20 09:22:46 +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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","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-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 08:45:14 +0000 UTC FinishedAt: 2026-07-20 08:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 08:45:14 +0000 UTC FinishedAt: 2026-07-20 08:45:19 +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-workflowgglpz/series-workflowgglpz-convert-artifact-2808261768/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 08:45:24 +0000 UTC FinishedAt: 2026-07-20 09:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 08:45:24 +0000 UTC FinishedAt: 2026-07-20 09:21:59 +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:*261f6516-67bb-4d30-9e07-42307f56d735,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-workflowgglpz/series-workflowgglpz-convert-artifact-2808261768/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": "4e63ea0e-f551-49a7-98a8-07a8acee95d7", "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-workflowgglpz/series-workflowgglpz-build-action-1271695102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 08:45:24 +0000 UTC FinishedAt: 2026-07-20 09:21:42 +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:*261f6516-67bb-4d30-9e07-42307f56d735,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-workflowgglpz/series-workflowgglpz-convert-artifact-2808261768/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": "4e63ea0e-f551-49a7-98a8-07a8acee95d7", "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-workflowgglpz/series-workflowgglpz-build-action-1271695102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","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-07-20 09:22:00 +0000 UTC FinishedAt: 2026-07-20 09:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgglpz[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":["swap_cluster_populate","swap_dup_entries_cluster","swap_extend_table_try_free","sys_swapon"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a51cbdf02aec619f90db7e9f06e295adb8009d4d","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG"],"series_id":"37d0baf9-a670-4ea1-b243-a8644f3cf69c","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-07-20 09:22:00 +0000 UTC FinishedAt: 2026-07-20 09:22:22 +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,}