Name: series-workflow8svtk Phase: Succeeded StartedAt: 2026-09-07 15:34:01 +0000 UTC FinishedAt: 2026-09-07 19:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[0] Phase: Succeeded StartedAt: 2026-09-07 15:34:01 +0000 UTC FinishedAt: 2026-09-07 15:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 15:34:01 +0000 UTC FinishedAt: 2026-09-07 15:54:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "118286b8-5fe7-4965-95b2-97bdd03545d7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_skb_change_tail", "sk_skb_change_tail", "bpf_skb_trim_rcsum", "__bpf_skb_min_len" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdGFpbCBhZGp1c3RtZW50IGxvZ2ljIChgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgLyBgYnBmX3NrYl90cmltX3Jjc3VtYCkgYnkgcmVsYXhpbmcgdGhlIG1pbmltdW0gbGVuZ3RoIGNhbGN1bGF0aW9uIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIHJlc2V0dGluZyBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cbjMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGxlbmd0aCBlcnJvcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdHJpbW1pbmcgc2VtYW50aWNzIGluIG5ldC9jb3JlL2ZpbHRlci5jLiBTcGVjaWZpY2FsbHksIGl0IHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIGNvbnN0cmFpbnQgYmFzZWQgb24gcGFydGlhbCBjaGVja3N1bSBvZmZzZXRzIGluIF9fYnBmX3NrYl9taW5fbGVuIGFuZCBpbnN0ZWFkIHJlc2V0cyBza2ItXHUwMDNlaXBfc3VtbWVkIHRvIENIRUNLU1VNX05PTkUgd2hlbiB0cmltbWluZyBwYWNrZXRzIGJlbG93IHRoZSBjaGVja3N1bSBzdGFydC9vZmZzZXQgaW4gYnBmX3NrYl90cmltX3Jjc3VtLiBUaGlzIGNoYW5nZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiByZWFjaGFibGUgQlBGIGhlbHBlciBmdW5jdGlvbnMgKGJwZl9za2JfY2hhbmdlX3RhaWwgYW5kIHNrX3NrYl9jaGFuZ2VfdGFpbCkgYW5kIGFmZmVjdHMgbmV0d29yayBjaGVja3N1bSBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRjMTJlYWI5ZjRlYzRhNDFhMWRjOGU5YTRlNDhjYTgyZGU1NzhjYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE1OjUzOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0zOTYxLDEyICYjNDM7Mzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbiBcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuIFx0fVxuLVx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuLVx0XHRvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mztcbi1cdFx0XHQgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICYjNDM7IHNpemVvZihfX3N1bTE2KTtcbi1cdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbi1cdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuLVx0fVxuIFx0cmV0dXJuIG1pbl9sZW47XG4gfVxuIFxuQEAgLTM5ODMsNiAmIzQzOzM5NzcsMTEgQEAgc3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4gXG4gc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4ge1xuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG5ld19sZW4gXHUwMDNjIHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAmIzQzOyBza2ItXHUwMDNlY3N1bV9vZmZzZXQgJiM0MztcbiYjNDM7XHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbiYjNDM7XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuJiM0MztcbiBcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdhY2RiZDU3NTdhOThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuY1xuQEAgLTAsMCAmIzQzOzEsMTI1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0d29ya19oZWxwZXJzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDTElFTlRfTlNcdFwmIzM0O3RjLWNoYW5nZS10YWlsLWNsaS1uc1wmIzM0O1xuJiM0MzsjZGVmaW5lIFNFUlZFUl9OU1x0XCYjMzQ7dGMtY2hhbmdlLXRhaWwtc3J2LW5zXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQ0xJRU5UX0lQXHRcJiMzNDsxOTIuMTY4LjEuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIFNFUlZFUl9JUFx0XCYjMzQ7MTkyLjE2OC4xLjJcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9QTVRVXHQxMDAwXG4mIzQzOyNkZWZpbmUgVEVTVF9NU1NfTUFYXHQoVEVTVF9QTVRVIC0gMjAgLSAyMClcbiYjNDM7I2RlZmluZSBUSU1FT1VUX01TXHQzMDAwXG4mIzQzOyNkZWZpbmUgWEZFUl9CWVRFU1x0ODE5MlxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90Y3hfb3B0cywgdGN4X29wdHMpO1xuJiM0MztcdGludCBtc3NfYmVmb3JlID0gMCwgbXNzX2FmdGVyID0gMCwgaWZpbmRleCwgcG9ydDtcbiYjNDM7XHRpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xO1xuJiM0MztcdHN0cnVjdCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUgKnNrZWwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiYjNDM7XHRzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRzc2l6ZV90IGJ5dGVzO1xuJiM0MztcdHNpemVfdCB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhDTElFTlRfTlMpLCBcJiMzNDttYWtlIGNsaWVudCBuc1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhTRVJWRVJfTlMpLCBcJiMzNDttYWtlIHNlcnZlciBuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9jbGllbnRfbnM7XG4mIzQzO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwmIzM0O29wZW4gY2xpZW50IG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIGxpbmsgYWRkIHZldGgxIHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDIgbmV0bnMgXCYjMzQ7IFNFUlZFUl9OUyk7XG4mIzQzO1x0U1lTKG91dCwgXCYjMzQ7aXAgLTQgYWRkciBhZGQgXCYjMzQ7IENMSUVOVF9JUCBcJiMzNDsvMjQgZGV2IHZldGgxXCYjMzQ7KTtcbiYjNDM7XHRTWVMob3V0LCBcJiMzNDtpcCBsaW5rIHNldCB2ZXRoMSB1cFwmIzM0Oyk7XG4mIzQzO1x0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXhcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0bnN0b2tlbiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwmIzM0O29wZW4gc2VydmVyIG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIC00IGFkZHIgYWRkIFwmIzM0OyBTRVJWRVJfSVAgXCYjMzQ7LzI0IGRldiB2ZXRoMlwmIzM0Oyk7XG4mIzQzO1x0U1lTKG91dCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDIgdXBcJiMzNDspO1xuJiM0MztcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU0VSVkVSX0lQLCAwLCBUSU1FT1VUX01TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFwmIzM0O3N0YXJ0IHNlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuIGFuZCBsb2FkIHNrZWxldG9uXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNydl9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocG9ydCwgMCwgXCYjMzQ7Z2V0IHNlcnZlciBwb3J0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzZXJ2ZXJfcG9ydCA9IHBvcnQ7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcG10dSA9IFRFU1RfUE1UVTtcbiYjNDM7XG4mIzQzO1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3BlbiBjbGllbnQgbnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlbGlua3MuY2hhbmdlX3RhaWxfaWNtcCA9XG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVx1MDAzZXByb2dzLmNoYW5nZV90YWlsX2ljbXAsIGlmaW5kZXgsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZ0Y3hfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuY2hhbmdlX3RhaWxfaWNtcCwgXCYjMzQ7YXR0YWNoIHRjeFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Y2xpX2ZkID0gY29ubmVjdF90b19mZChzcnZfZmQsIFRJTUVPVVRfTVMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGNsaV9mZCwgXCYjMzQ7Y29ubmVjdCB0byBzZXJ2ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0c3J2X2Nvbm5fZmQgPSBhY2NlcHQoc3J2X2ZkLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgXCYjMzQ7YWNjZXB0IGNvbm5lY3Rpb25cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2V0dGltZW8oc3J2X2Nvbm5fZmQsIFRJTUVPVVRfTVMpLCBcJiMzNDtzZXQgc2VydmVyIHRpbWVvdXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZihtc3NfYmVmb3JlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhnZXRzb2Nrb3B0KGNsaV9mZCwgSVBQUk9UT19UQ1AsIFRDUF9NQVhTRUcsIFx1MDAyNm1zc19iZWZvcmUsXG4mIzQzO1x0XHRcdFx0ICBcdTAwMjZvcHRsZW4pLCBcJiMzNDtnZXQgbXNzIGJlZm9yZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Ynl0ZXMgPSBzZW5kKGNsaV9mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnl0ZXMsIChzc2l6ZV90KXNpemVvZihidWYpLCBcJiMzNDtzZW5kIGRhdGFcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodG90YWwgPSAwOyB0b3RhbCBcdTAwM2Mgc2l6ZW9mKGJ1Zik7IHRvdGFsICYjNDM7PSBieXRlcykge1xuJiM0MztcdFx0Ynl0ZXMgPSByZWN2KHNydl9jb25uX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbiYjNDM7XHRcdGlmIChieXRlcyBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHRvdGFsLCBzaXplb2YoYnVmKSwgXCYjMzQ7cmVjZWl2ZSBkYXRhXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0soc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWNoYW5nZV90YWlsX3JldCwgXCYjMzQ7Y2hhbmdlIHRhaWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2VhZGp1c3Rfcm9vbV9yZXQsIFwmIzM0O2FkanVzdCByb29tXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VpY21wX3NlbnQsIFwmIzM0O2ljbXAgc2VudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZihtc3NfYWZ0ZXIpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXHUwMDI2bXNzX2FmdGVyLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2b3B0bGVuKSwgXCYjMzQ7Z2V0IG1zcyBhZnRlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0xUKG1zc19hZnRlciwgbXNzX2JlZm9yZSwgXCYjMzQ7bXNzIHJlZHVjZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9MRShtc3NfYWZ0ZXIsIFRFU1RfTVNTX01BWCwgXCYjMzQ7bXNzIGJlbG93IHBtdHVcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2Uoc3J2X2Nvbm5fZmQpO1xuJiM0MztcdGNsb3NlKGNsaV9mZCk7XG4mIzQzO1x0Y2xvc2Uoc3J2X2ZkKTtcbiYjNDM7XHR0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHVfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0cmVtb3ZlX25ldG5zKFNFUlZFUl9OUyk7XG4mIzQzO291dF9jbGllbnRfbnM6XG4mIzQzO1x0cmVtb3ZlX25ldG5zKENMSUVOVF9OUyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YzRjMDc1NDViYzlmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbkBAIC0wLDAgJiM0MzsxLDEyOSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgOClcbiYjNDM7I2RlZmluZSBJQ01QX0hEUlNfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSlcbiYjNDM7XG4mIzQzO19fYmUxNiBzZXJ2ZXJfcG9ydCA9IDA7XG4mIzQzO19fdTE2IHBtdHUgPSAwO1xuJiM0MztcbiYjNDM7bG9uZyBjaGFuZ2VfdGFpbF9yZXQgPSAxO1xuJiM0Mztsb25nIGFkanVzdF9yb29tX3JldCA9IDA7XG4mIzQzO2Jvb2wgaWNtcF9zZW50ID0gZmFsc2U7XG4mIzQzO2Jvb2wgaWNtcF9lcnIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pXG4mIzQzO3tcbiYjNDM7XHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgJiM0MzsgKGNzdW0gXHUwMDNlXHUwMDNlIDE2KTtcbiYjNDM7XHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgJiM0MzsgKGNzdW0gXHUwMDNlXHUwMDNlIDE2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChfX3N1bTE2KX5jc3VtO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGMvZWdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRfX3U4IHNtYWNbRVRIX0FMRU5dLCBkbWFjW0VUSF9BTEVOXTtcbiYjNDM7XHR2b2lkICpkYXRhLCAqZGF0YV9lbmQ7XG4mIzQzO1x0c3RydWN0IGljbXBoZHIgKmljbXA7XG4mIzQzO1x0c3RydWN0IGV0aGhkciAqZXRoO1xuJiM0MztcdHN0cnVjdCB0Y3BoZHIgKnRjcDtcbiYjNDM7XHRfX2JlMzIgc2FkZHIsIGRhZGRyO1xuJiM0MztcdHN0cnVjdCBpcGhkciAqaXA7XG4mIzQzO1x0X193c3VtIGNzdW07XG4mIzQzO1xuJiM0MztcdGlmIChpY21wX3NlbnQgfHwgaWNtcF9lcnIpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1xuJiM0MztcdGV0aCA9IGRhdGE7XG4mIzQzO1x0aWYgKCh2b2lkICopKGV0aCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvICE9IGJwZl9odG9ucyhFVEhfUF9JUCkpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdGlwID0gKHZvaWQgKikoZXRoICYjNDM7IDEpO1xuJiM0MztcdGlmICgodm9pZCAqKShpcCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlobCAhPSA1IHx8IGlwLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuJiM0MztcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHR0Y3AgPSAodm9pZCAqKShpcCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoKHZvaWQgKikodGNwICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XHRpZiAodGNwLVx1MDAzZWRlc3QgIT0gc2VydmVyX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1x0aWYgKGJwZl9udG9ocyhpcC1cdTAwM2V0b3RfbGVuKSBcdTAwM2M9IHNpemVvZigqaXApICYjNDM7IHRjcC1cdTAwM2Vkb2ZmICogNClcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0X19idWlsdGluX21lbWNweShzbWFjLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbiYjNDM7XHRfX2J1aWx0aW5fbWVtY3B5KGRtYWMsIGV0aC1cdTAwM2VoX2Rlc3QsIEVUSF9BTEVOKTtcbiYjNDM7XHRzYWRkciA9IGlwLVx1MDAzZXNhZGRyO1xuJiM0MztcdGRhZGRyID0gaXAtXHUwMDNlZGFkZHI7XG4mIzQzO1xuJiM0MztcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApO1xuJiM0MztcdGlmIChjaGFuZ2VfdGFpbF9yZXQpIHtcbiYjNDM7XHRcdGljbXBfZXJyID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkanVzdF9yb29tX3JldCA9IGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCBJQ01QX0hEUlNfTEVOLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQlBGX0FESl9ST09NX01BQyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpO1xuJiM0MztcdGlmIChhZGp1c3Rfcm9vbV9yZXQpIHtcbiYjNDM7XHRcdGljbXBfZXJyID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBUQ1hfRFJPUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1xuJiM0MztcdGV0aCA9IGRhdGE7XG4mIzQzO1x0aXAgPSAodm9pZCAqKShldGggJiM0MzsgMSk7XG4mIzQzO1x0aWNtcCA9ICh2b2lkICopKGlwICYjNDM7IDEpO1xuJiM0MztcdGlmICgodm9pZCAqKWljbXAgJiM0Mzsgc2l6ZW9mKCppY21wKSAmIzQzOyBJQ01QX1NBTVBMRV9MRU4gXHUwMDNlIGRhdGFfZW5kKSB7XG4mIzQzO1x0XHRpY21wX2VyciA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gVENYX0RST1A7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX2Rlc3QsIHNtYWMsIEVUSF9BTEVOKTtcbiYjNDM7XHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgZG1hYywgRVRIX0FMRU4pO1xuJiM0MztcbiYjNDM7XHRfX2J1aWx0aW5fbWVtc2V0KGljbXAsIDAsIHNpemVvZigqaWNtcCkpO1xuJiM0MztcdGljbXAtXHUwMDNldHlwZSA9IElDTVBfREVTVF9VTlJFQUNIO1xuJiM0MztcdGljbXAtXHUwMDNlY29kZSA9IElDTVBfRlJBR19ORUVERUQ7XG4mIzQzO1x0aWNtcC1cdTAwM2V1bi5mcmFnLm10dSA9IGJwZl9odG9ucyhwbXR1KTtcbiYjNDM7XG4mIzQzO1x0X19idWlsdGluX21lbXNldChpcCwgMCwgc2l6ZW9mKCppcCkpO1xuJiM0MztcdGlwLVx1MDAzZXZlcnNpb24gPSA0O1xuJiM0MztcdGlwLVx1MDAzZWlobCA9IDU7XG4mIzQzO1x0aXAtXHUwMDNldHRsID0gNjQ7XG4mIzQzO1x0aXAtXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7XG4mIzQzO1x0aXAtXHUwMDNldG90X2xlbiA9IGJwZl9odG9ucyhJQ01QX0hEUlNfTEVOICYjNDM7IElDTVBfU0FNUExFX0xFTik7XG4mIzQzO1x0aXAtXHUwMDNlc2FkZHIgPSBkYWRkcjtcbiYjNDM7XHRpcC1cdTAwM2VkYWRkciA9IHNhZGRyO1xuJiM0MztcbiYjNDM7XHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaWNtcCxcbiYjNDM7XHRcdFx0ICAgICBzaXplb2YoKmljbXApICYjNDM7IElDTVBfU0FNUExFX0xFTiwgMCk7XG4mIzQzO1x0aWNtcC1cdTAwM2VjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTtcbiYjNDM7XHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaXAsIHNpemVvZigqaXApLCAwKTtcbiYjNDM7XHRpcC1cdTAwM2VjaGVjayA9IGNzdW1fZm9sZChjc3VtKTtcbiYjNDM7XHRpY21wX3NlbnQgPSB0cnVlO1xuJiM0MztcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVx1MDAzZWlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzEyZWFiOWY0ZWM0YTQxYTFkYzhlOWE0ZTQ4Y2E4MmRlNTc4Y2IxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNTo1MzowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uODUxMzE2N2E4NThhOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM5NjEsMTIgJiM0MzszOTYxLDYgQEAgc3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlpZiAob2Zmc2V0ICZndDsgMCkKIAkJCW1pbl9sZW4gPSBvZmZzZXQ7CiAJfQotCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCW9mZnNldCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAmIzQzOwotCQkJIHNrYi0mZ3Q7Y3N1bV9vZmZzZXQgJiM0Mzsgc2l6ZW9mKF9fc3VtMTYpOwotCQlpZiAob2Zmc2V0ICZndDsgMCkKLQkJCW1pbl9sZW4gPSBvZmZzZXQ7Ci0JfQogCXJldHVybiBtaW5fbGVuOwogfQogCkBAIC0zOTgzLDYgJiM0MzszOTc3LDExIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKQogCiBzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbikKIHsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJmFtcDsmYW1wOwomIzQzOwkgICAgbmV3X2xlbiAmbHQ7IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAmIzQzOyBza2ItJmd0O2NzdW1fb2Zmc2V0ICYjNDM7CiYjNDM7CQkgICAgICBzaXplb2YoX19zdW0xNikpCiYjNDM7CQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiYjNDM7CiAJcmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdhY2RiZDU3NTdhOTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmMKQEAgLTAsMCAmIzQzOzEsMTI1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIENMSUVOVF9OUwkmIzM0O3RjLWNoYW5nZS10YWlsLWNsaS1ucyYjMzQ7CiYjNDM7I2RlZmluZSBTRVJWRVJfTlMJJiMzNDt0Yy1jaGFuZ2UtdGFpbC1zcnYtbnMmIzM0OwomIzQzOyNkZWZpbmUgQ0xJRU5UX0lQCSYjMzQ7MTkyLjE2OC4xLjEmIzM0OwomIzQzOyNkZWZpbmUgU0VSVkVSX0lQCSYjMzQ7MTkyLjE2OC4xLjImIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9QTVRVCTEwMDAKJiM0MzsjZGVmaW5lIFRFU1RfTVNTX01BWAkoVEVTVF9QTVRVIC0gMjAgLSAyMCkKJiM0MzsjZGVmaW5lIFRJTUVPVVRfTVMJMzAwMAomIzQzOyNkZWZpbmUgWEZFUl9CWVRFUwk4MTkyCiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90Y3hfb3B0cywgdGN4X29wdHMpOwomIzQzOwlpbnQgbXNzX2JlZm9yZSA9IDAsIG1zc19hZnRlciA9IDAsIGlmaW5kZXgsIHBvcnQ7CiYjNDM7CWludCBzcnZfZmQgPSAtMSwgc3J2X2Nvbm5fZmQgPSAtMSwgY2xpX2ZkID0gLTE7CiYjNDM7CXN0cnVjdCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUgKnNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiYjNDM7CXN0YXRpYyBjaGFyIGJ1ZltYRkVSX0JZVEVTXTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJc3NpemVfdCBieXRlczsKJiM0MzsJc2l6ZV90IHRvdGFsOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKENMSUVOVF9OUyksICYjMzQ7bWFrZSBjbGllbnQgbnMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoU0VSVkVSX05TKSwgJiMzNDttYWtlIHNlcnZlciBucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2NsaWVudF9uczsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3BlbiBjbGllbnQgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCBsaW5rIGFkZCB2ZXRoMSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgyIG5ldG5zICYjMzQ7IFNFUlZFUl9OUyk7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgLTQgYWRkciBhZGQgJiMzNDsgQ0xJRU5UX0lQICYjMzQ7LzI0IGRldiB2ZXRoMSYjMzQ7KTsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoMSB1cCYjMzQ7KTsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gTlVMTDsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3BlbiBzZXJ2ZXIgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCAtNCBhZGRyIGFkZCAmIzM0OyBTRVJWRVJfSVAgJiMzNDsvMjQgZGV2IHZldGgyJiMzNDspOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgc2V0IHZldGgyIHVwJiMzNDspOwomIzQzOwlzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNFUlZFUl9JUCwgMCwgVElNRU9VVF9NUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgJiMzNDtzdGFydCBzZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CW5zdG9rZW4gPSBOVUxMOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW4gYW5kIGxvYWQgc2tlbGV0b24mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzcnZfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwb3J0LCAwLCAmIzM0O2dldCBzZXJ2ZXIgcG9ydCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3NlcnZlcl9wb3J0ID0gcG9ydDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtwbXR1ID0gVEVTVF9QTVRVOwomIzQzOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhDTElFTlRfTlMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuIGNsaWVudCBucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtsaW5rcy5jaGFuZ2VfdGFpbF9pY21wID0KJiM0MzsJCWJwZl9wcm9ncmFtX19hdHRhY2hfdGN4KHNrZWwtJmd0O3Byb2dzLmNoYW5nZV90YWlsX2ljbXAsIGlmaW5kZXgsCiYjNDM7CQkJCQkmYW1wO3RjeF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2xpbmtzLmNoYW5nZV90YWlsX2ljbXAsICYjMzQ7YXR0YWNoIHRjeCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwljbGlfZmQgPSBjb25uZWN0X3RvX2ZkKHNydl9mZCwgVElNRU9VVF9NUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGNsaV9mZCwgJiMzNDtjb25uZWN0IHRvIHNlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlzcnZfY29ubl9mZCA9IGFjY2VwdChzcnZfZmQsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgJiMzNDthY2NlcHQgY29ubmVjdGlvbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzZXR0aW1lbyhzcnZfY29ubl9mZCwgVElNRU9VVF9NUyksICYjMzQ7c2V0IHNlcnZlciB0aW1lb3V0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihtc3NfYmVmb3JlKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCAmYW1wO21zc19iZWZvcmUsCiYjNDM7CQkJCSAgJmFtcDtvcHRsZW4pLCAmIzM0O2dldCBtc3MgYmVmb3JlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJ5dGVzID0gc2VuZChjbGlfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShieXRlcywgKHNzaXplX3Qpc2l6ZW9mKGJ1ZiksICYjMzQ7c2VuZCBkYXRhJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAodG90YWwgPSAwOyB0b3RhbCAmbHQ7IHNpemVvZihidWYpOyB0b3RhbCAmIzQzOz0gYnl0ZXMpIHsKJiM0MzsJCWJ5dGVzID0gcmVjdihzcnZfY29ubl9mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CQlpZiAoYnl0ZXMgJmx0Oz0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEodG90YWwsIHNpemVvZihidWYpLCAmIzM0O3JlY2VpdmUgZGF0YSYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2RhdGEtJmd0O2NoYW5nZV90YWlsX3JldCwgJiMzNDtjaGFuZ2UgdGFpbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2Jzcy0mZ3Q7YWRqdXN0X3Jvb21fcmV0LCAmIzM0O2FkanVzdCByb29tJiMzNDspOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O2ljbXBfc2VudCwgJiMzNDtpY21wIHNlbnQmIzM0Oyk7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihtc3NfYWZ0ZXIpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhnZXRzb2Nrb3B0KGNsaV9mZCwgSVBQUk9UT19UQ1AsIFRDUF9NQVhTRUcsICZhbXA7bXNzX2FmdGVyLAomIzQzOwkJCQkgICZhbXA7b3B0bGVuKSwgJiMzNDtnZXQgbXNzIGFmdGVyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9MVChtc3NfYWZ0ZXIsIG1zc19iZWZvcmUsICYjMzQ7bXNzIHJlZHVjZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9MRShtc3NfYWZ0ZXIsIFRFU1RfTVNTX01BWCwgJiMzNDttc3MgYmVsb3cgcG10dSYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWNsb3NlKHNydl9jb25uX2ZkKTsKJiM0MzsJY2xvc2UoY2xpX2ZkKTsKJiM0MzsJY2xvc2Uoc3J2X2ZkKTsKJiM0MzsJdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19kZXN0cm95KHNrZWwpOwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJcmVtb3ZlX25ldG5zKFNFUlZFUl9OUyk7CiYjNDM7b3V0X2NsaWVudF9uczoKJiM0MzsJcmVtb3ZlX25ldG5zKENMSUVOVF9OUyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjNGMwNzU0NWJjOWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmMKQEAgLTAsMCAmIzQzOzEsMTI5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRkZWYuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ljbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOCShzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyA4KQomIzQzOyNkZWZpbmUgSUNNUF9IRFJTX0xFTgkoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSkKJiM0MzsKJiM0MztfX2JlMTYgc2VydmVyX3BvcnQgPSAwOwomIzQzO19fdTE2IHBtdHUgPSAwOwomIzQzOwomIzQzO2xvbmcgY2hhbmdlX3RhaWxfcmV0ID0gMTsKJiM0Mztsb25nIGFkanVzdF9yb29tX3JldCA9IDA7CiYjNDM7Ym9vbCBpY21wX3NlbnQgPSBmYWxzZTsKJiM0Mztib29sIGljbXBfZXJyID0gZmFsc2U7CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gY3N1bSkKJiM0Mzt7CiYjNDM7CWNzdW0gPSAoY3N1bSAmYW1wOyAweGZmZmYpICYjNDM7IChjc3VtICZndDsmZ3Q7IDE2KTsKJiM0MzsJY3N1bSA9IChjc3VtICZhbXA7IDB4ZmZmZikgJiM0MzsgKGNzdW0gJmd0OyZndDsgMTYpOwomIzQzOwomIzQzOwlyZXR1cm4gKF9fc3VtMTYpfmNzdW07CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjL2VncmVzcyYjMzQ7KQomIzQzO2ludCBjaGFuZ2VfdGFpbF9pY21wKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CV9fdTggc21hY1tFVEhfQUxFTl0sIGRtYWNbRVRIX0FMRU5dOwomIzQzOwl2b2lkICpkYXRhLCAqZGF0YV9lbmQ7CiYjNDM7CXN0cnVjdCBpY21waGRyICppY21wOwomIzQzOwlzdHJ1Y3QgZXRoaGRyICpldGg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcDsKJiM0MzsJX19iZTMyIHNhZGRyLCBkYWRkcjsKJiM0MzsJc3RydWN0IGlwaGRyICppcDsKJiM0MzsJX193c3VtIGNzdW07CiYjNDM7CiYjNDM7CWlmIChpY21wX3NlbnQgfHwgaWNtcF9lcnIpCiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CiYjNDM7CWRhdGEgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CiYjNDM7CWV0aCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShldGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJaWYgKGV0aC0mZ3Q7aF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwlpcCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTsKJiM0MzsJaWYgKCh2b2lkICopKGlwICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CWlmIChpcC0mZ3Q7aWhsICE9IDUgfHwgaXAtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwl0Y3AgPSAodm9pZCAqKShpcCAmIzQzOyAxKTsKJiM0MzsJaWYgKCh2b2lkICopKHRjcCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwlpZiAodGNwLSZndDtkZXN0ICE9IHNlcnZlcl9wb3J0KQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwlpZiAoYnBmX250b2hzKGlwLSZndDt0b3RfbGVuKSAmbHQ7PSBzaXplb2YoKmlwKSAmIzQzOyB0Y3AtJmd0O2RvZmYgKiA0KQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwlfX2J1aWx0aW5fbWVtY3B5KHNtYWMsIGV0aC0mZ3Q7aF9zb3VyY2UsIEVUSF9BTEVOKTsKJiM0MzsJX19idWlsdGluX21lbWNweShkbWFjLCBldGgtJmd0O2hfZGVzdCwgRVRIX0FMRU4pOwomIzQzOwlzYWRkciA9IGlwLSZndDtzYWRkcjsKJiM0MzsJZGFkZHIgPSBpcC0mZ3Q7ZGFkZHI7CiYjNDM7CiYjNDM7CWNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApOwomIzQzOwlpZiAoY2hhbmdlX3RhaWxfcmV0KSB7CiYjNDM7CQlpY21wX2VyciA9IHRydWU7CiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWRqdXN0X3Jvb21fcmV0ID0gYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIElDTVBfSERSU19MRU4sCiYjNDM7CQkJCQkgICAgICBCUEZfQURKX1JPT01fTUFDLAomIzQzOwkJCQkJICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCk7CiYjNDM7CWlmIChhZGp1c3Rfcm9vbV9yZXQpIHsKJiM0MzsJCWljbXBfZXJyID0gdHJ1ZTsKJiM0MzsJCXJldHVybiBUQ1hfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwlkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CWRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwomIzQzOwlldGggPSBkYXRhOwomIzQzOwlpcCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTsKJiM0MzsJaWNtcCA9ICh2b2lkICopKGlwICYjNDM7IDEpOwomIzQzOwlpZiAoKHZvaWQgKilpY21wICYjNDM7IHNpemVvZigqaWNtcCkgJiM0MzsgSUNNUF9TQU1QTEVfTEVOICZndDsgZGF0YV9lbmQpIHsKJiM0MzsJCWljbXBfZXJyID0gdHJ1ZTsKJiM0MzsJCXJldHVybiBUQ1hfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwlfX2J1aWx0aW5fbWVtY3B5KGV0aC0mZ3Q7aF9kZXN0LCBzbWFjLCBFVEhfQUxFTik7CiYjNDM7CV9fYnVpbHRpbl9tZW1jcHkoZXRoLSZndDtoX3NvdXJjZSwgZG1hYywgRVRIX0FMRU4pOwomIzQzOwomIzQzOwlfX2J1aWx0aW5fbWVtc2V0KGljbXAsIDAsIHNpemVvZigqaWNtcCkpOwomIzQzOwlpY21wLSZndDt0eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7CiYjNDM7CWljbXAtJmd0O2NvZGUgPSBJQ01QX0ZSQUdfTkVFREVEOwomIzQzOwlpY21wLSZndDt1bi5mcmFnLm10dSA9IGJwZl9odG9ucyhwbXR1KTsKJiM0MzsKJiM0MzsJX19idWlsdGluX21lbXNldChpcCwgMCwgc2l6ZW9mKCppcCkpOwomIzQzOwlpcC0mZ3Q7dmVyc2lvbiA9IDQ7CiYjNDM7CWlwLSZndDtpaGwgPSA1OwomIzQzOwlpcC0mZ3Q7dHRsID0gNjQ7CiYjNDM7CWlwLSZndDtwcm90b2NvbCA9IElQUFJPVE9fSUNNUDsKJiM0MzsJaXAtJmd0O3RvdF9sZW4gPSBicGZfaHRvbnMoSUNNUF9IRFJTX0xFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4pOwomIzQzOwlpcC0mZ3Q7c2FkZHIgPSBkYWRkcjsKJiM0MzsJaXAtJmd0O2RhZGRyID0gc2FkZHI7CiYjNDM7CiYjNDM7CWNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpY21wLAomIzQzOwkJCSAgICAgc2l6ZW9mKCppY21wKSAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApOwomIzQzOwlpY21wLSZndDtjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTsKJiM0MzsJY3N1bSA9IGJwZl9jc3VtX2RpZmYoTlVMTCwgMCwgKF9fYmUzMiAqKWlwLCBzaXplb2YoKmlwKSwgMCk7CiYjNDM7CWlwLSZndDtjaGVjayA9IGNzdW1fZm9sZChjc3VtKTsKJiM0MzsJaWNtcF9zZW50ID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIGJwZl9yZWRpcmVjdChza2ItJmd0O2lmaW5kZXgsIEJQRl9GX0lOR1JFU1MpOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTmV0d29yayBGaWx0ZXIgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgdGhleSBhZmZlY3QgdGhlIEJQRiBmaWx0ZXJpbmcgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuCgpGaXJzdCwgaXQgbG9va3MgbGlrZSBhIHNlY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGBfX2JwZl9za2JfbWluX2xlbmAuIFRoZSBvcmlnaW5hbCBjb2RlIHNlZ21lbnQgd2FzIGNoZWNraW5nIGZvciBgQ0hFQ0tTVU1fUEFSVElBTGAgYW5kIGNhbGN1bGF0aW5nIGEgbWluaW11bSBsZW5ndGggYmFzZWQgb24gY2hlY2tzdW0gb2Zmc2V0LiBTZWVtcyBsaWtlIGl0IHdhcyByZWxhdGVkIHRvIHBhcnRpYWxseSBjaGVja3N1bW1lZCBwYWNrZXRzLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGVjayB3YXMgZGVlbWVkIHVubmVjZXNzYXJ5LiBQZXJoYXBzIHRoaXMgbG9naWMgaXMgaGFuZGxlZCBlbHNld2hlcmUgbm93LCBvciBtYXliZSBpdCYjMzk7cyBiZWluZyBzaW1wbGlmaWVkLgoKVGhlbiwgaW4gYGJwZl9za2JfdHJpbV9yY3N1bWAsIHdlIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBjb25kaXRpb25hbCBjaGVjay4gVGhpcyBjb2RlIGFsc28gYXBwZWFycyByZWxhdGVkIHRvIGBDSEVDS1NVTV9QQVJUSUFMYC4gSWYgdGhlIG5ldyBsZW5ndGggb2YgdGhlIFNLQiBpcyBzbWFsbGVyIHRoYW4gc29tZSBjaGVja3N1bS1yZWxhdGVkIG9mZnNldCwgdGhlbiBgc2tiLSZndDtpcF9zdW1tZWRgIGlzIHNldCB0byBgQ0hFQ0tTVU1fTk9ORWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGhhbmRsaW5nIHRoZSBjaGVja3N1bSB1cGRhdGUgYmV0dGVyIHRoYW4gYmVmb3JlIG9yIHBlcmhhcHMgc2V0dGluZyBpdCB0byBub25lLCBvciBwZXJoYXBzIGRvaW5nIHNvbWUgZm9ybSBvZiByZWNvbXB1dGF0aW9uLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGFzIHRoaXMgY291bGQgYWRkIGxhdGVuY3kgb3IgcmVzdWx0IGluIGluY29ycmVjdCBwYWNrZXRzLgoKVG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgaW50ZW50IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCBpbiB0aGUgb3ZlcmFsbCBCUEYgZXhlY3V0aW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuCkkgbXVzdCBhbHNvIGNoZWNrIHRoZSBhZGRlZCBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBJJiMzOTtsbCB3YW50IHRvIHNlZSB3aGF0IHRoZXNlIHRlc3RzIGNvdmVyLiBBcmUgdGhleSB2YWxpZGF0aW5nIHRoZSB0cmltbWluZyBhbmQgY2hlY2tzdW0gaGFuZGxpbmcgaW4gdmFyaW91cyBzY2VuYXJpb3M/IEFyZSB0aGV5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucz8gVGhleSBzaG91bGQgYmUgdGhlIGZpcnN0IHBsYWNlIEkgc3RhcnQuCgpPdmVyYWxsLCBpdCBzZWVtcyB0aGlzIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGhhbmRsaW5nIG9mIGNoZWNrc3VtcyB3aXRoaW4gdGhlIEJQRiBmaWx0ZXJpbmcgcGlwZWxpbmUsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY29udGV4dCBhbmQgdGVzdHMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NTA6XHR9O1xuMzk1MTpcdFxuMzk1MjpcdHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjM5NTM6XHR7XG4zOTU0Olx0XHRpbnQgb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XG4zOTU1Olx0XHR1MzIgbWluX2xlbiA9IDA7XG4zOTU2Olx0XG4zOTU3Olx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk1ODpcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuMzk1OTpcdFx0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xuMzk2MDpcdFx0XHRvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuMzk2MTpcdFx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk2MjpcdFx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4zOTYzOlx0XHR9XG4zOTY0Olx0XHRyZXR1cm4gbWluX2xlbjtcbjM5NjU6XHR9XG4zOTY2Olx0XG4zOTY3Olx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTY4Olx0e1xuMzk2OTpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuMzk3MDpcdFx0aW50IHJldDtcbjM5NzE6XHRcbjM5NzI6XHRcdHJldCA9IF9fc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM5NzM6XHRcdGlmICghcmV0KVxuMzk3NDpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xuMzk3NTpcdFx0cmV0dXJuIHJldDtcbjM5NzY6XHR9XG4zOTc3Olx0XG4zOTc4Olx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTc5Olx0e1xuMzk4MDpcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbjM5ODE6XHRcdCAgICBuZXdfbGVuIFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICYjNDM7XG4zOTgyOlx0XHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbjM5ODM6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4zOTg0Olx0XG4zOTg1Olx0XHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xuMzk4NjpcdH1cbjM5ODc6XHRcbjM5ODg6XHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4zOTg5Olx0XHRcdFx0XHRcdHU2NCBmbGFncylcbjM5OTA6XHR7XG4zOTkxOlx0XHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcbjM5OTI6XHRcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcbjM5OTM6XHRcdGludCByZXQ7XG4zOTk0Olx0XG4zOTk1Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFx1MDAzYyBtaW5fbGVuKSlcbjM5OTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk3Olx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4zOTk4Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zOTk5Olx0XG40MDAwOlx0XHQvKiBUaGUgYmFzaWMgaWRlYSBvZiB0aGlzIGhlbHBlciBpcyB0aGF0IGl0JiMzOTtzIHBlcmZvcm1pbmcgdGhlXG40MDAxOlx0XHQgKiBuZWVkZWQgd29yayB0byBlaXRoZXIgZ3JvdyBvciB0cmltIGFuIHNrYiwgYW5kIGVCUEYgcHJvZ3JhbVxuNDAwMjpcdFx0ICogcmV3cml0ZXMgdGhlIHJlc3QgdmlhIGhlbHBlcnMgbGlrZSBicGZfc2tiX3N0b3JlX2J5dGVzKCksXG40MDAzOlx0XHQgKiBicGZfbFhfY3N1bV9yZXBsYWNlKCkgYW5kIG90aGVycyByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3XG40MDA0Olx0XHQgKiBidWZmZXIgaGVyZS4gVGhpcyBvbmUgaXMgYSBzbG93IHBhdGggaGVscGVyIGFuZCBpbnRlbmRlZFxuNDAwNTpcdFx0ICogZm9yIHJlcGxpZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzLlxuNDAwNjpcdFx0ICpcbjQwMDc6XHRcdCAqIExpa2UgaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8oKSwgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmF0aGVyXG40MDA4Olx0XHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXG40MDA5Olx0XHQgKiB0byBzZXBhcmF0ZSBjb25jZXJucyBhcyBpbiBicGZfc2tiX3N0b3JlX2J5dGVzKCkgc2hvdWxkIG9ubHlcbjQwMTA6XHRcdCAqIGJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgYnVmZmVycy5cbjQwMTE6XHRcdCAqXG40MDEyOlx0XHQgKiBJdCYjMzk7cyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXG40MDEzOlx0XHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UmIzM5O3JlIGltcGxpY2l0bHkgbGluZWFyaXppbmcsXG40MDE0Olx0XHQgKiB1bmNsb25pbmcgYW5kIGRyb3Agb2ZmbG9hZHMgZnJvbSB0aGUgc2tiIGJ5IHRoaXMuXG40MDE1Olx0XHQgKi9cbjQwMTY6XHRcdHJldCA9IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLVx1MDAzZWxlbik7XG40MDE3Olx0XHRpZiAoIXJldCkge1xuNDAxODpcdFx0XHRpZiAobmV3X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjQwMTk6XHRcdFx0XHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBUYWlsIENoYW5nZXMqKgoKQWxyaWdodCwgSSYjMzk7bSBhdCB0aGUgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBicGZfc2tiX2NoYW5nZV90YWlsYCBkZWZpbml0aW9ucy4gSSBjYW4mIzM5O3QganVzdCBvcGVyYXRlIGluIGEgdmFjdXVtIGhlcmUuIFRvIGZ1bGx5IGdyYXNwIHRoZWlyIGJlaGF2aW9yIGFuZCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYWR2YW5jZWQgQlBGIHByb2dyYW1zLCBJIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCB3aGF0IHRoZXkgYXJlIGFjdHVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBTS0IgbWFuaXB1bGF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluISBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIGFuZCBob3cgdGhleSByZWxhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDAxODpcdFx0XHRpZiAobmV3X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjQwMTk6XHRcdFx0XHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjQwMjA6XHRcdFx0ZWxzZSBpZiAobmV3X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbjQwMjE6XHRcdFx0XHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjQwMjI6XHRcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHNrYl9pc19nc28oc2tiKSlcbjQwMjM6XHRcdFx0XHRza2JfZ3NvX3Jlc2V0KHNrYik7XG40MDI0Olx0XHR9XG40MDI1Olx0XHRyZXR1cm4gcmV0O1xuNDAyNjpcdH1cbjQwMjc6XHRcbjQwMjg6XHRCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuNDAyOTpcdFx0ICAgdTY0LCBmbGFncylcbjQwMzA6XHR7XG40MDMxOlx0XHRpbnQgcmV0ID0gX19icGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbmV3X2xlbiwgZmxhZ3MpO1xuNDAzMjpcdFxuNDAzMzpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuNDAzNDpcdFx0cmV0dXJuIHJldDtcbjQwMzU6XHR9XG40MDM2Olx0XG40MDM3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xuNDAzODpcdFx0LmZ1bmNcdFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxuNDAzOTpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuNDA0MDpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuNDA0MTpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbjQwNDI6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuNDA0MzpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG40MDQ0Olx0fTtcbjQwNDU6XHRcbjQwNDY6XHRCUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXG40MDQ3Olx0XHQgICB1NjQsIGZsYWdzKVxuNDA0ODpcdHtcbjQwNDk6XHRcdHJldHVybiBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XG40MDUwOlx0fVxuNDA1MTpcdFxuNDA1MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xuNDA1MzpcdFx0LmZ1bmNcdFx0PSBza19za2JfY2hhbmdlX3RhaWwsXG40MDU0Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG40MDU1Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG40MDU2Olx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNDA1NzpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGJwZl9za2JfY2hhbmdlX3RhaWwgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBicGZfc2tiX2NoYW5nZV90YWlsYCBpcyBhIEJQRiBoZWxwZXIuIEkga25vdyBpdCYjMzk7cyBjYWxsYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyB0aGF0IGF0dGFjaCB0byB0aGluZ3MgbGlrZSBgdGNgIG9yIGBza19za2JgLiBUaGlzIGltbWVkaWF0ZWx5IHB1dHMgaXQgaW4gbXkgJiMzNDtwb3RlbnRpYWxseSBpbnRlcmVzdGluZyYjMzQ7IGNhdGVnb3J5IGJlY2F1c2UgQlBGIHByb2dyYW1zIGFyZSBhIGtub3duIGF0dGFjayBzdXJmYWNlIGFuZCB0aGF0IGFyZWEgaGFzIHNlZW4gaXRzIGZhaXIgc2hhcmUgb2YgdnVsbmVyYWJpbGl0aWVzLiBJdCBtYW5pcHVsYXRlcyBgX19icGZfc2tiX21pbl9sZW5gIGFuZCBgYnBmX3NrYl90cmltX3Jjc3VtYC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggbWFrZXMgaXQgcmVhY2hhYmxlIGNvZGUgYW5kLCBpbXBvcnRhbnRseSwgY29kZSB0aGF0JiMzOTtzIGFscmVhZHkgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBrZXJuZWwgYW5kIHN5emthbGxlciBmdXp6aW5nLgoKTm93LCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcsJiMzNDsgbGV0JiMzOTtzIGV2YWx1YXRlOgoKKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogSXQmIzM5O3MgYWJzb2x1dGVseSBjb3JlLiBXZSYjMzk7cmUgdGFsa2luZyBCUEYgaGVscGVyIGZ1bmN0aW9ucywgY29yZSBuZXR3b3JraW5nLCBhbmQgU0tCIG1hbmlwdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBhbmQgYGJwZl9za2JfdHJpbV9yY3N1bWAuCiogICAqKlJlYWNoYWJsZToqKiBDbGVhcmx5IHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGB0Y2AsIHNvY2tldHMsIGV0Yy4gVGhhdCYjMzk7cyBhIGh1Z2UgcG9zaXRpdmUuCiogICAqKlNlbWFudGljIENoYW5nZXM6KiogVGhpcyBtb2RpZmllcyBob3cgU0tCIGNoZWNrc3VtbWluZyAoYHNrYi0mZ3Q7aXBfc3VtbWVkYCkgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBoYXMgdG8gZG8gd2l0aCB0cmltbWluZyBhbiBTS0Igd2l0aCBgQ0hFQ0tTVU1fUEFSVElBTGAgYmVsb3cgdGhlIGNoZWNrc3VtIG9mZnNldCwgYW5kIHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIHJlc3RyaWN0aW9uIHRoYXQgcHJldmlvdXNseSBwcmV2ZW50ZWQgdHJpbW1pbmcgcGFja2V0cyB3aXRoIGBDSEVDS1NVTV9QQVJUSUFMYCBwYXN0IHRoZSBjaGVja3N1bSBvZmZzZXQuCiogICAqKkltcGFjdDoqKiBUaGlzIGlzIHNpZ25pZmljYW50ISBXZSYjMzk7cmUgY2hhbmdpbmcgcGFja2V0IG1hbmlwdWxhdGlvbiBzZW1hbnRpY3MgYW5kIFNLQiBzdGF0ZS4gVGhlIGZhY3QgdGhhdCBpdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCBjaGVja3N1bW1pbmcgYW5kIHN1YnNlcXVlbnQgbmV0d29yayBzdGFjayBwcm9jZXNzaW5nIGlzIGEgaHVnZSByZWQgZmxhZyB0aGF0IGluZGljYXRlcyBpdOKAmXMgV29ydGhGdXp6aW5nLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSB0cnVlLCB0aGlzIGlzIGltcG9ydGFudCBhbmQgbmVlZHMgYXR0ZW50aW9uLgoKTmV4dCBzdGVwOiBMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPwoqICAgYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgIGlzIHN0YXRpYyBpbmxpbmUsIHdoaWNoIG1lYW5zIGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhhdCBpcyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4KKiAgIGBicGZfc2tiX3RyaW1fcmNzdW1gLiBXYWl0IGEgbWludXRlLCB0aGF0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluc2lkZSBgZmlsdGVyLmNgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiBgYnBmX3NrYl90cmltX3Jjc3VtYCBpcyBzdGF0aWMgYW5kIHdoZXJlIGVsc2UgaXQgbWlnaHQgYmUgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZ3JlcHBlciB0byBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZCBhbmQgYnkgd2hhdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgZ29vZCBmdXp6aW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrYl90cmltX3Jjc3VtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTM5Njc9c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzk3Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5Nzg6c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG5uZXQvY29yZS9maWx0ZXIuYy0zOTc5LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zOTg4PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MDIwLVx0XHRlbHNlIGlmIChuZXdfbGVuIFx1MDAzYyBza2ItXHUwMDNlbGVuKVxubmV0L2NvcmUvZmlsdGVyLmM6NDAyMTpcdFx0XHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjItXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBUYWlsLUNoYW5naW5nIE1lY2hhbmlzbXMgaW4gQlBGKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIGRlZmluZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYEJQRl9DQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmdW5jdGlvbiBzeW1ib2wsIG9yIGl0cyBwb3RlbnRpYWwgYWxpYXNlcyBsaWtlIGBfX19fYnBmX3NrYl9jaGFuZ2VfdGFpbGAgb3IganVzdCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCAuLi4pYCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFuYWx5c2lzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgb3RoZXIgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGFsbCByZWxhdGVkIHN5bWJvbHMgYW5kIHdoYXQgdGhleSBkby4gSSBrbm93IHRoYXQgbG9va2luZyBhdCB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduIGFuZCB1c2UgY2FzZSBmb3IgY2hhbmdpbmcgdGhlIHRhaWwgb2YgYW4gU0tCIGZyb20gd2l0aGluIGEgQlBGIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNzYzLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6Mjc2NDogKiBsb25nIGJwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbiwgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjUtICogXHREZXNjcmlwdGlvblxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTM5Nzg9c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzk4Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5ODg6c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtMzk4OS1cdFx0XHRcdFx0dTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjctXG5uZXQvY29yZS9maWx0ZXIuYzo0MDI4OkJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXG5uZXQvY29yZS9maWx0ZXIuYy00MDI5LVx0ICAgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzAte1xubmV0L2NvcmUvZmlsdGVyLmM6NDAzMTpcdGludCByZXQgPSBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYy00MDMyLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzYtXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjQwMzg6XHQuZnVuY1x0XHQ9IGJwZl9za2JfY2hhbmdlX3RhaWwsXG5uZXQvY29yZS9maWx0ZXIuYy00MDM5LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQwNDY9QlBGX0NBTExfMyhza19za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDgte1xubmV0L2NvcmUvZmlsdGVyLmM6NDA0OTpcdHJldHVybiBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYy00MDUwLX1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00MDYxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaGVhZF9yb29tLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwNzgtXHRcdCAqIHNrYi1cdTAwM2Vwcm90b2NvbCBuZXR3b3JrIGhlYWRlciwgZXRjLCBzdGF5IGFzIGlzLlxubmV0L2NvcmUvZmlsdGVyLmM6NDA3OTpcdFx0ICogQ29tcGFyZWQgdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbCgpLCB3ZSYjMzk7cmUgbW9yZVxubmV0L2NvcmUvZmlsdGVyLmMtNDA4MC1cdFx0ICogZmxleGlibGUgZHVlIHRvIG5vdCBuZWVkaW5nIHRvIGxpbmVhcml6ZSBvclxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjE9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODY1OC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwMDU9bHd0X3htaXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05MDIwLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XG5uZXQvY29yZS9maWx0ZXIuYzo5MDIxOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMjItXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjMtICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyNzY0OiAqIGxvbmcgYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuLCB1NjQgZmxhZ3MpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjc2NS0gKiBcdERlc2NyaXB0aW9uXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jPTIxPWludCBwcm9nX3NrYl92ZXJkaWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzItXHRpZiAoZGF0YVswXSA9PSAmIzM5O1QmIzM5OykgeyAvKiBUcmltIHRoZSBwYWNrZXQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYzozMzpcdFx0Y2hhbmdlX3RhaWxfcmV0ID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIHNrYi1cdTAwM2VsZW4gLSAxLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy0zNC1cdFx0cmV0dXJuIFNLX1BBU1M7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzUtXHR9IGVsc2UgaWYgKGRhdGFbMF0gPT0gJiMzOTtHJiMzOTspIHsgLyogR3JvdyB0aGUgcGFja2V0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmM6MzY6XHRcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXHUwMDNlbGVuICYjNDM7IDEsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jLTM3LVx0XHRyZXR1cm4gU0tfUEFTUztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy0zOC1cdH0gZWxzZSBpZiAoZGF0YVswXSA9PSAmIzM5O0UmIzM5OykgeyAvKiBFcnJvciAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jOjM5Olx0XHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgQlBGX1NLQl9NQVhfTEVOLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy00MC1cdFx0cmV0dXJuIFNLX1BBU1M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmM9NTQ9aW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMtNTUte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmM6NTY6XHRicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgc2tiLVx1MDAzZWxlbiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYy01Ny1cdHJldHVybiBza2ItXHUwMDNlbGVuO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM9NTk9aW50IGNoYW5nZV90YWlsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTg2LVx0aWYgKHBheWxvYWRbMF0gPT0gJiMzOTtUJiMzOTspIHsgLyogVHJpbSB0aGUgcGFja2V0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjg3Olx0XHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbGVuIC0gMSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTg4LVx0XHRpZiAoIWNoYW5nZV90YWlsX3JldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6ODk6XHRcdFx0YnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIGxlbiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTkwLVx0XHRyZXR1cm4gVENYX1BBU1M7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTkxLVx0fSBlbHNlIGlmIChwYXlsb2FkWzBdID09ICYjMzk7RyYjMzk7KSB7IC8qIEdyb3cgdGhlIHBhY2tldCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo5MjpcdFx0Y2hhbmdlX3RhaWxfcmV0ID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIGxlbiAmIzQzOyAxLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTMtXHRcdGlmICghY2hhbmdlX3RhaWxfcmV0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo5NDpcdFx0XHRicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbGVuLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTUtXHRcdHJldHVybiBUQ1hfUEFTUztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTYtXHR9IGVsc2UgaWYgKHBheWxvYWRbMF0gPT0gJiMzOTtFJiMzOTspIHsgLyogRXJyb3IgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6OTc6XHRcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBCUEZfU0tCX01BWF9MRU4sIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05OC1cdFx0cmV0dXJuIFRDWF9QQVNTO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05OS1cdH0gZWxzZSBpZiAocGF5bG9hZFswXSA9PSAmIzM5O1omIzM5OykgeyAvKiBaZXJvICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjEwMDpcdFx0Y2hhbmdlX3RhaWxfcmV0ID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIDAsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy0xMDEtXHRcdHJldHVybiBUQ1hfUEFTUztcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmM9MzY9aW50IGNoYW5nZV90YWlsX2ljbXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYy03Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYzo3ODpcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jLTc5LVx0aWYgKGNoYW5nZV90YWlsX3JldCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmM9MTI2PXN0YXRpYyBpbnQgdGNwX3JlbG9hZF9oZWFkZXJzKHN0cnVjdCB0Y3Bfc3luY29va2llICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzYtXHQvKiBOZWVkZWQgdG8gY2FsY3VsYXRlIGNzdW0gYW5kIHBhcnNlIFRDUCBvcHRpb25zLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYzoxMzc6XHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgtXHUwMDNlc2tiLCBkYXRhX2xlbiAmIzQzOyA2MCAtIGN0eC1cdTAwM2V0Y3AtXHUwMDNlZG9mZiAqIDQsIDApKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzgtXHRcdGdvdG8gZXJyO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmM9NDAxPXN0YXRpYyBpbnQgdGNwX2hhbmRsZV9zeW4oc3RydWN0IHRjcF9zeW5jb29raWUgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmM6NDU2Olx0aWYgKGJwZl9za2JfY2hhbmdlX3RhaWwoY3R4LVx1MDAzZXNrYiwgKGxvbmcpY3R4LVx1MDAzZXB0cjMyIC0gKGxvbmcpY3R4LVx1MDAzZWV0aCwgMCkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1Ny1cdFx0Z290byBlcnI7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYz02MzU9aW50IGhlbHBlcl9za2JfY2hhbmdlX2hlYWRfdGFpbChzdHJ1Y3QgX19za19idWZmICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy02NTUtXHQvKiBSZXNlcnZlIDRrIGV4dHJhIGJ5dGVzIGluIHRoZSBiYWNrIHRvIHRyaWdnZXIgaGVhZCByZWFsbG9jYXRpb24gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NjU2Olx0ZXJyID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgsIGN0eC1cdTAwM2VsZW4gJiM0MzsgNDA5NiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jLTY1Ny1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmM9NTc5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHN5bmNvb2tpZV9oYW5kbGVfc3luKHN0cnVjdCBoZWFkZXJfcG9pbnRlcnMgKmhkcixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03MjEtXHR9IGVsc2Uge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmM6NzIyOlx0XHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgsIG5ld19wa3Rfc2l6ZSwgMCkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03MjMtXHRcdFx0cmV0dXJuIFhEUF9BQk9SVEVEO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jPTc1MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzeW5jb29raWVfcGFydDEodm9pZCAqY3R4LCB2b2lkICpkYXRhLCB2b2lkICpkYXRhX2VuZCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03NzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYzo3ODA6XHRcdGlmIChicGZfc2tiX2NoYW5nZV90YWlsKGN0eCwgb2xkX2xlbiAmIzQzOyBUQ1BfTUFYTEVOIC0gaGRyLVx1MDAzZXRjcF9sZW4sIDApKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmMtNzgxLVx0XHRcdHJldHVybiBYRFBfQUJPUlRFRDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAqKgoKT2theSwgc28gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzIGZvciBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBza19za2JfY2hhbmdlX3RhaWxgIGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hhdCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgYXJlICpyZXF1aXJlZCogdG8gZW5hYmxlIG9yIGJ1aWxkIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gSSYjMzk7bSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBmb3IgdGhpcyBpbmZvIGFyZSB0aGUgbWFrZWZpbGVzIG9yIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgbmV0d29ya2luZyBjb3JlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgZmlyc3QsIHRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIHJlbGlhYmxlIHBsYWNlIHRvIGdldCBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMuIElmIEkgZG9uJiMzOTt0IGZpbmQgdGhlIGFuc3dlcnMgaW1tZWRpYXRlbHkgdGhlcmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZXMsIHN1Y2ggYXMgYG5ldC9LY29uZmlnYCwgYGluaXQvS2NvbmZpZ2AsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNpbmNlIEJQRiBpcywgYWZ0ZXIgYWxsLCBmdW5kYW1lbnRhbGx5IGludm9sdmVkLiBJdCYjMzk7cyBhIHN5c3RlbWF0aWMgYXBwcm9hY2ggLSBsb29rIGZvciB0aGUgb2J2aW91cyBhbmQgdGhlbiBkcmlsbCBkb3duIGFzIG5lZWRlZC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy04Ny0gKlxubmV0L2NvcmUvcGt0Z2VuLmM6ODg6ICogUmVtb3ZlIGlmIGZpeCBmcm9tIGFkZGVkIEhhcmFsZCBXZWx0ZSBcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcdTAwM2UgMDQwNDE5XG5uZXQvY29yZS9wa3RnZW4uYy04OS0gKiBpYTY0IGNvbXBpbGF0aW9uIGZpeCBmcm9tICBBcm9uIEdyaWZmaXMgXHUwMDNjYXJvbkBocC5jb21cdTAwM2UgMDQwNjA0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZSBuZXR3b3JrIGZpbHRlcmluZyBvYmplY3QsIHNwZWNpZmljYWxseSBgbmV0L2NvcmUvZmlsdGVyLm9gLiBUaGUgTWFrZWZpbGUgaW5kaWNhdGVzIHRoYXQgaXQmIzM5O3MgaW5jbHVkZWQgdXNpbmcgYG9iai15YCB3aXRoaW4gYG5ldC9jb3JlL01ha2VmaWxlYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBUaGF0IHBhcmVudCBkaXJlY3RvcnkgaXMgY29uZGl0aW9uZWQgb24gYENPTkZJR19ORVRgLiBHb3QgaXQuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgQlBGIHN5c2NhbGwgc3VwcG9ydCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXMgaXQgY29uZGl0aW9uYWwgYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgZGlyZWN0bHksIG9yIGRvZXMgaXQgYWxzbyBkZXBlbmQgb24gdGhlIG92ZXJhcmNoaW5nIGBDT05GSUdfTkVUYCBjb25maWd1cmF0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyB0byBrbm93IGZvciBzdXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBpdCB3aWxsIGJlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4KCkZ1cnRoZXJtb3JlLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBzb3VyY2UgY29kZSBpdHNlbGYuIEkgd2FudCB0byBjaGVjayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzLCBsaWtlIGAjaWZkZWYgQ09ORklHXy4uLmAsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmdW5jdGlvbiwgYW5kIGFueSBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IHRoZSBCUEYgc3VwcG9ydCBvciBldmVuIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2sgbWlnaHQgY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgdGhpcyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NDk1PXN0YXRpYyBib29sIGNvbnZlcnRfYnBmX2xkX2FicyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKippbnNucClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5Ni17XG5uZXQvY29yZS9maWx0ZXIuYzo0OTc6XHRjb25zdCBib29sIHVuYWxpZ25lZF9vayA9IElTX0JVSUxUSU4oQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDk4LVx0aW50IHNpemUgPSBicGZfc2l6ZV90b19ieXRlcyhCUEZfU0laRShmcC1cdTAwM2Vjb2RlKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTY4MT1zdGF0aWMgaW5saW5lIGludCBfX2JwZl90cnlfbWFrZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE2ODMte1xubmV0L2NvcmUvZmlsdGVyLmM6MTY4NDojaWZkZWYgQ09ORklHX0RFQlVHX05FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTY4NS1cdC8qIEF2b2lkIGEgc3BsYXQgaW4gcHNrYl9tYXlfcHVsbF9yZWFzb24oKSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIyMDc9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTUtXG5uZXQvY29yZS9maWx0ZXIuYzoyMjE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNy1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIzMTM9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzMTgtfVxubmV0L2NvcmUvZmlsdGVyLmM6MjMxOTojZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTIzMjAtXG5uZXQvY29yZS9maWx0ZXIuYzoyMzIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI0MjQ9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI0MjktfVxubmV0L2NvcmUvZmlsdGVyLmM6MjQzMDojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTI0MzEtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9tc2dfcG9wX2RhdGFfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzE5Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjMxOTM6I2lmZGVmIENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSURcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTQtQlBGX0NBTExfMChicGZfZ2V0X2Nncm91cF9jbGFzc2lkX2N1cnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTE3OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjUxODA6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy01MTgxLXN0YXRpYyBpbmxpbmUgdTY0IF9fYnBmX3NrX2Nncm91cF9pZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTc3Nj1zdGF0aWMgaW50IF9fYnBmX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODMtXHRcdHJldHVybiBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg0Olx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9JUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODUtXHRcdHJldHVybiBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODY6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy01Nzg3LVx0XHRyZXR1cm4gc29sX2lwdjZfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODg6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODktXHRcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTgwNz1zdGF0aWMgaW50IF9fYnBmX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTgtXHRcdGVyciA9IHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTgxOTpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMC1cdFx0ZXJyID0gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIxOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9JUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MjItXHRcdGVyciA9IHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIzOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNTgyNC1cdFx0ZXJyID0gc29sX2lwdjZfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYxMzU9QlBGX0NBTExfNShicGZfc29ja19vcHNfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYxNDAtXG5uZXQvY29yZS9maWx0ZXIuYzo2MTQxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmMtNjE0Mi1cdCAgICBvcHRuYW1lIFx1MDAzZT0gVENQX0JQRl9TWU4gXHUwMDI2XHUwMDI2IG9wdG5hbWUgXHUwMDNjPSBUQ1BfQlBGX1NZTl9NQUMpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MTc3PUJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYxODUtXG5uZXQvY29yZS9maWx0ZXIuYzo2MTg2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCAhc2tfZnVsbHNvY2soc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtNjE4Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMj1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNC17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjA1OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNi1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjE4LVx0XHRyZXR1cm4gX19pbmV0X2JpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHIsIGFkZHJfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC1cdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjI3LVx0XHRcdFx0ICAgIGFkZHJfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjI4OiNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xubmV0L2NvcmUvZmlsdGVyLmMtNjIyOS1cdH1cbm5ldC9jb3JlL2ZpbHRlci5jOjYyMzA6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy02MjMxLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYmluZF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjQzLVxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NDojaWZkZWYgQ09ORklHX1hGUk1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDUtXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ2OiNpZiAoSVNfQlVJTFRJTihDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHx8IFxcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ3OiAgICAoSVNfTU9EVUxFKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpKVxubmV0L2NvcmUvZmlsdGVyLmMtNjI0OC1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Mjk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NjI5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDAtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjMwNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5uZXQvY29yZS9maWx0ZXIuYy02MzA4LVx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MzI5PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYzNDgtXG5uZXQvY29yZS9maWx0ZXIuYzo2MzQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjM1MC1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDg3LVx0XHRcdFx0XHRcdCAgKF9fZm9yY2UgdTMyKXBhcmFtcy1cdTAwM2VpcHY0X2RzdCk7XG5uZXQvY29yZS9maWx0ZXIuYzo2NDg4Olx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikpXG5uZXQvY29yZS9maWx0ZXIuYy02NDg5LVx0XHRuZWlnaCA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYoZGV2LCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDAtXG5uZXQvY29yZS9maWx0ZXIuYzo2NTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjUwMi1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NjcxPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODAtXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY2ODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02NjgyLVx0Y2FzZSBBRl9JTkVUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODUtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo2Njg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjY4Ny1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjcwNT1CUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjQtXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY3MjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02NzI2LVx0Y2FzZSBBRl9JTkVUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjktI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo2NzMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjczMS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Njg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXG5uZXQvY29yZS9maWx0ZXIuYzo2ODc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjg3OS1zdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTEwLX1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTE6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG5uZXQvY29yZS9maWx0ZXIuYy02OTEyLVxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkxNC1zdGF0aWMgaW50IGJwZl9wdXNoX2lwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkciwgdTMyIGxlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTIxPUJQRl9DQUxMXzQoYnBmX2x3dF9pbl9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSwgdm9pZCAqLCBoZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cdHN3aXRjaCAodHlwZSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNjpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTI5LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjkzMDojaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMS1cdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTM5PUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDItXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDQtXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Njk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzEtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE2My19O1xubmV0L2NvcmUvZmlsdGVyLmM6NzE2NDojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2Ny1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NS1cdFx0XHRcdFx0ICAgICAgIGRpZiwgc2RpZiwgTlVMTCk7XG5uZXQvY29yZS9maWx0ZXIuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4Ny1cdH0gZWxzZSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzgzOT1CUEZfQ0FMTF81KGJwZl90Y3BfY2hlY2tfc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03ODQxLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjc4NDI6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtNzg0My1cdGludCByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzg3NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjc4NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy03ODc2LVx0Y2FzZSA2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc4ODQtXHRcdGJyZWFrO1xubmV0L2NvcmUvZmlsdGVyLmM6Nzg4NTojZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTc4ODYtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzkxMj1CUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzkxNC17XG5uZXQvY29yZS9maWx0ZXIuYzo3OTE1OiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcbm5ldC9jb3JlL2ZpbHRlci5jLTc5MTYtXHR1MzIgY29va2llO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NDQtXG5uZXQvY29yZS9maWx0ZXIuYzo3OTQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzk0Ni1cdGNhc2UgNjpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03OTU0LVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jOjc5NTU6I2VuZGlmIC8qIENPTkZJR19JUFY2ICovXG5uZXQvY29yZS9maWx0ZXIuYy03OTU2LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NjUtXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9maWx0ZXIuYzo3OTY2OiNlbmRpZiAvKiBDT05GSUdfU1lOX0NPT0tJRVMgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NjctfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90c3RhbXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODI4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjgyODE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtODI4Mi1CUEZfQ0FMTF8zKGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NCwgc3RydWN0IGlwaGRyICosIGlwaCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04MzA4PUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODMxMC17XG5uZXQvY29yZS9maWx0ZXIuYzo4MzExOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtODMxMi1cdGNvbnN0IHUxNiBtc3NfY2xhbXAgPSBJUFY2X01JTl9NVFUgLSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgzNjA9QlBGX0NBTExfMihicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2Niwgc3RydWN0IGlwdjZoZHIgKiwgaXBoLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjIte1xubmV0L2NvcmUvZmlsdGVyLmM6ODM2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjQtXHRpZiAoX19jb29raWVfdjZfY2hlY2soaXBoLCB0aCkgXHUwMDNlIDApXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODM3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTgzODItfTtcbm5ldC9jb3JlL2ZpbHRlci5jOjgzODM6I2VuZGlmIC8qIENPTkZJR19TWU5fQ09PS0lFUyAqL1xubmV0L2NvcmUvZmlsdGVyLmMtODM4NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjgzODU6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy04Mzg2LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjM9c29ja19hZGRyX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODQ4NS1cdFx0cmV0dXJuIFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg0ODY6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NDg3LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg0OTQtXHRcdHJldHVybiBcdTAwMjZicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODQ5NTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTg0OTYtXHRjYXNlIEJQRl9GVU5DX3NrX3N0b3JhZ2VfZ2V0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg1NzI9Y2dfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODU4OC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODU4OTojaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTAtXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfaWQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODU5OC0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg1OTk6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NjAwLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjE9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDMtXHRcdHJldHVybiBcdTAwMjZicGZfc2tfc3RvcmFnZV9kZWxldGVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NzA0OiNpZmRlZiBDT05GSUdfWEZSTVxubmV0L2NvcmUvZmlsdGVyLmMtODcwNS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2dldF94ZnJtX3N0YXRlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDctI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NzA4OiNpZmRlZiBDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEXG5uZXQvY29yZS9maWx0ZXIuYy04NzA5LVx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2NsYXNzaWQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODcxMS0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTI6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy04NzEzLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2lkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTctI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NzE4OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODcxOS1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzQwLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9zZXRfdHN0YW1wX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODc0MTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy04NzQyLVx0Y2FzZSBCUEZfRlVOQ190Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzU4PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODYtXHRcdHJldHVybiBcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODc6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg4LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3OTktXHRcdHJldHVybiBcdTAwMjZicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4ODAwOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MDEtXHRjYXNlIEJQRl9GVU5DX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4MTQtXG5uZXQvY29yZS9maWx0ZXIuYzo4ODE1OiNpZiBJU19NT0RVTEUoQ09ORklHX05GX0NPTk5UUkFDSykgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpXG5uZXQvY29yZS9maWx0ZXIuYy04ODE2LVx0LyogVGhlIG5mX2Nvbm5fX19pbml0IHR5cGUgaXMgdXNlZCBpbiB0aGUgTkZfQ09OTlRSQUNLIGtmdW5jcy4gVGhlXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODgzMz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjEtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X25ldG5zX2Nvb2tpZV9zb2NrX29wc19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04ODYzLVx0Y2FzZSBCUEZfRlVOQ19sb2FkX2hkcl9vcHQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODg3MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl90Y3Bfc29ja19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NzE6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy04ODcyLVx0ZGVmYXVsdDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04OTE1PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg5MzktXHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NDA6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04OTQxLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDQ9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDYtXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ4LVx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05OTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF9yZWFkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05OTcwLVxubmV0L2NvcmUvZmlsdGVyLmM6OTk3MTojaWZkZWYgQ09ORklHX05FVF9YR1JFU1Ncbm5ldC9jb3JlL2ZpbHRlci5jLTk5NzItXHQvKiBJZiB0aGUgdHN0YW1wX3R5cGUgaXMgcmVhZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05OTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF93cml0ZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAwMDUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMDAwNjojaWZkZWYgQ09ORklHX05FVF9YR1JFU1Ncbm5ldC9jb3JlL2ZpbHRlci5jLTEwMDA3LVx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTAwMzc9c3RhdGljIHUzMiBicGZfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMTAtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIHRjX2luZGV4KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMi1cdFx0aWYgKHR5cGUgPT0gQlBGX1dSSVRFKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjI5LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBuYXBpX2lkKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjMwOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMzEtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjc2LVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCByZW1vdGVfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjc3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzgtXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjk2LVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBsb2NhbF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyOTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI5OC1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTA0MDM9dTMyIGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNDkyLVx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9zb2NrLCBzcmNfaXA2WzBdLCBzcmNfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNDkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTA0OTQtXHRcdG9mZiA9IHNpLVx1MDAzZW9mZjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMC1cdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc29jaywgZHN0X2lwNlswXSwgZHN0X2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDUxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTEyLVx0XHRvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTYtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29jaywgcnhfcXVldWVfbWFwcGluZyk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDU1NzojaWZkZWYgQ09ORklHX1NPQ0tfUlhfUVVFVUVfTUFQUElOR1xubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEwODE1PXN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjAtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTEwMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTAyMi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNDEtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTA0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDQzLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTM1MD1zdGF0aWMgdTMyIHNrX21zZ19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1NS1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1Ny1cdGludCBvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTAtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQxMi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzEtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTQzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDMzLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY1NT1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE2OTctXG5uZXQvY29yZS9maWx0ZXIuYzoxMTY5ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk5LXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjA3Nj1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjExNS1cdFx0XHRcdHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOiB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjExNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTE3LVx0XHRpbnQgb2ZmID0gc2ktXHUwMDNlb2ZmO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMxLVx0XHRcdFx0bG9jYWxfaXA2WzBdLCBsb2NhbF9pcDZbM10pOiB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjEzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMzLVx0XHRpbnQgb2ZmID0gc2ktXHUwMDNlb2ZmO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTc3PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE4MzojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjM0PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMzYtXHQvKiBCVEYgdHlwZXMgZm9yIHRjcF90aW1ld2FpdF9zb2NrIGFuZCBpbmV0X3RpbWV3YWl0X3NvY2sgYXJlIG5vdFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMzc6XHQgKiBnZW5lcmF0ZWQgaWYgQ09ORklHX0lORVQ9bi4gVHJpZ2dlciBhbiBleHBsaWNpdCBnZW5lcmF0aW9uIGhlcmUuXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzOC1cdCAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNDI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0My1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQ3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNDgtXHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2Mz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2NC17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2NTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY2LVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcF9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY5LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3MS1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTA0PV9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDYte1xubmV0L2NvcmUvZmlsdGVyLmM6MTI1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1NZTl9DT09LSUVTKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDgtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopcztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzMi1cdFx0YnJlYWs7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjUzMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM0LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjczMz1fX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDYtXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xubmV0L2NvcmUvZmlsdGVyLmM6MTI3NDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0OC1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjYtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc2NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzY4LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE5OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGVCUEYgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgZUJQRiBlY29zeXN0ZW0uIEZpcnN0LCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGFuZCBgbHd0X3htaXRfZnVuY19wcm90b2AsIHdoaWNoIG1lYW5zIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYENPTkZJR19ORVRfQ0xTX0FDVGAgYW5kIGBDT05GSUdfTFdUVU5ORUxfQlBGYCwgcmVzcGVjdGl2ZWx5LiBHb3QgaXQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRyYWZmaWMgY29udHJvbCBhbmQgbGlnaHR3ZWlnaHQgdHVubmVsaW5nLCBzbyBmYXIgc28gZ29vZC4gVGhlbiB3ZSBoYXZlIGBza19za2JfY2hhbmdlX3RhaWxgLCB3aGljaCBpcyBleHBvc2VkIHZpYSBgc2tfc2tiX2Z1bmNfcHJvdG9gLiBUaGlzIG9uZSByZXF1aXJlcyBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIHRoZSBtb3JlIGdlbmVyYWwgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19ORVRgLiBJdCYjMzk7cyBhbHNvIGV4cG9zZWQgd2l0aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBOb3cgSSBuZWVkIHRvIGRyaWxsIGRvd24sIHNvIGxldCYjMzk7cyBjcm9zcy1yZWZlcmVuY2UgdGhvc2UgZnVuY3Rpb24gcHJvdG9zIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvfHNrX3NrYl9jaGFuZ2VfdGFpbF9wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTQwMjg9QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MDM2LVxubmV0L2NvcmUvZmlsdGVyLmM6NDAzNzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYy00MDM4LVx0LmZ1bmNcdFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQwNDY9QlBGX0NBTExfMyhza19za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwNTEtXG5uZXQvY29yZS9maWx0ZXIuYzo0MDUyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtNDA1My1cdC5mdW5jXHRcdD0gc2tfc2tiX2NoYW5nZV90YWlsLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjE9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODY1OC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg5MTU9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODkyNC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxubmV0L2NvcmUvZmlsdGVyLmM6ODkyNTpcdFx0cmV0dXJuIFx1MDAyNnNrX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MjYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTAyMC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxubmV0L2NvcmUvZmlsdGVyLmM6OTAyMTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy05MDIyLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBUcmFmZmljIENvbnRyb2wgRnVuY3Rpb24gUHJvdG90eXBlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgc29tZXRoaW5nIG91dCB3aXRoIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLCBhbmQgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdG8gY2hlY2sgZm9yIHNvbWUgYGlmZGVmYCBkaXJlY3RpdmVzIHRoYXQgY291bGQgYmUgYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYXJvdW5kIGxpbmUgODYyMCBpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGxvY2F0aW9uLCBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgaXRzIGxpa2VseSByb2xlIGluIHRyYWZmaWMgY29udHJvbC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gc3BvdCBhbnkgY29tcGlsZS10aW1lIGZsYWdzIGFmZmVjdGluZyBpdC4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjbHVlcyB0aGVyZSB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4NjE1Olx0XHRkZWZhdWx0OlxuODYxNjpcdFx0XHRyZXR1cm4gc2tfZmlsdGVyX2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG44NjE3Olx0XHR9XG44NjE4Olx0fVxuODYxOTpcdFxuODYyMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuODYyMTpcdHRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjg2MjI6XHR7XG44NjIzOlx0XHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbjg2MjQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX3N0b3JlX2J5dGVzOlxuODYyNTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9zdG9yZV9ieXRlc19wcm90bztcbjg2MjY6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2xvYWRfYnl0ZXM6XG44NjI3Olx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XG44NjI4Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlOlxuODYyOTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvO1xuODYzMDpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuODYzMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG87XG44NjMyOlx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fZGlmZjpcbjg2MzM6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XG44NjM0Olx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fdXBkYXRlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHRjX2Nsc19hY3RfZnVuY19wcm90b2AuIFRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBzZWUgKndoZXJlKiB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgY3J1Y2lhbC4gS25vd2luZyB0aGUgY29udGV4dCBpbiB3aGljaCBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBpcyBlbXBsb3llZCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyBmcm9tIGl0cyBwdXJwb3NlIHRvIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIHRyYWNlIHRob3NlIHJlZmVyZW5jZXMuIEl0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X2Z1bmNfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz04NjIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxubmV0L2NvcmUvZmlsdGVyLmM6ODYyMTp0Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9maWx0ZXIuYy04NjIyLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTUwMz1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyB0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTA0Olx0LmdldF9mdW5jX3Byb3RvXHRcdD0gdGNfY2xzX2FjdF9mdW5jX3Byb3RvLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1MDUtXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IHRjX2Nsc19hY3RfaXNfdmFsaWRfYWNjZXNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0Y19jbHNfYWN0IFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGB0Y19jbHNfYWN0YCB2ZXJpZmllciBvcGVyYXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBCUEYgcHJvZ3JhbSB0eXBlcyBhcmUgZGVmaW5lZC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHByb2dyYW0gdHlwZXMsIGFuZCB0aGVyZSB0aGV5IGFyZTogYEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIC4uLilgIGFuZCBgQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgLi4uKWAgc3BlY2lmaWNhbGx5LgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgdGhlc2UgdHlwZXMgc2hvdWxkIHJlcXVpcmUgc29tZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gYmUgZW5hYmxlZC4gSSBzZWUgdGhhdCBgQ09ORklHX05FVF9DTFNfQUNUYCBhbmQgZWl0aGVyIGBDT05GSUdfTkVUX1NDSEVEYCBvciBgQ09ORklHX0JQRl9TWVNDQUxMYCAob3IgcG9zc2libHkgYm90aCkgYXJlIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCk5vdyB0aGF0IEkgaGF2ZSB0aGUgYmFzaWMgbGF5IG9mIHRoZSBsYW5kLCBpdCYjMzk7cyBiYWNrIHRvIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlc2UgYHRjX2Nsc19hY3RgIHByb2dyYW0gdHlwZXMuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlLCB0aGVyZSBtYXkgYmUgc29tZSBzdWJ0bGV0eSBpbiB0aGUgZGVmaW5pdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtNi1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDo3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIHRjX2Nsc19hY3QsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTgtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6OTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9uczoKCioqQlBGIFR5cGUgRXhwbG9yYXRpb246IGBORVRfQ0xTX0FDVGAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgTkVUX0NMU19BQ1RgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IGl0cyBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UgY29kZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBkZWZpbmVkIGluIG9uZSBvZiB0aGUgY29yZSBCUEYgaGVhZGVyIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7bGwgYmUgaW4gYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLiBUaGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBmdW5kYW1lbnRhbCBCUEYgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0eXBlIGRlZmluaXRpb25zIHJlc2lkZS4KCkxldCBtZSB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDcuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGxheW91dCBhbmQgaG93IHRoZXNlIHR5cGVzIGFyZSBvZnRlbiBncm91cGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRpdmVseSBjb25jaXNlIC0gcHJvYmFibHkgYSBtYWNybyBvciBhbiBlbnVtZXJhdGlvbiAtIGRlZmluaW5nIHRoaXMgcGFydGljdWxhciBCUEYgY2xhc3NpZmllciBhY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlLCBpdHMgZXhwZWN0ZWQgdXNhZ2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSB0eXBlcyBvciBjb25zdGFudHMuIFdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBlQlBGIGludGVybmFscywgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcm9sZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgQlBGIGNvbXBvbmVudHMuIE5vdyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0LyogaW50ZXJuYWwgZmlsZSAtIGRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5ICovXG4gICAzOlx0XG4gICA0Olx0I2lmZGVmIENPTkZJR19ORVRcbiAgIDU6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgc2tfZmlsdGVyLFxuICAgNjpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gICA3Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgdGNfY2xzX2FjdCxcbiAgIDg6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAgOTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIHRjX2Nsc19hY3QsXG4gIDEwOlx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMTE6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfWERQLCB4ZHAsXG4gIDEyOlx0XHQgICAgICBzdHJ1Y3QgeGRwX21kLCBzdHJ1Y3QgeGRwX2J1ZmYpXG4gIDEzOlx0I2lmZGVmIENPTkZJR19DR1JPVVBfQlBGXG4gIDE0Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIGNnX3NrYixcbiAgMTU6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAxNjpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSywgY2dfc29jayxcbiAgMTc6XHRcdCAgICAgIHN0cnVjdCBicGZfc29jaywgc3RydWN0IHNvY2spXG4gIDE4Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsIGNnX3NvY2tfYWRkcixcbiAgMTk6XHRcdCAgICAgIHN0cnVjdCBicGZfc29ja19hZGRyLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuKVxuICAyMDpcdCNlbmRpZlxuICAyMTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfSU4sIGx3dF9pbixcbiAgMjI6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAyMzpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBsd3Rfb3V0LFxuICAyNDpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gIDI1Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBsd3RfeG1pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MjUKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBDT05GSUdfTkVUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBvZiBjb3Vyc2UgYENPTkZJR19CUEZgIGFyZSBhbGwgYWN0aXZlLCBtZWFuaW5nIHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIEJQRiBwcm9ncmFtcyByZWxhdGVkIHRvIHRyYWZmaWMgY29udHJvbCAoYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCAvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGApIGF2YWlsYWJsZS4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2guCgpNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIGBicGZfc2tiX2NoYW5nZV90YWlsYCwgYHNrX3NrYl9jaGFuZ2VfdGFpbGAsIGBicGZfc2tiX3RyaW1fcmNzdW1gLCBhbmQgYF9fYnBmX3NrYl9taW5fbGVuYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhvc2UgbGFzdCB0d28gbWlnaHQgYmUgaW5saW5lZC4gQWgsIHllcywgYF9fYnBmX3NrYl9taW5fbGVuYCBpcyBhIHN0YXRpYyBgdTMyYCDigJMgcG90ZW50aWFsbHkgaW5saW5lZCDigJMgYW5kIGBicGZfc2tiX3RyaW1fcmNzdW1gIGlzIGEgc3RhdGljIGBpbnRgLCBzbyBwcm9iYWJseSBpbmxpbmVkIHRvby4gVGhlIG90aGVycyBhcmUgbm9uLXN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIHNob3VsZCBpbmNsdWRlIGFsbCB0aG9zZSBzeW1ib2xzIGZvciBnb29kIG1lYXN1cmUuCgpOb3csIGEgZmluYWwgdmVyaWZpY2F0aW9uIG9mIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGE6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseSEKKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBTS0IgKFNvY2tldCBCdWZmZXIpIHRyaW1taW5nIGxvZ2ljLCBuYW1lbHkgYGJwZl9za2JfdHJpbV9yY3N1bWAgYW5kIGBfX2JwZl9za2JfbWluX2xlbmAuIFRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBpbnZvbHZlIHJlc2V0dGluZyBgc2tiLSZndDtpcF9zdW1tZWRgIHRvIGBDSEVDS1NVTV9OT05FYCB3aGVuIHRyaW1taW5nIHBhc3QgdGhlIGNoZWNrc3VtIG9mZnNldCBmb3IgcGFydGlhbCBjaGVja3N1bSBwYWNrZXRzIGFuZCByZW1vdmVzIHRoZSBjaGVja3N1bSBvZmZzZXQgcmVzdHJpY3Rpb24uIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgQlBGIGhlbHBlcnMgbWFuaXB1bGF0ZSBTS0JzIChgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgKSBhbmQgdGhlIGhhbmRsaW5nIG9mIGNoZWNrc3VtcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgYW5kIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucywgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoqICAgKipGb2N1c1N5bWJvbHMqKjogYGJwZl9za2JfY2hhbmdlX3RhaWxgLCBgc2tfc2tiX2NoYW5nZV90YWlsYCwgYGJwZl9za2JfdHJpbV9yY3N1bWAsIGBfX2JwZl9za2JfbWluX2xlbmAgLSBjb25maXJtZWQuCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEJQRl9TWVNDQUxMYCwgYE5FVGAgLSBjb3JyZWN0LgoKT2theSwgZXZlcnl0aGluZyBhbGlnbnMuIExldCYjMzk7cyBzZW5kIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwgd2l0aCBjb25maWRlbmNlLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRhaWwgYWRqdXN0bWVudCBsb2dpYyAoYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYGJwZl9za2JfdHJpbV9yY3N1bWApIGJ5IHJlbGF4aW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCByZXNldHRpbmcgYHNrYi1cdTAwM2VpcF9zdW1tZWRgIHRvIGBDSEVDS1NVTV9OT05FYCB3aGVuIGFuIHNrYiBpcyB0cmltbWVkIHBhc3QgdGhlIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxuMS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgZGF0YSBidWZmZXJzIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIGJ5dGVzICh3aGVuIGdyb3dpbmcsIG1lbW9yeSBpcyBleHBsaWNpdGx5IHplcm9lZCB2aWEgYG1lbXNldGA7IHRyaW1taW5nIHJlZHVjZXMgYnVmZmVyIGxlbmd0aCkuXG4yLiBJdCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuXG4zLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBsZW5ndGggZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGMxMmVhYjlmNGVjNGE0MWExZGM4ZTlhNGU0OGNhODJkZTU3OGNiMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTU6NTM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0zOTYxLDEyICYjNDM7Mzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKG9mZnNldCAmZ3Q7IDApCiAJCQltaW5fbGVuID0gb2Zmc2V0OwogCX0KLQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQlvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0MzsKLQkJCSBza2ItJmd0O2NzdW1fb2Zmc2V0ICYjNDM7IHNpemVvZihfX3N1bTE2KTsKLQkJaWYgKG9mZnNldCAmZ3Q7IDApCi0JCQltaW5fbGVuID0gb2Zmc2V0OwotCX0KIAlyZXR1cm4gbWluX2xlbjsKIH0KIApAQCAtMzk4Myw2ICYjNDM7Mzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbikKIAogc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pCiB7CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIG5ld19sZW4gJmx0OyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLSZndDtjc3VtX29mZnNldCAmIzQzOwomIzQzOwkJICAgICAgc2l6ZW9mKF9fc3VtMTYpKQomIzQzOwkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwomIzQzOwogCXJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43YWNkYmQ1NzU3YTk4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jCkBAIC0wLDAgJiM0MzsxLDEyNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3Byb2dzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0d29ya19oZWxwZXJzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDTElFTlRfTlMJJiMzNDt0Yy1jaGFuZ2UtdGFpbC1jbGktbnMmIzM0OwomIzQzOyNkZWZpbmUgU0VSVkVSX05TCSYjMzQ7dGMtY2hhbmdlLXRhaWwtc3J2LW5zJiMzNDsKJiM0MzsjZGVmaW5lIENMSUVOVF9JUAkmIzM0OzE5Mi4xNjguMS4xJiMzNDsKJiM0MzsjZGVmaW5lIFNFUlZFUl9JUAkmIzM0OzE5Mi4xNjguMS4yJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFRFU1RfUE1UVQkxMDAwCiYjNDM7I2RlZmluZSBURVNUX01TU19NQVgJKFRFU1RfUE1UVSAtIDIwIC0gMjApCiYjNDM7I2RlZmluZSBUSU1FT1VUX01TCTMwMDAKJiM0MzsjZGVmaW5lIFhGRVJfQllURVMJODE5MgomIzQzOwomIzQzO3ZvaWQgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1KHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIHRjeF9vcHRzKTsKJiM0MzsJaW50IG1zc19iZWZvcmUgPSAwLCBtc3NfYWZ0ZXIgPSAwLCBpZmluZGV4LCBwb3J0OwomIzQzOwlpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xOwomIzQzOwlzdHJ1Y3QgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1ICpza2VsID0gTlVMTDsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMOwomIzQzOwlzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CXNzaXplX3QgYnl0ZXM7CiYjNDM7CXNpemVfdCB0b3RhbDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhDTElFTlRfTlMpLCAmIzM0O21ha2UgY2xpZW50IG5zJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKFNFUlZFUl9OUyksICYjMzQ7bWFrZSBzZXJ2ZXIgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9jbGllbnRfbnM7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW4gY2xpZW50IG5zJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbGluayBhZGQgdmV0aDEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMiBuZXRucyAmIzM0OyBTRVJWRVJfTlMpOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIC00IGFkZHIgYWRkICYjMzQ7IENMSUVOVF9JUCAmIzM0Oy8yNCBkZXYgdmV0aDEmIzM0Oyk7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbGluayBzZXQgdmV0aDEgdXAmIzM0Oyk7CiYjNDM7CWlmaW5kZXggPSBpZl9uYW1ldG9pbmRleCgmIzM0O3ZldGgxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJbnN0b2tlbiA9IE5VTEw7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW4gc2VydmVyIG5zJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgLTQgYWRkciBhZGQgJiMzNDsgU0VSVkVSX0lQICYjMzQ7LzI0IGRldiB2ZXRoMiYjMzQ7KTsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoMiB1cCYjMzQ7KTsKJiM0MzsJc3J2X2ZkID0gc3RhcnRfc2VydmVyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBTRVJWRVJfSVAsIDAsIFRJTUVPVVRfTVMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsICYjMzQ7c3RhcnQgc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gTlVMTDsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuIGFuZCBsb2FkIHNrZWxldG9uJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocG9ydCwgMCwgJiMzNDtnZXQgc2VydmVyIHBvcnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2ZXJfcG9ydCA9IHBvcnQ7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cG10dSA9IFRFU1RfUE1UVTsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3BlbiBjbGllbnQgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7bGlua3MuY2hhbmdlX3RhaWxfaWNtcCA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLSZndDtwcm9ncy5jaGFuZ2VfdGFpbF9pY21wLCBpZmluZGV4LAomIzQzOwkJCQkJJmFtcDt0Y3hfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5jaGFuZ2VfdGFpbF9pY21wLCAmIzM0O2F0dGFjaCB0Y3gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2xpX2ZkID0gY29ubmVjdF90b19mZChzcnZfZmQsIFRJTUVPVVRfTVMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjbGlfZmQsICYjMzQ7Y29ubmVjdCB0byBzZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJc3J2X2Nvbm5fZmQgPSBhY2NlcHQoc3J2X2ZkLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoc3J2X2Nvbm5fZmQsICYjMzQ7YWNjZXB0IGNvbm5lY3Rpb24mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc2V0dGltZW8oc3J2X2Nvbm5fZmQsIFRJTUVPVVRfTVMpLCAmIzM0O3NldCBzZXJ2ZXIgdGltZW91dCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YobXNzX2JlZm9yZSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgJmFtcDttc3NfYmVmb3JlLAomIzQzOwkJCQkgICZhbXA7b3B0bGVuKSwgJiMzNDtnZXQgbXNzIGJlZm9yZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlieXRlcyA9IHNlbmQoY2xpX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoYnl0ZXMsIChzc2l6ZV90KXNpemVvZihidWYpLCAmIzM0O3NlbmQgZGF0YSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmb3IgKHRvdGFsID0gMDsgdG90YWwgJmx0OyBzaXplb2YoYnVmKTsgdG90YWwgJiM0Mzs9IGJ5dGVzKSB7CiYjNDM7CQlieXRlcyA9IHJlY3Yoc3J2X2Nvbm5fZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwkJaWYgKGJ5dGVzICZsdDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHRvdGFsLCBzaXplb2YoYnVmKSwgJiMzNDtyZWNlaXZlIGRhdGEmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhza2VsLSZndDtkYXRhLSZndDtjaGFuZ2VfdGFpbF9yZXQsICYjMzQ7Y2hhbmdlIHRhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhza2VsLSZndDtic3MtJmd0O2FkanVzdF9yb29tX3JldCwgJiMzNDthZGp1c3Qgcm9vbSYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtpY21wX3NlbnQsICYjMzQ7aWNtcCBzZW50JiMzNDspOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YobXNzX2FmdGVyKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCAmYW1wO21zc19hZnRlciwKJiM0MzsJCQkJICAmYW1wO29wdGxlbiksICYjMzQ7Z2V0IG1zcyBhZnRlciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfTFQobXNzX2FmdGVyLCBtc3NfYmVmb3JlLCAmIzM0O21zcyByZWR1Y2VkJiMzNDspOwomIzQzOwlBU1NFUlRfTEUobXNzX2FmdGVyLCBURVNUX01TU19NQVgsICYjMzQ7bXNzIGJlbG93IHBtdHUmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwljbG9zZShzcnZfY29ubl9mZCk7CiYjNDM7CWNsb3NlKGNsaV9mZCk7CiYjNDM7CWNsb3NlKHNydl9mZCk7CiYjNDM7CXRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fZGVzdHJveShza2VsKTsKJiM0MzsJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CXJlbW92ZV9uZXRucyhTRVJWRVJfTlMpOwomIzQzO291dF9jbGllbnRfbnM6CiYjNDM7CXJlbW92ZV9uZXRucyhDTElFTlRfTlMpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41YzRjMDc1NDViYzlmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jCkBAIC0wLDAgJiM0MzsxLDEyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkZGVmLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RjcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIElDTVBfU0FNUExFX0xFTgkoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgOCkKJiM0MzsjZGVmaW5lIElDTVBfSERSU19MRU4JKHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCiYjNDM7CiYjNDM7X19iZTE2IHNlcnZlcl9wb3J0ID0gMDsKJiM0MztfX3UxNiBwbXR1ID0gMDsKJiM0MzsKJiM0Mztsb25nIGNoYW5nZV90YWlsX3JldCA9IDE7CiYjNDM7bG9uZyBhZGp1c3Rfcm9vbV9yZXQgPSAwOwomIzQzO2Jvb2wgaWNtcF9zZW50ID0gZmFsc2U7CiYjNDM7Ym9vbCBpY21wX2VyciA9IGZhbHNlOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pCiYjNDM7ewomIzQzOwljc3VtID0gKGNzdW0gJmFtcDsgMHhmZmZmKSAmIzQzOyAoY3N1bSAmZ3Q7Jmd0OyAxNik7CiYjNDM7CWNzdW0gPSAoY3N1bSAmYW1wOyAweGZmZmYpICYjNDM7IChjc3VtICZndDsmZ3Q7IDE2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIChfX3N1bTE2KX5jc3VtOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Yy9lZ3Jlc3MmIzM0OykKJiM0MztpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlfX3U4IHNtYWNbRVRIX0FMRU5dLCBkbWFjW0VUSF9BTEVOXTsKJiM0MzsJdm9pZCAqZGF0YSwgKmRhdGFfZW5kOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcDsKJiM0MzsJc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwlzdHJ1Y3QgdGNwaGRyICp0Y3A7CiYjNDM7CV9fYmUzMiBzYWRkciwgZGFkZHI7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXA7CiYjNDM7CV9fd3N1bSBjc3VtOwomIzQzOwomIzQzOwlpZiAoaWNtcF9zZW50IHx8IGljbXBfZXJyKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwlkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CWRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwomIzQzOwlldGggPSBkYXRhOwomIzQzOwlpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CWlmIChldGgtJmd0O2hfcHJvdG8gIT0gYnBmX2h0b25zKEVUSF9QX0lQKSkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJaXAgPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CWlmICgodm9pZCAqKShpcCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwlpZiAoaXAtJmd0O2lobCAhPSA1IHx8IGlwLSZndDtwcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJdGNwID0gKHZvaWQgKikoaXAgJiM0MzsgMSk7CiYjNDM7CWlmICgodm9pZCAqKSh0Y3AgJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJaWYgKHRjcC0mZ3Q7ZGVzdCAhPSBzZXJ2ZXJfcG9ydCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJaWYgKGJwZl9udG9ocyhpcC0mZ3Q7dG90X2xlbikgJmx0Oz0gc2l6ZW9mKCppcCkgJiM0MzsgdGNwLSZndDtkb2ZmICogNCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJX19idWlsdGluX21lbWNweShzbWFjLCBldGgtJmd0O2hfc291cmNlLCBFVEhfQUxFTik7CiYjNDM7CV9fYnVpbHRpbl9tZW1jcHkoZG1hYywgZXRoLSZndDtoX2Rlc3QsIEVUSF9BTEVOKTsKJiM0MzsJc2FkZHIgPSBpcC0mZ3Q7c2FkZHI7CiYjNDM7CWRhZGRyID0gaXAtJmd0O2RhZGRyOwomIzQzOwomIzQzOwljaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gJiM0MzsgSUNNUF9TQU1QTEVfTEVOLCAwKTsKJiM0MzsJaWYgKGNoYW5nZV90YWlsX3JldCkgewomIzQzOwkJaWNtcF9lcnIgPSB0cnVlOwomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFkanVzdF9yb29tX3JldCA9IGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCBJQ01QX0hEUlNfTEVOLAomIzQzOwkJCQkJICAgICAgQlBGX0FESl9ST09NX01BQywKJiM0MzsJCQkJCSAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpOwomIzQzOwlpZiAoYWRqdXN0X3Jvb21fcmV0KSB7CiYjNDM7CQlpY21wX2VyciA9IHRydWU7CiYjNDM7CQlyZXR1cm4gVENYX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhOwomIzQzOwlkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhX2VuZDsKJiM0MzsKJiM0MzsJZXRoID0gZGF0YTsKJiM0MzsJaXAgPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CWljbXAgPSAodm9pZCAqKShpcCAmIzQzOyAxKTsKJiM0MzsJaWYgKCh2b2lkICopaWNtcCAmIzQzOyBzaXplb2YoKmljbXApICYjNDM7IElDTVBfU0FNUExFX0xFTiAmZ3Q7IGRhdGFfZW5kKSB7CiYjNDM7CQlpY21wX2VyciA9IHRydWU7CiYjNDM7CQlyZXR1cm4gVENYX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX19idWlsdGluX21lbWNweShldGgtJmd0O2hfZGVzdCwgc21hYywgRVRIX0FMRU4pOwomIzQzOwlfX2J1aWx0aW5fbWVtY3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIGRtYWMsIEVUSF9BTEVOKTsKJiM0MzsKJiM0MzsJX19idWlsdGluX21lbXNldChpY21wLCAwLCBzaXplb2YoKmljbXApKTsKJiM0MzsJaWNtcC0mZ3Q7dHlwZSA9IElDTVBfREVTVF9VTlJFQUNIOwomIzQzOwlpY21wLSZndDtjb2RlID0gSUNNUF9GUkFHX05FRURFRDsKJiM0MzsJaWNtcC0mZ3Q7dW4uZnJhZy5tdHUgPSBicGZfaHRvbnMocG10dSk7CiYjNDM7CiYjNDM7CV9fYnVpbHRpbl9tZW1zZXQoaXAsIDAsIHNpemVvZigqaXApKTsKJiM0MzsJaXAtJmd0O3ZlcnNpb24gPSA0OwomIzQzOwlpcC0mZ3Q7aWhsID0gNTsKJiM0MzsJaXAtJmd0O3R0bCA9IDY0OwomIzQzOwlpcC0mZ3Q7cHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7CiYjNDM7CWlwLSZndDt0b3RfbGVuID0gYnBmX2h0b25zKElDTVBfSERSU19MRU4gJiM0MzsgSUNNUF9TQU1QTEVfTEVOKTsKJiM0MzsJaXAtJmd0O3NhZGRyID0gZGFkZHI7CiYjNDM7CWlwLSZndDtkYWRkciA9IHNhZGRyOwomIzQzOwomIzQzOwljc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaWNtcCwKJiM0MzsJCQkgICAgIHNpemVvZigqaWNtcCkgJiM0MzsgSUNNUF9TQU1QTEVfTEVOLCAwKTsKJiM0MzsJaWNtcC0mZ3Q7Y2hlY2tzdW0gPSBjc3VtX2ZvbGQoY3N1bSk7CiYjNDM7CWNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpcCwgc2l6ZW9mKCppcCksIDApOwomIzQzOwlpcC0mZ3Q7Y2hlY2sgPSBjc3VtX2ZvbGQoY3N1bSk7CiYjNDM7CWljbXBfc2VudCA9IHRydWU7CiYjNDM7CXJldHVybiBicGZfcmVkaXJlY3Qoc2tiLSZndDtpZmluZGV4LCBCUEZfRl9JTkdSRVNTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudCBmaXJpbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIHRoZSBkaWZmIGl0c2VsZi4gQWgsIGl0IG1vZGlmaWVzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGFkZHMgQlBGIHNlbGZ0ZXN0cy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWx3YXlzIHN0YXJ0IHdpdGggdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLi4uIE9rYXksIGxpbmUgMzk2MCBhbmQgYXJvdW5kIHRoZXJlLi4uCgpgYGBkaWZmCkBAIC0zOTYxLDEyICYjNDM7Mzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKG9mZnNldCAmZ3Q7IDApCiAJCQltaW5fbGVuID0gb2Zmc2V0OwogCX0KLQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQlvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0MzsKLQkJCSBza2ItJmd0O2NzdW1fb2Zmc2V0ICYjNDM7IHNpemVvZihfX3N1bTE2KTsKLQkJaWYgKG9mZnNldCAmZ3Q7IDApCi0JCQltaW5fbGVuID0gb2Zmc2V0OwotCX0KIAlyZXR1cm4gbWluX2xlbjsKIH0KIApAQCAtMzk4Myw2ICYjNDM7Mzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbikKIAogc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pCiB7CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIG5ld19sZW4gJmx0OyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLSZndDtjc3VtX29mZnNldCAmIzQzOwomIzQzOwkJICAgICAgc2l6ZW9mKF9fc3VtMTYpKQomIzQzOwkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwomIzQzOwogCXJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7CiB9CiBgYGAKClJpZ2h0LCBzbyBpdCYjMzk7cyByZW1vdmluZyB0aGUgY2hlY2tzdW0gb2Zmc2V0IGNoZWNrIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIGNoYW5naW5nIGBicGZfc2tiX3RyaW1fcmNzdW1gIHRvIGNsZWFyIHRoZSBjaGVja3N1bSB3aGVuIHRyaW1taW5nLiBUaGUgcmVtb3ZlZCBjaGVjayBpcyB0aGVyZSB0byBwcmV2ZW50IE9PQiBhY2Nlc3Mgd2hlbiBkZWFsaW5nIHdpdGggYENIRUNLU1VNX1BBUlRJQUxgIHNrYnMuIFRoZSBuZXcgY29kZSBpbiBgYnBmX3NrYl90cmltX3Jjc3VtYCBzZWVtcyB0byBiZSBpbnRlbmRlZCB0byBkZWFsIHdpdGggY2hlY2tzdW1zIGNvcnJlY3RseSB3aGVuIHRyaW1taW5nLgoKU28sIHBvdGVudGlhbGx5IHdlIGhhdmUgYSBjaGFuZ2UgaW4gY2hlY2tzdW0gaGFuZGxpbmcgYW5kIGJwZiBzZWxmdGVzdHMuIFRoZSByZW1vdmFsIG9mIHRoZSBjaGVjayBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCB0aGUgbG9naWMgaW4gYGJwZl9za2JfdHJpbV9yY3N1bWAgbWlnaHQgaGF2ZSBzb21lIHN1YnRsZSBjb3JuZXIgY2FzZXMgdGhhdCBhIEtNU0FOIHJ1biBtaWdodCBleHBvc2UuIFRoaXMgKmNvdWxkKiBiZSBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGludm9sdmVzIG5ldHdvcmsgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgY2hlY2tzdW1zIC0gYSBjbGFzc2ljIGFyZWEgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIE5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoZSByaXNrIG91dHdlaWdocyB0aGUgZWZmb3J0IHRvIHNldHVwIEtNU0FOLiBUaGlzIGxvb2tzIHByZXR0eSBnb29kIGZvciBhIEtNU0FOIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NDA6XHR9XG4zOTQxOlx0XG4zOTQyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2FkanVzdF9yb29tX3Byb3RvID0ge1xuMzk0MzpcdFx0LmZ1bmNcdFx0PSBicGZfc2tiX2FkanVzdF9yb29tLFxuMzk0NDpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuMzk0NTpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuMzk0NjpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbjM5NDc6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuMzk0ODpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4zOTQ5Olx0XHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbjM5NTA6XHR9O1xuMzk1MTpcdFxuMzk1MjpcdHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjM5NTM6XHR7XG4zOTU0Olx0XHRpbnQgb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XG4zOTU1Olx0XHR1MzIgbWluX2xlbiA9IDA7XG4zOTU2Olx0XG4zOTU3Olx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk1ODpcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuMzk1OTpcdFx0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xuMzk2MDpcdFx0XHRvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuMzk2MTpcdFx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk2MjpcdFx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4zOTYzOlx0XHR9XG4zOTY0Olx0XHRyZXR1cm4gbWluX2xlbjtcbjM5NjU6XHR9XG4zOTY2Olx0XG4zOTY3Olx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTY4Olx0e1xuMzk2OTpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuMzk3MDpcdFx0aW50IHJldDtcbjM5NzE6XHRcbjM5NzI6XHRcdHJldCA9IF9fc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM5NzM6XHRcdGlmICghcmV0KVxuMzk3NDpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xuMzk3NTpcdFx0cmV0dXJuIHJldDtcbjM5NzY6XHR9XG4zOTc3Olx0XG4zOTc4Olx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTc5Olx0e1xuMzk4MDpcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbjM5ODE6XHRcdCAgICBuZXdfbGVuIFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICYjNDM7XG4zOTgyOlx0XHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbjM5ODM6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4zOTg0Olx0XG4zOTg1Olx0XHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xuMzk4NjpcdH1cbjM5ODc6XHRcbjM5ODg6XHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4zOTg5Olx0XHRcdFx0XHRcdHU2NCBmbGFncylcbjM5OTA6XHR7XG4zOTkxOlx0XHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcbjM5OTI6XHRcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcbjM5OTM6XHRcdGludCByZXQ7XG4zOTk0Olx0XG4zOTk1Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFx1MDAzYyBtaW5fbGVuKSlcbjM5OTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk3Olx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4zOTk4Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgQ29tbWl0JiMzOTtzIExvZ2ljIGZvciBTS0IgVHJpbW1pbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoYW5nZS4gUHJldmlvdXNseSwgdGhlIGBfX2JwZl9za2JfbWluX2xlbmAgY2hlY2sgd2FzIHByZXZlbnRpbmcgYGJwZl9za2JfY2hhbmdlX3RhaWxgIGZyb20gc2hyaW5raW5nIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikgYmV5b25kIGEgY2VydGFpbiBwb2ludCDigJMgc3BlY2lmaWNhbGx5LCB0aGUgY2hlY2tzdW0tcmVsYXRlZCBvZmZzZXQgY2FsY3VsYXRlZCB1c2luZyBgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICYjNDM7IHNrYi0mZ3Q7Y3N1bV9vZmZzZXQgJiM0Mzsgc2l6ZW9mKF9fc3VtMTYpYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UgZG9uJiMzOTt0IHdhbnQgdG8gbWVzcyB1cCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGJ5IGFyYml0cmFyaWx5IHRydW5jYXRpbmcgdGhlIGJ1ZmZlci4KCk5vdywgaG93ZXZlciwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBtb2RpZnlpbmcgdGhlIGBicGZfc2tiX3RyaW1fcmNzdW1gIHByb2Nlc3MuIEluc3RlYWQgb2YgcmVqZWN0aW5nIHRoZSB0cmltIGluIHRoZSBgX19icGZfc2tiX21pbl9sZW5gIGNoZWNrIGlmIHRoZSBpbnRlbmRlZCBgbmV3X2xlbmAgaXMgbGVzcyB0aGFuIHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldCwgdGhlIGNvZGUgKmFsbG93cyogdGhlIHRyaW0gdG8gaGFwcGVuLiBUaGUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2UgaXMgdGhhdCBpdCBhbHNvICpyZXNldHMqIGBza2ItJmd0O2lwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBfX3NrYl90cmltX3Jjc3VtYCBvciByZWxhdGVkIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgd2hhdCBzcGVjaWZpYyBhY3Rpb25zIGFyZSB0YWtlbiB3aGVuIGFuIFNLQiBpcyB0cmltbWVkIGluIHRoaXMgbmV3IHBhcmFkaWdtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2lkZSBlZmZlY3RzIG9mIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBjaGVja3N1bW1pbmcgYWZ0ZXIgYSBwb3RlbnRpYWxseSBhZ2dyZXNzaXZlIHRyaW0uIElzIHRoaXMgZXhwZWN0ZWQgYmVoYXZpb3I/IEFyZSB0aGVyZSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyBjaGFuZ2U/IEkmIzM5O2xsIHByb2JhYmx5IGFsc28gd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBjaGVja3N1bSBvZmZsb2FkIGNhcGFiaWxpdGllcyB3ZSBhcmUgZW1wbG95aW5nIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBjYXVzZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSYjMzk7bSBrZWVuIHRvIHVuY292ZXIgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24gYW5kIGVuc3VyZSBpdHMgY29ycmVjdG5lc3MgYW5kIHNhZmV0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19za2JfdHJpbV9yY3N1bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQxNTk9c3RhdGljIGlubGluZSBpbnQgcHNrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MTY2LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MTY3OnN0YXRpYyBpbmxpbmUgaW50IF9fc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDE2OC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Mzk3OD1zdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg0LVxubmV0L2NvcmUvZmlsdGVyLmM6Mzk4NTpcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG5uZXQvY29yZS9maWx0ZXIuYy0zOTg2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIHNrYl90cmltX3Jjc3VtIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBfX3NrYl90cmltX3Jjc3VtYC4gV2hlcmUmIzM5O3MgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbj8gUmlnaHQsIGl0IHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRpbWUgdG8gcHVsbCB1cCB0aGF0IGhlYWRlciBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRyaW1taW5nIG9uIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIElzIGl0IGp1c3QgYSBtYXR0ZXIgb2YgYWRqdXN0aW5nIHRoZSBgY3N1bWAgZmllbGQ/IEFyZSB0aGVyZSBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHRvIGNvbnNpZGVyLCBsaWtlIGZyYWdtZW50ZWQgU0tCcyBvciBoYXJkd2FyZSBjaGVja3N1bSBvZmZsb2FkPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGNvcmUgbG9naWMgYmVmb3JlIEkgZ2V0IGRpc3RyYWN0ZWQgYnkgYW55IHBhcnRpY3VsYXIgdXNlIGNhc2VzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgaW50ZXJuYWwgd29ya2luZ3MgcmVsYXRlIHRvIHRoZSBgc2tiYCBkYXRhIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTY1Olx0fVxuNDE2NjpcdFxuNDE2NzpcdHN0YXRpYyBpbmxpbmUgaW50IF9fc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbjQxNjg6XHR7XG40MTY5Olx0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbjQxNzA6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG40MTcxOlx0XHRfX3NrYl90cmltKHNrYiwgbGVuKTtcbjQxNzI6XHRcdHJldHVybiAwO1xuNDE3MzpcdH1cbjQxNzQ6XHRcbjQxNzU6XHRzdGF0aWMgaW5saW5lIGludCBfX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXG40MTc2Olx0e1xuNDE3NzpcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG40MTc4Olx0XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuNDE3OTpcdFx0cmV0dXJuIF9fc2tiX2dyb3coc2tiLCBsZW4pO1xuNDE4MDpcdH1cbjQxODE6XHRcbjQxODI6XHQjZGVmaW5lIHJiX3RvX3NrYihyYikgcmJfZW50cnlfc2FmZShyYiwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSlcbjQxODM6XHQjZGVmaW5lIHNrYl9yYl9maXJzdChyb290KSByYl90b19za2IocmJfZmlyc3Qocm9vdCkpXG40MTg0Olx0I2RlZmluZSBza2JfcmJfbGFzdChyb290KSAgcmJfdG9fc2tiKHJiX2xhc3Qocm9vdCkpXG40MTg1Olx0I2RlZmluZSBza2JfcmJfbmV4dChza2IpICAgcmJfdG9fc2tiKHJiX25leHQoXHUwMDI2KHNrYiktXHUwMDNlcmJub2RlKSlcbjQxODY6XHQjZGVmaW5lIHNrYl9yYl9wcmV2KHNrYikgICByYl90b19za2IocmJfcHJldihcdTAwMjYoc2tiKS1cdTAwM2VyYm5vZGUpKVxuNDE4NzpcdFxuNDE4ODpcdCNkZWZpbmUgc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgXFxcbjQxODk6XHRcdFx0Zm9yIChza2IgPSAocXVldWUpLVx1MDAzZW5leHQ7XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uLCBgX19icGZfc2tiX2NoYW5nZV90YWlsYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzOTgwIHRvIDQwMzAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGFpbCBtb2RpZmljYXRpb25zIG9uIFNLQnMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGNoYW5naW5nIHRoZSB0YWlsIHBvaW50ZXIuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBiYXJyaWVyIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGxvY2tpbmcgcHJpbWl0aXZlcyBvciBhdG9taWMgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk4NTpcdFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM5ODY6XHR9XG4zOTg3Olx0XG4zOTg4Olx0c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxuMzk4OTpcdFx0XHRcdFx0XHR1NjQgZmxhZ3MpXG4zOTkwOlx0e1xuMzk5MTpcdFx0dTMyIG1heF9sZW4gPSBCUEZfU0tCX01BWF9MRU47XG4zOTkyOlx0XHR1MzIgbWluX2xlbiA9IF9fYnBmX3NrYl9taW5fbGVuKHNrYik7XG4zOTkzOlx0XHRpbnQgcmV0O1xuMzk5NDpcdFxuMzk5NTpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIHx8IG5ld19sZW4gXHUwMDNlIG1heF9sZW4gfHwgbmV3X2xlbiBcdTAwM2MgbWluX2xlbikpXG4zOTk2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzk5NzpcdFx0aWYgKHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuMzk5ODpcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuMzk5OTpcdFxuNDAwMDpcdFx0LyogVGhlIGJhc2ljIGlkZWEgb2YgdGhpcyBoZWxwZXIgaXMgdGhhdCBpdCYjMzk7cyBwZXJmb3JtaW5nIHRoZVxuNDAwMTpcdFx0ICogbmVlZGVkIHdvcmsgdG8gZWl0aGVyIGdyb3cgb3IgdHJpbSBhbiBza2IsIGFuZCBlQlBGIHByb2dyYW1cbjQwMDI6XHRcdCAqIHJld3JpdGVzIHRoZSByZXN0IHZpYSBoZWxwZXJzIGxpa2UgYnBmX3NrYl9zdG9yZV9ieXRlcygpLFxuNDAwMzpcdFx0ICogYnBmX2xYX2NzdW1fcmVwbGFjZSgpIGFuZCBvdGhlcnMgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhd1xuNDAwNDpcdFx0ICogYnVmZmVyIGhlcmUuIFRoaXMgb25lIGlzIGEgc2xvdyBwYXRoIGhlbHBlciBhbmQgaW50ZW5kZWRcbjQwMDU6XHRcdCAqIGZvciByZXBsaWVzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cbjQwMDY6XHRcdCAqXG40MDA3Olx0XHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxuNDAwODpcdFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxuNDAwOTpcdFx0ICogdG8gc2VwYXJhdGUgY29uY2VybnMgYXMgaW4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5XG40MDEwOlx0XHQgKiBiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGJ1ZmZlcnMuXG40MDExOlx0XHQgKlxuNDAxMjpcdFx0ICogSXQmIzM5O3MgcmVhbGx5IGV4cGVjdGVkIHRvIGJlIGEgc2xvdyBwYXRoIG9wZXJhdGlvbiBoZXJlIGZvclxuNDAxMzpcdFx0ICogY29udHJvbCBtZXNzYWdlIHJlcGxpZXMsIHNvIHdlJiMzOTtyZSBpbXBsaWNpdGx5IGxpbmVhcml6aW5nLFxuNDAxNDpcdFx0ICogdW5jbG9uaW5nIGFuZCBkcm9wIG9mZmxvYWRzIGZyb20gdGhlIHNrYiBieSB0aGlzLlxuNDAxNTpcdFx0ICovXG40MDE2Olx0XHRyZXQgPSBfX2JwZl90cnlfbWFrZV93cml0YWJsZShza2IsIHNrYi1cdTAwM2VsZW4pO1xuNDAxNzpcdFx0aWYgKCFyZXQpIHtcbjQwMTg6XHRcdFx0aWYgKG5ld19sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG40MDE5Olx0XHRcdFx0cmV0ID0gYnBmX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XG40MDIwOlx0XHRcdGVsc2UgaWYgKG5ld19sZW4gXHUwMDNjIHNrYi1cdTAwM2VsZW4pXG40MDIxOlx0XHRcdFx0cmV0ID0gYnBmX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG40MDIyOlx0XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXG40MDIzOlx0XHRcdFx0c2tiX2dzb19yZXNldChza2IpO1xuNDAyNDpcdFx0fVxuNDAyNTpcdFx0cmV0dXJuIHJldDtcbjQwMjY6XHR9XG40MDI3Olx0XG40MDI4Olx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcbjQwMjk6XHRcdCAgIHU2NCwgZmxhZ3MpXG40MDMwOlx0e1xuNDAzMTpcdFx0aW50IHJldCA9IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcbjQwMzI6XHRcbjQwMzM6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjQwMzQ6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM4CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBTS0IgVHJpbW1pbmcgaW4gQlBGKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBicGZfc2tiX2NoYW5nZV90YWlsYCBpcyB0aGUgZnVuY3Rpb24gYXQgcGxheSBoZXJlLCBhbmQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGJvdGggZ3Jvd2luZyBhbmQgdHJpbW1pbmcgc2ticy4gVGhlIGtleSBpcyB0byBhc3Nlc3MgdGhpcyBjaGFuZ2UgZm9yIEtNU0FOIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGaXJzdCwgZ3Jvd2luZy4gR3Jvd2luZyBpcyBoYW5kbGVkIHdpdGggYGJwZl9za2JfZ3Jvd19yY3N1bWAgd2hpY2ggKmV4cGxpY2l0bHkqIHplcm9lcyBvdXQgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgdXNpbmcgYG1lbXNldGAuIE5vIGNvbmNlcm5zIHRoZXJlLgoKTm93LCB0cmltbWluZy4gVGhlIHBhdGNoIGFsbG93cyBmb3IgdHJpbW1pbmcgdGhlIHNrYiB0byBhIHNob3J0ZXIgbGVuZ3RoLCB3aGljaCB3YXMgcHJldmlvdXNseSByZXN0cmljdGVkLiBJZiB0aGUgdHJpbSBoYXBwZW5zIHRvIGN1dCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldCwgd2UgY29ycmVjdGx5IHJlc2V0IGBza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkVgLiBUaGlzIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgcHJvYWN0aXZlbHkgZW5zdXJpbmcgdGhhdCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24gd29uJiMzOTt0IHJlYWQgcGFzdCB0aGUgbmV3LCByZWR1Y2VkIHBhY2tldCBib3VuZGFyeS4KClNvLCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlOioqIE5vdGhpbmcgaGVyZS4gTm8gZGF0YSBpcyBiZWluZyBzZW50IG91dCwgbW9kaWZpZWQsIG9yIG90aGVyd2lzZSBleHBvc2VkIGluIHRoaXMgd2F5LgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uIFRoZXJlIGFyZSBubyBsb2dpYyBicmFuY2hlcyBiZWluZyBkZXRlcm1pbmVkIGJ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb246KiogTm9wZS4gVGhlIGV4aXN0aW5nIHplcm8taW5nIGxvZ2ljIGFscmVhZHkgY292ZXJzIGdyb3dpbmcuIFRoZSBjb25jZXJuIGhlcmUgaXMgYWJvdXQgc2hyaW5raW5nLCBhbmQgd2UgYXJlIHNldHRpbmcgdGhlIGNoZWNrc3VtIGZsYWcgY29ycmVjdGx5LCBvciBrZWVwaW5nIGl0IGNvcnJlY3Qgd2hlbiBzaHJpbmtpbmcuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGxlbmd0aHM6KiogQWgsIGhlcmUmIzM5O3Mgd2hlcmUgaXQgbWF0dGVycy4gVHJpbW1pbmcgKnJlZHVjZXMqIHRoZSBidWZmZXIgc2l6ZS4gVGhpcyBtZWFucyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3aWxsIG5ldmVyIGJlIHJlYWQgcGFzdCB0aGUgYm91bmRhcmllcy4gV2l0aCB0aGUgY3N1bSBhZGp1c3RtZW50IGFzIHdlbGwsIHRoaXMgaXMgbm90IGFuIGlzc3VlLiBXZSBhcmUgY2xlYXJpbmcgb3V0IHRoZSBpcFxfc3VtbWVkIHNldHRpbmcgd2hlbiB0cmltbWluZy4KClRoZXJlZm9yZSwgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4gS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgY292ZXIgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFzIGV4cGVjdGVkLiBUaGlzIGNoYW5nZSBpcyBLTVNBTi1zYWZlLiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgdG9vbCBjYWxsIGdvZXMgdGhyb3VnaCBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0YWlsIGFkanVzdG1lbnQgbG9naWMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBicGZfc2tiX3RyaW1fcmNzdW1gKSBieSByZWxheGluZyB0aGUgbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gaW4gYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgcmVzZXR0aW5nIGBza2ItXHUwMDNlaXBfc3VtbWVkYCB0byBgQ0hFQ0tTVU1fTk9ORWAgd2hlbiBhbiBza2IgaXMgdHJpbW1lZCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGRhdGEgYnVmZmVycyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBieXRlcyAod2hlbiBncm93aW5nLCBtZW1vcnkgaXMgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXRgOyB0cmltbWluZyByZWR1Y2VzIGJ1ZmZlciBsZW5ndGgpLlxuMi4gSXQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLlxuMy4gQW55IHBvdGVudGlhbCBidWZmZXIgbGVuZ3RoIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdGFpbCBhZGp1c3RtZW50IGxvZ2ljIChgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgLyBgYnBmX3NrYl90cmltX3Jjc3VtYCkgYnkgcmVsYXhpbmcgdGhlIG1pbmltdW0gbGVuZ3RoIGNhbGN1bGF0aW9uIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIHJlc2V0dGluZyBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cbjMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGxlbmd0aCBlcnJvcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjA1LjcxMDYxOTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU4NTA5MDY0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za2JfY2hhbmdlX3RhaWxcIixcbiAgICBcInNrX3NrYl9jaGFuZ2VfdGFpbFwiLFxuICAgIFwiYnBmX3NrYl90cmltX3Jjc3VtXCIsXG4gICAgXCJfX2JwZl9za2JfbWluX2xlblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0YWlsIGFkanVzdG1lbnQgbG9naWMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBicGZfc2tiX3RyaW1fcmNzdW1gKSBieSByZWxheGluZyB0aGUgbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gaW4gYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgcmVzZXR0aW5nIGBza2ItXFx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cXG4yLiBJdCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuXFxuMy4gQW55IHBvdGVudGlhbCBidWZmZXIgbGVuZ3RoIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdHJpbW1pbmcgc2VtYW50aWNzIGluIG5ldC9jb3JlL2ZpbHRlci5jLiBTcGVjaWZpY2FsbHksIGl0IHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIGNvbnN0cmFpbnQgYmFzZWQgb24gcGFydGlhbCBjaGVja3N1bSBvZmZzZXRzIGluIF9fYnBmX3NrYl9taW5fbGVuIGFuZCBpbnN0ZWFkIHJlc2V0cyBza2ItXFx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjA1LjcxMDYyMzk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM3Mjc3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzEyZWFiOWY0ZWM0YTQxYTFkYzhlOWE0ZTQ4Y2E4MmRlNTc4Y2IxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTU6NTM6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0zOTYxLDEyICszOTYxLDYgQEAgc3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0bWluX2xlbiA9IG9mZnNldDtcXG4gXFx0fVxcbi1cXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbi1cXHRcXHRvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgK1xcbi1cXHRcXHRcXHQgc2tiLVxcdTAwM2Vjc3VtX29mZnNldCArIHNpemVvZihfX3N1bTE2KTtcXG4tXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdG1pbl9sZW4gPSBvZmZzZXQ7XFxuLVxcdH1cXG4gXFx0cmV0dXJuIG1pbl9sZW47XFxuIH1cXG4gXFxuQEAgLTM5ODMsNiArMzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxcbiB7XFxuK1xcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBuZXdfbGVuIFxcdTAwM2Mgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICsgc2tiLVxcdTAwM2Vjc3VtX29mZnNldCArXFxuK1xcdFxcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcXG4rXFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbitcXG4gXFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YWNkYmQ1NzU3YTk4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuY1xcbkBAIC0wLDAgKzEsMTI1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXR3b3JrX2hlbHBlcnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5za2VsLmhcXFwiXFxuK1xcbisjZGVmaW5lIENMSUVOVF9OU1xcdFxcXCJ0Yy1jaGFuZ2UtdGFpbC1jbGktbnNcXFwiXFxuKyNkZWZpbmUgU0VSVkVSX05TXFx0XFxcInRjLWNoYW5nZS10YWlsLXNydi1uc1xcXCJcXG4rI2RlZmluZSBDTElFTlRfSVBcXHRcXFwiMTkyLjE2OC4xLjFcXFwiXFxuKyNkZWZpbmUgU0VSVkVSX0lQXFx0XFxcIjE5Mi4xNjguMS4yXFxcIlxcbitcXG4rI2RlZmluZSBURVNUX1BNVFVcXHQxMDAwXFxuKyNkZWZpbmUgVEVTVF9NU1NfTUFYXFx0KFRFU1RfUE1UVSAtIDIwIC0gMjApXFxuKyNkZWZpbmUgVElNRU9VVF9NU1xcdDMwMDBcXG4rI2RlZmluZSBYRkVSX0JZVEVTXFx0ODE5MlxcbitcXG4rdm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIHRjeF9vcHRzKTtcXG4rXFx0aW50IG1zc19iZWZvcmUgPSAwLCBtc3NfYWZ0ZXIgPSAwLCBpZmluZGV4LCBwb3J0O1xcbitcXHRpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xO1xcbitcXHRzdHJ1Y3QgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1ICpza2VsID0gTlVMTDtcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdHNzaXplX3QgYnl0ZXM7XFxuK1xcdHNpemVfdCB0b3RhbDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoQ0xJRU5UX05TKSwgXFxcIm1ha2UgY2xpZW50IG5zXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhTRVJWRVJfTlMpLCBcXFwibWFrZSBzZXJ2ZXIgbnNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfY2xpZW50X25zO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuIGNsaWVudCBuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0U1lTKG91dCwgXFxcImlwIGxpbmsgYWRkIHZldGgxIHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDIgbmV0bnMgXFxcIiBTRVJWRVJfTlMpO1xcbitcXHRTWVMob3V0LCBcXFwiaXAgLTQgYWRkciBhZGQgXFxcIiBDTElFTlRfSVAgXFxcIi8yNCBkZXYgdmV0aDFcXFwiKTtcXG4rXFx0U1lTKG91dCwgXFxcImlwIGxpbmsgc2V0IHZldGgxIHVwXFxcIik7XFxuK1xcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKGlmaW5kZXgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdG5zdG9rZW4gPSBOVUxMO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuIHNlcnZlciBuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0U1lTKG91dCwgXFxcImlwIC00IGFkZHIgYWRkIFxcXCIgU0VSVkVSX0lQIFxcXCIvMjQgZGV2IHZldGgyXFxcIik7XFxuK1xcdFNZUyhvdXQsIFxcXCJpcCBsaW5rIHNldCB2ZXRoMiB1cFxcXCIpO1xcbitcXHRzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNFUlZFUl9JUCwgMCwgVElNRU9VVF9NUyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXFxcInN0YXJ0IHNlcnZlclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdG5zdG9rZW4gPSBOVUxMO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW4gYW5kIGxvYWQgc2tlbGV0b25cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNydl9mZCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFxcXCJnZXQgc2VydmVyIHBvcnRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNlcnZlcl9wb3J0ID0gcG9ydDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwbXR1ID0gVEVTVF9QTVRVO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuIGNsaWVudCBuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWxpbmtzLmNoYW5nZV90YWlsX2ljbXAgPVxcbitcXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVxcdTAwM2Vwcm9ncy5jaGFuZ2VfdGFpbF9pY21wLCBpZmluZGV4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGN4X29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MuY2hhbmdlX3RhaWxfaWNtcCwgXFxcImF0dGFjaCB0Y3hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRjbGlfZmQgPSBjb25uZWN0X3RvX2ZkKHNydl9mZCwgVElNRU9VVF9NUyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKGNsaV9mZCwgXFxcImNvbm5lY3QgdG8gc2VydmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRzcnZfY29ubl9mZCA9IGFjY2VwdChzcnZfZmQsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgXFxcImFjY2VwdCBjb25uZWN0aW9uXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzZXR0aW1lbyhzcnZfY29ubl9mZCwgVElNRU9VVF9NUyksIFxcXCJzZXQgc2VydmVyIHRpbWVvdXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YobXNzX2JlZm9yZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXFx1MDAyNm1zc19iZWZvcmUsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNm9wdGxlbiksIFxcXCJnZXQgbXNzIGJlZm9yZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJ5dGVzID0gc2VuZChjbGlfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShieXRlcywgKHNzaXplX3Qpc2l6ZW9mKGJ1ZiksIFxcXCJzZW5kIGRhdGFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmb3IgKHRvdGFsID0gMDsgdG90YWwgXFx1MDAzYyBzaXplb2YoYnVmKTsgdG90YWwgKz0gYnl0ZXMpIHtcXG4rXFx0XFx0Ynl0ZXMgPSByZWN2KHNydl9jb25uX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEodG90YWwsIHNpemVvZihidWYpLCBcXFwicmVjZWl2ZSBkYXRhXFxcIik7XFxuK1xcdEFTU0VSVF9PSyhza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VjaGFuZ2VfdGFpbF9yZXQsIFxcXCJjaGFuZ2UgdGFpbFxcXCIpO1xcbitcXHRBU1NFUlRfT0soc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VhZGp1c3Rfcm9vbV9yZXQsIFxcXCJhZGp1c3Qgcm9vbVxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWljbXBfc2VudCwgXFxcImljbXAgc2VudFxcXCIpO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKG1zc19hZnRlcik7XFxuK1xcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXFx1MDAyNm1zc19hZnRlcixcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2b3B0bGVuKSwgXFxcImdldCBtc3MgYWZ0ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRBU1NFUlRfTFQobXNzX2FmdGVyLCBtc3NfYmVmb3JlLCBcXFwibXNzIHJlZHVjZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0xFKG1zc19hZnRlciwgVEVTVF9NU1NfTUFYLCBcXFwibXNzIGJlbG93IHBtdHVcXFwiKTtcXG4rb3V0OlxcbitcXHRjbG9zZShzcnZfY29ubl9mZCk7XFxuK1xcdGNsb3NlKGNsaV9mZCk7XFxuK1xcdGNsb3NlKHNydl9mZCk7XFxuK1xcdHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fZGVzdHJveShza2VsKTtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdHJlbW92ZV9uZXRucyhTRVJWRVJfTlMpO1xcbitvdXRfY2xpZW50X25zOlxcbitcXHRyZW1vdmVfbmV0bnMoQ0xJRU5UX05TKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjNGMwNzU0NWJjOWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jXFxuQEAgLTAsMCArMSwxMjkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRkZWYuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOXFx0KHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgOClcXG4rI2RlZmluZSBJQ01QX0hEUlNfTEVOXFx0KHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSlcXG4rXFxuK19fYmUxNiBzZXJ2ZXJfcG9ydCA9IDA7XFxuK19fdTE2IHBtdHUgPSAwO1xcbitcXG4rbG9uZyBjaGFuZ2VfdGFpbF9yZXQgPSAxO1xcbitsb25nIGFkanVzdF9yb29tX3JldCA9IDA7XFxuK2Jvb2wgaWNtcF9zZW50ID0gZmFsc2U7XFxuK2Jvb2wgaWNtcF9lcnIgPSBmYWxzZTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pXFxuK3tcXG4rXFx0Y3N1bSA9IChjc3VtIFxcdTAwMjYgMHhmZmZmKSArIChjc3VtIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4rXFx0Y3N1bSA9IChjc3VtIFxcdTAwMjYgMHhmZmZmKSArIChjc3VtIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4rXFxuK1xcdHJldHVybiAoX19zdW0xNil+Y3N1bTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Yy9lZ3Jlc3NcXFwiKVxcbitpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0X191OCBzbWFjW0VUSF9BTEVOXSwgZG1hY1tFVEhfQUxFTl07XFxuK1xcdHZvaWQgKmRhdGEsICpkYXRhX2VuZDtcXG4rXFx0c3RydWN0IGljbXBoZHIgKmljbXA7XFxuK1xcdHN0cnVjdCBldGhoZHIgKmV0aDtcXG4rXFx0c3RydWN0IHRjcGhkciAqdGNwO1xcbitcXHRfX2JlMzIgc2FkZHIsIGRhZGRyO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwO1xcbitcXHRfX3dzdW0gY3N1bTtcXG4rXFxuK1xcdGlmIChpY21wX3NlbnQgfHwgaWNtcF9lcnIpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcbitcXHRldGggPSBkYXRhO1xcbitcXHRpZiAoKHZvaWQgKikoZXRoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4rXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXHRpZiAoZXRoLVxcdTAwM2VoX3Byb3RvICE9IGJwZl9odG9ucyhFVEhfUF9JUCkpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdGlwID0gKHZvaWQgKikoZXRoICsgMSk7XFxuK1xcdGlmICgodm9pZCAqKShpcCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFx0aWYgKGlwLVxcdTAwM2VpaGwgIT0gNSB8fCBpcC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdHRjcCA9ICh2b2lkICopKGlwICsgMSk7XFxuK1xcdGlmICgodm9pZCAqKSh0Y3AgKyAxKSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcdGlmICh0Y3AtXFx1MDAzZWRlc3QgIT0gc2VydmVyX3BvcnQpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFx0aWYgKGJwZl9udG9ocyhpcC1cXHUwMDNldG90X2xlbikgXFx1MDAzYz0gc2l6ZW9mKCppcCkgKyB0Y3AtXFx1MDAzZWRvZmYgKiA0KVxcbitcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRfX2J1aWx0aW5fbWVtY3B5KHNtYWMsIGV0aC1cXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcXG4rXFx0X19idWlsdGluX21lbWNweShkbWFjLCBldGgtXFx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xcbitcXHRzYWRkciA9IGlwLVxcdTAwM2VzYWRkcjtcXG4rXFx0ZGFkZHIgPSBpcC1cXHUwMDNlZGFkZHI7XFxuK1xcbitcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xcbitcXHRpZiAoY2hhbmdlX3RhaWxfcmV0KSB7XFxuK1xcdFxcdGljbXBfZXJyID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXHR9XFxuK1xcbitcXHRhZGp1c3Rfcm9vbV9yZXQgPSBicGZfc2tiX2FkanVzdF9yb29tKHNrYiwgSUNNUF9IRFJTX0xFTixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX0FESl9ST09NX01BQyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCk7XFxuK1xcdGlmIChhZGp1c3Rfcm9vbV9yZXQpIHtcXG4rXFx0XFx0aWNtcF9lcnIgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gVENYX0RST1A7XFxuK1xcdH1cXG4rXFxuK1xcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcbitcXHRldGggPSBkYXRhO1xcbitcXHRpcCA9ICh2b2lkICopKGV0aCArIDEpO1xcbitcXHRpY21wID0gKHZvaWQgKikoaXAgKyAxKTtcXG4rXFx0aWYgKCh2b2lkICopaWNtcCArIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4gXFx1MDAzZSBkYXRhX2VuZCkge1xcbitcXHRcXHRpY21wX2VyciA9IHRydWU7XFxuK1xcdFxcdHJldHVybiBUQ1hfRFJPUDtcXG4rXFx0fVxcbitcXG4rXFx0X19idWlsdGluX21lbWNweShldGgtXFx1MDAzZWhfZGVzdCwgc21hYywgRVRIX0FMRU4pO1xcbitcXHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIGRtYWMsIEVUSF9BTEVOKTtcXG4rXFxuK1xcdF9fYnVpbHRpbl9tZW1zZXQoaWNtcCwgMCwgc2l6ZW9mKCppY21wKSk7XFxuK1xcdGljbXAtXFx1MDAzZXR5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDtcXG4rXFx0aWNtcC1cXHUwMDNlY29kZSA9IElDTVBfRlJBR19ORUVERUQ7XFxuK1xcdGljbXAtXFx1MDAzZXVuLmZyYWcubXR1ID0gYnBmX2h0b25zKHBtdHUpO1xcbitcXG4rXFx0X19idWlsdGluX21lbXNldChpcCwgMCwgc2l6ZW9mKCppcCkpO1xcbitcXHRpcC1cXHUwMDNldmVyc2lvbiA9IDQ7XFxuK1xcdGlwLVxcdTAwM2VpaGwgPSA1O1xcbitcXHRpcC1cXHUwMDNldHRsID0gNjQ7XFxuK1xcdGlwLVxcdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fSUNNUDtcXG4rXFx0aXAtXFx1MDAzZXRvdF9sZW4gPSBicGZfaHRvbnMoSUNNUF9IRFJTX0xFTiArIElDTVBfU0FNUExFX0xFTik7XFxuK1xcdGlwLVxcdTAwM2VzYWRkciA9IGRhZGRyO1xcbitcXHRpcC1cXHUwMDNlZGFkZHIgPSBzYWRkcjtcXG4rXFxuK1xcdGNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpY21wLFxcbitcXHRcXHRcXHQgICAgIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xcbitcXHRpY21wLVxcdTAwM2VjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTtcXG4rXFx0Y3N1bSA9IGJwZl9jc3VtX2RpZmYoTlVMTCwgMCwgKF9fYmUzMiAqKWlwLCBzaXplb2YoKmlwKSwgMCk7XFxuK1xcdGlwLVxcdTAwM2VjaGVjayA9IGNzdW1fZm9sZChjc3VtKTtcXG4rXFx0aWNtcF9zZW50ID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIGJwZl9yZWRpcmVjdChza2ItXFx1MDAzZWlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MDYuMjM1MDE2MTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NjcxMjQ3MjQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrYl9jaGFuZ2VfdGFpbFwiLFxuICAgIFwic2tfc2tiX2NoYW5nZV90YWlsXCIsXG4gICAgXCJicGZfc2tiX3RyaW1fcmNzdW1cIixcbiAgICBcIl9fYnBmX3NrYl9taW5fbGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0cmltbWluZyBzZW1hbnRpY3MgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIFNwZWNpZmljYWxseSwgaXQgcmVtb3ZlcyB0aGUgbWluaW11bSBsZW5ndGggY29uc3RyYWludCBiYXNlZCBvbiBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldHMgaW4gX19icGZfc2tiX21pbl9sZW4gYW5kIGluc3RlYWQgcmVzZXRzIHNrYi1cXHUwMDNlaXBfc3VtbWVkIHRvIENIRUNLU1VNX05PTkUgd2hlbiB0cmltbWluZyBwYWNrZXRzIGJlbG93IHRoZSBjaGVja3N1bSBzdGFydC9vZmZzZXQgaW4gYnBmX3NrYl90cmltX3Jjc3VtLiBUaGlzIGNoYW5nZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiByZWFjaGFibGUgQlBGIGhlbHBlciBmdW5jdGlvbnMgKGJwZl9za2JfY2hhbmdlX3RhaWwgYW5kIHNrX3NrYl9jaGFuZ2VfdGFpbCkgYW5kIGFmZmVjdHMgbmV0d29yayBjaGVja3N1bSBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzEyZWFiOWY0ZWM0YTQxYTFkYzhlOWE0ZTQ4Y2E4MmRlNTc4Y2IxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNTo1MzowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0zOTYxLDEyICszOTYxLDYgQEAgc3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuIFx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4gXHR9XG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4tXHRcdG9mZnNldCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArXG4tXHRcdFx0IHNrYi1cdTAwM2Vjc3VtX29mZnNldCArIHNpemVvZihfX3N1bTE2KTtcbi1cdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbi1cdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuLVx0fVxuIFx0cmV0dXJuIG1pbl9sZW47XG4gfVxuIFxuQEAgLTM5ODMsNiArMzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbiBcbiBzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbiB7XG4rXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5ld19sZW4gXHUwMDNjIHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArIHNrYi1cdTAwM2Vjc3VtX29mZnNldCArXG4rXHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbitcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4rXG4gXHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YWNkYmQ1NzU3YTk4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbkBAIC0wLDAgKzEsMTI1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuKyNpbmNsdWRlIFwibmV0d29ya19oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwidGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDTElFTlRfTlNcdFwidGMtY2hhbmdlLXRhaWwtY2xpLW5zXCJcbisjZGVmaW5lIFNFUlZFUl9OU1x0XCJ0Yy1jaGFuZ2UtdGFpbC1zcnYtbnNcIlxuKyNkZWZpbmUgQ0xJRU5UX0lQXHRcIjE5Mi4xNjguMS4xXCJcbisjZGVmaW5lIFNFUlZFUl9JUFx0XCIxOTIuMTY4LjEuMlwiXG4rXG4rI2RlZmluZSBURVNUX1BNVFVcdDEwMDBcbisjZGVmaW5lIFRFU1RfTVNTX01BWFx0KFRFU1RfUE1UVSAtIDIwIC0gMjApXG4rI2RlZmluZSBUSU1FT1VUX01TXHQzMDAwXG4rI2RlZmluZSBYRkVSX0JZVEVTXHQ4MTkyXG4rXG4rdm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIHRjeF9vcHRzKTtcbitcdGludCBtc3NfYmVmb3JlID0gMCwgbXNzX2FmdGVyID0gMCwgaWZpbmRleCwgcG9ydDtcbitcdGludCBzcnZfZmQgPSAtMSwgc3J2X2Nvbm5fZmQgPSAtMSwgY2xpX2ZkID0gLTE7XG4rXHRzdHJ1Y3QgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1ICpza2VsID0gTlVMTDtcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbitcdHN0YXRpYyBjaGFyIGJ1ZltYRkVSX0JZVEVTXTtcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRzc2l6ZV90IGJ5dGVzO1xuK1x0c2l6ZV90IHRvdGFsO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhDTElFTlRfTlMpLCBcIm1ha2UgY2xpZW50IG5zXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKFNFUlZFUl9OUyksIFwibWFrZSBzZXJ2ZXIgbnNcIikpXG4rXHRcdGdvdG8gb3V0X2NsaWVudF9ucztcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuIGNsaWVudCBuc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRTWVMob3V0LCBcImlwIGxpbmsgYWRkIHZldGgxIHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDIgbmV0bnMgXCIgU0VSVkVSX05TKTtcbitcdFNZUyhvdXQsIFwiaXAgLTQgYWRkciBhZGQgXCIgQ0xJRU5UX0lQIFwiLzI0IGRldiB2ZXRoMVwiKTtcbitcdFNZUyhvdXQsIFwiaXAgbGluayBzZXQgdmV0aDEgdXBcIik7XG4rXHRpZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoMVwiKTtcbitcdGlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuK1x0bnN0b2tlbiA9IE5VTEw7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhTRVJWRVJfTlMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3BlbiBzZXJ2ZXIgbnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0U1lTKG91dCwgXCJpcCAtNCBhZGRyIGFkZCBcIiBTRVJWRVJfSVAgXCIvMjQgZGV2IHZldGgyXCIpO1xuK1x0U1lTKG91dCwgXCJpcCBsaW5rIHNldCB2ZXRoMiB1cFwiKTtcbitcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU0VSVkVSX0lQLCAwLCBUSU1FT1VUX01TKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCJzdGFydCBzZXJ2ZXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRuc3Rva2VuID0gTlVMTDtcbitcbitcdHNrZWwgPSB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHVfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW4gYW5kIGxvYWQgc2tlbGV0b25cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzcnZfZmQpO1xuK1x0aWYgKCFBU1NFUlRfR0UocG9ydCwgMCwgXCJnZXQgc2VydmVyIHBvcnRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2VydmVyX3BvcnQgPSBwb3J0O1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcG10dSA9IFRFU1RfUE1UVTtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuIGNsaWVudCBuc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRza2VsLVx1MDAzZWxpbmtzLmNoYW5nZV90YWlsX2ljbXAgPVxuK1x0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVx1MDAzZXByb2dzLmNoYW5nZV90YWlsX2ljbXAsIGlmaW5kZXgsXG4rXHRcdFx0XHRcdFx1MDAyNnRjeF9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmNoYW5nZV90YWlsX2ljbXAsIFwiYXR0YWNoIHRjeFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRjbGlfZmQgPSBjb25uZWN0X3RvX2ZkKHNydl9mZCwgVElNRU9VVF9NUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjbGlfZmQsIFwiY29ubmVjdCB0byBzZXJ2ZXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0c3J2X2Nvbm5fZmQgPSBhY2NlcHQoc3J2X2ZkLCBOVUxMLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9jb25uX2ZkLCBcImFjY2VwdCBjb25uZWN0aW9uXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHNldHRpbWVvKHNydl9jb25uX2ZkLCBUSU1FT1VUX01TKSwgXCJzZXQgc2VydmVyIHRpbWVvdXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKG1zc19iZWZvcmUpO1xuK1x0aWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCBcdTAwMjZtc3NfYmVmb3JlLFxuK1x0XHRcdFx0ICBcdTAwMjZvcHRsZW4pLCBcImdldCBtc3MgYmVmb3JlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJ5dGVzID0gc2VuZChjbGlfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEoYnl0ZXMsIChzc2l6ZV90KXNpemVvZihidWYpLCBcInNlbmQgZGF0YVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHRvdGFsID0gMDsgdG90YWwgXHUwMDNjIHNpemVvZihidWYpOyB0b3RhbCArPSBieXRlcykge1xuK1x0XHRieXRlcyA9IHJlY3Yoc3J2X2Nvbm5fZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0XHRpZiAoYnl0ZXMgXHUwMDNjPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKHRvdGFsLCBzaXplb2YoYnVmKSwgXCJyZWNlaXZlIGRhdGFcIik7XG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWNoYW5nZV90YWlsX3JldCwgXCJjaGFuZ2UgdGFpbFwiKTtcbitcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2VhZGp1c3Rfcm9vbV9yZXQsIFwiYWRqdXN0IHJvb21cIik7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VpY21wX3NlbnQsIFwiaWNtcCBzZW50XCIpO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKG1zc19hZnRlcik7XG4rXHRpZiAoIUFTU0VSVF9PSyhnZXRzb2Nrb3B0KGNsaV9mZCwgSVBQUk9UT19UQ1AsIFRDUF9NQVhTRUcsIFx1MDAyNm1zc19hZnRlcixcbitcdFx0XHRcdCAgXHUwMDI2b3B0bGVuKSwgXCJnZXQgbXNzIGFmdGVyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9MVChtc3NfYWZ0ZXIsIG1zc19iZWZvcmUsIFwibXNzIHJlZHVjZWRcIik7XG4rXHRBU1NFUlRfTEUobXNzX2FmdGVyLCBURVNUX01TU19NQVgsIFwibXNzIGJlbG93IHBtdHVcIik7XG4rb3V0OlxuK1x0Y2xvc2Uoc3J2X2Nvbm5fZmQpO1xuK1x0Y2xvc2UoY2xpX2ZkKTtcbitcdGNsb3NlKHNydl9mZCk7XG4rXHR0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHVfX2Rlc3Ryb3koc2tlbCk7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdHJlbW92ZV9uZXRucyhTRVJWRVJfTlMpO1xuK291dF9jbGllbnRfbnM6XG4rXHRyZW1vdmVfbmV0bnMoQ0xJRU5UX05TKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM0YzA3NTQ1YmM5ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5AQCAtMCwwICsxLDEyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rXG4rI2RlZmluZSBJQ01QX1NBTVBMRV9MRU5cdChzaXplb2Yoc3RydWN0IGlwaGRyKSArIDgpXG4rI2RlZmluZSBJQ01QX0hEUlNfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpKVxuK1xuK19fYmUxNiBzZXJ2ZXJfcG9ydCA9IDA7XG4rX191MTYgcG10dSA9IDA7XG4rXG4rbG9uZyBjaGFuZ2VfdGFpbF9yZXQgPSAxO1xuK2xvbmcgYWRqdXN0X3Jvb21fcmV0ID0gMDtcbitib29sIGljbXBfc2VudCA9IGZhbHNlO1xuK2Jvb2wgaWNtcF9lcnIgPSBmYWxzZTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBjc3VtKVxuK3tcbitcdGNzdW0gPSAoY3N1bSBcdTAwMjYgMHhmZmZmKSArIChjc3VtIFx1MDAzZVx1MDAzZSAxNik7XG4rXHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgKyAoY3N1bSBcdTAwM2VcdTAwM2UgMTYpO1xuK1xuK1x0cmV0dXJuIChfX3N1bTE2KX5jc3VtO1xuK31cbitcbitTRUMoXCJ0Yy9lZ3Jlc3NcIilcbitpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0X191OCBzbWFjW0VUSF9BTEVOXSwgZG1hY1tFVEhfQUxFTl07XG4rXHR2b2lkICpkYXRhLCAqZGF0YV9lbmQ7XG4rXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcDtcbitcdHN0cnVjdCBldGhoZHIgKmV0aDtcbitcdHN0cnVjdCB0Y3BoZHIgKnRjcDtcbitcdF9fYmUzMiBzYWRkciwgZGFkZHI7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwO1xuK1x0X193c3VtIGNzdW07XG4rXG4rXHRpZiAoaWNtcF9zZW50IHx8IGljbXBfZXJyKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXG4rXHRldGggPSBkYXRhO1xuK1x0aWYgKCh2b2lkICopKGV0aCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvICE9IGJwZl9odG9ucyhFVEhfUF9JUCkpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcbitcdGlwID0gKHZvaWQgKikoZXRoICsgMSk7XG4rXHRpZiAoKHZvaWQgKikoaXAgKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmIChpcC1cdTAwM2VpaGwgIT0gNSB8fCBpcC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0dGNwID0gKHZvaWQgKikoaXAgKyAxKTtcbitcdGlmICgodm9pZCAqKSh0Y3AgKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmICh0Y3AtXHUwMDNlZGVzdCAhPSBzZXJ2ZXJfcG9ydClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0aWYgKGJwZl9udG9ocyhpcC1cdTAwM2V0b3RfbGVuKSBcdTAwM2M9IHNpemVvZigqaXApICsgdGNwLVx1MDAzZWRvZmYgKiA0KVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRfX2J1aWx0aW5fbWVtY3B5KHNtYWMsIGV0aC1cdTAwM2VoX3NvdXJjZSwgRVRIX0FMRU4pO1xuK1x0X19idWlsdGluX21lbWNweShkbWFjLCBldGgtXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4rXHRzYWRkciA9IGlwLVx1MDAzZXNhZGRyO1xuK1x0ZGFkZHIgPSBpcC1cdTAwM2VkYWRkcjtcbitcbitcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiArIElDTVBfU0FNUExFX0xFTiwgMCk7XG4rXHRpZiAoY2hhbmdlX3RhaWxfcmV0KSB7XG4rXHRcdGljbXBfZXJyID0gdHJ1ZTtcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0fVxuK1xuK1x0YWRqdXN0X3Jvb21fcmV0ID0gYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIElDTVBfSERSU19MRU4sXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9BREpfUk9PTV9NQUMsXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpO1xuK1x0aWYgKGFkanVzdF9yb29tX3JldCkge1xuK1x0XHRpY21wX2VyciA9IHRydWU7XG4rXHRcdHJldHVybiBUQ1hfRFJPUDtcbitcdH1cbitcbitcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuK1x0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbitcbitcdGV0aCA9IGRhdGE7XG4rXHRpcCA9ICh2b2lkICopKGV0aCArIDEpO1xuK1x0aWNtcCA9ICh2b2lkICopKGlwICsgMSk7XG4rXHRpZiAoKHZvaWQgKilpY21wICsgc2l6ZW9mKCppY21wKSArIElDTVBfU0FNUExFX0xFTiBcdTAwM2UgZGF0YV9lbmQpIHtcbitcdFx0aWNtcF9lcnIgPSB0cnVlO1xuK1x0XHRyZXR1cm4gVENYX0RST1A7XG4rXHR9XG4rXG4rXHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX2Rlc3QsIHNtYWMsIEVUSF9BTEVOKTtcbitcdF9fYnVpbHRpbl9tZW1jcHkoZXRoLVx1MDAzZWhfc291cmNlLCBkbWFjLCBFVEhfQUxFTik7XG4rXG4rXHRfX2J1aWx0aW5fbWVtc2V0KGljbXAsIDAsIHNpemVvZigqaWNtcCkpO1xuK1x0aWNtcC1cdTAwM2V0eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7XG4rXHRpY21wLVx1MDAzZWNvZGUgPSBJQ01QX0ZSQUdfTkVFREVEO1xuK1x0aWNtcC1cdTAwM2V1bi5mcmFnLm10dSA9IGJwZl9odG9ucyhwbXR1KTtcbitcbitcdF9fYnVpbHRpbl9tZW1zZXQoaXAsIDAsIHNpemVvZigqaXApKTtcbitcdGlwLVx1MDAzZXZlcnNpb24gPSA0O1xuK1x0aXAtXHUwMDNlaWhsID0gNTtcbitcdGlwLVx1MDAzZXR0bCA9IDY0O1xuK1x0aXAtXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7XG4rXHRpcC1cdTAwM2V0b3RfbGVuID0gYnBmX2h0b25zKElDTVBfSERSU19MRU4gKyBJQ01QX1NBTVBMRV9MRU4pO1xuK1x0aXAtXHUwMDNlc2FkZHIgPSBkYWRkcjtcbitcdGlwLVx1MDAzZWRhZGRyID0gc2FkZHI7XG4rXG4rXHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaWNtcCxcbitcdFx0XHQgICAgIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xuK1x0aWNtcC1cdTAwM2VjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTtcbitcdGNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpcCwgc2l6ZW9mKCppcCksIDApO1xuK1x0aXAtXHUwMDNlY2hlY2sgPSBjc3VtX2ZvbGQoY3N1bSk7XG4rXHRpY21wX3NlbnQgPSB0cnVlO1xuK1x0cmV0dXJuIGJwZl9yZWRpcmVjdChza2ItXHUwMDNlaWZpbmRleCwgQlBGX0ZfSU5HUkVTUyk7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjA2LjIzNTAxNzM0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NTA0ODY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTmV0d29yayBGaWx0ZXIgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaG93IHRoZXkgYWZmZWN0IHRoZSBCUEYgZmlsdGVyaW5nIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIHR3ZWFrZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgYSBzZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBgX19icGZfc2tiX21pbl9sZW5gLiBUaGUgb3JpZ2luYWwgY29kZSBzZWdtZW50IHdhcyBjaGVja2luZyBmb3IgYENIRUNLU1VNX1BBUlRJQUxgIGFuZCBjYWxjdWxhdGluZyBhIG1pbmltdW0gbGVuZ3RoIGJhc2VkIG9uIGNoZWNrc3VtIG9mZnNldC4gU2VlbXMgbGlrZSBpdCB3YXMgcmVsYXRlZCB0byBwYXJ0aWFsbHkgY2hlY2tzdW1tZWQgcGFja2V0cywgd2hpY2ggaXMgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGVjayB3YXMgZGVlbWVkIHVubmVjZXNzYXJ5LiBQZXJoYXBzIHRoaXMgbG9naWMgaXMgaGFuZGxlZCBlbHNld2hlcmUgbm93LCBvciBtYXliZSBpdCdzIGJlaW5nIHNpbXBsaWZpZWQuXG5cblRoZW4sIGluIGBicGZfc2tiX3RyaW1fcmNzdW1gLCB3ZSBzZWUgdGhlIGFkZGl0aW9uIG9mIGEgY29uZGl0aW9uYWwgY2hlY2suIFRoaXMgY29kZSBhbHNvIGFwcGVhcnMgcmVsYXRlZCB0byBgQ0hFQ0tTVU1fUEFSVElBTGAuIElmIHRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBTS0IgaXMgc21hbGxlciB0aGFuIHNvbWUgY2hlY2tzdW0tcmVsYXRlZCBvZmZzZXQsIHRoZW4gYHNrYi1cdTAwM2VpcF9zdW1tZWRgIGlzIHNldCB0byBgQ0hFQ0tTVU1fTk9ORWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGhhbmRsaW5nIHRoZSBjaGVja3N1bSB1cGRhdGUgYmV0dGVyIHRoYW4gYmVmb3JlIG9yIHBlcmhhcHMgc2V0dGluZyBpdCB0byBub25lLCBvciBwZXJoYXBzIGRvaW5nIHNvbWUgZm9ybSBvZiByZWNvbXB1dGF0aW9uLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGFzIHRoaXMgY291bGQgYWRkIGxhdGVuY3kgb3IgcmVzdWx0IGluIGluY29ycmVjdCBwYWNrZXRzLlxuXG5UbyBmdWxseSBncmFzcCB0aGUgaW50ZW50LCBJIHNob3VsZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbnRlbnQgaGVyZS4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZmluZCB0aGUgY2FsbGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QgaW4gdGhlIG92ZXJhbGwgQlBGIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IHRvIGRldGVybWluZSB0aGUgaW1wYWN0LlxuSSBtdXN0IGFsc28gY2hlY2sgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIEknbGwgd2FudCB0byBzZWUgd2hhdCB0aGVzZSB0ZXN0cyBjb3Zlci4gQXJlIHRoZXkgdmFsaWRhdGluZyB0aGUgdHJpbW1pbmcgYW5kIGNoZWNrc3VtIGhhbmRsaW5nIGluIHZhcmlvdXMgc2NlbmFyaW9zPyBBcmUgdGhleSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnM/IFRoZXkgc2hvdWxkIGJlIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0LlxuXG5PdmVyYWxsLCBpdCBzZWVtcyB0aGlzIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGhhbmRsaW5nIG9mIGNoZWNrc3VtcyB3aXRoaW4gdGhlIEJQRiBmaWx0ZXJpbmcgcGlwZWxpbmUsIGFuZCBJJ2xsIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBjb250ZXh0IGFuZCB0ZXN0cyB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1MzoxMi42ODU1MDY3NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk1MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk1MDpcXHR9O1xcbjM5NTE6XFx0XFxuMzk1MjpcXHRzdGF0aWMgdTMyIF9fYnBmX3NrYl9taW5fbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMzk1MzpcXHR7XFxuMzk1NDpcXHRcXHRpbnQgb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuMzk1NTpcXHRcXHR1MzIgbWluX2xlbiA9IDA7XFxuMzk1NjpcXHRcXG4zOTU3OlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSAwKVxcbjM5NTg6XFx0XFx0XFx0bWluX2xlbiA9IG9mZnNldDtcXG4zOTU5OlxcdFxcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpIHtcXG4zOTYwOlxcdFxcdFxcdG9mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuMzk2MTpcXHRcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgMClcXG4zOTYyOlxcdFxcdFxcdFxcdG1pbl9sZW4gPSBvZmZzZXQ7XFxuMzk2MzpcXHRcXHR9XFxuMzk2NDpcXHRcXHRyZXR1cm4gbWluX2xlbjtcXG4zOTY1OlxcdH1cXG4zOTY2OlxcdFxcbjM5Njc6XFx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuMzk2ODpcXHR7XFxuMzk2OTpcXHRcXHR1bnNpZ25lZCBpbnQgb2xkX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbjM5NzA6XFx0XFx0aW50IHJldDtcXG4zOTcxOlxcdFxcbjM5NzI6XFx0XFx0cmV0ID0gX19za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xcbjM5NzM6XFx0XFx0aWYgKCFyZXQpXFxuMzk3NDpcXHRcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VkYXRhICsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xcbjM5NzU6XFx0XFx0cmV0dXJuIHJldDtcXG4zOTc2OlxcdH1cXG4zOTc3OlxcdFxcbjM5Nzg6XFx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuMzk3OTpcXHR7XFxuMzk4MDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNlxcbjM5ODE6XFx0XFx0ICAgIG5ld19sZW4gXFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgKyBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0ICtcXG4zOTgyOlxcdFxcdFxcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcXG4zOTgzOlxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcXG4zOTg0OlxcdFxcbjM5ODU6XFx0XFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG4zOTg2OlxcdH1cXG4zOTg3OlxcdFxcbjM5ODg6XFx0c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbjM5ODk6XFx0XFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbjM5OTA6XFx0e1xcbjM5OTE6XFx0XFx0dTMyIG1heF9sZW4gPSBCUEZfU0tCX01BWF9MRU47XFxuMzk5MjpcXHRcXHR1MzIgbWluX2xlbiA9IF9fYnBmX3NrYl9taW5fbGVuKHNrYik7XFxuMzk5MzpcXHRcXHRpbnQgcmV0O1xcbjM5OTQ6XFx0XFxuMzk5NTpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcXHUwMDNlIG1heF9sZW4gfHwgbmV3X2xlbiBcXHUwMDNjIG1pbl9sZW4pKVxcbjM5OTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzk5NzpcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbjM5OTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4zOTk5OlxcdFxcbjQwMDA6XFx0XFx0LyogVGhlIGJhc2ljIGlkZWEgb2YgdGhpcyBoZWxwZXIgaXMgdGhhdCBpdCdzIHBlcmZvcm1pbmcgdGhlXFxuNDAwMTpcXHRcXHQgKiBuZWVkZWQgd29yayB0byBlaXRoZXIgZ3JvdyBvciB0cmltIGFuIHNrYiwgYW5kIGVCUEYgcHJvZ3JhbVxcbjQwMDI6XFx0XFx0ICogcmV3cml0ZXMgdGhlIHJlc3QgdmlhIGhlbHBlcnMgbGlrZSBicGZfc2tiX3N0b3JlX2J5dGVzKCksXFxuNDAwMzpcXHRcXHQgKiBicGZfbFhfY3N1bV9yZXBsYWNlKCkgYW5kIG90aGVycyByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3XFxuNDAwNDpcXHRcXHQgKiBidWZmZXIgaGVyZS4gVGhpcyBvbmUgaXMgYSBzbG93IHBhdGggaGVscGVyIGFuZCBpbnRlbmRlZFxcbjQwMDU6XFx0XFx0ICogZm9yIHJlcGxpZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzLlxcbjQwMDY6XFx0XFx0ICpcXG40MDA3OlxcdFxcdCAqIExpa2UgaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8oKSwgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmF0aGVyXFxuNDAwODpcXHRcXHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXFxuNDAwOTpcXHRcXHQgKiB0byBzZXBhcmF0ZSBjb25jZXJucyBhcyBpbiBicGZfc2tiX3N0b3JlX2J5dGVzKCkgc2hvdWxkIG9ubHlcXG40MDEwOlxcdFxcdCAqIGJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgYnVmZmVycy5cXG40MDExOlxcdFxcdCAqXFxuNDAxMjpcXHRcXHQgKiBJdCdzIHJlYWxseSBleHBlY3RlZCB0byBiZSBhIHNsb3cgcGF0aCBvcGVyYXRpb24gaGVyZSBmb3JcXG40MDEzOlxcdFxcdCAqIGNvbnRyb2wgbWVzc2FnZSByZXBsaWVzLCBzbyB3ZSdyZSBpbXBsaWNpdGx5IGxpbmVhcml6aW5nLFxcbjQwMTQ6XFx0XFx0ICogdW5jbG9uaW5nIGFuZCBkcm9wIG9mZmxvYWRzIGZyb20gdGhlIHNrYiBieSB0aGlzLlxcbjQwMTU6XFx0XFx0ICovXFxuNDAxNjpcXHRcXHRyZXQgPSBfX2JwZl90cnlfbWFrZV93cml0YWJsZShza2IsIHNrYi1cXHUwMDNlbGVuKTtcXG40MDE3OlxcdFxcdGlmICghcmV0KSB7XFxuNDAxODpcXHRcXHRcXHRpZiAobmV3X2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjQwMTk6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjEyLjY4NTkwNTA4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMzIzODY0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gVGFpbCBDaGFuZ2VzKipcblxuQWxyaWdodCwgSSdtIGF0IHRoZSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBgX19icGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYGJwZl9za2JfY2hhbmdlX3RhaWxgIGRlZmluaXRpb25zLiBJIGNhbid0IGp1c3Qgb3BlcmF0ZSBpbiBhIHZhY3V1bSBoZXJlLiBUbyBmdWxseSBncmFzcCB0aGVpciBiZWhhdmlvciBhbmQgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGFkdmFuY2VkIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZyB1bmRlciB0aGUgaG9vZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgU0tCIG1hbmlwdWxhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIGRpZyBpbiEgTGV0J3Mgc2VlIGhvdyB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIGFuZCBob3cgdGhleSByZWxhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjE2LjAxODI5MzcwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDE4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MDE4OlxcdFxcdFxcdGlmIChuZXdfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuNDAxOTpcXHRcXHRcXHRcXHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG40MDIwOlxcdFxcdFxcdGVsc2UgaWYgKG5ld19sZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbilcXG40MDIxOlxcdFxcdFxcdFxcdHJldCA9IGJwZl9za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xcbjQwMjI6XFx0XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgc2tiX2lzX2dzbyhza2IpKVxcbjQwMjM6XFx0XFx0XFx0XFx0c2tiX2dzb19yZXNldChza2IpO1xcbjQwMjQ6XFx0XFx0fVxcbjQwMjU6XFx0XFx0cmV0dXJuIHJldDtcXG40MDI2OlxcdH1cXG40MDI3OlxcdFxcbjQwMjg6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcXG40MDI5OlxcdFxcdCAgIHU2NCwgZmxhZ3MpXFxuNDAzMDpcXHR7XFxuNDAzMTpcXHRcXHRpbnQgcmV0ID0gX19icGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbmV3X2xlbiwgZmxhZ3MpO1xcbjQwMzI6XFx0XFxuNDAzMzpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNDAzNDpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMzU6XFx0fVxcbjQwMzY6XFx0XFxuNDAzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxuNDAzODpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9jaGFuZ2VfdGFpbCxcXG40MDM5OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuNDA0MDpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbjQwNDE6XFx0XFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuNDA0MjpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuNDA0MzpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuNDA0NDpcXHR9O1xcbjQwNDU6XFx0XFxuNDA0NjpcXHRCUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXFxuNDA0NzpcXHRcXHQgICB1NjQsIGZsYWdzKVxcbjQwNDg6XFx0e1xcbjQwNDk6XFx0XFx0cmV0dXJuIF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcXG40MDUwOlxcdH1cXG40MDUxOlxcdFxcbjQwNTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxuNDA1MzpcXHRcXHQuZnVuY1xcdFxcdD0gc2tfc2tiX2NoYW5nZV90YWlsLFxcbjQwNTQ6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG40MDU1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuNDA1NjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG40MDU3OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MTYuMDE4NjYzNTM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMDYwMzY2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGJwZl9za2JfY2hhbmdlX3RhaWxgIGlzIGEgQlBGIGhlbHBlci4gSSBrbm93IGl0J3MgY2FsbGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdGhhdCBhdHRhY2ggdG8gdGhpbmdzIGxpa2UgYHRjYCBvciBgc2tfc2tiYC4gVGhpcyBpbW1lZGlhdGVseSBwdXRzIGl0IGluIG15IFwicG90ZW50aWFsbHkgaW50ZXJlc3RpbmdcIiBjYXRlZ29yeSBiZWNhdXNlIEJQRiBwcm9ncmFtcyBhcmUgYSBrbm93biBhdHRhY2sgc3VyZmFjZSBhbmQgdGhhdCBhcmVhIGhhcyBzZWVuIGl0cyBmYWlyIHNoYXJlIG9mIHZ1bG5lcmFiaWxpdGllcy4gSXQgbWFuaXB1bGF0ZXMgYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgYGJwZl9za2JfdHJpbV9yY3N1bWAuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIG1ha2VzIGl0IHJlYWNoYWJsZSBjb2RlIGFuZCwgaW1wb3J0YW50bHksIGNvZGUgdGhhdCdzIGFscmVhZHkgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBrZXJuZWwgYW5kIHN5emthbGxlciBmdXp6aW5nLlxuXG5Ob3csIHRvIGRldGVybWluZSBpZiBpdCdzIFwiV29ydGhGdXp6aW5nLFwiIGxldCdzIGV2YWx1YXRlOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbToqKiBJdCdzIGFic29sdXRlbHkgY29yZS4gV2UncmUgdGFsa2luZyBCUEYgaGVscGVyIGZ1bmN0aW9ucywgY29yZSBuZXR3b3JraW5nLCBhbmQgU0tCIG1hbmlwdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBhbmQgYGJwZl9za2JfdHJpbV9yY3N1bWAuXG4qICAgKipSZWFjaGFibGU6KiogQ2xlYXJseSByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBgdGNgLCBzb2NrZXRzLCBldGMuIFRoYXQncyBhIGh1Z2UgcG9zaXRpdmUuXG4qICAgKipTZW1hbnRpYyBDaGFuZ2VzOioqIFRoaXMgbW9kaWZpZXMgaG93IFNLQiBjaGVja3N1bW1pbmcgKGBza2ItXHUwMDNlaXBfc3VtbWVkYCkgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBoYXMgdG8gZG8gd2l0aCB0cmltbWluZyBhbiBTS0Igd2l0aCBgQ0hFQ0tTVU1fUEFSVElBTGAgYmVsb3cgdGhlIGNoZWNrc3VtIG9mZnNldCwgYW5kIHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIHJlc3RyaWN0aW9uIHRoYXQgcHJldmlvdXNseSBwcmV2ZW50ZWQgdHJpbW1pbmcgcGFja2V0cyB3aXRoIGBDSEVDS1NVTV9QQVJUSUFMYCBwYXN0IHRoZSBjaGVja3N1bSBvZmZzZXQuXG4qICAgKipJbXBhY3Q6KiogVGhpcyBpcyBzaWduaWZpY2FudCEgV2UncmUgY2hhbmdpbmcgcGFja2V0IG1hbmlwdWxhdGlvbiBzZW1hbnRpY3MgYW5kIFNLQiBzdGF0ZS4gVGhlIGZhY3QgdGhhdCBpdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCBjaGVja3N1bW1pbmcgYW5kIHN1YnNlcXVlbnQgbmV0d29yayBzdGFjayBwcm9jZXNzaW5nIGlzIGEgaHVnZSByZWQgZmxhZyB0aGF0IGluZGljYXRlcyBpdOKAmXMgV29ydGhGdXp6aW5nLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IHRydWUsIHRoaXMgaXMgaW1wb3J0YW50IGFuZCBuZWVkcyBhdHRlbnRpb24uXG5cbk5leHQgc3RlcDogTGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzP1xuKiAgIGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgX19icGZfc2tiX2NoYW5nZV90YWlsYCBpcyBzdGF0aWMgaW5saW5lLCB3aGljaCBtZWFucyBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBza19za2JfY2hhbmdlX3RhaWxgIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHRoYXQgaXMgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uXG4qICAgYGJwZl9za2JfdHJpbV9yY3N1bWAuIFdhaXQgYSBtaW51dGUsIHRoYXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW5zaWRlIGBmaWx0ZXIuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBicGZfc2tiX3RyaW1fcmNzdW1gIGlzIHN0YXRpYyBhbmQgd2hlcmUgZWxzZSBpdCBtaWdodCBiZSB1c2VkLiBJJ2xsIG5lZWQgdG8gdXNlIGdyZXBwZXIgdG8gc2VlIGhvdyBpdCdzIGNhbGxlZCBhbmQgYnkgd2hhdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgZ29vZCBmdXp6aW5nIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1MzoyNi4yMjQ3MDE5OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2OTQzNjE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tiX3RyaW1fcmNzdW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Mzk2Nz1zdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Mzk3ODpzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTc5LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM5ODg9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDAyMC1cXHRcXHRlbHNlIGlmIChuZXdfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VsZW4pXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAyMTpcXHRcXHRcXHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDIyLVxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHNrYl9pc19nc28oc2tiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MjguMzk0MTQyOTUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwODQ0MDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFRhaWwtQ2hhbmdpbmcgTWVjaGFuaXNtcyBpbiBCUEYqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIGRlZmluZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYEJQRl9DQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmdW5jdGlvbiBzeW1ib2wsIG9yIGl0cyBwb3RlbnRpYWwgYWxpYXNlcyBsaWtlIGBfX19fYnBmX3NrYl9jaGFuZ2VfdGFpbGAgb3IganVzdCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCAuLi4pYCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFuYWx5c2lzLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBvdGhlciBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYWxsIHJlbGF0ZWQgc3ltYm9scyBhbmQgd2hhdCB0aGV5IGRvLiBJIGtub3cgdGhhdCBsb29raW5nIGF0IHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gYW5kIHVzZSBjYXNlIGZvciBjaGFuZ2luZyB0aGUgdGFpbCBvZiBhbiBTS0IgZnJvbSB3aXRoaW4gYSBCUEYgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MjgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MzAuODAyNTg1MTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIxMzI3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za2JfY2hhbmdlX3RhaWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjMtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6Mjc2NDogKiBsb25nIGJwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbiwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNzY1LSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zOTc4PXN0YXRpYyBpbnQgYnBmX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzk4Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzozOTg4OnN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg5LVxcdFxcdFxcdFxcdFxcdHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjctXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAyODpCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjktXFx0ICAgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy00MDMwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo0MDMxOlxcdGludCByZXQgPSBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDAzMi1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzNzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzODpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9jaGFuZ2VfdGFpbCxcXG5uZXQvY29yZS9maWx0ZXIuYy00MDM5LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00MDQ2PUJQRl9DQUxMXzMoc2tfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDgte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQwNDk6XFx0cmV0dXJuIF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDUwLX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQwNjE9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBoZWFkX3Jvb20sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MDc4LVxcdFxcdCAqIHNrYi1cXHUwMDNlcHJvdG9jb2wgbmV0d29yayBoZWFkZXIsIGV0Yywgc3RheSBhcyBpcy5cXG5uZXQvY29yZS9maWx0ZXIuYzo0MDc5OlxcdFxcdCAqIENvbXBhcmVkIHRvIGJwZl9za2JfY2hhbmdlX3RhaWwoKSwgd2UncmUgbW9yZVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwODAtXFx0XFx0ICogZmxleGlibGUgZHVlIHRvIG5vdCBuZWVkaW5nIHRvIGxpbmVhcml6ZSBvclxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NjU2LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTgtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDIwLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwMjE6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMjItXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjc2My0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyNzY0OiAqIGxvbmcgYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuLCB1NjQgZmxhZ3MpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjUtICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYz0yMT1pbnQgcHJvZ19za2JfdmVyZGljdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzItXFx0aWYgKGRhdGFbMF0gPT0gJ1QnKSB7IC8qIFRyaW0gdGhlIHBhY2tldCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYzozMzpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSAxLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzQtXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jLTM1LVxcdH0gZWxzZSBpZiAoZGF0YVswXSA9PSAnRycpIHsgLyogR3JvdyB0aGUgcGFja2V0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jOjM2OlxcdFxcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXFx1MDAzZWxlbiArIDEsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy0zNy1cXHRcXHRyZXR1cm4gU0tfUEFTUztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzgtXFx0fSBlbHNlIGlmIChkYXRhWzBdID09ICdFJykgeyAvKiBFcnJvciAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYzozOTpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgQlBGX1NLQl9NQVhfTEVOLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtNDAtXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYz01ND1pbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMtNTUte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jOjU2OlxcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXFx1MDAzZWxlbiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMtNTctXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYz01OT1pbnQgY2hhbmdlX3RhaWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy04Ni1cXHRpZiAocGF5bG9hZFswXSA9PSAnVCcpIHsgLyogVHJpbSB0aGUgcGFja2V0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo4NzpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbGVuIC0gMSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy04OC1cXHRcXHRpZiAoIWNoYW5nZV90YWlsX3JldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjg5OlxcdFxcdFxcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBsZW4sIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTAtXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTEtXFx0fSBlbHNlIGlmIChwYXlsb2FkWzBdID09ICdHJykgeyAvKiBHcm93IHRoZSBwYWNrZXQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjkyOlxcdFxcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBsZW4gKyAxLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTkzLVxcdFxcdGlmICghY2hhbmdlX3RhaWxfcmV0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6OTQ6XFx0XFx0XFx0YnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIGxlbiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05NS1cXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05Ni1cXHR9IGVsc2UgaWYgKHBheWxvYWRbMF0gPT0gJ0UnKSB7IC8qIEVycm9yICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo5NzpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgQlBGX1NLQl9NQVhfTEVOLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTk4LVxcdFxcdHJldHVybiBUQ1hfUEFTUztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTk5LVxcdH0gZWxzZSBpZiAocGF5bG9hZFswXSA9PSAnWicpIHsgLyogWmVybyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6MTAwOlxcdFxcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCAwLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTEwMS1cXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmM9MzY9aW50IGNoYW5nZV90YWlsX2ljbXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jLTc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYzo3ODpcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYy03OS1cXHRpZiAoY2hhbmdlX3RhaWxfcmV0KSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jPTEyNj1zdGF0aWMgaW50IHRjcF9yZWxvYWRfaGVhZGVycyhzdHJ1Y3QgdGNwX3N5bmNvb2tpZSAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzYtXFx0LyogTmVlZGVkIHRvIGNhbGN1bGF0ZSBjc3VtIGFuZCBwYXJzZSBUQ1Agb3B0aW9ucy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jOjEzNzpcXHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgtXFx1MDAzZXNrYiwgZGF0YV9sZW4gKyA2MCAtIGN0eC1cXHUwMDNldGNwLVxcdTAwM2Vkb2ZmICogNCwgMCkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzgtXFx0XFx0Z290byBlcnI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jPTQwMT1zdGF0aWMgaW50IHRjcF9oYW5kbGVfc3luKHN0cnVjdCB0Y3Bfc3luY29va2llICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jOjQ1NjpcXHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgtXFx1MDAzZXNrYiwgKGxvbmcpY3R4LVxcdTAwM2VwdHIzMiAtIChsb25nKWN0eC1cXHUwMDNlZXRoLCAwKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1Ny1cXHRcXHRnb3RvIGVycjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM9NjM1PWludCBoZWxwZXJfc2tiX2NoYW5nZV9oZWFkX3RhaWwoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy02NTUtXFx0LyogUmVzZXJ2ZSA0ayBleHRyYSBieXRlcyBpbiB0aGUgYmFjayB0byB0cmlnZ2VyIGhlYWQgcmVhbGxvY2F0aW9uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo2NTY6XFx0ZXJyID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgsIGN0eC1cXHUwMDNlbGVuICsgNDA5NiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy02NTctXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jPTU3OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzeW5jb29raWVfaGFuZGxlX3N5bihzdHJ1Y3QgaGVhZGVyX3BvaW50ZXJzICpoZHIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03MjEtXFx0fSBlbHNlIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYzo3MjI6XFx0XFx0aWYgKGJwZl9za2JfY2hhbmdlX3RhaWwoY3R4LCBuZXdfcGt0X3NpemUsIDApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jLTcyMy1cXHRcXHRcXHRyZXR1cm4gWERQX0FCT1JURUQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYz03NTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgc3luY29va2llX3BhcnQxKHZvaWQgKmN0eCwgdm9pZCAqZGF0YSwgdm9pZCAqZGF0YV9lbmQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmM6NzgwOlxcdFxcdGlmIChicGZfc2tiX2NoYW5nZV90YWlsKGN0eCwgb2xkX2xlbiArIFRDUF9NQVhMRU4gLSBoZHItXFx1MDAzZXRjcF9sZW4sIDApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jLTc4MS1cXHRcXHRcXHRyZXR1cm4gWERQX0FCT1JURUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjMyLjUyMzkxOTM3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgyNjk5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMgZm9yIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb3IgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgZnVuY3Rpb25zLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB3aGF0IGtlcm5lbCBjb25maWcgb3B0aW9ucyBhcmUgKnJlcXVpcmVkKiB0byBlbmFibGUgb3IgYnVpbGQgdGhlc2UgZnVuY3Rpb25hbGl0aWVzLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgZm9yIHRoaXMgaW5mbyBhcmUgdGhlIG1ha2VmaWxlcyBvciBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmtpbmcgY29yZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgZmlyc3QsIHRoYXQncyBhbG1vc3QgYWx3YXlzIGEgcmVsaWFibGUgcGxhY2UgdG8gZ2V0IGNsdWVzIGFib3V0IGRlcGVuZGVuY2llcy4gSWYgSSBkb24ndCBmaW5kIHRoZSBhbnN3ZXJzIGltbWVkaWF0ZWx5IHRoZXJlLCBJIHNob3VsZCBjaGVjayB0aGUgY29ycmVzcG9uZGluZyBLY29uZmlnIGZpbGVzLCBzdWNoIGFzIGBuZXQvS2NvbmZpZ2AsIGBpbml0L0tjb25maWdgLCBvciBwb3RlbnRpYWxseSBldmVuIGBrZXJuZWwvYnBmL0tjb25maWdgLCBzaW5jZSBCUEYgaXMsIGFmdGVyIGFsbCwgZnVuZGFtZW50YWxseSBpbnZvbHZlZC4gSXQncyBhIHN5c3RlbWF0aWMgYXBwcm9hY2ggLSBsb29rIGZvciB0aGUgb2J2aW91cyBhbmQgdGhlbiBkcmlsbCBkb3duIGFzIG5lZWRlZC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODQzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MzUuMDA2NjIxOTg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIxMjM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcXHRcXHRcXHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy04Ny0gKlxcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXFx1MDAzY2xhZm9yZ2VAbmV0ZmlsdGVyLm9yZ1xcdTAwM2UgMDQwNDE5XFxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFxcdTAwM2Nhcm9uQGhwLmNvbVxcdTAwM2UgMDQwNjA0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjM1LjA1NDg0MTQzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTk1MDkyMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCBidWlsZHMgdGhlIG5ldHdvcmsgZmlsdGVyaW5nIG9iamVjdCwgc3BlY2lmaWNhbGx5IGBuZXQvY29yZS9maWx0ZXIub2AuIFRoZSBNYWtlZmlsZSBpbmRpY2F0ZXMgdGhhdCBpdCdzIGluY2x1ZGVkIHVzaW5nIGBvYmoteWAgd2l0aGluIGBuZXQvY29yZS9NYWtlZmlsZWAsIHdoaWNoIG1lYW5zIGl0J3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBUaGF0IHBhcmVudCBkaXJlY3RvcnkgaXMgY29uZGl0aW9uZWQgb24gYENPTkZJR19ORVRgLiBHb3QgaXQuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IEJQRiBzeXNjYWxsIHN1cHBvcnQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIElzIGl0IGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGRpcmVjdGx5LCBvciBkb2VzIGl0IGFsc28gZGVwZW5kIG9uIHRoZSBvdmVyYXJjaGluZyBgQ09ORklHX05FVGAgY29uZmlndXJhdGlvbj8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyB0byBrbm93IGZvciBzdXJlLiBJdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2Agc291cmNlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcywgbGlrZSBgI2lmZGVmIENPTkZJR18uLi5gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgZnVuY3Rpb24sIGFuZCBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgQlBGIHN1cHBvcnQgb3IgZXZlbiB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrIG1pZ2h0IGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo0MC4yNDk5MzU2NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzUwMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NDk1PXN0YXRpYyBib29sIGNvbnZlcnRfYnBmX2xkX2FicyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKippbnNucClcXG5uZXQvY29yZS9maWx0ZXIuYy00OTYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5NzpcXHRjb25zdCBib29sIHVuYWxpZ25lZF9vayA9IElTX0JVSUxUSU4oQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OC1cXHRpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKEJQRl9TSVpFKGZwLVxcdTAwM2Vjb2RlKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNjgxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNjgzLXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjg0OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtMTY4NS1cXHQvKiBBdm9pZCBhIHNwbGF0IGluIHBza2JfbWF5X3B1bGxfcmVhc29uKCkgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIyMDc9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMjE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTctc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIzMTM9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMxOC19XFxubmV0L2NvcmUvZmlsdGVyLmM6MjMxOTojZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjQyND1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDI5LX1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MzEtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX21zZ19wb3BfZGF0YV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MzE5MzojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTQtQlBGX0NBTExfMChicGZfZ2V0X2Nncm91cF9jbGFzc2lkX2N1cnIpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTMzPUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTM1OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MzYtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01MTc5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjUxODA6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXFxubmV0L2NvcmUvZmlsdGVyLmMtNTE4MS1zdGF0aWMgaW5saW5lIHU2NCBfX2JwZl9za19jZ3JvdXBfaWQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTc3Nj1zdGF0aWMgaW50IF9fYnBmX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4My1cXHRcXHRyZXR1cm4gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg0OlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9JUClcXG5uZXQvY29yZS9maWx0ZXIuYy01Nzg1LVxcdFxcdHJldHVybiBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTc4NjpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy01Nzg3LVxcdFxcdHJldHVybiBzb2xfaXB2Nl9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg4OlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4OS1cXHRcXHRyZXR1cm4gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU4MDc9c3RhdGljIGludCBfX2JwZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTgtXFx0XFx0ZXJyID0gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MTk6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcXG5uZXQvY29yZS9maWx0ZXIuYy01ODIwLVxcdFxcdGVyciA9IHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCB0cnVlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1ODIxOlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9JUClcXG5uZXQvY29yZS9maWx0ZXIuYy01ODIyLVxcdFxcdGVyciA9IHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MjM6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyNC1cXHRcXHRlcnIgPSBzb2xfaXB2Nl9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjEzNT1CUEZfQ0FMTF81KGJwZl9zb2NrX29wc19nZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MTQwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYxNDE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1AgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYy02MTQyLVxcdCAgICBvcHRuYW1lIFxcdTAwM2U9IFRDUF9CUEZfU1lOIFxcdTAwMjZcXHUwMDI2IG9wdG5hbWUgXFx1MDAzYz0gVENQX0JQRl9TWU5fTUFDKSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MTc3PUJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjE4NS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MTg2OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgIXNrX2Z1bGxzb2NrKHNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy02MTg3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMj1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjA0LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA1OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDYtXFx0c3RydWN0IHNvY2sgKnNrID0gY3R4LVxcdTAwM2VzaztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTgtXFx0XFx0cmV0dXJuIF9faW5ldF9iaW5kKHNrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyLCBhZGRyX2xlbiwgZmxhZ3MpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC1cXHR9IGVsc2UgaWYgKGFkZHItXFx1MDAzZXNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyNy1cXHRcXHRcXHRcXHQgICAgYWRkcl9sZW4sIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjI4OiNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMjktXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMzA6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzMS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYmluZF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NDojaWZkZWYgQ09ORklHX1hGUk1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjQ1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDY6I2lmIChJU19CVUlMVElOKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB8fCBcXFxcXFxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NzogICAgKElTX01PRFVMRShDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDgtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjI5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02MzAwLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjMwNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDgtXFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFxcdTAwMjZcXHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYzMjk9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzQ4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzNDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM1MC1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0ODctXFx0XFx0XFx0XFx0XFx0XFx0ICAoX19mb3JjZSB1MzIpcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjQ4ODpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSlcXG5uZXQvY29yZS9maWx0ZXIuYy02NDg5LVxcdFxcdG5laWdoID0gX19pcHY2X25laWdoX2xvb2t1cF9ub3JlZihkZXYsIHBhcmFtcy1cXHUwMDNlaXB2Nl9kc3QpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjUwMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDItc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjcxPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjY4MC1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NjgyLVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODUtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02Njg3LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NzA1PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NzI0LVxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjYtXFx0Y2FzZSBBRl9JTkVUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjcyOS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MzEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMC19XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMTojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTE0LXN0YXRpYyBpbnQgYnBmX3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTI5LSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTMxLVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5Mzk9QlBGX0NBTExfNChicGZfbHd0X3htaXRfcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTQyLVxcdHN3aXRjaCAodHlwZSkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTQ0LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6Njk3MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTczLUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzE1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2My19O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNjQ6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2NS1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY2OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjctc3RhdGljIHN0cnVjdCBzb2NrICpza19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgZGlmLCBzZGlmLCBOVUxMKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxODctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc4Mzk9QlBGX0NBTExfNShicGZfdGNwX2NoZWNrX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03ODQxLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3ODQyOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy03ODQzLVxcdGludCByZXQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03ODc0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc4NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg3Ni1cXHRjYXNlIDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03ODg0LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjc4ODU6I2VuZGlmIC8qIENPTkZJR19JUFY2ICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg4Ni1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc5MTI9QlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzkxNC17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzkxNTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtNzkxNi1cXHR1MzIgY29va2llO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzk0NC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3OTQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NDYtXFx0Y2FzZSA2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzk1NC1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYzo3OTU1OiNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NTYtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03OTY1LVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5uZXQvY29yZS9maWx0ZXIuYzo3OTY2OiNlbmRpZiAvKiBDT05GSUdfU1lOX0NPT0tJRVMgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy03OTY3LX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTgyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90c3RhbXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MjgwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgyODE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgyODItQlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjQsIHN0cnVjdCBpcGhkciAqLCBpcGgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MzA4PUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MzEwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzExOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMTItXFx0Y29uc3QgdTE2IG1zc19jbGFtcCA9IElQVjZfTUlOX01UVSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MzYwPUJQRl9DQUxMXzIoYnBmX3RjcF9yYXdfY2hlY2tfc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjIte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgzNjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtODM2NC1cXHRpZiAoX19jb29raWVfdjZfY2hlY2soaXBoLCB0aCkgXFx1MDAzZSAwKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODM3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODM4Mi19O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgzODM6I2VuZGlmIC8qIENPTkZJR19TWU5fQ09PS0lFUyAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgzODQtXFxubmV0L2NvcmUvZmlsdGVyLmM6ODM4NTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04Mzg2LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mz1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODUtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ4NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NDg3LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0OTQtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0OTU6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtODQ5Ni1cXHRjYXNlIEJQRl9GVU5DX3NrX3N0b3JhZ2VfZ2V0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU3Mj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1ODgtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTg5OiNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTAtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2lkOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU5OC0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTk5OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MDAtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzAzLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MDQ6I2lmZGVmIENPTkZJR19YRlJNXFxubmV0L2NvcmUvZmlsdGVyLmMtODcwNS1cXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfeGZybV9zdGF0ZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDctI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODcwODojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDktXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2NsYXNzaWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzExLSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTI6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXFxubmV0L2NvcmUvZmlsdGVyLmMtODcxMy1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfaWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzE3LSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTg6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODcxOS1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzQwLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9zZXRfdHN0YW1wX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NDE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NDItXFx0Y2FzZSBCUEZfRlVOQ190Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg3NTg9eGRwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9jaGVja19tdHVfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4NzojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg4LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3OTktXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODgwMDojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtODgwMS1cXHRjYXNlIEJQRl9GVU5DX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODgxNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo4ODE1OiNpZiBJU19NT0RVTEUoQ09ORklHX05GX0NPTk5UUkFDSykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUylcXG5uZXQvY29yZS9maWx0ZXIuYy04ODE2LVxcdC8qIFRoZSBuZl9jb25uX19faW5pdCB0eXBlIGlzIHVzZWQgaW4gdGhlIE5GX0NPTk5UUkFDSyBrZnVuY3MuIFRoZVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODgzMz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2MS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfbmV0bnNfY29va2llX3NvY2tfb3BzX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjI6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2My1cXHRjYXNlIEJQRl9GVU5DX2xvYWRfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NzAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfdGNwX3NvY2tfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODg3MTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04ODcyLVxcdGRlZmF1bHQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04OTE1PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODkzOS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NDA6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODk0MS1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDQ0PWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDYtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6OTA0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ4LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05OTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF9yZWFkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTk5NzAtXFxubmV0L2NvcmUvZmlsdGVyLmM6OTk3MTojaWZkZWYgQ09ORklHX05FVF9YR1JFU1NcXG5uZXQvY29yZS9maWx0ZXIuYy05OTcyLVxcdC8qIElmIHRoZSB0c3RhbXBfdHlwZSBpcyByZWFkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTk5OT1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfd3JpdGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAwMDUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTAwMDY6I2lmZGVmIENPTkZJR19ORVRfWEdSRVNTXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAwMDctXFx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMDAzNz1zdGF0aWMgdTMyIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMTItXFx0XFx0aWYgKHR5cGUgPT0gQlBGX1dSSVRFKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMjktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBuYXBpX2lkKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDIzMDojaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIzMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjc2LVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyNzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI5Ni1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyOTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyOTgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMDQwMz11MzIgYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDQ5Mi1cXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NvY2ssIHNyY19pcDZbMF0sIHNyY19pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNDkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNDk0LVxcdFxcdG9mZiA9IHNpLVxcdTAwM2VvZmY7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMC1cXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NvY2ssIGRzdF9pcDZbMF0sIGRzdF9pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNTExOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTEyLVxcdFxcdG9mZiA9IHNpLVxcdTAwM2VvZmY7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU1Ni1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29jaywgcnhfcXVldWVfbWFwcGluZyk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTA1NTc6I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU1OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMDgxNT1zdGF0aWMgdTMyIHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjAtXFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCByZW1vdGVfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTAyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTAyMi1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDQxLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgbG9jYWxfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTA0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA0My1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExMzUwPXN0YXRpYyB1MzIgc2tfbXNnX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTUtXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTctXFx0aW50IG9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDEwLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX21zZ19tZCwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTItXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQzMS1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzMtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY1NT1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTY5ODojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY5OS1zdGF0aWMgdm9pZCBicGZfaW5pdF9yZXVzZXBvcnRfa2VybihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKnJldXNlX2tlcm4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjA3Nj1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTE1LVxcdFxcdFxcdFxcdHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOiB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxMTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMTctXFx0XFx0aW50IG9mZiA9IHNpLVxcdTAwM2VvZmY7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjEzMS1cXHRcXHRcXHRcXHRsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjEzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjEzMy1cXHRcXHRpbnQgb2ZmID0gc2ktXFx1MDAzZW9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTc3PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE4MzojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjM0PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzNi1cXHQvKiBCVEYgdHlwZXMgZm9yIHRjcF90aW1ld2FpdF9zb2NrIGFuZCBpbmV0X3RpbWV3YWl0X3NvY2sgYXJlIG5vdFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjM3OlxcdCAqIGdlbmVyYXRlZCBpZiBDT05GSUdfSU5FVD1uLiBUcmlnZ2VyIGFuIGV4cGxpY2l0IGdlbmVyYXRpb24gaGVyZS5cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzOC1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQyOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQzLVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0OC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2Mz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjY1OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY2LVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3MS1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUwND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUwOC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopcztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTMyLVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM0LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjczMz1fX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0Ni1cXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0OC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjYtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjgtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo0MC4yOTcyOTgyMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1OTQ5NzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGVCUEYgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBza19za2JfY2hhbmdlX3RhaWxgIGFyZSBtYWRlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGVCUEYgZWNvc3lzdGVtLiBGaXJzdCwgYGJwZl9za2JfY2hhbmdlX3RhaWxgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBhbmQgYGx3dF94bWl0X2Z1bmNfcHJvdG9gLCB3aGljaCBtZWFucyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfTkVUX0NMU19BQ1RgIGFuZCBgQ09ORklHX0xXVFVOTkVMX0JQRmAsIHJlc3BlY3RpdmVseS4gR290IGl0LiBUaGF0IG1ha2VzIHNlbnNlIGZvciB0cmFmZmljIGNvbnRyb2wgYW5kIGxpZ2h0d2VpZ2h0IHR1bm5lbGluZywgc28gZmFyIHNvIGdvb2QuIFRoZW4gd2UgaGF2ZSBgc2tfc2tiX2NoYW5nZV90YWlsYCwgd2hpY2ggaXMgZXhwb3NlZCB2aWEgYHNrX3NrYl9mdW5jX3Byb3RvYC4gVGhpcyBvbmUgcmVxdWlyZXMgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCB0aGUgbW9yZSBnZW5lcmFsIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfTkVUYC4gSXQncyBhbHNvIGV4cG9zZWQgd2l0aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBOb3cgSSBuZWVkIHRvIGRyaWxsIGRvd24sIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBmdW5jdGlvbiBwcm90b3MgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTk4LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjQ1LjQ1Njc5NzYwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDgxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90b3xza19za2JfY2hhbmdlX3RhaWxfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NDAyOD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDAzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDM4LVxcdC5mdW5jXFx0XFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDA0Nj1CUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MDUxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQwNTI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDA1My1cXHQuZnVuY1xcdFxcdD0gc2tfc2tiX2NoYW5nZV90YWlsLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NjU2LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTgtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04OTE1PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODkyNC1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4OTI1OlxcdFxcdHJldHVybiBcXHUwMDI2c2tfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MjYtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDIwLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwMjE6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMjItXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjQ1LjUwNDg1MjQ1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzA2ODgyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRyYWZmaWMgQ29udHJvbCBGdW5jdGlvbiBQcm90b3R5cGVzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgc29tZXRoaW5nIG91dCB3aXRoIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLCBhbmQgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdG8gY2hlY2sgZm9yIHNvbWUgYGlmZGVmYCBkaXJlY3RpdmVzIHRoYXQgY291bGQgYmUgYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYXJvdW5kIGxpbmUgODYyMCBpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGxvY2F0aW9uLCBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgaXRzIGxpa2VseSByb2xlIGluIHRyYWZmaWMgY29udHJvbC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBzcG90IGFueSBjb21waWxlLXRpbWUgZmxhZ3MgYWZmZWN0aW5nIGl0LiBJJ20gaG9waW5nIHRvIGZpbmQgY2x1ZXMgdGhlcmUgdGhhdCB3aWxsIHNoZWQgbGlnaHQgb24gd2hhdCBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjQ4LjIxMTczODUxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODYxNTpcXHRcXHRkZWZhdWx0Olxcbjg2MTY6XFx0XFx0XFx0cmV0dXJuIHNrX2ZpbHRlcl9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjg2MTc6XFx0XFx0fVxcbjg2MTg6XFx0fVxcbjg2MTk6XFx0XFxuODYyMDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG44NjIxOlxcdHRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG44NjIyOlxcdHtcXG44NjIzOlxcdFxcdHN3aXRjaCAoZnVuY19pZCkge1xcbjg2MjQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2Jfc3RvcmVfYnl0ZXM6XFxuODYyNTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2Jfc3RvcmVfYnl0ZXNfcHJvdG87XFxuODYyNjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxcbjg2Mjc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XFxuODYyODpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlOlxcbjg2Mjk6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG87XFxuODYzMDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuODYzMTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfcHVsbF9kYXRhX3Byb3RvO1xcbjg2MzI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19jc3VtX2RpZmY6XFxuODYzMzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XFxuODYzNDpcXHRcXHRjYXNlIEJQRl9GVU5DX2NzdW1fdXBkYXRlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo0OC4yMTIxNDcyNjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NTc3NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHRjX2Nsc19hY3RfZnVuY19wcm90b2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLiBUaGUgbW9zdCBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gc2VlICp3aGVyZSogdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGNydWNpYWwuIEtub3dpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHRjX2Nsc19hY3RfZnVuY19wcm90b2AgaXMgZW1wbG95ZWQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgZnJvbSBpdHMgcHVycG9zZSB0byBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aG9zZSByZWZlcmVuY2VzLiBJdCdzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo1MC4xOTc5MjM5ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTAwOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfZnVuY19wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz04NjIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MjE6dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjIte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1MDM9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1MDQ6XFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSB0Y19jbHNfYWN0X2Z1bmNfcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1MDUtXFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gdGNfY2xzX2FjdF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjUwLjI0NDAzMTAyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUyMDY2ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRjX2Nsc19hY3QgVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIGB0Y19jbHNfYWN0YCB2ZXJpZmllciBvcGVyYXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBCUEYgcHJvZ3JhbSB0eXBlcyBhcmUgZGVmaW5lZC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcHJvZ3JhbSB0eXBlcywgYW5kIHRoZXJlIHRoZXkgYXJlOiBgQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgLi4uKWAgYW5kIGBCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCAuLi4pYCBzcGVjaWZpY2FsbHkuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIHRoZXNlIHR5cGVzIHNob3VsZCByZXF1aXJlIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQuIEkgc2VlIHRoYXQgYENPTkZJR19ORVRfQ0xTX0FDVGAgYW5kIGVpdGhlciBgQ09ORklHX05FVF9TQ0hFRGAgb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAgKG9yIHBvc3NpYmx5IGJvdGgpIGFyZSB3aGF0IEknbSBsb29raW5nIGZvci5cblxuTm93IHRoYXQgSSBoYXZlIHRoZSBiYXNpYyBsYXkgb2YgdGhlIGxhbmQsIGl0J3MgYmFjayB0byBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgb24gdGhvc2UgY29uZmlndXJhdGlvbnMgZm9yIHRoZXNlIGB0Y19jbHNfYWN0YCBwcm9ncmFtIHR5cGVzLiBJIG5lZWQgdG8gYmUgZXhhY3QgaGVyZSwgdGhlcmUgbWF5IGJlIHNvbWUgc3VidGxldHkgaW4gdGhlIGRlZmluaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6NTMuNDk2MTAwMTYyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM1MTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jbHNfYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD01PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBza19maWx0ZXIsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC02LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6NzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCB0Y19jbHNfYWN0LFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtOC1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjk6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgdGNfY2xzX2FjdCxcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEwLVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo1My41NDM0NTcxNjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE5MTM3NDE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9uczpcblxuKipCUEYgVHlwZSBFeHBsb3JhdGlvbjogYE5FVF9DTFNfQUNUYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYE5FVF9DTFNfQUNUYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCBpdHMgZGVjbGFyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBzb3VyY2UgY29kZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgZGVmaW5lZCBpbiBvbmUgb2YgdGhlIGNvcmUgQlBGIGhlYWRlciBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gYmV0dGluZyBpdCdsbCBiZSBpbiBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAuIFRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgZnVuZGFtZW50YWwgQlBGIGRhdGEgc3RydWN0dXJlcyBhbmQgdHlwZSBkZWZpbml0aW9ucyByZXNpZGUuXG5cbkxldCBtZSB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDcuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHR5cGljYWwgbGF5b3V0IGFuZCBob3cgdGhlc2UgdHlwZXMgYXJlIG9mdGVuIGdyb3VwZWQuIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0aXZlbHkgY29uY2lzZSAtIHByb2JhYmx5IGEgbWFjcm8gb3IgYW4gZW51bWVyYXRpb24gLSBkZWZpbmluZyB0aGlzIHBhcnRpY3VsYXIgQlBGIGNsYXNzaWZpZXIgYWN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlLCBpdHMgZXhwZWN0ZWQgdXNhZ2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSB0eXBlcyBvciBjb25zdGFudHMuIFdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBlQlBGIGludGVybmFscywgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcm9sZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgQlBGIGNvbXBvbmVudHMuIE5vdyBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAxMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjU2LjczNDgzMzYyM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdC8qIGludGVybmFsIGZpbGUgLSBkbyBub3QgaW5jbHVkZSBkaXJlY3RseSAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaWZkZWYgQ09ORklHX05FVFxcbiAgIDU6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcXG4gICA2OlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgIDc6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgdGNfY2xzX2FjdCxcXG4gICA4OlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgIDk6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgdGNfY2xzX2FjdCxcXG4gIDEwOlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgMTE6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1hEUCwgeGRwLFxcbiAgMTI6XFx0XFx0ICAgICAgc3RydWN0IHhkcF9tZCwgc3RydWN0IHhkcF9idWZmKVxcbiAgMTM6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBfQlBGXFxuICAxNDpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgY2dfc2tiLFxcbiAgMTU6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAxNjpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0ssIGNnX3NvY2ssXFxuICAxNzpcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3NvY2ssIHN0cnVjdCBzb2NrKVxcbiAgMTg6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsIGNnX3NvY2tfYWRkcixcXG4gIDE5OlxcdFxcdCAgICAgIHN0cnVjdCBicGZfc29ja19hZGRyLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuKVxcbiAgMjA6XFx0I2VuZGlmXFxuICAyMTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX0lOLCBsd3RfaW4sXFxuICAyMjpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDIzOlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBsd3Rfb3V0LFxcbiAgMjQ6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAyNTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo1Ni43MzQ5Mjc5MjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzOTc4ODYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBDT05GSUdfTkVUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBvZiBjb3Vyc2UgYENPTkZJR19CUEZgIGFyZSBhbGwgYWN0aXZlLCBtZWFuaW5nIHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIEJQRiBwcm9ncmFtcyByZWxhdGVkIHRvIHRyYWZmaWMgY29udHJvbCAoYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCAvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGApIGF2YWlsYWJsZS4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaC5cblxuTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBgYnBmX3NrYl90cmltX3Jjc3VtYCwgYW5kIGBfX2JwZl9za2JfbWluX2xlbmAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRob3NlIGxhc3QgdHdvIG1pZ2h0IGJlIGlubGluZWQuIEFoLCB5ZXMsIGBfX2JwZl9za2JfbWluX2xlbmAgaXMgYSBzdGF0aWMgYHUzMmAg4oCTIHBvdGVudGlhbGx5IGlubGluZWQg4oCTIGFuZCBgYnBmX3NrYl90cmltX3Jjc3VtYCBpcyBhIHN0YXRpYyBgaW50YCwgc28gcHJvYmFibHkgaW5saW5lZCB0b28uIFRoZSBvdGhlcnMgYXJlIG5vbi1zdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzaG91bGQgaW5jbHVkZSBhbGwgdGhvc2Ugc3ltYm9scyBmb3IgZ29vZCBtZWFzdXJlLlxuXG5Ob3csIGEgZmluYWwgdmVyaWZpY2F0aW9uIG9mIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGE6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBBYnNvbHV0ZWx5IVxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBTS0IgKFNvY2tldCBCdWZmZXIpIHRyaW1taW5nIGxvZ2ljLCBuYW1lbHkgYGJwZl9za2JfdHJpbV9yY3N1bWAgYW5kIGBfX2JwZl9za2JfbWluX2xlbmAuIFRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBpbnZvbHZlIHJlc2V0dGluZyBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gdHJpbW1pbmcgcGFzdCB0aGUgY2hlY2tzdW0gb2Zmc2V0IGZvciBwYXJ0aWFsIGNoZWNrc3VtIHBhY2tldHMgYW5kIHJlbW92ZXMgdGhlIGNoZWNrc3VtIG9mZnNldCByZXN0cmljdGlvbi4gVGhpcyBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIGhvdyBCUEYgaGVscGVycyBtYW5pcHVsYXRlIFNLQnMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCwgYHNrX3NrYl9jaGFuZ2VfdGFpbGApIGFuZCB0aGUgaGFuZGxpbmcgb2YgY2hlY2tzdW1zIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gR2l2ZW4gdGhlIHJlYWNoYWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBgYnBmX3NrYl90cmltX3Jjc3VtYCwgYF9fYnBmX3NrYl9taW5fbGVuYCAtIGNvbmZpcm1lZC5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEJQRl9TWVNDQUxMYCwgYE5FVGAgLSBjb3JyZWN0LlxuXG5Pa2F5LCBldmVyeXRoaW5nIGFsaWducy4gTGV0J3Mgc2VuZCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHdpdGggY29uZmlkZW5jZS4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTI1LCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjAyLjg3NDcxODg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3NjcwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2NoYW5nZV90YWlsXCIsXG4gICAgXCJza19za2JfY2hhbmdlX3RhaWxcIixcbiAgICBcImJwZl9za2JfdHJpbV9yY3N1bVwiLFxuICAgIFwiX19icGZfc2tiX21pbl9sZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVxcdTAwM2VpcF9zdW1tZWQgdG8gQ0hFQ0tTVU1fTk9ORSB3aGVuIHRyaW1taW5nIHBhY2tldHMgYmVsb3cgdGhlIGNoZWNrc3VtIHN0YXJ0L29mZnNldCBpbiBicGZfc2tiX3RyaW1fcmNzdW0uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIHJlYWNoYWJsZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyAoYnBmX3NrYl9jaGFuZ2VfdGFpbCBhbmQgc2tfc2tiX2NoYW5nZV90YWlsKSBhbmQgYWZmZWN0cyBuZXR3b3JrIGNoZWNrc3VtIHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2NoYW5nZV90YWlsXCIsXG4gICAgXCJza19za2JfY2hhbmdlX3RhaWxcIixcbiAgICBcImJwZl9za2JfdHJpbV9yY3N1bVwiLFxuICAgIFwiX19icGZfc2tiX21pbl9sZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVxcdTAwM2VpcF9zdW1tZWQgdG8gQ0hFQ0tTVU1fTk9ORSB3aGVuIHRyaW1taW5nIHBhY2tldHMgYmVsb3cgdGhlIGNoZWNrc3VtIHN0YXJ0L29mZnNldCBpbiBicGZfc2tiX3RyaW1fcmNzdW0uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIHJlYWNoYWJsZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyAoYnBmX3NrYl9jaGFuZ2VfdGFpbCBhbmQgc2tfc2tiX2NoYW5nZV90YWlsKSBhbmQgYWZmZWN0cyBuZXR3b3JrIGNoZWNrc3VtIHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1NDowMi45NDc0OTIzNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MTQwMjQzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1NDowMi45NDc5Mzk3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NjEzNTcyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRhaWwgYWRqdXN0bWVudCBsb2dpYyAoYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYGJwZl9za2JfdHJpbV9yY3N1bWApIGJ5IHJlbGF4aW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCByZXNldHRpbmcgYHNrYi1cXHUwMDNlaXBfc3VtbWVkYCB0byBgQ0hFQ0tTVU1fTk9ORWAgd2hlbiBhbiBza2IgaXMgdHJpbW1lZCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGRhdGEgYnVmZmVycyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBieXRlcyAod2hlbiBncm93aW5nLCBtZW1vcnkgaXMgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXRgOyB0cmltbWluZyByZWR1Y2VzIGJ1ZmZlciBsZW5ndGgpLlxcbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBsZW5ndGggZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGMxMmVhYjlmNGVjNGE0MWExZGM4ZTlhNGU0OGNhODJkZTU3OGNiMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTU6NTM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi44NTEzMTY3YTg1OGE4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMzk2MSwxMiArMzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbiBcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuIFx0fVxuLVx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuLVx0XHRvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgK1xuLVx0XHRcdCBza2ItXHUwMDNlY3N1bV9vZmZzZXQgKyBzaXplb2YoX19zdW0xNik7XG4tXHRcdGlmIChvZmZzZXQgXHUwMDNlIDApXG4tXHRcdFx0bWluX2xlbiA9IG9mZnNldDtcbi1cdH1cbiBcdHJldHVybiBtaW5fbGVuO1xuIH1cbiBcbkBAIC0zOTgzLDYgKzM5NzcsMTEgQEAgc3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4gXG4gc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4ge1xuK1x0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbitcdCAgICBuZXdfbGVuIFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgKyBza2ItXHUwMDNlY3N1bV9vZmZzZXQgK1xuK1x0XHQgICAgICBzaXplb2YoX19zdW0xNikpXG4rXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuK1xuIFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FjZGJkNTc1N2E5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5AQCAtMCwwICsxLDEyNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcIm5ldHdvcmtfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcInRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5za2VsLmhcIlxuK1xuKyNkZWZpbmUgQ0xJRU5UX05TXHRcInRjLWNoYW5nZS10YWlsLWNsaS1uc1wiXG4rI2RlZmluZSBTRVJWRVJfTlNcdFwidGMtY2hhbmdlLXRhaWwtc3J2LW5zXCJcbisjZGVmaW5lIENMSUVOVF9JUFx0XCIxOTIuMTY4LjEuMVwiXG4rI2RlZmluZSBTRVJWRVJfSVBcdFwiMTkyLjE2OC4xLjJcIlxuK1xuKyNkZWZpbmUgVEVTVF9QTVRVXHQxMDAwXG4rI2RlZmluZSBURVNUX01TU19NQVhcdChURVNUX1BNVFUgLSAyMCAtIDIwKVxuKyNkZWZpbmUgVElNRU9VVF9NU1x0MzAwMFxuKyNkZWZpbmUgWEZFUl9CWVRFU1x0ODE5MlxuK1xuK3ZvaWQgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1KHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3RjeF9vcHRzLCB0Y3hfb3B0cyk7XG4rXHRpbnQgbXNzX2JlZm9yZSA9IDAsIG1zc19hZnRlciA9IDAsIGlmaW5kZXgsIHBvcnQ7XG4rXHRpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xO1xuK1x0c3RydWN0IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dSAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0c3NpemVfdCBieXRlcztcbitcdHNpemVfdCB0b3RhbDtcbitcbitcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoQ0xJRU5UX05TKSwgXCJtYWtlIGNsaWVudCBuc1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhTRVJWRVJfTlMpLCBcIm1ha2Ugc2VydmVyIG5zXCIpKVxuK1x0XHRnb3RvIG91dF9jbGllbnRfbnM7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhDTElFTlRfTlMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3BlbiBjbGllbnQgbnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0U1lTKG91dCwgXCJpcCBsaW5rIGFkZCB2ZXRoMSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgyIG5ldG5zIFwiIFNFUlZFUl9OUyk7XG4rXHRTWVMob3V0LCBcImlwIC00IGFkZHIgYWRkIFwiIENMSUVOVF9JUCBcIi8yNCBkZXYgdmV0aDFcIik7XG4rXHRTWVMob3V0LCBcImlwIGxpbmsgc2V0IHZldGgxIHVwXCIpO1xuK1x0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDFcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXCJpZl9uYW1ldG9pbmRleFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdG5zdG9rZW4gPSBOVUxMO1xuK1xuK1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW4gc2VydmVyIG5zXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdFNZUyhvdXQsIFwiaXAgLTQgYWRkciBhZGQgXCIgU0VSVkVSX0lQIFwiLzI0IGRldiB2ZXRoMlwiKTtcbitcdFNZUyhvdXQsIFwiaXAgbGluayBzZXQgdmV0aDIgdXBcIik7XG4rXHRzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNFUlZFUl9JUCwgMCwgVElNRU9VVF9NUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFwic3RhcnQgc2VydmVyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuK1x0bnN0b2tlbiA9IE5VTEw7XG4rXG4rXHRza2VsID0gdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuIGFuZCBsb2FkIHNrZWxldG9uXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTtcbitcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFwiZ2V0IHNlcnZlciBwb3J0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gcG9ydDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBtdHUgPSBURVNUX1BNVFU7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhDTElFTlRfTlMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3BlbiBjbGllbnQgbnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2VsaW5rcy5jaGFuZ2VfdGFpbF9pY21wID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF90Y3goc2tlbC1cdTAwM2Vwcm9ncy5jaGFuZ2VfdGFpbF9pY21wLCBpZmluZGV4LFxuK1x0XHRcdFx0XHRcdTAwMjZ0Y3hfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5jaGFuZ2VfdGFpbF9pY21wLCBcImF0dGFjaCB0Y3hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2xpX2ZkID0gY29ubmVjdF90b19mZChzcnZfZmQsIFRJTUVPVVRfTVMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2xpX2ZkLCBcImNvbm5lY3QgdG8gc2VydmVyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHNydl9jb25uX2ZkID0gYWNjZXB0KHNydl9mZCwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgXCJhY2NlcHQgY29ubmVjdGlvblwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhzZXR0aW1lbyhzcnZfY29ubl9mZCwgVElNRU9VVF9NUyksIFwic2V0IHNlcnZlciB0aW1lb3V0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG9wdGxlbiA9IHNpemVvZihtc3NfYmVmb3JlKTtcbitcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXHUwMDI2bXNzX2JlZm9yZSxcbitcdFx0XHRcdCAgXHUwMDI2b3B0bGVuKSwgXCJnZXQgbXNzIGJlZm9yZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRieXRlcyA9IHNlbmQoY2xpX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKGJ5dGVzLCAoc3NpemVfdClzaXplb2YoYnVmKSwgXCJzZW5kIGRhdGFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Zm9yICh0b3RhbCA9IDA7IHRvdGFsIFx1MDAzYyBzaXplb2YoYnVmKTsgdG90YWwgKz0gYnl0ZXMpIHtcbitcdFx0Ynl0ZXMgPSByZWN2KHNydl9jb25uX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdEFTU0VSVF9FUSh0b3RhbCwgc2l6ZW9mKGJ1ZiksIFwicmVjZWl2ZSBkYXRhXCIpO1xuK1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VjaGFuZ2VfdGFpbF9yZXQsIFwiY2hhbmdlIHRhaWxcIik7XG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNlYWRqdXN0X3Jvb21fcmV0LCBcImFkanVzdCByb29tXCIpO1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaWNtcF9zZW50LCBcImljbXAgc2VudFwiKTtcbitcbitcdG9wdGxlbiA9IHNpemVvZihtc3NfYWZ0ZXIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCBcdTAwMjZtc3NfYWZ0ZXIsXG4rXHRcdFx0XHQgIFx1MDAyNm9wdGxlbiksIFwiZ2V0IG1zcyBhZnRlclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfTFQobXNzX2FmdGVyLCBtc3NfYmVmb3JlLCBcIm1zcyByZWR1Y2VkXCIpO1xuK1x0QVNTRVJUX0xFKG1zc19hZnRlciwgVEVTVF9NU1NfTUFYLCBcIm1zcyBiZWxvdyBwbXR1XCIpO1xuK291dDpcbitcdGNsb3NlKHNydl9jb25uX2ZkKTtcbitcdGNsb3NlKGNsaV9mZCk7XG4rXHRjbG9zZShzcnZfZmQpO1xuK1x0dGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19kZXN0cm95KHNrZWwpO1xuK1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRyZW1vdmVfbmV0bnMoU0VSVkVSX05TKTtcbitvdXRfY2xpZW50X25zOlxuK1x0cmVtb3ZlX25ldG5zKENMSUVOVF9OUyk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjNGMwNzU0NWJjOWZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuY1xuQEAgLTAsMCArMSwxMjkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuK1xuKyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyA4KVxuKyNkZWZpbmUgSUNNUF9IRFJTX0xFTlx0KHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSlcbitcbitfX2JlMTYgc2VydmVyX3BvcnQgPSAwO1xuK19fdTE2IHBtdHUgPSAwO1xuK1xuK2xvbmcgY2hhbmdlX3RhaWxfcmV0ID0gMTtcbitsb25nIGFkanVzdF9yb29tX3JldCA9IDA7XG4rYm9vbCBpY21wX3NlbnQgPSBmYWxzZTtcbitib29sIGljbXBfZXJyID0gZmFsc2U7XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gY3N1bSlcbit7XG4rXHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgKyAoY3N1bSBcdTAwM2VcdTAwM2UgMTYpO1xuK1x0Y3N1bSA9IChjc3VtIFx1MDAyNiAweGZmZmYpICsgKGNzdW0gXHUwMDNlXHUwMDNlIDE2KTtcbitcbitcdHJldHVybiAoX19zdW0xNil+Y3N1bTtcbit9XG4rXG4rU0VDKFwidGMvZWdyZXNzXCIpXG4raW50IGNoYW5nZV90YWlsX2ljbXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdF9fdTggc21hY1tFVEhfQUxFTl0sIGRtYWNbRVRIX0FMRU5dO1xuK1x0dm9pZCAqZGF0YSwgKmRhdGFfZW5kO1xuK1x0c3RydWN0IGljbXBoZHIgKmljbXA7XG4rXHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4rXHRzdHJ1Y3QgdGNwaGRyICp0Y3A7XG4rXHRfX2JlMzIgc2FkZHIsIGRhZGRyO1xuK1x0c3RydWN0IGlwaGRyICppcDtcbitcdF9fd3N1bSBjc3VtO1xuK1xuK1x0aWYgKGljbXBfc2VudCB8fCBpY21wX2VycilcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0ZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4rXHRkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGFfZW5kO1xuK1xuK1x0ZXRoID0gZGF0YTtcbitcdGlmICgodm9pZCAqKShldGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmIChldGgtXHUwMDNlaF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRpcCA9ICh2b2lkICopKGV0aCArIDEpO1xuK1x0aWYgKCh2b2lkICopKGlwICsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXHRpZiAoaXAtXHUwMDNlaWhsICE9IDUgfHwgaXAtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcbitcdHRjcCA9ICh2b2lkICopKGlwICsgMSk7XG4rXHRpZiAoKHZvaWQgKikodGNwICsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXHRpZiAodGNwLVx1MDAzZWRlc3QgIT0gc2VydmVyX3BvcnQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmIChicGZfbnRvaHMoaXAtXHUwMDNldG90X2xlbikgXHUwMDNjPSBzaXplb2YoKmlwKSArIHRjcC1cdTAwM2Vkb2ZmICogNClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0X19idWlsdGluX21lbWNweShzbWFjLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbitcdF9fYnVpbHRpbl9tZW1jcHkoZG1hYywgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuK1x0c2FkZHIgPSBpcC1cdTAwM2VzYWRkcjtcbitcdGRhZGRyID0gaXAtXHUwMDNlZGFkZHI7XG4rXG4rXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xuK1x0aWYgKGNoYW5nZV90YWlsX3JldCkge1xuK1x0XHRpY21wX2VyciA9IHRydWU7XG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdH1cbitcbitcdGFkanVzdF9yb29tX3JldCA9IGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCBJQ01QX0hEUlNfTEVOLFxuK1x0XHRcdFx0XHQgICAgICBCUEZfQURKX1JPT01fTUFDLFxuK1x0XHRcdFx0XHQgICAgICBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKTtcbitcdGlmIChhZGp1c3Rfcm9vbV9yZXQpIHtcbitcdFx0aWNtcF9lcnIgPSB0cnVlO1xuK1x0XHRyZXR1cm4gVENYX0RST1A7XG4rXHR9XG4rXG4rXHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXG4rXHRldGggPSBkYXRhO1xuK1x0aXAgPSAodm9pZCAqKShldGggKyAxKTtcbitcdGljbXAgPSAodm9pZCAqKShpcCArIDEpO1xuK1x0aWYgKCh2b2lkICopaWNtcCArIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4gXHUwMDNlIGRhdGFfZW5kKSB7XG4rXHRcdGljbXBfZXJyID0gdHJ1ZTtcbitcdFx0cmV0dXJuIFRDWF9EUk9QO1xuK1x0fVxuK1xuK1x0X19idWlsdGluX21lbWNweShldGgtXHUwMDNlaF9kZXN0LCBzbWFjLCBFVEhfQUxFTik7XG4rXHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgZG1hYywgRVRIX0FMRU4pO1xuK1xuK1x0X19idWlsdGluX21lbXNldChpY21wLCAwLCBzaXplb2YoKmljbXApKTtcbitcdGljbXAtXHUwMDNldHlwZSA9IElDTVBfREVTVF9VTlJFQUNIO1xuK1x0aWNtcC1cdTAwM2Vjb2RlID0gSUNNUF9GUkFHX05FRURFRDtcbitcdGljbXAtXHUwMDNldW4uZnJhZy5tdHUgPSBicGZfaHRvbnMocG10dSk7XG4rXG4rXHRfX2J1aWx0aW5fbWVtc2V0KGlwLCAwLCBzaXplb2YoKmlwKSk7XG4rXHRpcC1cdTAwM2V2ZXJzaW9uID0gNDtcbitcdGlwLVx1MDAzZWlobCA9IDU7XG4rXHRpcC1cdTAwM2V0dGwgPSA2NDtcbitcdGlwLVx1MDAzZXByb3RvY29sID0gSVBQUk9UT19JQ01QO1xuK1x0aXAtXHUwMDNldG90X2xlbiA9IGJwZl9odG9ucyhJQ01QX0hEUlNfTEVOICsgSUNNUF9TQU1QTEVfTEVOKTtcbitcdGlwLVx1MDAzZXNhZGRyID0gZGFkZHI7XG4rXHRpcC1cdTAwM2VkYWRkciA9IHNhZGRyO1xuK1xuK1x0Y3N1bSA9IGJwZl9jc3VtX2RpZmYoTlVMTCwgMCwgKF9fYmUzMiAqKWljbXAsXG4rXHRcdFx0ICAgICBzaXplb2YoKmljbXApICsgSUNNUF9TQU1QTEVfTEVOLCAwKTtcbitcdGljbXAtXHUwMDNlY2hlY2tzdW0gPSBjc3VtX2ZvbGQoY3N1bSk7XG4rXHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaXAsIHNpemVvZigqaXApLCAwKTtcbitcdGlwLVx1MDAzZWNoZWNrID0gY3N1bV9mb2xkKGNzdW0pO1xuK1x0aWNtcF9zZW50ID0gdHJ1ZTtcbitcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVx1MDAzZWlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1NDowMi45NDc5NDMyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTYyMTg1NzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50IGZpcmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIHRoZSBkaWZmIGl0c2VsZi4gQWgsIGl0IG1vZGlmaWVzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGFkZHMgQlBGIHNlbGZ0ZXN0cy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy5cblxuTGV0J3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uLi4gT2theSwgbGluZSAzOTYwIGFuZCBhcm91bmQgdGhlcmUuLi5cblxuYGBgZGlmZlxuQEAgLTM5NjEsMTIgKzM5NjEsNiBAQCBzdGF0aWMgdTMyIF9fYnBmX3NrYl9taW5fbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlIDApXG4gXHRcdFx0bWluX2xlbiA9IG9mZnNldDtcbiBcdH1cbi1cdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHtcbi1cdFx0b2Zmc2V0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICtcbi1cdFx0XHQgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICsgc2l6ZW9mKF9fc3VtMTYpO1xuLVx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuLVx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4tXHR9XG4gXHRyZXR1cm4gbWluX2xlbjtcbiB9XG4gXG5AQCAtMzk4Myw2ICszOTc3LDExIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxuIFxuIHN0YXRpYyBpbnQgYnBmX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxuIHtcbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4rXHQgICAgbmV3X2xlbiBcdTAwM2Mgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICtcbitcdFx0ICAgICAgc2l6ZW9mKF9fc3VtMTYpKVxuK1x0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbitcbiBcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG4gfVxuIGBgYFxuXG5SaWdodCwgc28gaXQncyByZW1vdmluZyB0aGUgY2hlY2tzdW0gb2Zmc2V0IGNoZWNrIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIGNoYW5naW5nIGBicGZfc2tiX3RyaW1fcmNzdW1gIHRvIGNsZWFyIHRoZSBjaGVja3N1bSB3aGVuIHRyaW1taW5nLiBUaGUgcmVtb3ZlZCBjaGVjayBpcyB0aGVyZSB0byBwcmV2ZW50IE9PQiBhY2Nlc3Mgd2hlbiBkZWFsaW5nIHdpdGggYENIRUNLU1VNX1BBUlRJQUxgIHNrYnMuIFRoZSBuZXcgY29kZSBpbiBgYnBmX3NrYl90cmltX3Jjc3VtYCBzZWVtcyB0byBiZSBpbnRlbmRlZCB0byBkZWFsIHdpdGggY2hlY2tzdW1zIGNvcnJlY3RseSB3aGVuIHRyaW1taW5nLlxuXG5TbywgcG90ZW50aWFsbHkgd2UgaGF2ZSBhIGNoYW5nZSBpbiBjaGVja3N1bSBoYW5kbGluZyBhbmQgYnBmIHNlbGZ0ZXN0cy4gVGhlIHJlbW92YWwgb2YgdGhlIGNoZWNrIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIHRoZSBsb2dpYyBpbiBgYnBmX3NrYl90cmltX3Jjc3VtYCBtaWdodCBoYXZlIHNvbWUgc3VidGxlIGNvcm5lciBjYXNlcyB0aGF0IGEgS01TQU4gcnVuIG1pZ2h0IGV4cG9zZS4gVGhpcyAqY291bGQqIGJlIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgaW52b2x2ZXMgbmV0d29yayBwYWNrZXQgbWFuaXB1bGF0aW9uIGFuZCBjaGVja3N1bXMgLSBhIGNsYXNzaWMgYXJlYSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gTm93IEkgbmVlZCB0byBkZWNpZGUgaWYgdGhlIHJpc2sgb3V0d2VpZ2hzIHRoZSBlZmZvcnQgdG8gc2V0dXAgS01TQU4uIFRoaXMgbG9va3MgcHJldHR5IGdvb2QgZm9yIGEgS01TQU4gc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjE0LjU2OTgwNDIxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk0MDpcXHR9XFxuMzk0MTpcXHRcXG4zOTQyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9hZGp1c3Rfcm9vbV9wcm90byA9IHtcXG4zOTQzOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfc2tiX2FkanVzdF9yb29tLFxcbjM5NDQ6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4zOTQ1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuMzk0NjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4zOTQ3OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4zOTQ4OlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4zOTQ5OlxcdFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4zOTUwOlxcdH07XFxuMzk1MTpcXHRcXG4zOTUyOlxcdHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4zOTUzOlxcdHtcXG4zOTU0OlxcdFxcdGludCBvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcXG4zOTU1OlxcdFxcdHUzMiBtaW5fbGVuID0gMDtcXG4zOTU2OlxcdFxcbjM5NTc6XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlIDApXFxuMzk1ODpcXHRcXHRcXHRtaW5fbGVuID0gb2Zmc2V0O1xcbjM5NTk6XFx0XFx0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xcbjM5NjA6XFx0XFx0XFx0b2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG4zOTYxOlxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSAwKVxcbjM5NjI6XFx0XFx0XFx0XFx0bWluX2xlbiA9IG9mZnNldDtcXG4zOTYzOlxcdFxcdH1cXG4zOTY0OlxcdFxcdHJldHVybiBtaW5fbGVuO1xcbjM5NjU6XFx0fVxcbjM5NjY6XFx0XFxuMzk2NzpcXHRzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zOTY4OlxcdHtcXG4zOTY5OlxcdFxcdHVuc2lnbmVkIGludCBvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMzk3MDpcXHRcXHRpbnQgcmV0O1xcbjM5NzE6XFx0XFxuMzk3MjpcXHRcXHRyZXQgPSBfX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzk3MzpcXHRcXHRpZiAoIXJldClcXG4zOTc0OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEgKyBvbGRfbGVuLCAwLCBuZXdfbGVuIC0gb2xkX2xlbik7XFxuMzk3NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NzY6XFx0fVxcbjM5Nzc6XFx0XFxuMzk3ODpcXHRzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zOTc5OlxcdHtcXG4zOTgwOlxcdFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFxcdTAwMjZcXHUwMDI2XFxuMzk4MTpcXHRcXHQgICAgbmV3X2xlbiBcXHUwMDNjIHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgK1xcbjM5ODI6XFx0XFx0XFx0ICAgICAgc2l6ZW9mKF9fc3VtMTYpKVxcbjM5ODM6XFx0XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbjM5ODQ6XFx0XFxuMzk4NTpcXHRcXHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xcbjM5ODY6XFx0fVxcbjM5ODc6XFx0XFxuMzk4ODpcXHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXFxuMzk4OTpcXHRcXHRcXHRcXHRcXHRcXHR1NjQgZmxhZ3MpXFxuMzk5MDpcXHR7XFxuMzk5MTpcXHRcXHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcXG4zOTkyOlxcdFxcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcXG4zOTkzOlxcdFxcdGludCByZXQ7XFxuMzk5NDpcXHRcXG4zOTk1OlxcdFxcdGlmICh1bmxpa2VseShmbGFncyB8fCBuZXdfbGVuIFxcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFxcdTAwM2MgbWluX2xlbikpXFxuMzk5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTk3OlxcdFxcdGlmIChza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuMzk5ODpcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbjM5OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjE0LjU3MDQxNzA3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODI3MzQwNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIENvbW1pdCdzIExvZ2ljIGZvciBTS0IgVHJpbW1pbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb21taXQgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBjaGFuZ2UuIFByZXZpb3VzbHksIHRoZSBgX19icGZfc2tiX21pbl9sZW5gIGNoZWNrIHdhcyBwcmV2ZW50aW5nIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmcm9tIHNocmlua2luZyBhbiBTS0IgKFNvY2tldCBCdWZmZXIpIGJleW9uZCBhIGNlcnRhaW4gcG9pbnQg4oCTIHNwZWNpZmljYWxseSwgdGhlIGNoZWNrc3VtLXJlbGF0ZWQgb2Zmc2V0IGNhbGN1bGF0ZWQgdXNpbmcgYHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArIHNrYi1cdTAwM2Vjc3VtX29mZnNldCArIHNpemVvZihfX3N1bTE2KWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIGRvbid0IHdhbnQgdG8gbWVzcyB1cCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGJ5IGFyYml0cmFyaWx5IHRydW5jYXRpbmcgdGhlIGJ1ZmZlci5cblxuTm93LCBob3dldmVyLCBpdCBsb29rcyBsaWtlIHRoZXkncmUgbW9kaWZ5aW5nIHRoZSBgYnBmX3NrYl90cmltX3Jjc3VtYCBwcm9jZXNzLiBJbnN0ZWFkIG9mIHJlamVjdGluZyB0aGUgdHJpbSBpbiB0aGUgYF9fYnBmX3NrYl9taW5fbGVuYCBjaGVjayBpZiB0aGUgaW50ZW5kZWQgYG5ld19sZW5gIGlzIGxlc3MgdGhhbiB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQsIHRoZSBjb2RlICphbGxvd3MqIHRoZSB0cmltIHRvIGhhcHBlbi4gVGhlIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlIGlzIHRoYXQgaXQgYWxzbyAqcmVzZXRzKiBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYF9fc2tiX3RyaW1fcmNzdW1gIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGRldGVybWluZSB3aGF0IHNwZWNpZmljIGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gYW4gU0tCIGlzIHRyaW1tZWQgaW4gdGhpcyBuZXcgcGFyYWRpZ20uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMgb2YgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIGNoZWNrc3VtbWluZyBhZnRlciBhIHBvdGVudGlhbGx5IGFnZ3Jlc3NpdmUgdHJpbS4gSXMgdGhpcyBleHBlY3RlZCBiZWhhdmlvcj8gQXJlIHRoZXJlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGlzIGNoYW5nZT8gSSdsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMgd2UgYXJlIGVtcGxveWluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBjYXVzZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSdtIGtlZW4gdG8gdW5jb3ZlciB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbiBhbmQgZW5zdXJlIGl0cyBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQ2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MTkuMzk3NzU5NjIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIyMzYxMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2tiX3RyaW1fcmNzdW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MTU5PXN0YXRpYyBpbmxpbmUgaW50IHBza2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MTY2LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDE2NzpzdGF0aWMgaW5saW5lIGludCBfX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MTY4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM5Nzg9c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5ODU6XFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MjEuMTIwMTM1MTI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTcwNjgzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHNrYl90cmltX3Jjc3VtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYF9fc2tiX3RyaW1fcmNzdW1gLiBXaGVyZSdzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24/IFJpZ2h0LCBpdCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBUaW1lIHRvIHB1bGwgdXAgdGhhdCBoZWFkZXIgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0cmltbWluZyBvbiB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zLiBJcyBpdCBqdXN0IGEgbWF0dGVyIG9mIGFkanVzdGluZyB0aGUgYGNzdW1gIGZpZWxkPyBBcmUgdGhlcmUgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB0byBjb25zaWRlciwgbGlrZSBmcmFnbWVudGVkIFNLQnMgb3IgaGFyZHdhcmUgY2hlY2tzdW0gb2ZmbG9hZD8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb3JlIGxvZ2ljIGJlZm9yZSBJIGdldCBkaXN0cmFjdGVkIGJ5IGFueSBwYXJ0aWN1bGFyIHVzZSBjYXNlcy4gTGV0J3Mgc2VlIGhvdyB0aGUgaW50ZXJuYWwgd29ya2luZ3MgcmVsYXRlIHRvIHRoZSBgc2tiYCBkYXRhIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjIzLjQzNzIwNTg5OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTY1OlxcdH1cXG40MTY2OlxcdFxcbjQxNjc6XFx0c3RhdGljIGlubGluZSBpbnQgX19za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbjQxNjg6XFx0e1xcbjQxNjk6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbjQxNzA6XFx0XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbjQxNzE6XFx0XFx0X19za2JfdHJpbShza2IsIGxlbik7XFxuNDE3MjpcXHRcXHRyZXR1cm4gMDtcXG40MTczOlxcdH1cXG40MTc0OlxcdFxcbjQxNzU6XFx0c3RhdGljIGlubGluZSBpbnQgX19za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbjQxNzY6XFx0e1xcbjQxNzc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbjQxNzg6XFx0XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbjQxNzk6XFx0XFx0cmV0dXJuIF9fc2tiX2dyb3coc2tiLCBsZW4pO1xcbjQxODA6XFx0fVxcbjQxODE6XFx0XFxuNDE4MjpcXHQjZGVmaW5lIHJiX3RvX3NrYihyYikgcmJfZW50cnlfc2FmZShyYiwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSlcXG40MTgzOlxcdCNkZWZpbmUgc2tiX3JiX2ZpcnN0KHJvb3QpIHJiX3RvX3NrYihyYl9maXJzdChyb290KSlcXG40MTg0OlxcdCNkZWZpbmUgc2tiX3JiX2xhc3Qocm9vdCkgIHJiX3RvX3NrYihyYl9sYXN0KHJvb3QpKVxcbjQxODU6XFx0I2RlZmluZSBza2JfcmJfbmV4dChza2IpICAgcmJfdG9fc2tiKHJiX25leHQoXFx1MDAyNihza2IpLVxcdTAwM2VyYm5vZGUpKVxcbjQxODY6XFx0I2RlZmluZSBza2JfcmJfcHJldihza2IpICAgcmJfdG9fc2tiKHJiX3ByZXYoXFx1MDAyNihza2IpLVxcdTAwM2VyYm5vZGUpKVxcbjQxODc6XFx0XFxuNDE4ODpcXHQjZGVmaW5lIHNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIFxcXFxcXG40MTg5OlxcdFxcdFxcdGZvciAoc2tiID0gKHF1ZXVlKS1cXHUwMDNlbmV4dDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjIzLjQzNzUzMjY0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMyNTc3ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGEgY3JpdGljYWwgc2VjdGlvbiwgYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMzk4MCB0byA0MDMwIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRhaWwgbW9kaWZpY2F0aW9ucyBvbiBTS0JzLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBjaGFuZ2luZyB0aGUgdGFpbCBwb2ludGVyLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBtZW1vcnkgYmFycmllciBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG9vLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGxvY2tpbmcgcHJpbWl0aXZlcyBvciBhdG9taWMgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MjUuNjcwMTEzMTg2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTg1OlxcdFxcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzk4NjpcXHR9XFxuMzk4NzpcXHRcXG4zOTg4OlxcdHN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcXG4zOTg5OlxcdFxcdFxcdFxcdFxcdFxcdHU2NCBmbGFncylcXG4zOTkwOlxcdHtcXG4zOTkxOlxcdFxcdHUzMiBtYXhfbGVuID0gQlBGX1NLQl9NQVhfTEVOO1xcbjM5OTI6XFx0XFx0dTMyIG1pbl9sZW4gPSBfX2JwZl9za2JfbWluX2xlbihza2IpO1xcbjM5OTM6XFx0XFx0aW50IHJldDtcXG4zOTk0OlxcdFxcbjM5OTU6XFx0XFx0aWYgKHVubGlrZWx5KGZsYWdzIHx8IG5ld19sZW4gXFx1MDAzZSBtYXhfbGVuIHx8IG5ld19sZW4gXFx1MDAzYyBtaW5fbGVuKSlcXG4zOTk2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5OTc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbilcXG4zOTk4OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMzk5OTpcXHRcXG40MDAwOlxcdFxcdC8qIFRoZSBiYXNpYyBpZGVhIG9mIHRoaXMgaGVscGVyIGlzIHRoYXQgaXQncyBwZXJmb3JtaW5nIHRoZVxcbjQwMDE6XFx0XFx0ICogbmVlZGVkIHdvcmsgdG8gZWl0aGVyIGdyb3cgb3IgdHJpbSBhbiBza2IsIGFuZCBlQlBGIHByb2dyYW1cXG40MDAyOlxcdFxcdCAqIHJld3JpdGVzIHRoZSByZXN0IHZpYSBoZWxwZXJzIGxpa2UgYnBmX3NrYl9zdG9yZV9ieXRlcygpLFxcbjQwMDM6XFx0XFx0ICogYnBmX2xYX2NzdW1fcmVwbGFjZSgpIGFuZCBvdGhlcnMgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhd1xcbjQwMDQ6XFx0XFx0ICogYnVmZmVyIGhlcmUuIFRoaXMgb25lIGlzIGEgc2xvdyBwYXRoIGhlbHBlciBhbmQgaW50ZW5kZWRcXG40MDA1OlxcdFxcdCAqIGZvciByZXBsaWVzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cXG40MDA2OlxcdFxcdCAqXFxuNDAwNzpcXHRcXHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxcbjQwMDg6XFx0XFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxcbjQwMDk6XFx0XFx0ICogdG8gc2VwYXJhdGUgY29uY2VybnMgYXMgaW4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5XFxuNDAxMDpcXHRcXHQgKiBiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGJ1ZmZlcnMuXFxuNDAxMTpcXHRcXHQgKlxcbjQwMTI6XFx0XFx0ICogSXQncyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXFxuNDAxMzpcXHRcXHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UncmUgaW1wbGljaXRseSBsaW5lYXJpemluZyxcXG40MDE0OlxcdFxcdCAqIHVuY2xvbmluZyBhbmQgZHJvcCBvZmZsb2FkcyBmcm9tIHRoZSBza2IgYnkgdGhpcy5cXG40MDE1OlxcdFxcdCAqL1xcbjQwMTY6XFx0XFx0cmV0ID0gX19icGZfdHJ5X21ha2Vfd3JpdGFibGUoc2tiLCBza2ItXFx1MDAzZWxlbik7XFxuNDAxNzpcXHRcXHRpZiAoIXJldCkge1xcbjQwMTg6XFx0XFx0XFx0aWYgKG5ld19sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG40MDE5OlxcdFxcdFxcdFxcdHJldCA9IGJwZl9za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xcbjQwMjA6XFx0XFx0XFx0ZWxzZSBpZiAobmV3X2xlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKVxcbjQwMjE6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuNDAyMjpcXHRcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXFxuNDAyMzpcXHRcXHRcXHRcXHRza2JfZ3NvX3Jlc2V0KHNrYik7XFxuNDAyNDpcXHRcXHR9XFxuNDAyNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMjY6XFx0fVxcbjQwMjc6XFx0XFxuNDAyODpcXHRCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbjQwMjk6XFx0XFx0ICAgdTY0LCBmbGFncylcXG40MDMwOlxcdHtcXG40MDMxOlxcdFxcdGludCByZXQgPSBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XFxuNDAzMjpcXHRcXG40MDMzOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG40MDM0OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjI1LjY3MDc0MDQ3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODkwNjYwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFNLQiBUcmltbWluZyBpbiBCUEYqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBicGZfc2tiX2NoYW5nZV90YWlsYCBpcyB0aGUgZnVuY3Rpb24gYXQgcGxheSBoZXJlLCBhbmQgaXQncyByZXNwb25zaWJsZSBmb3IgYm90aCBncm93aW5nIGFuZCB0cmltbWluZyBza2JzLiBUaGUga2V5IGlzIHRvIGFzc2VzcyB0aGlzIGNoYW5nZSBmb3IgS01TQU4gaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuRmlyc3QsIGdyb3dpbmcuIEdyb3dpbmcgaXMgaGFuZGxlZCB3aXRoIGBicGZfc2tiX2dyb3dfcmNzdW1gIHdoaWNoICpleHBsaWNpdGx5KiB6ZXJvZXMgb3V0IHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IHVzaW5nIGBtZW1zZXRgLiBObyBjb25jZXJucyB0aGVyZS5cblxuTm93LCB0cmltbWluZy4gVGhlIHBhdGNoIGFsbG93cyBmb3IgdHJpbW1pbmcgdGhlIHNrYiB0byBhIHNob3J0ZXIgbGVuZ3RoLCB3aGljaCB3YXMgcHJldmlvdXNseSByZXN0cmljdGVkLiBJZiB0aGUgdHJpbSBoYXBwZW5zIHRvIGN1dCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldCwgd2UgY29ycmVjdGx5IHJlc2V0IGBza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORWAuIFRoaXMgaXMgY3JpdGljYWwuIFdlJ3JlIHByb2FjdGl2ZWx5IGVuc3VyaW5nIHRoYXQgdGhlIGNoZWNrc3VtIGNhbGN1bGF0aW9uIHdvbid0IHJlYWQgcGFzdCB0aGUgbmV3LCByZWR1Y2VkIHBhY2tldCBib3VuZGFyeS5cblxuU28sIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlOioqIE5vdGhpbmcgaGVyZS4gTm8gZGF0YSBpcyBiZWluZyBzZW50IG91dCwgbW9kaWZpZWQsIG9yIG90aGVyd2lzZSBleHBvc2VkIGluIHRoaXMgd2F5LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBUaGVyZSBhcmUgbm8gbG9naWMgYnJhbmNoZXMgYmVpbmcgZGV0ZXJtaW5lZCBieSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbjoqKiBOb3BlLiBUaGUgZXhpc3RpbmcgemVyby1pbmcgbG9naWMgYWxyZWFkeSBjb3ZlcnMgZ3Jvd2luZy4gVGhlIGNvbmNlcm4gaGVyZSBpcyBhYm91dCBzaHJpbmtpbmcsIGFuZCB3ZSBhcmUgc2V0dGluZyB0aGUgY2hlY2tzdW0gZmxhZyBjb3JyZWN0bHksIG9yIGtlZXBpbmcgaXQgY29ycmVjdCB3aGVuIHNocmlua2luZy5cbjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGxlbmd0aHM6KiogQWgsIGhlcmUncyB3aGVyZSBpdCBtYXR0ZXJzLiBUcmltbWluZyAqcmVkdWNlcyogdGhlIGJ1ZmZlciBzaXplLiBUaGlzIG1lYW5zIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHdpbGwgbmV2ZXIgYmUgcmVhZCBwYXN0IHRoZSBib3VuZGFyaWVzLiBXaXRoIHRoZSBjc3VtIGFkanVzdG1lbnQgYXMgd2VsbCwgdGhpcyBpcyBub3QgYW4gaXNzdWUuIFdlIGFyZSBjbGVhcmluZyBvdXQgdGhlIGlwXFxfc3VtbWVkIHNldHRpbmcgd2hlbiB0cmltbWluZy5cblxuVGhlcmVmb3JlLCAqbm8qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLiBLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyBjb3ZlciB0aGUgYm91bmRhcnkgY29uZGl0aW9ucywgYXMgZXhwZWN0ZWQuIFRoaXMgY2hhbmdlIGlzIEtNU0FOLXNhZmUuIEknbSBzYXRpc2ZpZWQuIExldCdzIG1ha2Ugc3VyZSB0aGUgdG9vbCBjYWxsIGdvZXMgdGhyb3VnaCBzbW9vdGhseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MzEuNTYxNDk1MjcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRhaWwgYWRqdXN0bWVudCBsb2dpYyAoYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYGJwZl9za2JfdHJpbV9yY3N1bWApIGJ5IHJlbGF4aW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCByZXNldHRpbmcgYHNrYi1cXHUwMDNlaXBfc3VtbWVkYCB0byBgQ0hFQ0tTVU1fTk9ORWAgd2hlbiBhbiBza2IgaXMgdHJpbW1lZCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGRhdGEgYnVmZmVycyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBieXRlcyAod2hlbiBncm93aW5nLCBtZW1vcnkgaXMgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXRgOyB0cmltbWluZyByZWR1Y2VzIGJ1ZmZlciBsZW5ndGgpLlxcbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBsZW5ndGggZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0YWlsIGFkanVzdG1lbnQgbG9naWMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBicGZfc2tiX3RyaW1fcmNzdW1gKSBieSByZWxheGluZyB0aGUgbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gaW4gYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgcmVzZXR0aW5nIGBza2ItXFx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cXG4yLiBJdCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuXFxuMy4gQW55IHBvdGVudGlhbCBidWZmZXIgbGVuZ3RoIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 15:34:01 +0000 UTC FinishedAt: 2026-09-07 15:54:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "118286b8-5fe7-4965-95b2-97bdd03545d7" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_skb_change_tail", "sk_skb_change_tail", "bpf_skb_trim_rcsum", "__bpf_skb_min_len" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdGFpbCBhZGp1c3RtZW50IGxvZ2ljIChgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgLyBgYnBmX3NrYl90cmltX3Jjc3VtYCkgYnkgcmVsYXhpbmcgdGhlIG1pbmltdW0gbGVuZ3RoIGNhbGN1bGF0aW9uIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIHJlc2V0dGluZyBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cbjMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGxlbmd0aCBlcnJvcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdHJpbW1pbmcgc2VtYW50aWNzIGluIG5ldC9jb3JlL2ZpbHRlci5jLiBTcGVjaWZpY2FsbHksIGl0IHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIGNvbnN0cmFpbnQgYmFzZWQgb24gcGFydGlhbCBjaGVja3N1bSBvZmZzZXRzIGluIF9fYnBmX3NrYl9taW5fbGVuIGFuZCBpbnN0ZWFkIHJlc2V0cyBza2ItXHUwMDNlaXBfc3VtbWVkIHRvIENIRUNLU1VNX05PTkUgd2hlbiB0cmltbWluZyBwYWNrZXRzIGJlbG93IHRoZSBjaGVja3N1bSBzdGFydC9vZmZzZXQgaW4gYnBmX3NrYl90cmltX3Jjc3VtLiBUaGlzIGNoYW5nZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiByZWFjaGFibGUgQlBGIGhlbHBlciBmdW5jdGlvbnMgKGJwZl9za2JfY2hhbmdlX3RhaWwgYW5kIHNrX3NrYl9jaGFuZ2VfdGFpbCkgYW5kIGFmZmVjdHMgbmV0d29yayBjaGVja3N1bSBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRjMTJlYWI5ZjRlYzRhNDFhMWRjOGU5YTRlNDhjYTgyZGU1NzhjYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE1OjUzOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0zOTYxLDEyICYjNDM7Mzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbiBcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuIFx0fVxuLVx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuLVx0XHRvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mztcbi1cdFx0XHQgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICYjNDM7IHNpemVvZihfX3N1bTE2KTtcbi1cdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbi1cdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuLVx0fVxuIFx0cmV0dXJuIG1pbl9sZW47XG4gfVxuIFxuQEAgLTM5ODMsNiAmIzQzOzM5NzcsMTEgQEAgc3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4gXG4gc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4ge1xuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG5ld19sZW4gXHUwMDNjIHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAmIzQzOyBza2ItXHUwMDNlY3N1bV9vZmZzZXQgJiM0MztcbiYjNDM7XHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbiYjNDM7XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuJiM0MztcbiBcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdhY2RiZDU3NTdhOThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuY1xuQEAgLTAsMCAmIzQzOzEsMTI1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0d29ya19oZWxwZXJzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDTElFTlRfTlNcdFwmIzM0O3RjLWNoYW5nZS10YWlsLWNsaS1uc1wmIzM0O1xuJiM0MzsjZGVmaW5lIFNFUlZFUl9OU1x0XCYjMzQ7dGMtY2hhbmdlLXRhaWwtc3J2LW5zXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQ0xJRU5UX0lQXHRcJiMzNDsxOTIuMTY4LjEuMVwmIzM0O1xuJiM0MzsjZGVmaW5lIFNFUlZFUl9JUFx0XCYjMzQ7MTkyLjE2OC4xLjJcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9QTVRVXHQxMDAwXG4mIzQzOyNkZWZpbmUgVEVTVF9NU1NfTUFYXHQoVEVTVF9QTVRVIC0gMjAgLSAyMClcbiYjNDM7I2RlZmluZSBUSU1FT1VUX01TXHQzMDAwXG4mIzQzOyNkZWZpbmUgWEZFUl9CWVRFU1x0ODE5MlxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90Y3hfb3B0cywgdGN4X29wdHMpO1xuJiM0MztcdGludCBtc3NfYmVmb3JlID0gMCwgbXNzX2FmdGVyID0gMCwgaWZpbmRleCwgcG9ydDtcbiYjNDM7XHRpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xO1xuJiM0MztcdHN0cnVjdCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUgKnNrZWwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbiYjNDM7XHRzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107XG4mIzQzO1x0c29ja2xlbl90IG9wdGxlbjtcbiYjNDM7XHRzc2l6ZV90IGJ5dGVzO1xuJiM0MztcdHNpemVfdCB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhDTElFTlRfTlMpLCBcJiMzNDttYWtlIGNsaWVudCBuc1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhTRVJWRVJfTlMpLCBcJiMzNDttYWtlIHNlcnZlciBuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9jbGllbnRfbnM7XG4mIzQzO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwmIzM0O29wZW4gY2xpZW50IG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIGxpbmsgYWRkIHZldGgxIHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDIgbmV0bnMgXCYjMzQ7IFNFUlZFUl9OUyk7XG4mIzQzO1x0U1lTKG91dCwgXCYjMzQ7aXAgLTQgYWRkciBhZGQgXCYjMzQ7IENMSUVOVF9JUCBcJiMzNDsvMjQgZGV2IHZldGgxXCYjMzQ7KTtcbiYjNDM7XHRTWVMob3V0LCBcJiMzNDtpcCBsaW5rIHNldCB2ZXRoMSB1cFwmIzM0Oyk7XG4mIzQzO1x0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O3ZldGgxXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXhcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0bnN0b2tlbiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdG5zdG9rZW4gPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwmIzM0O29wZW4gc2VydmVyIG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIC00IGFkZHIgYWRkIFwmIzM0OyBTRVJWRVJfSVAgXCYjMzQ7LzI0IGRldiB2ZXRoMlwmIzM0Oyk7XG4mIzQzO1x0U1lTKG91dCwgXCYjMzQ7aXAgbGluayBzZXQgdmV0aDIgdXBcJiMzNDspO1xuJiM0MztcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU0VSVkVSX0lQLCAwLCBUSU1FT1VUX01TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFwmIzM0O3N0YXJ0IHNlcnZlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbiYjNDM7XHRuc3Rva2VuID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuIGFuZCBsb2FkIHNrZWxldG9uXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNydl9mZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocG9ydCwgMCwgXCYjMzQ7Z2V0IHNlcnZlciBwb3J0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VzZXJ2ZXJfcG9ydCA9IHBvcnQ7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcG10dSA9IFRFU1RfUE1UVTtcbiYjNDM7XG4mIzQzO1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCYjMzQ7b3BlbiBjbGllbnQgbnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHNrZWwtXHUwMDNlbGlua3MuY2hhbmdlX3RhaWxfaWNtcCA9XG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVx1MDAzZXByb2dzLmNoYW5nZV90YWlsX2ljbXAsIGlmaW5kZXgsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZ0Y3hfb3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3MuY2hhbmdlX3RhaWxfaWNtcCwgXCYjMzQ7YXR0YWNoIHRjeFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Y2xpX2ZkID0gY29ubmVjdF90b19mZChzcnZfZmQsIFRJTUVPVVRfTVMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGNsaV9mZCwgXCYjMzQ7Y29ubmVjdCB0byBzZXJ2ZXJcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0c3J2X2Nvbm5fZmQgPSBhY2NlcHQoc3J2X2ZkLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgXCYjMzQ7YWNjZXB0IGNvbm5lY3Rpb25cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2V0dGltZW8oc3J2X2Nvbm5fZmQsIFRJTUVPVVRfTVMpLCBcJiMzNDtzZXQgc2VydmVyIHRpbWVvdXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZihtc3NfYmVmb3JlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhnZXRzb2Nrb3B0KGNsaV9mZCwgSVBQUk9UT19UQ1AsIFRDUF9NQVhTRUcsIFx1MDAyNm1zc19iZWZvcmUsXG4mIzQzO1x0XHRcdFx0ICBcdTAwMjZvcHRsZW4pLCBcJiMzNDtnZXQgbXNzIGJlZm9yZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0Ynl0ZXMgPSBzZW5kKGNsaV9mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnl0ZXMsIChzc2l6ZV90KXNpemVvZihidWYpLCBcJiMzNDtzZW5kIGRhdGFcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZvciAodG90YWwgPSAwOyB0b3RhbCBcdTAwM2Mgc2l6ZW9mKGJ1Zik7IHRvdGFsICYjNDM7PSBieXRlcykge1xuJiM0MztcdFx0Ynl0ZXMgPSByZWN2KHNydl9jb25uX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbiYjNDM7XHRcdGlmIChieXRlcyBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHRvdGFsLCBzaXplb2YoYnVmKSwgXCYjMzQ7cmVjZWl2ZSBkYXRhXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0soc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWNoYW5nZV90YWlsX3JldCwgXCYjMzQ7Y2hhbmdlIHRhaWxcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2VhZGp1c3Rfcm9vbV9yZXQsIFwmIzM0O2FkanVzdCByb29tXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VpY21wX3NlbnQsIFwmIzM0O2ljbXAgc2VudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG9wdGxlbiA9IHNpemVvZihtc3NfYWZ0ZXIpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXHUwMDI2bXNzX2FmdGVyLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2b3B0bGVuKSwgXCYjMzQ7Z2V0IG1zcyBhZnRlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0xUKG1zc19hZnRlciwgbXNzX2JlZm9yZSwgXCYjMzQ7bXNzIHJlZHVjZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9MRShtc3NfYWZ0ZXIsIFRFU1RfTVNTX01BWCwgXCYjMzQ7bXNzIGJlbG93IHBtdHVcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2Uoc3J2X2Nvbm5fZmQpO1xuJiM0MztcdGNsb3NlKGNsaV9mZCk7XG4mIzQzO1x0Y2xvc2Uoc3J2X2ZkKTtcbiYjNDM7XHR0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHVfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4mIzQzO1x0cmVtb3ZlX25ldG5zKFNFUlZFUl9OUyk7XG4mIzQzO291dF9jbGllbnRfbnM6XG4mIzQzO1x0cmVtb3ZlX25ldG5zKENMSUVOVF9OUyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41YzRjMDc1NDViYzlmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbkBAIC0wLDAgJiM0MzsxLDEyOSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfZW5kaWFuLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgOClcbiYjNDM7I2RlZmluZSBJQ01QX0hEUlNfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSlcbiYjNDM7XG4mIzQzO19fYmUxNiBzZXJ2ZXJfcG9ydCA9IDA7XG4mIzQzO19fdTE2IHBtdHUgPSAwO1xuJiM0MztcbiYjNDM7bG9uZyBjaGFuZ2VfdGFpbF9yZXQgPSAxO1xuJiM0Mztsb25nIGFkanVzdF9yb29tX3JldCA9IDA7XG4mIzQzO2Jvb2wgaWNtcF9zZW50ID0gZmFsc2U7XG4mIzQzO2Jvb2wgaWNtcF9lcnIgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pXG4mIzQzO3tcbiYjNDM7XHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgJiM0MzsgKGNzdW0gXHUwMDNlXHUwMDNlIDE2KTtcbiYjNDM7XHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgJiM0MzsgKGNzdW0gXHUwMDNlXHUwMDNlIDE2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChfX3N1bTE2KX5jc3VtO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGMvZWdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRfX3U4IHNtYWNbRVRIX0FMRU5dLCBkbWFjW0VUSF9BTEVOXTtcbiYjNDM7XHR2b2lkICpkYXRhLCAqZGF0YV9lbmQ7XG4mIzQzO1x0c3RydWN0IGljbXBoZHIgKmljbXA7XG4mIzQzO1x0c3RydWN0IGV0aGhkciAqZXRoO1xuJiM0MztcdHN0cnVjdCB0Y3BoZHIgKnRjcDtcbiYjNDM7XHRfX2JlMzIgc2FkZHIsIGRhZGRyO1xuJiM0MztcdHN0cnVjdCBpcGhkciAqaXA7XG4mIzQzO1x0X193c3VtIGNzdW07XG4mIzQzO1xuJiM0MztcdGlmIChpY21wX3NlbnQgfHwgaWNtcF9lcnIpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1xuJiM0MztcdGV0aCA9IGRhdGE7XG4mIzQzO1x0aWYgKCh2b2lkICopKGV0aCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvICE9IGJwZl9odG9ucyhFVEhfUF9JUCkpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1xuJiM0MztcdGlwID0gKHZvaWQgKikoZXRoICYjNDM7IDEpO1xuJiM0MztcdGlmICgodm9pZCAqKShpcCAmIzQzOyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlobCAhPSA1IHx8IGlwLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuJiM0MztcdFx0cmV0dXJuIFRDWF9QQVNTO1xuJiM0MztcbiYjNDM7XHR0Y3AgPSAodm9pZCAqKShpcCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoKHZvaWQgKikodGNwICYjNDM7IDEpIFx1MDAzZSBkYXRhX2VuZClcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XHRpZiAodGNwLVx1MDAzZWRlc3QgIT0gc2VydmVyX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gVENYX1BBU1M7XG4mIzQzO1x0aWYgKGJwZl9udG9ocyhpcC1cdTAwM2V0b3RfbGVuKSBcdTAwM2M9IHNpemVvZigqaXApICYjNDM7IHRjcC1cdTAwM2Vkb2ZmICogNClcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XG4mIzQzO1x0X19idWlsdGluX21lbWNweShzbWFjLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbiYjNDM7XHRfX2J1aWx0aW5fbWVtY3B5KGRtYWMsIGV0aC1cdTAwM2VoX2Rlc3QsIEVUSF9BTEVOKTtcbiYjNDM7XHRzYWRkciA9IGlwLVx1MDAzZXNhZGRyO1xuJiM0MztcdGRhZGRyID0gaXAtXHUwMDNlZGFkZHI7XG4mIzQzO1xuJiM0MztcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApO1xuJiM0MztcdGlmIChjaGFuZ2VfdGFpbF9yZXQpIHtcbiYjNDM7XHRcdGljbXBfZXJyID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBUQ1hfUEFTUztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkanVzdF9yb29tX3JldCA9IGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCBJQ01QX0hEUlNfTEVOLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQlBGX0FESl9ST09NX01BQyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpO1xuJiM0MztcdGlmIChhZGp1c3Rfcm9vbV9yZXQpIHtcbiYjNDM7XHRcdGljbXBfZXJyID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiBUQ1hfRFJPUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuJiM0MztcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4mIzQzO1xuJiM0MztcdGV0aCA9IGRhdGE7XG4mIzQzO1x0aXAgPSAodm9pZCAqKShldGggJiM0MzsgMSk7XG4mIzQzO1x0aWNtcCA9ICh2b2lkICopKGlwICYjNDM7IDEpO1xuJiM0MztcdGlmICgodm9pZCAqKWljbXAgJiM0Mzsgc2l6ZW9mKCppY21wKSAmIzQzOyBJQ01QX1NBTVBMRV9MRU4gXHUwMDNlIGRhdGFfZW5kKSB7XG4mIzQzO1x0XHRpY21wX2VyciA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gVENYX0RST1A7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX2Rlc3QsIHNtYWMsIEVUSF9BTEVOKTtcbiYjNDM7XHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgZG1hYywgRVRIX0FMRU4pO1xuJiM0MztcbiYjNDM7XHRfX2J1aWx0aW5fbWVtc2V0KGljbXAsIDAsIHNpemVvZigqaWNtcCkpO1xuJiM0MztcdGljbXAtXHUwMDNldHlwZSA9IElDTVBfREVTVF9VTlJFQUNIO1xuJiM0MztcdGljbXAtXHUwMDNlY29kZSA9IElDTVBfRlJBR19ORUVERUQ7XG4mIzQzO1x0aWNtcC1cdTAwM2V1bi5mcmFnLm10dSA9IGJwZl9odG9ucyhwbXR1KTtcbiYjNDM7XG4mIzQzO1x0X19idWlsdGluX21lbXNldChpcCwgMCwgc2l6ZW9mKCppcCkpO1xuJiM0MztcdGlwLVx1MDAzZXZlcnNpb24gPSA0O1xuJiM0MztcdGlwLVx1MDAzZWlobCA9IDU7XG4mIzQzO1x0aXAtXHUwMDNldHRsID0gNjQ7XG4mIzQzO1x0aXAtXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7XG4mIzQzO1x0aXAtXHUwMDNldG90X2xlbiA9IGJwZl9odG9ucyhJQ01QX0hEUlNfTEVOICYjNDM7IElDTVBfU0FNUExFX0xFTik7XG4mIzQzO1x0aXAtXHUwMDNlc2FkZHIgPSBkYWRkcjtcbiYjNDM7XHRpcC1cdTAwM2VkYWRkciA9IHNhZGRyO1xuJiM0MztcbiYjNDM7XHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaWNtcCxcbiYjNDM7XHRcdFx0ICAgICBzaXplb2YoKmljbXApICYjNDM7IElDTVBfU0FNUExFX0xFTiwgMCk7XG4mIzQzO1x0aWNtcC1cdTAwM2VjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTtcbiYjNDM7XHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaXAsIHNpemVvZigqaXApLCAwKTtcbiYjNDM7XHRpcC1cdTAwM2VjaGVjayA9IGNzdW1fZm9sZChjc3VtKTtcbiYjNDM7XHRpY21wX3NlbnQgPSB0cnVlO1xuJiM0MztcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVx1MDAzZWlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzEyZWFiOWY0ZWM0YTQxYTFkYzhlOWE0ZTQ4Y2E4MmRlNTc4Y2IxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNTo1MzowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjE5NDBlNzUzNTUyMy4uODUxMzE2N2E4NThhOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM5NjEsMTIgJiM0MzszOTYxLDYgQEAgc3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlpZiAob2Zmc2V0ICZndDsgMCkKIAkJCW1pbl9sZW4gPSBvZmZzZXQ7CiAJfQotCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCW9mZnNldCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAmIzQzOwotCQkJIHNrYi0mZ3Q7Y3N1bV9vZmZzZXQgJiM0Mzsgc2l6ZW9mKF9fc3VtMTYpOwotCQlpZiAob2Zmc2V0ICZndDsgMCkKLQkJCW1pbl9sZW4gPSBvZmZzZXQ7Ci0JfQogCXJldHVybiBtaW5fbGVuOwogfQogCkBAIC0zOTgzLDYgJiM0MzszOTc3LDExIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKQogCiBzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbikKIHsKJiM0MzsJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJmFtcDsmYW1wOwomIzQzOwkgICAgbmV3X2xlbiAmbHQ7IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAmIzQzOyBza2ItJmd0O2NzdW1fb2Zmc2V0ICYjNDM7CiYjNDM7CQkgICAgICBzaXplb2YoX19zdW0xNikpCiYjNDM7CQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiYjNDM7CiAJcmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdhY2RiZDU3NTdhOTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmMKQEAgLTAsMCAmIzQzOzEsMTI1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIENMSUVOVF9OUwkmIzM0O3RjLWNoYW5nZS10YWlsLWNsaS1ucyYjMzQ7CiYjNDM7I2RlZmluZSBTRVJWRVJfTlMJJiMzNDt0Yy1jaGFuZ2UtdGFpbC1zcnYtbnMmIzM0OwomIzQzOyNkZWZpbmUgQ0xJRU5UX0lQCSYjMzQ7MTkyLjE2OC4xLjEmIzM0OwomIzQzOyNkZWZpbmUgU0VSVkVSX0lQCSYjMzQ7MTkyLjE2OC4xLjImIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9QTVRVCTEwMDAKJiM0MzsjZGVmaW5lIFRFU1RfTVNTX01BWAkoVEVTVF9QTVRVIC0gMjAgLSAyMCkKJiM0MzsjZGVmaW5lIFRJTUVPVVRfTVMJMzAwMAomIzQzOyNkZWZpbmUgWEZFUl9CWVRFUwk4MTkyCiYjNDM7CiYjNDM7dm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90Y3hfb3B0cywgdGN4X29wdHMpOwomIzQzOwlpbnQgbXNzX2JlZm9yZSA9IDAsIG1zc19hZnRlciA9IDAsIGlmaW5kZXgsIHBvcnQ7CiYjNDM7CWludCBzcnZfZmQgPSAtMSwgc3J2X2Nvbm5fZmQgPSAtMSwgY2xpX2ZkID0gLTE7CiYjNDM7CXN0cnVjdCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUgKnNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7CiYjNDM7CXN0YXRpYyBjaGFyIGJ1ZltYRkVSX0JZVEVTXTsKJiM0MzsJc29ja2xlbl90IG9wdGxlbjsKJiM0MzsJc3NpemVfdCBieXRlczsKJiM0MzsJc2l6ZV90IHRvdGFsOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKENMSUVOVF9OUyksICYjMzQ7bWFrZSBjbGllbnQgbnMmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoU0VSVkVSX05TKSwgJiMzNDttYWtlIHNlcnZlciBucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2NsaWVudF9uczsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3BlbiBjbGllbnQgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCBsaW5rIGFkZCB2ZXRoMSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgyIG5ldG5zICYjMzQ7IFNFUlZFUl9OUyk7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgLTQgYWRkciBhZGQgJiMzNDsgQ0xJRU5UX0lQICYjMzQ7LzI0IGRldiB2ZXRoMSYjMzQ7KTsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoMSB1cCYjMzQ7KTsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7dmV0aDEmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gTlVMTDsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3BlbiBzZXJ2ZXIgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCAtNCBhZGRyIGFkZCAmIzM0OyBTRVJWRVJfSVAgJiMzNDsvMjQgZGV2IHZldGgyJiMzNDspOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgc2V0IHZldGgyIHVwJiMzNDspOwomIzQzOwlzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNFUlZFUl9JUCwgMCwgVElNRU9VVF9NUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgJiMzNDtzdGFydCBzZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CW5zdG9rZW4gPSBOVUxMOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW4gYW5kIGxvYWQgc2tlbGV0b24mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzcnZfZmQpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShwb3J0LCAwLCAmIzM0O2dldCBzZXJ2ZXIgcG9ydCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3NlcnZlcl9wb3J0ID0gcG9ydDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtwbXR1ID0gVEVTVF9QTVRVOwomIzQzOwomIzQzOwluc3Rva2VuID0gb3Blbl9uZXRucyhDTElFTlRfTlMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgJiMzNDtvcGVuIGNsaWVudCBucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtsaW5rcy5jaGFuZ2VfdGFpbF9pY21wID0KJiM0MzsJCWJwZl9wcm9ncmFtX19hdHRhY2hfdGN4KHNrZWwtJmd0O3Byb2dzLmNoYW5nZV90YWlsX2ljbXAsIGlmaW5kZXgsCiYjNDM7CQkJCQkmYW1wO3RjeF9vcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2xpbmtzLmNoYW5nZV90YWlsX2ljbXAsICYjMzQ7YXR0YWNoIHRjeCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwljbGlfZmQgPSBjb25uZWN0X3RvX2ZkKHNydl9mZCwgVElNRU9VVF9NUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGNsaV9mZCwgJiMzNDtjb25uZWN0IHRvIHNlcnZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlzcnZfY29ubl9mZCA9IGFjY2VwdChzcnZfZmQsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgJiMzNDthY2NlcHQgY29ubmVjdGlvbiYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhzZXR0aW1lbyhzcnZfY29ubl9mZCwgVElNRU9VVF9NUyksICYjMzQ7c2V0IHNlcnZlciB0aW1lb3V0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihtc3NfYmVmb3JlKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCAmYW1wO21zc19iZWZvcmUsCiYjNDM7CQkJCSAgJmFtcDtvcHRsZW4pLCAmIzM0O2dldCBtc3MgYmVmb3JlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJ5dGVzID0gc2VuZChjbGlfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwlpZiAoIUFTU0VSVF9FUShieXRlcywgKHNzaXplX3Qpc2l6ZW9mKGJ1ZiksICYjMzQ7c2VuZCBkYXRhJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAodG90YWwgPSAwOyB0b3RhbCAmbHQ7IHNpemVvZihidWYpOyB0b3RhbCAmIzQzOz0gYnl0ZXMpIHsKJiM0MzsJCWJ5dGVzID0gcmVjdihzcnZfY29ubl9mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiYjNDM7CQlpZiAoYnl0ZXMgJmx0Oz0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlBU1NFUlRfRVEodG90YWwsIHNpemVvZihidWYpLCAmIzM0O3JlY2VpdmUgZGF0YSYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2RhdGEtJmd0O2NoYW5nZV90YWlsX3JldCwgJiMzNDtjaGFuZ2UgdGFpbCYjMzQ7KTsKJiM0MzsJQVNTRVJUX09LKHNrZWwtJmd0O2Jzcy0mZ3Q7YWRqdXN0X3Jvb21fcmV0LCAmIzM0O2FkanVzdCByb29tJiMzNDspOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O2ljbXBfc2VudCwgJiMzNDtpY21wIHNlbnQmIzM0Oyk7CiYjNDM7CiYjNDM7CW9wdGxlbiA9IHNpemVvZihtc3NfYWZ0ZXIpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhnZXRzb2Nrb3B0KGNsaV9mZCwgSVBQUk9UT19UQ1AsIFRDUF9NQVhTRUcsICZhbXA7bXNzX2FmdGVyLAomIzQzOwkJCQkgICZhbXA7b3B0bGVuKSwgJiMzNDtnZXQgbXNzIGFmdGVyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9MVChtc3NfYWZ0ZXIsIG1zc19iZWZvcmUsICYjMzQ7bXNzIHJlZHVjZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9MRShtc3NfYWZ0ZXIsIFRFU1RfTVNTX01BWCwgJiMzNDttc3MgYmVsb3cgcG10dSYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWNsb3NlKHNydl9jb25uX2ZkKTsKJiM0MzsJY2xvc2UoY2xpX2ZkKTsKJiM0MzsJY2xvc2Uoc3J2X2ZkKTsKJiM0MzsJdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19kZXN0cm95KHNrZWwpOwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJcmVtb3ZlX25ldG5zKFNFUlZFUl9OUyk7CiYjNDM7b3V0X2NsaWVudF9uczoKJiM0MzsJcmVtb3ZlX25ldG5zKENMSUVOVF9OUyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjNGMwNzU0NWJjOWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmMKQEAgLTAsMCAmIzQzOzEsMTI5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRkZWYuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ljbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2VuZGlhbi5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOCShzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyA4KQomIzQzOyNkZWZpbmUgSUNNUF9IRFJTX0xFTgkoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSkKJiM0MzsKJiM0MztfX2JlMTYgc2VydmVyX3BvcnQgPSAwOwomIzQzO19fdTE2IHBtdHUgPSAwOwomIzQzOwomIzQzO2xvbmcgY2hhbmdlX3RhaWxfcmV0ID0gMTsKJiM0Mztsb25nIGFkanVzdF9yb29tX3JldCA9IDA7CiYjNDM7Ym9vbCBpY21wX3NlbnQgPSBmYWxzZTsKJiM0Mztib29sIGljbXBfZXJyID0gZmFsc2U7CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gY3N1bSkKJiM0Mzt7CiYjNDM7CWNzdW0gPSAoY3N1bSAmYW1wOyAweGZmZmYpICYjNDM7IChjc3VtICZndDsmZ3Q7IDE2KTsKJiM0MzsJY3N1bSA9IChjc3VtICZhbXA7IDB4ZmZmZikgJiM0MzsgKGNzdW0gJmd0OyZndDsgMTYpOwomIzQzOwomIzQzOwlyZXR1cm4gKF9fc3VtMTYpfmNzdW07CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjL2VncmVzcyYjMzQ7KQomIzQzO2ludCBjaGFuZ2VfdGFpbF9pY21wKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CV9fdTggc21hY1tFVEhfQUxFTl0sIGRtYWNbRVRIX0FMRU5dOwomIzQzOwl2b2lkICpkYXRhLCAqZGF0YV9lbmQ7CiYjNDM7CXN0cnVjdCBpY21waGRyICppY21wOwomIzQzOwlzdHJ1Y3QgZXRoaGRyICpldGg7CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRjcDsKJiM0MzsJX19iZTMyIHNhZGRyLCBkYWRkcjsKJiM0MzsJc3RydWN0IGlwaGRyICppcDsKJiM0MzsJX193c3VtIGNzdW07CiYjNDM7CiYjNDM7CWlmIChpY21wX3NlbnQgfHwgaWNtcF9lcnIpCiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CiYjNDM7CWRhdGEgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi0mZ3Q7ZGF0YV9lbmQ7CiYjNDM7CiYjNDM7CWV0aCA9IGRhdGE7CiYjNDM7CWlmICgodm9pZCAqKShldGggJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJaWYgKGV0aC0mZ3Q7aF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwlpcCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTsKJiM0MzsJaWYgKCh2b2lkICopKGlwICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CWlmIChpcC0mZ3Q7aWhsICE9IDUgfHwgaXAtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwl0Y3AgPSAodm9pZCAqKShpcCAmIzQzOyAxKTsKJiM0MzsJaWYgKCh2b2lkICopKHRjcCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwlpZiAodGNwLSZndDtkZXN0ICE9IHNlcnZlcl9wb3J0KQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwlpZiAoYnBmX250b2hzKGlwLSZndDt0b3RfbGVuKSAmbHQ7PSBzaXplb2YoKmlwKSAmIzQzOyB0Y3AtJmd0O2RvZmYgKiA0KQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwlfX2J1aWx0aW5fbWVtY3B5KHNtYWMsIGV0aC0mZ3Q7aF9zb3VyY2UsIEVUSF9BTEVOKTsKJiM0MzsJX19idWlsdGluX21lbWNweShkbWFjLCBldGgtJmd0O2hfZGVzdCwgRVRIX0FMRU4pOwomIzQzOwlzYWRkciA9IGlwLSZndDtzYWRkcjsKJiM0MzsJZGFkZHIgPSBpcC0mZ3Q7ZGFkZHI7CiYjNDM7CiYjNDM7CWNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApOwomIzQzOwlpZiAoY2hhbmdlX3RhaWxfcmV0KSB7CiYjNDM7CQlpY21wX2VyciA9IHRydWU7CiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWRqdXN0X3Jvb21fcmV0ID0gYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIElDTVBfSERSU19MRU4sCiYjNDM7CQkJCQkgICAgICBCUEZfQURKX1JPT01fTUFDLAomIzQzOwkJCQkJICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCk7CiYjNDM7CWlmIChhZGp1c3Rfcm9vbV9yZXQpIHsKJiM0MzsJCWljbXBfZXJyID0gdHJ1ZTsKJiM0MzsJCXJldHVybiBUQ1hfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwlkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CWRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwomIzQzOwlldGggPSBkYXRhOwomIzQzOwlpcCA9ICh2b2lkICopKGV0aCAmIzQzOyAxKTsKJiM0MzsJaWNtcCA9ICh2b2lkICopKGlwICYjNDM7IDEpOwomIzQzOwlpZiAoKHZvaWQgKilpY21wICYjNDM7IHNpemVvZigqaWNtcCkgJiM0MzsgSUNNUF9TQU1QTEVfTEVOICZndDsgZGF0YV9lbmQpIHsKJiM0MzsJCWljbXBfZXJyID0gdHJ1ZTsKJiM0MzsJCXJldHVybiBUQ1hfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwlfX2J1aWx0aW5fbWVtY3B5KGV0aC0mZ3Q7aF9kZXN0LCBzbWFjLCBFVEhfQUxFTik7CiYjNDM7CV9fYnVpbHRpbl9tZW1jcHkoZXRoLSZndDtoX3NvdXJjZSwgZG1hYywgRVRIX0FMRU4pOwomIzQzOwomIzQzOwlfX2J1aWx0aW5fbWVtc2V0KGljbXAsIDAsIHNpemVvZigqaWNtcCkpOwomIzQzOwlpY21wLSZndDt0eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7CiYjNDM7CWljbXAtJmd0O2NvZGUgPSBJQ01QX0ZSQUdfTkVFREVEOwomIzQzOwlpY21wLSZndDt1bi5mcmFnLm10dSA9IGJwZl9odG9ucyhwbXR1KTsKJiM0MzsKJiM0MzsJX19idWlsdGluX21lbXNldChpcCwgMCwgc2l6ZW9mKCppcCkpOwomIzQzOwlpcC0mZ3Q7dmVyc2lvbiA9IDQ7CiYjNDM7CWlwLSZndDtpaGwgPSA1OwomIzQzOwlpcC0mZ3Q7dHRsID0gNjQ7CiYjNDM7CWlwLSZndDtwcm90b2NvbCA9IElQUFJPVE9fSUNNUDsKJiM0MzsJaXAtJmd0O3RvdF9sZW4gPSBicGZfaHRvbnMoSUNNUF9IRFJTX0xFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4pOwomIzQzOwlpcC0mZ3Q7c2FkZHIgPSBkYWRkcjsKJiM0MzsJaXAtJmd0O2RhZGRyID0gc2FkZHI7CiYjNDM7CiYjNDM7CWNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpY21wLAomIzQzOwkJCSAgICAgc2l6ZW9mKCppY21wKSAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApOwomIzQzOwlpY21wLSZndDtjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTsKJiM0MzsJY3N1bSA9IGJwZl9jc3VtX2RpZmYoTlVMTCwgMCwgKF9fYmUzMiAqKWlwLCBzaXplb2YoKmlwKSwgMCk7CiYjNDM7CWlwLSZndDtjaGVjayA9IGNzdW1fZm9sZChjc3VtKTsKJiM0MzsJaWNtcF9zZW50ID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIGJwZl9yZWRpcmVjdChza2ItJmd0O2lmaW5kZXgsIEJQRl9GX0lOR1JFU1MpOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTmV0d29yayBGaWx0ZXIgT3B0aW1pemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgdGhleSBhZmZlY3QgdGhlIEJQRiBmaWx0ZXJpbmcgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuCgpGaXJzdCwgaXQgbG9va3MgbGlrZSBhIHNlY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGBfX2JwZl9za2JfbWluX2xlbmAuIFRoZSBvcmlnaW5hbCBjb2RlIHNlZ21lbnQgd2FzIGNoZWNraW5nIGZvciBgQ0hFQ0tTVU1fUEFSVElBTGAgYW5kIGNhbGN1bGF0aW5nIGEgbWluaW11bSBsZW5ndGggYmFzZWQgb24gY2hlY2tzdW0gb2Zmc2V0LiBTZWVtcyBsaWtlIGl0IHdhcyByZWxhdGVkIHRvIHBhcnRpYWxseSBjaGVja3N1bW1lZCBwYWNrZXRzLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgb3B0aW1pemF0aW9uIGNvbnNpZGVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGVjayB3YXMgZGVlbWVkIHVubmVjZXNzYXJ5LiBQZXJoYXBzIHRoaXMgbG9naWMgaXMgaGFuZGxlZCBlbHNld2hlcmUgbm93LCBvciBtYXliZSBpdCYjMzk7cyBiZWluZyBzaW1wbGlmaWVkLgoKVGhlbiwgaW4gYGJwZl9za2JfdHJpbV9yY3N1bWAsIHdlIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBjb25kaXRpb25hbCBjaGVjay4gVGhpcyBjb2RlIGFsc28gYXBwZWFycyByZWxhdGVkIHRvIGBDSEVDS1NVTV9QQVJUSUFMYC4gSWYgdGhlIG5ldyBsZW5ndGggb2YgdGhlIFNLQiBpcyBzbWFsbGVyIHRoYW4gc29tZSBjaGVja3N1bS1yZWxhdGVkIG9mZnNldCwgdGhlbiBgc2tiLSZndDtpcF9zdW1tZWRgIGlzIHNldCB0byBgQ0hFQ0tTVU1fTk9ORWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGhhbmRsaW5nIHRoZSBjaGVja3N1bSB1cGRhdGUgYmV0dGVyIHRoYW4gYmVmb3JlIG9yIHBlcmhhcHMgc2V0dGluZyBpdCB0byBub25lLCBvciBwZXJoYXBzIGRvaW5nIHNvbWUgZm9ybSBvZiByZWNvbXB1dGF0aW9uLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGFzIHRoaXMgY291bGQgYWRkIGxhdGVuY3kgb3IgcmVzdWx0IGluIGluY29ycmVjdCBwYWNrZXRzLgoKVG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCwgSSBzaG91bGQgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgaW50ZW50IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCBpbiB0aGUgb3ZlcmFsbCBCUEYgZXhlY3V0aW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuCkkgbXVzdCBhbHNvIGNoZWNrIHRoZSBhZGRlZCBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBJJiMzOTtsbCB3YW50IHRvIHNlZSB3aGF0IHRoZXNlIHRlc3RzIGNvdmVyLiBBcmUgdGhleSB2YWxpZGF0aW5nIHRoZSB0cmltbWluZyBhbmQgY2hlY2tzdW0gaGFuZGxpbmcgaW4gdmFyaW91cyBzY2VuYXJpb3M/IEFyZSB0aGV5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucz8gVGhleSBzaG91bGQgYmUgdGhlIGZpcnN0IHBsYWNlIEkgc3RhcnQuCgpPdmVyYWxsLCBpdCBzZWVtcyB0aGlzIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGhhbmRsaW5nIG9mIGNoZWNrc3VtcyB3aXRoaW4gdGhlIEJQRiBmaWx0ZXJpbmcgcGlwZWxpbmUsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY29udGV4dCBhbmQgdGVzdHMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NTA6XHR9O1xuMzk1MTpcdFxuMzk1MjpcdHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjM5NTM6XHR7XG4zOTU0Olx0XHRpbnQgb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XG4zOTU1Olx0XHR1MzIgbWluX2xlbiA9IDA7XG4zOTU2Olx0XG4zOTU3Olx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk1ODpcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuMzk1OTpcdFx0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xuMzk2MDpcdFx0XHRvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuMzk2MTpcdFx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk2MjpcdFx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4zOTYzOlx0XHR9XG4zOTY0Olx0XHRyZXR1cm4gbWluX2xlbjtcbjM5NjU6XHR9XG4zOTY2Olx0XG4zOTY3Olx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTY4Olx0e1xuMzk2OTpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuMzk3MDpcdFx0aW50IHJldDtcbjM5NzE6XHRcbjM5NzI6XHRcdHJldCA9IF9fc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM5NzM6XHRcdGlmICghcmV0KVxuMzk3NDpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xuMzk3NTpcdFx0cmV0dXJuIHJldDtcbjM5NzY6XHR9XG4zOTc3Olx0XG4zOTc4Olx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTc5Olx0e1xuMzk4MDpcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbjM5ODE6XHRcdCAgICBuZXdfbGVuIFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICYjNDM7XG4zOTgyOlx0XHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbjM5ODM6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4zOTg0Olx0XG4zOTg1Olx0XHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xuMzk4NjpcdH1cbjM5ODc6XHRcbjM5ODg6XHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4zOTg5Olx0XHRcdFx0XHRcdHU2NCBmbGFncylcbjM5OTA6XHR7XG4zOTkxOlx0XHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcbjM5OTI6XHRcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcbjM5OTM6XHRcdGludCByZXQ7XG4zOTk0Olx0XG4zOTk1Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFx1MDAzYyBtaW5fbGVuKSlcbjM5OTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk3Olx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4zOTk4Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zOTk5Olx0XG40MDAwOlx0XHQvKiBUaGUgYmFzaWMgaWRlYSBvZiB0aGlzIGhlbHBlciBpcyB0aGF0IGl0JiMzOTtzIHBlcmZvcm1pbmcgdGhlXG40MDAxOlx0XHQgKiBuZWVkZWQgd29yayB0byBlaXRoZXIgZ3JvdyBvciB0cmltIGFuIHNrYiwgYW5kIGVCUEYgcHJvZ3JhbVxuNDAwMjpcdFx0ICogcmV3cml0ZXMgdGhlIHJlc3QgdmlhIGhlbHBlcnMgbGlrZSBicGZfc2tiX3N0b3JlX2J5dGVzKCksXG40MDAzOlx0XHQgKiBicGZfbFhfY3N1bV9yZXBsYWNlKCkgYW5kIG90aGVycyByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3XG40MDA0Olx0XHQgKiBidWZmZXIgaGVyZS4gVGhpcyBvbmUgaXMgYSBzbG93IHBhdGggaGVscGVyIGFuZCBpbnRlbmRlZFxuNDAwNTpcdFx0ICogZm9yIHJlcGxpZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzLlxuNDAwNjpcdFx0ICpcbjQwMDc6XHRcdCAqIExpa2UgaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8oKSwgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmF0aGVyXG40MDA4Olx0XHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXG40MDA5Olx0XHQgKiB0byBzZXBhcmF0ZSBjb25jZXJucyBhcyBpbiBicGZfc2tiX3N0b3JlX2J5dGVzKCkgc2hvdWxkIG9ubHlcbjQwMTA6XHRcdCAqIGJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgYnVmZmVycy5cbjQwMTE6XHRcdCAqXG40MDEyOlx0XHQgKiBJdCYjMzk7cyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXG40MDEzOlx0XHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UmIzM5O3JlIGltcGxpY2l0bHkgbGluZWFyaXppbmcsXG40MDE0Olx0XHQgKiB1bmNsb25pbmcgYW5kIGRyb3Agb2ZmbG9hZHMgZnJvbSB0aGUgc2tiIGJ5IHRoaXMuXG40MDE1Olx0XHQgKi9cbjQwMTY6XHRcdHJldCA9IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLVx1MDAzZWxlbik7XG40MDE3Olx0XHRpZiAoIXJldCkge1xuNDAxODpcdFx0XHRpZiAobmV3X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjQwMTk6XHRcdFx0XHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBUYWlsIENoYW5nZXMqKgoKQWxyaWdodCwgSSYjMzk7bSBhdCB0aGUgcG9pbnQgd2hlcmUgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBicGZfc2tiX2NoYW5nZV90YWlsYCBkZWZpbml0aW9ucy4gSSBjYW4mIzM5O3QganVzdCBvcGVyYXRlIGluIGEgdmFjdXVtIGhlcmUuIFRvIGZ1bGx5IGdyYXNwIHRoZWlyIGJlaGF2aW9yIGFuZCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYWR2YW5jZWQgQlBGIHByb2dyYW1zLCBJIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCB3aGF0IHRoZXkgYXJlIGFjdHVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBTS0IgbWFuaXB1bGF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluISBMZXQmIzM5O3Mgc2VlIGhvdyB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIGFuZCBob3cgdGhleSByZWxhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDAxODpcdFx0XHRpZiAobmV3X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjQwMTk6XHRcdFx0XHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjQwMjA6XHRcdFx0ZWxzZSBpZiAobmV3X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbjQwMjE6XHRcdFx0XHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjQwMjI6XHRcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHNrYl9pc19nc28oc2tiKSlcbjQwMjM6XHRcdFx0XHRza2JfZ3NvX3Jlc2V0KHNrYik7XG40MDI0Olx0XHR9XG40MDI1Olx0XHRyZXR1cm4gcmV0O1xuNDAyNjpcdH1cbjQwMjc6XHRcbjQwMjg6XHRCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuNDAyOTpcdFx0ICAgdTY0LCBmbGFncylcbjQwMzA6XHR7XG40MDMxOlx0XHRpbnQgcmV0ID0gX19icGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbmV3X2xlbiwgZmxhZ3MpO1xuNDAzMjpcdFxuNDAzMzpcdFx0YnBmX2NvbXB1dGVfZGF0YV9wb2ludGVycyhza2IpO1xuNDAzNDpcdFx0cmV0dXJuIHJldDtcbjQwMzU6XHR9XG40MDM2Olx0XG40MDM3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xuNDAzODpcdFx0LmZ1bmNcdFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxuNDAzOTpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuNDA0MDpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuNDA0MTpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbjQwNDI6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuNDA0MzpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG40MDQ0Olx0fTtcbjQwNDU6XHRcbjQwNDY6XHRCUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXG40MDQ3Olx0XHQgICB1NjQsIGZsYWdzKVxuNDA0ODpcdHtcbjQwNDk6XHRcdHJldHVybiBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XG40MDUwOlx0fVxuNDA1MTpcdFxuNDA1MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xuNDA1MzpcdFx0LmZ1bmNcdFx0PSBza19za2JfY2hhbmdlX3RhaWwsXG40MDU0Olx0XHQuZ3BsX29ubHlcdD0gZmFsc2UsXG40MDU1Olx0XHQucmV0X3R5cGVcdD0gUkVUX0lOVEVHRVIsXG40MDU2Olx0XHQuYXJnMV90eXBlXHQ9IEFSR19QVFJfVE9fQ1RYLFxuNDA1NzpcdFx0LmFyZzJfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ2MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGJwZl9za2JfY2hhbmdlX3RhaWwgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBicGZfc2tiX2NoYW5nZV90YWlsYCBpcyBhIEJQRiBoZWxwZXIuIEkga25vdyBpdCYjMzk7cyBjYWxsYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyB0aGF0IGF0dGFjaCB0byB0aGluZ3MgbGlrZSBgdGNgIG9yIGBza19za2JgLiBUaGlzIGltbWVkaWF0ZWx5IHB1dHMgaXQgaW4gbXkgJiMzNDtwb3RlbnRpYWxseSBpbnRlcmVzdGluZyYjMzQ7IGNhdGVnb3J5IGJlY2F1c2UgQlBGIHByb2dyYW1zIGFyZSBhIGtub3duIGF0dGFjayBzdXJmYWNlIGFuZCB0aGF0IGFyZWEgaGFzIHNlZW4gaXRzIGZhaXIgc2hhcmUgb2YgdnVsbmVyYWJpbGl0aWVzLiBJdCBtYW5pcHVsYXRlcyBgX19icGZfc2tiX21pbl9sZW5gIGFuZCBgYnBmX3NrYl90cmltX3Jjc3VtYC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggbWFrZXMgaXQgcmVhY2hhYmxlIGNvZGUgYW5kLCBpbXBvcnRhbnRseSwgY29kZSB0aGF0JiMzOTtzIGFscmVhZHkgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBrZXJuZWwgYW5kIHN5emthbGxlciBmdXp6aW5nLgoKTm93LCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcsJiMzNDsgbGV0JiMzOTtzIGV2YWx1YXRlOgoKKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogSXQmIzM5O3MgYWJzb2x1dGVseSBjb3JlLiBXZSYjMzk7cmUgdGFsa2luZyBCUEYgaGVscGVyIGZ1bmN0aW9ucywgY29yZSBuZXR3b3JraW5nLCBhbmQgU0tCIG1hbmlwdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBhbmQgYGJwZl9za2JfdHJpbV9yY3N1bWAuCiogICAqKlJlYWNoYWJsZToqKiBDbGVhcmx5IHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGB0Y2AsIHNvY2tldHMsIGV0Yy4gVGhhdCYjMzk7cyBhIGh1Z2UgcG9zaXRpdmUuCiogICAqKlNlbWFudGljIENoYW5nZXM6KiogVGhpcyBtb2RpZmllcyBob3cgU0tCIGNoZWNrc3VtbWluZyAoYHNrYi0mZ3Q7aXBfc3VtbWVkYCkgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBoYXMgdG8gZG8gd2l0aCB0cmltbWluZyBhbiBTS0Igd2l0aCBgQ0hFQ0tTVU1fUEFSVElBTGAgYmVsb3cgdGhlIGNoZWNrc3VtIG9mZnNldCwgYW5kIHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIHJlc3RyaWN0aW9uIHRoYXQgcHJldmlvdXNseSBwcmV2ZW50ZWQgdHJpbW1pbmcgcGFja2V0cyB3aXRoIGBDSEVDS1NVTV9QQVJUSUFMYCBwYXN0IHRoZSBjaGVja3N1bSBvZmZzZXQuCiogICAqKkltcGFjdDoqKiBUaGlzIGlzIHNpZ25pZmljYW50ISBXZSYjMzk7cmUgY2hhbmdpbmcgcGFja2V0IG1hbmlwdWxhdGlvbiBzZW1hbnRpY3MgYW5kIFNLQiBzdGF0ZS4gVGhlIGZhY3QgdGhhdCBpdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCBjaGVja3N1bW1pbmcgYW5kIHN1YnNlcXVlbnQgbmV0d29yayBzdGFjayBwcm9jZXNzaW5nIGlzIGEgaHVnZSByZWQgZmxhZyB0aGF0IGluZGljYXRlcyBpdOKAmXMgV29ydGhGdXp6aW5nLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSB0cnVlLCB0aGlzIGlzIGltcG9ydGFudCBhbmQgbmVlZHMgYXR0ZW50aW9uLgoKTmV4dCBzdGVwOiBMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPwoqICAgYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgIGlzIHN0YXRpYyBpbmxpbmUsIHdoaWNoIG1lYW5zIGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhhdCBpcyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4KKiAgIGBicGZfc2tiX3RyaW1fcmNzdW1gLiBXYWl0IGEgbWludXRlLCB0aGF0IGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluc2lkZSBgZmlsdGVyLmNgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiBgYnBmX3NrYl90cmltX3Jjc3VtYCBpcyBzdGF0aWMgYW5kIHdoZXJlIGVsc2UgaXQgbWlnaHQgYmUgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZ3JlcHBlciB0byBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZCBhbmQgYnkgd2hhdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgZ29vZCBmdXp6aW5nIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrYl90cmltX3Jjc3VtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTM5Njc9c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzk3Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5Nzg6c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG5uZXQvY29yZS9maWx0ZXIuYy0zOTc5LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0zOTg4PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MDIwLVx0XHRlbHNlIGlmIChuZXdfbGVuIFx1MDAzYyBza2ItXHUwMDNlbGVuKVxubmV0L2NvcmUvZmlsdGVyLmM6NDAyMTpcdFx0XHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjItXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBUYWlsLUNoYW5naW5nIE1lY2hhbmlzbXMgaW4gQlBGKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIGRlZmluZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYEJQRl9DQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmdW5jdGlvbiBzeW1ib2wsIG9yIGl0cyBwb3RlbnRpYWwgYWxpYXNlcyBsaWtlIGBfX19fYnBmX3NrYl9jaGFuZ2VfdGFpbGAgb3IganVzdCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCAuLi4pYCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFuYWx5c2lzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgb3RoZXIgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGFsbCByZWxhdGVkIHN5bWJvbHMgYW5kIHdoYXQgdGhleSBkby4gSSBrbm93IHRoYXQgbG9va2luZyBhdCB0aGUgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVzaWduIGFuZCB1c2UgY2FzZSBmb3IgY2hhbmdpbmcgdGhlIHRhaWwgb2YgYW4gU0tCIGZyb20gd2l0aGluIGEgQlBGIHByb2dyYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNzYzLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6Mjc2NDogKiBsb25nIGJwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbiwgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjUtICogXHREZXNjcmlwdGlvblxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTM5Nzg9c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzk4Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjM5ODg6c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtMzk4OS1cdFx0XHRcdFx0dTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjctXG5uZXQvY29yZS9maWx0ZXIuYzo0MDI4OkJQRl9DQUxMXzMoYnBmX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXG5uZXQvY29yZS9maWx0ZXIuYy00MDI5LVx0ICAgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzAte1xubmV0L2NvcmUvZmlsdGVyLmM6NDAzMTpcdGludCByZXQgPSBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYy00MDMyLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzYtXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjQwMzg6XHQuZnVuY1x0XHQ9IGJwZl9za2JfY2hhbmdlX3RhaWwsXG5uZXQvY29yZS9maWx0ZXIuYy00MDM5LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQwNDY9QlBGX0NBTExfMyhza19za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDgte1xubmV0L2NvcmUvZmlsdGVyLmM6NDA0OTpcdHJldHVybiBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYy00MDUwLX1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00MDYxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaGVhZF9yb29tLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwNzgtXHRcdCAqIHNrYi1cdTAwM2Vwcm90b2NvbCBuZXR3b3JrIGhlYWRlciwgZXRjLCBzdGF5IGFzIGlzLlxubmV0L2NvcmUvZmlsdGVyLmM6NDA3OTpcdFx0ICogQ29tcGFyZWQgdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbCgpLCB3ZSYjMzk7cmUgbW9yZVxubmV0L2NvcmUvZmlsdGVyLmMtNDA4MC1cdFx0ICogZmxleGlibGUgZHVlIHRvIG5vdCBuZWVkaW5nIHRvIGxpbmVhcml6ZSBvclxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjE9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODY1OC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwMDU9bHd0X3htaXRfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05MDIwLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX3RhaWw6XG5uZXQvY29yZS9maWx0ZXIuYzo5MDIxOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMjItXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjMtICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyNzY0OiAqIGxvbmcgYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuLCB1NjQgZmxhZ3MpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjc2NS0gKiBcdERlc2NyaXB0aW9uXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jPTIxPWludCBwcm9nX3NrYl92ZXJkaWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzItXHRpZiAoZGF0YVswXSA9PSAmIzM5O1QmIzM5OykgeyAvKiBUcmltIHRoZSBwYWNrZXQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYzozMzpcdFx0Y2hhbmdlX3RhaWxfcmV0ID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIHNrYi1cdTAwM2VsZW4gLSAxLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy0zNC1cdFx0cmV0dXJuIFNLX1BBU1M7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzUtXHR9IGVsc2UgaWYgKGRhdGFbMF0gPT0gJiMzOTtHJiMzOTspIHsgLyogR3JvdyB0aGUgcGFja2V0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmM6MzY6XHRcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXHUwMDNlbGVuICYjNDM7IDEsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jLTM3LVx0XHRyZXR1cm4gU0tfUEFTUztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy0zOC1cdH0gZWxzZSBpZiAoZGF0YVswXSA9PSAmIzM5O0UmIzM5OykgeyAvKiBFcnJvciAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jOjM5Olx0XHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgQlBGX1NLQl9NQVhfTEVOLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy00MC1cdFx0cmV0dXJuIFNLX1BBU1M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmM9NTQ9aW50IHByb2dfc2tiX3BhcnNlcl9yZXNpemUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMtNTUte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmM6NTY6XHRicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgc2tiLVx1MDAzZWxlbiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYy01Ny1cdHJldHVybiBza2ItXHUwMDNlbGVuO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM9NTk9aW50IGNoYW5nZV90YWlsKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTg2LVx0aWYgKHBheWxvYWRbMF0gPT0gJiMzOTtUJiMzOTspIHsgLyogVHJpbSB0aGUgcGFja2V0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjg3Olx0XHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbGVuIC0gMSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTg4LVx0XHRpZiAoIWNoYW5nZV90YWlsX3JldClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6ODk6XHRcdFx0YnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIGxlbiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTkwLVx0XHRyZXR1cm4gVENYX1BBU1M7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTkxLVx0fSBlbHNlIGlmIChwYXlsb2FkWzBdID09ICYjMzk7RyYjMzk7KSB7IC8qIEdyb3cgdGhlIHBhY2tldCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo5MjpcdFx0Y2hhbmdlX3RhaWxfcmV0ID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIGxlbiAmIzQzOyAxLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTMtXHRcdGlmICghY2hhbmdlX3RhaWxfcmV0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo5NDpcdFx0XHRicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbGVuLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTUtXHRcdHJldHVybiBUQ1hfUEFTUztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTYtXHR9IGVsc2UgaWYgKHBheWxvYWRbMF0gPT0gJiMzOTtFJiMzOTspIHsgLyogRXJyb3IgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6OTc6XHRcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBCUEZfU0tCX01BWF9MRU4sIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05OC1cdFx0cmV0dXJuIFRDWF9QQVNTO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05OS1cdH0gZWxzZSBpZiAocGF5bG9hZFswXSA9PSAmIzM5O1omIzM5OykgeyAvKiBaZXJvICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjEwMDpcdFx0Y2hhbmdlX3RhaWxfcmV0ID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIDAsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy0xMDEtXHRcdHJldHVybiBUQ1hfUEFTUztcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmM9MzY9aW50IGNoYW5nZV90YWlsX2ljbXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYy03Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYzo3ODpcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiAmIzQzOyBJQ01QX1NBTVBMRV9MRU4sIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jLTc5LVx0aWYgKGNoYW5nZV90YWlsX3JldCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmM9MTI2PXN0YXRpYyBpbnQgdGNwX3JlbG9hZF9oZWFkZXJzKHN0cnVjdCB0Y3Bfc3luY29va2llICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzYtXHQvKiBOZWVkZWQgdG8gY2FsY3VsYXRlIGNzdW0gYW5kIHBhcnNlIFRDUCBvcHRpb25zLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYzoxMzc6XHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgtXHUwMDNlc2tiLCBkYXRhX2xlbiAmIzQzOyA2MCAtIGN0eC1cdTAwM2V0Y3AtXHUwMDNlZG9mZiAqIDQsIDApKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzgtXHRcdGdvdG8gZXJyO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmM9NDAxPXN0YXRpYyBpbnQgdGNwX2hhbmRsZV9zeW4oc3RydWN0IHRjcF9zeW5jb29raWUgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjcF9jdXN0b21fc3luY29va2llLmM6NDU2Olx0aWYgKGJwZl9za2JfY2hhbmdlX3RhaWwoY3R4LVx1MDAzZXNrYiwgKGxvbmcpY3R4LVx1MDAzZXB0cjMyIC0gKGxvbmcpY3R4LVx1MDAzZWV0aCwgMCkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1Ny1cdFx0Z290byBlcnI7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYz02MzU9aW50IGhlbHBlcl9za2JfY2hhbmdlX2hlYWRfdGFpbChzdHJ1Y3QgX19za19idWZmICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy02NTUtXHQvKiBSZXNlcnZlIDRrIGV4dHJhIGJ5dGVzIGluIHRoZSBiYWNrIHRvIHRyaWdnZXIgaGVhZCByZWFsbG9jYXRpb24gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM6NjU2Olx0ZXJyID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgsIGN0eC1cdTAwM2VsZW4gJiM0MzsgNDA5NiwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF94ZHBfbWV0YS5jLTY1Ny1cdGlmIChlcnIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmM9NTc5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHN5bmNvb2tpZV9oYW5kbGVfc3luKHN0cnVjdCBoZWFkZXJfcG9pbnRlcnMgKmhkcixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03MjEtXHR9IGVsc2Uge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmM6NzIyOlx0XHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgsIG5ld19wa3Rfc2l6ZSwgMCkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03MjMtXHRcdFx0cmV0dXJuIFhEUF9BQk9SVEVEO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jPTc1MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzeW5jb29raWVfcGFydDEodm9pZCAqY3R4LCB2b2lkICpkYXRhLCB2b2lkICpkYXRhX2VuZCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03NzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYzo3ODA6XHRcdGlmIChicGZfc2tiX2NoYW5nZV90YWlsKGN0eCwgb2xkX2xlbiAmIzQzOyBUQ1BfTUFYTEVOIC0gaGRyLVx1MDAzZXRjcF9sZW4sIDApKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmMtNzgxLVx0XHRcdHJldHVybiBYRFBfQUJPUlRFRDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NDMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAqKgoKT2theSwgc28gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzIGZvciBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBza19za2JfY2hhbmdlX3RhaWxgIGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hhdCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgYXJlICpyZXF1aXJlZCogdG8gZW5hYmxlIG9yIGJ1aWxkIHRoZXNlIGZ1bmN0aW9uYWxpdGllcy4gSSYjMzk7bSB0aGlua2luZyB0aGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgcG9raW5nIGFyb3VuZCBmb3IgdGhpcyBpbmZvIGFyZSB0aGUgbWFrZWZpbGVzIG9yIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgbmV0d29ya2luZyBjb3JlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgZmlyc3QsIHRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIHJlbGlhYmxlIHBsYWNlIHRvIGdldCBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMuIElmIEkgZG9uJiMzOTt0IGZpbmQgdGhlIGFuc3dlcnMgaW1tZWRpYXRlbHkgdGhlcmUsIEkgc2hvdWxkIGNoZWNrIHRoZSBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZXMsIHN1Y2ggYXMgYG5ldC9LY29uZmlnYCwgYGluaXQvS2NvbmZpZ2AsIG9yIHBvdGVudGlhbGx5IGV2ZW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNpbmNlIEJQRiBpcywgYWZ0ZXIgYWxsLCBmdW5kYW1lbnRhbGx5IGludm9sdmVkLiBJdCYjMzk7cyBhIHN5c3RlbWF0aWMgYXBwcm9hY2ggLSBsb29rIGZvciB0aGUgb2J2aW91cyBhbmQgdGhlbiBkcmlsbCBkb3duIGFzIG5lZWRlZC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbHRlclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy04Ny0gKlxubmV0L2NvcmUvcGt0Z2VuLmM6ODg6ICogUmVtb3ZlIGlmIGZpeCBmcm9tIGFkZGVkIEhhcmFsZCBXZWx0ZSBcdTAwM2NsYWZvcmdlQG5ldGZpbHRlci5vcmdcdTAwM2UgMDQwNDE5XG5uZXQvY29yZS9wa3RnZW4uYy04OS0gKiBpYTY0IGNvbXBpbGF0aW9uIGZpeCBmcm9tICBBcm9uIEdyaWZmaXMgXHUwMDNjYXJvbkBocC5jb21cdTAwM2UgMDQwNjA0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZSBuZXR3b3JrIGZpbHRlcmluZyBvYmplY3QsIHNwZWNpZmljYWxseSBgbmV0L2NvcmUvZmlsdGVyLm9gLiBUaGUgTWFrZWZpbGUgaW5kaWNhdGVzIHRoYXQgaXQmIzM5O3MgaW5jbHVkZWQgdXNpbmcgYG9iai15YCB3aXRoaW4gYG5ldC9jb3JlL01ha2VmaWxlYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBUaGF0IHBhcmVudCBkaXJlY3RvcnkgaXMgY29uZGl0aW9uZWQgb24gYENPTkZJR19ORVRgLiBHb3QgaXQuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgQlBGIHN5c2NhbGwgc3VwcG9ydCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXMgaXQgY29uZGl0aW9uYWwgYmFzZWQgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgZGlyZWN0bHksIG9yIGRvZXMgaXQgYWxzbyBkZXBlbmQgb24gdGhlIG92ZXJhcmNoaW5nIGBDT05GSUdfTkVUYCBjb25maWd1cmF0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyB0byBrbm93IGZvciBzdXJlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBpdCB3aWxsIGJlIGBDT05GSUdfQlBGX1NZU0NBTExgLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4KCkZ1cnRoZXJtb3JlLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBzb3VyY2UgY29kZSBpdHNlbGYuIEkgd2FudCB0byBjaGVjayBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzLCBsaWtlIGAjaWZkZWYgQ09ORklHXy4uLmAsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmdW5jdGlvbiwgYW5kIGFueSBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IHRoZSBCUEYgc3VwcG9ydCBvciBldmVuIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2sgbWlnaHQgY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgdGhpcyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9NDk1PXN0YXRpYyBib29sIGNvbnZlcnRfYnBmX2xkX2FicyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKippbnNucClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5Ni17XG5uZXQvY29yZS9maWx0ZXIuYzo0OTc6XHRjb25zdCBib29sIHVuYWxpZ25lZF9vayA9IElTX0JVSUxUSU4oQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDk4LVx0aW50IHNpemUgPSBicGZfc2l6ZV90b19ieXRlcyhCUEZfU0laRShmcC1cdTAwM2Vjb2RlKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTY4MT1zdGF0aWMgaW5saW5lIGludCBfX2JwZl90cnlfbWFrZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTE2ODMte1xubmV0L2NvcmUvZmlsdGVyLmM6MTY4NDojaWZkZWYgQ09ORklHX0RFQlVHX05FVFxubmV0L2NvcmUvZmlsdGVyLmMtMTY4NS1cdC8qIEF2b2lkIGEgc3BsYXQgaW4gcHNrYl9tYXlfcHVsbF9yZWFzb24oKSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIyMDc9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTUtXG5uZXQvY29yZS9maWx0ZXIuYzoyMjE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNy1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIzMTM9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzMTgtfVxubmV0L2NvcmUvZmlsdGVyLmM6MjMxOTojZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTIzMjAtXG5uZXQvY29yZS9maWx0ZXIuYzoyMzIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI0MjQ9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI0MjktfVxubmV0L2NvcmUvZmlsdGVyLmM6MjQzMDojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTI0MzEtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MzE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9tc2dfcG9wX2RhdGFfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMzE5Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjMxOTM6I2lmZGVmIENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSURcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTQtQlBGX0NBTExfMChicGZfZ2V0X2Nncm91cF9jbGFzc2lkX2N1cnIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUzMz1FWFBPUlRfU1lNQk9MX0dQTCh4ZHBfZG9fZmx1c2gpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ1MzU6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNi12b2lkIHhkcF9kb19jaGVja19mbHVzaGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz01MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNTE3OS1cbm5ldC9jb3JlL2ZpbHRlci5jOjUxODA6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy01MTgxLXN0YXRpYyBpbmxpbmUgdTY0IF9fYnBmX3NrX2Nncm91cF9pZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTc3Nj1zdGF0aWMgaW50IF9fYnBmX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODMtXHRcdHJldHVybiBzb2xfc29ja2V0X3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg0Olx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9JUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODUtXHRcdHJldHVybiBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODY6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy01Nzg3LVx0XHRyZXR1cm4gc29sX2lwdjZfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIGZhbHNlKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjU3ODg6XHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JTkVUKSBcdTAwMjZcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU3ODktXHRcdHJldHVybiBzb2xfdGNwX3NvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgXHUwMDI2b3B0bGVuLCBmYWxzZSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NTgwNz1zdGF0aWMgaW50IF9fYnBmX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTgtXHRcdGVyciA9IHNvbF9zb2NrZXRfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xubmV0L2NvcmUvZmlsdGVyLmM6NTgxOTpcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQKVxubmV0L2NvcmUvZmlsdGVyLmMtNTgyMC1cdFx0ZXJyID0gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIxOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9JUClcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MjItXHRcdGVyciA9IHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFx1MDAyNm9wdGxlbiwgdHJ1ZSk7XG5uZXQvY29yZS9maWx0ZXIuYzo1ODIzOlx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2IGxldmVsID09IFNPTF9JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNTgyNC1cdFx0ZXJyID0gc29sX2lwdjZfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcdTAwMjZvcHRsZW4sIHRydWUpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYxMzU9QlBGX0NBTExfNShicGZfc29ja19vcHNfZ2V0c29ja29wdCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYxNDAtXG5uZXQvY29yZS9maWx0ZXIuYzo2MTQxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFx1MDAyNlx1MDAyNiBsZXZlbCA9PSBTT0xfVENQIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZmlsdGVyLmMtNjE0Mi1cdCAgICBvcHRuYW1lIFx1MDAzZT0gVENQX0JQRl9TWU4gXHUwMDI2XHUwMDI2IG9wdG5hbWUgXHUwMDNjPSBUQ1BfQlBGX1NZTl9NQUMpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MTc3PUJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYxODUtXG5uZXQvY29yZS9maWx0ZXIuYzo2MTg2Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCAhc2tfZnVsbHNvY2soc2spKVxubmV0L2NvcmUvZmlsdGVyLmMtNjE4Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMj1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNC17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjA1OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNi1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjE4LVx0XHRyZXR1cm4gX19pbmV0X2JpbmQoc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHIsIGFkZHJfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC1cdH0gZWxzZSBpZiAoYWRkci1cdTAwM2VzYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjI3LVx0XHRcdFx0ICAgIGFkZHJfbGVuLCBmbGFncyk7XG5uZXQvY29yZS9maWx0ZXIuYzo2MjI4OiNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xubmV0L2NvcmUvZmlsdGVyLmMtNjIyOS1cdH1cbm5ldC9jb3JlL2ZpbHRlci5jOjYyMzA6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy02MjMxLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTYyMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYmluZF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MjQzLVxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NDojaWZkZWYgQ09ORklHX1hGUk1cbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDUtXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ2OiNpZiAoSVNfQlVJTFRJTihDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHx8IFxcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjQ3OiAgICAoSVNfTU9EVUxFKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpKVxubmV0L2NvcmUvZmlsdGVyLmMtNjI0OC1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Mjk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NjI5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDAtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjMwNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjYzMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1ZMQU5fODAyMVEpXG5uZXQvY29yZS9maWx0ZXIuYy02MzA4LVx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZJQl9MT09LVVBfVkxBTikgXHUwMDI2XHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MzI5PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYzNDgtXG5uZXQvY29yZS9maWx0ZXIuYzo2MzQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjM1MC1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NDg3LVx0XHRcdFx0XHRcdCAgKF9fZm9yY2UgdTMyKXBhcmFtcy1cdTAwM2VpcHY0X2RzdCk7XG5uZXQvY29yZS9maWx0ZXIuYzo2NDg4Olx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikpXG5uZXQvY29yZS9maWx0ZXIuYy02NDg5LVx0XHRuZWlnaCA9IF9faXB2Nl9uZWlnaF9sb29rdXBfbm9yZWYoZGV2LCBwYXJhbXMtXHUwMDNlaXB2Nl9kc3QpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDAtXG5uZXQvY29yZS9maWx0ZXIuYzo2NTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjUwMi1zdGF0aWMgaW50IGJwZl9pcHY2X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NjcxPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODAtXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY2ODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02NjgyLVx0Y2FzZSBBRl9JTkVUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODUtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo2Njg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjY4Ny1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjcwNT1CUEZfQ0FMTF80KGJwZl9za2JfZmliX2xvb2t1cCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjQtXHRzd2l0Y2ggKHBhcmFtcy1cdTAwM2VmYW1pbHkpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY3MjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy02NzI2LVx0Y2FzZSBBRl9JTkVUOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjktI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo2NzMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNjczMS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Njg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXG5uZXQvY29yZS9maWx0ZXIuYzo2ODc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjg3OS1zdGF0aWMgaW50IGJwZl9wdXNoX3NlZzZfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR5cGUsIHZvaWQgKmhkciwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTEwLX1cbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTE6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXG5uZXQvY29yZS9maWx0ZXIuYy02OTEyLVxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkxNC1zdGF0aWMgaW50IGJwZl9wdXNoX2lwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkciwgdTMyIGxlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTIxPUJQRl9DQUxMXzQoYnBmX2x3dF9pbl9wdXNoX2VuY2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgdHlwZSwgdm9pZCAqLCBoZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cdHN3aXRjaCAodHlwZSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjkyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXHRjYXNlIEJQRl9MV1RfRU5DQVBfU0VHNjpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTI5LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6NjkzMDojaWYgSVNfRU5BQkxFRChDT05GSUdfTFdUVU5ORUxfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjkzMS1cdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02OTM5PUJQRl9DQUxMXzQoYnBmX2x3dF94bWl0X3B1c2hfZW5jYXAsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDItXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NDQtXHRjYXNlIEJQRl9MV1RfRU5DQVBfSVA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Njk2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3RfeG1pdF9wdXNoX2VuY2FwX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzEtXG5uZXQvY29yZS9maWx0ZXIuYzo2OTcyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxubmV0L2NvcmUvZmlsdGVyLmMtNjk3My1CUEZfQ0FMTF80KGJwZl9sd3Rfc2VnNl9zdG9yZV9ieXRlcywgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG9mZnNldCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE2My19O1xubmV0L2NvcmUvZmlsdGVyLmM6NzE2NDojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjUtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2Ny1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NS1cdFx0XHRcdFx0ICAgICAgIGRpZiwgc2RpZiwgTlVMTCk7XG5uZXQvY29yZS9maWx0ZXIuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4Ny1cdH0gZWxzZSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzgzOT1CUEZfQ0FMTF81KGJwZl90Y3BfY2hlY2tfc3luY29va2llLCBzdHJ1Y3Qgc29jayAqLCBzaywgdm9pZCAqLCBpcGgsIHUzMiwgaXBoX2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03ODQxLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjc4NDI6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtNzg0My1cdGludCByZXQ7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzg3NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjc4NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy03ODc2LVx0Y2FzZSA2OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc4ODQtXHRcdGJyZWFrO1xubmV0L2NvcmUvZmlsdGVyLmM6Nzg4NTojZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTc4ODYtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzkxMj1CUEZfQ0FMTF81KGJwZl90Y3BfZ2VuX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzkxNC17XG5uZXQvY29yZS9maWx0ZXIuYzo3OTE1OiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcbm5ldC9jb3JlL2ZpbHRlci5jLTc5MTYtXHR1MzIgY29va2llO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NDQtXG5uZXQvY29yZS9maWx0ZXIuYzo3OTQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtNzk0Ni1cdGNhc2UgNjpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03OTU0LVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jOjc5NTU6I2VuZGlmIC8qIENPTkZJR19JUFY2ICovXG5uZXQvY29yZS9maWx0ZXIuYy03OTU2LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NjUtXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5uZXQvY29yZS9maWx0ZXIuYzo3OTY2OiNlbmRpZiAvKiBDT05GSUdfU1lOX0NPT0tJRVMgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTc5NjctfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90c3RhbXBfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODI4MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjgyODE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xubmV0L2NvcmUvZmlsdGVyLmMtODI4Mi1CUEZfQ0FMTF8zKGJwZl90Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NCwgc3RydWN0IGlwaGRyICosIGlwaCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04MzA4PUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODMxMC17XG5uZXQvY29yZS9maWx0ZXIuYzo4MzExOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtODMxMi1cdGNvbnN0IHUxNiBtc3NfY2xhbXAgPSBJUFY2X01JTl9NVFUgLSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTgzNjA9QlBGX0NBTExfMihicGZfdGNwX3Jhd19jaGVja19zeW5jb29raWVfaXB2Niwgc3RydWN0IGlwdjZoZHIgKiwgaXBoLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjIte1xubmV0L2NvcmUvZmlsdGVyLmM6ODM2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjQtXHRpZiAoX19jb29raWVfdjZfY2hlY2soaXBoLCB0aCkgXHUwMDNlIDApXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODM3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTgzODItfTtcbm5ldC9jb3JlL2ZpbHRlci5jOjgzODM6I2VuZGlmIC8qIENPTkZJR19TWU5fQ09PS0lFUyAqL1xubmV0L2NvcmUvZmlsdGVyLmMtODM4NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjgzODU6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy04Mzg2LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjM9c29ja19hZGRyX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODQ4NS1cdFx0cmV0dXJuIFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg0ODY6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NDg3LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg0OTQtXHRcdHJldHVybiBcdTAwMjZicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODQ5NTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTg0OTYtXHRjYXNlIEJQRl9GVU5DX3NrX3N0b3JhZ2VfZ2V0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg1NzI9Y2dfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODU4OC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODU4OTojaWZkZWYgQ09ORklHX1NPQ0tfQ0dST1VQX0RBVEFcbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTAtXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfaWQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODU5OC0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg1OTk6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NjAwLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjE9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDMtXHRcdHJldHVybiBcdTAwMjZicGZfc2tfc3RvcmFnZV9kZWxldGVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NzA0OiNpZmRlZiBDT05GSUdfWEZSTVxubmV0L2NvcmUvZmlsdGVyLmMtODcwNS1cdGNhc2UgQlBGX0ZVTkNfc2tiX2dldF94ZnJtX3N0YXRlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDctI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NzA4OiNpZmRlZiBDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEXG5uZXQvY29yZS9maWx0ZXIuYy04NzA5LVx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2NsYXNzaWQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODcxMS0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTI6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG5uZXQvY29yZS9maWx0ZXIuYy04NzEzLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2lkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3MTctI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzo4NzE4OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODcxOS1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzQwLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9zZXRfdHN0YW1wX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODc0MTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXG5uZXQvY29yZS9maWx0ZXIuYy04NzQyLVx0Y2FzZSBCUEZfRlVOQ190Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzU4PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODYtXHRcdHJldHVybiBcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODc6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg4LVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3OTktXHRcdHJldHVybiBcdTAwMjZicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4ODAwOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcbm5ldC9jb3JlL2ZpbHRlci5jLTg4MDEtXHRjYXNlIEJQRl9GVU5DX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4MTQtXG5uZXQvY29yZS9maWx0ZXIuYzo4ODE1OiNpZiBJU19NT0RVTEUoQ09ORklHX05GX0NPTk5UUkFDSykgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpXG5uZXQvY29yZS9maWx0ZXIuYy04ODE2LVx0LyogVGhlIG5mX2Nvbm5fX19pbml0IHR5cGUgaXMgdXNlZCBpbiB0aGUgTkZfQ09OTlRSQUNLIGtmdW5jcy4gVGhlXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODgzMz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjEtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X25ldG5zX2Nvb2tpZV9zb2NrX29wc19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04ODYzLVx0Y2FzZSBCUEZfRlVOQ19sb2FkX2hkcl9vcHQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODg3MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl90Y3Bfc29ja19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NzE6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXG5uZXQvY29yZS9maWx0ZXIuYy04ODcyLVx0ZGVmYXVsdDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04OTE1PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg5MzktXHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NDA6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04OTQxLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTkwNDQ9bHd0X3NlZzZsb2NhbF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDYtXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjkwNDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjZfU0VHNl9CUEYpXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ4LVx0Y2FzZSBCUEZfRlVOQ19sd3Rfc2VnNl9zdG9yZV9ieXRlczpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05OTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF9yZWFkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy05OTcwLVxubmV0L2NvcmUvZmlsdGVyLmM6OTk3MTojaWZkZWYgQ09ORklHX05FVF9YR1JFU1Ncbm5ldC9jb3JlL2ZpbHRlci5jLTk5NzItXHQvKiBJZiB0aGUgdHN0YW1wX3R5cGUgaXMgcmVhZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05OTk5PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF93cml0ZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAwMDUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMDAwNjojaWZkZWYgQ09ORklHX05FVF9YR1JFU1Ncbm5ldC9jb3JlL2ZpbHRlci5jLTEwMDA3LVx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTAwMzc9c3RhdGljIHUzMiBicGZfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMTAtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIHRjX2luZGV4KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIxMi1cdFx0aWYgKHR5cGUgPT0gQlBGX1dSSVRFKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjI5LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBuYXBpX2lkKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjMwOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMzEtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjc2LVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCByZW1vdGVfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjc3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzgtXHRcdEJVSUxEX0JVR19PTihzaXplb2ZfZmllbGQoc3RydWN0IHNvY2tfY29tbW9uLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjk2LVx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBsb2NhbF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTAyOTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI5OC1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTA0MDM9dTMyIGJwZl9zb2NrX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEwNDkyLVx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9zb2NrLCBzcmNfaXA2WzBdLCBzcmNfaXA2WzNdKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNDkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTA0OTQtXHRcdG9mZiA9IHNpLVx1MDAzZW9mZjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMC1cdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc29jaywgZHN0X2lwNlswXSwgZHN0X2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDUxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTEyLVx0XHRvZmYgPSBzaS1cdTAwM2VvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTYtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29jaywgcnhfcXVldWVfbWFwcGluZyk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMDU1NzojaWZkZWYgQ09ORklHX1NPQ0tfUlhfUVVFVUVfTUFQUElOR1xubmV0L2NvcmUvZmlsdGVyLmMtMTA1NTgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEwODE1PXN0YXRpYyB1MzIgc29ja19vcHNfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjAtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTEwMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTAyMi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTEwNDEtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc29ja19vcHMsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTA0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDQzLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTM1MD1zdGF0aWMgdTMyIHNrX21zZ19jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1NS1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTM1Ny1cdGludCBvZmY7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTAtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQxMi1cdFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzEtXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTQzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDMzLVx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY1NT1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE2OTctXG5uZXQvY29yZS9maWx0ZXIuYzoxMTY5ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk5LXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjA3Nj1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjExNS1cdFx0XHRcdHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOiB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjExNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTE3LVx0XHRpbnQgb2ZmID0gc2ktXHUwMDNlb2ZmO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMxLVx0XHRcdFx0bG9jYWxfaXA2WzBdLCBsb2NhbF9pcDZbM10pOiB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjEzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTMzLVx0XHRpbnQgb2ZmID0gc2ktXHUwMDNlb2ZmO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTc3PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIxODItXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE4MzojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTg0LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjM0PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyMzYtXHQvKiBCVEYgdHlwZXMgZm9yIHRjcF90aW1ld2FpdF9zb2NrIGFuZCBpbmV0X3RpbWV3YWl0X3NvY2sgYXJlIG5vdFxubmV0L2NvcmUvZmlsdGVyLmM6MTIyMzc6XHQgKiBnZW5lcmF0ZWQgaWYgQ09ORklHX0lORVQ9bi4gVHJpZ2dlciBhbiBleHBsaWNpdCBnZW5lcmF0aW9uIGhlcmUuXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzOC1cdCAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNDI6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0My1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQ3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNDgtXHRpZiAoc2sgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2Mz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2NC17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2NTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY2LVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcF9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY5LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3MS1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNTA0PV9fYnBmX2tmdW5jIGludCBicGZfc2tfYXNzaWduX3RjcF9yZXFzayhzdHJ1Y3QgX19za19idWZmICpzLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDYte1xubmV0L2NvcmUvZmlsdGVyLmM6MTI1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1NZTl9DT09LSUVTKVxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDgtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopcztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUzMi1cdFx0YnJlYWs7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjUzMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM0LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjczMz1fX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDYtXHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xubmV0L2NvcmUvZmlsdGVyLmM6MTI3NDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0OC1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOiB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjYtI2VuZGlmXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc2NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzY4LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE5OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGVCUEYgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgZUJQRiBlY29zeXN0ZW0uIEZpcnN0LCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gIGFuZCBgbHd0X3htaXRfZnVuY19wcm90b2AsIHdoaWNoIG1lYW5zIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYENPTkZJR19ORVRfQ0xTX0FDVGAgYW5kIGBDT05GSUdfTFdUVU5ORUxfQlBGYCwgcmVzcGVjdGl2ZWx5LiBHb3QgaXQuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRyYWZmaWMgY29udHJvbCBhbmQgbGlnaHR3ZWlnaHQgdHVubmVsaW5nLCBzbyBmYXIgc28gZ29vZC4gVGhlbiB3ZSBoYXZlIGBza19za2JfY2hhbmdlX3RhaWxgLCB3aGljaCBpcyBleHBvc2VkIHZpYSBgc2tfc2tiX2Z1bmNfcHJvdG9gLiBUaGlzIG9uZSByZXF1aXJlcyBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIHRoZSBtb3JlIGdlbmVyYWwgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19ORVRgLiBJdCYjMzk7cyBhbHNvIGV4cG9zZWQgd2l0aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBOb3cgSSBuZWVkIHRvIGRyaWxsIGRvd24sIHNvIGxldCYjMzk7cyBjcm9zcy1yZWZlcmVuY2UgdGhvc2UgZnVuY3Rpb24gcHJvdG9zIGluIGBuZXQvY29yZS9maWx0ZXIuY2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvfHNrX3NrYl9jaGFuZ2VfdGFpbF9wcm90byYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTQwMjg9QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00MDM2LVxubmV0L2NvcmUvZmlsdGVyLmM6NDAzNzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYy00MDM4LVx0LmZ1bmNcdFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQwNDY9QlBGX0NBTExfMyhza19za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQwNTEtXG5uZXQvY29yZS9maWx0ZXIuYzo0MDUyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2tiX2NoYW5nZV90YWlsX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmMtNDA1My1cdC5mdW5jXHRcdD0gc2tfc2tiX2NoYW5nZV90YWlsLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjE9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODY1OC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV9oZWFkOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg5MTU9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODkyNC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxubmV0L2NvcmUvZmlsdGVyLmM6ODkyNTpcdFx0cmV0dXJuIFx1MDAyNnNrX3NrYl9jaGFuZ2VfdGFpbF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MjYtXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfaGVhZDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtOTAyMC1cdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxubmV0L2NvcmUvZmlsdGVyLmM6OTAyMTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy05MDIyLVx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBUcmFmZmljIENvbnRyb2wgRnVuY3Rpb24gUHJvdG90eXBlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgc29tZXRoaW5nIG91dCB3aXRoIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLCBhbmQgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdG8gY2hlY2sgZm9yIHNvbWUgYGlmZGVmYCBkaXJlY3RpdmVzIHRoYXQgY291bGQgYmUgYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYXJvdW5kIGxpbmUgODYyMCBpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGxvY2F0aW9uLCBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgaXRzIGxpa2VseSByb2xlIGluIHRyYWZmaWMgY29udHJvbC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gc3BvdCBhbnkgY29tcGlsZS10aW1lIGZsYWdzIGFmZmVjdGluZyBpdC4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBjbHVlcyB0aGVyZSB0aGF0IHdpbGwgc2hlZCBsaWdodCBvbiB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4NjE1Olx0XHRkZWZhdWx0OlxuODYxNjpcdFx0XHRyZXR1cm4gc2tfZmlsdGVyX2Z1bmNfcHJvdG8oZnVuY19pZCwgcHJvZyk7XG44NjE3Olx0XHR9XG44NjE4Olx0fVxuODYxOTpcdFxuODYyMDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxuODYyMTpcdHRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbjg2MjI6XHR7XG44NjIzOlx0XHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbjg2MjQ6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX3N0b3JlX2J5dGVzOlxuODYyNTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9zdG9yZV9ieXRlc19wcm90bztcbjg2MjY6XHRcdGNhc2UgQlBGX0ZVTkNfc2tiX2xvYWRfYnl0ZXM6XG44NjI3Olx0XHRcdHJldHVybiBcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XG44NjI4Olx0XHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlOlxuODYyOTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlX3Byb3RvO1xuODYzMDpcdFx0Y2FzZSBCUEZfRlVOQ19za2JfcHVsbF9kYXRhOlxuODYzMTpcdFx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9wdWxsX2RhdGFfcHJvdG87XG44NjMyOlx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fZGlmZjpcbjg2MzM6XHRcdFx0cmV0dXJuIFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XG44NjM0Olx0XHRjYXNlIEJQRl9GVU5DX2NzdW1fdXBkYXRlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHRjX2Nsc19hY3RfZnVuY19wcm90b2AuIFRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBzZWUgKndoZXJlKiB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgY3J1Y2lhbC4gS25vd2luZyB0aGUgY29udGV4dCBpbiB3aGljaCBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBpcyBlbXBsb3llZCB3aWxsIHRlbGwgbWUgZXZlcnl0aGluZyBmcm9tIGl0cyBwdXJwb3NlIHRvIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIHRyYWNlIHRob3NlIHJlZmVyZW5jZXMuIEl0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0X2Z1bmNfcHJvdG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz04NjIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxubmV0L2NvcmUvZmlsdGVyLmM6ODYyMTp0Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9maWx0ZXIuYy04NjIyLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTUwMz1jb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyB0Y19jbHNfYWN0X3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTA0Olx0LmdldF9mdW5jX3Byb3RvXHRcdD0gdGNfY2xzX2FjdF9mdW5jX3Byb3RvLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1MDUtXHQuaXNfdmFsaWRfYWNjZXNzXHQ9IHRjX2Nsc19hY3RfaXNfdmFsaWRfYWNjZXNzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0Y19jbHNfYWN0IFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIGB0Y19jbHNfYWN0YCB2ZXJpZmllciBvcGVyYXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBCUEYgcHJvZ3JhbSB0eXBlcyBhcmUgZGVmaW5lZC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHByb2dyYW0gdHlwZXMsIGFuZCB0aGVyZSB0aGV5IGFyZTogYEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIC4uLilgIGFuZCBgQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgLi4uKWAgc3BlY2lmaWNhbGx5LgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgdGhlc2UgdHlwZXMgc2hvdWxkIHJlcXVpcmUgc29tZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gYmUgZW5hYmxlZC4gSSBzZWUgdGhhdCBgQ09ORklHX05FVF9DTFNfQUNUYCBhbmQgZWl0aGVyIGBDT05GSUdfTkVUX1NDSEVEYCBvciBgQ09ORklHX0JQRl9TWVNDQUxMYCAob3IgcG9zc2libHkgYm90aCkgYXJlIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCk5vdyB0aGF0IEkgaGF2ZSB0aGUgYmFzaWMgbGF5IG9mIHRoZSBsYW5kLCBpdCYjMzk7cyBiYWNrIHRvIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBvbiB0aG9zZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlc2UgYHRjX2Nsc19hY3RgIHByb2dyYW0gdHlwZXMuIEkgbmVlZCB0byBiZSBleGFjdCBoZXJlLCB0aGVyZSBtYXkgYmUgc29tZSBzdWJ0bGV0eSBpbiB0aGUgZGVmaW5pdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jbHNfYWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTU9QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtNi1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDo3OkJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMsIHRjX2Nsc19hY3QsXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTgtXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6OTpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCB0Y19jbHNfYWN0LFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMC1cdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9uczoKCioqQlBGIFR5cGUgRXhwbG9yYXRpb246IGBORVRfQ0xTX0FDVGAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgTkVUX0NMU19BQ1RgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IGl0cyBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UgY29kZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBkZWZpbmVkIGluIG9uZSBvZiB0aGUgY29yZSBCUEYgaGVhZGVyIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7bGwgYmUgaW4gYGluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhgLiBUaGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBmdW5kYW1lbnRhbCBCUEYgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0eXBlIGRlZmluaXRpb25zIHJlc2lkZS4KCkxldCBtZSB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDcuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGxheW91dCBhbmQgaG93IHRoZXNlIHR5cGVzIGFyZSBvZnRlbiBncm91cGVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRpdmVseSBjb25jaXNlIC0gcHJvYmFibHkgYSBtYWNybyBvciBhbiBlbnVtZXJhdGlvbiAtIGRlZmluaW5nIHRoaXMgcGFydGljdWxhciBCUEYgY2xhc3NpZmllciBhY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlLCBpdHMgZXhwZWN0ZWQgdXNhZ2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSB0eXBlcyBvciBjb25zdGFudHMuIFdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBlQlBGIGludGVybmFscywgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcm9sZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgQlBGIGNvbXBvbmVudHMuIE5vdyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0LyogaW50ZXJuYWwgZmlsZSAtIGRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5ICovXG4gICAzOlx0XG4gICA0Olx0I2lmZGVmIENPTkZJR19ORVRcbiAgIDU6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU09DS0VUX0ZJTFRFUiwgc2tfZmlsdGVyLFxuICAgNjpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gICA3Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgdGNfY2xzX2FjdCxcbiAgIDg6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAgOTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TQ0hFRF9BQ1QsIHRjX2Nsc19hY3QsXG4gIDEwOlx0XHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcbiAgMTE6XHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfWERQLCB4ZHAsXG4gIDEyOlx0XHQgICAgICBzdHJ1Y3QgeGRwX21kLCBzdHJ1Y3QgeGRwX2J1ZmYpXG4gIDEzOlx0I2lmZGVmIENPTkZJR19DR1JPVVBfQlBGXG4gIDE0Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IsIGNnX3NrYixcbiAgMTU6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAxNjpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9DR1JPVVBfU09DSywgY2dfc29jayxcbiAgMTc6XHRcdCAgICAgIHN0cnVjdCBicGZfc29jaywgc3RydWN0IHNvY2spXG4gIDE4Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsIGNnX3NvY2tfYWRkcixcbiAgMTk6XHRcdCAgICAgIHN0cnVjdCBicGZfc29ja19hZGRyLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuKVxuICAyMDpcdCNlbmRpZlxuICAyMTpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfSU4sIGx3dF9pbixcbiAgMjI6XHRcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxuICAyMzpcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBsd3Rfb3V0LFxuICAyNDpcdFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXG4gIDI1Olx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0xXVF9YTUlULCBsd3RfeG1pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MjUKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBDT05GSUdfTkVUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBvZiBjb3Vyc2UgYENPTkZJR19CUEZgIGFyZSBhbGwgYWN0aXZlLCBtZWFuaW5nIHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIEJQRiBwcm9ncmFtcyByZWxhdGVkIHRvIHRyYWZmaWMgY29udHJvbCAoYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCAvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGApIGF2YWlsYWJsZS4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2guCgpNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlIGBicGZfc2tiX2NoYW5nZV90YWlsYCwgYHNrX3NrYl9jaGFuZ2VfdGFpbGAsIGBicGZfc2tiX3RyaW1fcmNzdW1gLCBhbmQgYF9fYnBmX3NrYl9taW5fbGVuYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhvc2UgbGFzdCB0d28gbWlnaHQgYmUgaW5saW5lZC4gQWgsIHllcywgYF9fYnBmX3NrYl9taW5fbGVuYCBpcyBhIHN0YXRpYyBgdTMyYCDigJMgcG90ZW50aWFsbHkgaW5saW5lZCDigJMgYW5kIGBicGZfc2tiX3RyaW1fcmNzdW1gIGlzIGEgc3RhdGljIGBpbnRgLCBzbyBwcm9iYWJseSBpbmxpbmVkIHRvby4gVGhlIG90aGVycyBhcmUgbm9uLXN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIHNob3VsZCBpbmNsdWRlIGFsbCB0aG9zZSBzeW1ib2xzIGZvciBnb29kIG1lYXN1cmUuCgpOb3csIGEgZmluYWwgdmVyaWZpY2F0aW9uIG9mIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGE6CgoqICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseSEKKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBTS0IgKFNvY2tldCBCdWZmZXIpIHRyaW1taW5nIGxvZ2ljLCBuYW1lbHkgYGJwZl9za2JfdHJpbV9yY3N1bWAgYW5kIGBfX2JwZl9za2JfbWluX2xlbmAuIFRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBpbnZvbHZlIHJlc2V0dGluZyBgc2tiLSZndDtpcF9zdW1tZWRgIHRvIGBDSEVDS1NVTV9OT05FYCB3aGVuIHRyaW1taW5nIHBhc3QgdGhlIGNoZWNrc3VtIG9mZnNldCBmb3IgcGFydGlhbCBjaGVja3N1bSBwYWNrZXRzIGFuZCByZW1vdmVzIHRoZSBjaGVja3N1bSBvZmZzZXQgcmVzdHJpY3Rpb24uIFRoaXMgaGFzIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgQlBGIGhlbHBlcnMgbWFuaXB1bGF0ZSBTS0JzIChgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgKSBhbmQgdGhlIGhhbmRsaW5nIG9mIGNoZWNrc3VtcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgYW5kIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucywgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoqICAgKipGb2N1c1N5bWJvbHMqKjogYGJwZl9za2JfY2hhbmdlX3RhaWxgLCBgc2tfc2tiX2NoYW5nZV90YWlsYCwgYGJwZl9za2JfdHJpbV9yY3N1bWAsIGBfX2JwZl9za2JfbWluX2xlbmAgLSBjb25maXJtZWQuCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEJQRl9TWVNDQUxMYCwgYE5FVGAgLSBjb3JyZWN0LgoKT2theSwgZXZlcnl0aGluZyBhbGlnbnMuIExldCYjMzk7cyBzZW5kIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwgd2l0aCBjb25maWRlbmNlLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za2JfY2hhbmdlX3RhaWwmIzM0OywKICAgICYjMzQ7c2tfc2tiX2NoYW5nZV90YWlsJiMzNDssCiAgICAmIzM0O2JwZl9za2JfdHJpbV9yY3N1bSYjMzQ7LAogICAgJiMzNDtfX2JwZl9za2JfbWluX2xlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRhaWwgYWRqdXN0bWVudCBsb2dpYyAoYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYGJwZl9za2JfdHJpbV9yY3N1bWApIGJ5IHJlbGF4aW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCByZXNldHRpbmcgYHNrYi1cdTAwM2VpcF9zdW1tZWRgIHRvIGBDSEVDS1NVTV9OT05FYCB3aGVuIGFuIHNrYiBpcyB0cmltbWVkIHBhc3QgdGhlIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0LlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxuMS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYWx0ZXIgZGF0YSBidWZmZXJzIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIGJ5dGVzICh3aGVuIGdyb3dpbmcsIG1lbW9yeSBpcyBleHBsaWNpdGx5IHplcm9lZCB2aWEgYG1lbXNldGA7IHRyaW1taW5nIHJlZHVjZXMgYnVmZmVyIGxlbmd0aCkuXG4yLiBJdCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuXG4zLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBsZW5ndGggZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGMxMmVhYjlmNGVjNGE0MWExZGM4ZTlhNGU0OGNhODJkZTU3OGNiMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTU6NTM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0zOTYxLDEyICYjNDM7Mzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKG9mZnNldCAmZ3Q7IDApCiAJCQltaW5fbGVuID0gb2Zmc2V0OwogCX0KLQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQlvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0MzsKLQkJCSBza2ItJmd0O2NzdW1fb2Zmc2V0ICYjNDM7IHNpemVvZihfX3N1bTE2KTsKLQkJaWYgKG9mZnNldCAmZ3Q7IDApCi0JCQltaW5fbGVuID0gb2Zmc2V0OwotCX0KIAlyZXR1cm4gbWluX2xlbjsKIH0KIApAQCAtMzk4Myw2ICYjNDM7Mzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbikKIAogc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pCiB7CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIG5ld19sZW4gJmx0OyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLSZndDtjc3VtX29mZnNldCAmIzQzOwomIzQzOwkJICAgICAgc2l6ZW9mKF9fc3VtMTYpKQomIzQzOwkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwomIzQzOwogCXJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43YWNkYmQ1NzU3YTk4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jCkBAIC0wLDAgJiM0MzsxLDEyNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvdGNwLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X3Byb2dzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0d29ya19oZWxwZXJzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDTElFTlRfTlMJJiMzNDt0Yy1jaGFuZ2UtdGFpbC1jbGktbnMmIzM0OwomIzQzOyNkZWZpbmUgU0VSVkVSX05TCSYjMzQ7dGMtY2hhbmdlLXRhaWwtc3J2LW5zJiMzNDsKJiM0MzsjZGVmaW5lIENMSUVOVF9JUAkmIzM0OzE5Mi4xNjguMS4xJiMzNDsKJiM0MzsjZGVmaW5lIFNFUlZFUl9JUAkmIzM0OzE5Mi4xNjguMS4yJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFRFU1RfUE1UVQkxMDAwCiYjNDM7I2RlZmluZSBURVNUX01TU19NQVgJKFRFU1RfUE1UVSAtIDIwIC0gMjApCiYjNDM7I2RlZmluZSBUSU1FT1VUX01TCTMwMDAKJiM0MzsjZGVmaW5lIFhGRVJfQllURVMJODE5MgomIzQzOwomIzQzO3ZvaWQgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1KHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIHRjeF9vcHRzKTsKJiM0MzsJaW50IG1zc19iZWZvcmUgPSAwLCBtc3NfYWZ0ZXIgPSAwLCBpZmluZGV4LCBwb3J0OwomIzQzOwlpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xOwomIzQzOwlzdHJ1Y3QgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1ICpza2VsID0gTlVMTDsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMOwomIzQzOwlzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107CiYjNDM7CXNvY2tsZW5fdCBvcHRsZW47CiYjNDM7CXNzaXplX3QgYnl0ZXM7CiYjNDM7CXNpemVfdCB0b3RhbDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhDTElFTlRfTlMpLCAmIzM0O21ha2UgY2xpZW50IG5zJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKFNFUlZFUl9OUyksICYjMzQ7bWFrZSBzZXJ2ZXIgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9jbGllbnRfbnM7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW4gY2xpZW50IG5zJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbGluayBhZGQgdmV0aDEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMiBuZXRucyAmIzM0OyBTRVJWRVJfTlMpOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIC00IGFkZHIgYWRkICYjMzQ7IENMSUVOVF9JUCAmIzM0Oy8yNCBkZXYgdmV0aDEmIzM0Oyk7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbGluayBzZXQgdmV0aDEgdXAmIzM0Oyk7CiYjNDM7CWlmaW5kZXggPSBpZl9uYW1ldG9pbmRleCgmIzM0O3ZldGgxJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgJiMzNDtpZl9uYW1ldG9pbmRleCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwljbG9zZV9uZXRucyhuc3Rva2VuKTsKJiM0MzsJbnN0b2tlbiA9IE5VTEw7CiYjNDM7CiYjNDM7CW5zdG9rZW4gPSBvcGVuX25ldG5zKFNFUlZFUl9OUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCAmIzM0O29wZW4gc2VydmVyIG5zJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgLTQgYWRkciBhZGQgJiMzNDsgU0VSVkVSX0lQICYjMzQ7LzI0IGRldiB2ZXRoMiYjMzQ7KTsKJiM0MzsJU1lTKG91dCwgJiMzNDtpcCBsaW5rIHNldCB2ZXRoMiB1cCYjMzQ7KTsKJiM0MzsJc3J2X2ZkID0gc3RhcnRfc2VydmVyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBTRVJWRVJfSVAsIDAsIFRJTUVPVVRfTVMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsICYjMzQ7c3RhcnQgc2VydmVyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlX25ldG5zKG5zdG9rZW4pOwomIzQzOwluc3Rva2VuID0gTlVMTDsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuIGFuZCBsb2FkIHNrZWxldG9uJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocG9ydCwgMCwgJiMzNDtnZXQgc2VydmVyIHBvcnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtzZXJ2ZXJfcG9ydCA9IHBvcnQ7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cG10dSA9IFRFU1RfUE1UVTsKJiM0MzsKJiM0MzsJbnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sICYjMzQ7b3BlbiBjbGllbnQgbnMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7bGlua3MuY2hhbmdlX3RhaWxfaWNtcCA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLSZndDtwcm9ncy5jaGFuZ2VfdGFpbF9pY21wLCBpZmluZGV4LAomIzQzOwkJCQkJJmFtcDt0Y3hfb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5jaGFuZ2VfdGFpbF9pY21wLCAmIzM0O2F0dGFjaCB0Y3gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2xpX2ZkID0gY29ubmVjdF90b19mZChzcnZfZmQsIFRJTUVPVVRfTVMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjbGlfZmQsICYjMzQ7Y29ubmVjdCB0byBzZXJ2ZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJc3J2X2Nvbm5fZmQgPSBhY2NlcHQoc3J2X2ZkLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoc3J2X2Nvbm5fZmQsICYjMzQ7YWNjZXB0IGNvbm5lY3Rpb24mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc2V0dGltZW8oc3J2X2Nvbm5fZmQsIFRJTUVPVVRfTVMpLCAmIzM0O3NldCBzZXJ2ZXIgdGltZW91dCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YobXNzX2JlZm9yZSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgJmFtcDttc3NfYmVmb3JlLAomIzQzOwkJCQkgICZhbXA7b3B0bGVuKSwgJiMzNDtnZXQgbXNzIGJlZm9yZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlieXRlcyA9IHNlbmQoY2xpX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoYnl0ZXMsIChzc2l6ZV90KXNpemVvZihidWYpLCAmIzM0O3NlbmQgZGF0YSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmb3IgKHRvdGFsID0gMDsgdG90YWwgJmx0OyBzaXplb2YoYnVmKTsgdG90YWwgJiM0Mzs9IGJ5dGVzKSB7CiYjNDM7CQlieXRlcyA9IHJlY3Yoc3J2X2Nvbm5fZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOwomIzQzOwkJaWYgKGJ5dGVzICZsdDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHRvdGFsLCBzaXplb2YoYnVmKSwgJiMzNDtyZWNlaXZlIGRhdGEmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhza2VsLSZndDtkYXRhLSZndDtjaGFuZ2VfdGFpbF9yZXQsICYjMzQ7Y2hhbmdlIHRhaWwmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhza2VsLSZndDtic3MtJmd0O2FkanVzdF9yb29tX3JldCwgJiMzNDthZGp1c3Qgcm9vbSYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtpY21wX3NlbnQsICYjMzQ7aWNtcCBzZW50JiMzNDspOwomIzQzOwomIzQzOwlvcHRsZW4gPSBzaXplb2YobXNzX2FmdGVyKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCAmYW1wO21zc19hZnRlciwKJiM0MzsJCQkJICAmYW1wO29wdGxlbiksICYjMzQ7Z2V0IG1zcyBhZnRlciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfTFQobXNzX2FmdGVyLCBtc3NfYmVmb3JlLCAmIzM0O21zcyByZWR1Y2VkJiMzNDspOwomIzQzOwlBU1NFUlRfTEUobXNzX2FmdGVyLCBURVNUX01TU19NQVgsICYjMzQ7bXNzIGJlbG93IHBtdHUmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwljbG9zZShzcnZfY29ubl9mZCk7CiYjNDM7CWNsb3NlKGNsaV9mZCk7CiYjNDM7CWNsb3NlKHNydl9mZCk7CiYjNDM7CXRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fZGVzdHJveShza2VsKTsKJiM0MzsJY2xvc2VfbmV0bnMobnN0b2tlbik7CiYjNDM7CXJlbW92ZV9uZXRucyhTRVJWRVJfTlMpOwomIzQzO291dF9jbGllbnRfbnM6CiYjNDM7CXJlbW92ZV9uZXRucyhDTElFTlRfTlMpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41YzRjMDc1NDViYzlmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jCkBAIC0wLDAgJiM0MzsxLDEyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkZGVmLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RjcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIElDTVBfU0FNUExFX0xFTgkoc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgOCkKJiM0MzsjZGVmaW5lIElDTVBfSERSU19MRU4JKHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCiYjNDM7CiYjNDM7X19iZTE2IHNlcnZlcl9wb3J0ID0gMDsKJiM0MztfX3UxNiBwbXR1ID0gMDsKJiM0MzsKJiM0Mztsb25nIGNoYW5nZV90YWlsX3JldCA9IDE7CiYjNDM7bG9uZyBhZGp1c3Rfcm9vbV9yZXQgPSAwOwomIzQzO2Jvb2wgaWNtcF9zZW50ID0gZmFsc2U7CiYjNDM7Ym9vbCBpY21wX2VyciA9IGZhbHNlOwomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pCiYjNDM7ewomIzQzOwljc3VtID0gKGNzdW0gJmFtcDsgMHhmZmZmKSAmIzQzOyAoY3N1bSAmZ3Q7Jmd0OyAxNik7CiYjNDM7CWNzdW0gPSAoY3N1bSAmYW1wOyAweGZmZmYpICYjNDM7IChjc3VtICZndDsmZ3Q7IDE2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIChfX3N1bTE2KX5jc3VtOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Yy9lZ3Jlc3MmIzM0OykKJiM0MztpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlfX3U4IHNtYWNbRVRIX0FMRU5dLCBkbWFjW0VUSF9BTEVOXTsKJiM0MzsJdm9pZCAqZGF0YSwgKmRhdGFfZW5kOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcDsKJiM0MzsJc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwlzdHJ1Y3QgdGNwaGRyICp0Y3A7CiYjNDM7CV9fYmUzMiBzYWRkciwgZGFkZHI7CiYjNDM7CXN0cnVjdCBpcGhkciAqaXA7CiYjNDM7CV9fd3N1bSBjc3VtOwomIzQzOwomIzQzOwlpZiAoaWNtcF9zZW50IHx8IGljbXBfZXJyKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwomIzQzOwlkYXRhID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGE7CiYjNDM7CWRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItJmd0O2RhdGFfZW5kOwomIzQzOwomIzQzOwlldGggPSBkYXRhOwomIzQzOwlpZiAoKHZvaWQgKikoZXRoICYjNDM7IDEpICZndDsgZGF0YV9lbmQpCiYjNDM7CQlyZXR1cm4gVENYX1BBU1M7CiYjNDM7CWlmIChldGgtJmd0O2hfcHJvdG8gIT0gYnBmX2h0b25zKEVUSF9QX0lQKSkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJaXAgPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CWlmICgodm9pZCAqKShpcCAmIzQzOyAxKSAmZ3Q7IGRhdGFfZW5kKQomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwlpZiAoaXAtJmd0O2lobCAhPSA1IHx8IGlwLSZndDtwcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJdGNwID0gKHZvaWQgKikoaXAgJiM0MzsgMSk7CiYjNDM7CWlmICgodm9pZCAqKSh0Y3AgJiM0MzsgMSkgJmd0OyBkYXRhX2VuZCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJaWYgKHRjcC0mZ3Q7ZGVzdCAhPSBzZXJ2ZXJfcG9ydCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsJaWYgKGJwZl9udG9ocyhpcC0mZ3Q7dG90X2xlbikgJmx0Oz0gc2l6ZW9mKCppcCkgJiM0MzsgdGNwLSZndDtkb2ZmICogNCkKJiM0MzsJCXJldHVybiBUQ1hfUEFTUzsKJiM0MzsKJiM0MzsJX19idWlsdGluX21lbWNweShzbWFjLCBldGgtJmd0O2hfc291cmNlLCBFVEhfQUxFTik7CiYjNDM7CV9fYnVpbHRpbl9tZW1jcHkoZG1hYywgZXRoLSZndDtoX2Rlc3QsIEVUSF9BTEVOKTsKJiM0MzsJc2FkZHIgPSBpcC0mZ3Q7c2FkZHI7CiYjNDM7CWRhZGRyID0gaXAtJmd0O2RhZGRyOwomIzQzOwomIzQzOwljaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gJiM0MzsgSUNNUF9TQU1QTEVfTEVOLCAwKTsKJiM0MzsJaWYgKGNoYW5nZV90YWlsX3JldCkgewomIzQzOwkJaWNtcF9lcnIgPSB0cnVlOwomIzQzOwkJcmV0dXJuIFRDWF9QQVNTOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFkanVzdF9yb29tX3JldCA9IGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCBJQ01QX0hEUlNfTEVOLAomIzQzOwkJCQkJICAgICAgQlBGX0FESl9ST09NX01BQywKJiM0MzsJCQkJCSAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpOwomIzQzOwlpZiAoYWRqdXN0X3Jvb21fcmV0KSB7CiYjNDM7CQlpY21wX2VyciA9IHRydWU7CiYjNDM7CQlyZXR1cm4gVENYX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhOwomIzQzOwlkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLSZndDtkYXRhX2VuZDsKJiM0MzsKJiM0MzsJZXRoID0gZGF0YTsKJiM0MzsJaXAgPSAodm9pZCAqKShldGggJiM0MzsgMSk7CiYjNDM7CWljbXAgPSAodm9pZCAqKShpcCAmIzQzOyAxKTsKJiM0MzsJaWYgKCh2b2lkICopaWNtcCAmIzQzOyBzaXplb2YoKmljbXApICYjNDM7IElDTVBfU0FNUExFX0xFTiAmZ3Q7IGRhdGFfZW5kKSB7CiYjNDM7CQlpY21wX2VyciA9IHRydWU7CiYjNDM7CQlyZXR1cm4gVENYX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX19idWlsdGluX21lbWNweShldGgtJmd0O2hfZGVzdCwgc21hYywgRVRIX0FMRU4pOwomIzQzOwlfX2J1aWx0aW5fbWVtY3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIGRtYWMsIEVUSF9BTEVOKTsKJiM0MzsKJiM0MzsJX19idWlsdGluX21lbXNldChpY21wLCAwLCBzaXplb2YoKmljbXApKTsKJiM0MzsJaWNtcC0mZ3Q7dHlwZSA9IElDTVBfREVTVF9VTlJFQUNIOwomIzQzOwlpY21wLSZndDtjb2RlID0gSUNNUF9GUkFHX05FRURFRDsKJiM0MzsJaWNtcC0mZ3Q7dW4uZnJhZy5tdHUgPSBicGZfaHRvbnMocG10dSk7CiYjNDM7CiYjNDM7CV9fYnVpbHRpbl9tZW1zZXQoaXAsIDAsIHNpemVvZigqaXApKTsKJiM0MzsJaXAtJmd0O3ZlcnNpb24gPSA0OwomIzQzOwlpcC0mZ3Q7aWhsID0gNTsKJiM0MzsJaXAtJmd0O3R0bCA9IDY0OwomIzQzOwlpcC0mZ3Q7cHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7CiYjNDM7CWlwLSZndDt0b3RfbGVuID0gYnBmX2h0b25zKElDTVBfSERSU19MRU4gJiM0MzsgSUNNUF9TQU1QTEVfTEVOKTsKJiM0MzsJaXAtJmd0O3NhZGRyID0gZGFkZHI7CiYjNDM7CWlwLSZndDtkYWRkciA9IHNhZGRyOwomIzQzOwomIzQzOwljc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaWNtcCwKJiM0MzsJCQkgICAgIHNpemVvZigqaWNtcCkgJiM0MzsgSUNNUF9TQU1QTEVfTEVOLCAwKTsKJiM0MzsJaWNtcC0mZ3Q7Y2hlY2tzdW0gPSBjc3VtX2ZvbGQoY3N1bSk7CiYjNDM7CWNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpcCwgc2l6ZW9mKCppcCksIDApOwomIzQzOwlpcC0mZ3Q7Y2hlY2sgPSBjc3VtX2ZvbGQoY3N1bSk7CiYjNDM7CWljbXBfc2VudCA9IHRydWU7CiYjNDM7CXJldHVybiBicGZfcmVkaXJlY3Qoc2tiLSZndDtpZmluZGV4LCBCUEZfRl9JTkdSRVNTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDUyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudCBmaXJpbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIHRoZSBkaWZmIGl0c2VsZi4gQWgsIGl0IG1vZGlmaWVzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGFkZHMgQlBGIHNlbGZ0ZXN0cy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWx3YXlzIHN0YXJ0IHdpdGggdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uLi4uIE9rYXksIGxpbmUgMzk2MCBhbmQgYXJvdW5kIHRoZXJlLi4uCgpgYGBkaWZmCkBAIC0zOTYxLDEyICYjNDM7Mzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKG9mZnNldCAmZ3Q7IDApCiAJCQltaW5fbGVuID0gb2Zmc2V0OwogCX0KLQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQlvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0MzsKLQkJCSBza2ItJmd0O2NzdW1fb2Zmc2V0ICYjNDM7IHNpemVvZihfX3N1bTE2KTsKLQkJaWYgKG9mZnNldCAmZ3Q7IDApCi0JCQltaW5fbGVuID0gb2Zmc2V0OwotCX0KIAlyZXR1cm4gbWluX2xlbjsKIH0KIApAQCAtMzk4Myw2ICYjNDM7Mzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbikKIAogc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pCiB7CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIG5ld19sZW4gJmx0OyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLSZndDtjc3VtX29mZnNldCAmIzQzOwomIzQzOwkJICAgICAgc2l6ZW9mKF9fc3VtMTYpKQomIzQzOwkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwomIzQzOwogCXJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7CiB9CiBgYGAKClJpZ2h0LCBzbyBpdCYjMzk7cyByZW1vdmluZyB0aGUgY2hlY2tzdW0gb2Zmc2V0IGNoZWNrIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIGNoYW5naW5nIGBicGZfc2tiX3RyaW1fcmNzdW1gIHRvIGNsZWFyIHRoZSBjaGVja3N1bSB3aGVuIHRyaW1taW5nLiBUaGUgcmVtb3ZlZCBjaGVjayBpcyB0aGVyZSB0byBwcmV2ZW50IE9PQiBhY2Nlc3Mgd2hlbiBkZWFsaW5nIHdpdGggYENIRUNLU1VNX1BBUlRJQUxgIHNrYnMuIFRoZSBuZXcgY29kZSBpbiBgYnBmX3NrYl90cmltX3Jjc3VtYCBzZWVtcyB0byBiZSBpbnRlbmRlZCB0byBkZWFsIHdpdGggY2hlY2tzdW1zIGNvcnJlY3RseSB3aGVuIHRyaW1taW5nLgoKU28sIHBvdGVudGlhbGx5IHdlIGhhdmUgYSBjaGFuZ2UgaW4gY2hlY2tzdW0gaGFuZGxpbmcgYW5kIGJwZiBzZWxmdGVzdHMuIFRoZSByZW1vdmFsIG9mIHRoZSBjaGVjayBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCB0aGUgbG9naWMgaW4gYGJwZl9za2JfdHJpbV9yY3N1bWAgbWlnaHQgaGF2ZSBzb21lIHN1YnRsZSBjb3JuZXIgY2FzZXMgdGhhdCBhIEtNU0FOIHJ1biBtaWdodCBleHBvc2UuIFRoaXMgKmNvdWxkKiBiZSBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGludm9sdmVzIG5ldHdvcmsgcGFja2V0IG1hbmlwdWxhdGlvbiBhbmQgY2hlY2tzdW1zIC0gYSBjbGFzc2ljIGFyZWEgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIE5vdyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoZSByaXNrIG91dHdlaWdocyB0aGUgZWZmb3J0IHRvIHNldHVwIEtNU0FOLiBUaGlzIGxvb2tzIHByZXR0eSBnb29kIGZvciBhIEtNU0FOIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NDA6XHR9XG4zOTQxOlx0XG4zOTQyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2FkanVzdF9yb29tX3Byb3RvID0ge1xuMzk0MzpcdFx0LmZ1bmNcdFx0PSBicGZfc2tiX2FkanVzdF9yb29tLFxuMzk0NDpcdFx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuMzk0NTpcdFx0LnJldF90eXBlXHQ9IFJFVF9JTlRFR0VSLFxuMzk0NjpcdFx0LmFyZzFfdHlwZVx0PSBBUkdfUFRSX1RPX0NUWCxcbjM5NDc6XHRcdC5hcmcyX3R5cGVcdD0gQVJHX0FOWVRISU5HLFxuMzk0ODpcdFx0LmFyZzNfdHlwZVx0PSBBUkdfQU5ZVEhJTkcsXG4zOTQ5Olx0XHQuYXJnNF90eXBlXHQ9IEFSR19BTllUSElORyxcbjM5NTA6XHR9O1xuMzk1MTpcdFxuMzk1MjpcdHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjM5NTM6XHR7XG4zOTU0Olx0XHRpbnQgb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XG4zOTU1Olx0XHR1MzIgbWluX2xlbiA9IDA7XG4zOTU2Olx0XG4zOTU3Olx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk1ODpcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuMzk1OTpcdFx0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xuMzk2MDpcdFx0XHRvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuMzk2MTpcdFx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuMzk2MjpcdFx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4zOTYzOlx0XHR9XG4zOTY0Olx0XHRyZXR1cm4gbWluX2xlbjtcbjM5NjU6XHR9XG4zOTY2Olx0XG4zOTY3Olx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTY4Olx0e1xuMzk2OTpcdFx0dW5zaWduZWQgaW50IG9sZF9sZW4gPSBza2ItXHUwMDNlbGVuO1xuMzk3MDpcdFx0aW50IHJldDtcbjM5NzE6XHRcbjM5NzI6XHRcdHJldCA9IF9fc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM5NzM6XHRcdGlmICghcmV0KVxuMzk3NDpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xuMzk3NTpcdFx0cmV0dXJuIHJldDtcbjM5NzY6XHR9XG4zOTc3Olx0XG4zOTc4Olx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4zOTc5Olx0e1xuMzk4MDpcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbjM5ODE6XHRcdCAgICBuZXdfbGVuIFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICYjNDM7XG4zOTgyOlx0XHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbjM5ODM6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4zOTg0Olx0XG4zOTg1Olx0XHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xuMzk4NjpcdH1cbjM5ODc6XHRcbjM5ODg6XHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXG4zOTg5Olx0XHRcdFx0XHRcdHU2NCBmbGFncylcbjM5OTA6XHR7XG4zOTkxOlx0XHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcbjM5OTI6XHRcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcbjM5OTM6XHRcdGludCByZXQ7XG4zOTk0Olx0XG4zOTk1Olx0XHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFx1MDAzYyBtaW5fbGVuKSlcbjM5OTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zOTk3Olx0XHRpZiAoc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4zOTk4Olx0XHRcdHJldHVybiAtRU5PVFNVUFA7XG4zOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgQ29tbWl0JiMzOTtzIExvZ2ljIGZvciBTS0IgVHJpbW1pbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoYW5nZS4gUHJldmlvdXNseSwgdGhlIGBfX2JwZl9za2JfbWluX2xlbmAgY2hlY2sgd2FzIHByZXZlbnRpbmcgYGJwZl9za2JfY2hhbmdlX3RhaWxgIGZyb20gc2hyaW5raW5nIGFuIFNLQiAoU29ja2V0IEJ1ZmZlcikgYmV5b25kIGEgY2VydGFpbiBwb2ludCDigJMgc3BlY2lmaWNhbGx5LCB0aGUgY2hlY2tzdW0tcmVsYXRlZCBvZmZzZXQgY2FsY3VsYXRlZCB1c2luZyBgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICYjNDM7IHNrYi0mZ3Q7Y3N1bV9vZmZzZXQgJiM0Mzsgc2l6ZW9mKF9fc3VtMTYpYC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UgZG9uJiMzOTt0IHdhbnQgdG8gbWVzcyB1cCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGJ5IGFyYml0cmFyaWx5IHRydW5jYXRpbmcgdGhlIGJ1ZmZlci4KCk5vdywgaG93ZXZlciwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBtb2RpZnlpbmcgdGhlIGBicGZfc2tiX3RyaW1fcmNzdW1gIHByb2Nlc3MuIEluc3RlYWQgb2YgcmVqZWN0aW5nIHRoZSB0cmltIGluIHRoZSBgX19icGZfc2tiX21pbl9sZW5gIGNoZWNrIGlmIHRoZSBpbnRlbmRlZCBgbmV3X2xlbmAgaXMgbGVzcyB0aGFuIHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldCwgdGhlIGNvZGUgKmFsbG93cyogdGhlIHRyaW0gdG8gaGFwcGVuLiBUaGUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2UgaXMgdGhhdCBpdCBhbHNvICpyZXNldHMqIGBza2ItJmd0O2lwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBfX3NrYl90cmltX3Jjc3VtYCBvciByZWxhdGVkIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgd2hhdCBzcGVjaWZpYyBhY3Rpb25zIGFyZSB0YWtlbiB3aGVuIGFuIFNLQiBpcyB0cmltbWVkIGluIHRoaXMgbmV3IHBhcmFkaWdtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2lkZSBlZmZlY3RzIG9mIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBjaGVja3N1bW1pbmcgYWZ0ZXIgYSBwb3RlbnRpYWxseSBhZ2dyZXNzaXZlIHRyaW0uIElzIHRoaXMgZXhwZWN0ZWQgYmVoYXZpb3I/IEFyZSB0aGVyZSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcyBjaGFuZ2U/IEkmIzM5O2xsIHByb2JhYmx5IGFsc28gd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBjaGVja3N1bSBvZmZsb2FkIGNhcGFiaWxpdGllcyB3ZSBhcmUgZW1wbG95aW5nIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBjYXVzZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSYjMzk7bSBrZWVuIHRvIHVuY292ZXIgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBtb2RpZmljYXRpb24gYW5kIGVuc3VyZSBpdHMgY29ycmVjdG5lc3MgYW5kIHNhZmV0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19za2JfdHJpbV9yY3N1bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQxNTk9c3RhdGljIGlubGluZSBpbnQgcHNrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MTY2LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0MTY3OnN0YXRpYyBpbmxpbmUgaW50IF9fc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDE2OC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9Mzk3OD1zdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg0LVxubmV0L2NvcmUvZmlsdGVyLmM6Mzk4NTpcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG5uZXQvY29yZS9maWx0ZXIuYy0zOTg2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIHNrYl90cmltX3Jjc3VtIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBfX3NrYl90cmltX3Jjc3VtYC4gV2hlcmUmIzM5O3MgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbj8gUmlnaHQsIGl0IHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRpbWUgdG8gcHVsbCB1cCB0aGF0IGhlYWRlciBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRyaW1taW5nIG9uIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMuIElzIGl0IGp1c3QgYSBtYXR0ZXIgb2YgYWRqdXN0aW5nIHRoZSBgY3N1bWAgZmllbGQ/IEFyZSB0aGVyZSBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHRvIGNvbnNpZGVyLCBsaWtlIGZyYWdtZW50ZWQgU0tCcyBvciBoYXJkd2FyZSBjaGVja3N1bSBvZmZsb2FkPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGNvcmUgbG9naWMgYmVmb3JlIEkgZ2V0IGRpc3RyYWN0ZWQgYnkgYW55IHBhcnRpY3VsYXIgdXNlIGNhc2VzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgaW50ZXJuYWwgd29ya2luZ3MgcmVsYXRlIHRvIHRoZSBgc2tiYCBkYXRhIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTY1Olx0fVxuNDE2NjpcdFxuNDE2NzpcdHN0YXRpYyBpbmxpbmUgaW50IF9fc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbjQxNjg6XHR7XG40MTY5Olx0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbjQxNzA6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG40MTcxOlx0XHRfX3NrYl90cmltKHNrYiwgbGVuKTtcbjQxNzI6XHRcdHJldHVybiAwO1xuNDE3MzpcdH1cbjQxNzQ6XHRcbjQxNzU6XHRzdGF0aWMgaW5saW5lIGludCBfX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXG40MTc2Olx0e1xuNDE3NzpcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG40MTc4Olx0XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuNDE3OTpcdFx0cmV0dXJuIF9fc2tiX2dyb3coc2tiLCBsZW4pO1xuNDE4MDpcdH1cbjQxODE6XHRcbjQxODI6XHQjZGVmaW5lIHJiX3RvX3NrYihyYikgcmJfZW50cnlfc2FmZShyYiwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSlcbjQxODM6XHQjZGVmaW5lIHNrYl9yYl9maXJzdChyb290KSByYl90b19za2IocmJfZmlyc3Qocm9vdCkpXG40MTg0Olx0I2RlZmluZSBza2JfcmJfbGFzdChyb290KSAgcmJfdG9fc2tiKHJiX2xhc3Qocm9vdCkpXG40MTg1Olx0I2RlZmluZSBza2JfcmJfbmV4dChza2IpICAgcmJfdG9fc2tiKHJiX25leHQoXHUwMDI2KHNrYiktXHUwMDNlcmJub2RlKSlcbjQxODY6XHQjZGVmaW5lIHNrYl9yYl9wcmV2KHNrYikgICByYl90b19za2IocmJfcHJldihcdTAwMjYoc2tiKS1cdTAwM2VyYm5vZGUpKVxuNDE4NzpcdFxuNDE4ODpcdCNkZWZpbmUgc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgXFxcbjQxODk6XHRcdFx0Zm9yIChza2IgPSAocXVldWUpLVx1MDAzZW5leHQ7XHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uLCBgX19icGZfc2tiX2NoYW5nZV90YWlsYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzOTgwIHRvIDQwMzAgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIEJQRiBzdWJzeXN0ZW0sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGFpbCBtb2RpZmljYXRpb25zIG9uIFNLQnMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGNoYW5naW5nIHRoZSB0YWlsIHBvaW50ZXIuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIG1lbW9yeSBiYXJyaWVyIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGxvY2tpbmcgcHJpbWl0aXZlcyBvciBhdG9taWMgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk4NTpcdFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbjM5ODY6XHR9XG4zOTg3Olx0XG4zOTg4Olx0c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxuMzk4OTpcdFx0XHRcdFx0XHR1NjQgZmxhZ3MpXG4zOTkwOlx0e1xuMzk5MTpcdFx0dTMyIG1heF9sZW4gPSBCUEZfU0tCX01BWF9MRU47XG4zOTkyOlx0XHR1MzIgbWluX2xlbiA9IF9fYnBmX3NrYl9taW5fbGVuKHNrYik7XG4zOTkzOlx0XHRpbnQgcmV0O1xuMzk5NDpcdFxuMzk5NTpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIHx8IG5ld19sZW4gXHUwMDNlIG1heF9sZW4gfHwgbmV3X2xlbiBcdTAwM2MgbWluX2xlbikpXG4zOTk2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzk5NzpcdFx0aWYgKHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuMzk5ODpcdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuMzk5OTpcdFxuNDAwMDpcdFx0LyogVGhlIGJhc2ljIGlkZWEgb2YgdGhpcyBoZWxwZXIgaXMgdGhhdCBpdCYjMzk7cyBwZXJmb3JtaW5nIHRoZVxuNDAwMTpcdFx0ICogbmVlZGVkIHdvcmsgdG8gZWl0aGVyIGdyb3cgb3IgdHJpbSBhbiBza2IsIGFuZCBlQlBGIHByb2dyYW1cbjQwMDI6XHRcdCAqIHJld3JpdGVzIHRoZSByZXN0IHZpYSBoZWxwZXJzIGxpa2UgYnBmX3NrYl9zdG9yZV9ieXRlcygpLFxuNDAwMzpcdFx0ICogYnBmX2xYX2NzdW1fcmVwbGFjZSgpIGFuZCBvdGhlcnMgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhd1xuNDAwNDpcdFx0ICogYnVmZmVyIGhlcmUuIFRoaXMgb25lIGlzIGEgc2xvdyBwYXRoIGhlbHBlciBhbmQgaW50ZW5kZWRcbjQwMDU6XHRcdCAqIGZvciByZXBsaWVzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cbjQwMDY6XHRcdCAqXG40MDA3Olx0XHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxuNDAwODpcdFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxuNDAwOTpcdFx0ICogdG8gc2VwYXJhdGUgY29uY2VybnMgYXMgaW4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5XG40MDEwOlx0XHQgKiBiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGJ1ZmZlcnMuXG40MDExOlx0XHQgKlxuNDAxMjpcdFx0ICogSXQmIzM5O3MgcmVhbGx5IGV4cGVjdGVkIHRvIGJlIGEgc2xvdyBwYXRoIG9wZXJhdGlvbiBoZXJlIGZvclxuNDAxMzpcdFx0ICogY29udHJvbCBtZXNzYWdlIHJlcGxpZXMsIHNvIHdlJiMzOTtyZSBpbXBsaWNpdGx5IGxpbmVhcml6aW5nLFxuNDAxNDpcdFx0ICogdW5jbG9uaW5nIGFuZCBkcm9wIG9mZmxvYWRzIGZyb20gdGhlIHNrYiBieSB0aGlzLlxuNDAxNTpcdFx0ICovXG40MDE2Olx0XHRyZXQgPSBfX2JwZl90cnlfbWFrZV93cml0YWJsZShza2IsIHNrYi1cdTAwM2VsZW4pO1xuNDAxNzpcdFx0aWYgKCFyZXQpIHtcbjQwMTg6XHRcdFx0aWYgKG5ld19sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pXG40MDE5Olx0XHRcdFx0cmV0ID0gYnBmX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XG40MDIwOlx0XHRcdGVsc2UgaWYgKG5ld19sZW4gXHUwMDNjIHNrYi1cdTAwM2VsZW4pXG40MDIxOlx0XHRcdFx0cmV0ID0gYnBmX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG40MDIyOlx0XHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXG40MDIzOlx0XHRcdFx0c2tiX2dzb19yZXNldChza2IpO1xuNDAyNDpcdFx0fVxuNDAyNTpcdFx0cmV0dXJuIHJldDtcbjQwMjY6XHR9XG40MDI3Olx0XG40MDI4Olx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcbjQwMjk6XHRcdCAgIHU2NCwgZmxhZ3MpXG40MDMwOlx0e1xuNDAzMTpcdFx0aW50IHJldCA9IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcbjQwMzI6XHRcbjQwMzM6XHRcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcbjQwMzQ6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM4CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBTS0IgVHJpbW1pbmcgaW4gQlBGKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBicGZfc2tiX2NoYW5nZV90YWlsYCBpcyB0aGUgZnVuY3Rpb24gYXQgcGxheSBoZXJlLCBhbmQgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGJvdGggZ3Jvd2luZyBhbmQgdHJpbW1pbmcgc2ticy4gVGhlIGtleSBpcyB0byBhc3Nlc3MgdGhpcyBjaGFuZ2UgZm9yIEtNU0FOIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGaXJzdCwgZ3Jvd2luZy4gR3Jvd2luZyBpcyBoYW5kbGVkIHdpdGggYGJwZl9za2JfZ3Jvd19yY3N1bWAgd2hpY2ggKmV4cGxpY2l0bHkqIHplcm9lcyBvdXQgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgdXNpbmcgYG1lbXNldGAuIE5vIGNvbmNlcm5zIHRoZXJlLgoKTm93LCB0cmltbWluZy4gVGhlIHBhdGNoIGFsbG93cyBmb3IgdHJpbW1pbmcgdGhlIHNrYiB0byBhIHNob3J0ZXIgbGVuZ3RoLCB3aGljaCB3YXMgcHJldmlvdXNseSByZXN0cmljdGVkLiBJZiB0aGUgdHJpbSBoYXBwZW5zIHRvIGN1dCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldCwgd2UgY29ycmVjdGx5IHJlc2V0IGBza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX05PTkVgLiBUaGlzIGlzIGNyaXRpY2FsLiBXZSYjMzk7cmUgcHJvYWN0aXZlbHkgZW5zdXJpbmcgdGhhdCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24gd29uJiMzOTt0IHJlYWQgcGFzdCB0aGUgbmV3LCByZWR1Y2VkIHBhY2tldCBib3VuZGFyeS4KClNvLCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlOioqIE5vdGhpbmcgaGVyZS4gTm8gZGF0YSBpcyBiZWluZyBzZW50IG91dCwgbW9kaWZpZWQsIG9yIG90aGVyd2lzZSBleHBvc2VkIGluIHRoaXMgd2F5LgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogTm8uIFRoZXJlIGFyZSBubyBsb2dpYyBicmFuY2hlcyBiZWluZyBkZXRlcm1pbmVkIGJ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb246KiogTm9wZS4gVGhlIGV4aXN0aW5nIHplcm8taW5nIGxvZ2ljIGFscmVhZHkgY292ZXJzIGdyb3dpbmcuIFRoZSBjb25jZXJuIGhlcmUgaXMgYWJvdXQgc2hyaW5raW5nLCBhbmQgd2UgYXJlIHNldHRpbmcgdGhlIGNoZWNrc3VtIGZsYWcgY29ycmVjdGx5LCBvciBrZWVwaW5nIGl0IGNvcnJlY3Qgd2hlbiBzaHJpbmtpbmcuCjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGxlbmd0aHM6KiogQWgsIGhlcmUmIzM5O3Mgd2hlcmUgaXQgbWF0dGVycy4gVHJpbW1pbmcgKnJlZHVjZXMqIHRoZSBidWZmZXIgc2l6ZS4gVGhpcyBtZWFucyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3aWxsIG5ldmVyIGJlIHJlYWQgcGFzdCB0aGUgYm91bmRhcmllcy4gV2l0aCB0aGUgY3N1bSBhZGp1c3RtZW50IGFzIHdlbGwsIHRoaXMgaXMgbm90IGFuIGlzc3VlLiBXZSBhcmUgY2xlYXJpbmcgb3V0IHRoZSBpcFxfc3VtbWVkIHNldHRpbmcgd2hlbiB0cmltbWluZy4KClRoZXJlZm9yZSwgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4gS0FTQU4gYW5kIG90aGVyIHNhbml0aXplcnMgY292ZXIgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIGFzIGV4cGVjdGVkLiBUaGlzIGNoYW5nZSBpcyBLTVNBTi1zYWZlLiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgdG9vbCBjYWxsIGdvZXMgdGhyb3VnaCBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0YWlsIGFkanVzdG1lbnQgbG9naWMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBicGZfc2tiX3RyaW1fcmNzdW1gKSBieSByZWxheGluZyB0aGUgbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gaW4gYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgcmVzZXR0aW5nIGBza2ItXHUwMDNlaXBfc3VtbWVkYCB0byBgQ0hFQ0tTVU1fTk9ORWAgd2hlbiBhbiBza2IgaXMgdHJpbW1lZCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcbjEuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGRhdGEgYnVmZmVycyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBieXRlcyAod2hlbiBncm93aW5nLCBtZW1vcnkgaXMgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXRgOyB0cmltbWluZyByZWR1Y2VzIGJ1ZmZlciBsZW5ndGgpLlxuMi4gSXQgZG9lcyBub3QgY29weSB1bmluaXRpYWxpemVkIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLlxuMy4gQW55IHBvdGVudGlhbCBidWZmZXIgbGVuZ3RoIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdGFpbCBhZGp1c3RtZW50IGxvZ2ljIChgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgLyBgYnBmX3NrYl90cmltX3Jjc3VtYCkgYnkgcmVsYXhpbmcgdGhlIG1pbmltdW0gbGVuZ3RoIGNhbGN1bGF0aW9uIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIHJlc2V0dGluZyBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M6XG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cbjMuIEFueSBwb3RlbnRpYWwgYnVmZmVyIGxlbmd0aCBlcnJvcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjA1LjcxMDYxOTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU4NTA5MDY0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za2JfY2hhbmdlX3RhaWxcIixcbiAgICBcInNrX3NrYl9jaGFuZ2VfdGFpbFwiLFxuICAgIFwiYnBmX3NrYl90cmltX3Jjc3VtXCIsXG4gICAgXCJfX2JwZl9za2JfbWluX2xlblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0YWlsIGFkanVzdG1lbnQgbG9naWMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBicGZfc2tiX3RyaW1fcmNzdW1gKSBieSByZWxheGluZyB0aGUgbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gaW4gYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgcmVzZXR0aW5nIGBza2ItXFx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cXG4yLiBJdCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuXFxuMy4gQW55IHBvdGVudGlhbCBidWZmZXIgbGVuZ3RoIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBza2IgdHJpbW1pbmcgc2VtYW50aWNzIGluIG5ldC9jb3JlL2ZpbHRlci5jLiBTcGVjaWZpY2FsbHksIGl0IHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIGNvbnN0cmFpbnQgYmFzZWQgb24gcGFydGlhbCBjaGVja3N1bSBvZmZzZXRzIGluIF9fYnBmX3NrYl9taW5fbGVuIGFuZCBpbnN0ZWFkIHJlc2V0cyBza2ItXFx1MDAzZWlwX3N1bW1lZCB0byBDSEVDS1NVTV9OT05FIHdoZW4gdHJpbW1pbmcgcGFja2V0cyBiZWxvdyB0aGUgY2hlY2tzdW0gc3RhcnQvb2Zmc2V0IGluIGJwZl9za2JfdHJpbV9yY3N1bS4gVGhpcyBjaGFuZ2VzIGV4ZWN1dGFibGUgbG9naWMgaW4gcmVhY2hhYmxlIEJQRiBoZWxwZXIgZnVuY3Rpb25zIChicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBza19za2JfY2hhbmdlX3RhaWwpIGFuZCBhZmZlY3RzIG5ldHdvcmsgY2hlY2tzdW0gcHJvY2Vzc2luZywgbWFraW5nIGl0IGFuIGltcG9ydGFudCB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjA1LjcxMDYyMzk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM3Mjc3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzEyZWFiOWY0ZWM0YTQxYTFkYzhlOWE0ZTQ4Y2E4MmRlNTc4Y2IxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTU6NTM6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xcbkBAIC0zOTYxLDEyICszOTYxLDYgQEAgc3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgMClcXG4gXFx0XFx0XFx0bWluX2xlbiA9IG9mZnNldDtcXG4gXFx0fVxcbi1cXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbi1cXHRcXHRvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgK1xcbi1cXHRcXHRcXHQgc2tiLVxcdTAwM2Vjc3VtX29mZnNldCArIHNpemVvZihfX3N1bTE2KTtcXG4tXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdG1pbl9sZW4gPSBvZmZzZXQ7XFxuLVxcdH1cXG4gXFx0cmV0dXJuIG1pbl9sZW47XFxuIH1cXG4gXFxuQEAgLTM5ODMsNiArMzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4gXFxuIHN0YXRpYyBpbnQgYnBmX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxcbiB7XFxuK1xcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBuZXdfbGVuIFxcdTAwM2Mgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICsgc2tiLVxcdTAwM2Vjc3VtX29mZnNldCArXFxuK1xcdFxcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcXG4rXFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbitcXG4gXFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YWNkYmQ1NzU3YTk4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX2NoYW5nZV90YWlsX3BtdHUuY1xcbkBAIC0wLDAgKzEsMTI1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXR3b3JrX2hlbHBlcnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5za2VsLmhcXFwiXFxuK1xcbisjZGVmaW5lIENMSUVOVF9OU1xcdFxcXCJ0Yy1jaGFuZ2UtdGFpbC1jbGktbnNcXFwiXFxuKyNkZWZpbmUgU0VSVkVSX05TXFx0XFxcInRjLWNoYW5nZS10YWlsLXNydi1uc1xcXCJcXG4rI2RlZmluZSBDTElFTlRfSVBcXHRcXFwiMTkyLjE2OC4xLjFcXFwiXFxuKyNkZWZpbmUgU0VSVkVSX0lQXFx0XFxcIjE5Mi4xNjguMS4yXFxcIlxcbitcXG4rI2RlZmluZSBURVNUX1BNVFVcXHQxMDAwXFxuKyNkZWZpbmUgVEVTVF9NU1NfTUFYXFx0KFRFU1RfUE1UVSAtIDIwIC0gMjApXFxuKyNkZWZpbmUgVElNRU9VVF9NU1xcdDMwMDBcXG4rI2RlZmluZSBYRkVSX0JZVEVTXFx0ODE5MlxcbitcXG4rdm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIHRjeF9vcHRzKTtcXG4rXFx0aW50IG1zc19iZWZvcmUgPSAwLCBtc3NfYWZ0ZXIgPSAwLCBpZmluZGV4LCBwb3J0O1xcbitcXHRpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xO1xcbitcXHRzdHJ1Y3QgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1ICpza2VsID0gTlVMTDtcXG4rXFx0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW4gPSBOVUxMO1xcbitcXHRzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107XFxuK1xcdHNvY2tsZW5fdCBvcHRsZW47XFxuK1xcdHNzaXplX3QgYnl0ZXM7XFxuK1xcdHNpemVfdCB0b3RhbDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoQ0xJRU5UX05TKSwgXFxcIm1ha2UgY2xpZW50IG5zXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhTRVJWRVJfTlMpLCBcXFwibWFrZSBzZXJ2ZXIgbnNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfY2xpZW50X25zO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuIGNsaWVudCBuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0U1lTKG91dCwgXFxcImlwIGxpbmsgYWRkIHZldGgxIHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDIgbmV0bnMgXFxcIiBTRVJWRVJfTlMpO1xcbitcXHRTWVMob3V0LCBcXFwiaXAgLTQgYWRkciBhZGQgXFxcIiBDTElFTlRfSVAgXFxcIi8yNCBkZXYgdmV0aDFcXFwiKTtcXG4rXFx0U1lTKG91dCwgXFxcImlwIGxpbmsgc2V0IHZldGgxIHVwXFxcIik7XFxuK1xcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChcXFwidmV0aDFcXFwiKTtcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKGlmaW5kZXgsIDAsIFxcXCJpZl9uYW1ldG9pbmRleFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdG5zdG9rZW4gPSBOVUxMO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuIHNlcnZlciBuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0U1lTKG91dCwgXFxcImlwIC00IGFkZHIgYWRkIFxcXCIgU0VSVkVSX0lQIFxcXCIvMjQgZGV2IHZldGgyXFxcIik7XFxuK1xcdFNZUyhvdXQsIFxcXCJpcCBsaW5rIHNldCB2ZXRoMiB1cFxcXCIpO1xcbitcXHRzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNFUlZFUl9JUCwgMCwgVElNRU9VVF9NUyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXFxcInN0YXJ0IHNlcnZlclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdG5zdG9rZW4gPSBOVUxMO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW4gYW5kIGxvYWQgc2tlbGV0b25cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwb3J0ID0gZ2V0X3NvY2tldF9sb2NhbF9wb3J0KHNydl9mZCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFxcXCJnZXQgc2VydmVyIHBvcnRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXNlcnZlcl9wb3J0ID0gcG9ydDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwbXR1ID0gVEVTVF9QTVRVO1xcbitcXG4rXFx0bnN0b2tlbiA9IG9wZW5fbmV0bnMoQ0xJRU5UX05TKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFxcXCJvcGVuIGNsaWVudCBuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHNrZWwtXFx1MDAzZWxpbmtzLmNoYW5nZV90YWlsX2ljbXAgPVxcbitcXHRcXHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVxcdTAwM2Vwcm9ncy5jaGFuZ2VfdGFpbF9pY21wLCBpZmluZGV4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGN4X29wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlbGlua3MuY2hhbmdlX3RhaWxfaWNtcCwgXFxcImF0dGFjaCB0Y3hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRjbGlfZmQgPSBjb25uZWN0X3RvX2ZkKHNydl9mZCwgVElNRU9VVF9NUyk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKGNsaV9mZCwgXFxcImNvbm5lY3QgdG8gc2VydmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRzcnZfY29ubl9mZCA9IGFjY2VwdChzcnZfZmQsIE5VTEwsIE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgXFxcImFjY2VwdCBjb25uZWN0aW9uXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzZXR0aW1lbyhzcnZfY29ubl9mZCwgVElNRU9VVF9NUyksIFxcXCJzZXQgc2VydmVyIHRpbWVvdXRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRvcHRsZW4gPSBzaXplb2YobXNzX2JlZm9yZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXFx1MDAyNm1zc19iZWZvcmUsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNm9wdGxlbiksIFxcXCJnZXQgbXNzIGJlZm9yZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGJ5dGVzID0gc2VuZChjbGlfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbitcXHRpZiAoIUFTU0VSVF9FUShieXRlcywgKHNzaXplX3Qpc2l6ZW9mKGJ1ZiksIFxcXCJzZW5kIGRhdGFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmb3IgKHRvdGFsID0gMDsgdG90YWwgXFx1MDAzYyBzaXplb2YoYnVmKTsgdG90YWwgKz0gYnl0ZXMpIHtcXG4rXFx0XFx0Ynl0ZXMgPSByZWN2KHNydl9jb25uX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcXG4rXFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEodG90YWwsIHNpemVvZihidWYpLCBcXFwicmVjZWl2ZSBkYXRhXFxcIik7XFxuK1xcdEFTU0VSVF9PSyhza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VjaGFuZ2VfdGFpbF9yZXQsIFxcXCJjaGFuZ2UgdGFpbFxcXCIpO1xcbitcXHRBU1NFUlRfT0soc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VhZGp1c3Rfcm9vbV9yZXQsIFxcXCJhZGp1c3Qgcm9vbVxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWljbXBfc2VudCwgXFxcImljbXAgc2VudFxcXCIpO1xcbitcXG4rXFx0b3B0bGVuID0gc2l6ZW9mKG1zc19hZnRlcik7XFxuK1xcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXFx1MDAyNm1zc19hZnRlcixcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2b3B0bGVuKSwgXFxcImdldCBtc3MgYWZ0ZXJcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRBU1NFUlRfTFQobXNzX2FmdGVyLCBtc3NfYmVmb3JlLCBcXFwibXNzIHJlZHVjZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0xFKG1zc19hZnRlciwgVEVTVF9NU1NfTUFYLCBcXFwibXNzIGJlbG93IHBtdHVcXFwiKTtcXG4rb3V0OlxcbitcXHRjbG9zZShzcnZfY29ubl9mZCk7XFxuK1xcdGNsb3NlKGNsaV9mZCk7XFxuK1xcdGNsb3NlKHNydl9mZCk7XFxuK1xcdHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dV9fZGVzdHJveShza2VsKTtcXG4rXFx0Y2xvc2VfbmV0bnMobnN0b2tlbik7XFxuK1xcdHJlbW92ZV9uZXRucyhTRVJWRVJfTlMpO1xcbitvdXRfY2xpZW50X25zOlxcbitcXHRyZW1vdmVfbmV0bnMoQ0xJRU5UX05TKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjNGMwNzU0NWJjOWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jXFxuQEAgLTAsMCArMSwxMjkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRkZWYuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOXFx0KHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgOClcXG4rI2RlZmluZSBJQ01QX0hEUlNfTEVOXFx0KHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSlcXG4rXFxuK19fYmUxNiBzZXJ2ZXJfcG9ydCA9IDA7XFxuK19fdTE2IHBtdHUgPSAwO1xcbitcXG4rbG9uZyBjaGFuZ2VfdGFpbF9yZXQgPSAxO1xcbitsb25nIGFkanVzdF9yb29tX3JldCA9IDA7XFxuK2Jvb2wgaWNtcF9zZW50ID0gZmFsc2U7XFxuK2Jvb2wgaWNtcF9lcnIgPSBmYWxzZTtcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pXFxuK3tcXG4rXFx0Y3N1bSA9IChjc3VtIFxcdTAwMjYgMHhmZmZmKSArIChjc3VtIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4rXFx0Y3N1bSA9IChjc3VtIFxcdTAwMjYgMHhmZmZmKSArIChjc3VtIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4rXFxuK1xcdHJldHVybiAoX19zdW0xNil+Y3N1bTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Yy9lZ3Jlc3NcXFwiKVxcbitpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0X191OCBzbWFjW0VUSF9BTEVOXSwgZG1hY1tFVEhfQUxFTl07XFxuK1xcdHZvaWQgKmRhdGEsICpkYXRhX2VuZDtcXG4rXFx0c3RydWN0IGljbXBoZHIgKmljbXA7XFxuK1xcdHN0cnVjdCBldGhoZHIgKmV0aDtcXG4rXFx0c3RydWN0IHRjcGhkciAqdGNwO1xcbitcXHRfX2JlMzIgc2FkZHIsIGRhZGRyO1xcbitcXHRzdHJ1Y3QgaXBoZHIgKmlwO1xcbitcXHRfX3dzdW0gY3N1bTtcXG4rXFxuK1xcdGlmIChpY21wX3NlbnQgfHwgaWNtcF9lcnIpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcbitcXHRldGggPSBkYXRhO1xcbitcXHRpZiAoKHZvaWQgKikoZXRoICsgMSkgXFx1MDAzZSBkYXRhX2VuZClcXG4rXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXHRpZiAoZXRoLVxcdTAwM2VoX3Byb3RvICE9IGJwZl9odG9ucyhFVEhfUF9JUCkpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdGlwID0gKHZvaWQgKikoZXRoICsgMSk7XFxuK1xcdGlmICgodm9pZCAqKShpcCArIDEpIFxcdTAwM2UgZGF0YV9lbmQpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFx0aWYgKGlwLVxcdTAwM2VpaGwgIT0gNSB8fCBpcC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFxuK1xcdHRjcCA9ICh2b2lkICopKGlwICsgMSk7XFxuK1xcdGlmICgodm9pZCAqKSh0Y3AgKyAxKSBcXHUwMDNlIGRhdGFfZW5kKVxcbitcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcdGlmICh0Y3AtXFx1MDAzZWRlc3QgIT0gc2VydmVyX3BvcnQpXFxuK1xcdFxcdHJldHVybiBUQ1hfUEFTUztcXG4rXFx0aWYgKGJwZl9udG9ocyhpcC1cXHUwMDNldG90X2xlbikgXFx1MDAzYz0gc2l6ZW9mKCppcCkgKyB0Y3AtXFx1MDAzZWRvZmYgKiA0KVxcbitcXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuK1xcbitcXHRfX2J1aWx0aW5fbWVtY3B5KHNtYWMsIGV0aC1cXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcXG4rXFx0X19idWlsdGluX21lbWNweShkbWFjLCBldGgtXFx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xcbitcXHRzYWRkciA9IGlwLVxcdTAwM2VzYWRkcjtcXG4rXFx0ZGFkZHIgPSBpcC1cXHUwMDNlZGFkZHI7XFxuK1xcbitcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xcbitcXHRpZiAoY2hhbmdlX3RhaWxfcmV0KSB7XFxuK1xcdFxcdGljbXBfZXJyID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbitcXHR9XFxuK1xcbitcXHRhZGp1c3Rfcm9vbV9yZXQgPSBicGZfc2tiX2FkanVzdF9yb29tKHNrYiwgSUNNUF9IRFJTX0xFTixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX0FESl9ST09NX01BQyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQlBGX0ZfQURKX1JPT01fTk9fQ1NVTV9SRVNFVCk7XFxuK1xcdGlmIChhZGp1c3Rfcm9vbV9yZXQpIHtcXG4rXFx0XFx0aWNtcF9lcnIgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gVENYX0RST1A7XFxuK1xcdH1cXG4rXFxuK1xcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YTtcXG4rXFx0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cXHUwMDNlZGF0YV9lbmQ7XFxuK1xcbitcXHRldGggPSBkYXRhO1xcbitcXHRpcCA9ICh2b2lkICopKGV0aCArIDEpO1xcbitcXHRpY21wID0gKHZvaWQgKikoaXAgKyAxKTtcXG4rXFx0aWYgKCh2b2lkICopaWNtcCArIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4gXFx1MDAzZSBkYXRhX2VuZCkge1xcbitcXHRcXHRpY21wX2VyciA9IHRydWU7XFxuK1xcdFxcdHJldHVybiBUQ1hfRFJPUDtcXG4rXFx0fVxcbitcXG4rXFx0X19idWlsdGluX21lbWNweShldGgtXFx1MDAzZWhfZGVzdCwgc21hYywgRVRIX0FMRU4pO1xcbitcXHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIGRtYWMsIEVUSF9BTEVOKTtcXG4rXFxuK1xcdF9fYnVpbHRpbl9tZW1zZXQoaWNtcCwgMCwgc2l6ZW9mKCppY21wKSk7XFxuK1xcdGljbXAtXFx1MDAzZXR5cGUgPSBJQ01QX0RFU1RfVU5SRUFDSDtcXG4rXFx0aWNtcC1cXHUwMDNlY29kZSA9IElDTVBfRlJBR19ORUVERUQ7XFxuK1xcdGljbXAtXFx1MDAzZXVuLmZyYWcubXR1ID0gYnBmX2h0b25zKHBtdHUpO1xcbitcXG4rXFx0X19idWlsdGluX21lbXNldChpcCwgMCwgc2l6ZW9mKCppcCkpO1xcbitcXHRpcC1cXHUwMDNldmVyc2lvbiA9IDQ7XFxuK1xcdGlwLVxcdTAwM2VpaGwgPSA1O1xcbitcXHRpcC1cXHUwMDNldHRsID0gNjQ7XFxuK1xcdGlwLVxcdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fSUNNUDtcXG4rXFx0aXAtXFx1MDAzZXRvdF9sZW4gPSBicGZfaHRvbnMoSUNNUF9IRFJTX0xFTiArIElDTVBfU0FNUExFX0xFTik7XFxuK1xcdGlwLVxcdTAwM2VzYWRkciA9IGRhZGRyO1xcbitcXHRpcC1cXHUwMDNlZGFkZHIgPSBzYWRkcjtcXG4rXFxuK1xcdGNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpY21wLFxcbitcXHRcXHRcXHQgICAgIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xcbitcXHRpY21wLVxcdTAwM2VjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTtcXG4rXFx0Y3N1bSA9IGJwZl9jc3VtX2RpZmYoTlVMTCwgMCwgKF9fYmUzMiAqKWlwLCBzaXplb2YoKmlwKSwgMCk7XFxuK1xcdGlwLVxcdTAwM2VjaGVjayA9IGNzdW1fZm9sZChjc3VtKTtcXG4rXFx0aWNtcF9zZW50ID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIGJwZl9yZWRpcmVjdChza2ItXFx1MDAzZWlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xcbit9XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MDYuMjM1MDE2MTQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NjcxMjQ3MjQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrYl9jaGFuZ2VfdGFpbFwiLFxuICAgIFwic2tfc2tiX2NoYW5nZV90YWlsXCIsXG4gICAgXCJicGZfc2tiX3RyaW1fcmNzdW1cIixcbiAgICBcIl9fYnBmX3NrYl9taW5fbGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0cmltbWluZyBzZW1hbnRpY3MgaW4gbmV0L2NvcmUvZmlsdGVyLmMuIFNwZWNpZmljYWxseSwgaXQgcmVtb3ZlcyB0aGUgbWluaW11bSBsZW5ndGggY29uc3RyYWludCBiYXNlZCBvbiBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldHMgaW4gX19icGZfc2tiX21pbl9sZW4gYW5kIGluc3RlYWQgcmVzZXRzIHNrYi1cXHUwMDNlaXBfc3VtbWVkIHRvIENIRUNLU1VNX05PTkUgd2hlbiB0cmltbWluZyBwYWNrZXRzIGJlbG93IHRoZSBjaGVja3N1bSBzdGFydC9vZmZzZXQgaW4gYnBmX3NrYl90cmltX3Jjc3VtLiBUaGlzIGNoYW5nZXMgZXhlY3V0YWJsZSBsb2dpYyBpbiByZWFjaGFibGUgQlBGIGhlbHBlciBmdW5jdGlvbnMgKGJwZl9za2JfY2hhbmdlX3RhaWwgYW5kIHNrX3NrYl9jaGFuZ2VfdGFpbCkgYW5kIGFmZmVjdHMgbmV0d29yayBjaGVja3N1bSBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYW4gaW1wb3J0YW50IHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzEyZWFiOWY0ZWM0YTQxYTFkYzhlOWE0ZTQ4Y2E4MmRlNTc4Y2IxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNTo1MzowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IDYxOTQwZTc1MzU1MjMuLjg1MTMxNjdhODU4YTggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC0zOTYxLDEyICszOTYxLDYgQEAgc3RhdGljIHUzMiBfX2JwZl9za2JfbWluX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuIFx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4gXHR9XG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4tXHRcdG9mZnNldCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArXG4tXHRcdFx0IHNrYi1cdTAwM2Vjc3VtX29mZnNldCArIHNpemVvZihfX3N1bTE2KTtcbi1cdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbi1cdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuLVx0fVxuIFx0cmV0dXJuIG1pbl9sZW47XG4gfVxuIFxuQEAgLTM5ODMsNiArMzk3NywxMSBAQCBzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbiBcbiBzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcbiB7XG4rXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5ld19sZW4gXHUwMDNjIHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArIHNrYi1cdTAwM2Vjc3VtX29mZnNldCArXG4rXHRcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcbitcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4rXG4gXHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43YWNkYmQ1NzU3YTk4XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19jaGFuZ2VfdGFpbF9wbXR1LmNcbkBAIC0wLDAgKzEsMTI1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3Byb2dzLmhcIlxuKyNpbmNsdWRlIFwibmV0d29ya19oZWxwZXJzLmhcIlxuKyNpbmNsdWRlIFwidGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDTElFTlRfTlNcdFwidGMtY2hhbmdlLXRhaWwtY2xpLW5zXCJcbisjZGVmaW5lIFNFUlZFUl9OU1x0XCJ0Yy1jaGFuZ2UtdGFpbC1zcnYtbnNcIlxuKyNkZWZpbmUgQ0xJRU5UX0lQXHRcIjE5Mi4xNjguMS4xXCJcbisjZGVmaW5lIFNFUlZFUl9JUFx0XCIxOTIuMTY4LjEuMlwiXG4rXG4rI2RlZmluZSBURVNUX1BNVFVcdDEwMDBcbisjZGVmaW5lIFRFU1RfTVNTX01BWFx0KFRFU1RfUE1UVSAtIDIwIC0gMjApXG4rI2RlZmluZSBUSU1FT1VUX01TXHQzMDAwXG4rI2RlZmluZSBYRkVSX0JZVEVTXHQ4MTkyXG4rXG4rdm9pZCB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdGN4X29wdHMsIHRjeF9vcHRzKTtcbitcdGludCBtc3NfYmVmb3JlID0gMCwgbXNzX2FmdGVyID0gMCwgaWZpbmRleCwgcG9ydDtcbitcdGludCBzcnZfZmQgPSAtMSwgc3J2X2Nvbm5fZmQgPSAtMSwgY2xpX2ZkID0gLTE7XG4rXHRzdHJ1Y3QgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1ICpza2VsID0gTlVMTDtcbitcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuID0gTlVMTDtcbitcdHN0YXRpYyBjaGFyIGJ1ZltYRkVSX0JZVEVTXTtcbitcdHNvY2tsZW5fdCBvcHRsZW47XG4rXHRzc2l6ZV90IGJ5dGVzO1xuK1x0c2l6ZV90IHRvdGFsO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhDTElFTlRfTlMpLCBcIm1ha2UgY2xpZW50IG5zXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKFNFUlZFUl9OUyksIFwibWFrZSBzZXJ2ZXIgbnNcIikpXG4rXHRcdGdvdG8gb3V0X2NsaWVudF9ucztcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuIGNsaWVudCBuc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRTWVMob3V0LCBcImlwIGxpbmsgYWRkIHZldGgxIHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDIgbmV0bnMgXCIgU0VSVkVSX05TKTtcbitcdFNZUyhvdXQsIFwiaXAgLTQgYWRkciBhZGQgXCIgQ0xJRU5UX0lQIFwiLzI0IGRldiB2ZXRoMVwiKTtcbitcdFNZUyhvdXQsIFwiaXAgbGluayBzZXQgdmV0aDEgdXBcIik7XG4rXHRpZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoXCJ2ZXRoMVwiKTtcbitcdGlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuK1x0bnN0b2tlbiA9IE5VTEw7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhTRVJWRVJfTlMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3BlbiBzZXJ2ZXIgbnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0U1lTKG91dCwgXCJpcCAtNCBhZGRyIGFkZCBcIiBTRVJWRVJfSVAgXCIvMjQgZGV2IHZldGgyXCIpO1xuK1x0U1lTKG91dCwgXCJpcCBsaW5rIHNldCB2ZXRoMiB1cFwiKTtcbitcdHNydl9mZCA9IHN0YXJ0X3NlcnZlcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgU0VSVkVSX0lQLCAwLCBUSU1FT1VUX01TKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9mZCwgXCJzdGFydCBzZXJ2ZXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRuc3Rva2VuID0gTlVMTDtcbitcbitcdHNrZWwgPSB0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHVfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW4gYW5kIGxvYWQgc2tlbGV0b25cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cG9ydCA9IGdldF9zb2NrZXRfbG9jYWxfcG9ydChzcnZfZmQpO1xuK1x0aWYgKCFBU1NFUlRfR0UocG9ydCwgMCwgXCJnZXQgc2VydmVyIHBvcnRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlc2VydmVyX3BvcnQgPSBwb3J0O1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcG10dSA9IFRFU1RfUE1UVTtcbitcbitcdG5zdG9rZW4gPSBvcGVuX25ldG5zKENMSUVOVF9OUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobnN0b2tlbiwgXCJvcGVuIGNsaWVudCBuc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRza2VsLVx1MDAzZWxpbmtzLmNoYW5nZV90YWlsX2ljbXAgPVxuK1x0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RjeChza2VsLVx1MDAzZXByb2dzLmNoYW5nZV90YWlsX2ljbXAsIGlmaW5kZXgsXG4rXHRcdFx0XHRcdFx1MDAyNnRjeF9vcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWxpbmtzLmNoYW5nZV90YWlsX2ljbXAsIFwiYXR0YWNoIHRjeFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRjbGlfZmQgPSBjb25uZWN0X3RvX2ZkKHNydl9mZCwgVElNRU9VVF9NUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjbGlfZmQsIFwiY29ubmVjdCB0byBzZXJ2ZXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0c3J2X2Nvbm5fZmQgPSBhY2NlcHQoc3J2X2ZkLCBOVUxMLCBOVUxMKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKHNydl9jb25uX2ZkLCBcImFjY2VwdCBjb25uZWN0aW9uXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHNldHRpbWVvKHNydl9jb25uX2ZkLCBUSU1FT1VUX01TKSwgXCJzZXQgc2VydmVyIHRpbWVvdXRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKG1zc19iZWZvcmUpO1xuK1x0aWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCBcdTAwMjZtc3NfYmVmb3JlLFxuK1x0XHRcdFx0ICBcdTAwMjZvcHRsZW4pLCBcImdldCBtc3MgYmVmb3JlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJ5dGVzID0gc2VuZChjbGlfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKCFBU1NFUlRfRVEoYnl0ZXMsIChzc2l6ZV90KXNpemVvZihidWYpLCBcInNlbmQgZGF0YVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHRvdGFsID0gMDsgdG90YWwgXHUwMDNjIHNpemVvZihidWYpOyB0b3RhbCArPSBieXRlcykge1xuK1x0XHRieXRlcyA9IHJlY3Yoc3J2X2Nvbm5fZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0XHRpZiAoYnl0ZXMgXHUwMDNjPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0QVNTRVJUX0VRKHRvdGFsLCBzaXplb2YoYnVmKSwgXCJyZWNlaXZlIGRhdGFcIik7XG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2VkYXRhLVx1MDAzZWNoYW5nZV90YWlsX3JldCwgXCJjaGFuZ2UgdGFpbFwiKTtcbitcdEFTU0VSVF9PSyhza2VsLVx1MDAzZWJzcy1cdTAwM2VhZGp1c3Rfcm9vbV9yZXQsIFwiYWRqdXN0IHJvb21cIik7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2VpY21wX3NlbnQsIFwiaWNtcCBzZW50XCIpO1xuK1xuK1x0b3B0bGVuID0gc2l6ZW9mKG1zc19hZnRlcik7XG4rXHRpZiAoIUFTU0VSVF9PSyhnZXRzb2Nrb3B0KGNsaV9mZCwgSVBQUk9UT19UQ1AsIFRDUF9NQVhTRUcsIFx1MDAyNm1zc19hZnRlcixcbitcdFx0XHRcdCAgXHUwMDI2b3B0bGVuKSwgXCJnZXQgbXNzIGFmdGVyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9MVChtc3NfYWZ0ZXIsIG1zc19iZWZvcmUsIFwibXNzIHJlZHVjZWRcIik7XG4rXHRBU1NFUlRfTEUobXNzX2FmdGVyLCBURVNUX01TU19NQVgsIFwibXNzIGJlbG93IHBtdHVcIik7XG4rb3V0OlxuK1x0Y2xvc2Uoc3J2X2Nvbm5fZmQpO1xuK1x0Y2xvc2UoY2xpX2ZkKTtcbitcdGNsb3NlKHNydl9mZCk7XG4rXHR0ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHVfX2Rlc3Ryb3koc2tlbCk7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdHJlbW92ZV9uZXRucyhTRVJWRVJfTlMpO1xuK291dF9jbGllbnRfbnM6XG4rXHRyZW1vdmVfbmV0bnMoQ0xJRU5UX05TKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM0YzA3NTQ1YmM5ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5AQCAtMCwwICsxLDEyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4rXG4rI2RlZmluZSBJQ01QX1NBTVBMRV9MRU5cdChzaXplb2Yoc3RydWN0IGlwaGRyKSArIDgpXG4rI2RlZmluZSBJQ01QX0hEUlNfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpKVxuK1xuK19fYmUxNiBzZXJ2ZXJfcG9ydCA9IDA7XG4rX191MTYgcG10dSA9IDA7XG4rXG4rbG9uZyBjaGFuZ2VfdGFpbF9yZXQgPSAxO1xuK2xvbmcgYWRqdXN0X3Jvb21fcmV0ID0gMDtcbitib29sIGljbXBfc2VudCA9IGZhbHNlO1xuK2Jvb2wgaWNtcF9lcnIgPSBmYWxzZTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBjc3VtKVxuK3tcbitcdGNzdW0gPSAoY3N1bSBcdTAwMjYgMHhmZmZmKSArIChjc3VtIFx1MDAzZVx1MDAzZSAxNik7XG4rXHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgKyAoY3N1bSBcdTAwM2VcdTAwM2UgMTYpO1xuK1xuK1x0cmV0dXJuIChfX3N1bTE2KX5jc3VtO1xuK31cbitcbitTRUMoXCJ0Yy9lZ3Jlc3NcIilcbitpbnQgY2hhbmdlX3RhaWxfaWNtcChzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0X191OCBzbWFjW0VUSF9BTEVOXSwgZG1hY1tFVEhfQUxFTl07XG4rXHR2b2lkICpkYXRhLCAqZGF0YV9lbmQ7XG4rXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcDtcbitcdHN0cnVjdCBldGhoZHIgKmV0aDtcbitcdHN0cnVjdCB0Y3BoZHIgKnRjcDtcbitcdF9fYmUzMiBzYWRkciwgZGFkZHI7XG4rXHRzdHJ1Y3QgaXBoZHIgKmlwO1xuK1x0X193c3VtIGNzdW07XG4rXG4rXHRpZiAoaWNtcF9zZW50IHx8IGljbXBfZXJyKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXG4rXHRldGggPSBkYXRhO1xuK1x0aWYgKCh2b2lkICopKGV0aCArIDEpIFx1MDAzZSBkYXRhX2VuZClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0aWYgKGV0aC1cdTAwM2VoX3Byb3RvICE9IGJwZl9odG9ucyhFVEhfUF9JUCkpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcbitcdGlwID0gKHZvaWQgKikoZXRoICsgMSk7XG4rXHRpZiAoKHZvaWQgKikoaXAgKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmIChpcC1cdTAwM2VpaGwgIT0gNSB8fCBpcC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0dGNwID0gKHZvaWQgKikoaXAgKyAxKTtcbitcdGlmICgodm9pZCAqKSh0Y3AgKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmICh0Y3AtXHUwMDNlZGVzdCAhPSBzZXJ2ZXJfcG9ydClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0aWYgKGJwZl9udG9ocyhpcC1cdTAwM2V0b3RfbGVuKSBcdTAwM2M9IHNpemVvZigqaXApICsgdGNwLVx1MDAzZWRvZmYgKiA0KVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRfX2J1aWx0aW5fbWVtY3B5KHNtYWMsIGV0aC1cdTAwM2VoX3NvdXJjZSwgRVRIX0FMRU4pO1xuK1x0X19idWlsdGluX21lbWNweShkbWFjLCBldGgtXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XG4rXHRzYWRkciA9IGlwLVx1MDAzZXNhZGRyO1xuK1x0ZGFkZHIgPSBpcC1cdTAwM2VkYWRkcjtcbitcbitcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBFVEhfSExFTiArIElDTVBfU0FNUExFX0xFTiwgMCk7XG4rXHRpZiAoY2hhbmdlX3RhaWxfcmV0KSB7XG4rXHRcdGljbXBfZXJyID0gdHJ1ZTtcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1x0fVxuK1xuK1x0YWRqdXN0X3Jvb21fcmV0ID0gYnBmX3NrYl9hZGp1c3Rfcm9vbShza2IsIElDTVBfSERSU19MRU4sXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9BREpfUk9PTV9NQUMsXG4rXHRcdFx0XHRcdCAgICAgIEJQRl9GX0FESl9ST09NX05PX0NTVU1fUkVTRVQpO1xuK1x0aWYgKGFkanVzdF9yb29tX3JldCkge1xuK1x0XHRpY21wX2VyciA9IHRydWU7XG4rXHRcdHJldHVybiBUQ1hfRFJPUDtcbitcdH1cbitcbitcdGRhdGEgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhO1xuK1x0ZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXNrYi1cdTAwM2VkYXRhX2VuZDtcbitcbitcdGV0aCA9IGRhdGE7XG4rXHRpcCA9ICh2b2lkICopKGV0aCArIDEpO1xuK1x0aWNtcCA9ICh2b2lkICopKGlwICsgMSk7XG4rXHRpZiAoKHZvaWQgKilpY21wICsgc2l6ZW9mKCppY21wKSArIElDTVBfU0FNUExFX0xFTiBcdTAwM2UgZGF0YV9lbmQpIHtcbitcdFx0aWNtcF9lcnIgPSB0cnVlO1xuK1x0XHRyZXR1cm4gVENYX0RST1A7XG4rXHR9XG4rXG4rXHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX2Rlc3QsIHNtYWMsIEVUSF9BTEVOKTtcbitcdF9fYnVpbHRpbl9tZW1jcHkoZXRoLVx1MDAzZWhfc291cmNlLCBkbWFjLCBFVEhfQUxFTik7XG4rXG4rXHRfX2J1aWx0aW5fbWVtc2V0KGljbXAsIDAsIHNpemVvZigqaWNtcCkpO1xuK1x0aWNtcC1cdTAwM2V0eXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7XG4rXHRpY21wLVx1MDAzZWNvZGUgPSBJQ01QX0ZSQUdfTkVFREVEO1xuK1x0aWNtcC1cdTAwM2V1bi5mcmFnLm10dSA9IGJwZl9odG9ucyhwbXR1KTtcbitcbitcdF9fYnVpbHRpbl9tZW1zZXQoaXAsIDAsIHNpemVvZigqaXApKTtcbitcdGlwLVx1MDAzZXZlcnNpb24gPSA0O1xuK1x0aXAtXHUwMDNlaWhsID0gNTtcbitcdGlwLVx1MDAzZXR0bCA9IDY0O1xuK1x0aXAtXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7XG4rXHRpcC1cdTAwM2V0b3RfbGVuID0gYnBmX2h0b25zKElDTVBfSERSU19MRU4gKyBJQ01QX1NBTVBMRV9MRU4pO1xuK1x0aXAtXHUwMDNlc2FkZHIgPSBkYWRkcjtcbitcdGlwLVx1MDAzZWRhZGRyID0gc2FkZHI7XG4rXG4rXHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaWNtcCxcbitcdFx0XHQgICAgIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xuK1x0aWNtcC1cdTAwM2VjaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTtcbitcdGNzdW0gPSBicGZfY3N1bV9kaWZmKE5VTEwsIDAsIChfX2JlMzIgKilpcCwgc2l6ZW9mKCppcCksIDApO1xuK1x0aXAtXHUwMDNlY2hlY2sgPSBjc3VtX2ZvbGQoY3N1bSk7XG4rXHRpY21wX3NlbnQgPSB0cnVlO1xuK1x0cmV0dXJuIGJwZl9yZWRpcmVjdChza2ItXHUwMDNlaWZpbmRleCwgQlBGX0ZfSU5HUkVTUyk7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjA2LjIzNTAxNzM0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NTA0ODY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogTmV0d29yayBGaWx0ZXIgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaG93IHRoZXkgYWZmZWN0IHRoZSBCUEYgZmlsdGVyaW5nIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIHR3ZWFrZWQgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgYSBzZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBgX19icGZfc2tiX21pbl9sZW5gLiBUaGUgb3JpZ2luYWwgY29kZSBzZWdtZW50IHdhcyBjaGVja2luZyBmb3IgYENIRUNLU1VNX1BBUlRJQUxgIGFuZCBjYWxjdWxhdGluZyBhIG1pbmltdW0gbGVuZ3RoIGJhc2VkIG9uIGNoZWNrc3VtIG9mZnNldC4gU2VlbXMgbGlrZSBpdCB3YXMgcmVsYXRlZCB0byBwYXJ0aWFsbHkgY2hlY2tzdW1tZWQgcGFja2V0cywgd2hpY2ggaXMgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGVjayB3YXMgZGVlbWVkIHVubmVjZXNzYXJ5LiBQZXJoYXBzIHRoaXMgbG9naWMgaXMgaGFuZGxlZCBlbHNld2hlcmUgbm93LCBvciBtYXliZSBpdCdzIGJlaW5nIHNpbXBsaWZpZWQuXG5cblRoZW4sIGluIGBicGZfc2tiX3RyaW1fcmNzdW1gLCB3ZSBzZWUgdGhlIGFkZGl0aW9uIG9mIGEgY29uZGl0aW9uYWwgY2hlY2suIFRoaXMgY29kZSBhbHNvIGFwcGVhcnMgcmVsYXRlZCB0byBgQ0hFQ0tTVU1fUEFSVElBTGAuIElmIHRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBTS0IgaXMgc21hbGxlciB0aGFuIHNvbWUgY2hlY2tzdW0tcmVsYXRlZCBvZmZzZXQsIHRoZW4gYHNrYi1cdTAwM2VpcF9zdW1tZWRgIGlzIHNldCB0byBgQ0hFQ0tTVU1fTk9ORWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGhhbmRsaW5nIHRoZSBjaGVja3N1bSB1cGRhdGUgYmV0dGVyIHRoYW4gYmVmb3JlIG9yIHBlcmhhcHMgc2V0dGluZyBpdCB0byBub25lLCBvciBwZXJoYXBzIGRvaW5nIHNvbWUgZm9ybSBvZiByZWNvbXB1dGF0aW9uLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGFzIHRoaXMgY291bGQgYWRkIGxhdGVuY3kgb3IgcmVzdWx0IGluIGluY29ycmVjdCBwYWNrZXRzLlxuXG5UbyBmdWxseSBncmFzcCB0aGUgaW50ZW50LCBJIHNob3VsZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbnRlbnQgaGVyZS4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZmluZCB0aGUgY2FsbGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QgaW4gdGhlIG92ZXJhbGwgQlBGIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IHRvIGRldGVybWluZSB0aGUgaW1wYWN0LlxuSSBtdXN0IGFsc28gY2hlY2sgdGhlIGFkZGVkIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIEknbGwgd2FudCB0byBzZWUgd2hhdCB0aGVzZSB0ZXN0cyBjb3Zlci4gQXJlIHRoZXkgdmFsaWRhdGluZyB0aGUgdHJpbW1pbmcgYW5kIGNoZWNrc3VtIGhhbmRsaW5nIGluIHZhcmlvdXMgc2NlbmFyaW9zPyBBcmUgdGhleSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnM/IFRoZXkgc2hvdWxkIGJlIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0LlxuXG5PdmVyYWxsLCBpdCBzZWVtcyB0aGlzIGlzIGFpbWVkIGF0IG9wdGltaXppbmcgdGhlIGhhbmRsaW5nIG9mIGNoZWNrc3VtcyB3aXRoaW4gdGhlIEJQRiBmaWx0ZXJpbmcgcGlwZWxpbmUsIGFuZCBJJ2xsIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBjb250ZXh0IGFuZCB0ZXN0cyB0byBkZXRlcm1pbmUgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1MzoxMi42ODU1MDY3NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk1MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk1MDpcXHR9O1xcbjM5NTE6XFx0XFxuMzk1MjpcXHRzdGF0aWMgdTMyIF9fYnBmX3NrYl9taW5fbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuMzk1MzpcXHR7XFxuMzk1NDpcXHRcXHRpbnQgb2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuMzk1NTpcXHRcXHR1MzIgbWluX2xlbiA9IDA7XFxuMzk1NjpcXHRcXG4zOTU3OlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSAwKVxcbjM5NTg6XFx0XFx0XFx0bWluX2xlbiA9IG9mZnNldDtcXG4zOTU5OlxcdFxcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpIHtcXG4zOTYwOlxcdFxcdFxcdG9mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuMzk2MTpcXHRcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgMClcXG4zOTYyOlxcdFxcdFxcdFxcdG1pbl9sZW4gPSBvZmZzZXQ7XFxuMzk2MzpcXHRcXHR9XFxuMzk2NDpcXHRcXHRyZXR1cm4gbWluX2xlbjtcXG4zOTY1OlxcdH1cXG4zOTY2OlxcdFxcbjM5Njc6XFx0c3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuMzk2ODpcXHR7XFxuMzk2OTpcXHRcXHR1bnNpZ25lZCBpbnQgb2xkX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbjM5NzA6XFx0XFx0aW50IHJldDtcXG4zOTcxOlxcdFxcbjM5NzI6XFx0XFx0cmV0ID0gX19za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xcbjM5NzM6XFx0XFx0aWYgKCFyZXQpXFxuMzk3NDpcXHRcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VkYXRhICsgb2xkX2xlbiwgMCwgbmV3X2xlbiAtIG9sZF9sZW4pO1xcbjM5NzU6XFx0XFx0cmV0dXJuIHJldDtcXG4zOTc2OlxcdH1cXG4zOTc3OlxcdFxcbjM5Nzg6XFx0c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuMzk3OTpcXHR7XFxuMzk4MDpcXHRcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNlxcbjM5ODE6XFx0XFx0ICAgIG5ld19sZW4gXFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgKyBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0ICtcXG4zOTgyOlxcdFxcdFxcdCAgICAgIHNpemVvZihfX3N1bTE2KSlcXG4zOTgzOlxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcXG4zOTg0OlxcdFxcbjM5ODU6XFx0XFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG4zOTg2OlxcdH1cXG4zOTg3OlxcdFxcbjM5ODg6XFx0c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbjM5ODk6XFx0XFx0XFx0XFx0XFx0XFx0dTY0IGZsYWdzKVxcbjM5OTA6XFx0e1xcbjM5OTE6XFx0XFx0dTMyIG1heF9sZW4gPSBCUEZfU0tCX01BWF9MRU47XFxuMzk5MjpcXHRcXHR1MzIgbWluX2xlbiA9IF9fYnBmX3NrYl9taW5fbGVuKHNrYik7XFxuMzk5MzpcXHRcXHRpbnQgcmV0O1xcbjM5OTQ6XFx0XFxuMzk5NTpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgfHwgbmV3X2xlbiBcXHUwMDNlIG1heF9sZW4gfHwgbmV3X2xlbiBcXHUwMDNjIG1pbl9sZW4pKVxcbjM5OTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzk5NzpcXHRcXHRpZiAoc2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbjM5OTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4zOTk5OlxcdFxcbjQwMDA6XFx0XFx0LyogVGhlIGJhc2ljIGlkZWEgb2YgdGhpcyBoZWxwZXIgaXMgdGhhdCBpdCdzIHBlcmZvcm1pbmcgdGhlXFxuNDAwMTpcXHRcXHQgKiBuZWVkZWQgd29yayB0byBlaXRoZXIgZ3JvdyBvciB0cmltIGFuIHNrYiwgYW5kIGVCUEYgcHJvZ3JhbVxcbjQwMDI6XFx0XFx0ICogcmV3cml0ZXMgdGhlIHJlc3QgdmlhIGhlbHBlcnMgbGlrZSBicGZfc2tiX3N0b3JlX2J5dGVzKCksXFxuNDAwMzpcXHRcXHQgKiBicGZfbFhfY3N1bV9yZXBsYWNlKCkgYW5kIG90aGVycyByYXRoZXIgdGhhbiBwYXNzaW5nIGEgcmF3XFxuNDAwNDpcXHRcXHQgKiBidWZmZXIgaGVyZS4gVGhpcyBvbmUgaXMgYSBzbG93IHBhdGggaGVscGVyIGFuZCBpbnRlbmRlZFxcbjQwMDU6XFx0XFx0ICogZm9yIHJlcGxpZXMgd2l0aCBjb250cm9sIG1lc3NhZ2VzLlxcbjQwMDY6XFx0XFx0ICpcXG40MDA3OlxcdFxcdCAqIExpa2UgaW4gYnBmX3NrYl9jaGFuZ2VfcHJvdG8oKSwgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmF0aGVyXFxuNDAwODpcXHRcXHQgKiBtaW5pbWFsIGFuZCB3aXRob3V0IHByb3RvY29sIHNwZWNpZmljcyBzbyB0aGF0IHdlIGFyZSBhYmxlXFxuNDAwOTpcXHRcXHQgKiB0byBzZXBhcmF0ZSBjb25jZXJucyBhcyBpbiBicGZfc2tiX3N0b3JlX2J5dGVzKCkgc2hvdWxkIG9ubHlcXG40MDEwOlxcdFxcdCAqIGJlIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgYnVmZmVycy5cXG40MDExOlxcdFxcdCAqXFxuNDAxMjpcXHRcXHQgKiBJdCdzIHJlYWxseSBleHBlY3RlZCB0byBiZSBhIHNsb3cgcGF0aCBvcGVyYXRpb24gaGVyZSBmb3JcXG40MDEzOlxcdFxcdCAqIGNvbnRyb2wgbWVzc2FnZSByZXBsaWVzLCBzbyB3ZSdyZSBpbXBsaWNpdGx5IGxpbmVhcml6aW5nLFxcbjQwMTQ6XFx0XFx0ICogdW5jbG9uaW5nIGFuZCBkcm9wIG9mZmxvYWRzIGZyb20gdGhlIHNrYiBieSB0aGlzLlxcbjQwMTU6XFx0XFx0ICovXFxuNDAxNjpcXHRcXHRyZXQgPSBfX2JwZl90cnlfbWFrZV93cml0YWJsZShza2IsIHNrYi1cXHUwMDNlbGVuKTtcXG40MDE3OlxcdFxcdGlmICghcmV0KSB7XFxuNDAxODpcXHRcXHRcXHRpZiAobmV3X2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKVxcbjQwMTk6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjEyLjY4NTkwNTA4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMzIzODY0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gVGFpbCBDaGFuZ2VzKipcblxuQWxyaWdodCwgSSdtIGF0IHRoZSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBgX19icGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYGJwZl9za2JfY2hhbmdlX3RhaWxgIGRlZmluaXRpb25zLiBJIGNhbid0IGp1c3Qgb3BlcmF0ZSBpbiBhIHZhY3V1bSBoZXJlLiBUbyBmdWxseSBncmFzcCB0aGVpciBiZWhhdmlvciBhbmQgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGFkdmFuY2VkIEJQRiBwcm9ncmFtcywgSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZyB1bmRlciB0aGUgaG9vZCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgU0tCIG1hbmlwdWxhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaW1lIHRvIGRpZyBpbiEgTGV0J3Mgc2VlIGhvdyB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIGFuZCBob3cgdGhleSByZWxhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjE2LjAxODI5MzcwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2ODI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDE4LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MDE4OlxcdFxcdFxcdGlmIChuZXdfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuNDAxOTpcXHRcXHRcXHRcXHRyZXQgPSBicGZfc2tiX2dyb3dfcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG40MDIwOlxcdFxcdFxcdGVsc2UgaWYgKG5ld19sZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbilcXG40MDIxOlxcdFxcdFxcdFxcdHJldCA9IGJwZl9za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xcbjQwMjI6XFx0XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgc2tiX2lzX2dzbyhza2IpKVxcbjQwMjM6XFx0XFx0XFx0XFx0c2tiX2dzb19yZXNldChza2IpO1xcbjQwMjQ6XFx0XFx0fVxcbjQwMjU6XFx0XFx0cmV0dXJuIHJldDtcXG40MDI2OlxcdH1cXG40MDI3OlxcdFxcbjQwMjg6XFx0QlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcXG40MDI5OlxcdFxcdCAgIHU2NCwgZmxhZ3MpXFxuNDAzMDpcXHR7XFxuNDAzMTpcXHRcXHRpbnQgcmV0ID0gX19icGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbmV3X2xlbiwgZmxhZ3MpO1xcbjQwMzI6XFx0XFxuNDAzMzpcXHRcXHRicGZfY29tcHV0ZV9kYXRhX3BvaW50ZXJzKHNrYik7XFxuNDAzNDpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMzU6XFx0fVxcbjQwMzY6XFx0XFxuNDAzNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxuNDAzODpcXHRcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9jaGFuZ2VfdGFpbCxcXG40MDM5OlxcdFxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuNDA0MDpcXHRcXHQucmV0X3R5cGVcXHQ9IFJFVF9JTlRFR0VSLFxcbjQwNDE6XFx0XFx0LmFyZzFfdHlwZVxcdD0gQVJHX1BUUl9UT19DVFgsXFxuNDA0MjpcXHRcXHQuYXJnMl90eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuNDA0MzpcXHRcXHQuYXJnM190eXBlXFx0PSBBUkdfQU5ZVEhJTkcsXFxuNDA0NDpcXHR9O1xcbjQwNDU6XFx0XFxuNDA0NjpcXHRCUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXFxuNDA0NzpcXHRcXHQgICB1NjQsIGZsYWdzKVxcbjQwNDg6XFx0e1xcbjQwNDk6XFx0XFx0cmV0dXJuIF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcXG40MDUwOlxcdH1cXG40MDUxOlxcdFxcbjQwNTI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxuNDA1MzpcXHRcXHQuZnVuY1xcdFxcdD0gc2tfc2tiX2NoYW5nZV90YWlsLFxcbjQwNTQ6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG40MDU1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuNDA1NjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG40MDU3OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MTYuMDE4NjYzNTM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMDYwMzY2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBicGZfc2tiX2NoYW5nZV90YWlsIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGJwZl9za2JfY2hhbmdlX3RhaWxgIGlzIGEgQlBGIGhlbHBlci4gSSBrbm93IGl0J3MgY2FsbGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdGhhdCBhdHRhY2ggdG8gdGhpbmdzIGxpa2UgYHRjYCBvciBgc2tfc2tiYC4gVGhpcyBpbW1lZGlhdGVseSBwdXRzIGl0IGluIG15IFwicG90ZW50aWFsbHkgaW50ZXJlc3RpbmdcIiBjYXRlZ29yeSBiZWNhdXNlIEJQRiBwcm9ncmFtcyBhcmUgYSBrbm93biBhdHRhY2sgc3VyZmFjZSBhbmQgdGhhdCBhcmVhIGhhcyBzZWVuIGl0cyBmYWlyIHNoYXJlIG9mIHZ1bG5lcmFiaWxpdGllcy4gSXQgbWFuaXB1bGF0ZXMgYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgYGJwZl9za2JfdHJpbV9yY3N1bWAuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AsIHdoaWNoIG1ha2VzIGl0IHJlYWNoYWJsZSBjb2RlIGFuZCwgaW1wb3J0YW50bHksIGNvZGUgdGhhdCdzIGFscmVhZHkgd2l0aGluIHRoZSBzY29wZSBvZiBzdGFuZGFyZCBrZXJuZWwgYW5kIHN5emthbGxlciBmdXp6aW5nLlxuXG5Ob3csIHRvIGRldGVybWluZSBpZiBpdCdzIFwiV29ydGhGdXp6aW5nLFwiIGxldCdzIGV2YWx1YXRlOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbToqKiBJdCdzIGFic29sdXRlbHkgY29yZS4gV2UncmUgdGFsa2luZyBCUEYgaGVscGVyIGZ1bmN0aW9ucywgY29yZSBuZXR3b3JraW5nLCBhbmQgU0tCIG1hbmlwdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBhbmQgYGJwZl9za2JfdHJpbV9yY3N1bWAuXG4qICAgKipSZWFjaGFibGU6KiogQ2xlYXJseSByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtcyBhdHRhY2hlZCB0byBgdGNgLCBzb2NrZXRzLCBldGMuIFRoYXQncyBhIGh1Z2UgcG9zaXRpdmUuXG4qICAgKipTZW1hbnRpYyBDaGFuZ2VzOioqIFRoaXMgbW9kaWZpZXMgaG93IFNLQiBjaGVja3N1bW1pbmcgKGBza2ItXHUwMDNlaXBfc3VtbWVkYCkgaXMgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCBoYXMgdG8gZG8gd2l0aCB0cmltbWluZyBhbiBTS0Igd2l0aCBgQ0hFQ0tTVU1fUEFSVElBTGAgYmVsb3cgdGhlIGNoZWNrc3VtIG9mZnNldCwgYW5kIHJlbW92ZXMgdGhlIG1pbmltdW0gbGVuZ3RoIHJlc3RyaWN0aW9uIHRoYXQgcHJldmlvdXNseSBwcmV2ZW50ZWQgdHJpbW1pbmcgcGFja2V0cyB3aXRoIGBDSEVDS1NVTV9QQVJUSUFMYCBwYXN0IHRoZSBjaGVja3N1bSBvZmZzZXQuXG4qICAgKipJbXBhY3Q6KiogVGhpcyBpcyBzaWduaWZpY2FudCEgV2UncmUgY2hhbmdpbmcgcGFja2V0IG1hbmlwdWxhdGlvbiBzZW1hbnRpY3MgYW5kIFNLQiBzdGF0ZS4gVGhlIGZhY3QgdGhhdCBpdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCBjaGVja3N1bW1pbmcgYW5kIHN1YnNlcXVlbnQgbmV0d29yayBzdGFjayBwcm9jZXNzaW5nIGlzIGEgaHVnZSByZWQgZmxhZyB0aGF0IGluZGljYXRlcyBpdOKAmXMgV29ydGhGdXp6aW5nLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IHRydWUsIHRoaXMgaXMgaW1wb3J0YW50IGFuZCBuZWVkcyBhdHRlbnRpb24uXG5cbk5leHQgc3RlcDogTGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdG8gZm9jdXMgb24uIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzP1xuKiAgIGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgX19icGZfc2tiX2NoYW5nZV90YWlsYCBpcyBzdGF0aWMgaW5saW5lLCB3aGljaCBtZWFucyBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBza19za2JfY2hhbmdlX3RhaWxgIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYW5kIHRoYXQgaXMgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uXG4qICAgYGJwZl9za2JfdHJpbV9yY3N1bWAuIFdhaXQgYSBtaW51dGUsIHRoYXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW5zaWRlIGBmaWx0ZXIuY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBicGZfc2tiX3RyaW1fcmNzdW1gIGlzIHN0YXRpYyBhbmQgd2hlcmUgZWxzZSBpdCBtaWdodCBiZSB1c2VkLiBJJ2xsIG5lZWQgdG8gdXNlIGdyZXBwZXIgdG8gc2VlIGhvdyBpdCdzIGNhbGxlZCBhbmQgYnkgd2hhdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgZ29vZCBmdXp6aW5nIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NjEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1MzoyNi4yMjQ3MDE5OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2OTQzNjE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tiX3RyaW1fcmNzdW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Mzk2Nz1zdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTM5NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Mzk3ODpzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTc5LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM5ODg9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDAyMC1cXHRcXHRlbHNlIGlmIChuZXdfbGVuIFxcdTAwM2Mgc2tiLVxcdTAwM2VsZW4pXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAyMTpcXHRcXHRcXHRyZXQgPSBicGZfc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDIyLVxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHNrYl9pc19nc28oc2tiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MjguMzk0MTQyOTUzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwODQ0MDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFRhaWwtQ2hhbmdpbmcgTWVjaGFuaXNtcyBpbiBCUEYqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgYXJlIGRlZmluZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYEJQRl9DQUxMYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmdW5jdGlvbiBzeW1ib2wsIG9yIGl0cyBwb3RlbnRpYWwgYWxpYXNlcyBsaWtlIGBfX19fYnBmX3NrYl9jaGFuZ2VfdGFpbGAgb3IganVzdCBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBgQlBGX0NBTExfMyhicGZfc2tiX2NoYW5nZV90YWlsLCAuLi4pYCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFuYWx5c2lzLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBvdGhlciBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYWxsIHJlbGF0ZWQgc3ltYm9scyBhbmQgd2hhdCB0aGV5IGRvLiBJIGtub3cgdGhhdCBsb29raW5nIGF0IHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gYW5kIHVzZSBjYXNlIGZvciBjaGFuZ2luZyB0aGUgdGFpbCBvZiBhbiBTS0IgZnJvbSB3aXRoaW4gYSBCUEYgcHJvZ3JhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4MjgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MzAuODAyNTg1MTcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIxMzI3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za2JfY2hhbmdlX3RhaWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjMtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6Mjc2NDogKiBsb25nIGJwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbiwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNzY1LSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zOTc4PXN0YXRpYyBpbnQgYnBmX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMzk4Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzozOTg4OnN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg5LVxcdFxcdFxcdFxcdFxcdHU2NCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjctXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAyODpCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMjktXFx0ICAgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy00MDMwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo0MDMxOlxcdGludCByZXQgPSBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDAzMi1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwMzYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzNzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NDAzODpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrYl9jaGFuZ2VfdGFpbCxcXG5uZXQvY29yZS9maWx0ZXIuYy00MDM5LVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00MDQ2PUJQRl9DQUxMXzMoc2tfc2tiX2NoYW5nZV90YWlsLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgbmV3X2xlbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwNDgte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQwNDk6XFx0cmV0dXJuIF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIG5ld19sZW4sIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDUwLX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQwNjE9c3RhdGljIGlubGluZSBpbnQgX19icGZfc2tiX2NoYW5nZV9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBoZWFkX3Jvb20sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MDc4LVxcdFxcdCAqIHNrYi1cXHUwMDNlcHJvdG9jb2wgbmV0d29yayBoZWFkZXIsIGV0Yywgc3RheSBhcyBpcy5cXG5uZXQvY29yZS9maWx0ZXIuYzo0MDc5OlxcdFxcdCAqIENvbXBhcmVkIHRvIGJwZl9za2JfY2hhbmdlX3RhaWwoKSwgd2UncmUgbW9yZVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQwODAtXFx0XFx0ICogZmxleGlibGUgZHVlIHRvIG5vdCBuZWVkaW5nIHRvIGxpbmVhcml6ZSBvclxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NjU2LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTgtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDIwLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwMjE6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMjItXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjc2My0gKlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyNzY0OiAqIGxvbmcgYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGVuLCB1NjQgZmxhZ3MpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI3NjUtICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYz0yMT1pbnQgcHJvZ19za2JfdmVyZGljdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzItXFx0aWYgKGRhdGFbMF0gPT0gJ1QnKSB7IC8qIFRyaW0gdGhlIHBhY2tldCAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYzozMzpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSAxLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzQtXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jLTM1LVxcdH0gZWxzZSBpZiAoZGF0YVswXSA9PSAnRycpIHsgLyogR3JvdyB0aGUgcGFja2V0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9jaGFuZ2VfdGFpbC5jOjM2OlxcdFxcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXFx1MDAzZWxlbiArIDEsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYy0zNy1cXHRcXHRyZXR1cm4gU0tfUEFTUztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtMzgtXFx0fSBlbHNlIGlmIChkYXRhWzBdID09ICdFJykgeyAvKiBFcnJvciAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfY2hhbmdlX3RhaWwuYzozOTpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgQlBGX1NLQl9NQVhfTEVOLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX2NoYW5nZV90YWlsLmMtNDAtXFx0XFx0cmV0dXJuIFNLX1BBU1M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYz01ND1pbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMtNTUte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jOjU2OlxcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBza2ItXFx1MDAzZWxlbiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMtNTctXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYz01OT1pbnQgY2hhbmdlX3RhaWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy04Ni1cXHRpZiAocGF5bG9hZFswXSA9PSAnVCcpIHsgLyogVHJpbSB0aGUgcGFja2V0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo4NzpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgbGVuIC0gMSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy04OC1cXHRcXHRpZiAoIWNoYW5nZV90YWlsX3JldClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjg5OlxcdFxcdFxcdGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBsZW4sIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTAtXFx0XFx0cmV0dXJuIFRDWF9QQVNTO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmMtOTEtXFx0fSBlbHNlIGlmIChwYXlsb2FkWzBdID09ICdHJykgeyAvKiBHcm93IHRoZSBwYWNrZXQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jOjkyOlxcdFxcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBsZW4gKyAxLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTkzLVxcdFxcdGlmICghY2hhbmdlX3RhaWxfcmV0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6OTQ6XFx0XFx0XFx0YnBmX3NrYl9jaGFuZ2VfdGFpbChza2IsIGxlbiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05NS1cXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYy05Ni1cXHR9IGVsc2UgaWYgKHBheWxvYWRbMF0gPT0gJ0UnKSB7IC8qIEVycm9yICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWwuYzo5NzpcXHRcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgQlBGX1NLQl9NQVhfTEVOLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTk4LVxcdFxcdHJldHVybiBUQ1hfUEFTUztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTk5LVxcdH0gZWxzZSBpZiAocGF5bG9hZFswXSA9PSAnWicpIHsgLyogWmVybyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsLmM6MTAwOlxcdFxcdGNoYW5nZV90YWlsX3JldCA9IGJwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCAwLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbC5jLTEwMS1cXHRcXHRyZXR1cm4gVENYX1BBU1M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1LmM9MzY9aW50IGNoYW5nZV90YWlsX2ljbXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5jLTc3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYzo3ODpcXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYy03OS1cXHRpZiAoY2hhbmdlX3RhaWxfcmV0KSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jPTEyNj1zdGF0aWMgaW50IHRjcF9yZWxvYWRfaGVhZGVycyhzdHJ1Y3QgdGNwX3N5bmNvb2tpZSAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzYtXFx0LyogTmVlZGVkIHRvIGNhbGN1bGF0ZSBjc3VtIGFuZCBwYXJzZSBUQ1Agb3B0aW9ucy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jOjEzNzpcXHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgtXFx1MDAzZXNrYiwgZGF0YV9sZW4gKyA2MCAtIGN0eC1cXHUwMDNldGNwLVxcdTAwM2Vkb2ZmICogNCwgMCkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNwX2N1c3RvbV9zeW5jb29raWUuYy0xMzgtXFx0XFx0Z290byBlcnI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jPTQwMT1zdGF0aWMgaW50IHRjcF9oYW5kbGVfc3luKHN0cnVjdCB0Y3Bfc3luY29va2llICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jOjQ1NjpcXHRpZiAoYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgtXFx1MDAzZXNrYiwgKGxvbmcpY3R4LVxcdTAwM2VwdHIzMiAtIChsb25nKWN0eC1cXHUwMDNlZXRoLCAwKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y3BfY3VzdG9tX3N5bmNvb2tpZS5jLTQ1Ny1cXHRcXHRnb3RvIGVycjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3hkcF9tZXRhLmM9NjM1PWludCBoZWxwZXJfc2tiX2NoYW5nZV9oZWFkX3RhaWwoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy02NTUtXFx0LyogUmVzZXJ2ZSA0ayBleHRyYSBieXRlcyBpbiB0aGUgYmFjayB0byB0cmlnZ2VyIGhlYWQgcmVhbGxvY2F0aW9uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYzo2NTY6XFx0ZXJyID0gYnBmX3NrYl9jaGFuZ2VfdGFpbChjdHgsIGN0eC1cXHUwMDNlbGVuICsgNDA5NiwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfeGRwX21ldGEuYy02NTctXFx0aWYgKGVycilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jPTU3OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBzeW5jb29raWVfaGFuZGxlX3N5bihzdHJ1Y3QgaGVhZGVyX3BvaW50ZXJzICpoZHIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03MjEtXFx0fSBlbHNlIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYzo3MjI6XFx0XFx0aWYgKGJwZl9za2JfY2hhbmdlX3RhaWwoY3R4LCBuZXdfcGt0X3NpemUsIDApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jLTcyMy1cXHRcXHRcXHRyZXR1cm4gWERQX0FCT1JURUQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYz03NTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgc3luY29va2llX3BhcnQxKHZvaWQgKmN0eCwgdm9pZCAqZGF0YSwgdm9pZCAqZGF0YV9lbmQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX3N5bnByb3h5X2tlcm4uYy03NzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9zeW5wcm94eV9rZXJuLmM6NzgwOlxcdFxcdGlmIChicGZfc2tiX2NoYW5nZV90YWlsKGN0eCwgb2xkX2xlbiArIFRDUF9NQVhMRU4gLSBoZHItXFx1MDAzZXRjcF9sZW4sIDApKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfc3lucHJveHlfa2Vybi5jLTc4MS1cXHRcXHRcXHRyZXR1cm4gWERQX0FCT1JURUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjMyLjUyMzkxOTM3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgyNjk5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMgZm9yIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNwZWNpZmljYWxseSBmb3IgdGhlIGBicGZfc2tiX2NoYW5nZV90YWlsYCBhbmQgYHNrX3NrYl9jaGFuZ2VfdGFpbGAgZnVuY3Rpb25zLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSB3aGF0IGtlcm5lbCBjb25maWcgb3B0aW9ucyBhcmUgKnJlcXVpcmVkKiB0byBlbmFibGUgb3IgYnVpbGQgdGhlc2UgZnVuY3Rpb25hbGl0aWVzLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgZm9yIHRoaXMgaW5mbyBhcmUgdGhlIG1ha2VmaWxlcyBvciBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmtpbmcgY29yZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgZmlyc3QsIHRoYXQncyBhbG1vc3QgYWx3YXlzIGEgcmVsaWFibGUgcGxhY2UgdG8gZ2V0IGNsdWVzIGFib3V0IGRlcGVuZGVuY2llcy4gSWYgSSBkb24ndCBmaW5kIHRoZSBhbnN3ZXJzIGltbWVkaWF0ZWx5IHRoZXJlLCBJIHNob3VsZCBjaGVjayB0aGUgY29ycmVzcG9uZGluZyBLY29uZmlnIGZpbGVzLCBzdWNoIGFzIGBuZXQvS2NvbmZpZ2AsIGBpbml0L0tjb25maWdgLCBvciBwb3RlbnRpYWxseSBldmVuIGBrZXJuZWwvYnBmL0tjb25maWdgLCBzaW5jZSBCUEYgaXMsIGFmdGVyIGFsbCwgZnVuZGFtZW50YWxseSBpbnZvbHZlZC4gSXQncyBhIHN5c3RlbWF0aWMgYXBwcm9hY2ggLSBsb29rIGZvciB0aGUgb2J2aW91cyBhbmQgdGhlbiBkcmlsbCBkb3duIGFzIG5lZWRlZC4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODQzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6MzUuMDA2NjIxOTg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIxMjM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWx0ZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZToxMzpcXHRcXHRcXHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy04Ny0gKlxcbm5ldC9jb3JlL3BrdGdlbi5jOjg4OiAqIFJlbW92ZSBpZiBmaXggZnJvbSBhZGRlZCBIYXJhbGQgV2VsdGUgXFx1MDAzY2xhZm9yZ2VAbmV0ZmlsdGVyLm9yZ1xcdTAwM2UgMDQwNDE5XFxubmV0L2NvcmUvcGt0Z2VuLmMtODktICogaWE2NCBjb21waWxhdGlvbiBmaXggZnJvbSAgQXJvbiBHcmlmZmlzIFxcdTAwM2Nhcm9uQGhwLmNvbVxcdTAwM2UgMDQwNjA0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjM1LjA1NDg0MTQzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTk1MDkyMTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldHdvcmsgRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCBidWlsZHMgdGhlIG5ldHdvcmsgZmlsdGVyaW5nIG9iamVjdCwgc3BlY2lmaWNhbGx5IGBuZXQvY29yZS9maWx0ZXIub2AuIFRoZSBNYWtlZmlsZSBpbmRpY2F0ZXMgdGhhdCBpdCdzIGluY2x1ZGVkIHVzaW5nIGBvYmoteWAgd2l0aGluIGBuZXQvY29yZS9NYWtlZmlsZWAsIHdoaWNoIG1lYW5zIGl0J3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IGlmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGluY2x1ZGVkLiBUaGF0IHBhcmVudCBkaXJlY3RvcnkgaXMgY29uZGl0aW9uZWQgb24gYENPTkZJR19ORVRgLiBHb3QgaXQuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IEJQRiBzeXNjYWxsIHN1cHBvcnQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIElzIGl0IGNvbmRpdGlvbmFsIGJhc2VkIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGRpcmVjdGx5LCBvciBkb2VzIGl0IGFsc28gZGVwZW5kIG9uIHRoZSBvdmVyYXJjaGluZyBgQ09ORklHX05FVGAgY29uZmlndXJhdGlvbj8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyB0byBrbm93IGZvciBzdXJlLiBJdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgYmUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2Agc291cmNlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcywgbGlrZSBgI2lmZGVmIENPTkZJR18uLi5gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgZnVuY3Rpb24sIGFuZCBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgQlBGIHN1cHBvcnQgb3IgZXZlbiB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YWNrIG1pZ2h0IGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo0MC4yNDk5MzU2NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzUwMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NDk1PXN0YXRpYyBib29sIGNvbnZlcnRfYnBmX2xkX2FicyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKippbnNucClcXG5uZXQvY29yZS9maWx0ZXIuYy00OTYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ5NzpcXHRjb25zdCBib29sIHVuYWxpZ25lZF9vayA9IElTX0JVSUxUSU4oQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ5OC1cXHRpbnQgc2l6ZSA9IGJwZl9zaXplX3RvX2J5dGVzKEJQRl9TSVpFKGZwLVxcdTAwM2Vjb2RlKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xNjgxPXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3RyeV9tYWtlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xNjgzLXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxNjg0OiNpZmRlZiBDT05GSUdfREVCVUdfTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtMTY4NS1cXHQvKiBBdm9pZCBhIHNwbGF0IGluIHBza2JfbWF5X3B1bGxfcmVhc29uKCkgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIyMDc9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjIxNS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMjE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTctc3RhdGljIGludCBicGZfb3V0X25laWdoX3Y2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIzMTM9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMxOC19XFxubmV0L2NvcmUvZmlsdGVyLmM6MjMxOTojZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjQyND1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDI5LX1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MzEtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0zMTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX21zZ19wb3BfZGF0YV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MzE5MzojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTMxOTQtQlBGX0NBTExfMChicGZfZ2V0X2Nncm91cF9jbGFzc2lkX2N1cnIpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTMzPUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9kb19mbHVzaCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDUzNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0NTM1OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ORVQpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MzYtdm9pZCB4ZHBfZG9fY2hlY2tfZmx1c2hlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz01MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl91bmRlcl9jZ3JvdXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy01MTc5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjUxODA6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXFxubmV0L2NvcmUvZmlsdGVyLmMtNTE4MS1zdGF0aWMgaW5saW5lIHU2NCBfX2JwZl9za19jZ3JvdXBfaWQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NTc3Nj1zdGF0aWMgaW50IF9fYnBmX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4My1cXHRcXHRyZXR1cm4gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg0OlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9JUClcXG5uZXQvY29yZS9maWx0ZXIuYy01Nzg1LVxcdFxcdHJldHVybiBzb2xfaXBfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCBmYWxzZSk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NTc4NjpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBsZXZlbCA9PSBTT0xfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy01Nzg3LVxcdFxcdHJldHVybiBzb2xfaXB2Nl9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1Nzg4OlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1ApXFxubmV0L2NvcmUvZmlsdGVyLmMtNTc4OS1cXHRcXHRyZXR1cm4gc29sX3RjcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTU4MDc9c3RhdGljIGludCBfX2JwZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTU4MTgtXFx0XFx0ZXJyID0gc29sX3NvY2tldF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MTk6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX1RDUClcXG5uZXQvY29yZS9maWx0ZXIuYy01ODIwLVxcdFxcdGVyciA9IHNvbF90Y3Bfc29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBcXHUwMDI2b3B0bGVuLCB0cnVlKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo1ODIxOlxcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9JUClcXG5uZXQvY29yZS9maWx0ZXIuYy01ODIyLVxcdFxcdGVyciA9IHNvbF9pcF9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjU4MjM6XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXFx1MDAyNlxcdTAwMjYgbGV2ZWwgPT0gU09MX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNTgyNC1cXHRcXHRlcnIgPSBzb2xfaXB2Nl9zb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIFxcdTAwMjZvcHRsZW4sIHRydWUpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjEzNT1CUEZfQ0FMTF81KGJwZl9zb2NrX29wc19nZXRzb2Nrb3B0LCBzdHJ1Y3QgYnBmX3NvY2tfb3BzX2tlcm4gKiwgYnBmX3NvY2ssXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MTQwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYxNDE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lORVQpIFxcdTAwMjZcXHUwMDI2IGxldmVsID09IFNPTF9UQ1AgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9maWx0ZXIuYy02MTQyLVxcdCAgICBvcHRuYW1lIFxcdTAwM2U9IFRDUF9CUEZfU1lOIFxcdTAwMjZcXHUwMDI2IG9wdG5hbWUgXFx1MDAzYz0gVENQX0JQRl9TWU5fTUFDKSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MTc3PUJQRl9DQUxMXzIoYnBmX3NvY2tfb3BzX2NiX2ZsYWdzX3NldCwgc3RydWN0IGJwZl9zb2NrX29wc19rZXJuICosIGJwZl9zb2NrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjE4NS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MTg2OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgIXNrX2Z1bGxzb2NrKHNrKSlcXG5uZXQvY29yZS9maWx0ZXIuYy02MTg3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMj1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjA0LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA1OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDYtXFx0c3RydWN0IHNvY2sgKnNrID0gY3R4LVxcdTAwM2VzaztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMTgtXFx0XFx0cmV0dXJuIF9faW5ldF9iaW5kKHNrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyLCBhZGRyX2xlbiwgZmxhZ3MpO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyMC1cXHR9IGVsc2UgaWYgKGFkZHItXFx1MDAzZXNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIyNy1cXHRcXHRcXHRcXHQgICAgYWRkcl9sZW4sIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjI4OiNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMjktXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyMzA6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNjIzMS1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyMzU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfYmluZF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NDojaWZkZWYgQ09ORklHX1hGUk1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjQ1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYyNDY6I2lmIChJU19CVUlMVElOKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB8fCBcXFxcXFxubmV0L2NvcmUvZmlsdGVyLmM6NjI0NzogICAgKElTX01PRFVMRShDT05GSUdfWEZSTV9JTlRFUkZBQ0UpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyNDgtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NjI5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02MzAwLXN0YXRpYyBpbnQgYnBmX2ZpYl9zZXRfZndkX3BhcmFtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjMwNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19WTEFOXzgwMjFRKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDgtXFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GSUJfTE9PS1VQX1ZMQU4pIFxcdTAwMjZcXHUwMDI2IGlzX3ZsYW5fZGV2KGRldikpIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYzMjk9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicGZfZmliX3ZsYW5faW5wdXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MzQ4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjYzNDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM1MC1zdGF0aWMgaW50IGJwZl9pcHY0X2ZpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX2ZpYl9sb29rdXAgKnBhcmFtcyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY0ODctXFx0XFx0XFx0XFx0XFx0XFx0ICAoX19mb3JjZSB1MzIpcGFyYW1zLVxcdTAwM2VpcHY0X2RzdCk7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjQ4ODpcXHRlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSlcXG5uZXQvY29yZS9maWx0ZXIuYy02NDg5LVxcdFxcdG5laWdoID0gX19pcHY2X25laWdoX2xvb2t1cF9ub3JlZihkZXYsIHBhcmFtcy1cXHUwMDNlaXB2Nl9kc3QpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjUwMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo2NTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY1MDItc3RhdGljIGludCBicGZfaXB2Nl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjcxPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjY4MC1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NjgyLVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY2ODUtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy02Njg3LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NzA1PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02NzI0LVxcdHN3aXRjaCAocGFyYW1zLVxcdTAwM2VmYW1pbHkpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjYtXFx0Y2FzZSBBRl9JTkVUOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjcyOS0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo2NzMwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MzEtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfeGRwX2NoZWNrX210dV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY4NzctXFxubmV0L2NvcmUvZmlsdGVyLmM6Njg3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02ODc5LXN0YXRpYyBpbnQgYnBmX3B1c2hfc2VnNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHlwZSwgdm9pZCAqaGRyLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkxMC19XFxubmV0L2NvcmUvZmlsdGVyLmM6NjkxMTojZW5kaWYgLyogQ09ORklHX0lQVjZfU0VHNl9CUEYgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy02OTEyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTE0LXN0YXRpYyBpbnQgYnBmX3B1c2hfaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqaGRyLCB1MzIgbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjkyMT1CUEZfQ0FMTF80KGJwZl9sd3RfaW5fcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsIHZvaWQgKiwgaGRyLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjkyNC1cXHRzd2l0Y2ggKHR5cGUpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTI1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X1NFRzZfQlBGKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5MjYtXFx0Y2FzZSBCUEZfTFdUX0VOQ0FQX1NFRzY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTI5LSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjY5MzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTMxLVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5Mzk9QlBGX0NBTExfNChicGZfbHd0X3htaXRfcHVzaF9lbmNhcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02OTQyLVxcdHN3aXRjaCAodHlwZSkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY5NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0xXVFVOTkVMX0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTQ0LVxcdGNhc2UgQlBGX0xXVF9FTkNBUF9JUDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY5NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3htaXRfcHVzaF9lbmNhcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5NzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6Njk3MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy02OTczLUJQRl9DQUxMXzQoYnBmX2x3dF9zZWc2X3N0b3JlX2J5dGVzLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsIHUzMiwgb2Zmc2V0LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzE1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2My19O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNjQ6I2VuZGlmIC8qIENPTkZJR19JUFY2X1NFRzZfQlBGICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2NS1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY2OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjctc3RhdGljIHN0cnVjdCBzb2NrICpza19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgZGlmLCBzZGlmLCBOVUxMKTtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxODctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc4Mzk9QlBGX0NBTExfNShicGZfdGNwX2NoZWNrX3N5bmNvb2tpZSwgc3RydWN0IHNvY2sgKiwgc2ssIHZvaWQgKiwgaXBoLCB1MzIsIGlwaF9sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03ODQxLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3ODQyOiNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcXG5uZXQvY29yZS9maWx0ZXIuYy03ODQzLVxcdGludCByZXQ7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03ODc0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc4NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg3Ni1cXHRjYXNlIDY6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03ODg0LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjc4ODU6I2VuZGlmIC8qIENPTkZJR19JUFY2ICovXFxubmV0L2NvcmUvZmlsdGVyLmMtNzg4Ni1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTc5MTI9QlBGX0NBTExfNShicGZfdGNwX2dlbl9zeW5jb29raWUsIHN0cnVjdCBzb2NrICosIHNrLCB2b2lkICosIGlwaCwgdTMyLCBpcGhfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzkxNC17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzkxNTojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtNzkxNi1cXHR1MzIgY29va2llO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzk0NC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3OTQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NDYtXFx0Y2FzZSA2Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzk1NC1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYzo3OTU1OiNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTc5NTYtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03OTY1LVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5uZXQvY29yZS9maWx0ZXIuYzo3OTY2OiNlbmRpZiAvKiBDT05GSUdfU1lOX0NPT0tJRVMgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy03OTY3LX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTgyNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX3NldF90c3RhbXBfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MjgwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjgyODE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgyODItQlBGX0NBTExfMyhicGZfdGNwX3Jhd19nZW5fc3luY29va2llX2lwdjQsIHN0cnVjdCBpcGhkciAqLCBpcGgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MzA4PUJQRl9DQUxMXzMoYnBmX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY2LCBzdHJ1Y3QgaXB2NmhkciAqLCBpcGgsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04MzEwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzExOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMTItXFx0Y29uc3QgdTE2IG1zc19jbGFtcCA9IElQVjZfTUlOX01UVSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04MzYwPUJQRl9DQUxMXzIoYnBmX3RjcF9yYXdfY2hlY2tfc3luY29va2llX2lwdjYsIHN0cnVjdCBpcHY2aGRyICosIGlwaCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzNjIte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgzNjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtODM2NC1cXHRpZiAoX19jb29raWVfdjZfY2hlY2soaXBoLCB0aCkgXFx1MDAzZSAwKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODM3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3BfcmF3X2NoZWNrX3N5bmNvb2tpZV9pcHY2X3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODM4Mi19O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjgzODM6I2VuZGlmIC8qIENPTkZJR19TWU5fQ09PS0lFUyAqL1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgzODQtXFxubmV0L2NvcmUvZmlsdGVyLmM6ODM4NTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04Mzg2LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mz1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODUtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZXZlbnRfb3V0cHV0X2RhdGFfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ4NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NDg3LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0OTQtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc29ja19hZGRyX3NrY19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0OTU6I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxubmV0L2NvcmUvZmlsdGVyLmMtODQ5Ni1cXHRjYXNlIEJQRl9GVU5DX3NrX3N0b3JhZ2VfZ2V0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU3Mj1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1ODgtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2V2ZW50X291dHB1dF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTg5OiNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTAtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2lkOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU5OC0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTk5OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MDAtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzAzLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MDQ6I2lmZGVmIENPTkZJR19YRlJNXFxubmV0L2NvcmUvZmlsdGVyLmMtODcwNS1cXHRjYXNlIEJQRl9GVU5DX3NrYl9nZXRfeGZybV9zdGF0ZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDctI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODcwODojaWZkZWYgQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MDktXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2dyb3VwX2NsYXNzaWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzExLSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTI6I2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXFxubmV0L2NvcmUvZmlsdGVyLmMtODcxMy1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jZ3JvdXBfaWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzE3LSNlbmRpZlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTg6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODcxOS1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NzQwLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9zZXRfdHN0YW1wX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3NDE6I2lmZGVmIENPTkZJR19TWU5fQ09PS0lFU1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg3NDItXFx0Y2FzZSBCUEZfRlVOQ190Y3BfcmF3X2dlbl9zeW5jb29raWVfaXB2NDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg3NTg9eGRwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9jaGVja19tdHVfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4NzojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg4LVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3OTktXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfdGNwX2dlbl9zeW5jb29raWVfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODgwMDojaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L2NvcmUvZmlsdGVyLmMtODgwMS1cXHRjYXNlIEJQRl9GVU5DX3RjcF9yYXdfZ2VuX3N5bmNvb2tpZV9pcHY0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODgxNC1cXG5uZXQvY29yZS9maWx0ZXIuYzo4ODE1OiNpZiBJU19NT0RVTEUoQ09ORklHX05GX0NPTk5UUkFDSykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUylcXG5uZXQvY29yZS9maWx0ZXIuYy04ODE2LVxcdC8qIFRoZSBuZl9jb25uX19faW5pdCB0eXBlIGlzIHVzZWQgaW4gdGhlIE5GX0NPTk5UUkFDSyBrZnVuY3MuIFRoZVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODgzMz1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2MS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfbmV0bnNfY29va2llX3NvY2tfb3BzX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjI6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2My1cXHRjYXNlIEJQRl9GVU5DX2xvYWRfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg4NzAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfdGNwX3NvY2tfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODg3MTojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy04ODcyLVxcdGRlZmF1bHQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04OTE1PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODkzOS1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfZXZlbnRfb3V0cHV0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg5NDA6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODk0MS1cXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDQ0PWx3dF9zZWc2bG9jYWxfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTkwNDYtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6OTA0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9TRUc2X0JQRilcXG5uZXQvY29yZS9maWx0ZXIuYy05MDQ4LVxcdGNhc2UgQlBGX0ZVTkNfbHd0X3NlZzZfc3RvcmVfYnl0ZXM6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05OTY0PXN0YXRpYyBzdHJ1Y3QgYnBmX2luc24gKmJwZl9jb252ZXJ0X3RzdGFtcF9yZWFkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTk5NzAtXFxubmV0L2NvcmUvZmlsdGVyLmM6OTk3MTojaWZkZWYgQ09ORklHX05FVF9YR1JFU1NcXG5uZXQvY29yZS9maWx0ZXIuYy05OTcyLVxcdC8qIElmIHRoZSB0c3RhbXBfdHlwZSBpcyByZWFkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9OTk5OT1zdGF0aWMgc3RydWN0IGJwZl9pbnNuICpicGZfY29udmVydF90c3RhbXBfd3JpdGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAwMDUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTAwMDY6I2lmZGVmIENPTkZJR19ORVRfWEdSRVNTXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAwMDctXFx0LyogSWYgdGhlIHRzdGFtcF90eXBlIGlzIHJlYWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMDAzNz1zdGF0aWMgdTMyIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjEwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgdGNfaW5kZXgpOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwMjExOiNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMTItXFx0XFx0aWYgKHR5cGUgPT0gQlBGX1dSSVRFKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyMjktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgX19za19idWZmLCBuYXBpX2lkKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMDIzMDojaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDIzMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwMjc2LVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IF9fc2tfYnVmZiwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyNzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyNzgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDI5Ni1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBfX3NrX2J1ZmYsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTAyOTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTAyOTgtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMDQwMz11MzIgYnBmX3NvY2tfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDQ5Mi1cXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NvY2ssIHNyY19pcDZbMF0sIHNyY19pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNDkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNDk0LVxcdFxcdG9mZiA9IHNpLVxcdTAwM2VvZmY7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDUxMC1cXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NvY2ssIGRzdF9pcDZbMF0sIGRzdF9pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjEwNTExOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEwNTEyLVxcdFxcdG9mZiA9IHNpLVxcdTAwM2VvZmY7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU1Ni1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc29jaywgcnhfcXVldWVfbWFwcGluZyk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTA1NTc6I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcXG5uZXQvY29yZS9maWx0ZXIuYy0xMDU1OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMDgxNT1zdGF0aWMgdTMyIHNvY2tfb3BzX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEwMjAtXFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NvY2tfb3BzLCByZW1vdGVfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTAyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTAyMi1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExMDQxLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9zb2NrX29wcywgbG9jYWxfaXA2WzNdKTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTA0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTA0My1cXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxkKHN0cnVjdCBzb2NrX2NvbW1vbixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExMzUwPXN0YXRpYyB1MzIgc2tfbXNnX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTUtXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTEzNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTEzNTctXFx0aW50IG9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNDEwLVxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX21zZ19tZCwgcmVtb3RlX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MTItXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTQzMS1cXHQgICAgIG9mZnNldG9mKHN0cnVjdCBza19tc2dfbWQsIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE0MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE0MzMtXFx0XFx0QlVJTERfQlVHX09OKHNpemVvZl9maWVsZChzdHJ1Y3Qgc29ja19jb21tb24sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY1NT1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTY5ODojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY5OS1zdGF0aWMgdm9pZCBicGZfaW5pdF9yZXVzZXBvcnRfa2VybihzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKnJldXNlX2tlcm4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjA3Nj1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTE1LVxcdFxcdFxcdFxcdHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOiB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxMTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIxMTctXFx0XFx0aW50IG9mZiA9IHNpLVxcdTAwM2VvZmY7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjEzMS1cXHRcXHRcXHRcXHRsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjEzMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjEzMy1cXHRcXHRpbnQgb2ZmID0gc2ktXFx1MDAzZW9mZjtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMTc3PWNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjE4MzojZW5kaWYgLyogQ09ORklHX0lORVQgKi9cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjE4NC1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjM0PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzNi1cXHQvKiBCVEYgdHlwZXMgZm9yIHRjcF90aW1ld2FpdF9zb2NrIGFuZCBpbmV0X3RpbWV3YWl0X3NvY2sgYXJlIG5vdFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjM3OlxcdCAqIGdlbmVyYXRlZCBpZiBDT05GSUdfSU5FVD1uLiBUcmlnZ2VyIGFuIGV4cGxpY2l0IGdlbmVyYXRpb24gaGVyZS5cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjIzOC1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjQyOiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQzLVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0OC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2Mz1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIyNjQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMjY1OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY2LVxcdGlmIChzayBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwX3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI3MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI3MS1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjUwND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrX2Fzc2lnbl90Y3BfcmVxc2soc3RydWN0IF9fc2tfYnVmZiAqcywgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI1MDYte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19TWU5fQ09PS0lFUylcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjUwOC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopcztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTMyLVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjEyNTMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNTM0LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0xMjczMz1fX2JwZl9rZnVuYyBpbnQgYnBmX2ljbXBfc2VuZChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LCBpbnQgdHlwZSwgaW50IGNvZGUpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0Ni1cXHRzd2l0Y2ggKHNrYi1cXHUwMDNlcHJvdG9jb2wpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjc0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0OC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjYtI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NjgtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo0MC4yOTcyOTgyMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTE1OTQ5NzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGVCUEYgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAgYW5kIGBza19za2JfY2hhbmdlX3RhaWxgIGFyZSBtYWRlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGVCUEYgZWNvc3lzdGVtLiBGaXJzdCwgYGJwZl9za2JfY2hhbmdlX3RhaWxgIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgdGNfY2xzX2FjdF9mdW5jX3Byb3RvYCBhbmQgYGx3dF94bWl0X2Z1bmNfcHJvdG9gLCB3aGljaCBtZWFucyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfTkVUX0NMU19BQ1RgIGFuZCBgQ09ORklHX0xXVFVOTkVMX0JQRmAsIHJlc3BlY3RpdmVseS4gR290IGl0LiBUaGF0IG1ha2VzIHNlbnNlIGZvciB0cmFmZmljIGNvbnRyb2wgYW5kIGxpZ2h0d2VpZ2h0IHR1bm5lbGluZywgc28gZmFyIHNvIGdvb2QuIFRoZW4gd2UgaGF2ZSBgc2tfc2tiX2NoYW5nZV90YWlsYCwgd2hpY2ggaXMgZXhwb3NlZCB2aWEgYHNrX3NrYl9mdW5jX3Byb3RvYC4gVGhpcyBvbmUgcmVxdWlyZXMgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCB0aGUgbW9yZSBnZW5lcmFsIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfTkVUYC4gSXQncyBhbHNvIGV4cG9zZWQgd2l0aCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYCwgd2hpY2ggaXMgcHJldHR5IGJyb2FkLiBOb3cgSSBuZWVkIHRvIGRyaWxsIGRvd24sIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBmdW5jdGlvbiBwcm90b3MgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCB0byBzZWUgaG93IHRob3NlIGFyZSBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTk4LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjQ1LjQ1Njc5NzYwOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDgxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90b3xza19za2JfY2hhbmdlX3RhaWxfcHJvdG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9NDAyOD1CUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDAzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo0MDM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9jaGFuZ2VfdGFpbF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYy00MDM4LVxcdC5mdW5jXFx0XFx0PSBicGZfc2tiX2NoYW5nZV90YWlsLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDA0Nj1CUEZfQ0FMTF8zKHNrX3NrYl9jaGFuZ2VfdGFpbCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIG5ld19sZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00MDUxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjQwNTI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBza19za2JfY2hhbmdlX3RhaWxfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDA1My1cXHQuZnVuY1xcdFxcdD0gc2tfc2tiX2NoYW5nZV90YWlsLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMT10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04NjU2LVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2NTc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2NTgtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04OTE1PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODkyNC1cXHRjYXNlIEJQRl9GVU5DX3NrYl9jaGFuZ2VfdGFpbDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4OTI1OlxcdFxcdHJldHVybiBcXHUwMDI2c2tfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg5MjYtXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz05MDA1PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy05MDIwLVxcdGNhc2UgQlBGX0ZVTkNfc2tiX2NoYW5nZV90YWlsOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjkwMjE6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2NoYW5nZV90YWlsX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTkwMjItXFx0Y2FzZSBCUEZfRlVOQ19za2JfY2hhbmdlX2hlYWQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjQ1LjUwNDg1MjQ1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzA2ODgyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRyYWZmaWMgQ29udHJvbCBGdW5jdGlvbiBQcm90b3R5cGVzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgc29tZXRoaW5nIG91dCB3aXRoIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLCBhbmQgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdG8gY2hlY2sgZm9yIHNvbWUgYGlmZGVmYCBkaXJlY3RpdmVzIHRoYXQgY291bGQgYmUgYWZmZWN0aW5nIGl0cyBiZWhhdmlvci4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYXJvdW5kIGxpbmUgODYyMCBpbiB0aGUgYG5ldC9jb3JlL2ZpbHRlci5jYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGxvY2F0aW9uLCBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgaXRzIGxpa2VseSByb2xlIGluIHRyYWZmaWMgY29udHJvbC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBzcG90IGFueSBjb21waWxlLXRpbWUgZmxhZ3MgYWZmZWN0aW5nIGl0LiBJJ20gaG9waW5nIHRvIGZpbmQgY2x1ZXMgdGhlcmUgdGhhdCB3aWxsIHNoZWQgbGlnaHQgb24gd2hhdCBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjQ4LjIxMTczODUxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDU5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODYxNTpcXHRcXHRkZWZhdWx0Olxcbjg2MTY6XFx0XFx0XFx0cmV0dXJuIHNrX2ZpbHRlcl9mdW5jX3Byb3RvKGZ1bmNfaWQsIHByb2cpO1xcbjg2MTc6XFx0XFx0fVxcbjg2MTg6XFx0fVxcbjg2MTk6XFx0XFxuODYyMDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICpcXG44NjIxOlxcdHRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG44NjIyOlxcdHtcXG44NjIzOlxcdFxcdHN3aXRjaCAoZnVuY19pZCkge1xcbjg2MjQ6XFx0XFx0Y2FzZSBCUEZfRlVOQ19za2Jfc3RvcmVfYnl0ZXM6XFxuODYyNTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2Jfc3RvcmVfYnl0ZXNfcHJvdG87XFxuODYyNjpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxcbjg2Mjc6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcHJvdG87XFxuODYyODpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzX3JlbGF0aXZlOlxcbjg2Mjk6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tiX2xvYWRfYnl0ZXNfcmVsYXRpdmVfcHJvdG87XFxuODYzMDpcXHRcXHRjYXNlIEJQRl9GVU5DX3NrYl9wdWxsX2RhdGE6XFxuODYzMTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za2JfcHVsbF9kYXRhX3Byb3RvO1xcbjg2MzI6XFx0XFx0Y2FzZSBCUEZfRlVOQ19jc3VtX2RpZmY6XFxuODYzMzpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9jc3VtX2RpZmZfcHJvdG87XFxuODYzNDpcXHRcXHRjYXNlIEJQRl9GVU5DX2NzdW1fdXBkYXRlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo0OC4yMTIxNDcyNjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NTc3NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHRjX2Nsc19hY3RfZnVuY19wcm90b2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB0Y19jbHNfYWN0X2Z1bmNfcHJvdG9gLiBUaGUgbW9zdCBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gc2VlICp3aGVyZSogdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGNydWNpYWwuIEtub3dpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggYHRjX2Nsc19hY3RfZnVuY19wcm90b2AgaXMgZW1wbG95ZWQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgZnJvbSBpdHMgcHVycG9zZSB0byBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aG9zZSByZWZlcmVuY2VzLiBJdCdzIHRoZSBvbmx5IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo1MC4xOTc5MjM5ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTAwOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2Nsc19hY3RfZnVuY19wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz04NjIwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MjE6dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjIte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE1MDM9Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgdGNfY2xzX2FjdF92ZXJpZmllcl9vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE1MDQ6XFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSB0Y19jbHNfYWN0X2Z1bmNfcHJvdG8sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1MDUtXFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gdGNfY2xzX2FjdF9pc192YWxpZF9hY2Nlc3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjUwLjI0NDAzMTAyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUyMDY2ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRjX2Nsc19hY3QgVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIGB0Y19jbHNfYWN0YCB2ZXJpZmllciBvcGVyYXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBCUEYgcHJvZ3JhbSB0eXBlcyBhcmUgZGVmaW5lZC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbnMgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgcHJvZ3JhbSB0eXBlcywgYW5kIHRoZXJlIHRoZXkgYXJlOiBgQlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgLi4uKWAgYW5kIGBCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQUNULCAuLi4pYCBzcGVjaWZpY2FsbHkuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIHRoZXNlIHR5cGVzIHNob3VsZCByZXF1aXJlIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQuIEkgc2VlIHRoYXQgYENPTkZJR19ORVRfQ0xTX0FDVGAgYW5kIGVpdGhlciBgQ09ORklHX05FVF9TQ0hFRGAgb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAgKG9yIHBvc3NpYmx5IGJvdGgpIGFyZSB3aGF0IEknbSBsb29raW5nIGZvci5cblxuTm93IHRoYXQgSSBoYXZlIHRoZSBiYXNpYyBsYXkgb2YgdGhlIGxhbmQsIGl0J3MgYmFjayB0byBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgb24gdGhvc2UgY29uZmlndXJhdGlvbnMgZm9yIHRoZXNlIGB0Y19jbHNfYWN0YCBwcm9ncmFtIHR5cGVzLiBJIG5lZWQgdG8gYmUgZXhhY3QgaGVyZSwgdGhlcmUgbWF5IGJlIHNvbWUgc3VidGxldHkgaW4gdGhlIGRlZmluaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTM6NTMuNDk2MTAwMTYyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM1MTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19jbHNfYWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD01PUJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9TT0NLRVRfRklMVEVSLCBza19maWx0ZXIsXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC02LVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6NzpCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTLCB0Y19jbHNfYWN0LFxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtOC1cXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjk6QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgdGNfY2xzX2FjdCxcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEwLVxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo1My41NDM0NTcxNjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE5MTM3NDE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCBjb25zaWRlcmF0aW9uczpcblxuKipCUEYgVHlwZSBFeHBsb3JhdGlvbjogYE5FVF9DTFNfQUNUYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYE5FVF9DTFNfQUNUYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCBpdHMgZGVjbGFyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBzb3VyY2UgY29kZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgZGVmaW5lZCBpbiBvbmUgb2YgdGhlIGNvcmUgQlBGIGhlYWRlciBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gYmV0dGluZyBpdCdsbCBiZSBpbiBgaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaGAuIFRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgZnVuZGFtZW50YWwgQlBGIGRhdGEgc3RydWN0dXJlcyBhbmQgdHlwZSBkZWZpbml0aW9ucyByZXNpZGUuXG5cbkxldCBtZSB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDcuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHR5cGljYWwgbGF5b3V0IGFuZCBob3cgdGhlc2UgdHlwZXMgYXJlIG9mdGVuIGdyb3VwZWQuIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0aXZlbHkgY29uY2lzZSAtIHByb2JhYmx5IGEgbWFjcm8gb3IgYW4gZW51bWVyYXRpb24gLSBkZWZpbmluZyB0aGlzIHBhcnRpY3VsYXIgQlBGIGNsYXNzaWZpZXIgYWN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlLCBpdHMgZXhwZWN0ZWQgdXNhZ2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSB0eXBlcyBvciBjb25zdGFudHMuIFdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiBlQlBGIGludGVybmFscywgSSBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcm9sZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgQlBGIGNvbXBvbmVudHMuIE5vdyBsZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAxMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjUzOjU2LjczNDgzMzYyM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdC8qIGludGVybmFsIGZpbGUgLSBkbyBub3QgaW5jbHVkZSBkaXJlY3RseSAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaWZkZWYgQ09ORklHX05FVFxcbiAgIDU6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NPQ0tFVF9GSUxURVIsIHNrX2ZpbHRlcixcXG4gICA2OlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgIDc6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0NMUywgdGNfY2xzX2FjdCxcXG4gICA4OlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgIDk6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1NDSEVEX0FDVCwgdGNfY2xzX2FjdCxcXG4gIDEwOlxcdFxcdCAgICAgIHN0cnVjdCBfX3NrX2J1ZmYsIHN0cnVjdCBza19idWZmKVxcbiAgMTE6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX1hEUCwgeGRwLFxcbiAgMTI6XFx0XFx0ICAgICAgc3RydWN0IHhkcF9tZCwgc3RydWN0IHhkcF9idWZmKVxcbiAgMTM6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBfQlBGXFxuICAxNDpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiwgY2dfc2tiLFxcbiAgMTU6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAxNjpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NPQ0ssIGNnX3NvY2ssXFxuICAxNzpcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3NvY2ssIHN0cnVjdCBzb2NrKVxcbiAgMTg6XFx0QlBGX1BST0dfVFlQRShCUEZfUFJPR19UWVBFX0NHUk9VUF9TT0NLX0FERFIsIGNnX3NvY2tfYWRkcixcXG4gIDE5OlxcdFxcdCAgICAgIHN0cnVjdCBicGZfc29ja19hZGRyLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuKVxcbiAgMjA6XFx0I2VuZGlmXFxuICAyMTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX0lOLCBsd3RfaW4sXFxuICAyMjpcXHRcXHQgICAgICBzdHJ1Y3QgX19za19idWZmLCBzdHJ1Y3Qgc2tfYnVmZilcXG4gIDIzOlxcdEJQRl9QUk9HX1RZUEUoQlBGX1BST0dfVFlQRV9MV1RfT1VULCBsd3Rfb3V0LFxcbiAgMjQ6XFx0XFx0ICAgICAgc3RydWN0IF9fc2tfYnVmZiwgc3RydWN0IHNrX2J1ZmYpXFxuICAyNTpcXHRCUEZfUFJPR19UWVBFKEJQRl9QUk9HX1RZUEVfTFdUX1hNSVQsIGx3dF94bWl0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1Mzo1Ni43MzQ5Mjc5MjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzOTc4ODYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBDT05GSUdfTkVUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBvZiBjb3Vyc2UgYENPTkZJR19CUEZgIGFyZSBhbGwgYWN0aXZlLCBtZWFuaW5nIHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIEJQRiBwcm9ncmFtcyByZWxhdGVkIHRvIHRyYWZmaWMgY29udHJvbCAoYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCAvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0FDVGApIGF2YWlsYWJsZS4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaC5cblxuTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBgYnBmX3NrYl90cmltX3Jjc3VtYCwgYW5kIGBfX2JwZl9za2JfbWluX2xlbmAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRob3NlIGxhc3QgdHdvIG1pZ2h0IGJlIGlubGluZWQuIEFoLCB5ZXMsIGBfX2JwZl9za2JfbWluX2xlbmAgaXMgYSBzdGF0aWMgYHUzMmAg4oCTIHBvdGVudGlhbGx5IGlubGluZWQg4oCTIGFuZCBgYnBmX3NrYl90cmltX3Jjc3VtYCBpcyBhIHN0YXRpYyBgaW50YCwgc28gcHJvYmFibHkgaW5saW5lZCB0b28uIFRoZSBvdGhlcnMgYXJlIG5vbi1zdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gSSBzaG91bGQgaW5jbHVkZSBhbGwgdGhvc2Ugc3ltYm9scyBmb3IgZ29vZCBtZWFzdXJlLlxuXG5Ob3csIGEgZmluYWwgdmVyaWZpY2F0aW9uIG9mIHRoZSBgc2V0LXJlc3VsdHNgIGRhdGE6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBBYnNvbHV0ZWx5IVxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBTS0IgKFNvY2tldCBCdWZmZXIpIHRyaW1taW5nIGxvZ2ljLCBuYW1lbHkgYGJwZl9za2JfdHJpbV9yY3N1bWAgYW5kIGBfX2JwZl9za2JfbWluX2xlbmAuIFRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBpbnZvbHZlIHJlc2V0dGluZyBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gdHJpbW1pbmcgcGFzdCB0aGUgY2hlY2tzdW0gb2Zmc2V0IGZvciBwYXJ0aWFsIGNoZWNrc3VtIHBhY2tldHMgYW5kIHJlbW92ZXMgdGhlIGNoZWNrc3VtIG9mZnNldCByZXN0cmljdGlvbi4gVGhpcyBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIGhvdyBCUEYgaGVscGVycyBtYW5pcHVsYXRlIFNLQnMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCwgYHNrX3NrYl9jaGFuZ2VfdGFpbGApIGFuZCB0aGUgaGFuZGxpbmcgb2YgY2hlY2tzdW1zIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gR2l2ZW4gdGhlIHJlYWNoYWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIGBza19za2JfY2hhbmdlX3RhaWxgLCBgYnBmX3NrYl90cmltX3Jjc3VtYCwgYF9fYnBmX3NrYl9taW5fbGVuYCAtIGNvbmZpcm1lZC5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYEJQRl9TWVNDQUxMYCwgYE5FVGAgLSBjb3JyZWN0LlxuXG5Pa2F5LCBldmVyeXRoaW5nIGFsaWducy4gTGV0J3Mgc2VuZCB0aGUgYHNldC1yZXN1bHRzYCBjYWxsIHdpdGggY29uZmlkZW5jZS4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTI1LCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjAyLjg3NDcxODg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3NjcwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2NoYW5nZV90YWlsXCIsXG4gICAgXCJza19za2JfY2hhbmdlX3RhaWxcIixcbiAgICBcImJwZl9za2JfdHJpbV9yY3N1bVwiLFxuICAgIFwiX19icGZfc2tiX21pbl9sZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVxcdTAwM2VpcF9zdW1tZWQgdG8gQ0hFQ0tTVU1fTk9ORSB3aGVuIHRyaW1taW5nIHBhY2tldHMgYmVsb3cgdGhlIGNoZWNrc3VtIHN0YXJ0L29mZnNldCBpbiBicGZfc2tiX3RyaW1fcmNzdW0uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIHJlYWNoYWJsZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyAoYnBmX3NrYl9jaGFuZ2VfdGFpbCBhbmQgc2tfc2tiX2NoYW5nZV90YWlsKSBhbmQgYWZmZWN0cyBuZXR3b3JrIGNoZWNrc3VtIHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tiX2NoYW5nZV90YWlsXCIsXG4gICAgXCJza19za2JfY2hhbmdlX3RhaWxcIixcbiAgICBcImJwZl9za2JfdHJpbV9yY3N1bVwiLFxuICAgIFwiX19icGZfc2tiX21pbl9sZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRyaW1taW5nIHNlbWFudGljcyBpbiBuZXQvY29yZS9maWx0ZXIuYy4gU3BlY2lmaWNhbGx5LCBpdCByZW1vdmVzIHRoZSBtaW5pbXVtIGxlbmd0aCBjb25zdHJhaW50IGJhc2VkIG9uIHBhcnRpYWwgY2hlY2tzdW0gb2Zmc2V0cyBpbiBfX2JwZl9za2JfbWluX2xlbiBhbmQgaW5zdGVhZCByZXNldHMgc2tiLVxcdTAwM2VpcF9zdW1tZWQgdG8gQ0hFQ0tTVU1fTk9ORSB3aGVuIHRyaW1taW5nIHBhY2tldHMgYmVsb3cgdGhlIGNoZWNrc3VtIHN0YXJ0L29mZnNldCBpbiBicGZfc2tiX3RyaW1fcmNzdW0uIFRoaXMgY2hhbmdlcyBleGVjdXRhYmxlIGxvZ2ljIGluIHJlYWNoYWJsZSBCUEYgaGVscGVyIGZ1bmN0aW9ucyAoYnBmX3NrYl9jaGFuZ2VfdGFpbCBhbmQgc2tfc2tiX2NoYW5nZV90YWlsKSBhbmQgYWZmZWN0cyBuZXR3b3JrIGNoZWNrc3VtIHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhbiBpbXBvcnRhbnQgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1NDowMi45NDc0OTIzNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MTQwMjQzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1NDowMi45NDc5Mzk3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4NjEzNTcyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRhaWwgYWRqdXN0bWVudCBsb2dpYyAoYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYGJwZl9za2JfdHJpbV9yY3N1bWApIGJ5IHJlbGF4aW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCByZXNldHRpbmcgYHNrYi1cXHUwMDNlaXBfc3VtbWVkYCB0byBgQ0hFQ0tTVU1fTk9ORWAgd2hlbiBhbiBza2IgaXMgdHJpbW1lZCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGRhdGEgYnVmZmVycyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBieXRlcyAod2hlbiBncm93aW5nLCBtZW1vcnkgaXMgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXRgOyB0cmltbWluZyByZWR1Y2VzIGJ1ZmZlciBsZW5ndGgpLlxcbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBsZW5ndGggZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGMxMmVhYjlmNGVjNGE0MWExZGM4ZTlhNGU0OGNhODJkZTU3OGNiMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTU6NTM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCA2MTk0MGU3NTM1NTIzLi44NTEzMTY3YTg1OGE4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtMzk2MSwxMiArMzk2MSw2IEBAIHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKG9mZnNldCBcdTAwM2UgMClcbiBcdFx0XHRtaW5fbGVuID0gb2Zmc2V0O1xuIFx0fVxuLVx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuLVx0XHRvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgK1xuLVx0XHRcdCBza2ItXHUwMDNlY3N1bV9vZmZzZXQgKyBzaXplb2YoX19zdW0xNik7XG4tXHRcdGlmIChvZmZzZXQgXHUwMDNlIDApXG4tXHRcdFx0bWluX2xlbiA9IG9mZnNldDtcbi1cdH1cbiBcdHJldHVybiBtaW5fbGVuO1xuIH1cbiBcbkBAIC0zOTgzLDYgKzM5NzcsMTEgQEAgc3RhdGljIGludCBicGZfc2tiX2dyb3dfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4gXG4gc3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXG4ge1xuK1x0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbitcdCAgICBuZXdfbGVuIFx1MDAzYyBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgKyBza2ItXHUwMDNlY3N1bV9vZmZzZXQgK1xuK1x0XHQgICAgICBzaXplb2YoX19zdW0xNikpXG4rXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuK1xuIFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2FjZGJkNTc1N2E5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfY2hhbmdlX3RhaWxfcG10dS5jXG5AQCAtMCwwICsxLDEyNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0aW5ldC90Y3AuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcIm5ldHdvcmtfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcInRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dS5za2VsLmhcIlxuK1xuKyNkZWZpbmUgQ0xJRU5UX05TXHRcInRjLWNoYW5nZS10YWlsLWNsaS1uc1wiXG4rI2RlZmluZSBTRVJWRVJfTlNcdFwidGMtY2hhbmdlLXRhaWwtc3J2LW5zXCJcbisjZGVmaW5lIENMSUVOVF9JUFx0XCIxOTIuMTY4LjEuMVwiXG4rI2RlZmluZSBTRVJWRVJfSVBcdFwiMTkyLjE2OC4xLjJcIlxuK1xuKyNkZWZpbmUgVEVTVF9QTVRVXHQxMDAwXG4rI2RlZmluZSBURVNUX01TU19NQVhcdChURVNUX1BNVFUgLSAyMCAtIDIwKVxuKyNkZWZpbmUgVElNRU9VVF9NU1x0MzAwMFxuKyNkZWZpbmUgWEZFUl9CWVRFU1x0ODE5MlxuK1xuK3ZvaWQgdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1KHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3RjeF9vcHRzLCB0Y3hfb3B0cyk7XG4rXHRpbnQgbXNzX2JlZm9yZSA9IDAsIG1zc19hZnRlciA9IDAsIGlmaW5kZXgsIHBvcnQ7XG4rXHRpbnQgc3J2X2ZkID0gLTEsIHNydl9jb25uX2ZkID0gLTEsIGNsaV9mZCA9IC0xO1xuK1x0c3RydWN0IHRlc3RfdGNfY2hhbmdlX3RhaWxfcG10dSAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbiA9IE5VTEw7XG4rXHRzdGF0aWMgY2hhciBidWZbWEZFUl9CWVRFU107XG4rXHRzb2NrbGVuX3Qgb3B0bGVuO1xuK1x0c3NpemVfdCBieXRlcztcbitcdHNpemVfdCB0b3RhbDtcbitcbitcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoQ0xJRU5UX05TKSwgXCJtYWtlIGNsaWVudCBuc1wiKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhTRVJWRVJfTlMpLCBcIm1ha2Ugc2VydmVyIG5zXCIpKVxuK1x0XHRnb3RvIG91dF9jbGllbnRfbnM7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhDTElFTlRfTlMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3BlbiBjbGllbnQgbnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0U1lTKG91dCwgXCJpcCBsaW5rIGFkZCB2ZXRoMSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgyIG5ldG5zIFwiIFNFUlZFUl9OUyk7XG4rXHRTWVMob3V0LCBcImlwIC00IGFkZHIgYWRkIFwiIENMSUVOVF9JUCBcIi8yNCBkZXYgdmV0aDFcIik7XG4rXHRTWVMob3V0LCBcImlwIGxpbmsgc2V0IHZldGgxIHVwXCIpO1xuK1x0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFwidmV0aDFcIik7XG4rXHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXCJpZl9uYW1ldG9pbmRleFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRjbG9zZV9uZXRucyhuc3Rva2VuKTtcbitcdG5zdG9rZW4gPSBOVUxMO1xuK1xuK1x0bnN0b2tlbiA9IG9wZW5fbmV0bnMoU0VSVkVSX05TKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihuc3Rva2VuLCBcIm9wZW4gc2VydmVyIG5zXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdFNZUyhvdXQsIFwiaXAgLTQgYWRkciBhZGQgXCIgU0VSVkVSX0lQIFwiLzI0IGRldiB2ZXRoMlwiKTtcbitcdFNZUyhvdXQsIFwiaXAgbGluayBzZXQgdmV0aDIgdXBcIik7XG4rXHRzcnZfZmQgPSBzdGFydF9zZXJ2ZXIoQUZfSU5FVCwgU09DS19TVFJFQU0sIFNFUlZFUl9JUCwgMCwgVElNRU9VVF9NUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfZmQsIFwic3RhcnQgc2VydmVyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGNsb3NlX25ldG5zKG5zdG9rZW4pO1xuK1x0bnN0b2tlbiA9IE5VTEw7XG4rXG4rXHRza2VsID0gdGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuIGFuZCBsb2FkIHNrZWxldG9uXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHBvcnQgPSBnZXRfc29ja2V0X2xvY2FsX3BvcnQoc3J2X2ZkKTtcbitcdGlmICghQVNTRVJUX0dFKHBvcnQsIDAsIFwiZ2V0IHNlcnZlciBwb3J0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXNlcnZlcl9wb3J0ID0gcG9ydDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXBtdHUgPSBURVNUX1BNVFU7XG4rXG4rXHRuc3Rva2VuID0gb3Blbl9uZXRucyhDTElFTlRfTlMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG5zdG9rZW4sIFwib3BlbiBjbGllbnQgbnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2VsaW5rcy5jaGFuZ2VfdGFpbF9pY21wID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF90Y3goc2tlbC1cdTAwM2Vwcm9ncy5jaGFuZ2VfdGFpbF9pY21wLCBpZmluZGV4LFxuK1x0XHRcdFx0XHRcdTAwMjZ0Y3hfb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5jaGFuZ2VfdGFpbF9pY21wLCBcImF0dGFjaCB0Y3hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2xpX2ZkID0gY29ubmVjdF90b19mZChzcnZfZmQsIFRJTUVPVVRfTVMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoY2xpX2ZkLCBcImNvbm5lY3QgdG8gc2VydmVyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHNydl9jb25uX2ZkID0gYWNjZXB0KHNydl9mZCwgTlVMTCwgTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChzcnZfY29ubl9mZCwgXCJhY2NlcHQgY29ubmVjdGlvblwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhzZXR0aW1lbyhzcnZfY29ubl9mZCwgVElNRU9VVF9NUyksIFwic2V0IHNlcnZlciB0aW1lb3V0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG9wdGxlbiA9IHNpemVvZihtc3NfYmVmb3JlKTtcbitcdGlmICghQVNTRVJUX09LKGdldHNvY2tvcHQoY2xpX2ZkLCBJUFBST1RPX1RDUCwgVENQX01BWFNFRywgXHUwMDI2bXNzX2JlZm9yZSxcbitcdFx0XHRcdCAgXHUwMDI2b3B0bGVuKSwgXCJnZXQgbXNzIGJlZm9yZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRieXRlcyA9IHNlbmQoY2xpX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdGlmICghQVNTRVJUX0VRKGJ5dGVzLCAoc3NpemVfdClzaXplb2YoYnVmKSwgXCJzZW5kIGRhdGFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Zm9yICh0b3RhbCA9IDA7IHRvdGFsIFx1MDAzYyBzaXplb2YoYnVmKTsgdG90YWwgKz0gYnl0ZXMpIHtcbitcdFx0Ynl0ZXMgPSByZWN2KHNydl9jb25uX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTtcbitcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdEFTU0VSVF9FUSh0b3RhbCwgc2l6ZW9mKGJ1ZiksIFwicmVjZWl2ZSBkYXRhXCIpO1xuK1x0QVNTRVJUX09LKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VjaGFuZ2VfdGFpbF9yZXQsIFwiY2hhbmdlIHRhaWxcIik7XG4rXHRBU1NFUlRfT0soc2tlbC1cdTAwM2Vic3MtXHUwMDNlYWRqdXN0X3Jvb21fcmV0LCBcImFkanVzdCByb29tXCIpO1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaWNtcF9zZW50LCBcImljbXAgc2VudFwiKTtcbitcbitcdG9wdGxlbiA9IHNpemVvZihtc3NfYWZ0ZXIpO1xuK1x0aWYgKCFBU1NFUlRfT0soZ2V0c29ja29wdChjbGlfZmQsIElQUFJPVE9fVENQLCBUQ1BfTUFYU0VHLCBcdTAwMjZtc3NfYWZ0ZXIsXG4rXHRcdFx0XHQgIFx1MDAyNm9wdGxlbiksIFwiZ2V0IG1zcyBhZnRlclwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfTFQobXNzX2FmdGVyLCBtc3NfYmVmb3JlLCBcIm1zcyByZWR1Y2VkXCIpO1xuK1x0QVNTRVJUX0xFKG1zc19hZnRlciwgVEVTVF9NU1NfTUFYLCBcIm1zcyBiZWxvdyBwbXR1XCIpO1xuK291dDpcbitcdGNsb3NlKHNydl9jb25uX2ZkKTtcbitcdGNsb3NlKGNsaV9mZCk7XG4rXHRjbG9zZShzcnZfZmQpO1xuK1x0dGVzdF90Y19jaGFuZ2VfdGFpbF9wbXR1X19kZXN0cm95KHNrZWwpO1xuK1x0Y2xvc2VfbmV0bnMobnN0b2tlbik7XG4rXHRyZW1vdmVfbmV0bnMoU0VSVkVSX05TKTtcbitvdXRfY2xpZW50X25zOlxuK1x0cmVtb3ZlX25ldG5zKENMSUVOVF9OUyk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjNGMwNzU0NWJjOWZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX2NoYW5nZV90YWlsX3BtdHUuY1xuQEAgLTAsMCArMSwxMjkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuK1xuKyNkZWZpbmUgSUNNUF9TQU1QTEVfTEVOXHQoc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyA4KVxuKyNkZWZpbmUgSUNNUF9IRFJTX0xFTlx0KHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSlcbitcbitfX2JlMTYgc2VydmVyX3BvcnQgPSAwO1xuK19fdTE2IHBtdHUgPSAwO1xuK1xuK2xvbmcgY2hhbmdlX3RhaWxfcmV0ID0gMTtcbitsb25nIGFkanVzdF9yb29tX3JldCA9IDA7XG4rYm9vbCBpY21wX3NlbnQgPSBmYWxzZTtcbitib29sIGljbXBfZXJyID0gZmFsc2U7XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gY3N1bSlcbit7XG4rXHRjc3VtID0gKGNzdW0gXHUwMDI2IDB4ZmZmZikgKyAoY3N1bSBcdTAwM2VcdTAwM2UgMTYpO1xuK1x0Y3N1bSA9IChjc3VtIFx1MDAyNiAweGZmZmYpICsgKGNzdW0gXHUwMDNlXHUwMDNlIDE2KTtcbitcbitcdHJldHVybiAoX19zdW0xNil+Y3N1bTtcbit9XG4rXG4rU0VDKFwidGMvZWdyZXNzXCIpXG4raW50IGNoYW5nZV90YWlsX2ljbXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdF9fdTggc21hY1tFVEhfQUxFTl0sIGRtYWNbRVRIX0FMRU5dO1xuK1x0dm9pZCAqZGF0YSwgKmRhdGFfZW5kO1xuK1x0c3RydWN0IGljbXBoZHIgKmljbXA7XG4rXHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4rXHRzdHJ1Y3QgdGNwaGRyICp0Y3A7XG4rXHRfX2JlMzIgc2FkZHIsIGRhZGRyO1xuK1x0c3RydWN0IGlwaGRyICppcDtcbitcdF9fd3N1bSBjc3VtO1xuK1xuK1x0aWYgKGljbXBfc2VudCB8fCBpY21wX2VycilcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0ZGF0YSA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGE7XG4rXHRkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpc2tiLVx1MDAzZWRhdGFfZW5kO1xuK1xuK1x0ZXRoID0gZGF0YTtcbitcdGlmICgodm9pZCAqKShldGggKyAxKSBcdTAwM2UgZGF0YV9lbmQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmIChldGgtXHUwMDNlaF9wcm90byAhPSBicGZfaHRvbnMoRVRIX1BfSVApKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXG4rXHRpcCA9ICh2b2lkICopKGV0aCArIDEpO1xuK1x0aWYgKCh2b2lkICopKGlwICsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXHRpZiAoaXAtXHUwMDNlaWhsICE9IDUgfHwgaXAtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcbitcdHRjcCA9ICh2b2lkICopKGlwICsgMSk7XG4rXHRpZiAoKHZvaWQgKikodGNwICsgMSkgXHUwMDNlIGRhdGFfZW5kKVxuK1x0XHRyZXR1cm4gVENYX1BBU1M7XG4rXHRpZiAodGNwLVx1MDAzZWRlc3QgIT0gc2VydmVyX3BvcnQpXG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdGlmIChicGZfbnRvaHMoaXAtXHUwMDNldG90X2xlbikgXHUwMDNjPSBzaXplb2YoKmlwKSArIHRjcC1cdTAwM2Vkb2ZmICogNClcbitcdFx0cmV0dXJuIFRDWF9QQVNTO1xuK1xuK1x0X19idWlsdGluX21lbWNweShzbWFjLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbitcdF9fYnVpbHRpbl9tZW1jcHkoZG1hYywgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuK1x0c2FkZHIgPSBpcC1cdTAwM2VzYWRkcjtcbitcdGRhZGRyID0gaXAtXHUwMDNlZGFkZHI7XG4rXG4rXHRjaGFuZ2VfdGFpbF9yZXQgPSBicGZfc2tiX2NoYW5nZV90YWlsKHNrYiwgRVRIX0hMRU4gKyBJQ01QX1NBTVBMRV9MRU4sIDApO1xuK1x0aWYgKGNoYW5nZV90YWlsX3JldCkge1xuK1x0XHRpY21wX2VyciA9IHRydWU7XG4rXHRcdHJldHVybiBUQ1hfUEFTUztcbitcdH1cbitcbitcdGFkanVzdF9yb29tX3JldCA9IGJwZl9za2JfYWRqdXN0X3Jvb20oc2tiLCBJQ01QX0hEUlNfTEVOLFxuK1x0XHRcdFx0XHQgICAgICBCUEZfQURKX1JPT01fTUFDLFxuK1x0XHRcdFx0XHQgICAgICBCUEZfRl9BREpfUk9PTV9OT19DU1VNX1JFU0VUKTtcbitcdGlmIChhZGp1c3Rfcm9vbV9yZXQpIHtcbitcdFx0aWNtcF9lcnIgPSB0cnVlO1xuK1x0XHRyZXR1cm4gVENYX0RST1A7XG4rXHR9XG4rXG4rXHRkYXRhID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YTtcbitcdGRhdGFfZW5kID0gKHZvaWQgKikobG9uZylza2ItXHUwMDNlZGF0YV9lbmQ7XG4rXG4rXHRldGggPSBkYXRhO1xuK1x0aXAgPSAodm9pZCAqKShldGggKyAxKTtcbitcdGljbXAgPSAodm9pZCAqKShpcCArIDEpO1xuK1x0aWYgKCh2b2lkICopaWNtcCArIHNpemVvZigqaWNtcCkgKyBJQ01QX1NBTVBMRV9MRU4gXHUwMDNlIGRhdGFfZW5kKSB7XG4rXHRcdGljbXBfZXJyID0gdHJ1ZTtcbitcdFx0cmV0dXJuIFRDWF9EUk9QO1xuK1x0fVxuK1xuK1x0X19idWlsdGluX21lbWNweShldGgtXHUwMDNlaF9kZXN0LCBzbWFjLCBFVEhfQUxFTik7XG4rXHRfX2J1aWx0aW5fbWVtY3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgZG1hYywgRVRIX0FMRU4pO1xuK1xuK1x0X19idWlsdGluX21lbXNldChpY21wLCAwLCBzaXplb2YoKmljbXApKTtcbitcdGljbXAtXHUwMDNldHlwZSA9IElDTVBfREVTVF9VTlJFQUNIO1xuK1x0aWNtcC1cdTAwM2Vjb2RlID0gSUNNUF9GUkFHX05FRURFRDtcbitcdGljbXAtXHUwMDNldW4uZnJhZy5tdHUgPSBicGZfaHRvbnMocG10dSk7XG4rXG4rXHRfX2J1aWx0aW5fbWVtc2V0KGlwLCAwLCBzaXplb2YoKmlwKSk7XG4rXHRpcC1cdTAwM2V2ZXJzaW9uID0gNDtcbitcdGlwLVx1MDAzZWlobCA9IDU7XG4rXHRpcC1cdTAwM2V0dGwgPSA2NDtcbitcdGlwLVx1MDAzZXByb3RvY29sID0gSVBQUk9UT19JQ01QO1xuK1x0aXAtXHUwMDNldG90X2xlbiA9IGJwZl9odG9ucyhJQ01QX0hEUlNfTEVOICsgSUNNUF9TQU1QTEVfTEVOKTtcbitcdGlwLVx1MDAzZXNhZGRyID0gZGFkZHI7XG4rXHRpcC1cdTAwM2VkYWRkciA9IHNhZGRyO1xuK1xuK1x0Y3N1bSA9IGJwZl9jc3VtX2RpZmYoTlVMTCwgMCwgKF9fYmUzMiAqKWljbXAsXG4rXHRcdFx0ICAgICBzaXplb2YoKmljbXApICsgSUNNUF9TQU1QTEVfTEVOLCAwKTtcbitcdGljbXAtXHUwMDNlY2hlY2tzdW0gPSBjc3VtX2ZvbGQoY3N1bSk7XG4rXHRjc3VtID0gYnBmX2NzdW1fZGlmZihOVUxMLCAwLCAoX19iZTMyICopaXAsIHNpemVvZigqaXApLCAwKTtcbitcdGlwLVx1MDAzZWNoZWNrID0gY3N1bV9mb2xkKGNzdW0pO1xuK1x0aWNtcF9zZW50ID0gdHJ1ZTtcbitcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVx1MDAzZWlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTo1NDowMi45NDc5NDMyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTYyMTg1NzI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50IGZpcmluZyB1cCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIHRoZSBkaWZmIGl0c2VsZi4gQWgsIGl0IG1vZGlmaWVzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGFkZHMgQlBGIHNlbGZ0ZXN0cy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBhbHdheXMgc3RhcnQgd2l0aCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy5cblxuTGV0J3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uLi4gT2theSwgbGluZSAzOTYwIGFuZCBhcm91bmQgdGhlcmUuLi5cblxuYGBgZGlmZlxuQEAgLTM5NjEsMTIgKzM5NjEsNiBAQCBzdGF0aWMgdTMyIF9fYnBmX3NrYl9taW5fbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlIDApXG4gXHRcdFx0bWluX2xlbiA9IG9mZnNldDtcbiBcdH1cbi1cdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHtcbi1cdFx0b2Zmc2V0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICtcbi1cdFx0XHQgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICsgc2l6ZW9mKF9fc3VtMTYpO1xuLVx0XHRpZiAob2Zmc2V0IFx1MDAzZSAwKVxuLVx0XHRcdG1pbl9sZW4gPSBvZmZzZXQ7XG4tXHR9XG4gXHRyZXR1cm4gbWluX2xlbjtcbiB9XG4gXG5AQCAtMzk4Myw2ICszOTc3LDExIEBAIHN0YXRpYyBpbnQgYnBmX3NrYl9ncm93X3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxuIFxuIHN0YXRpYyBpbnQgYnBmX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuZXdfbGVuKVxuIHtcbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4rXHQgICAgbmV3X2xlbiBcdTAwM2Mgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpICsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICtcbitcdFx0ICAgICAgc2l6ZW9mKF9fc3VtMTYpKVxuK1x0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbitcbiBcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XG4gfVxuIGBgYFxuXG5SaWdodCwgc28gaXQncyByZW1vdmluZyB0aGUgY2hlY2tzdW0gb2Zmc2V0IGNoZWNrIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIGNoYW5naW5nIGBicGZfc2tiX3RyaW1fcmNzdW1gIHRvIGNsZWFyIHRoZSBjaGVja3N1bSB3aGVuIHRyaW1taW5nLiBUaGUgcmVtb3ZlZCBjaGVjayBpcyB0aGVyZSB0byBwcmV2ZW50IE9PQiBhY2Nlc3Mgd2hlbiBkZWFsaW5nIHdpdGggYENIRUNLU1VNX1BBUlRJQUxgIHNrYnMuIFRoZSBuZXcgY29kZSBpbiBgYnBmX3NrYl90cmltX3Jjc3VtYCBzZWVtcyB0byBiZSBpbnRlbmRlZCB0byBkZWFsIHdpdGggY2hlY2tzdW1zIGNvcnJlY3RseSB3aGVuIHRyaW1taW5nLlxuXG5TbywgcG90ZW50aWFsbHkgd2UgaGF2ZSBhIGNoYW5nZSBpbiBjaGVja3N1bSBoYW5kbGluZyBhbmQgYnBmIHNlbGZ0ZXN0cy4gVGhlIHJlbW92YWwgb2YgdGhlIGNoZWNrIGluIGBfX2JwZl9za2JfbWluX2xlbmAgYW5kIHRoZSBsb2dpYyBpbiBgYnBmX3NrYl90cmltX3Jjc3VtYCBtaWdodCBoYXZlIHNvbWUgc3VidGxlIGNvcm5lciBjYXNlcyB0aGF0IGEgS01TQU4gcnVuIG1pZ2h0IGV4cG9zZS4gVGhpcyAqY291bGQqIGJlIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgaW52b2x2ZXMgbmV0d29yayBwYWNrZXQgbWFuaXB1bGF0aW9uIGFuZCBjaGVja3N1bXMgLSBhIGNsYXNzaWMgYXJlYSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gTm93IEkgbmVlZCB0byBkZWNpZGUgaWYgdGhlIHJpc2sgb3V0d2VpZ2hzIHRoZSBlZmZvcnQgdG8gc2V0dXAgS01TQU4uIFRoaXMgbG9va3MgcHJldHR5IGdvb2QgZm9yIGEgS01TQU4gc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjE0LjU2OTgwNDIxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk0MDpcXHR9XFxuMzk0MTpcXHRcXG4zOTQyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9hZGp1c3Rfcm9vbV9wcm90byA9IHtcXG4zOTQzOlxcdFxcdC5mdW5jXFx0XFx0PSBicGZfc2tiX2FkanVzdF9yb29tLFxcbjM5NDQ6XFx0XFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4zOTQ1OlxcdFxcdC5yZXRfdHlwZVxcdD0gUkVUX0lOVEVHRVIsXFxuMzk0NjpcXHRcXHQuYXJnMV90eXBlXFx0PSBBUkdfUFRSX1RPX0NUWCxcXG4zOTQ3OlxcdFxcdC5hcmcyX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4zOTQ4OlxcdFxcdC5hcmczX3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4zOTQ5OlxcdFxcdC5hcmc0X3R5cGVcXHQ9IEFSR19BTllUSElORyxcXG4zOTUwOlxcdH07XFxuMzk1MTpcXHRcXG4zOTUyOlxcdHN0YXRpYyB1MzIgX19icGZfc2tiX21pbl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4zOTUzOlxcdHtcXG4zOTU0OlxcdFxcdGludCBvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcXG4zOTU1OlxcdFxcdHUzMiBtaW5fbGVuID0gMDtcXG4zOTU2OlxcdFxcbjM5NTc6XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlIDApXFxuMzk1ODpcXHRcXHRcXHRtaW5fbGVuID0gb2Zmc2V0O1xcbjM5NTk6XFx0XFx0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xcbjM5NjA6XFx0XFx0XFx0b2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcXG4zOTYxOlxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSAwKVxcbjM5NjI6XFx0XFx0XFx0XFx0bWluX2xlbiA9IG9mZnNldDtcXG4zOTYzOlxcdFxcdH1cXG4zOTY0OlxcdFxcdHJldHVybiBtaW5fbGVuO1xcbjM5NjU6XFx0fVxcbjM5NjY6XFx0XFxuMzk2NzpcXHRzdGF0aWMgaW50IGJwZl9za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zOTY4OlxcdHtcXG4zOTY5OlxcdFxcdHVuc2lnbmVkIGludCBvbGRfbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMzk3MDpcXHRcXHRpbnQgcmV0O1xcbjM5NzE6XFx0XFxuMzk3MjpcXHRcXHRyZXQgPSBfX3NrYl9ncm93X3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzk3MzpcXHRcXHRpZiAoIXJldClcXG4zOTc0OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWRhdGEgKyBvbGRfbGVuLCAwLCBuZXdfbGVuIC0gb2xkX2xlbik7XFxuMzk3NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NzY6XFx0fVxcbjM5Nzc6XFx0XFxuMzk3ODpcXHRzdGF0aWMgaW50IGJwZl9za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmV3X2xlbilcXG4zOTc5OlxcdHtcXG4zOTgwOlxcdFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFxcdTAwMjZcXHUwMDI2XFxuMzk4MTpcXHRcXHQgICAgbmV3X2xlbiBcXHUwMDNjIHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgK1xcbjM5ODI6XFx0XFx0XFx0ICAgICAgc2l6ZW9mKF9fc3VtMTYpKVxcbjM5ODM6XFx0XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbjM5ODQ6XFx0XFxuMzk4NTpcXHRcXHRyZXR1cm4gX19za2JfdHJpbV9yY3N1bShza2IsIG5ld19sZW4pO1xcbjM5ODY6XFx0fVxcbjM5ODc6XFx0XFxuMzk4ODpcXHRzdGF0aWMgaW5saW5lIGludCBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ld19sZW4sXFxuMzk4OTpcXHRcXHRcXHRcXHRcXHRcXHR1NjQgZmxhZ3MpXFxuMzk5MDpcXHR7XFxuMzk5MTpcXHRcXHR1MzIgbWF4X2xlbiA9IEJQRl9TS0JfTUFYX0xFTjtcXG4zOTkyOlxcdFxcdHUzMiBtaW5fbGVuID0gX19icGZfc2tiX21pbl9sZW4oc2tiKTtcXG4zOTkzOlxcdFxcdGludCByZXQ7XFxuMzk5NDpcXHRcXG4zOTk1OlxcdFxcdGlmICh1bmxpa2VseShmbGFncyB8fCBuZXdfbGVuIFxcdTAwM2UgbWF4X2xlbiB8fCBuZXdfbGVuIFxcdTAwM2MgbWluX2xlbikpXFxuMzk5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTk3OlxcdFxcdGlmIChza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuMzk5ODpcXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbjM5OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjE0LjU3MDQxNzA3N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODI3MzQwNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIENvbW1pdCdzIExvZ2ljIGZvciBTS0IgVHJpbW1pbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb21taXQgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBjaGFuZ2UuIFByZXZpb3VzbHksIHRoZSBgX19icGZfc2tiX21pbl9sZW5gIGNoZWNrIHdhcyBwcmV2ZW50aW5nIGBicGZfc2tiX2NoYW5nZV90YWlsYCBmcm9tIHNocmlua2luZyBhbiBTS0IgKFNvY2tldCBCdWZmZXIpIGJleW9uZCBhIGNlcnRhaW4gcG9pbnQg4oCTIHNwZWNpZmljYWxseSwgdGhlIGNoZWNrc3VtLXJlbGF0ZWQgb2Zmc2V0IGNhbGN1bGF0ZWQgdXNpbmcgYHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSArIHNrYi1cdTAwM2Vjc3VtX29mZnNldCArIHNpemVvZihfX3N1bTE2KWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIGRvbid0IHdhbnQgdG8gbWVzcyB1cCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGJ5IGFyYml0cmFyaWx5IHRydW5jYXRpbmcgdGhlIGJ1ZmZlci5cblxuTm93LCBob3dldmVyLCBpdCBsb29rcyBsaWtlIHRoZXkncmUgbW9kaWZ5aW5nIHRoZSBgYnBmX3NrYl90cmltX3Jjc3VtYCBwcm9jZXNzLiBJbnN0ZWFkIG9mIHJlamVjdGluZyB0aGUgdHJpbSBpbiB0aGUgYF9fYnBmX3NrYl9taW5fbGVuYCBjaGVjayBpZiB0aGUgaW50ZW5kZWQgYG5ld19sZW5gIGlzIGxlc3MgdGhhbiB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQsIHRoZSBjb2RlICphbGxvd3MqIHRoZSB0cmltIHRvIGhhcHBlbi4gVGhlIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlIGlzIHRoYXQgaXQgYWxzbyAqcmVzZXRzKiBgc2tiLVx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UsIGFuZCBpdCBkZW1hbmRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYF9fc2tiX3RyaW1fcmNzdW1gIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGRldGVybWluZSB3aGF0IHNwZWNpZmljIGFjdGlvbnMgYXJlIHRha2VuIHdoZW4gYW4gU0tCIGlzIHRyaW1tZWQgaW4gdGhpcyBuZXcgcGFyYWRpZ20uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMgb2YgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIGNoZWNrc3VtbWluZyBhZnRlciBhIHBvdGVudGlhbGx5IGFnZ3Jlc3NpdmUgdHJpbS4gSXMgdGhpcyBleHBlY3RlZCBiZWhhdmlvcj8gQXJlIHRoZXJlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIHRoYXQgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGlzIGNoYW5nZT8gSSdsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMgd2UgYXJlIGVtcGxveWluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBjYXVzZSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSdtIGtlZW4gdG8gdW5jb3ZlciB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1vZGlmaWNhdGlvbiBhbmQgZW5zdXJlIGl0cyBjb3JyZWN0bmVzcyBhbmQgc2FmZXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQ2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MTkuMzk3NzU5NjIzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIyMzYxMzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2tiX3RyaW1fcmNzdW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MTU5PXN0YXRpYyBpbmxpbmUgaW50IHBza2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MTY2LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDE2NzpzdGF0aWMgaW5saW5lIGludCBfX3NrYl90cmltX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MTY4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTM5Nzg9c3RhdGljIGludCBicGZfc2tiX3RyaW1fcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ld19sZW4pXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjM5ODU6XFx0cmV0dXJuIF9fc2tiX3RyaW1fcmNzdW0oc2tiLCBuZXdfbGVuKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0zOTg2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MjEuMTIwMTM1MTI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTcwNjgzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHNrYl90cmltX3Jjc3VtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYF9fc2tiX3RyaW1fcmNzdW1gLiBXaGVyZSdzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24/IFJpZ2h0LCBpdCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLiBUaW1lIHRvIHB1bGwgdXAgdGhhdCBoZWFkZXIgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0cmltbWluZyBvbiB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zLiBJcyBpdCBqdXN0IGEgbWF0dGVyIG9mIGFkanVzdGluZyB0aGUgYGNzdW1gIGZpZWxkPyBBcmUgdGhlcmUgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB0byBjb25zaWRlciwgbGlrZSBmcmFnbWVudGVkIFNLQnMgb3IgaGFyZHdhcmUgY2hlY2tzdW0gb2ZmbG9hZD8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb3JlIGxvZ2ljIGJlZm9yZSBJIGdldCBkaXN0cmFjdGVkIGJ5IGFueSBwYXJ0aWN1bGFyIHVzZSBjYXNlcy4gTGV0J3Mgc2VlIGhvdyB0aGUgaW50ZXJuYWwgd29ya2luZ3MgcmVsYXRlIHRvIHRoZSBgc2tiYCBkYXRhIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjIzLjQzNzIwNTg5OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTY1OlxcdH1cXG40MTY2OlxcdFxcbjQxNjc6XFx0c3RhdGljIGlubGluZSBpbnQgX19za2JfdHJpbV9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbjQxNjg6XFx0e1xcbjQxNjk6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbjQxNzA6XFx0XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbjQxNzE6XFx0XFx0X19za2JfdHJpbShza2IsIGxlbik7XFxuNDE3MjpcXHRcXHRyZXR1cm4gMDtcXG40MTczOlxcdH1cXG40MTc0OlxcdFxcbjQxNzU6XFx0c3RhdGljIGlubGluZSBpbnQgX19za2JfZ3Jvd19yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKVxcbjQxNzY6XFx0e1xcbjQxNzc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbjQxNzg6XFx0XFx0XFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xcbjQxNzk6XFx0XFx0cmV0dXJuIF9fc2tiX2dyb3coc2tiLCBsZW4pO1xcbjQxODA6XFx0fVxcbjQxODE6XFx0XFxuNDE4MjpcXHQjZGVmaW5lIHJiX3RvX3NrYihyYikgcmJfZW50cnlfc2FmZShyYiwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSlcXG40MTgzOlxcdCNkZWZpbmUgc2tiX3JiX2ZpcnN0KHJvb3QpIHJiX3RvX3NrYihyYl9maXJzdChyb290KSlcXG40MTg0OlxcdCNkZWZpbmUgc2tiX3JiX2xhc3Qocm9vdCkgIHJiX3RvX3NrYihyYl9sYXN0KHJvb3QpKVxcbjQxODU6XFx0I2RlZmluZSBza2JfcmJfbmV4dChza2IpICAgcmJfdG9fc2tiKHJiX25leHQoXFx1MDAyNihza2IpLVxcdTAwM2VyYm5vZGUpKVxcbjQxODY6XFx0I2RlZmluZSBza2JfcmJfcHJldihza2IpICAgcmJfdG9fc2tiKHJiX3ByZXYoXFx1MDAyNihza2IpLVxcdTAwM2VyYm5vZGUpKVxcbjQxODc6XFx0XFxuNDE4ODpcXHQjZGVmaW5lIHNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIFxcXFxcXG40MTg5OlxcdFxcdFxcdGZvciAoc2tiID0gKHF1ZXVlKS1cXHUwMDNlbmV4dDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjIzLjQzNzUzMjY0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMyNTc3ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2JwZl9za2JfY2hhbmdlX3RhaWxgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGEgY3JpdGljYWwgc2VjdGlvbiwgYF9fYnBmX3NrYl9jaGFuZ2VfdGFpbGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMzk4MCB0byA0MDMwIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgc3Vic3lzdGVtLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRhaWwgbW9kaWZpY2F0aW9ucyBvbiBTS0JzLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBjaGFuZ2luZyB0aGUgdGFpbCBwb2ludGVyLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBtZW1vcnkgYmFycmllciBpbXBsZW1lbnRhdGlvbnMgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG9vLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIHdpdGggYW55IGxvY2tpbmcgcHJpbWl0aXZlcyBvciBhdG9taWMgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MjUuNjcwMTEzMTg2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTg1OlxcdFxcdHJldHVybiBfX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuMzk4NjpcXHR9XFxuMzk4NzpcXHRcXG4zOTg4OlxcdHN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3NrYl9jaGFuZ2VfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbmV3X2xlbixcXG4zOTg5OlxcdFxcdFxcdFxcdFxcdFxcdHU2NCBmbGFncylcXG4zOTkwOlxcdHtcXG4zOTkxOlxcdFxcdHUzMiBtYXhfbGVuID0gQlBGX1NLQl9NQVhfTEVOO1xcbjM5OTI6XFx0XFx0dTMyIG1pbl9sZW4gPSBfX2JwZl9za2JfbWluX2xlbihza2IpO1xcbjM5OTM6XFx0XFx0aW50IHJldDtcXG4zOTk0OlxcdFxcbjM5OTU6XFx0XFx0aWYgKHVubGlrZWx5KGZsYWdzIHx8IG5ld19sZW4gXFx1MDAzZSBtYXhfbGVuIHx8IG5ld19sZW4gXFx1MDAzYyBtaW5fbGVuKSlcXG4zOTk2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM5OTc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbilcXG4zOTk4OlxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuMzk5OTpcXHRcXG40MDAwOlxcdFxcdC8qIFRoZSBiYXNpYyBpZGVhIG9mIHRoaXMgaGVscGVyIGlzIHRoYXQgaXQncyBwZXJmb3JtaW5nIHRoZVxcbjQwMDE6XFx0XFx0ICogbmVlZGVkIHdvcmsgdG8gZWl0aGVyIGdyb3cgb3IgdHJpbSBhbiBza2IsIGFuZCBlQlBGIHByb2dyYW1cXG40MDAyOlxcdFxcdCAqIHJld3JpdGVzIHRoZSByZXN0IHZpYSBoZWxwZXJzIGxpa2UgYnBmX3NrYl9zdG9yZV9ieXRlcygpLFxcbjQwMDM6XFx0XFx0ICogYnBmX2xYX2NzdW1fcmVwbGFjZSgpIGFuZCBvdGhlcnMgcmF0aGVyIHRoYW4gcGFzc2luZyBhIHJhd1xcbjQwMDQ6XFx0XFx0ICogYnVmZmVyIGhlcmUuIFRoaXMgb25lIGlzIGEgc2xvdyBwYXRoIGhlbHBlciBhbmQgaW50ZW5kZWRcXG40MDA1OlxcdFxcdCAqIGZvciByZXBsaWVzIHdpdGggY29udHJvbCBtZXNzYWdlcy5cXG40MDA2OlxcdFxcdCAqXFxuNDAwNzpcXHRcXHQgKiBMaWtlIGluIGJwZl9za2JfY2hhbmdlX3Byb3RvKCksIHdlIHdhbnQgdG8ga2VlcCB0aGlzIHJhdGhlclxcbjQwMDg6XFx0XFx0ICogbWluaW1hbCBhbmQgd2l0aG91dCBwcm90b2NvbCBzcGVjaWZpY3Mgc28gdGhhdCB3ZSBhcmUgYWJsZVxcbjQwMDk6XFx0XFx0ICogdG8gc2VwYXJhdGUgY29uY2VybnMgYXMgaW4gYnBmX3NrYl9zdG9yZV9ieXRlcygpIHNob3VsZCBvbmx5XFxuNDAxMDpcXHRcXHQgKiBiZSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGJ1ZmZlcnMuXFxuNDAxMTpcXHRcXHQgKlxcbjQwMTI6XFx0XFx0ICogSXQncyByZWFsbHkgZXhwZWN0ZWQgdG8gYmUgYSBzbG93IHBhdGggb3BlcmF0aW9uIGhlcmUgZm9yXFxuNDAxMzpcXHRcXHQgKiBjb250cm9sIG1lc3NhZ2UgcmVwbGllcywgc28gd2UncmUgaW1wbGljaXRseSBsaW5lYXJpemluZyxcXG40MDE0OlxcdFxcdCAqIHVuY2xvbmluZyBhbmQgZHJvcCBvZmZsb2FkcyBmcm9tIHRoZSBza2IgYnkgdGhpcy5cXG40MDE1OlxcdFxcdCAqL1xcbjQwMTY6XFx0XFx0cmV0ID0gX19icGZfdHJ5X21ha2Vfd3JpdGFibGUoc2tiLCBza2ItXFx1MDAzZWxlbik7XFxuNDAxNzpcXHRcXHRpZiAoIXJldCkge1xcbjQwMTg6XFx0XFx0XFx0aWYgKG5ld19sZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG40MDE5OlxcdFxcdFxcdFxcdHJldCA9IGJwZl9za2JfZ3Jvd19yY3N1bShza2IsIG5ld19sZW4pO1xcbjQwMjA6XFx0XFx0XFx0ZWxzZSBpZiAobmV3X2xlbiBcXHUwMDNjIHNrYi1cXHUwMDNlbGVuKVxcbjQwMjE6XFx0XFx0XFx0XFx0cmV0ID0gYnBmX3NrYl90cmltX3Jjc3VtKHNrYiwgbmV3X2xlbik7XFxuNDAyMjpcXHRcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvKHNrYikpXFxuNDAyMzpcXHRcXHRcXHRcXHRza2JfZ3NvX3Jlc2V0KHNrYik7XFxuNDAyNDpcXHRcXHR9XFxuNDAyNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMjY6XFx0fVxcbjQwMjc6XFx0XFxuNDAyODpcXHRCUEZfQ0FMTF8zKGJwZl9za2JfY2hhbmdlX3RhaWwsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBuZXdfbGVuLFxcbjQwMjk6XFx0XFx0ICAgdTY0LCBmbGFncylcXG40MDMwOlxcdHtcXG40MDMxOlxcdFxcdGludCByZXQgPSBfX2JwZl9za2JfY2hhbmdlX3RhaWwoc2tiLCBuZXdfbGVuLCBmbGFncyk7XFxuNDAzMjpcXHRcXG40MDMzOlxcdFxcdGJwZl9jb21wdXRlX2RhdGFfcG9pbnRlcnMoc2tiKTtcXG40MDM0OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjU0OjI1LjY3MDc0MDQ3N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODkwNjYwNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFNLQiBUcmltbWluZyBpbiBCUEYqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBicGZfc2tiX2NoYW5nZV90YWlsYCBpcyB0aGUgZnVuY3Rpb24gYXQgcGxheSBoZXJlLCBhbmQgaXQncyByZXNwb25zaWJsZSBmb3IgYm90aCBncm93aW5nIGFuZCB0cmltbWluZyBza2JzLiBUaGUga2V5IGlzIHRvIGFzc2VzcyB0aGlzIGNoYW5nZSBmb3IgS01TQU4gaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuRmlyc3QsIGdyb3dpbmcuIEdyb3dpbmcgaXMgaGFuZGxlZCB3aXRoIGBicGZfc2tiX2dyb3dfcmNzdW1gIHdoaWNoICpleHBsaWNpdGx5KiB6ZXJvZXMgb3V0IHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IHVzaW5nIGBtZW1zZXRgLiBObyBjb25jZXJucyB0aGVyZS5cblxuTm93LCB0cmltbWluZy4gVGhlIHBhdGNoIGFsbG93cyBmb3IgdHJpbW1pbmcgdGhlIHNrYiB0byBhIHNob3J0ZXIgbGVuZ3RoLCB3aGljaCB3YXMgcHJldmlvdXNseSByZXN0cmljdGVkLiBJZiB0aGUgdHJpbSBoYXBwZW5zIHRvIGN1dCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldCwgd2UgY29ycmVjdGx5IHJlc2V0IGBza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORWAuIFRoaXMgaXMgY3JpdGljYWwuIFdlJ3JlIHByb2FjdGl2ZWx5IGVuc3VyaW5nIHRoYXQgdGhlIGNoZWNrc3VtIGNhbGN1bGF0aW9uIHdvbid0IHJlYWQgcGFzdCB0aGUgbmV3LCByZWR1Y2VkIHBhY2tldCBib3VuZGFyeS5cblxuU28sIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlOioqIE5vdGhpbmcgaGVyZS4gTm8gZGF0YSBpcyBiZWluZyBzZW50IG91dCwgbW9kaWZpZWQsIG9yIG90aGVyd2lzZSBleHBvc2VkIGluIHRoaXMgd2F5LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhOioqIE5vLiBUaGVyZSBhcmUgbm8gbG9naWMgYnJhbmNoZXMgYmVpbmcgZGV0ZXJtaW5lZCBieSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbjoqKiBOb3BlLiBUaGUgZXhpc3RpbmcgemVyby1pbmcgbG9naWMgYWxyZWFkeSBjb3ZlcnMgZ3Jvd2luZy4gVGhlIGNvbmNlcm4gaGVyZSBpcyBhYm91dCBzaHJpbmtpbmcsIGFuZCB3ZSBhcmUgc2V0dGluZyB0aGUgY2hlY2tzdW0gZmxhZyBjb3JyZWN0bHksIG9yIGtlZXBpbmcgaXQgY29ycmVjdCB3aGVuIHNocmlua2luZy5cbjQuICAqKkJvdW5kcyBjaGVja3MgYW5kIGxlbmd0aHM6KiogQWgsIGhlcmUncyB3aGVyZSBpdCBtYXR0ZXJzLiBUcmltbWluZyAqcmVkdWNlcyogdGhlIGJ1ZmZlciBzaXplLiBUaGlzIG1lYW5zIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHdpbGwgbmV2ZXIgYmUgcmVhZCBwYXN0IHRoZSBib3VuZGFyaWVzLiBXaXRoIHRoZSBjc3VtIGFkanVzdG1lbnQgYXMgd2VsbCwgdGhpcyBpcyBub3QgYW4gaXNzdWUuIFdlIGFyZSBjbGVhcmluZyBvdXQgdGhlIGlwXFxfc3VtbWVkIHNldHRpbmcgd2hlbiB0cmltbWluZy5cblxuVGhlcmVmb3JlLCAqbm8qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLiBLQVNBTiBhbmQgb3RoZXIgc2FuaXRpemVycyBjb3ZlciB0aGUgYm91bmRhcnkgY29uZGl0aW9ucywgYXMgZXhwZWN0ZWQuIFRoaXMgY2hhbmdlIGlzIEtNU0FOLXNhZmUuIEknbSBzYXRpc2ZpZWQuIExldCdzIG1ha2Ugc3VyZSB0aGUgdG9vbCBjYWxsIGdvZXMgdGhyb3VnaCBzbW9vdGhseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6NTQ6MzEuNTYxNDk1MjcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgc2tiIHRhaWwgYWRqdXN0bWVudCBsb2dpYyAoYGJwZl9za2JfY2hhbmdlX3RhaWxgIC8gYGJwZl9za2JfdHJpbV9yY3N1bWApIGJ5IHJlbGF4aW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBjYWxjdWxhdGlvbiBpbiBgX19icGZfc2tiX21pbl9sZW5gIGFuZCByZXNldHRpbmcgYHNrYi1cXHUwMDNlaXBfc3VtbWVkYCB0byBgQ0hFQ0tTVU1fTk9ORWAgd2hlbiBhbiBza2IgaXMgdHJpbW1lZCBwYXN0IHRoZSBwYXJ0aWFsIGNoZWNrc3VtIG9mZnNldC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzOlxcbjEuIEl0IGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFsdGVyIGRhdGEgYnVmZmVycyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBieXRlcyAod2hlbiBncm93aW5nLCBtZW1vcnkgaXMgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXRgOyB0cmltbWluZyByZWR1Y2VzIGJ1ZmZlciBsZW5ndGgpLlxcbjIuIEl0IGRvZXMgbm90IGNvcHkgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvcGFkZGluZy5cXG4zLiBBbnkgcG90ZW50aWFsIGJ1ZmZlciBsZW5ndGggZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHNrYiB0YWlsIGFkanVzdG1lbnQgbG9naWMgKGBicGZfc2tiX2NoYW5nZV90YWlsYCAvIGBicGZfc2tiX3RyaW1fcmNzdW1gKSBieSByZWxheGluZyB0aGUgbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gaW4gYF9fYnBmX3NrYl9taW5fbGVuYCBhbmQgcmVzZXR0aW5nIGBza2ItXFx1MDAzZWlwX3N1bW1lZGAgdG8gYENIRUNLU1VNX05PTkVgIHdoZW4gYW4gc2tiIGlzIHRyaW1tZWQgcGFzdCB0aGUgcGFydGlhbCBjaGVja3N1bSBvZmZzZXQuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrczpcXG4xLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbHRlciBkYXRhIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgKHdoZW4gZ3Jvd2luZywgbWVtb3J5IGlzIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0YDsgdHJpbW1pbmcgcmVkdWNlcyBidWZmZXIgbGVuZ3RoKS5cXG4yLiBJdCBkb2VzIG5vdCBjb3B5IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuXFxuMy4gQW55IHBvdGVudGlhbCBidWZmZXIgbGVuZ3RoIGVycm9ycyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[1] Phase: Succeeded StartedAt: 2026-09-07 15:54:43 +0000 UTC FinishedAt: 2026-09-07 15:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 15:54:43 +0000 UTC FinishedAt: 2026-09-07 15:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2] Phase: Succeeded StartedAt: 2026-09-07 15:54:43 +0000 UTC FinishedAt: 2026-09-07 19:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 15:54:43 +0000 UTC FinishedAt: 2026-09-07 19:34:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 15:54:43 +0000 UTC FinishedAt: 2026-09-07 15:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 15:54:43 +0000 UTC FinishedAt: 2026-09-07 15:54:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow8svtk/series-workflow8svtk-convert-artifact-506203047/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 15:54:53 +0000 UTC FinishedAt: 2026-09-07 16:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 15:54:53 +0000 UTC FinishedAt: 2026-09-07 16:10: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:*7f5d0397-2f1d-465f-823c-633f2d8d9d96,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-workflow8svtk/series-workflow8svtk-convert-artifact-506203047/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": "8e75a564-4ede-4d82-92fb-ba9a7c8e6a65", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-3978582845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:54:53 +0000 UTC FinishedAt: 2026-09-07 16:10:49 +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:*7f5d0397-2f1d-465f-823c-633f2d8d9d96,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-workflow8svtk/series-workflow8svtk-convert-artifact-506203047/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": "8e75a564-4ede-4d82-92fb-ba9a7c8e6a65", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-3978582845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 16:10:59 +0000 UTC FinishedAt: 2026-09-07 16:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 16:10:59 +0000 UTC FinishedAt: 2026-09-07 16:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 16:10:59 +0000 UTC FinishedAt: 2026-09-07 16:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 16:10:59 +0000 UTC FinishedAt: 2026-09-07 16:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow8svtk/series-workflow8svtk-convert-artifact-336718934/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 16:11:10 +0000 UTC FinishedAt: 2026-09-07 16:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 16:11:10 +0000 UTC FinishedAt: 2026-09-07 16:13:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e75a564-4ede-4d82-92fb-ba9a7c8e6a65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-3978582845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 16:13:14 +0000 UTC FinishedAt: 2026-09-07 16:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 16:13:14 +0000 UTC FinishedAt: 2026-09-07 16:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 16:13:14 +0000 UTC FinishedAt: 2026-09-07 16:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 16:13:14 +0000 UTC FinishedAt: 2026-09-07 16:29:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f5d0397-2f1d-465f-823c-633f2d8d9d96,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-workflow8svtk/series-workflow8svtk-convert-artifact-336718934/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": "97567650-f1c9-4f4b-adf8-71a990f1f76c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-1153864282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 16:13:14 +0000 UTC FinishedAt: 2026-09-07 16:29:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7f5d0397-2f1d-465f-823c-633f2d8d9d96,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-workflow8svtk/series-workflow8svtk-convert-artifact-336718934/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": "97567650-f1c9-4f4b-adf8-71a990f1f76c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-1153864282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 16:29:25 +0000 UTC FinishedAt: 2026-09-07 16:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 16:29:25 +0000 UTC FinishedAt: 2026-09-07 16:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 16:29:25 +0000 UTC FinishedAt: 2026-09-07 16:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 16:29:25 +0000 UTC FinishedAt: 2026-09-07 16:31:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97567650-f1c9-4f4b-adf8-71a990f1f76c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-1153864282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 19:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 19:34:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8e75a564-4ede-4d82-92fb-ba9a7c8e6a65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97567650-f1c9-4f4b-adf8-71a990f1f76c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-3978582845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-1153864282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 16:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 16:31:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-convert-artifact-3776951035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 16:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 16:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 16:31:22 +0000 UTC FinishedAt: 2026-09-07 16:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 16:31:32 +0000 UTC FinishedAt: 2026-09-07 19:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8svtk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_skb_change_tail","sk_skb_change_tail","bpf_skb_trim_rcsum","__bpf_skb_min_len"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"118286b8-5fe7-4965-95b2-97bdd03545d7","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 16:31:32 +0000 UTC FinishedAt: 2026-09-07 19:34:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e75a564-4ede-4d82-92fb-ba9a7c8e6a65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97567650-f1c9-4f4b-adf8-71a990f1f76c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-3978582845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-build-action-1153864282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8svtk/series-workflow8svtk-convert-artifact-3776951035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}